{"version":3,"file":"index.mjs","sources":["../../src/extensions/sentry-integration.ts","../../../posthog-core/src/vendor/uuidv7.ts","../../src/extensions/error-tracking/autocapture.ts","../../src/extensions/error-tracking/chunk-ids.ts","../../src/extensions/error-tracking/type-checking.ts","../../src/extensions/error-tracking/error-conversion.ts","../../src/extensions/error-tracking/index.ts","../../src/extensions/express.ts","../../src/extensions/error-tracking/get-module.node.ts","../../src/extensions/error-tracking/reduceable-cache.ts","../../src/extensions/error-tracking/context-lines.node.ts","../../../posthog-core/src/types.ts","../../../posthog-core/src/featureFlagUtils.ts","../../../posthog-core/src/utils.ts","../../../posthog-core/src/gzip.ts","../../../posthog-core/src/eventemitter.ts","../../../posthog-core/src/index.ts","../../src/extensions/feature-flags/lazy.ts","../../src/extensions/feature-flags/crypto-helpers.ts","../../src/extensions/feature-flags/crypto.ts","../../src/extensions/feature-flags/feature-flags.ts","../../src/storage-memory.ts","../../src/client.ts","../../src/extensions/error-tracking/stack-parser.ts","../../src/entrypoints/index.node.ts"],"sourcesContent":["/**\n * @file Adapted from [posthog-js](https://github.com/PostHog/posthog-js/blob/8157df935a4d0e71d2fefef7127aa85ee51c82d1/src/extensions/sentry-integration.ts) with modifications for the Node SDK.\n */\n/**\n * Integrate Sentry with PostHog. This will add a direct link to the person in Sentry, and an $exception event in PostHog.\n *\n * ### Usage\n *\n *     Sentry.init({\n *          dsn: 'https://example',\n *          integrations: [\n *              new PostHogSentryIntegration(posthog)\n *          ]\n *     })\n *\n *     Sentry.setTag(PostHogSentryIntegration.POSTHOG_ID_TAG, 'some distinct id');\n *\n * @param {Object} [posthog] The posthog object\n * @param {string} [organization] Optional: The Sentry organization, used to send a direct link from PostHog to Sentry\n * @param {Number} [projectId] Optional: The Sentry project id, used to send a direct link from PostHog to Sentry\n * @param {string} [prefix] Optional: Url of a self-hosted sentry instance (default: https://sentry.io/organizations/)\n * @param {SeverityLevel[] | '*'} [severityAllowList] Optional: send events matching the provided levels. Use '*' to send all events (default: ['error'])\n */\n\nimport { SeverityLevel } from './error-tracking/types'\nimport { type PostHogBackendClient } from '../client'\n\n// NOTE - we can't import from @sentry/types because it changes frequently and causes clashes\n// We only use a small subset of the types, so we can just define the integration overall and use any for the rest\n\n// import {\n//     Event as _SentryEvent,\n//     EventProcessor as _SentryEventProcessor,\n//     Exception as _SentryException,\n//     Hub as _SentryHub,\n//     Primitive as _SentryPrimitive,\n//     Integration as _SentryIntegration,\n//     IntegrationClass as _SentryIntegrationClass,\n// } from '@sentry/types'\n\n// Uncomment the above and comment the below to get type checking for development\n\ntype _SentryEvent = any\ntype _SentryEventProcessor = any\ntype _SentryException = any\ntype _SentryHub = any\ntype _SentryPrimitive = any\n\ninterface _SentryIntegration {\n  name: string\n  processEvent(event: _SentryEvent): _SentryEvent\n}\n\ninterface _SentryIntegrationClass {\n  name: string\n  setupOnce(addGlobalEventProcessor: (callback: _SentryEventProcessor) => void, getCurrentHub: () => _SentryHub): void\n}\n\ninterface SentryExceptionProperties {\n  $sentry_event_id?: string\n  $sentry_exception?: { values?: _SentryException[] }\n  $sentry_exception_message?: string\n  $sentry_exception_type?: string\n  $sentry_tags: { [key: string]: _SentryPrimitive }\n  $sentry_url?: string\n}\n\nexport type SentryIntegrationOptions = {\n  organization?: string\n  projectId?: number\n  prefix?: string\n  severityAllowList?: SeverityLevel[] | '*'\n}\n\nconst NAME = 'posthog-node'\n\nexport function createEventProcessor(\n  _posthog: PostHogBackendClient,\n  { organization, projectId, prefix, severityAllowList = ['error'] }: SentryIntegrationOptions = {}\n): (event: _SentryEvent) => _SentryEvent {\n  return (event) => {\n    const shouldProcessLevel = severityAllowList === '*' || severityAllowList.includes(event.level)\n    if (!shouldProcessLevel) {\n      return event\n    }\n    if (!event.tags) {\n      event.tags = {}\n    }\n\n    // Get the PostHog user ID from a specific tag, which users can set on their Sentry scope as they need.\n    const userId = event.tags[PostHogSentryIntegration.POSTHOG_ID_TAG]\n    if (userId === undefined) {\n      // If we can't find a user ID, don't bother linking the event. We won't be able to send anything meaningful to PostHog without it.\n      return event\n    }\n\n    const uiHost = _posthog.options.host ?? 'https://us.i.posthog.com'\n    const personUrl = new URL(`/project/${_posthog.apiKey}/person/${userId}`, uiHost).toString()\n\n    event.tags['PostHog Person URL'] = personUrl\n\n    const exceptions: _SentryException[] = event.exception?.values || []\n\n    const exceptionList = exceptions.map((exception) => ({\n      ...exception,\n      stacktrace: exception.stacktrace\n        ? {\n            ...exception.stacktrace,\n            type: 'raw',\n            frames: (exception.stacktrace.frames || []).map((frame: any) => {\n              return { ...frame, platform: 'node:javascript' }\n            }),\n          }\n        : undefined,\n    }))\n\n    const properties: SentryExceptionProperties & {\n      // two properties added to match any exception auto-capture\n      // added manually to avoid any dependency on the lazily loaded content\n      $exception_message: any\n      $exception_type: any\n      $exception_list: any\n      $exception_personURL: string\n      $exception_level: SeverityLevel\n    } = {\n      // PostHog Exception Properties,\n      $exception_message: exceptions[0]?.value || event.message,\n      $exception_type: exceptions[0]?.type,\n      $exception_personURL: personUrl,\n      $exception_level: event.level,\n      $exception_list: exceptionList,\n      // Sentry Exception Properties\n      $sentry_event_id: event.event_id,\n      $sentry_exception: event.exception,\n      $sentry_exception_message: exceptions[0]?.value || event.message,\n      $sentry_exception_type: exceptions[0]?.type,\n      $sentry_tags: event.tags,\n    }\n\n    if (organization && projectId) {\n      properties['$sentry_url'] =\n        (prefix || 'https://sentry.io/organizations/') +\n        organization +\n        '/issues/?project=' +\n        projectId +\n        '&query=' +\n        event.event_id\n    }\n\n    _posthog.capture({ event: '$exception', distinctId: userId, properties })\n\n    return event\n  }\n}\n\n// V8 integration - function based\nexport function sentryIntegration(\n  _posthog: PostHogBackendClient,\n  options?: SentryIntegrationOptions\n): _SentryIntegration {\n  const processor = createEventProcessor(_posthog, options)\n  return {\n    name: NAME,\n    processEvent(event) {\n      return processor(event)\n    },\n  }\n}\n\n// V7 integration - class based\nexport class PostHogSentryIntegration implements _SentryIntegrationClass {\n  public readonly name = NAME\n\n  public static readonly POSTHOG_ID_TAG = 'posthog_distinct_id'\n\n  public setupOnce: (\n    addGlobalEventProcessor: (callback: _SentryEventProcessor) => void,\n    getCurrentHub: () => _SentryHub\n  ) => void\n\n  constructor(\n    _posthog: PostHogBackendClient,\n    organization?: string,\n    prefix?: string,\n    severityAllowList?: SeverityLevel[] | '*'\n  ) {\n    // setupOnce gets called by Sentry when it intializes the plugin\n    this.name = NAME\n    this.setupOnce = function (\n      addGlobalEventProcessor: (callback: _SentryEventProcessor) => void,\n      getCurrentHub: () => _SentryHub\n    ) {\n      const projectId = getCurrentHub()?.getClient()?.getDsn()?.projectId\n      addGlobalEventProcessor(\n        createEventProcessor(_posthog, {\n          organization,\n          projectId,\n          prefix,\n          severityAllowList,\n        })\n      )\n    }\n  }\n}\n","// vendor from: https://github.com/LiosK/uuidv7/blob/f30b7a7faff73afbce0b27a46c638310f96912ba/src/index.ts\n// https://github.com/LiosK/uuidv7#license\n\n/**\n * uuidv7: An experimental implementation of the proposed UUID Version 7\n *\n * @license Apache-2.0\n * @copyright 2021-2023 LiosK\n * @packageDocumentation\n */\n\nconst DIGITS = \"0123456789abcdef\";\n\n/** Represents a UUID as a 16-byte byte array. */\nexport class UUID {\n  /** @param bytes - The 16-byte byte array representation. */\n  private constructor(readonly bytes: Readonly<Uint8Array>) {}\n\n  /**\n   * Creates an object from the internal representation, a 16-byte byte array\n   * containing the binary UUID representation in the big-endian byte order.\n   *\n   * This method does NOT shallow-copy the argument, and thus the created object\n   * holds the reference to the underlying buffer.\n   *\n   * @throws TypeError if the length of the argument is not 16.\n   */\n  static ofInner(bytes: Readonly<Uint8Array>): UUID {\n    if (bytes.length !== 16) {\n      throw new TypeError(\"not 128-bit length\");\n    } else {\n      return new UUID(bytes);\n    }\n  }\n\n  /**\n   * Builds a byte array from UUIDv7 field values.\n   *\n   * @param unixTsMs - A 48-bit `unix_ts_ms` field value.\n   * @param randA - A 12-bit `rand_a` field value.\n   * @param randBHi - The higher 30 bits of 62-bit `rand_b` field value.\n   * @param randBLo - The lower 32 bits of 62-bit `rand_b` field value.\n   * @throws RangeError if any field value is out of the specified range.\n   */\n  static fromFieldsV7(\n    unixTsMs: number,\n    randA: number,\n    randBHi: number,\n    randBLo: number,\n  ): UUID {\n    if (\n      !Number.isInteger(unixTsMs) ||\n      !Number.isInteger(randA) ||\n      !Number.isInteger(randBHi) ||\n      !Number.isInteger(randBLo) ||\n      unixTsMs < 0 ||\n      randA < 0 ||\n      randBHi < 0 ||\n      randBLo < 0 ||\n      unixTsMs > 0xffff_ffff_ffff ||\n      randA > 0xfff ||\n      randBHi > 0x3fff_ffff ||\n      randBLo > 0xffff_ffff\n    ) {\n      throw new RangeError(\"invalid field value\");\n    }\n\n    const bytes = new Uint8Array(16);\n    bytes[0] = unixTsMs / 2 ** 40;\n    bytes[1] = unixTsMs / 2 ** 32;\n    bytes[2] = unixTsMs / 2 ** 24;\n    bytes[3] = unixTsMs / 2 ** 16;\n    bytes[4] = unixTsMs / 2 ** 8;\n    bytes[5] = unixTsMs;\n    bytes[6] = 0x70 | (randA >>> 8);\n    bytes[7] = randA;\n    bytes[8] = 0x80 | (randBHi >>> 24);\n    bytes[9] = randBHi >>> 16;\n    bytes[10] = randBHi >>> 8;\n    bytes[11] = randBHi;\n    bytes[12] = randBLo >>> 24;\n    bytes[13] = randBLo >>> 16;\n    bytes[14] = randBLo >>> 8;\n    bytes[15] = randBLo;\n    return new UUID(bytes);\n  }\n\n  /**\n   * Builds a byte array from a string representation.\n   *\n   * This method accepts the following formats:\n   *\n   * - 32-digit hexadecimal format without hyphens: `0189dcd553117d408db09496a2eef37b`\n   * - 8-4-4-4-12 hyphenated format: `0189dcd5-5311-7d40-8db0-9496a2eef37b`\n   * - Hyphenated format with surrounding braces: `{0189dcd5-5311-7d40-8db0-9496a2eef37b}`\n   * - RFC 4122 URN format: `urn:uuid:0189dcd5-5311-7d40-8db0-9496a2eef37b`\n   *\n   * Leading and trailing whitespaces represents an error.\n   *\n   * @throws SyntaxError if the argument could not parse as a valid UUID string.\n   */\n  static parse(uuid: string): UUID {\n    let hex: string | undefined = undefined;\n    switch (uuid.length) {\n      case 32:\n        hex = /^[0-9a-f]{32}$/i.exec(uuid)?.[0];\n        break;\n      case 36:\n        hex =\n          /^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n            .exec(uuid)\n            ?.slice(1, 6)\n            .join(\"\");\n        break;\n      case 38:\n        hex =\n          /^\\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\\}$/i\n            .exec(uuid)\n            ?.slice(1, 6)\n            .join(\"\");\n        break;\n      case 45:\n        hex =\n          /^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i\n            .exec(uuid)\n            ?.slice(1, 6)\n            .join(\"\");\n        break;\n      default:\n        break;\n    }\n\n    if (hex) {\n      const inner = new Uint8Array(16);\n      for (let i = 0; i < 16; i += 4) {\n        const n = parseInt(hex.substring(2 * i, 2 * i + 8), 16);\n        inner[i + 0] = n >>> 24;\n        inner[i + 1] = n >>> 16;\n        inner[i + 2] = n >>> 8;\n        inner[i + 3] = n;\n      }\n      return new UUID(inner);\n    } else {\n      throw new SyntaxError(\"could not parse UUID string\");\n    }\n  }\n\n  /**\n   * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n   * (`0189dcd5-5311-7d40-8db0-9496a2eef37b`).\n   */\n  toString(): string {\n    let text = \"\";\n    for (let i = 0; i < this.bytes.length; i++) {\n      text += DIGITS.charAt(this.bytes[i] >>> 4);\n      text += DIGITS.charAt(this.bytes[i] & 0xf);\n      if (i === 3 || i === 5 || i === 7 || i === 9) {\n        text += \"-\";\n      }\n    }\n    return text;\n  }\n\n  /**\n   * @returns The 32-digit hexadecimal representation without hyphens\n   * (`0189dcd553117d408db09496a2eef37b`).\n   */\n  toHex(): string {\n    let text = \"\";\n    for (let i = 0; i < this.bytes.length; i++) {\n      text += DIGITS.charAt(this.bytes[i] >>> 4);\n      text += DIGITS.charAt(this.bytes[i] & 0xf);\n    }\n    return text;\n  }\n\n  /** @returns The 8-4-4-4-12 canonical hexadecimal string representation. */\n  toJSON(): string {\n    return this.toString();\n  }\n\n  /**\n   * Reports the variant field value of the UUID or, if appropriate, \"NIL\" or\n   * \"MAX\".\n   *\n   * For convenience, this method reports \"NIL\" or \"MAX\" if `this` represents\n   * the Nil or Max UUID, although the Nil and Max UUIDs are technically\n   * subsumed under the variants `0b0` and `0b111`, respectively.\n   */\n  getVariant():\n    | \"VAR_0\"\n    | \"VAR_10\"\n    | \"VAR_110\"\n    | \"VAR_RESERVED\"\n    | \"NIL\"\n    | \"MAX\" {\n    const n = this.bytes[8] >>> 4;\n    if (n < 0) {\n      throw new Error(\"unreachable\");\n    } else if (n <= 0b0111) {\n      return this.bytes.every((e) => e === 0) ? \"NIL\" : \"VAR_0\";\n    } else if (n <= 0b1011) {\n      return \"VAR_10\";\n    } else if (n <= 0b1101) {\n      return \"VAR_110\";\n    } else if (n <= 0b1111) {\n      return this.bytes.every((e) => e === 0xff) ? \"MAX\" : \"VAR_RESERVED\";\n    } else {\n      throw new Error(\"unreachable\");\n    }\n  }\n\n  /**\n   * Returns the version field value of the UUID or `undefined` if the UUID does\n   * not have the variant field value of `0b10`.\n   */\n  getVersion(): number | undefined {\n    return this.getVariant() === \"VAR_10\" ? this.bytes[6] >>> 4 : undefined;\n  }\n\n  /** Creates an object from `this`. */\n  clone(): UUID {\n    return new UUID(this.bytes.slice(0));\n  }\n\n  /** Returns true if `this` is equivalent to `other`. */\n  equals(other: UUID): boolean {\n    return this.compareTo(other) === 0;\n  }\n\n  /**\n   * Returns a negative integer, zero, or positive integer if `this` is less\n   * than, equal to, or greater than `other`, respectively.\n   */\n  compareTo(other: UUID): number {\n    for (let i = 0; i < 16; i++) {\n      const diff = this.bytes[i] - other.bytes[i];\n      if (diff !== 0) {\n        return Math.sign(diff);\n      }\n    }\n    return 0;\n  }\n}\n\n/**\n * Encapsulates the monotonic counter state.\n *\n * This class provides APIs to utilize a separate counter state from that of the\n * global generator used by {@link uuidv7} and {@link uuidv7obj}. In addition to\n * the default {@link generate} method, this class has {@link generateOrAbort}\n * that is useful to absolutely guarantee the monotonically increasing order of\n * generated UUIDs. See their respective documentation for details.\n */\nexport class V7Generator {\n  private timestamp = 0;\n  private counter = 0;\n\n  /** The random number generator used by the generator. */\n  private readonly random: { nextUint32(): number };\n\n  /**\n   * Creates a generator object with the default random number generator, or\n   * with the specified one if passed as an argument. The specified random\n   * number generator should be cryptographically strong and securely seeded.\n   */\n  constructor(randomNumberGenerator?: {\n    /** Returns a 32-bit random unsigned integer. */\n    nextUint32(): number;\n  }) {\n    this.random = randomNumberGenerator ?? getDefaultRandom();\n  }\n\n  /**\n   * Generates a new UUIDv7 object from the current timestamp, or resets the\n   * generator upon significant timestamp rollback.\n   *\n   * This method returns a monotonically increasing UUID by reusing the previous\n   * timestamp even if the up-to-date timestamp is smaller than the immediately\n   * preceding UUID's. However, when such a clock rollback is considered\n   * significant (i.e., by more than ten seconds), this method resets the\n   * generator and returns a new UUID based on the given timestamp, breaking the\n   * increasing order of UUIDs.\n   *\n   * See {@link generateOrAbort} for the other mode of generation and\n   * {@link generateOrResetCore} for the low-level primitive.\n   */\n  generate(): UUID {\n    return this.generateOrResetCore(Date.now(), 10_000);\n  }\n\n  /**\n   * Generates a new UUIDv7 object from the current timestamp, or returns\n   * `undefined` upon significant timestamp rollback.\n   *\n   * This method returns a monotonically increasing UUID by reusing the previous\n   * timestamp even if the up-to-date timestamp is smaller than the immediately\n   * preceding UUID's. However, when such a clock rollback is considered\n   * significant (i.e., by more than ten seconds), this method aborts and\n   * returns `undefined` immediately.\n   *\n   * See {@link generate} for the other mode of generation and\n   * {@link generateOrAbortCore} for the low-level primitive.\n   */\n  generateOrAbort(): UUID | undefined {\n    return this.generateOrAbortCore(Date.now(), 10_000);\n  }\n\n  /**\n   * Generates a new UUIDv7 object from the `unixTsMs` passed, or resets the\n   * generator upon significant timestamp rollback.\n   *\n   * This method is equivalent to {@link generate} except that it takes a custom\n   * timestamp and clock rollback allowance.\n   *\n   * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n   * considered significant. A suggested value is `10_000` (milliseconds).\n   * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n   */\n  generateOrResetCore(unixTsMs: number, rollbackAllowance: number): UUID {\n    let value = this.generateOrAbortCore(unixTsMs, rollbackAllowance);\n    if (value === undefined) {\n      // reset state and resume\n      this.timestamp = 0;\n      value = this.generateOrAbortCore(unixTsMs, rollbackAllowance)!;\n    }\n    return value;\n  }\n\n  /**\n   * Generates a new UUIDv7 object from the `unixTsMs` passed, or returns\n   * `undefined` upon significant timestamp rollback.\n   *\n   * This method is equivalent to {@link generateOrAbort} except that it takes a\n   * custom timestamp and clock rollback allowance.\n   *\n   * @param rollbackAllowance - The amount of `unixTsMs` rollback that is\n   * considered significant. A suggested value is `10_000` (milliseconds).\n   * @throws RangeError if `unixTsMs` is not a 48-bit positive integer.\n   */\n  generateOrAbortCore(\n    unixTsMs: number,\n    rollbackAllowance: number,\n  ): UUID | undefined {\n    const MAX_COUNTER = 0x3ff_ffff_ffff;\n\n    if (\n      !Number.isInteger(unixTsMs) ||\n      unixTsMs < 1 ||\n      unixTsMs > 0xffff_ffff_ffff\n    ) {\n      throw new RangeError(\"`unixTsMs` must be a 48-bit positive integer\");\n    } else if (rollbackAllowance < 0 || rollbackAllowance > 0xffff_ffff_ffff) {\n      throw new RangeError(\"`rollbackAllowance` out of reasonable range\");\n    }\n\n    if (unixTsMs > this.timestamp) {\n      this.timestamp = unixTsMs;\n      this.resetCounter();\n    } else if (unixTsMs + rollbackAllowance >= this.timestamp) {\n      // go on with previous timestamp if new one is not much smaller\n      this.counter++;\n      if (this.counter > MAX_COUNTER) {\n        // increment timestamp at counter overflow\n        this.timestamp++;\n        this.resetCounter();\n      }\n    } else {\n      // abort if clock went backwards to unbearable extent\n      return undefined;\n    }\n\n    return UUID.fromFieldsV7(\n      this.timestamp,\n      Math.trunc(this.counter / 2 ** 30),\n      this.counter & (2 ** 30 - 1),\n      this.random.nextUint32(),\n    );\n  }\n\n  /** Initializes the counter at a 42-bit random integer. */\n  private resetCounter(): void {\n    this.counter =\n      this.random.nextUint32() * 0x400 + (this.random.nextUint32() & 0x3ff);\n  }\n\n  /**\n   * Generates a new UUIDv4 object utilizing the random number generator inside.\n   *\n   * @internal\n   */\n  generateV4(): UUID {\n    const bytes = new Uint8Array(\n      Uint32Array.of(\n        this.random.nextUint32(),\n        this.random.nextUint32(),\n        this.random.nextUint32(),\n        this.random.nextUint32(),\n      ).buffer,\n    );\n    bytes[6] = 0x40 | (bytes[6] >>> 4);\n    bytes[8] = 0x80 | (bytes[8] >>> 2);\n    return UUID.ofInner(bytes);\n  }\n}\n\n/** A global flag to force use of cryptographically strong RNG. */\n// declare const UUIDV7_DENY_WEAK_RNG: boolean;\n\n/** Returns the default random number generator available in the environment. */\nconst getDefaultRandom = (): { nextUint32(): number } => {\n// fix: crypto isn't available in react-native, always use Math.random\n\n//   // detect Web Crypto API\n//   if (\n//     typeof crypto !== \"undefined\" &&\n//     typeof crypto.getRandomValues !== \"undefined\"\n//   ) {\n//     return new BufferedCryptoRandom();\n//   } else {\n//     // fall back on Math.random() unless the flag is set to true\n//     if (typeof UUIDV7_DENY_WEAK_RNG !== \"undefined\" && UUIDV7_DENY_WEAK_RNG) {\n//       throw new Error(\"no cryptographically strong RNG available\");\n//     }\n//     return {\n//       nextUint32: (): number =>\n//         Math.trunc(Math.random() * 0x1_0000) * 0x1_0000 +\n//         Math.trunc(Math.random() * 0x1_0000),\n//     };\n//   }\n  return {\n    nextUint32: (): number =>\n      Math.trunc(Math.random() * 0x1_0000) * 0x1_0000 +\n      Math.trunc(Math.random() * 0x1_0000),\n  };\n};\n\n// /**\n//  * Wraps `crypto.getRandomValues()` to enable buffering; this uses a small\n//  * buffer by default to avoid both unbearable throughput decline in some\n//  * environments and the waste of time and space for unused values.\n//  */\n// class BufferedCryptoRandom {\n//   private readonly buffer = new Uint32Array(8);\n//   private cursor = 0xffff;\n//   nextUint32(): number {\n//     if (this.cursor >= this.buffer.length) {\n//       crypto.getRandomValues(this.buffer);\n//       this.cursor = 0;\n//     }\n//     return this.buffer[this.cursor++];\n//   }\n// }\n\nlet defaultGenerator: V7Generator | undefined;\n\n/**\n * Generates a UUIDv7 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nexport const uuidv7 = (): string => uuidv7obj().toString();\n\n/** Generates a UUIDv7 object. */\nexport const uuidv7obj = (): UUID =>\n  (defaultGenerator || (defaultGenerator = new V7Generator())).generate();\n\n/**\n * Generates a UUIDv4 string.\n *\n * @returns The 8-4-4-4-12 canonical hexadecimal string representation\n * (\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\").\n */\nexport const uuidv4 = (): string => uuidv4obj().toString();\n\n/** Generates a UUIDv4 object. */\nexport const uuidv4obj = (): UUID =>\n  (defaultGenerator || (defaultGenerator = new V7Generator())).generateV4();\n","// Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry\n// Licensed under the MIT License\n\nimport { EventHint } from './types'\n\ntype ErrorHandler = { _posthogErrorHandler: boolean } & ((error: Error) => void)\n\nfunction makeUncaughtExceptionHandler(\n  captureFn: (exception: Error, hint: EventHint) => void,\n  onFatalFn: () => void\n): ErrorHandler {\n  let calledFatalError: boolean = false\n\n  return Object.assign(\n    (error: Error): void => {\n      // Attaching a listener to `uncaughtException` will prevent the node process from exiting. We generally do not\n      // want to alter this behaviour so we check for other listeners that users may have attached themselves and adjust\n      // exit behaviour of the SDK accordingly:\n      // - If other listeners are attached, do not exit.\n      // - If the only listener attached is ours, exit.\n      const userProvidedListenersCount = global.process.listeners('uncaughtException').filter((listener) => {\n        // There are 2 listeners we ignore:\n        return (\n          // as soon as we're using domains this listener is attached by node itself\n          listener.name !== 'domainUncaughtExceptionClear' &&\n          // the handler we register in this integration\n          (listener as ErrorHandler)._posthogErrorHandler !== true\n        )\n      }).length\n\n      const processWouldExit = userProvidedListenersCount === 0\n\n      captureFn(error, {\n        mechanism: {\n          type: 'onuncaughtexception',\n          handled: false,\n        },\n      })\n\n      if (!calledFatalError && processWouldExit) {\n        calledFatalError = true\n        onFatalFn()\n      }\n    },\n    { _posthogErrorHandler: true }\n  )\n}\n\nexport function addUncaughtExceptionListener(\n  captureFn: (exception: Error, hint: EventHint) => void,\n  onFatalFn: () => void\n): void {\n  global.process.on('uncaughtException', makeUncaughtExceptionHandler(captureFn, onFatalFn))\n}\n\nexport function addUnhandledRejectionListener(captureFn: (exception: unknown, hint: EventHint) => void): void {\n  global.process.on('unhandledRejection', (reason: unknown) => {\n    captureFn(reason, {\n      mechanism: {\n        type: 'onunhandledrejection',\n        handled: false,\n      },\n    })\n  })\n}\n","// Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry\n// Licensed under the MIT License\n\nimport type { StackParser } from './types'\n\ntype StackString = string\ntype CachedResult = [string, string]\n\ntype ChunkIdMapType = Record<string, string>\n\nlet parsedStackResults: Record<StackString, CachedResult> | undefined\nlet lastKeysCount: number | undefined\nlet cachedFilenameChunkIds: ChunkIdMapType | undefined\n\nexport function getFilenameToChunkIdMap(stackParser: StackParser): ChunkIdMapType {\n  const chunkIdMap = (globalThis as any)._posthogChunkIds as ChunkIdMapType | undefined\n  if (!chunkIdMap) {\n    console.error('No chunk id map found')\n    return {}\n  }\n\n  const chunkIdKeys = Object.keys(chunkIdMap)\n\n  if (cachedFilenameChunkIds && chunkIdKeys.length === lastKeysCount) {\n    return cachedFilenameChunkIds\n  }\n\n  lastKeysCount = chunkIdKeys.length\n\n  cachedFilenameChunkIds = chunkIdKeys.reduce<Record<string, string>>((acc, stackKey) => {\n    if (!parsedStackResults) {\n      parsedStackResults = {}\n    }\n\n    const result = parsedStackResults[stackKey]\n\n    if (result) {\n      acc[result[0]] = result[1]\n    } else {\n      const parsedStack = stackParser(stackKey)\n\n      for (let i = parsedStack.length - 1; i >= 0; i--) {\n        const stackFrame = parsedStack[i]\n        const filename = stackFrame?.filename\n        const chunkId = chunkIdMap[stackKey]\n\n        if (filename && chunkId) {\n          acc[filename] = chunkId\n          parsedStackResults[stackKey] = [filename, chunkId]\n          break\n        }\n      }\n    }\n\n    return acc\n  }, {})\n\n  return cachedFilenameChunkIds\n}\n","// Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry\n// Licensed under the MIT License\n\nimport { PolymorphicEvent } from './types'\n\nexport function isEvent(candidate: unknown): candidate is PolymorphicEvent {\n  return typeof Event !== 'undefined' && isInstanceOf(candidate, Event)\n}\n\nexport function isPlainObject(candidate: unknown): candidate is Record<string, unknown> {\n  return isBuiltin(candidate, 'Object')\n}\n\nexport function isError(candidate: unknown): candidate is Error {\n  switch (Object.prototype.toString.call(candidate)) {\n    case '[object Error]':\n    case '[object Exception]':\n    case '[object DOMException]':\n    case '[object WebAssembly.Exception]':\n      return true\n    default:\n      return isInstanceOf(candidate, Error)\n  }\n}\n\nexport function isInstanceOf(candidate: unknown, base: any): boolean {\n  try {\n    return candidate instanceof base\n  } catch {\n    return false\n  }\n}\n\nexport function isErrorEvent(event: unknown): boolean {\n  return isBuiltin(event, 'ErrorEvent')\n}\n\nexport function isBuiltin(candidate: unknown, className: string): boolean {\n  return Object.prototype.toString.call(candidate) === `[object ${className}]`\n}\n","// Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry\n// Licensed under the MIT License\n\nimport { getFilenameToChunkIdMap } from './chunk-ids'\nimport { isError, isErrorEvent, isEvent, isPlainObject } from './type-checking'\nimport {\n  ErrorProperties,\n  EventHint,\n  Exception,\n  Mechanism,\n  StackFrame,\n  StackFrameModifierFn,\n  StackParser,\n} from './types'\n\nexport async function propertiesFromUnknownInput(\n  stackParser: StackParser,\n  frameModifiers: StackFrameModifierFn[],\n  input: unknown,\n  hint?: EventHint\n): Promise<ErrorProperties> {\n  const providedMechanism = hint && hint.mechanism\n  const mechanism = providedMechanism || {\n    handled: true,\n    type: 'generic',\n  }\n\n  const errorList = getErrorList(mechanism, input, hint)\n  const exceptionList = await Promise.all(\n    errorList.map(async (error) => {\n      const exception = await exceptionFromError(stackParser, frameModifiers, error)\n      exception.value = exception.value || ''\n      exception.type = exception.type || 'Error'\n      exception.mechanism = mechanism\n      return exception\n    })\n  )\n\n  const properties = { $exception_list: exceptionList }\n  return properties\n}\n\n// Flatten error causes into a list of errors\n// See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause\nfunction getErrorList(mechanism: Mechanism, input: unknown, hint?: EventHint): Error[] {\n  const error = getError(mechanism, input, hint)\n  if (error.cause) {\n    return [error, ...getErrorList(mechanism, error.cause, hint)]\n  }\n  return [error]\n}\n\nfunction getError(mechanism: Mechanism, exception: unknown, hint?: EventHint): Error {\n  if (isError(exception)) {\n    return exception\n  }\n\n  mechanism.synthetic = true\n\n  if (isPlainObject(exception)) {\n    const errorFromProp = getErrorPropertyFromObject(exception)\n    if (errorFromProp) {\n      return errorFromProp\n    }\n\n    const message = getMessageForObject(exception)\n    const ex = hint?.syntheticException || new Error(message)\n    ex.message = message\n\n    return ex\n  }\n\n  // This handles when someone does: `throw \"something awesome\";`\n  // We use synthesized Error here so we can extract a (rough) stack trace.\n  const ex = hint?.syntheticException || new Error(exception as string)\n  ex.message = `${exception}`\n\n  return ex\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj: Record<string, unknown>): Error | undefined {\n  for (const prop in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n      const value = obj[prop]\n      if (isError(value)) {\n        return value\n      }\n    }\n  }\n\n  return undefined\n}\n\nfunction getMessageForObject(exception: Record<string, unknown>): string {\n  if ('name' in exception && typeof exception.name === 'string') {\n    let message = `'${exception.name}' captured as exception`\n\n    if ('message' in exception && typeof exception.message === 'string') {\n      message += ` with message '${exception.message}'`\n    }\n\n    return message\n  } else if ('message' in exception && typeof exception.message === 'string') {\n    return exception.message\n  }\n\n  const keys = extractExceptionKeysForMessage(exception)\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as exception with message \\`${exception.message}\\``\n  }\n\n  const className = getObjectClassName(exception)\n\n  return `${className && className !== 'Object' ? `'${className}'` : 'Object'} captured as exception with keys: ${keys}`\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n  try {\n    const prototype: unknown | null = Object.getPrototypeOf(obj)\n    return prototype ? prototype.constructor.name : undefined\n  } catch (e) {\n    // ignore errors here\n  }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength: number = 40): string {\n  const keys = Object.keys(convertToPlainObject(exception))\n  keys.sort()\n\n  const firstKey = keys[0]\n\n  if (!firstKey) {\n    return '[object has no keys]'\n  }\n\n  if (firstKey.length >= maxLength) {\n    return truncate(firstKey, maxLength)\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const serialized = keys.slice(0, includedKeys).join(', ')\n    if (serialized.length > maxLength) {\n      continue\n    }\n    if (includedKeys === keys.length) {\n      return serialized\n    }\n    return truncate(serialized, maxLength)\n  }\n\n  return ''\n}\n\nfunction truncate(str: string, max: number = 0): string {\n  if (typeof str !== 'string' || max === 0) {\n    return str\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argument itself, when value is neither an Event nor\n *  an Error.\n */\nfunction convertToPlainObject<V>(value: V):\n  | {\n      [ownProps: string]: unknown\n      type: string\n      target: string\n      currentTarget: string\n      detail?: unknown\n    }\n  | {\n      [ownProps: string]: unknown\n      message: string\n      name: string\n      stack?: string\n    }\n  | V {\n  if (isError(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value),\n    }\n  } else if (isEvent(value)) {\n    const newObj: {\n      [ownProps: string]: unknown\n      type: string\n      target: string\n      currentTarget: string\n      detail?: unknown\n    } = {\n      type: value.type,\n      target: serializeEventTarget(value.target),\n      currentTarget: serializeEventTarget(value.currentTarget),\n      ...getOwnProperties(value),\n    }\n\n    // TODO: figure out why this fails typing (I think CustomEvent is only supported in Node 19 onwards)\n    // if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n    //   newObj.detail = (value as unknown as CustomEvent).detail\n    // }\n\n    return newObj\n  } else {\n    return value\n  }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj: unknown): { [key: string]: unknown } {\n  if (typeof obj === 'object' && obj !== null) {\n    const extractedProps: { [key: string]: unknown } = {}\n    for (const property in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, property)) {\n        extractedProps[property] = (obj as Record<string, unknown>)[property]\n      }\n    }\n    return extractedProps\n  } else {\n    return {}\n  }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target: unknown): string {\n  try {\n    return Object.prototype.toString.call(target)\n  } catch (_oO) {\n    return '<unknown>'\n  }\n}\n\n/**\n * Extracts stack frames from the error and builds an Exception\n */\nasync function exceptionFromError(\n  stackParser: StackParser,\n  frameModifiers: StackFrameModifierFn[],\n  error: Error\n): Promise<Exception> {\n  const exception: Exception = {\n    type: error.name || error.constructor.name,\n    value: error.message,\n  }\n\n  let frames = parseStackFrames(stackParser, error)\n\n  for (const modifier of frameModifiers) {\n    frames = await modifier(frames)\n  }\n\n  if (frames.length) {\n    exception.stacktrace = { frames, type: 'raw' }\n  }\n\n  return exception\n}\n\n/**\n * Extracts stack frames from the error.stack string\n */\nfunction parseStackFrames(stackParser: StackParser, error: Error): StackFrame[] {\n  return applyChunkIds(stackParser(error.stack || '', 1), stackParser)\n}\n\nexport function applyChunkIds(frames: StackFrame[], parser: StackParser): StackFrame[] {\n  const filenameChunkIdMap = getFilenameToChunkIdMap(parser)\n  frames.forEach((frame) => {\n    if (frame.filename) {\n      frame.chunk_id = filenameChunkIdMap[frame.filename]\n    }\n  })\n\n  return frames\n}\n","import { EventHint, StackFrameModifierFn, StackParser } from './types'\nimport { addUncaughtExceptionListener, addUnhandledRejectionListener } from './autocapture'\nimport { PostHogBackendClient } from '../../client'\nimport { uuidv7 } from 'posthog-core/src/vendor/uuidv7'\nimport { propertiesFromUnknownInput } from './error-conversion'\nimport { EventMessage, PostHogOptions } from '../../types'\n\nconst SHUTDOWN_TIMEOUT = 2000\n\nexport default class ErrorTracking {\n  private client: PostHogBackendClient\n  private _exceptionAutocaptureEnabled: boolean\n\n  static stackParser: StackParser\n  static frameModifiers: StackFrameModifierFn[]\n\n  static async captureException(\n    client: PostHogBackendClient,\n    error: unknown,\n    hint: EventHint,\n    distinctId?: string,\n    additionalProperties?: Record<string | number, any>\n  ): Promise<void> {\n    const properties: EventMessage['properties'] = { ...additionalProperties }\n\n    // Given stateless nature of Node SDK we capture exceptions using personless processing when no\n    // user can be determined because a distinct_id is not provided e.g. exception autocapture\n    if (!distinctId) {\n      properties.$process_person_profile = false\n    }\n\n    const exceptionProperties = await propertiesFromUnknownInput(this.stackParser, this.frameModifiers, error, hint)\n\n    client.capture({\n      event: '$exception',\n      distinctId: distinctId || uuidv7(),\n      properties: {\n        ...exceptionProperties,\n        ...properties,\n      },\n    })\n  }\n\n  constructor(client: PostHogBackendClient, options: PostHogOptions) {\n    this.client = client\n    this._exceptionAutocaptureEnabled = options.enableExceptionAutocapture || false\n\n    this.startAutocaptureIfEnabled()\n  }\n\n  private startAutocaptureIfEnabled(): void {\n    if (this.isEnabled()) {\n      addUncaughtExceptionListener(this.onException.bind(this), this.onFatalError.bind(this))\n      addUnhandledRejectionListener(this.onException.bind(this))\n    }\n  }\n\n  private onException(exception: unknown, hint: EventHint): void {\n    ErrorTracking.captureException(this.client, exception, hint)\n  }\n\n  private async onFatalError(): Promise<void> {\n    await this.client.shutdown(SHUTDOWN_TIMEOUT)\n  }\n\n  isEnabled(): boolean {\n    return !this.client.isDisabled && this._exceptionAutocaptureEnabled\n  }\n}\n","import type * as http from 'node:http'\nimport { uuidv7 } from 'posthog-core/src/vendor/uuidv7'\nimport ErrorTracking from './error-tracking'\nimport { PostHogBackendClient } from '../client'\n\ntype ExpressMiddleware = (req: http.IncomingMessage, res: http.ServerResponse, next: () => void) => void\n\ntype ExpressErrorMiddleware = (\n  error: MiddlewareError,\n  req: http.IncomingMessage,\n  res: http.ServerResponse,\n  next: (error: MiddlewareError) => void\n) => void\n\ninterface MiddlewareError extends Error {\n  status?: number | string\n  statusCode?: number | string\n  status_code?: number | string\n  output?: {\n    statusCode?: number | string\n  }\n}\n\nexport function setupExpressErrorHandler(\n  _posthog: PostHogBackendClient,\n  app: {\n    use: (middleware: ExpressMiddleware | ExpressErrorMiddleware) => unknown\n  }\n): void {\n  app.use((error: MiddlewareError, _, __, next: (error: MiddlewareError) => void): void => {\n    const hint = { mechanism: { type: 'middleware', handled: false } }\n    // Given stateless nature of Node SDK we capture exceptions using personless processing\n    // when no user can be determined e.g. in the case of exception autocapture\n    ErrorTracking.captureException(_posthog, error, hint, uuidv7(), { $process_person_profile: false })\n    next(error)\n  })\n}\n","// Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry\n// Licensed under the MIT License\n\nimport { posix, sep, dirname } from 'path'\n\n/** Creates a function that gets the module name from a filename */\nexport function createGetModuleFromFilename(\n  basePath: string = process.argv[1] ? dirname(process.argv[1]) : process.cwd(),\n  isWindows: boolean = sep === '\\\\'\n): (filename: string | undefined) => string | undefined {\n  const normalizedBase = isWindows ? normalizeWindowsPath(basePath) : basePath\n\n  return (filename: string | undefined) => {\n    if (!filename) {\n      return\n    }\n\n    const normalizedFilename = isWindows ? normalizeWindowsPath(filename) : filename\n\n    // eslint-disable-next-line prefer-const\n    let { dir, base: file, ext } = posix.parse(normalizedFilename)\n\n    if (ext === '.js' || ext === '.mjs' || ext === '.cjs') {\n      file = file.slice(0, ext.length * -1)\n    }\n\n    // The file name might be URI-encoded which we want to decode to\n    // the original file name.\n    const decodedFile = decodeURIComponent(file)\n\n    if (!dir) {\n      // No dirname whatsoever\n      dir = '.'\n    }\n\n    const n = dir.lastIndexOf('/node_modules')\n    if (n > -1) {\n      return `${dir.slice(n + 14).replace(/\\//g, '.')}:${decodedFile}`\n    }\n\n    // Let's see if it's a part of the main module\n    // To be a part of main module, it has to share the same base\n    if (dir.startsWith(normalizedBase)) {\n      const moduleName = dir.slice(normalizedBase.length + 1).replace(/\\//g, '.')\n      return moduleName ? `${moduleName}:${decodedFile}` : decodedFile\n    }\n\n    return decodedFile\n  }\n}\n\n/** normalizes Windows paths */\nfunction normalizeWindowsPath(path: string): string {\n  return path\n    .replace(/^[A-Z]:/, '') // remove Windows-style prefix\n    .replace(/\\\\/g, '/') // replace all `\\` instances with `/`\n}\n","// Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry\n// Licensed under the MIT License\n\n/** A simple Least Recently Used map */\nexport class ReduceableCache<K, V> {\n  private readonly _cache: Map<K, V>\n\n  public constructor(private readonly _maxSize: number) {\n    this._cache = new Map<K, V>()\n  }\n\n  /** Get an entry or undefined if it was not in the cache. Re-inserts to update the recently used order */\n  public get(key: K): V | undefined {\n    const value = this._cache.get(key)\n    if (value === undefined) {\n      return undefined\n    }\n    // Remove and re-insert to update the order\n    this._cache.delete(key)\n    this._cache.set(key, value)\n    return value\n  }\n\n  /** Insert an entry and evict an older entry if we've reached maxSize */\n  public set(key: K, value: V): void {\n    this._cache.set(key, value)\n  }\n\n  /** Remove an entry and return the entry if it was in the cache */\n  public reduce(): void {\n    while (this._cache.size >= this._maxSize) {\n      const value = this._cache.keys().next().value\n      if (value) {\n        // keys() returns an iterator in insertion order so keys().next() gives us the oldest key\n        this._cache.delete(value)\n      }\n    }\n  }\n}\n","// Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry\n// Licensed under the MIT License\n\nimport { StackFrame } from './types'\nimport { ReduceableCache } from './reduceable-cache'\nimport { createReadStream } from 'node:fs'\nimport { createInterface } from 'node:readline'\n\nconst LRU_FILE_CONTENTS_CACHE = new ReduceableCache<string, Record<number, string>>(25)\nconst LRU_FILE_CONTENTS_FS_READ_FAILED = new ReduceableCache<string, 1>(20)\nconst DEFAULT_LINES_OF_CONTEXT = 7\n// Determines the upper bound of lineno/colno that we will attempt to read. Large colno values are likely to be\n// minified code while large lineno values are likely to be bundled code.\n// Exported for testing purposes.\nexport const MAX_CONTEXTLINES_COLNO: number = 1000\nexport const MAX_CONTEXTLINES_LINENO: number = 10000\n\ntype ReadlineRange = [start: number, end: number]\n\nexport async function addSourceContext(frames: StackFrame[]): Promise<StackFrame[]> {\n  // keep a lookup map of which files we've already enqueued to read,\n  // so we don't enqueue the same file multiple times which would cause multiple i/o reads\n  const filesToLines: Record<string, number[]> = {}\n\n  // Maps preserve insertion order, so we iterate in reverse, starting at the\n  // outermost frame and closer to where the exception has occurred (poor mans priority)\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame: StackFrame | undefined = frames[i]\n    const filename = frame?.filename\n\n    if (\n      !frame ||\n      typeof filename !== 'string' ||\n      typeof frame.lineno !== 'number' ||\n      shouldSkipContextLinesForFile(filename) ||\n      shouldSkipContextLinesForFrame(frame)\n    ) {\n      continue\n    }\n\n    const filesToLinesOutput = filesToLines[filename]\n    if (!filesToLinesOutput) {\n      filesToLines[filename] = []\n    }\n    filesToLines[filename].push(frame.lineno)\n  }\n\n  const files = Object.keys(filesToLines)\n  if (files.length == 0) {\n    return frames\n  }\n\n  const readlinePromises: Promise<void>[] = []\n  for (const file of files) {\n    // If we failed to read this before, dont try reading it again.\n    if (LRU_FILE_CONTENTS_FS_READ_FAILED.get(file)) {\n      continue\n    }\n\n    const filesToLineRanges = filesToLines[file]\n    if (!filesToLineRanges) {\n      continue\n    }\n\n    // Sort ranges so that they are sorted by line increasing order and match how the file is read.\n    filesToLineRanges.sort((a, b) => a - b)\n    // Check if the contents are already in the cache and if we can avoid reading the file again.\n    const ranges = makeLineReaderRanges(filesToLineRanges)\n    if (ranges.every((r) => rangeExistsInContentCache(file, r))) {\n      continue\n    }\n\n    const cache = emplace(LRU_FILE_CONTENTS_CACHE, file, {})\n    readlinePromises.push(getContextLinesFromFile(file, ranges, cache))\n  }\n\n  // The promise rejections are caught in order to prevent them from short circuiting Promise.all\n  await Promise.all(readlinePromises).catch(() => {})\n\n  // Perform the same loop as above, but this time we can assume all files are in the cache\n  // and attempt to add source context to frames.\n  if (frames && frames.length > 0) {\n    addSourceContextToFrames(frames, LRU_FILE_CONTENTS_CACHE)\n  }\n\n  // Once we're finished processing an exception reduce the files held in the cache\n  // so that we don't indefinetly increase the size of this map\n  LRU_FILE_CONTENTS_CACHE.reduce()\n\n  return frames\n}\n\n/**\n * Extracts lines from a file and stores them in a cache.\n */\nfunction getContextLinesFromFile(path: string, ranges: ReadlineRange[], output: Record<number, string>): Promise<void> {\n  return new Promise((resolve) => {\n    // It is important *not* to have any async code between createInterface and the 'line' event listener\n    // as it will cause the 'line' event to\n    // be emitted before the listener is attached.\n    const stream = createReadStream(path)\n    const lineReaded = createInterface({\n      input: stream,\n    })\n\n    // We need to explicitly destroy the stream to prevent memory leaks,\n    // removing the listeners on the readline interface is not enough.\n    // See: https://github.com/nodejs/node/issues/9002 and https://github.com/getsentry/sentry-javascript/issues/14892\n    function destroyStreamAndResolve(): void {\n      stream.destroy()\n      resolve()\n    }\n\n    // Init at zero and increment at the start of the loop because lines are 1 indexed.\n    let lineNumber = 0\n    let currentRangeIndex = 0\n    const range = ranges[currentRangeIndex]\n    if (range === undefined) {\n      // We should never reach this point, but if we do, we should resolve the promise to prevent it from hanging.\n      destroyStreamAndResolve()\n      return\n    }\n    let rangeStart = range[0]\n    let rangeEnd = range[1]\n\n    // We use this inside Promise.all, so we need to resolve the promise even if there is an error\n    // to prevent Promise.all from short circuiting the rest.\n    function onStreamError(): void {\n      // Mark file path as failed to read and prevent multiple read attempts.\n      LRU_FILE_CONTENTS_FS_READ_FAILED.set(path, 1)\n      lineReaded.close()\n      lineReaded.removeAllListeners()\n      destroyStreamAndResolve()\n    }\n\n    // We need to handle the error event to prevent the process from crashing in < Node 16\n    // https://github.com/nodejs/node/pull/31603\n    stream.on('error', onStreamError)\n    lineReaded.on('error', onStreamError)\n    lineReaded.on('close', destroyStreamAndResolve)\n\n    lineReaded.on('line', (line) => {\n      lineNumber++\n      if (lineNumber < rangeStart) {\n        return\n      }\n\n      // !Warning: This mutates the cache by storing the snipped line into the cache.\n      output[lineNumber] = snipLine(line, 0)\n\n      if (lineNumber >= rangeEnd) {\n        if (currentRangeIndex === ranges.length - 1) {\n          // We need to close the file stream and remove listeners, else the reader will continue to run our listener;\n          lineReaded.close()\n          lineReaded.removeAllListeners()\n          return\n        }\n        currentRangeIndex++\n        const range = ranges[currentRangeIndex]\n        if (range === undefined) {\n          // This should never happen as it means we have a bug in the context.\n          lineReaded.close()\n          lineReaded.removeAllListeners()\n          return\n        }\n        rangeStart = range[0]\n        rangeEnd = range[1]\n      }\n    })\n  })\n}\n\n/** Adds context lines to frames */\nfunction addSourceContextToFrames(frames: StackFrame[], cache: ReduceableCache<string, Record<number, string>>): void {\n  for (const frame of frames) {\n    // Only add context if we have a filename and it hasn't already been added\n    if (frame.filename && frame.context_line === undefined && typeof frame.lineno === 'number') {\n      const contents = cache.get(frame.filename)\n      if (contents === undefined) {\n        continue\n      }\n\n      addContextToFrame(frame.lineno, frame, contents)\n    }\n  }\n}\n\n/**\n * Resolves context lines before and after the given line number and appends them to the frame;\n */\nfunction addContextToFrame(lineno: number, frame: StackFrame, contents: Record<number, string> | undefined): void {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping.\n  // We already check for lineno before calling this, but since StackFrame lineno is optional, we check it again.\n  if (frame.lineno === undefined || contents === undefined) {\n    return\n  }\n\n  frame.pre_context = []\n  for (let i = makeRangeStart(lineno); i < lineno; i++) {\n    // We always expect the start context as line numbers cannot be negative. If we dont find a line, then\n    // something went wrong somewhere. Clear the context and return without adding any linecontext.\n    const line = contents[i]\n    if (line === undefined) {\n      clearLineContext(frame)\n      return\n    }\n\n    frame.pre_context.push(line)\n  }\n\n  // We should always have the context line. If we dont, something went wrong, so we clear the context and return\n  // without adding any linecontext.\n  if (contents[lineno] === undefined) {\n    clearLineContext(frame)\n    return\n  }\n\n  frame.context_line = contents[lineno]\n\n  const end = makeRangeEnd(lineno)\n  frame.post_context = []\n  for (let i = lineno + 1; i <= end; i++) {\n    // Since we dont track when the file ends, we cant clear the context if we dont find a line as it could\n    // just be that we reached the end of the file.\n    const line = contents[i]\n    if (line === undefined) {\n      break\n    }\n    frame.post_context.push(line)\n  }\n}\n\n/**\n * Clears the context lines from a frame, used to reset a frame to its original state\n * if we fail to resolve all context lines for it.\n */\nfunction clearLineContext(frame: StackFrame): void {\n  delete frame.pre_context\n  delete frame.context_line\n  delete frame.post_context\n}\n\n/**\n * Determines if context lines should be skipped for a file.\n * - .min.(mjs|cjs|js) files are and not useful since they dont point to the original source\n * - node: prefixed modules are part of the runtime and cannot be resolved to a file\n * - data: skip json, wasm and inline js https://nodejs.org/api/esm.html#data-imports\n */\nfunction shouldSkipContextLinesForFile(path: string): boolean {\n  // Test the most common prefix and extension first. These are the ones we\n  // are most likely to see in user applications and are the ones we can break out of first.\n  return (\n    path.startsWith('node:') ||\n    path.endsWith('.min.js') ||\n    path.endsWith('.min.cjs') ||\n    path.endsWith('.min.mjs') ||\n    path.startsWith('data:')\n  )\n}\n\n/**\n * Determines if we should skip contextlines based off the max lineno and colno values.\n */\nfunction shouldSkipContextLinesForFrame(frame: StackFrame): boolean {\n  if (frame.lineno !== undefined && frame.lineno > MAX_CONTEXTLINES_LINENO) {\n    return true\n  }\n  if (frame.colno !== undefined && frame.colno > MAX_CONTEXTLINES_COLNO) {\n    return true\n  }\n  return false\n}\n\n/**\n * Checks if we have all the contents that we need in the cache.\n */\nfunction rangeExistsInContentCache(file: string, range: ReadlineRange): boolean {\n  const contents = LRU_FILE_CONTENTS_CACHE.get(file)\n  if (contents === undefined) {\n    return false\n  }\n\n  for (let i = range[0]; i <= range[1]; i++) {\n    if (contents[i] === undefined) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * Creates contiguous ranges of lines to read from a file. In the case where context lines overlap,\n * the ranges are merged to create a single range.\n */\nfunction makeLineReaderRanges(lines: number[]): ReadlineRange[] {\n  if (!lines.length) {\n    return []\n  }\n\n  let i = 0\n  const line = lines[0]\n\n  if (typeof line !== 'number') {\n    return []\n  }\n\n  let current = makeContextRange(line)\n  const out: ReadlineRange[] = []\n  while (true) {\n    if (i === lines.length - 1) {\n      out.push(current)\n      break\n    }\n\n    // If the next line falls into the current range, extend the current range to lineno + linecontext.\n    const next = lines[i + 1]\n    if (typeof next !== 'number') {\n      break\n    }\n    if (next <= current[1]) {\n      current[1] = next + DEFAULT_LINES_OF_CONTEXT\n    } else {\n      out.push(current)\n      current = makeContextRange(next)\n    }\n\n    i++\n  }\n\n  return out\n}\n// Determine start and end indices for context range (inclusive);\nfunction makeContextRange(line: number): [start: number, end: number] {\n  return [makeRangeStart(line), makeRangeEnd(line)]\n}\n// Compute inclusive end context range\nfunction makeRangeStart(line: number): number {\n  return Math.max(1, line - DEFAULT_LINES_OF_CONTEXT)\n}\n// Compute inclusive start context range\nfunction makeRangeEnd(line: number): number {\n  return line + DEFAULT_LINES_OF_CONTEXT\n}\n\n/**\n * Get or init map value\n */\nfunction emplace<T extends ReduceableCache<K, V>, K extends string, V>(map: T, key: K, contents: V): V {\n  const value = map.get(key)\n\n  if (value === undefined) {\n    map.set(key, contents)\n    return contents\n  }\n\n  return value\n}\n\nfunction snipLine(line: string, colno: number): string {\n  let newLine = line\n  const lineLength = newLine.length\n  if (lineLength <= 150) {\n    return newLine\n  }\n  if (colno > lineLength) {\n    colno = lineLength\n  }\n\n  let start = Math.max(colno - 60, 0)\n  if (start < 5) {\n    start = 0\n  }\n\n  let end = Math.min(start + 140, lineLength)\n  if (end > lineLength - 5) {\n    end = lineLength\n  }\n  if (end === lineLength) {\n    start = Math.max(end - 140, 0)\n  }\n\n  newLine = newLine.slice(start, end)\n  if (start > 0) {\n    newLine = `...${newLine}`\n  }\n  if (end < lineLength) {\n    newLine += '...'\n  }\n\n  return newLine\n}\n","export type PostHogCoreOptions = {\n  /** PostHog API host, usually 'https://us.i.posthog.com' or 'https://eu.i.posthog.com' */\n  host?: string\n  /** The number of events to queue before sending to PostHog (flushing) */\n  flushAt?: number\n  /** The interval in milliseconds between periodic flushes */\n  flushInterval?: number\n  /** The maximum number of queued messages to be flushed as part of a single batch (must be higher than `flushAt`) */\n  maxBatchSize?: number\n  /** The maximum number of cached messages either in memory or on the local storage.\n   * Defaults to 1000, (must be higher than `flushAt`)\n   */\n  maxQueueSize?: number\n  /** If set to true the SDK is essentially disabled (useful for local environments where you don't want to track anything) */\n  disabled?: boolean\n  /** If set to false the SDK will not track until the `optIn` function is called. */\n  defaultOptIn?: boolean\n  /** Whether to track that `getFeatureFlag` was called (used by Experiments) */\n  sendFeatureFlagEvent?: boolean\n  /** Whether to load feature flags when initialized or not */\n  preloadFeatureFlags?: boolean\n  /**\n   * Whether to load remote config when initialized or not\n   * Experimental support\n   * Default: false - Remote config is loaded by default\n   */\n  disableRemoteConfig?: boolean\n  /**\n   * Whether to load surveys when initialized or not\n   * Experimental support\n   * Default: false - Surveys are loaded by default, but requires the `PostHogSurveyProvider` to be used\n   */\n  disableSurveys?: boolean\n  /** Option to bootstrap the library with given distinctId and feature flags */\n  bootstrap?: {\n    distinctId?: string\n    isIdentifiedId?: boolean\n    featureFlags?: Record<string, FeatureFlagValue>\n    featureFlagPayloads?: Record<string, JsonType>\n  }\n  /** How many times we will retry HTTP requests. Defaults to 3. */\n  fetchRetryCount?: number\n  /** The delay between HTTP request retries, Defaults to 3 seconds. */\n  fetchRetryDelay?: number\n  /** Timeout in milliseconds for any calls. Defaults to 10 seconds. */\n  requestTimeout?: number\n  /** Timeout in milliseconds for feature flag calls. Defaults to 10 seconds for stateful clients, and 3 seconds for stateless. */\n  featureFlagsRequestTimeoutMs?: number\n  /** Timeout in milliseconds for remote config calls. Defaults to 3 seconds. */\n  remoteConfigRequestTimeoutMs?: number\n  /** For Session Analysis how long before we expire a session (defaults to 30 mins) */\n  sessionExpirationTimeSeconds?: number\n  /** Whether to disable GZIP compression */\n  disableCompression?: boolean\n  disableGeoip?: boolean\n  /** Special flag to indicate ingested data is for a historical migration. */\n  historicalMigration?: boolean\n}\n\nexport enum PostHogPersistedProperty {\n  AnonymousId = 'anonymous_id',\n  DistinctId = 'distinct_id',\n  Props = 'props',\n  FeatureFlagDetails = 'feature_flag_details',\n  FeatureFlags = 'feature_flags',\n  FeatureFlagPayloads = 'feature_flag_payloads',\n  BootstrapFeatureFlagDetails = 'bootstrap_feature_flag_details',\n  BootstrapFeatureFlags = 'bootstrap_feature_flags',\n  BootstrapFeatureFlagPayloads = 'bootstrap_feature_flag_payloads',\n  OverrideFeatureFlags = 'override_feature_flags',\n  Queue = 'queue',\n  OptedOut = 'opted_out',\n  SessionId = 'session_id',\n  SessionStartTimestamp = 'session_start_timestamp',\n  SessionLastTimestamp = 'session_timestamp',\n  PersonProperties = 'person_properties',\n  GroupProperties = 'group_properties',\n  InstalledAppBuild = 'installed_app_build', // only used by posthog-react-native\n  InstalledAppVersion = 'installed_app_version', // only used by posthog-react-native\n  SessionReplay = 'session_replay', // only used by posthog-react-native\n  SurveyLastSeenDate = 'survey_last_seen_date', // only used by posthog-react-native\n  SurveysSeen = 'surveys_seen', // only used by posthog-react-native\n  Surveys = 'surveys', // only used by posthog-react-native\n  RemoteConfig = 'remote_config',\n  FlagsEndpointWasHit = 'flags_endpoint_was_hit', // only used by posthog-react-native\n}\n\nexport type PostHogFetchOptions = {\n  method: 'GET' | 'POST' | 'PUT' | 'PATCH'\n  mode?: 'no-cors'\n  credentials?: 'omit'\n  headers: { [key: string]: string }\n  body?: string | Blob\n  signal?: AbortSignal\n}\n\n// Check out posthog-js for these additional options and try to keep them in sync\nexport type PostHogCaptureOptions = {\n  /** If provided overrides the auto-generated event ID */\n  uuid?: string\n  /** If provided overrides the auto-generated timestamp */\n  timestamp?: Date\n  disableGeoip?: boolean\n}\n\nexport type PostHogFetchResponse = {\n  status: number\n  text: () => Promise<string>\n  json: () => Promise<any>\n}\n\nexport type PostHogQueueItem = {\n  message: any\n  callback?: (err: any) => void\n}\n\nexport type PostHogEventProperties = {\n  [key: string]: JsonType\n}\n\nexport type PostHogGroupProperties = {\n  [type: string]: string | number\n}\n\nexport type PostHogAutocaptureElement = {\n  $el_text?: string\n  tag_name: string\n  href?: string\n  nth_child?: number\n  nth_of_type?: number\n  order?: number\n} & PostHogEventProperties\n// Any key prefixed with `attr__` can be added\n\nexport enum Compression {\n  GZipJS = 'gzip-js',\n  Base64 = 'base64',\n}\n\nexport type PostHogRemoteConfig = {\n  sessionRecording?:\n    | boolean\n    | {\n        [key: string]: JsonType\n      }\n\n  /**\n   * Supported compression algorithms\n   */\n  supportedCompression?: Compression[]\n\n  /**\n   * Whether surveys are enabled\n   */\n  surveys?: boolean | Survey[]\n\n  /**\n   * Indicates if the team has any flags enabled (if not we don't need to load them)\n   */\n  hasFeatureFlags?: boolean\n}\n\nexport type FeatureFlagValue = string | boolean\n\nexport type PostHogFlagsResponse = Omit<PostHogRemoteConfig, 'surveys' | 'hasFeatureFlags'> & {\n  featureFlags: {\n    [key: string]: FeatureFlagValue\n  }\n  featureFlagPayloads: {\n    [key: string]: JsonType\n  }\n  flags: {\n    [key: string]: FeatureFlagDetail\n  }\n  errorsWhileComputingFlags: boolean\n  sessionRecording?:\n    | boolean\n    | {\n        [key: string]: JsonType\n      }\n  quotaLimited?: string[]\n  requestId?: string\n}\n\nexport type PostHogFeatureFlagsResponse = PartialWithRequired<\n  PostHogFlagsResponse,\n  'flags' | 'featureFlags' | 'featureFlagPayloads' | 'requestId'\n>\n\n/**\n * Creates a type with all properties of T, but makes only K properties required while the rest remain optional.\n *\n * @template T - The base type containing all properties\n * @template K - Union type of keys from T that should be required\n *\n * @example\n * interface User {\n *   id: number;\n *   name: string;\n *   email?: string;\n *   age?: number;\n * }\n *\n * // Makes 'id' and 'name' required, but 'email' and 'age' optional\n * type RequiredUser = PartialWithRequired<User, 'id' | 'name'>;\n *\n * const user: RequiredUser = {\n *   id: 1,      // Must be provided\n *   name: \"John\" // Must be provided\n *   // email and age are optional\n * };\n */\nexport type PartialWithRequired<T, K extends keyof T> = {\n  [P in K]: T[P] // Required fields\n} & {\n  [P in Exclude<keyof T, K>]?: T[P] // Optional fields\n}\n\n/**\n * These are the fields we care about from PostHogFlagsResponse for feature flags.\n */\nexport type PostHogFeatureFlagDetails = PartialWithRequired<\n  PostHogFlagsResponse,\n  'flags' | 'featureFlags' | 'featureFlagPayloads' | 'requestId'\n>\n\n/**\n * Models the response from the v1 `/flags` endpoint.\n */\nexport type PostHogV1FlagsResponse = Omit<PostHogFlagsResponse, 'flags'>\n\n/**\n * Models the response from the v2 `/flags` endpoint.\n */\nexport type PostHogV2FlagsResponse = Omit<PostHogFlagsResponse, 'featureFlags' | 'featureFlagPayloads'>\n\n/**\n * The format of the flags object in persisted storage\n *\n * When we pull flags from persistence, we can normalize them to PostHogFeatureFlagDetails\n * so that we can support v1 and v2 of the API.\n */\nexport type PostHogFlagsStorageFormat = Pick<PostHogFeatureFlagDetails, 'flags'>\n\n/**\n * Models legacy flags and payloads return type for many public methods.\n */\nexport type PostHogFlagsAndPayloadsResponse = Partial<\n  Pick<PostHogFlagsResponse, 'featureFlags' | 'featureFlagPayloads'>\n>\n\nexport type JsonType = string | number | boolean | null | { [key: string]: JsonType } | Array<JsonType> | JsonType[]\n\nexport type FetchLike = (url: string, options: PostHogFetchOptions) => Promise<PostHogFetchResponse>\n\nexport type FeatureFlagDetail = {\n  key: string\n  enabled: boolean\n  variant: string | undefined\n  reason: EvaluationReason | undefined\n  metadata: FeatureFlagMetadata | undefined\n}\n\nexport type FeatureFlagMetadata = {\n  id: number | undefined\n  version: number | undefined\n  description: string | undefined\n  // Payloads in the response are always JSON encoded as a string\n  payload: string | undefined\n}\n\nexport type EvaluationReason = {\n  code: string | undefined\n  condition_index: number | undefined\n  description: string | undefined\n}\n\n// survey types\nexport type SurveyAppearance = {\n  // keep in sync with frontend/src/types.ts -> SurveyAppearance\n  backgroundColor?: string\n  submitButtonColor?: string\n  // deprecate submit button text eventually\n  submitButtonText?: string\n  submitButtonTextColor?: string\n  ratingButtonColor?: string\n  ratingButtonActiveColor?: string\n  autoDisappear?: boolean\n  displayThankYouMessage?: boolean\n  thankYouMessageHeader?: string\n  thankYouMessageDescription?: string\n  thankYouMessageDescriptionContentType?: SurveyQuestionDescriptionContentType\n  thankYouMessageCloseButtonText?: string\n  borderColor?: string\n  position?: SurveyPosition\n  placeholder?: string\n  shuffleQuestions?: boolean\n  surveyPopupDelaySeconds?: number\n  // widget options\n  widgetType?: SurveyWidgetType\n  widgetSelector?: string\n  widgetLabel?: string\n  widgetColor?: string\n}\n\nexport enum SurveyPosition {\n  Left = 'left',\n  Right = 'right',\n  Center = 'center',\n}\n\nexport enum SurveyWidgetType {\n  Button = 'button',\n  Tab = 'tab',\n  Selector = 'selector',\n}\n\nexport enum SurveyType {\n  Popover = 'popover',\n  API = 'api',\n  Widget = 'widget',\n}\n\nexport type SurveyQuestion = BasicSurveyQuestion | LinkSurveyQuestion | RatingSurveyQuestion | MultipleSurveyQuestion\n\nexport enum SurveyQuestionDescriptionContentType {\n  Html = 'html',\n  Text = 'text',\n}\n\ntype SurveyQuestionBase = {\n  question: string\n  id?: string // TODO: use this for the question id\n  description?: string\n  descriptionContentType?: SurveyQuestionDescriptionContentType\n  optional?: boolean\n  buttonText?: string\n  originalQuestionIndex: number\n  branching?: NextQuestionBranching | EndBranching | ResponseBasedBranching | SpecificQuestionBranching\n}\n\nexport type BasicSurveyQuestion = SurveyQuestionBase & {\n  type: SurveyQuestionType.Open\n}\n\nexport type LinkSurveyQuestion = SurveyQuestionBase & {\n  type: SurveyQuestionType.Link\n  link?: string\n}\n\nexport type RatingSurveyQuestion = SurveyQuestionBase & {\n  type: SurveyQuestionType.Rating\n  display: SurveyRatingDisplay\n  scale: 3 | 5 | 7 | 10\n  lowerBoundLabel: string\n  upperBoundLabel: string\n}\n\nexport enum SurveyRatingDisplay {\n  Number = 'number',\n  Emoji = 'emoji',\n}\n\nexport type MultipleSurveyQuestion = SurveyQuestionBase & {\n  type: SurveyQuestionType.SingleChoice | SurveyQuestionType.MultipleChoice\n  choices: string[]\n  hasOpenChoice?: boolean\n  shuffleOptions?: boolean\n}\n\nexport enum SurveyQuestionType {\n  Open = 'open',\n  MultipleChoice = 'multiple_choice',\n  SingleChoice = 'single_choice',\n  Rating = 'rating',\n  Link = 'link',\n}\n\nexport enum SurveyQuestionBranchingType {\n  NextQuestion = 'next_question',\n  End = 'end',\n  ResponseBased = 'response_based',\n  SpecificQuestion = 'specific_question',\n}\n\nexport type NextQuestionBranching = {\n  type: SurveyQuestionBranchingType.NextQuestion\n}\n\nexport type EndBranching = {\n  type: SurveyQuestionBranchingType.End\n}\n\nexport type ResponseBasedBranching = {\n  type: SurveyQuestionBranchingType.ResponseBased\n  responseValues: Record<string, any>\n}\n\nexport type SpecificQuestionBranching = {\n  type: SurveyQuestionBranchingType.SpecificQuestion\n  index: number\n}\n\nexport type SurveyResponse = {\n  surveys: Survey[]\n}\n\nexport type SurveyCallback = (surveys: Survey[]) => void\n\nexport enum SurveyMatchType {\n  Regex = 'regex',\n  NotRegex = 'not_regex',\n  Exact = 'exact',\n  IsNot = 'is_not',\n  Icontains = 'icontains',\n  NotIcontains = 'not_icontains',\n}\n\nexport type SurveyElement = {\n  text?: string\n  $el_text?: string\n  tag_name?: string\n  href?: string\n  attr_id?: string\n  attr_class?: string[]\n  nth_child?: number\n  nth_of_type?: number\n  attributes?: Record<string, any>\n  event_id?: number\n  order?: number\n  group_id?: number\n}\nexport type SurveyRenderReason = {\n  visible: boolean\n  disabledReason?: string\n}\n\nexport type Survey = {\n  // Sync this with the backend's SurveyAPISerializer!\n  id: string\n  name: string\n  description?: string\n  type: SurveyType\n  feature_flag_keys?:\n    | {\n        key: string\n        value?: string\n      }[]\n  linked_flag_key?: string\n  targeting_flag_key?: string\n  internal_targeting_flag_key?: string\n  questions: SurveyQuestion[]\n  appearance?: SurveyAppearance\n  conditions?: {\n    url?: string\n    selector?: string\n    seenSurveyWaitPeriodInDays?: number\n    urlMatchType?: SurveyMatchType\n    events?: {\n      repeatedActivation?: boolean\n      values?: {\n        name: string\n      }[]\n    }\n    actions?: {\n      values: SurveyActionType[]\n    }\n    deviceTypes?: string[]\n    deviceTypesMatchType?: SurveyMatchType\n  }\n  start_date?: string\n  end_date?: string\n  current_iteration?: number\n  current_iteration_start_date?: string\n}\n\nexport type SurveyActionType = {\n  id: number\n  name?: string\n  steps?: ActionStepType[]\n}\n\n/** Sync with plugin-server/src/types.ts */\nexport enum ActionStepStringMatching {\n  Contains = 'contains',\n  Exact = 'exact',\n  Regex = 'regex',\n}\n\nexport type ActionStepType = {\n  event?: string\n  selector?: string\n  text?: string\n  /** @default StringMatching.Exact */\n  text_matching?: ActionStepStringMatching\n  href?: string\n  /** @default ActionStepStringMatching.Exact */\n  href_matching?: ActionStepStringMatching\n  url?: string\n  /** @default StringMatching.Contains */\n  url_matching?: ActionStepStringMatching\n}\n","import {\n  FeatureFlagDetail,\n  FeatureFlagValue,\n  JsonType,\n  PostHogFlagsResponse,\n  PostHogV1FlagsResponse,\n  PostHogV2FlagsResponse,\n  PostHogFlagsAndPayloadsResponse,\n  PartialWithRequired,\n  PostHogFeatureFlagsResponse,\n} from './types'\n\nexport const normalizeFlagsResponse = (\n  flagsResponse:\n    | PartialWithRequired<PostHogV2FlagsResponse, 'flags'>\n    | PartialWithRequired<PostHogV1FlagsResponse, 'featureFlags' | 'featureFlagPayloads'>\n): PostHogFeatureFlagsResponse => {\n  if ('flags' in flagsResponse) {\n    // Convert v2 format to v1 format\n    const featureFlags = getFlagValuesFromFlags(flagsResponse.flags)\n    const featureFlagPayloads = getPayloadsFromFlags(flagsResponse.flags)\n\n    return {\n      ...flagsResponse,\n      featureFlags,\n      featureFlagPayloads,\n    }\n  } else {\n    // Convert v1 format to v2 format\n    const featureFlags = flagsResponse.featureFlags ?? {}\n    const featureFlagPayloads = Object.fromEntries(\n      Object.entries(flagsResponse.featureFlagPayloads || {}).map(([k, v]) => [k, parsePayload(v)])\n    )\n\n    const flags = Object.fromEntries(\n      Object.entries(featureFlags).map(([key, value]) => [\n        key,\n        getFlagDetailFromFlagAndPayload(key, value, featureFlagPayloads[key]),\n      ])\n    )\n\n    return {\n      ...flagsResponse,\n      featureFlags,\n      featureFlagPayloads,\n      flags,\n    }\n  }\n}\n\nfunction getFlagDetailFromFlagAndPayload(\n  key: string,\n  value: FeatureFlagValue,\n  payload: JsonType | undefined\n): FeatureFlagDetail {\n  return {\n    key: key,\n    enabled: typeof value === 'string' ? true : value,\n    variant: typeof value === 'string' ? value : undefined,\n    reason: undefined,\n    metadata: {\n      id: undefined,\n      version: undefined,\n      payload: payload ? JSON.stringify(payload) : undefined,\n      description: undefined,\n    },\n  }\n}\n\n/**\n * Get the flag values from the flags v4 response.\n * @param flags - The flags\n * @returns The flag values\n */\nexport const getFlagValuesFromFlags = (flags: PostHogFlagsResponse['flags']): PostHogFlagsResponse['featureFlags'] => {\n  return Object.fromEntries(\n    Object.entries(flags ?? {})\n      .map(([key, detail]) => [key, getFeatureFlagValue(detail)])\n      .filter(([, value]): boolean => value !== undefined)\n  )\n}\n\n/**\n * Get the payloads from the flags v4 response.\n * @param flags - The flags\n * @returns The payloads\n */\nexport const getPayloadsFromFlags = (\n  flags: PostHogFlagsResponse['flags']\n): PostHogFlagsResponse['featureFlagPayloads'] => {\n  const safeFlags = flags ?? {}\n  return Object.fromEntries(\n    Object.keys(safeFlags)\n      .filter((flag) => {\n        const details = safeFlags[flag]\n        return details.enabled && details.metadata && details.metadata.payload !== undefined\n      })\n      .map((flag) => {\n        const payload = safeFlags[flag].metadata?.payload as string\n        return [flag, payload ? parsePayload(payload) : undefined]\n      })\n  )\n}\n\n/**\n * Get the flag details from the legacy v1 flags and payloads. As such, it will lack the reason, id, version, and description.\n * @param flagsResponse - The flags response\n * @returns The flag details\n */\nexport const getFlagDetailsFromFlagsAndPayloads = (\n  flagsResponse: PostHogFeatureFlagsResponse\n): PostHogFlagsResponse['flags'] => {\n  const flags = flagsResponse.featureFlags ?? {}\n  const payloads = flagsResponse.featureFlagPayloads ?? {}\n  return Object.fromEntries(\n    Object.entries(flags).map(([key, value]) => [\n      key,\n      {\n        key: key,\n        enabled: typeof value === 'string' ? true : value,\n        variant: typeof value === 'string' ? value : undefined,\n        reason: undefined,\n        metadata: {\n          id: undefined,\n          version: undefined,\n          payload: payloads?.[key] ? JSON.stringify(payloads[key]) : undefined,\n          description: undefined,\n        },\n      },\n    ])\n  )\n}\n\nexport const getFeatureFlagValue = (detail: FeatureFlagDetail | undefined): FeatureFlagValue | undefined => {\n  return detail === undefined ? undefined : detail.variant ?? detail.enabled\n}\n\nexport const parsePayload = (response: any): any => {\n  if (typeof response !== 'string') {\n    return response\n  }\n\n  try {\n    return JSON.parse(response)\n  } catch {\n    return response\n  }\n}\n\n/**\n * Get the normalized flag details from the flags and payloads.\n * This is used to convert things like boostrap and stored feature flags and payloads to the v4 format.\n * This helps us ensure backwards compatibility.\n * If a key exists in the featureFlagPayloads that is not in the featureFlags, we treat it as a true feature flag.\n *\n * @param featureFlags - The feature flags\n * @param featureFlagPayloads - The feature flag payloads\n * @returns The normalized flag details\n */\nexport const createFlagsResponseFromFlagsAndPayloads = (\n  featureFlags: PostHogV1FlagsResponse['featureFlags'],\n  featureFlagPayloads: PostHogV1FlagsResponse['featureFlagPayloads']\n): PostHogFeatureFlagsResponse => {\n  // If a feature flag payload key is not in the feature flags, we treat it as true feature flag.\n  const allKeys = [...new Set([...Object.keys(featureFlags ?? {}), ...Object.keys(featureFlagPayloads ?? {})])]\n  const enabledFlags = allKeys\n    .filter((flag) => !!featureFlags[flag] || !!featureFlagPayloads[flag])\n    .reduce((res: Record<string, FeatureFlagValue>, key) => ((res[key] = featureFlags[key] ?? true), res), {})\n\n  const flagDetails: PostHogFlagsAndPayloadsResponse = {\n    featureFlags: enabledFlags,\n    featureFlagPayloads: featureFlagPayloads ?? {},\n  }\n\n  return normalizeFlagsResponse(flagDetails as PostHogV1FlagsResponse)\n}\n\nexport const updateFlagValue = (flag: FeatureFlagDetail, value: FeatureFlagValue): FeatureFlagDetail => {\n  return {\n    ...flag,\n    enabled: getEnabledFromValue(value),\n    variant: getVariantFromValue(value),\n  }\n}\n\nfunction getEnabledFromValue(value: FeatureFlagValue): boolean {\n  return typeof value === 'string' ? true : value\n}\n\nfunction getVariantFromValue(value: FeatureFlagValue): string | undefined {\n  return typeof value === 'string' ? value : undefined\n}\n","import { FetchLike } from './types'\n\nexport const STRING_FORMAT = 'utf8'\n\nexport function assert(truthyValue: any, message: string): void {\n  if (!truthyValue || typeof truthyValue !== 'string' || isEmpty(truthyValue)) {\n    throw new Error(message)\n  }\n}\n\nfunction isEmpty(truthyValue: string): boolean {\n  if (truthyValue.trim().length === 0) {\n    return true\n  }\n  return false\n}\n\nexport function removeTrailingSlash(url: string): string {\n  return url?.replace(/\\/+$/, '')\n}\n\nexport interface RetriableOptions {\n  retryCount: number\n  retryDelay: number\n  retryCheck: (err: unknown) => boolean\n}\n\nexport async function retriable<T>(fn: () => Promise<T>, props: RetriableOptions): Promise<T> {\n  let lastError = null\n\n  for (let i = 0; i < props.retryCount + 1; i++) {\n    if (i > 0) {\n      // don't wait when it's the last try\n      await new Promise<void>((r) => setTimeout(r, props.retryDelay))\n    }\n\n    try {\n      const res = await fn()\n      return res\n    } catch (e) {\n      lastError = e\n      if (!props.retryCheck(e)) {\n        throw e\n      }\n    }\n  }\n\n  throw lastError\n}\n\nexport function currentTimestamp(): number {\n  return new Date().getTime()\n}\n\nexport function currentISOTime(): string {\n  return new Date().toISOString()\n}\n\nexport function safeSetTimeout(fn: () => void, timeout: number): any {\n  // NOTE: we use this so rarely that it is totally fine to do `safeSetTimeout(fn, 0)``\n  // rather than setImmediate.\n  const t = setTimeout(fn, timeout) as any\n  // We unref if available to prevent Node.js hanging on exit\n  t?.unref && t?.unref()\n  return t\n}\n\n// NOTE: We opt for this slightly imperfect check as the global \"Promise\" object can get mutated in certain environments\nexport const isPromise = (obj: any): obj is Promise<any> => {\n  return obj && typeof obj.then === 'function'\n}\n\nexport const isError = (x: unknown): x is Error => {\n  return x instanceof Error\n}\n\nexport function getFetch(): FetchLike | undefined {\n  return typeof fetch !== 'undefined' ? fetch : typeof globalThis.fetch !== 'undefined' ? globalThis.fetch : undefined\n}\n\nexport function allSettled<T>(\n  promises: (Promise<T> | null | undefined)[]\n): Promise<({ status: 'fulfilled'; value: T } | { status: 'rejected'; reason: any })[]> {\n  return Promise.all(\n    promises.map((p) =>\n      (p ?? Promise.resolve()).then(\n        (value: any) => ({ status: 'fulfilled' as const, value }),\n        (reason: any) => ({ status: 'rejected' as const, reason })\n      )\n    )\n  )\n}\n","/**\n * Older browsers and some runtimes don't support this yet\n * This API (as of 2025-05-07) is not available on React Native.\n */\nexport function isGzipSupported(): boolean {\n  return 'CompressionStream' in globalThis\n}\n\n/**\n * Gzip a string using Compression Streams API if it's available\n */\nexport async function gzipCompress(input: string, isDebug = true): Promise<Blob | null> {\n  try {\n    // Turn the string into a stream using a Blob, and then compress it\n    const dataStream = new Blob([input], {\n      type: 'text/plain',\n    }).stream()\n\n    const compressedStream = dataStream.pipeThrough(new CompressionStream('gzip'))\n\n    // Using a Response to easily extract the readablestream value. Decoding into a string for fetch\n    return await new Response(compressedStream).blob()\n  } catch (error) {\n    if (isDebug) {\n      console.error('Failed to gzip compress data', error)\n    }\n    return null\n  }\n}\n","export class SimpleEventEmitter {\n  events: { [key: string]: ((...args: any[]) => void)[] } = {}\n\n  constructor() {\n    this.events = {}\n  }\n\n  on(event: string, listener: (...args: any[]) => void): () => void {\n    if (!this.events[event]) {\n      this.events[event] = []\n    }\n    this.events[event].push(listener)\n\n    return () => {\n      this.events[event] = this.events[event].filter((x) => x !== listener)\n    }\n  }\n\n  emit(event: string, payload: any): void {\n    for (const listener of this.events[event] || []) {\n      listener(payload)\n    }\n    for (const listener of this.events['*'] || []) {\n      listener(event, payload)\n    }\n  }\n}\n","import {\n  PostHogFetchOptions,\n  PostHogFetchResponse,\n  PostHogQueueItem,\n  PostHogAutocaptureElement,\n  PostHogFlagsResponse,\n  PostHogCoreOptions,\n  PostHogEventProperties,\n  PostHogPersistedProperty,\n  PostHogCaptureOptions,\n  JsonType,\n  PostHogRemoteConfig,\n  FeatureFlagValue,\n  PostHogV2FlagsResponse,\n  PostHogV1FlagsResponse,\n  PostHogFeatureFlagDetails,\n  PostHogFlagsStorageFormat,\n  FeatureFlagDetail,\n  Survey,\n  SurveyResponse,\n  PostHogGroupProperties,\n  Compression,\n} from './types'\nimport {\n  createFlagsResponseFromFlagsAndPayloads,\n  getFeatureFlagValue,\n  getFlagValuesFromFlags,\n  getPayloadsFromFlags,\n  normalizeFlagsResponse,\n  updateFlagValue,\n} from './featureFlagUtils'\nimport {\n  allSettled,\n  assert,\n  currentISOTime,\n  isError,\n  removeTrailingSlash,\n  retriable,\n  RetriableOptions,\n  safeSetTimeout,\n  STRING_FORMAT,\n} from './utils'\nimport { isGzipSupported, gzipCompress } from './gzip'\nimport { SimpleEventEmitter } from './eventemitter'\nimport { uuidv7 } from './vendor/uuidv7'\n\nexport { safeSetTimeout } from './utils'\nexport { getFetch } from './utils'\nexport { getFeatureFlagValue } from './featureFlagUtils'\nexport * as utils from './utils'\n\nclass PostHogFetchHttpError extends Error {\n  name = 'PostHogFetchHttpError'\n\n  constructor(public response: PostHogFetchResponse, public reqByteLength: number) {\n    super('HTTP error while fetching PostHog: status=' + response.status + ', reqByteLength=' + reqByteLength)\n  }\n\n  get status(): number {\n    return this.response.status\n  }\n\n  get text(): Promise<string> {\n    return this.response.text()\n  }\n\n  get json(): Promise<any> {\n    return this.response.json()\n  }\n}\n\nclass PostHogFetchNetworkError extends Error {\n  name = 'PostHogFetchNetworkError'\n\n  constructor(public error: unknown) {\n    // TRICKY: \"cause\" is a newer property but is just ignored otherwise. Cast to any to ignore the type issue.\n    // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error\n    // @ts-ignore\n    super('Network error while fetching PostHog', error instanceof Error ? { cause: error } : {})\n  }\n}\n\nexport const maybeAdd = (key: string, value: JsonType | undefined): Record<string, JsonType> =>\n  value !== undefined ? { [key]: value } : {}\n\nexport async function logFlushError(err: any): Promise<void> {\n  if (err instanceof PostHogFetchHttpError) {\n    let text = ''\n    try {\n      text = await err.text\n    } catch {}\n\n    console.error(`Error while flushing PostHog: message=${err.message}, response body=${text}`, err)\n  } else {\n    console.error('Error while flushing PostHog', err)\n  }\n  return Promise.resolve()\n}\n\nfunction isPostHogFetchError(err: unknown): err is PostHogFetchHttpError | PostHogFetchNetworkError {\n  return typeof err === 'object' && (err instanceof PostHogFetchHttpError || err instanceof PostHogFetchNetworkError)\n}\n\nfunction isPostHogFetchContentTooLargeError(err: unknown): err is PostHogFetchHttpError & { status: 413 } {\n  return typeof err === 'object' && err instanceof PostHogFetchHttpError && err.status === 413\n}\n\nenum QuotaLimitedFeature {\n  FeatureFlags = 'feature_flags',\n  Recordings = 'recordings',\n}\n\nexport abstract class PostHogCoreStateless {\n  // options\n  readonly apiKey: string\n  readonly host: string\n  readonly flushAt: number\n  readonly preloadFeatureFlags: boolean\n  readonly disableSurveys: boolean\n  private maxBatchSize: number\n  private maxQueueSize: number\n  private flushInterval: number\n  private flushPromise: Promise<any> | null = null\n  private shutdownPromise: Promise<void> | null = null\n  private requestTimeout: number\n  private featureFlagsRequestTimeoutMs: number\n  private remoteConfigRequestTimeoutMs: number\n  private removeDebugCallback?: () => void\n  private disableGeoip: boolean\n  private historicalMigration: boolean\n  protected disabled\n  protected disableCompression: boolean\n\n  private defaultOptIn: boolean\n  private pendingPromises: Record<string, Promise<any>> = {}\n\n  // internal\n  protected _events = new SimpleEventEmitter()\n  protected _flushTimer?: any\n  protected _retryOptions: RetriableOptions\n  protected _initPromise: Promise<void>\n  protected _isInitialized: boolean = false\n  protected _remoteConfigResponsePromise?: Promise<PostHogRemoteConfig | undefined>\n\n  // Abstract methods to be overridden by implementations\n  abstract fetch(url: string, options: PostHogFetchOptions): Promise<PostHogFetchResponse>\n  abstract getLibraryId(): string\n  abstract getLibraryVersion(): string\n  abstract getCustomUserAgent(): string | void\n\n  // This is our abstracted storage. Each implementation should handle its own\n  abstract getPersistedProperty<T>(key: PostHogPersistedProperty): T | undefined\n  abstract setPersistedProperty<T>(key: PostHogPersistedProperty, value: T | null): void\n\n  constructor(apiKey: string, options?: PostHogCoreOptions) {\n    assert(apiKey, \"You must pass your PostHog project's api key.\")\n\n    this.apiKey = apiKey\n    this.host = removeTrailingSlash(options?.host || 'https://us.i.posthog.com')\n    this.flushAt = options?.flushAt ? Math.max(options?.flushAt, 1) : 20\n    this.maxBatchSize = Math.max(this.flushAt, options?.maxBatchSize ?? 100)\n    this.maxQueueSize = Math.max(this.flushAt, options?.maxQueueSize ?? 1000)\n    this.flushInterval = options?.flushInterval ?? 10000\n    this.preloadFeatureFlags = options?.preloadFeatureFlags ?? true\n    // If enable is explicitly set to false we override the optout\n    this.defaultOptIn = options?.defaultOptIn ?? true\n    this.disableSurveys = options?.disableSurveys ?? false\n\n    this._retryOptions = {\n      retryCount: options?.fetchRetryCount ?? 3,\n      retryDelay: options?.fetchRetryDelay ?? 3000, // 3 seconds\n      retryCheck: isPostHogFetchError,\n    }\n    this.requestTimeout = options?.requestTimeout ?? 10000 // 10 seconds\n    this.featureFlagsRequestTimeoutMs = options?.featureFlagsRequestTimeoutMs ?? 3000 // 3 seconds\n    this.remoteConfigRequestTimeoutMs = options?.remoteConfigRequestTimeoutMs ?? 3000 // 3 seconds\n    this.disableGeoip = options?.disableGeoip ?? true\n    this.disabled = options?.disabled ?? false\n    this.historicalMigration = options?.historicalMigration ?? false\n    // Init promise allows the derived class to block calls until it is ready\n    this._initPromise = Promise.resolve()\n    this._isInitialized = true\n    this.disableCompression = !isGzipSupported() || (options?.disableCompression ?? false)\n  }\n\n  protected logMsgIfDebug(fn: () => void): void {\n    if (this.isDebug) {\n      fn()\n    }\n  }\n\n  protected wrap(fn: () => void): void {\n    if (this.disabled) {\n      this.logMsgIfDebug(() => console.warn('[PostHog] The client is disabled'))\n      return\n    }\n\n    if (this._isInitialized) {\n      // NOTE: We could also check for the \"opt in\" status here...\n      return fn()\n    }\n\n    this._initPromise.then(() => fn())\n  }\n\n  protected getCommonEventProperties(): PostHogEventProperties {\n    return {\n      $lib: this.getLibraryId(),\n      $lib_version: this.getLibraryVersion(),\n    }\n  }\n\n  public get optedOut(): boolean {\n    return this.getPersistedProperty(PostHogPersistedProperty.OptedOut) ?? !this.defaultOptIn\n  }\n\n  async optIn(): Promise<void> {\n    this.wrap(() => {\n      this.setPersistedProperty(PostHogPersistedProperty.OptedOut, false)\n    })\n  }\n\n  async optOut(): Promise<void> {\n    this.wrap(() => {\n      this.setPersistedProperty(PostHogPersistedProperty.OptedOut, true)\n    })\n  }\n\n  on(event: string, cb: (...args: any[]) => void): () => void {\n    return this._events.on(event, cb)\n  }\n\n  debug(enabled: boolean = true): void {\n    this.removeDebugCallback?.()\n\n    if (enabled) {\n      const removeDebugCallback = this.on('*', (event, payload) => console.log('PostHog Debug', event, payload))\n      this.removeDebugCallback = () => {\n        removeDebugCallback()\n        this.removeDebugCallback = undefined\n      }\n    }\n  }\n\n  get isDebug(): boolean {\n    return !!this.removeDebugCallback\n  }\n\n  get isDisabled(): boolean {\n    return this.disabled\n  }\n\n  private buildPayload(payload: {\n    distinct_id: string\n    event: string\n    properties?: PostHogEventProperties\n  }): PostHogEventProperties {\n    return {\n      distinct_id: payload.distinct_id,\n      event: payload.event,\n      properties: {\n        ...(payload.properties || {}),\n        ...this.getCommonEventProperties(), // Common PH props\n      },\n    }\n  }\n\n  protected addPendingPromise<T>(promise: Promise<T>): Promise<T> {\n    const promiseUUID = uuidv7()\n    this.pendingPromises[promiseUUID] = promise\n    promise\n      .catch(() => {})\n      .finally(() => {\n        delete this.pendingPromises[promiseUUID]\n      })\n\n    return promise\n  }\n\n  /***\n   *** TRACKING\n   ***/\n  protected identifyStateless(\n    distinctId: string,\n    properties?: PostHogEventProperties,\n    options?: PostHogCaptureOptions\n  ): void {\n    this.wrap(() => {\n      // The properties passed to identifyStateless are event properties.\n      // To add person properties, pass in all person properties to the `$set` and `$set_once` keys.\n\n      const payload = {\n        ...this.buildPayload({\n          distinct_id: distinctId,\n          event: '$identify',\n          properties,\n        }),\n      }\n\n      this.enqueue('identify', payload, options)\n    })\n  }\n\n  protected async identifyStatelessImmediate(\n    distinctId: string,\n    properties?: PostHogEventProperties,\n    options?: PostHogCaptureOptions\n  ): Promise<void> {\n    const payload = {\n      ...this.buildPayload({\n        distinct_id: distinctId,\n        event: '$identify',\n        properties,\n      }),\n    }\n\n    await this.sendImmediate('identify', payload, options)\n  }\n\n  protected captureStateless(\n    distinctId: string,\n    event: string,\n    properties?: PostHogEventProperties,\n    options?: PostHogCaptureOptions\n  ): void {\n    this.wrap(() => {\n      const payload = this.buildPayload({ distinct_id: distinctId, event, properties })\n      this.enqueue('capture', payload, options)\n    })\n  }\n\n  protected async captureStatelessImmediate(\n    distinctId: string,\n    event: string,\n    properties?: PostHogEventProperties,\n    options?: PostHogCaptureOptions\n  ): Promise<void> {\n    const payload = this.buildPayload({ distinct_id: distinctId, event, properties })\n    await this.sendImmediate('capture', payload, options)\n  }\n\n  protected aliasStateless(\n    alias: string,\n    distinctId: string,\n    properties?: PostHogEventProperties,\n    options?: PostHogCaptureOptions\n  ): void {\n    this.wrap(() => {\n      const payload = this.buildPayload({\n        event: '$create_alias',\n        distinct_id: distinctId,\n        properties: {\n          ...(properties || {}),\n          distinct_id: distinctId,\n          alias,\n        },\n      })\n\n      this.enqueue('alias', payload, options)\n    })\n  }\n\n  protected async aliasStatelessImmediate(\n    alias: string,\n    distinctId: string,\n    properties?: PostHogEventProperties,\n    options?: PostHogCaptureOptions\n  ): Promise<void> {\n    const payload = this.buildPayload({\n      event: '$create_alias',\n      distinct_id: distinctId,\n      properties: {\n        ...(properties || {}),\n        distinct_id: distinctId,\n        alias,\n      },\n    })\n\n    await this.sendImmediate('alias', payload, options)\n  }\n\n  /***\n   *** GROUPS\n   ***/\n  protected groupIdentifyStateless(\n    groupType: string,\n    groupKey: string | number,\n    groupProperties?: PostHogEventProperties,\n    options?: PostHogCaptureOptions,\n    distinctId?: string,\n    eventProperties?: PostHogEventProperties\n  ): void {\n    this.wrap(() => {\n      const payload = this.buildPayload({\n        distinct_id: distinctId || `$${groupType}_${groupKey}`,\n        event: '$groupidentify',\n        properties: {\n          $group_type: groupType,\n          $group_key: groupKey,\n          $group_set: groupProperties || {},\n          ...(eventProperties || {}),\n        },\n      })\n\n      this.enqueue('capture', payload, options)\n    })\n  }\n\n  protected async getRemoteConfig(): Promise<PostHogRemoteConfig | undefined> {\n    await this._initPromise\n\n    let host = this.host\n\n    if (host === 'https://us.i.posthog.com') {\n      host = 'https://us-assets.i.posthog.com'\n    } else if (host === 'https://eu.i.posthog.com') {\n      host = 'https://eu-assets.i.posthog.com'\n    }\n\n    const url = `${host}/array/${this.apiKey}/config`\n    const fetchOptions: PostHogFetchOptions = {\n      method: 'GET',\n      headers: { ...this.getCustomHeaders(), 'Content-Type': 'application/json' },\n    }\n    // Don't retry remote config API calls\n    return this.fetchWithRetry(url, fetchOptions, { retryCount: 0 }, this.remoteConfigRequestTimeoutMs)\n      .then((response) => response.json() as Promise<PostHogRemoteConfig>)\n      .catch((error) => {\n        this.logMsgIfDebug(() => console.error('Remote config could not be loaded', error))\n        this._events.emit('error', error)\n        return undefined\n      })\n  }\n\n  /***\n   *** FEATURE FLAGS\n   ***/\n\n  protected async getFlags(\n    distinctId: string,\n    groups: Record<string, string | number> = {},\n    personProperties: Record<string, string> = {},\n    groupProperties: Record<string, Record<string, string>> = {},\n    extraPayload: Record<string, any> = {}\n  ): Promise<PostHogFlagsResponse | undefined> {\n    await this._initPromise\n\n    const url = `${this.host}/flags/?v=2&config=true`\n    const fetchOptions: PostHogFetchOptions = {\n      method: 'POST',\n      headers: { ...this.getCustomHeaders(), 'Content-Type': 'application/json' },\n      body: JSON.stringify({\n        token: this.apiKey,\n        distinct_id: distinctId,\n        groups,\n        person_properties: personProperties,\n        group_properties: groupProperties,\n        ...extraPayload,\n      }),\n    }\n\n    this.logMsgIfDebug(() => console.log('PostHog Debug', 'Flags URL', url))\n\n    // Don't retry /flags API calls\n    return this.fetchWithRetry(url, fetchOptions, { retryCount: 0 }, this.featureFlagsRequestTimeoutMs)\n      .then((response) => response.json() as Promise<PostHogV1FlagsResponse | PostHogV2FlagsResponse>)\n      .then((response) => normalizeFlagsResponse(response))\n      .catch((error) => {\n        this._events.emit('error', error)\n        return undefined\n      }) as Promise<PostHogFlagsResponse | undefined>\n  }\n\n  protected async getFeatureFlagStateless(\n    key: string,\n    distinctId: string,\n    groups: Record<string, string> = {},\n    personProperties: Record<string, string> = {},\n    groupProperties: Record<string, Record<string, string>> = {},\n    disableGeoip?: boolean\n  ): Promise<{\n    response: FeatureFlagValue | undefined\n    requestId: string | undefined\n  }> {\n    await this._initPromise\n\n    const flagDetailResponse = await this.getFeatureFlagDetailStateless(\n      key,\n      distinctId,\n      groups,\n      personProperties,\n      groupProperties,\n      disableGeoip\n    )\n\n    if (flagDetailResponse === undefined) {\n      // If we haven't loaded flags yet, or errored out, we respond with undefined\n      return {\n        response: undefined,\n        requestId: undefined,\n      }\n    }\n\n    let response = getFeatureFlagValue(flagDetailResponse.response)\n\n    if (response === undefined) {\n      // For cases where the flag is unknown, return false\n      response = false\n    }\n\n    // If we have flags we either return the value (true or string) or false\n    return {\n      response,\n      requestId: flagDetailResponse.requestId,\n    }\n  }\n\n  protected async getFeatureFlagDetailStateless(\n    key: string,\n    distinctId: string,\n    groups: Record<string, string> = {},\n    personProperties: Record<string, string> = {},\n    groupProperties: Record<string, Record<string, string>> = {},\n    disableGeoip?: boolean\n  ): Promise<\n    | {\n        response: FeatureFlagDetail | undefined\n        requestId: string | undefined\n      }\n    | undefined\n  > {\n    await this._initPromise\n\n    const flagsResponse = await this.getFeatureFlagDetailsStateless(\n      distinctId,\n      groups,\n      personProperties,\n      groupProperties,\n      disableGeoip,\n      [key]\n    )\n\n    if (flagsResponse === undefined) {\n      return undefined\n    }\n\n    const featureFlags = flagsResponse.flags\n\n    const flagDetail = featureFlags[key]\n\n    return {\n      response: flagDetail,\n      requestId: flagsResponse.requestId,\n    }\n  }\n\n  protected async getFeatureFlagPayloadStateless(\n    key: string,\n    distinctId: string,\n    groups: Record<string, string> = {},\n    personProperties: Record<string, string> = {},\n    groupProperties: Record<string, Record<string, string>> = {},\n    disableGeoip?: boolean\n  ): Promise<JsonType | undefined> {\n    await this._initPromise\n\n    const payloads = await this.getFeatureFlagPayloadsStateless(\n      distinctId,\n      groups,\n      personProperties,\n      groupProperties,\n      disableGeoip,\n      [key]\n    )\n\n    if (!payloads) {\n      return undefined\n    }\n\n    const response = payloads[key]\n\n    // Undefined means a loading or missing data issue. Null means evaluation happened and there was no match\n    if (response === undefined) {\n      return null\n    }\n\n    return response\n  }\n\n  protected async getFeatureFlagPayloadsStateless(\n    distinctId: string,\n    groups: Record<string, string> = {},\n    personProperties: Record<string, string> = {},\n    groupProperties: Record<string, Record<string, string>> = {},\n    disableGeoip?: boolean,\n    flagKeysToEvaluate?: string[]\n  ): Promise<PostHogFlagsResponse['featureFlagPayloads'] | undefined> {\n    await this._initPromise\n\n    const payloads = (\n      await this.getFeatureFlagsAndPayloadsStateless(\n        distinctId,\n        groups,\n        personProperties,\n        groupProperties,\n        disableGeoip,\n        flagKeysToEvaluate\n      )\n    ).payloads\n\n    return payloads\n  }\n\n  protected async getFeatureFlagsStateless(\n    distinctId: string,\n    groups: Record<string, string | number> = {},\n    personProperties: Record<string, string> = {},\n    groupProperties: Record<string, Record<string, string>> = {},\n    disableGeoip?: boolean,\n    flagKeysToEvaluate?: string[]\n  ): Promise<{\n    flags: PostHogFlagsResponse['featureFlags'] | undefined\n    payloads: PostHogFlagsResponse['featureFlagPayloads'] | undefined\n    requestId: PostHogFlagsResponse['requestId'] | undefined\n  }> {\n    await this._initPromise\n\n    return await this.getFeatureFlagsAndPayloadsStateless(\n      distinctId,\n      groups,\n      personProperties,\n      groupProperties,\n      disableGeoip,\n      flagKeysToEvaluate\n    )\n  }\n\n  protected async getFeatureFlagsAndPayloadsStateless(\n    distinctId: string,\n    groups: Record<string, string | number> = {},\n    personProperties: Record<string, string> = {},\n    groupProperties: Record<string, Record<string, string>> = {},\n    disableGeoip?: boolean,\n    flagKeysToEvaluate?: string[]\n  ): Promise<{\n    flags: PostHogFlagsResponse['featureFlags'] | undefined\n    payloads: PostHogFlagsResponse['featureFlagPayloads'] | undefined\n    requestId: PostHogFlagsResponse['requestId'] | undefined\n  }> {\n    await this._initPromise\n\n    const featureFlagDetails = await this.getFeatureFlagDetailsStateless(\n      distinctId,\n      groups,\n      personProperties,\n      groupProperties,\n      disableGeoip,\n      flagKeysToEvaluate\n    )\n\n    if (!featureFlagDetails) {\n      return {\n        flags: undefined,\n        payloads: undefined,\n        requestId: undefined,\n      }\n    }\n\n    return {\n      flags: featureFlagDetails.featureFlags,\n      payloads: featureFlagDetails.featureFlagPayloads,\n      requestId: featureFlagDetails.requestId,\n    }\n  }\n\n  protected async getFeatureFlagDetailsStateless(\n    distinctId: string,\n    groups: Record<string, string | number> = {},\n    personProperties: Record<string, string> = {},\n    groupProperties: Record<string, Record<string, string>> = {},\n    disableGeoip?: boolean,\n    flagKeysToEvaluate?: string[]\n  ): Promise<PostHogFeatureFlagDetails | undefined> {\n    await this._initPromise\n\n    const extraPayload: Record<string, any> = {}\n    if (disableGeoip ?? this.disableGeoip) {\n      extraPayload['geoip_disable'] = true\n    }\n    if (flagKeysToEvaluate) {\n      extraPayload['flag_keys_to_evaluate'] = flagKeysToEvaluate\n    }\n    const flagsResponse = await this.getFlags(distinctId, groups, personProperties, groupProperties, extraPayload)\n\n    if (flagsResponse === undefined) {\n      // We probably errored out, so return undefined\n      return undefined\n    }\n\n    // if there's an error on the flagsResponse, log a console error, but don't throw an error\n    if (flagsResponse.errorsWhileComputingFlags) {\n      console.error(\n        '[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices'\n      )\n    }\n\n    // Add check for quota limitation on feature flags\n    if (flagsResponse.quotaLimited?.includes(QuotaLimitedFeature.FeatureFlags)) {\n      console.warn(\n        '[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts'\n      )\n      return {\n        flags: {},\n        featureFlags: {},\n        featureFlagPayloads: {},\n        requestId: flagsResponse?.requestId,\n      }\n    }\n\n    return flagsResponse\n  }\n\n  /***\n   *** SURVEYS\n   ***/\n\n  public async getSurveysStateless(): Promise<SurveyResponse['surveys']> {\n    await this._initPromise\n\n    if (this.disableSurveys === true) {\n      this.logMsgIfDebug(() => console.log('PostHog Debug', 'Loading surveys is disabled.'))\n      return []\n    }\n\n    const url = `${this.host}/api/surveys/?token=${this.apiKey}`\n    const fetchOptions: PostHogFetchOptions = {\n      method: 'GET',\n      headers: { ...this.getCustomHeaders(), 'Content-Type': 'application/json' },\n    }\n\n    const response = await this.fetchWithRetry(url, fetchOptions)\n      .then((response) => {\n        if (response.status !== 200 || !response.json) {\n          const msg = `Surveys API could not be loaded: ${response.status}`\n          const error = new Error(msg)\n          this.logMsgIfDebug(() => console.error(error))\n\n          this._events.emit('error', new Error(msg))\n          return undefined\n        }\n\n        return response.json() as Promise<SurveyResponse>\n      })\n      .catch((error) => {\n        this.logMsgIfDebug(() => console.error('Surveys API could not be loaded', error))\n\n        this._events.emit('error', error)\n        return undefined\n      })\n\n    const newSurveys = response?.surveys\n\n    if (newSurveys) {\n      this.logMsgIfDebug(() => console.log('PostHog Debug', 'Surveys fetched from API: ', JSON.stringify(newSurveys)))\n    }\n\n    return newSurveys ?? []\n  }\n\n  /***\n   *** SUPER PROPERTIES\n   ***/\n  private _props: PostHogEventProperties | undefined\n\n  protected get props(): PostHogEventProperties {\n    if (!this._props) {\n      this._props = this.getPersistedProperty<PostHogEventProperties>(PostHogPersistedProperty.Props)\n    }\n    return this._props || {}\n  }\n\n  protected set props(val: PostHogEventProperties | undefined) {\n    this._props = val\n  }\n\n  async register(properties: PostHogEventProperties): Promise<void> {\n    this.wrap(() => {\n      this.props = {\n        ...this.props,\n        ...properties,\n      }\n      this.setPersistedProperty<PostHogEventProperties>(PostHogPersistedProperty.Props, this.props)\n    })\n  }\n\n  async unregister(property: string): Promise<void> {\n    this.wrap(() => {\n      delete this.props[property]\n      this.setPersistedProperty<PostHogEventProperties>(PostHogPersistedProperty.Props, this.props)\n    })\n  }\n\n  /***\n   *** QUEUEING AND FLUSHING\n   ***/\n  protected enqueue(type: string, _message: any, options?: PostHogCaptureOptions): void {\n    this.wrap(() => {\n      if (this.optedOut) {\n        this._events.emit(type, `Library is disabled. Not sending event. To re-enable, call posthog.optIn()`)\n        return\n      }\n\n      const message = this.prepareMessage(type, _message, options)\n\n      const queue = this.getPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue) || []\n\n      if (queue.length >= this.maxQueueSize) {\n        queue.shift()\n        this.logMsgIfDebug(() => console.info('Queue is full, the oldest event is dropped.'))\n      }\n\n      queue.push({ message })\n      this.setPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue, queue)\n\n      this._events.emit(type, message)\n\n      // Flush queued events if we meet the flushAt length\n      if (queue.length >= this.flushAt) {\n        this.flushBackground()\n      }\n\n      if (this.flushInterval && !this._flushTimer) {\n        this._flushTimer = safeSetTimeout(() => this.flushBackground(), this.flushInterval)\n      }\n    })\n  }\n\n  protected async sendImmediate(type: string, _message: any, options?: PostHogCaptureOptions): Promise<void> {\n    if (this.disabled) {\n      this.logMsgIfDebug(() => console.warn('[PostHog] The client is disabled'))\n      return\n    }\n\n    if (!this._isInitialized) {\n      await this._initPromise\n    }\n\n    if (this.optedOut) {\n      this._events.emit(type, `Library is disabled. Not sending event. To re-enable, call posthog.optIn()`)\n      return\n    }\n\n    const data: Record<string, any> = {\n      api_key: this.apiKey,\n      batch: [this.prepareMessage(type, _message, options)],\n      sent_at: currentISOTime(),\n    }\n\n    if (this.historicalMigration) {\n      data.historical_migration = true\n    }\n\n    const payload = JSON.stringify(data)\n\n    const url = `${this.host}/batch/`\n\n    const gzippedPayload = !this.disableCompression ? await gzipCompress(payload, this.isDebug) : null\n    const fetchOptions: PostHogFetchOptions = {\n      method: 'POST',\n      headers: {\n        ...this.getCustomHeaders(),\n        'Content-Type': 'application/json',\n        ...(gzippedPayload !== null && { 'Content-Encoding': 'gzip' }),\n      },\n      body: gzippedPayload || payload,\n    }\n\n    try {\n      await this.fetchWithRetry(url, fetchOptions)\n    } catch (err) {\n      this._events.emit('error', err)\n    }\n  }\n\n  private prepareMessage(type: string, _message: any, options?: PostHogCaptureOptions): PostHogEventProperties {\n    const message = {\n      ..._message,\n      type: type,\n      library: this.getLibraryId(),\n      library_version: this.getLibraryVersion(),\n      timestamp: options?.timestamp ? options?.timestamp : currentISOTime(),\n      uuid: options?.uuid ? options.uuid : uuidv7(),\n    }\n\n    const addGeoipDisableProperty = options?.disableGeoip ?? this.disableGeoip\n    if (addGeoipDisableProperty) {\n      if (!message.properties) {\n        message.properties = {}\n      }\n      message['properties']['$geoip_disable'] = true\n    }\n\n    if (message.distinctId) {\n      message.distinct_id = message.distinctId\n      delete message.distinctId\n    }\n\n    return message\n  }\n\n  private clearFlushTimer(): void {\n    if (this._flushTimer) {\n      clearTimeout(this._flushTimer)\n      this._flushTimer = undefined\n    }\n  }\n\n  /**\n   * Helper for flushing the queue in the background\n   * Avoids unnecessary promise errors\n   */\n  private flushBackground(): void {\n    void this.flush().catch(async (err) => {\n      await logFlushError(err)\n    })\n  }\n\n  /**\n   * Flushes the queue\n   *\n   * This function will return a promise that will resolve when the flush is complete,\n   * or reject if there was an error (for example if the server or network is down).\n   *\n   * If there is already a flush in progress, this function will wait for that flush to complete.\n   *\n   * It's recommended to do error handling in the callback of the promise.\n   *\n   * @example\n   * posthog.flush().then(() => {\n   *   console.log('Flush complete')\n   * }).catch((err) => {\n   *   console.error('Flush failed', err)\n   * })\n   *\n   *\n   * @throws PostHogFetchHttpError\n   * @throws PostHogFetchNetworkError\n   * @throws Error\n   */\n  async flush(): Promise<void> {\n    // Wait for the current flush operation to finish (regardless of success or failure), then try to flush again.\n    // Use allSettled instead of finally to be defensive around flush throwing errors immediately rather than rejecting.\n    // Use a custom allSettled implementation to avoid issues with patching Promise on RN\n    const nextFlushPromise = allSettled([this.flushPromise]).then(() => {\n      return this._flush()\n    })\n\n    this.flushPromise = nextFlushPromise\n    void this.addPendingPromise(nextFlushPromise)\n\n    allSettled([nextFlushPromise]).then(() => {\n      // If there are no others waiting to flush, clear the promise.\n      // We don't strictly need to do this, but it could make debugging easier\n      if (this.flushPromise === nextFlushPromise) {\n        this.flushPromise = null\n      }\n    })\n\n    return nextFlushPromise\n  }\n\n  protected getCustomHeaders(): { [key: string]: string } {\n    // Don't set the user agent if we're not on a browser. The latest spec allows\n    // the User-Agent header (see https://fetch.spec.whatwg.org/#terminology-headers\n    // and https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader),\n    // but browsers such as Chrome and Safari have not caught up.\n    const customUserAgent = this.getCustomUserAgent()\n    const headers: { [key: string]: string } = {}\n    if (customUserAgent && customUserAgent !== '') {\n      headers['User-Agent'] = customUserAgent\n    }\n    return headers\n  }\n\n  private async _flush(): Promise<void> {\n    this.clearFlushTimer()\n    await this._initPromise\n\n    let queue = this.getPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue) || []\n\n    if (!queue.length) {\n      return\n    }\n\n    const sentMessages: any[] = []\n    const originalQueueLength = queue.length\n\n    while (queue.length > 0 && sentMessages.length < originalQueueLength) {\n      const batchItems = queue.slice(0, this.maxBatchSize)\n      const batchMessages = batchItems.map((item) => item.message)\n\n      const persistQueueChange = (): void => {\n        const refreshedQueue = this.getPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue) || []\n        const newQueue = refreshedQueue.slice(batchItems.length)\n        this.setPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue, newQueue)\n        queue = newQueue\n      }\n\n      const data: Record<string, any> = {\n        api_key: this.apiKey,\n        batch: batchMessages,\n        sent_at: currentISOTime(),\n      }\n\n      if (this.historicalMigration) {\n        data.historical_migration = true\n      }\n\n      const payload = JSON.stringify(data)\n\n      const url = `${this.host}/batch/`\n\n      const gzippedPayload = !this.disableCompression ? await gzipCompress(payload, this.isDebug) : null\n      const fetchOptions: PostHogFetchOptions = {\n        method: 'POST',\n        headers: {\n          ...this.getCustomHeaders(),\n          'Content-Type': 'application/json',\n          ...(gzippedPayload !== null && { 'Content-Encoding': 'gzip' }),\n        },\n        body: gzippedPayload || payload,\n      }\n\n      const retryOptions: Partial<RetriableOptions> = {\n        retryCheck: (err) => {\n          // don't automatically retry on 413 errors, we want to reduce the batch size first\n          if (isPostHogFetchContentTooLargeError(err)) {\n            return false\n          }\n          // otherwise, retry on network errors\n          return isPostHogFetchError(err)\n        },\n      }\n\n      try {\n        await this.fetchWithRetry(url, fetchOptions, retryOptions)\n      } catch (err) {\n        if (isPostHogFetchContentTooLargeError(err) && batchMessages.length > 1) {\n          // if we get a 413 error, we want to reduce the batch size and try again\n          this.maxBatchSize = Math.max(1, Math.floor(batchMessages.length / 2))\n          this.logMsgIfDebug(() =>\n            console.warn(\n              `Received 413 when sending batch of size ${batchMessages.length}, reducing batch size to ${this.maxBatchSize}`\n            )\n          )\n          // do not persist the queue change, we want to retry the same batch\n          continue\n        }\n\n        // depending on the error type, eg a malformed JSON or broken queue, it'll always return an error\n        // and this will be an endless loop, in this case, if the error isn't a network issue, we always remove the items from the queue\n        if (!(err instanceof PostHogFetchNetworkError)) {\n          persistQueueChange()\n        }\n        this._events.emit('error', err)\n\n        throw err\n      }\n\n      persistQueueChange()\n\n      sentMessages.push(...batchMessages)\n    }\n    this._events.emit('flush', sentMessages)\n  }\n\n  private async fetchWithRetry(\n    url: string,\n    options: PostHogFetchOptions,\n    retryOptions?: Partial<RetriableOptions>,\n    requestTimeout?: number\n  ): Promise<PostHogFetchResponse> {\n    ;(AbortSignal as any).timeout ??= function timeout(ms: number) {\n      const ctrl = new AbortController()\n      setTimeout(() => ctrl.abort(), ms)\n      return ctrl.signal\n    }\n\n    const body = options.body ? options.body : ''\n    let reqByteLength = -1\n    try {\n      if (body instanceof Blob) {\n        reqByteLength = body.size\n      } else {\n        reqByteLength = Buffer.byteLength(body, STRING_FORMAT)\n      }\n    } catch {\n      if (body instanceof Blob) {\n        reqByteLength = body.size\n      } else {\n        const encoded = new TextEncoder().encode(body)\n        reqByteLength = encoded.length\n      }\n    }\n\n    return await retriable(\n      async () => {\n        let res: PostHogFetchResponse | null = null\n        try {\n          res = await this.fetch(url, {\n            signal: (AbortSignal as any).timeout(requestTimeout ?? this.requestTimeout),\n            ...options,\n          })\n        } catch (e) {\n          // fetch will only throw on network errors or on timeouts\n          throw new PostHogFetchNetworkError(e)\n        }\n        // If we're in no-cors mode, we can't access the response status\n        // We only throw on HTTP errors if we're not in no-cors mode\n        // https://developer.mozilla.org/en-US/docs/Web/API/Request/mode#no-cors\n        const isNoCors = options.mode === 'no-cors'\n        if (!isNoCors && (res.status < 200 || res.status >= 400)) {\n          throw new PostHogFetchHttpError(res, reqByteLength)\n        }\n        return res\n      },\n      { ...this._retryOptions, ...retryOptions }\n    )\n  }\n\n  async _shutdown(shutdownTimeoutMs: number = 30000): Promise<void> {\n    // A little tricky - we want to have a max shutdown time and enforce it, even if that means we have some\n    // dangling promises. We'll keep track of the timeout and resolve/reject based on that.\n\n    await this._initPromise\n    let hasTimedOut = false\n    this.clearFlushTimer()\n\n    const doShutdown = async (): Promise<void> => {\n      try {\n        await Promise.all(Object.values(this.pendingPromises))\n\n        while (true) {\n          const queue = this.getPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue) || []\n\n          if (queue.length === 0) {\n            break\n          }\n\n          // flush again to make sure we send all events, some of which might've been added\n          // while we were waiting for the pending promises to resolve\n          // For example, see sendFeatureFlags in posthog-node/src/posthog-node.ts::capture\n          await this.flush()\n\n          if (hasTimedOut) {\n            break\n          }\n        }\n      } catch (e) {\n        if (!isPostHogFetchError(e)) {\n          throw e\n        }\n\n        await logFlushError(e)\n      }\n    }\n\n    return Promise.race([\n      new Promise<void>((_, reject) => {\n        safeSetTimeout(() => {\n          this.logMsgIfDebug(() => console.error('Timed out while shutting down PostHog'))\n          hasTimedOut = true\n          reject('Timeout while shutting down PostHog. Some events may not have been sent.')\n        }, shutdownTimeoutMs)\n      }),\n      doShutdown(),\n    ])\n  }\n\n  /**\n   *  Call shutdown() once before the node process exits, so ensure that all events have been sent and all promises\n   *  have resolved. Do not use this function if you intend to keep using this PostHog instance after calling it.\n   * @param shutdownTimeoutMs\n   */\n  async shutdown(shutdownTimeoutMs: number = 30000): Promise<void> {\n    if (this.shutdownPromise) {\n      this.logMsgIfDebug(() =>\n        console.warn(\n          'shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup'\n        )\n      )\n    } else {\n      this.shutdownPromise = this._shutdown(shutdownTimeoutMs).finally(() => {\n        this.shutdownPromise = null\n      })\n    }\n    return this.shutdownPromise\n  }\n}\n\nexport abstract class PostHogCore extends PostHogCoreStateless {\n  // options\n  private sendFeatureFlagEvent: boolean\n  private flagCallReported: { [key: string]: boolean } = {}\n\n  // internal\n  protected _flagsResponsePromise?: Promise<PostHogFlagsResponse | undefined> // TODO: come back to this, fix typing\n  protected _sessionExpirationTimeSeconds: number\n  private _sessionMaxLengthSeconds: number = 24 * 60 * 60 // 24 hours\n  protected sessionProps: PostHogEventProperties = {}\n\n  constructor(apiKey: string, options?: PostHogCoreOptions) {\n    // Default for stateful mode is to not disable geoip. Only override if explicitly set\n    const disableGeoipOption = options?.disableGeoip ?? false\n\n    // Default for stateful mode is to timeout at 10s. Only override if explicitly set\n    const featureFlagsRequestTimeoutMs = options?.featureFlagsRequestTimeoutMs ?? 10000 // 10 seconds\n\n    super(apiKey, { ...options, disableGeoip: disableGeoipOption, featureFlagsRequestTimeoutMs })\n\n    this.sendFeatureFlagEvent = options?.sendFeatureFlagEvent ?? true\n    this._sessionExpirationTimeSeconds = options?.sessionExpirationTimeSeconds ?? 1800 // 30 minutes\n  }\n\n  protected setupBootstrap(options?: Partial<PostHogCoreOptions>): void {\n    const bootstrap = options?.bootstrap\n    if (!bootstrap) {\n      return\n    }\n\n    // bootstrap options are only set if no persisted values are found\n    // this is to prevent overwriting existing values\n    if (bootstrap.distinctId) {\n      if (bootstrap.isIdentifiedId) {\n        const distinctId = this.getPersistedProperty(PostHogPersistedProperty.DistinctId)\n\n        if (!distinctId) {\n          this.setPersistedProperty(PostHogPersistedProperty.DistinctId, bootstrap.distinctId)\n        }\n      } else {\n        const anonymousId = this.getPersistedProperty(PostHogPersistedProperty.AnonymousId)\n\n        if (!anonymousId) {\n          this.setPersistedProperty(PostHogPersistedProperty.AnonymousId, bootstrap.distinctId)\n        }\n      }\n    }\n\n    const bootstrapFeatureFlags = bootstrap.featureFlags\n    const bootstrapFeatureFlagPayloads = bootstrap.featureFlagPayloads ?? {}\n    if (bootstrapFeatureFlags && Object.keys(bootstrapFeatureFlags).length) {\n      const normalizedBootstrapFeatureFlagDetails = createFlagsResponseFromFlagsAndPayloads(\n        bootstrapFeatureFlags,\n        bootstrapFeatureFlagPayloads\n      )\n\n      if (Object.keys(normalizedBootstrapFeatureFlagDetails.flags).length > 0) {\n        this.setBootstrappedFeatureFlagDetails(normalizedBootstrapFeatureFlagDetails)\n\n        const currentFeatureFlagDetails = this.getKnownFeatureFlagDetails() || { flags: {}, requestId: undefined }\n        const newFeatureFlagDetails = {\n          flags: {\n            ...normalizedBootstrapFeatureFlagDetails.flags,\n            ...currentFeatureFlagDetails.flags,\n          },\n          requestId: normalizedBootstrapFeatureFlagDetails.requestId,\n        }\n\n        this.setKnownFeatureFlagDetails(newFeatureFlagDetails)\n      }\n    }\n  }\n\n  private clearProps(): void {\n    this.props = undefined\n    this.sessionProps = {}\n    this.flagCallReported = {}\n  }\n\n  on(event: string, cb: (...args: any[]) => void): () => void {\n    return this._events.on(event, cb)\n  }\n\n  reset(propertiesToKeep?: PostHogPersistedProperty[]): void {\n    this.wrap(() => {\n      const allPropertiesToKeep = [PostHogPersistedProperty.Queue, ...(propertiesToKeep || [])]\n\n      // clean up props\n      this.clearProps()\n\n      for (const key of <(keyof typeof PostHogPersistedProperty)[]>Object.keys(PostHogPersistedProperty)) {\n        if (!allPropertiesToKeep.includes(PostHogPersistedProperty[key])) {\n          this.setPersistedProperty((PostHogPersistedProperty as any)[key], null)\n        }\n      }\n\n      this.reloadFeatureFlags()\n    })\n  }\n\n  protected getCommonEventProperties(): PostHogEventProperties {\n    const featureFlags = this.getFeatureFlags()\n\n    const featureVariantProperties: Record<string, FeatureFlagValue> = {}\n    if (featureFlags) {\n      for (const [feature, variant] of Object.entries(featureFlags)) {\n        featureVariantProperties[`$feature/${feature}`] = variant\n      }\n    }\n    return {\n      ...maybeAdd('$active_feature_flags', featureFlags ? Object.keys(featureFlags) : undefined),\n      ...featureVariantProperties,\n      ...super.getCommonEventProperties(),\n    }\n  }\n\n  private enrichProperties(properties?: PostHogEventProperties): PostHogEventProperties {\n    return {\n      ...this.props, // Persisted properties first\n      ...this.sessionProps, // Followed by session properties\n      ...(properties || {}), // Followed by user specified properties\n      ...this.getCommonEventProperties(), // Followed by FF props\n      $session_id: this.getSessionId(),\n    }\n  }\n\n  /**\n   * * @returns {string} The stored session ID for the current session. This may be an empty string if the client is not yet fully initialized.\n   */\n  getSessionId(): string {\n    if (!this._isInitialized) {\n      return ''\n    }\n\n    let sessionId = this.getPersistedProperty<string>(PostHogPersistedProperty.SessionId)\n    const sessionLastTimestamp = this.getPersistedProperty<number>(PostHogPersistedProperty.SessionLastTimestamp) || 0\n    const sessionStartTimestamp = this.getPersistedProperty<number>(PostHogPersistedProperty.SessionStartTimestamp) || 0\n    const now = Date.now()\n    const sessionLastDif = now - sessionLastTimestamp\n    const sessionStartDif = now - sessionStartTimestamp\n    if (\n      !sessionId ||\n      sessionLastDif > this._sessionExpirationTimeSeconds * 1000 ||\n      sessionStartDif > this._sessionMaxLengthSeconds * 1000\n    ) {\n      sessionId = uuidv7()\n      this.setPersistedProperty(PostHogPersistedProperty.SessionId, sessionId)\n      this.setPersistedProperty(PostHogPersistedProperty.SessionStartTimestamp, now)\n    }\n    this.setPersistedProperty(PostHogPersistedProperty.SessionLastTimestamp, now)\n\n    return sessionId\n  }\n\n  resetSessionId(): void {\n    this.wrap(() => {\n      this.setPersistedProperty(PostHogPersistedProperty.SessionId, null)\n      this.setPersistedProperty(PostHogPersistedProperty.SessionLastTimestamp, null)\n      this.setPersistedProperty(PostHogPersistedProperty.SessionStartTimestamp, null)\n    })\n  }\n\n  /**\n   * * @returns {string} The stored anonymous ID. This may be an empty string if the client is not yet fully initialized.\n   */\n  getAnonymousId(): string {\n    if (!this._isInitialized) {\n      return ''\n    }\n\n    let anonId = this.getPersistedProperty<string>(PostHogPersistedProperty.AnonymousId)\n    if (!anonId) {\n      anonId = uuidv7()\n      this.setPersistedProperty(PostHogPersistedProperty.AnonymousId, anonId)\n    }\n    return anonId\n  }\n\n  /**\n   * * @returns {string} The stored distinct ID. This may be an empty string if the client is not yet fully initialized.\n   */\n  getDistinctId(): string {\n    if (!this._isInitialized) {\n      return ''\n    }\n\n    return this.getPersistedProperty<string>(PostHogPersistedProperty.DistinctId) || this.getAnonymousId()\n  }\n\n  registerForSession(properties: PostHogEventProperties): void {\n    this.sessionProps = {\n      ...this.sessionProps,\n      ...properties,\n    }\n  }\n\n  unregisterForSession(property: string): void {\n    delete this.sessionProps[property]\n  }\n\n  /***\n   *** TRACKING\n   ***/\n  identify(distinctId?: string, properties?: PostHogEventProperties, options?: PostHogCaptureOptions): void {\n    this.wrap(() => {\n      const previousDistinctId = this.getDistinctId()\n      distinctId = distinctId || previousDistinctId\n\n      if (properties?.$groups) {\n        this.groups(properties.$groups as PostHogGroupProperties)\n      }\n\n      // promote $set and $set_once to top level\n      const userPropsOnce = properties?.$set_once\n      delete properties?.$set_once\n\n      // if no $set is provided we assume all properties are $set\n      const userProps = properties?.$set || properties\n\n      const allProperties = this.enrichProperties({\n        $anon_distinct_id: this.getAnonymousId(),\n        ...maybeAdd('$set', userProps),\n        ...maybeAdd('$set_once', userPropsOnce),\n      })\n\n      if (distinctId !== previousDistinctId) {\n        // We keep the AnonymousId to be used by flags calls and identify to link the previousId\n        this.setPersistedProperty(PostHogPersistedProperty.AnonymousId, previousDistinctId)\n        this.setPersistedProperty(PostHogPersistedProperty.DistinctId, distinctId)\n        this.reloadFeatureFlags()\n      }\n\n      super.identifyStateless(distinctId, allProperties, options)\n    })\n  }\n\n  capture(event: string, properties?: PostHogEventProperties, options?: PostHogCaptureOptions): void {\n    this.wrap(() => {\n      const distinctId = this.getDistinctId()\n\n      if (properties?.$groups) {\n        this.groups(properties.$groups as PostHogGroupProperties)\n      }\n\n      const allProperties = this.enrichProperties(properties)\n\n      super.captureStateless(distinctId, event, allProperties, options)\n    })\n  }\n\n  alias(alias: string): void {\n    this.wrap(() => {\n      const distinctId = this.getDistinctId()\n      const allProperties = this.enrichProperties({})\n\n      super.aliasStateless(alias, distinctId, allProperties)\n    })\n  }\n\n  autocapture(\n    eventType: string,\n    elements: PostHogAutocaptureElement[],\n    properties: PostHogEventProperties = {},\n    options?: PostHogCaptureOptions\n  ): void {\n    this.wrap(() => {\n      const distinctId = this.getDistinctId()\n      const payload = {\n        distinct_id: distinctId,\n        event: '$autocapture',\n        properties: {\n          ...this.enrichProperties(properties),\n          $event_type: eventType,\n          $elements: elements,\n        },\n      }\n\n      this.enqueue('autocapture', payload, options)\n    })\n  }\n\n  /***\n   *** GROUPS\n   ***/\n\n  groups(groups: PostHogGroupProperties): void {\n    this.wrap(() => {\n      // Get persisted groups\n      const existingGroups = this.props.$groups || {}\n\n      this.register({\n        $groups: {\n          ...(existingGroups as PostHogGroupProperties),\n          ...groups,\n        },\n      })\n\n      if (Object.keys(groups).find((type) => existingGroups[type as keyof typeof existingGroups] !== groups[type])) {\n        this.reloadFeatureFlags()\n      }\n    })\n  }\n\n  group(\n    groupType: string,\n    groupKey: string | number,\n    groupProperties?: PostHogEventProperties,\n    options?: PostHogCaptureOptions\n  ): void {\n    this.wrap(() => {\n      this.groups({\n        [groupType]: groupKey,\n      })\n\n      if (groupProperties) {\n        this.groupIdentify(groupType, groupKey, groupProperties, options)\n      }\n    })\n  }\n\n  groupIdentify(\n    groupType: string,\n    groupKey: string | number,\n    groupProperties?: PostHogEventProperties,\n    options?: PostHogCaptureOptions\n  ): void {\n    this.wrap(() => {\n      const distinctId = this.getDistinctId()\n      const eventProperties = this.enrichProperties({})\n      super.groupIdentifyStateless(groupType, groupKey, groupProperties, options, distinctId, eventProperties)\n    })\n  }\n\n  /***\n   * PROPERTIES\n   ***/\n  setPersonPropertiesForFlags(properties: { [type: string]: string }): void {\n    this.wrap(() => {\n      // Get persisted person properties\n      const existingProperties =\n        this.getPersistedProperty<Record<string, string>>(PostHogPersistedProperty.PersonProperties) || {}\n\n      this.setPersistedProperty<PostHogEventProperties>(PostHogPersistedProperty.PersonProperties, {\n        ...existingProperties,\n        ...properties,\n      })\n    })\n  }\n\n  resetPersonPropertiesForFlags(): void {\n    this.wrap(() => {\n      this.setPersistedProperty<PostHogEventProperties>(PostHogPersistedProperty.PersonProperties, null)\n    })\n  }\n\n  setGroupPropertiesForFlags(properties: { [type: string]: Record<string, string> }): void {\n    this.wrap(() => {\n      // Get persisted group properties\n      const existingProperties =\n        this.getPersistedProperty<Record<string, Record<string, string>>>(PostHogPersistedProperty.GroupProperties) ||\n        {}\n\n      if (Object.keys(existingProperties).length !== 0) {\n        Object.keys(existingProperties).forEach((groupType) => {\n          existingProperties[groupType] = {\n            ...existingProperties[groupType],\n            ...properties[groupType],\n          }\n          delete properties[groupType]\n        })\n      }\n\n      this.setPersistedProperty<PostHogEventProperties>(PostHogPersistedProperty.GroupProperties, {\n        ...existingProperties,\n        ...properties,\n      })\n    })\n  }\n\n  resetGroupPropertiesForFlags(): void {\n    this.wrap(() => {\n      this.setPersistedProperty<PostHogEventProperties>(PostHogPersistedProperty.GroupProperties, null)\n    })\n  }\n\n  private async remoteConfigAsync(): Promise<PostHogRemoteConfig | undefined> {\n    await this._initPromise\n    if (this._remoteConfigResponsePromise) {\n      return this._remoteConfigResponsePromise\n    }\n    return this._remoteConfigAsync()\n  }\n\n  /***\n   *** FEATURE FLAGS\n   ***/\n  private async flagsAsync(sendAnonDistinctId: boolean = true): Promise<PostHogFlagsResponse | undefined> {\n    await this._initPromise\n    if (this._flagsResponsePromise) {\n      return this._flagsResponsePromise\n    }\n    return this._flagsAsync(sendAnonDistinctId)\n  }\n\n  private cacheSessionReplay(source: string, response?: PostHogRemoteConfig): void {\n    const sessionReplay = response?.sessionRecording\n    if (sessionReplay) {\n      this.setPersistedProperty(PostHogPersistedProperty.SessionReplay, sessionReplay)\n      this.logMsgIfDebug(() =>\n        console.log('PostHog Debug', `Session replay config from ${source}: `, JSON.stringify(sessionReplay))\n      )\n    } else if (typeof sessionReplay === 'boolean' && sessionReplay === false) {\n      // if session replay is disabled, we don't need to cache it\n      // we need to check for this because the response might be undefined (/flags does not return sessionRecording yet)\n      this.logMsgIfDebug(() => console.info('PostHog Debug', `Session replay config from ${source} disabled.`))\n      this.setPersistedProperty(PostHogPersistedProperty.SessionReplay, null)\n    }\n  }\n\n  private async _remoteConfigAsync(): Promise<PostHogRemoteConfig | undefined> {\n    this._remoteConfigResponsePromise = this._initPromise\n      .then(() => {\n        let remoteConfig = this.getPersistedProperty<Omit<PostHogRemoteConfig, 'surveys'>>(\n          PostHogPersistedProperty.RemoteConfig\n        )\n\n        this.logMsgIfDebug(() => console.log('PostHog Debug', 'Cached remote config: ', JSON.stringify(remoteConfig)))\n\n        return super.getRemoteConfig().then((response) => {\n          if (response) {\n            const remoteConfigWithoutSurveys = { ...response }\n            delete remoteConfigWithoutSurveys.surveys\n\n            this.logMsgIfDebug(() =>\n              console.log('PostHog Debug', 'Fetched remote config: ', JSON.stringify(remoteConfigWithoutSurveys))\n            )\n\n            if (this.disableSurveys === false) {\n              const surveys = response.surveys\n\n              let hasSurveys = true\n\n              if (!Array.isArray(surveys)) {\n                // If surveys is not an array, it means there are no surveys (its a boolean instead)\n                this.logMsgIfDebug(() => console.log('PostHog Debug', 'There are no surveys.'))\n                hasSurveys = false\n              } else {\n                this.logMsgIfDebug(() =>\n                  console.log('PostHog Debug', 'Surveys fetched from remote config: ', JSON.stringify(surveys))\n                )\n              }\n\n              if (hasSurveys) {\n                this.setPersistedProperty<SurveyResponse['surveys']>(\n                  PostHogPersistedProperty.Surveys,\n                  surveys as Survey[]\n                )\n              } else {\n                this.setPersistedProperty<SurveyResponse['surveys']>(PostHogPersistedProperty.Surveys, null)\n              }\n            } else {\n              this.setPersistedProperty<SurveyResponse['surveys']>(PostHogPersistedProperty.Surveys, null)\n            }\n            // we cache the surveys in its own storage key\n            this.setPersistedProperty<Omit<PostHogRemoteConfig, 'surveys'>>(\n              PostHogPersistedProperty.RemoteConfig,\n              remoteConfigWithoutSurveys\n            )\n\n            this.cacheSessionReplay('remote config', response)\n\n            // we only dont load flags if the remote config has no feature flags\n            if (response.hasFeatureFlags === false) {\n              // resetting flags to empty object\n              this.setKnownFeatureFlagDetails({ flags: {} })\n\n              this.logMsgIfDebug(() => console.warn('Remote config has no feature flags, will not load feature flags.'))\n            } else if (this.preloadFeatureFlags !== false) {\n              this.reloadFeatureFlags()\n            }\n\n            if (!response.supportedCompression?.includes(Compression.GZipJS)) {\n              this.disableCompression = true\n            }\n\n            remoteConfig = response\n          }\n\n          return remoteConfig\n        })\n      })\n      .finally(() => {\n        this._remoteConfigResponsePromise = undefined\n      })\n    return this._remoteConfigResponsePromise\n  }\n\n  private async _flagsAsync(sendAnonDistinctId: boolean = true): Promise<PostHogFlagsResponse | undefined> {\n    this._flagsResponsePromise = this._initPromise\n      .then(async () => {\n        const distinctId = this.getDistinctId()\n        const groups = this.props.$groups || {}\n        const personProperties =\n          this.getPersistedProperty<Record<string, string>>(PostHogPersistedProperty.PersonProperties) || {}\n        const groupProperties =\n          this.getPersistedProperty<Record<string, Record<string, string>>>(PostHogPersistedProperty.GroupProperties) ||\n          {}\n\n        const extraProperties = {\n          $anon_distinct_id: sendAnonDistinctId ? this.getAnonymousId() : undefined,\n        }\n\n        const res = await super.getFlags(\n          distinctId,\n          groups as PostHogGroupProperties,\n          personProperties,\n          groupProperties,\n          extraProperties\n        )\n        // Add check for quota limitation on feature flags\n        if (res?.quotaLimited?.includes(QuotaLimitedFeature.FeatureFlags)) {\n          // Unset all feature flags by setting to null\n          this.setKnownFeatureFlagDetails(null)\n          console.warn(\n            '[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts'\n          )\n          return res\n        }\n        if (res?.featureFlags) {\n          // clear flag call reported if we have new flags since they might have changed\n          if (this.sendFeatureFlagEvent) {\n            this.flagCallReported = {}\n          }\n\n          let newFeatureFlagDetails = res\n          if (res.errorsWhileComputingFlags) {\n            // if not all flags were computed, we upsert flags instead of replacing them\n            const currentFlagDetails = this.getKnownFeatureFlagDetails()\n            this.logMsgIfDebug(() =>\n              console.log('PostHog Debug', 'Cached feature flags: ', JSON.stringify(currentFlagDetails))\n            )\n\n            newFeatureFlagDetails = {\n              ...res,\n              flags: { ...currentFlagDetails?.flags, ...res.flags },\n            }\n          }\n          this.setKnownFeatureFlagDetails(newFeatureFlagDetails)\n          // Mark that we hit the /flags endpoint so we can capture this in the $feature_flag_called event\n          this.setPersistedProperty(PostHogPersistedProperty.FlagsEndpointWasHit, true)\n          this.cacheSessionReplay('flags', res)\n        }\n        return res\n      })\n      .finally(() => {\n        this._flagsResponsePromise = undefined\n      })\n    return this._flagsResponsePromise\n  }\n\n  // We only store the flags and request id in the feature flag details storage key\n  private setKnownFeatureFlagDetails(flagsResponse: PostHogFlagsStorageFormat | null): void {\n    this.wrap(() => {\n      this.setPersistedProperty<PostHogFlagsStorageFormat>(PostHogPersistedProperty.FeatureFlagDetails, flagsResponse)\n\n      this._events.emit('featureflags', getFlagValuesFromFlags(flagsResponse?.flags ?? {}))\n    })\n  }\n\n  private getKnownFeatureFlagDetails(): PostHogFeatureFlagDetails | undefined {\n    const storedDetails = this.getPersistedProperty<PostHogFlagsStorageFormat>(\n      PostHogPersistedProperty.FeatureFlagDetails\n    )\n    if (!storedDetails) {\n      // Rebuild from the stored feature flags and feature flag payloads\n      const featureFlags = this.getPersistedProperty<PostHogFlagsResponse['featureFlags']>(\n        PostHogPersistedProperty.FeatureFlags\n      )\n      const featureFlagPayloads = this.getPersistedProperty<PostHogFlagsResponse['featureFlagPayloads']>(\n        PostHogPersistedProperty.FeatureFlagPayloads\n      )\n\n      if (featureFlags === undefined && featureFlagPayloads === undefined) {\n        return undefined\n      }\n\n      return createFlagsResponseFromFlagsAndPayloads(featureFlags ?? {}, featureFlagPayloads ?? {})\n    }\n\n    return normalizeFlagsResponse(\n      storedDetails as PostHogV1FlagsResponse | PostHogV2FlagsResponse\n    ) as PostHogFeatureFlagDetails\n  }\n\n  protected getKnownFeatureFlags(): PostHogFlagsResponse['featureFlags'] | undefined {\n    const featureFlagDetails = this.getKnownFeatureFlagDetails()\n    if (!featureFlagDetails) {\n      return undefined\n    }\n    return getFlagValuesFromFlags(featureFlagDetails.flags)\n  }\n\n  private getKnownFeatureFlagPayloads(): PostHogFlagsResponse['featureFlagPayloads'] | undefined {\n    const featureFlagDetails = this.getKnownFeatureFlagDetails()\n    if (!featureFlagDetails) {\n      return undefined\n    }\n    return getPayloadsFromFlags(featureFlagDetails.flags)\n  }\n\n  private getBootstrappedFeatureFlagDetails(): PostHogFeatureFlagDetails | undefined {\n    const details = this.getPersistedProperty<PostHogFeatureFlagDetails>(\n      PostHogPersistedProperty.BootstrapFeatureFlagDetails\n    )\n    if (!details) {\n      return undefined\n    }\n    return details\n  }\n\n  private setBootstrappedFeatureFlagDetails(details: PostHogFeatureFlagDetails): void {\n    this.setPersistedProperty<PostHogFeatureFlagDetails>(PostHogPersistedProperty.BootstrapFeatureFlagDetails, details)\n  }\n\n  private getBootstrappedFeatureFlags(): PostHogFlagsResponse['featureFlags'] | undefined {\n    const details = this.getBootstrappedFeatureFlagDetails()\n    if (!details) {\n      return undefined\n    }\n    return getFlagValuesFromFlags(details.flags)\n  }\n\n  private getBootstrappedFeatureFlagPayloads(): PostHogFlagsResponse['featureFlagPayloads'] | undefined {\n    const details = this.getBootstrappedFeatureFlagDetails()\n    if (!details) {\n      return undefined\n    }\n    return getPayloadsFromFlags(details.flags)\n  }\n\n  getFeatureFlag(key: string): FeatureFlagValue | undefined {\n    const details = this.getFeatureFlagDetails()\n\n    if (!details) {\n      // If we haven't loaded flags yet, or errored out, we respond with undefined\n      return undefined\n    }\n\n    const featureFlag = details.flags[key]\n\n    let response = getFeatureFlagValue(featureFlag)\n\n    if (response === undefined) {\n      // For cases where the flag is unknown, return false\n      response = false\n    }\n\n    if (this.sendFeatureFlagEvent && !this.flagCallReported[key]) {\n      const bootstrappedResponse = this.getBootstrappedFeatureFlags()?.[key]\n      const bootstrappedPayload = this.getBootstrappedFeatureFlagPayloads()?.[key]\n\n      this.flagCallReported[key] = true\n      this.capture('$feature_flag_called', {\n        $feature_flag: key,\n        $feature_flag_response: response,\n        ...maybeAdd('$feature_flag_id', featureFlag?.metadata?.id),\n        ...maybeAdd('$feature_flag_version', featureFlag?.metadata?.version),\n        ...maybeAdd('$feature_flag_reason', featureFlag?.reason?.description ?? featureFlag?.reason?.code),\n        ...maybeAdd('$feature_flag_bootstrapped_response', bootstrappedResponse),\n        ...maybeAdd('$feature_flag_bootstrapped_payload', bootstrappedPayload),\n        // If we haven't yet received a response from the /flags endpoint, we must have used the bootstrapped value\n        $used_bootstrap_value: !this.getPersistedProperty(PostHogPersistedProperty.FlagsEndpointWasHit),\n        ...maybeAdd('$feature_flag_request_id', details.requestId),\n      })\n    }\n\n    // If we have flags we either return the value (true or string) or false\n    return response\n  }\n\n  getFeatureFlagPayload(key: string): JsonType | undefined {\n    const payloads = this.getFeatureFlagPayloads()\n\n    if (!payloads) {\n      return undefined\n    }\n\n    const response = payloads[key]\n\n    // Undefined means a loading or missing data issue. Null means evaluation happened and there was no match\n    if (response === undefined) {\n      return null\n    }\n\n    return response\n  }\n\n  getFeatureFlagPayloads(): PostHogFlagsResponse['featureFlagPayloads'] | undefined {\n    return this.getFeatureFlagDetails()?.featureFlagPayloads\n  }\n\n  getFeatureFlags(): PostHogFlagsResponse['featureFlags'] | undefined {\n    // NOTE: We don't check for _initPromise here as the function is designed to be\n    // callable before the state being loaded anyways\n    return this.getFeatureFlagDetails()?.featureFlags\n  }\n\n  getFeatureFlagDetails(): PostHogFeatureFlagDetails | undefined {\n    // NOTE: We don't check for _initPromise here as the function is designed to be\n    // callable before the state being loaded anyways\n    let details = this.getKnownFeatureFlagDetails()\n    const overriddenFlags = this.getPersistedProperty<PostHogFlagsResponse['featureFlags']>(\n      PostHogPersistedProperty.OverrideFeatureFlags\n    )\n\n    if (!overriddenFlags) {\n      return details\n    }\n\n    details = details ?? { featureFlags: {}, featureFlagPayloads: {}, flags: {} }\n\n    const flags: Record<string, FeatureFlagDetail> = details.flags ?? {}\n\n    for (const key in overriddenFlags) {\n      if (!overriddenFlags[key]) {\n        delete flags[key]\n      } else {\n        flags[key] = updateFlagValue(flags[key], overriddenFlags[key])\n      }\n    }\n\n    const result = {\n      ...details,\n      flags,\n    }\n\n    return normalizeFlagsResponse(result) as PostHogFeatureFlagDetails\n  }\n\n  getFeatureFlagsAndPayloads(): {\n    flags: PostHogFlagsResponse['featureFlags'] | undefined\n    payloads: PostHogFlagsResponse['featureFlagPayloads'] | undefined\n  } {\n    const flags = this.getFeatureFlags()\n    const payloads = this.getFeatureFlagPayloads()\n\n    return {\n      flags,\n      payloads,\n    }\n  }\n\n  isFeatureEnabled(key: string): boolean | undefined {\n    const response = this.getFeatureFlag(key)\n    if (response === undefined) {\n      return undefined\n    }\n    return !!response\n  }\n\n  // Used when we want to trigger the reload but we don't care about the result\n  reloadFeatureFlags(options?: { cb?: (err?: Error, flags?: PostHogFlagsResponse['featureFlags']) => void }): void {\n    this.flagsAsync(true)\n      .then((res) => {\n        options?.cb?.(undefined, res?.featureFlags)\n      })\n      .catch((e) => {\n        options?.cb?.(e, undefined)\n        if (!options?.cb) {\n          this.logMsgIfDebug(() => console.log('PostHog Debug', 'Error reloading feature flags', e))\n        }\n      })\n  }\n\n  async reloadRemoteConfigAsync(): Promise<PostHogRemoteConfig | undefined> {\n    return await this.remoteConfigAsync()\n  }\n\n  async reloadFeatureFlagsAsync(\n    sendAnonDistinctId?: boolean\n  ): Promise<PostHogFlagsResponse['featureFlags'] | undefined> {\n    return (await this.flagsAsync(sendAnonDistinctId ?? true))?.featureFlags\n  }\n\n  onFeatureFlags(cb: (flags: PostHogFlagsResponse['featureFlags']) => void): () => void {\n    return this.on('featureflags', async () => {\n      const flags = this.getFeatureFlags()\n      if (flags) {\n        cb(flags)\n      }\n    })\n  }\n\n  onFeatureFlag(key: string, cb: (value: FeatureFlagValue) => void): () => void {\n    return this.on('featureflags', async () => {\n      const flagResponse = this.getFeatureFlag(key)\n      if (flagResponse !== undefined) {\n        cb(flagResponse)\n      }\n    })\n  }\n\n  async overrideFeatureFlag(flags: PostHogFlagsResponse['featureFlags'] | null): Promise<void> {\n    this.wrap(() => {\n      if (flags === null) {\n        return this.setPersistedProperty(PostHogPersistedProperty.OverrideFeatureFlags, null)\n      }\n      return this.setPersistedProperty(PostHogPersistedProperty.OverrideFeatureFlags, flags)\n    })\n  }\n\n  /***\n   *** ERROR TRACKING\n   ***/\n  captureException(error: unknown, additionalProperties?: PostHogEventProperties): void {\n    const properties: { [key: string]: any } = {\n      $exception_level: 'error',\n      $exception_list: [\n        {\n          type: isError(error) ? error.name : 'Error',\n          value: isError(error) ? error.message : error,\n          mechanism: {\n            handled: true,\n            synthetic: false,\n          },\n        },\n      ],\n      ...additionalProperties,\n    }\n\n    properties.$exception_personURL = new URL(\n      `/project/${this.apiKey}/person/${this.getDistinctId()}`,\n      this.host\n    ).toString()\n\n    this.capture('$exception', properties)\n  }\n\n  /**\n   * Capture written user feedback for a LLM trace. Numeric values are converted to strings.\n   * @param traceId The trace ID to capture feedback for.\n   * @param userFeedback The feedback to capture.\n   */\n  captureTraceFeedback(traceId: string | number, userFeedback: string): void {\n    this.capture('$ai_feedback', {\n      $ai_feedback_text: userFeedback,\n      $ai_trace_id: String(traceId),\n    })\n  }\n\n  /**\n   * Capture a metric for a LLM trace. Numeric values are converted to strings.\n   * @param traceId The trace ID to capture the metric for.\n   * @param metricName The name of the metric to capture.\n   * @param metricValue The value of the metric to capture.\n   */\n  captureTraceMetric(traceId: string | number, metricName: string, metricValue: string | number | boolean): void {\n    this.capture('$ai_metric', {\n      $ai_metric_name: metricName,\n      $ai_metric_value: String(metricValue),\n      $ai_trace_id: String(traceId),\n    })\n  }\n}\n\nexport * from './types'\n","/**\n * A lazy value that is only computed when needed. Inspired by C#'s Lazy<T> class.\n */\nexport class Lazy<T> {\n  private value: T | undefined\n  private factory: () => Promise<T>\n  private initializationPromise: Promise<T> | undefined\n\n  constructor(factory: () => Promise<T>) {\n    this.factory = factory\n  }\n\n  /**\n   * Gets the value, initializing it if necessary.\n   * Multiple concurrent calls will share the same initialization promise.\n   */\n  async getValue(): Promise<T> {\n    if (this.value !== undefined) {\n      return this.value\n    }\n\n    if (this.initializationPromise === undefined) {\n      this.initializationPromise = (async () => {\n        try {\n          const result = await this.factory()\n          this.value = result\n          return result\n        } finally {\n          // Clear the promise so we can retry if needed\n          this.initializationPromise = undefined\n        }\n      })()\n    }\n\n    return this.initializationPromise\n  }\n\n  /**\n   * Returns true if the value has been initialized.\n   */\n  isInitialized(): boolean {\n    return this.value !== undefined\n  }\n\n  /**\n   * Returns a promise that resolves when the value is initialized.\n   * If already initialized, resolves immediately.\n   */\n  async waitForInitialization(): Promise<void> {\n    if (this.isInitialized()) {\n      return\n    }\n    await this.getValue()\n  }\n}\n","/// <reference lib=\"dom\" />\nimport { Lazy } from './lazy'\n\nconst nodeCrypto = new Lazy(async () => {\n  try {\n    return await import('crypto')\n  } catch {\n    return undefined\n  }\n})\n\nexport async function getNodeCrypto(): Promise<typeof import('crypto') | undefined> {\n  return await nodeCrypto.getValue()\n}\n\nconst webCrypto = new Lazy(async (): Promise<SubtleCrypto | undefined> => {\n  if (typeof globalThis.crypto?.subtle !== 'undefined') {\n    return globalThis.crypto.subtle\n  }\n\n  try {\n    // Node.js: use built-in webcrypto and assign it if needed\n    const crypto = await nodeCrypto.getValue()\n    if (crypto?.webcrypto?.subtle) {\n      return crypto.webcrypto.subtle as SubtleCrypto\n    }\n  } catch {\n    // Ignore if not available\n  }\n\n  return undefined\n})\n\nexport async function getWebCrypto(): Promise<SubtleCrypto | undefined> {\n  return await webCrypto.getValue()\n}\n","/// <reference lib=\"dom\" />\n\nimport { getNodeCrypto, getWebCrypto } from './crypto-helpers'\n\nexport async function hashSHA1(text: string): Promise<string> {\n  // Try Node.js crypto first\n  const nodeCrypto = await getNodeCrypto()\n  if (nodeCrypto) {\n    return nodeCrypto.createHash('sha1').update(text).digest('hex')\n  }\n\n  const webCrypto = await getWebCrypto()\n\n  // Fall back to Web Crypto API\n  if (webCrypto) {\n    const hashBuffer = await webCrypto.digest('SHA-1', new TextEncoder().encode(text))\n    const hashArray = Array.from(new Uint8Array(hashBuffer))\n    return hashArray.map((byte) => byte.toString(16).padStart(2, '0')).join('')\n  }\n\n  throw new Error('No crypto implementation available. Tried Node Crypto API and Web SubtleCrypto API')\n}\n","import { FeatureFlagCondition, FlagProperty, PostHogFeatureFlag, PropertyGroup } from '../../types'\nimport type { FeatureFlagValue, JsonType, PostHogFetchOptions, PostHogFetchResponse } from 'posthog-core'\nimport { safeSetTimeout } from 'posthog-core'\nimport { hashSHA1 } from './crypto'\n\nconst SIXTY_SECONDS = 60 * 1000\n\n// eslint-disable-next-line\nconst LONG_SCALE = 0xfffffffffffffff\n\nconst NULL_VALUES_ALLOWED_OPERATORS = ['is_not']\nclass ClientError extends Error {\n  constructor(message: string) {\n    super()\n    Error.captureStackTrace(this, this.constructor)\n    this.name = 'ClientError'\n    this.message = message\n    Object.setPrototypeOf(this, ClientError.prototype)\n  }\n}\n\nclass InconclusiveMatchError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = this.constructor.name\n    Error.captureStackTrace(this, this.constructor)\n    // instanceof doesn't work in ES3 or ES5\n    // https://www.dannyguo.com/blog/how-to-fix-instanceof-not-working-for-custom-errors-in-typescript/\n    // this is the workaround\n    Object.setPrototypeOf(this, InconclusiveMatchError.prototype)\n  }\n}\n\ntype FeatureFlagsPollerOptions = {\n  personalApiKey: string\n  projectApiKey: string\n  host: string\n  pollingInterval: number\n  timeout?: number\n  fetch?: (url: string, options: PostHogFetchOptions) => Promise<PostHogFetchResponse>\n  onError?: (error: Error) => void\n  onLoad?: (count: number) => void\n  customHeaders?: { [key: string]: string }\n}\n\nclass FeatureFlagsPoller {\n  pollingInterval: number\n  personalApiKey: string\n  projectApiKey: string\n  featureFlags: Array<PostHogFeatureFlag>\n  featureFlagsByKey: Record<string, PostHogFeatureFlag>\n  groupTypeMapping: Record<string, string>\n  cohorts: Record<string, PropertyGroup>\n  loadedSuccessfullyOnce: boolean\n  timeout?: number\n  host: FeatureFlagsPollerOptions['host']\n  poller?: NodeJS.Timeout\n  fetch: (url: string, options: PostHogFetchOptions) => Promise<PostHogFetchResponse>\n  debugMode: boolean = false\n  onError?: (error: Error) => void\n  customHeaders?: { [key: string]: string }\n  shouldBeginExponentialBackoff: boolean = false\n  backOffCount: number = 0\n  onLoad?: (count: number) => void\n\n  constructor({\n    pollingInterval,\n    personalApiKey,\n    projectApiKey,\n    timeout,\n    host,\n    customHeaders,\n    ...options\n  }: FeatureFlagsPollerOptions) {\n    this.pollingInterval = pollingInterval\n    this.personalApiKey = personalApiKey\n    this.featureFlags = []\n    this.featureFlagsByKey = {}\n    this.groupTypeMapping = {}\n    this.cohorts = {}\n    this.loadedSuccessfullyOnce = false\n    this.timeout = timeout\n    this.projectApiKey = projectApiKey\n    this.host = host\n    this.poller = undefined\n    this.fetch = options.fetch || fetch\n    this.onError = options.onError\n    this.customHeaders = customHeaders\n    this.onLoad = options.onLoad\n    void this.loadFeatureFlags()\n  }\n\n  debug(enabled: boolean = true): void {\n    this.debugMode = enabled\n  }\n\n  private logMsgIfDebug(fn: () => void): void {\n    if (this.debugMode) {\n      fn()\n    }\n  }\n\n  async getFeatureFlag(\n    key: string,\n    distinctId: string,\n    groups: Record<string, string> = {},\n    personProperties: Record<string, string> = {},\n    groupProperties: Record<string, Record<string, string>> = {}\n  ): Promise<FeatureFlagValue | undefined> {\n    await this.loadFeatureFlags()\n\n    let response: FeatureFlagValue | undefined = undefined\n    let featureFlag = undefined\n\n    if (!this.loadedSuccessfullyOnce) {\n      return response\n    }\n\n    for (const flag of this.featureFlags) {\n      if (key === flag.key) {\n        featureFlag = flag\n        break\n      }\n    }\n\n    if (featureFlag !== undefined) {\n      try {\n        response = await this.computeFlagLocally(featureFlag, distinctId, groups, personProperties, groupProperties)\n        this.logMsgIfDebug(() => console.debug(`Successfully computed flag locally: ${key} -> ${response}`))\n      } catch (e) {\n        if (e instanceof InconclusiveMatchError) {\n          this.logMsgIfDebug(() => console.debug(`InconclusiveMatchError when computing flag locally: ${key}: ${e}`))\n        } else if (e instanceof Error) {\n          this.onError?.(new Error(`Error computing flag locally: ${key}: ${e}`))\n        }\n      }\n    }\n\n    return response\n  }\n\n  async computeFeatureFlagPayloadLocally(key: string, matchValue: FeatureFlagValue): Promise<JsonType | undefined> {\n    await this.loadFeatureFlags()\n\n    let response = undefined\n\n    if (!this.loadedSuccessfullyOnce) {\n      return undefined\n    }\n\n    if (typeof matchValue == 'boolean') {\n      response = this.featureFlagsByKey?.[key]?.filters?.payloads?.[matchValue.toString()]\n    } else if (typeof matchValue == 'string') {\n      response = this.featureFlagsByKey?.[key]?.filters?.payloads?.[matchValue]\n    }\n\n    // Undefined means a loading or missing data issue. Null means evaluation happened and there was no match\n    if (response === undefined || response === null) {\n      return null\n    }\n\n    try {\n      return JSON.parse(response)\n    } catch {\n      return response\n    }\n  }\n\n  async getAllFlagsAndPayloads(\n    distinctId: string,\n    groups: Record<string, string> = {},\n    personProperties: Record<string, string> = {},\n    groupProperties: Record<string, Record<string, string>> = {}\n  ): Promise<{\n    response: Record<string, FeatureFlagValue>\n    payloads: Record<string, JsonType>\n    fallbackToFlags: boolean\n  }> {\n    await this.loadFeatureFlags()\n\n    const response: Record<string, FeatureFlagValue> = {}\n    const payloads: Record<string, JsonType> = {}\n    let fallbackToFlags = this.featureFlags.length == 0\n\n    await Promise.all(\n      this.featureFlags.map(async (flag) => {\n        try {\n          const matchValue = await this.computeFlagLocally(flag, distinctId, groups, personProperties, groupProperties)\n          response[flag.key] = matchValue\n          const matchPayload = await this.computeFeatureFlagPayloadLocally(flag.key, matchValue)\n          if (matchPayload) {\n            payloads[flag.key] = matchPayload\n          }\n        } catch (e) {\n          if (e instanceof InconclusiveMatchError) {\n            // do nothing\n          } else if (e instanceof Error) {\n            this.onError?.(new Error(`Error computing flag locally: ${flag.key}: ${e}`))\n          }\n          fallbackToFlags = true\n        }\n      })\n    )\n\n    return { response, payloads, fallbackToFlags }\n  }\n\n  async computeFlagLocally(\n    flag: PostHogFeatureFlag,\n    distinctId: string,\n    groups: Record<string, string> = {},\n    personProperties: Record<string, string> = {},\n    groupProperties: Record<string, Record<string, string>> = {}\n  ): Promise<FeatureFlagValue> {\n    if (flag.ensure_experience_continuity) {\n      throw new InconclusiveMatchError('Flag has experience continuity enabled')\n    }\n\n    if (!flag.active) {\n      return false\n    }\n\n    const flagFilters = flag.filters || {}\n    const aggregation_group_type_index = flagFilters.aggregation_group_type_index\n\n    if (aggregation_group_type_index != undefined) {\n      const groupName = this.groupTypeMapping[String(aggregation_group_type_index)]\n\n      if (!groupName) {\n        this.logMsgIfDebug(() =>\n          console.warn(\n            `[FEATURE FLAGS] Unknown group type index ${aggregation_group_type_index} for feature flag ${flag.key}`\n          )\n        )\n        throw new InconclusiveMatchError('Flag has unknown group type index')\n      }\n\n      if (!(groupName in groups)) {\n        this.logMsgIfDebug(() =>\n          console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${flag.key} without group names passed in`)\n        )\n        return false\n      }\n\n      const focusedGroupProperties = groupProperties[groupName]\n      return await this.matchFeatureFlagProperties(flag, groups[groupName], focusedGroupProperties)\n    } else {\n      return await this.matchFeatureFlagProperties(flag, distinctId, personProperties)\n    }\n  }\n\n  async matchFeatureFlagProperties(\n    flag: PostHogFeatureFlag,\n    distinctId: string,\n    properties: Record<string, string>\n  ): Promise<FeatureFlagValue> {\n    const flagFilters = flag.filters || {}\n    const flagConditions = flagFilters.groups || []\n    let isInconclusive = false\n    let result = undefined\n\n    // # Stable sort conditions with variant overrides to the top. This ensures that if overrides are present, they are\n    // # evaluated first, and the variant override is applied to the first matching condition.\n    const sortedFlagConditions = [...flagConditions].sort((conditionA, conditionB) => {\n      const AHasVariantOverride = !!conditionA.variant\n      const BHasVariantOverride = !!conditionB.variant\n\n      if (AHasVariantOverride && BHasVariantOverride) {\n        return 0\n      } else if (AHasVariantOverride) {\n        return -1\n      } else if (BHasVariantOverride) {\n        return 1\n      } else {\n        return 0\n      }\n    })\n\n    for (const condition of sortedFlagConditions) {\n      try {\n        if (await this.isConditionMatch(flag, distinctId, condition, properties)) {\n          const variantOverride = condition.variant\n          const flagVariants = flagFilters.multivariate?.variants || []\n          if (variantOverride && flagVariants.some((variant) => variant.key === variantOverride)) {\n            result = variantOverride\n          } else {\n            result = (await this.getMatchingVariant(flag, distinctId)) || true\n          }\n          break\n        }\n      } catch (e) {\n        if (e instanceof InconclusiveMatchError) {\n          isInconclusive = true\n        } else {\n          throw e\n        }\n      }\n    }\n\n    if (result !== undefined) {\n      return result\n    } else if (isInconclusive) {\n      throw new InconclusiveMatchError(\"Can't determine if feature flag is enabled or not with given properties\")\n    }\n\n    // We can only return False when all conditions are False\n    return false\n  }\n\n  async isConditionMatch(\n    flag: PostHogFeatureFlag,\n    distinctId: string,\n    condition: FeatureFlagCondition,\n    properties: Record<string, string>\n  ): Promise<boolean> {\n    const rolloutPercentage = condition.rollout_percentage\n    const warnFunction = (msg: string): void => {\n      this.logMsgIfDebug(() => console.warn(msg))\n    }\n    if ((condition.properties || []).length > 0) {\n      for (const prop of condition.properties) {\n        const propertyType = prop.type\n        let matches = false\n\n        if (propertyType === 'cohort') {\n          matches = matchCohort(prop, properties, this.cohorts, this.debugMode)\n        } else {\n          matches = matchProperty(prop, properties, warnFunction)\n        }\n\n        if (!matches) {\n          return false\n        }\n      }\n\n      if (rolloutPercentage == undefined) {\n        return true\n      }\n    }\n\n    if (rolloutPercentage != undefined && (await _hash(flag.key, distinctId)) > rolloutPercentage / 100.0) {\n      return false\n    }\n\n    return true\n  }\n\n  async getMatchingVariant(flag: PostHogFeatureFlag, distinctId: string): Promise<FeatureFlagValue | undefined> {\n    const hashValue = await _hash(flag.key, distinctId, 'variant')\n    const matchingVariant = this.variantLookupTable(flag).find((variant) => {\n      return hashValue >= variant.valueMin && hashValue < variant.valueMax\n    })\n\n    if (matchingVariant) {\n      return matchingVariant.key\n    }\n    return undefined\n  }\n\n  variantLookupTable(flag: PostHogFeatureFlag): { valueMin: number; valueMax: number; key: string }[] {\n    const lookupTable: { valueMin: number; valueMax: number; key: string }[] = []\n    let valueMin = 0\n    let valueMax = 0\n    const flagFilters = flag.filters || {}\n    const multivariates: {\n      key: string\n      rollout_percentage: number\n    }[] = flagFilters.multivariate?.variants || []\n\n    multivariates.forEach((variant) => {\n      valueMax = valueMin + variant.rollout_percentage / 100.0\n      lookupTable.push({ valueMin, valueMax, key: variant.key })\n      valueMin = valueMax\n    })\n    return lookupTable\n  }\n\n  async loadFeatureFlags(forceReload = false): Promise<void> {\n    if (!this.loadedSuccessfullyOnce || forceReload) {\n      await this._loadFeatureFlags()\n    }\n  }\n\n  /**\n   * Returns true if the feature flags poller has loaded successfully at least once and has more than 0 feature flags.\n   * This is useful to check if local evaluation is ready before calling getFeatureFlag.\n   */\n  isLocalEvaluationReady(): boolean {\n    return (this.loadedSuccessfullyOnce ?? false) && (this.featureFlags?.length ?? 0) > 0\n  }\n\n  /**\n   * If a client is misconfigured with an invalid or improper API key, the polling interval is doubled each time\n   * until a successful request is made, up to a maximum of 60 seconds.\n   *\n   * @returns The polling interval to use for the next request.\n   */\n  private getPollingInterval(): number {\n    if (!this.shouldBeginExponentialBackoff) {\n      return this.pollingInterval\n    }\n\n    return Math.min(SIXTY_SECONDS, this.pollingInterval * 2 ** this.backOffCount)\n  }\n\n  async _loadFeatureFlags(): Promise<void> {\n    if (this.poller) {\n      clearTimeout(this.poller)\n      this.poller = undefined\n    }\n\n    this.poller = setTimeout(() => this._loadFeatureFlags(), this.getPollingInterval())\n\n    try {\n      const res = await this._requestFeatureFlagDefinitions()\n\n      // Handle undefined res case, this shouldn't happen, but it doesn't hurt to handle it anyway\n      if (!res) {\n        // Don't override existing flags when something goes wrong\n        return\n      }\n\n      // NB ON ERROR HANDLING & `loadedSuccessfullyOnce`:\n      //\n      // `loadedSuccessfullyOnce` indicates we've successfully loaded a valid set of flags at least once.\n      // If we set it to `true` in an error scenario (e.g. 402 Over Quota, 401 Invalid Key, etc.),\n      // any manual call to `loadFeatureFlags()` (without forceReload) will skip refetching entirely,\n      // leaving us stuck with zero or outdated flags. The poller does keep running, but we also want\n      // manual reloads to be possible as soon as the error condition is resolved.\n      //\n      // Therefore, on error statuses, we do *not* set `loadedSuccessfullyOnce = true`, ensuring that\n      // both the background poller and any subsequent manual calls can keep trying to load flags\n      // once the issue (quota, permission, rate limit, etc.) is resolved.\n      switch (res.status) {\n        case 401:\n          // Invalid API key\n          this.shouldBeginExponentialBackoff = true\n          this.backOffCount += 1\n          throw new ClientError(\n            `Your project key or personal API key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`\n          )\n\n        case 402:\n          // Quota exceeded - clear all flags\n          console.warn(\n            '[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts'\n          )\n          this.featureFlags = []\n          this.featureFlagsByKey = {}\n          this.groupTypeMapping = {}\n          this.cohorts = {}\n          return\n\n        case 403:\n          // Permissions issue\n          this.shouldBeginExponentialBackoff = true\n          this.backOffCount += 1\n          throw new ClientError(\n            `Your personal API key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct personal and Project API key pair? More information: https://posthog.com/docs/api/overview`\n          )\n\n        case 429:\n          // Rate limited\n          this.shouldBeginExponentialBackoff = true\n          this.backOffCount += 1\n          throw new ClientError(\n            `You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`\n          )\n\n        case 200: {\n          // Process successful response\n          const responseJson = ((await res.json()) as { [key: string]: any }) ?? {}\n          if (!('flags' in responseJson)) {\n            this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(responseJson)}`))\n            return\n          }\n\n          this.featureFlags = (responseJson.flags as PostHogFeatureFlag[]) ?? []\n          this.featureFlagsByKey = this.featureFlags.reduce(\n            (acc, curr) => ((acc[curr.key] = curr), acc),\n            <Record<string, PostHogFeatureFlag>>{}\n          )\n          this.groupTypeMapping = (responseJson.group_type_mapping as Record<string, string>) || {}\n          this.cohorts = (responseJson.cohorts as Record<string, PropertyGroup>) || {}\n          this.loadedSuccessfullyOnce = true\n          this.shouldBeginExponentialBackoff = false\n          this.backOffCount = 0\n          this.onLoad?.(this.featureFlags.length)\n          break\n        }\n\n        default:\n          // Something else went wrong, or the server is down.\n          // In this case, don't override existing flags\n          return\n      }\n    } catch (err) {\n      if (err instanceof ClientError) {\n        this.onError?.(err)\n      }\n    }\n  }\n\n  private getPersonalApiKeyRequestOptions(method: 'GET' | 'POST' | 'PUT' | 'PATCH' = 'GET'): PostHogFetchOptions {\n    return {\n      method,\n      headers: {\n        ...this.customHeaders,\n        'Content-Type': 'application/json',\n        Authorization: `Bearer ${this.personalApiKey}`,\n      },\n    }\n  }\n\n  async _requestFeatureFlagDefinitions(): Promise<PostHogFetchResponse> {\n    const url = `${this.host}/api/feature_flag/local_evaluation?token=${this.projectApiKey}&send_cohorts`\n\n    const options = this.getPersonalApiKeyRequestOptions()\n\n    let abortTimeout = null\n\n    if (this.timeout && typeof this.timeout === 'number') {\n      const controller = new AbortController()\n      abortTimeout = safeSetTimeout(() => {\n        controller.abort()\n      }, this.timeout)\n      options.signal = controller.signal\n    }\n\n    try {\n      return await this.fetch(url, options)\n    } finally {\n      clearTimeout(abortTimeout)\n    }\n  }\n\n  stopPoller(): void {\n    clearTimeout(this.poller)\n  }\n\n  _requestRemoteConfigPayload(flagKey: string): Promise<PostHogFetchResponse> {\n    const url = `${this.host}/api/projects/@current/feature_flags/${flagKey}/remote_config/`\n\n    const options = this.getPersonalApiKeyRequestOptions()\n\n    let abortTimeout = null\n    if (this.timeout && typeof this.timeout === 'number') {\n      const controller = new AbortController()\n      abortTimeout = safeSetTimeout(() => {\n        controller.abort()\n      }, this.timeout)\n      options.signal = controller.signal\n    }\n    try {\n      return this.fetch(url, options)\n    } finally {\n      clearTimeout(abortTimeout)\n    }\n  }\n}\n\n// # This function takes a distinct_id and a feature flag key and returns a float between 0 and 1.\n// # Given the same distinct_id and key, it'll always return the same float. These floats are\n// # uniformly distributed between 0 and 1, so if we want to show this feature to 20% of traffic\n// # we can do _hash(key, distinct_id) < 0.2\nasync function _hash(key: string, distinctId: string, salt: string = ''): Promise<number> {\n  const hashString = await hashSHA1(`${key}.${distinctId}${salt}`)\n  return parseInt(hashString.slice(0, 15), 16) / LONG_SCALE\n}\n\nfunction matchProperty(\n  property: FeatureFlagCondition['properties'][number],\n  propertyValues: Record<string, any>,\n  warnFunction?: (msg: string) => void\n): boolean {\n  const key = property.key\n  const value = property.value\n  const operator = property.operator || 'exact'\n\n  if (!(key in propertyValues)) {\n    throw new InconclusiveMatchError(`Property ${key} not found in propertyValues`)\n  } else if (operator === 'is_not_set') {\n    throw new InconclusiveMatchError(`Operator is_not_set is not supported`)\n  }\n\n  const overrideValue = propertyValues[key]\n  if (overrideValue == null && !NULL_VALUES_ALLOWED_OPERATORS.includes(operator)) {\n    // if the value is null, just fail the feature flag comparison\n    // this isn't an InconclusiveMatchError because the property value was provided.\n    if (warnFunction) {\n      warnFunction(`Property ${key} cannot have a value of null/undefined with the ${operator} operator`)\n    }\n\n    return false\n  }\n\n  function computeExactMatch(value: any, overrideValue: any): boolean {\n    if (Array.isArray(value)) {\n      return value.map((val) => String(val).toLowerCase()).includes(String(overrideValue).toLowerCase())\n    }\n    return String(value).toLowerCase() === String(overrideValue).toLowerCase()\n  }\n\n  function compare(lhs: any, rhs: any, operator: string): boolean {\n    if (operator === 'gt') {\n      return lhs > rhs\n    } else if (operator === 'gte') {\n      return lhs >= rhs\n    } else if (operator === 'lt') {\n      return lhs < rhs\n    } else if (operator === 'lte') {\n      return lhs <= rhs\n    } else {\n      throw new Error(`Invalid operator: ${operator}`)\n    }\n  }\n\n  switch (operator) {\n    case 'exact':\n      return computeExactMatch(value, overrideValue)\n    case 'is_not':\n      return !computeExactMatch(value, overrideValue)\n    case 'is_set':\n      return key in propertyValues\n    case 'icontains':\n      return String(overrideValue).toLowerCase().includes(String(value).toLowerCase())\n    case 'not_icontains':\n      return !String(overrideValue).toLowerCase().includes(String(value).toLowerCase())\n    case 'regex':\n      return isValidRegex(String(value)) && String(overrideValue).match(String(value)) !== null\n    case 'not_regex':\n      return isValidRegex(String(value)) && String(overrideValue).match(String(value)) === null\n    case 'gt':\n    case 'gte':\n    case 'lt':\n    case 'lte': {\n      // :TRICKY: We adjust comparison based on the override value passed in,\n      // to make sure we handle both numeric and string comparisons appropriately.\n      let parsedValue = typeof value === 'number' ? value : null\n\n      if (typeof value === 'string') {\n        try {\n          parsedValue = parseFloat(value)\n        } catch (err) {\n          // pass\n        }\n      }\n\n      if (parsedValue != null && overrideValue != null) {\n        // check both null and undefined\n        if (typeof overrideValue === 'string') {\n          return compare(overrideValue, String(value), operator)\n        } else {\n          return compare(overrideValue, parsedValue, operator)\n        }\n      } else {\n        return compare(String(overrideValue), String(value), operator)\n      }\n    }\n    case 'is_date_after':\n    case 'is_date_before': {\n      let parsedDate = relativeDateParseForFeatureFlagMatching(String(value))\n      if (parsedDate == null) {\n        parsedDate = convertToDateTime(value)\n      }\n\n      if (parsedDate == null) {\n        throw new InconclusiveMatchError(`Invalid date: ${value}`)\n      }\n      const overrideDate = convertToDateTime(overrideValue)\n      if (['is_date_before'].includes(operator)) {\n        return overrideDate < parsedDate\n      }\n      return overrideDate > parsedDate\n    }\n    default:\n      throw new InconclusiveMatchError(`Unknown operator: ${operator}`)\n  }\n}\n\nfunction matchCohort(\n  property: FeatureFlagCondition['properties'][number],\n  propertyValues: Record<string, any>,\n  cohortProperties: FeatureFlagsPoller['cohorts'],\n  debugMode: boolean = false\n): boolean {\n  const cohortId = String(property.value)\n  if (!(cohortId in cohortProperties)) {\n    throw new InconclusiveMatchError(\"can't match cohort without a given cohort property value\")\n  }\n\n  const propertyGroup = cohortProperties[cohortId]\n  return matchPropertyGroup(propertyGroup, propertyValues, cohortProperties, debugMode)\n}\n\nfunction matchPropertyGroup(\n  propertyGroup: PropertyGroup,\n  propertyValues: Record<string, any>,\n  cohortProperties: FeatureFlagsPoller['cohorts'],\n  debugMode: boolean = false\n): boolean {\n  if (!propertyGroup) {\n    return true\n  }\n\n  const propertyGroupType = propertyGroup.type\n  const properties = propertyGroup.values\n\n  if (!properties || properties.length === 0) {\n    // empty groups are no-ops, always match\n    return true\n  }\n\n  let errorMatchingLocally = false\n\n  if ('values' in properties[0]) {\n    // a nested property group\n    for (const prop of properties as PropertyGroup[]) {\n      try {\n        const matches = matchPropertyGroup(prop, propertyValues, cohortProperties, debugMode)\n        if (propertyGroupType === 'AND') {\n          if (!matches) {\n            return false\n          }\n        } else {\n          // OR group\n          if (matches) {\n            return true\n          }\n        }\n      } catch (err) {\n        if (err instanceof InconclusiveMatchError) {\n          if (debugMode) {\n            console.debug(`Failed to compute property ${prop} locally: ${err}`)\n          }\n          errorMatchingLocally = true\n        } else {\n          throw err\n        }\n      }\n    }\n\n    if (errorMatchingLocally) {\n      throw new InconclusiveMatchError(\"Can't match cohort without a given cohort property value\")\n    }\n    // if we get here, all matched in AND case, or none matched in OR case\n    return propertyGroupType === 'AND'\n  } else {\n    for (const prop of properties as FlagProperty[]) {\n      try {\n        let matches: boolean\n        if (prop.type === 'cohort') {\n          matches = matchCohort(prop, propertyValues, cohortProperties, debugMode)\n        } else {\n          matches = matchProperty(prop, propertyValues)\n        }\n\n        const negation = prop.negation || false\n\n        if (propertyGroupType === 'AND') {\n          // if negated property, do the inverse\n          if (!matches && !negation) {\n            return false\n          }\n          if (matches && negation) {\n            return false\n          }\n        } else {\n          // OR group\n          if (matches && !negation) {\n            return true\n          }\n          if (!matches && negation) {\n            return true\n          }\n        }\n      } catch (err) {\n        if (err instanceof InconclusiveMatchError) {\n          if (debugMode) {\n            console.debug(`Failed to compute property ${prop} locally: ${err}`)\n          }\n          errorMatchingLocally = true\n        } else {\n          throw err\n        }\n      }\n    }\n\n    if (errorMatchingLocally) {\n      throw new InconclusiveMatchError(\"can't match cohort without a given cohort property value\")\n    }\n\n    // if we get here, all matched in AND case, or none matched in OR case\n    return propertyGroupType === 'AND'\n  }\n}\n\nfunction isValidRegex(regex: string): boolean {\n  try {\n    new RegExp(regex)\n    return true\n  } catch (err) {\n    return false\n  }\n}\n\nfunction convertToDateTime(value: string | number | (string | number)[] | Date): Date {\n  if (value instanceof Date) {\n    return value\n  } else if (typeof value === 'string' || typeof value === 'number') {\n    const date = new Date(value)\n    if (!isNaN(date.valueOf())) {\n      return date\n    }\n    throw new InconclusiveMatchError(`${value} is in an invalid date format`)\n  } else {\n    throw new InconclusiveMatchError(`The date provided ${value} must be a string, number, or date object`)\n  }\n}\n\nfunction relativeDateParseForFeatureFlagMatching(value: string): Date | null {\n  const regex = /^-?(?<number>[0-9]+)(?<interval>[a-z])$/\n  const match = value.match(regex)\n  const parsedDt = new Date(new Date().toISOString())\n\n  if (match) {\n    if (!match.groups) {\n      return null\n    }\n\n    const number = parseInt(match.groups['number'])\n\n    if (number >= 10000) {\n      // Guard against overflow, disallow numbers greater than 10_000\n      return null\n    }\n    const interval = match.groups['interval']\n    if (interval == 'h') {\n      parsedDt.setUTCHours(parsedDt.getUTCHours() - number)\n    } else if (interval == 'd') {\n      parsedDt.setUTCDate(parsedDt.getUTCDate() - number)\n    } else if (interval == 'w') {\n      parsedDt.setUTCDate(parsedDt.getUTCDate() - number * 7)\n    } else if (interval == 'm') {\n      parsedDt.setUTCMonth(parsedDt.getUTCMonth() - number)\n    } else if (interval == 'y') {\n      parsedDt.setUTCFullYear(parsedDt.getUTCFullYear() - number)\n    } else {\n      return null\n    }\n\n    return parsedDt\n  } else {\n    return null\n  }\n}\n\nexport {\n  FeatureFlagsPoller,\n  matchProperty,\n  relativeDateParseForFeatureFlagMatching,\n  InconclusiveMatchError,\n  ClientError,\n}\n","import { PostHogPersistedProperty } from 'posthog-core'\n\nexport class PostHogMemoryStorage {\n  private _memoryStorage: { [key: string]: any | undefined } = {}\n\n  getProperty(key: PostHogPersistedProperty): any | undefined {\n    return this._memoryStorage[key]\n  }\n\n  setProperty(key: PostHogPersistedProperty, value: any | null): void {\n    this._memoryStorage[key] = value !== null ? value : undefined\n  }\n}\n","import { version } from '../package.json'\n\nimport {\n  JsonType,\n  PostHogCoreStateless,\n  PostHogFlagsResponse,\n  PostHogFetchOptions,\n  PostHogFetchResponse,\n  PostHogFlagsAndPayloadsResponse,\n  PostHogPersistedProperty,\n} from 'posthog-core'\nimport { EventMessage, GroupIdentifyMessage, IdentifyMessage, IPostHog, PostHogOptions } from './types'\nimport { FeatureFlagDetail, FeatureFlagValue } from 'posthog-core'\nimport { FeatureFlagsPoller } from './extensions/feature-flags/feature-flags'\nimport ErrorTracking from './extensions/error-tracking'\nimport { getFeatureFlagValue } from 'posthog-core'\nimport { PostHogMemoryStorage } from './storage-memory'\n\n// Standard local evaluation rate limit is 600 per minute (10 per second),\n// so the fastest a poller should ever be set is 100ms.\nconst MINIMUM_POLLING_INTERVAL = 100\nconst THIRTY_SECONDS = 30 * 1000\nconst MAX_CACHE_SIZE = 50 * 1000\n\n// The actual exported Nodejs API.\nexport abstract class PostHogBackendClient extends PostHogCoreStateless implements IPostHog {\n  private _memoryStorage = new PostHogMemoryStorage()\n\n  private featureFlagsPoller?: FeatureFlagsPoller\n  protected errorTracking: ErrorTracking\n  private maxCacheSize: number\n  public readonly options: PostHogOptions\n\n  distinctIdHasSentFlagCalls: Record<string, string[]>\n\n  constructor(apiKey: string, options: PostHogOptions = {}) {\n    super(apiKey, options)\n\n    this.options = options\n\n    this.options.featureFlagsPollingInterval =\n      typeof options.featureFlagsPollingInterval === 'number'\n        ? Math.max(options.featureFlagsPollingInterval, MINIMUM_POLLING_INTERVAL)\n        : THIRTY_SECONDS\n\n    if (options.personalApiKey) {\n      if (options.personalApiKey.includes('phc_')) {\n        throw new Error(\n          'Your Personal API key is invalid. These keys are prefixed with \"phx_\" and can be created in PostHog project settings.'\n        )\n      }\n\n      this.featureFlagsPoller = new FeatureFlagsPoller({\n        pollingInterval: this.options.featureFlagsPollingInterval,\n        personalApiKey: options.personalApiKey,\n        projectApiKey: apiKey,\n        timeout: options.requestTimeout ?? 10000, // 10 seconds\n        host: this.host,\n        fetch: options.fetch,\n        onError: (err: Error) => {\n          this._events.emit('error', err)\n        },\n        onLoad: (count: number) => {\n          this._events.emit('localEvaluationFlagsLoaded', count)\n        },\n        customHeaders: this.getCustomHeaders(),\n      })\n    }\n    this.errorTracking = new ErrorTracking(this, options)\n    this.distinctIdHasSentFlagCalls = {}\n    this.maxCacheSize = options.maxCacheSize || MAX_CACHE_SIZE\n  }\n\n  getPersistedProperty(key: PostHogPersistedProperty): any | undefined {\n    return this._memoryStorage.getProperty(key)\n  }\n\n  setPersistedProperty(key: PostHogPersistedProperty, value: any | null): void {\n    return this._memoryStorage.setProperty(key, value)\n  }\n\n  fetch(url: string, options: PostHogFetchOptions): Promise<PostHogFetchResponse> {\n    return this.options.fetch ? this.options.fetch(url, options) : fetch(url, options)\n  }\n  getLibraryVersion(): string {\n    return version\n  }\n  getCustomUserAgent(): string {\n    return `${this.getLibraryId()}/${this.getLibraryVersion()}`\n  }\n\n  enable(): Promise<void> {\n    return super.optIn()\n  }\n\n  disable(): Promise<void> {\n    return super.optOut()\n  }\n\n  debug(enabled: boolean = true): void {\n    super.debug(enabled)\n    this.featureFlagsPoller?.debug(enabled)\n  }\n\n  capture(props: EventMessage): void {\n    if (typeof props === 'string') {\n      this.logMsgIfDebug(() =>\n        console.warn('Called capture() with a string as the first argument when an object was expected.')\n      )\n    }\n    const { distinctId, event, properties, groups, sendFeatureFlags, timestamp, disableGeoip, uuid }: EventMessage =\n      props\n    const _capture = (props: EventMessage['properties']): void => {\n      super.captureStateless(distinctId, event, props, { timestamp, disableGeoip, uuid })\n    }\n\n    const _getFlags = async (\n      distinctId: EventMessage['distinctId'],\n      groups: EventMessage['groups'],\n      disableGeoip: EventMessage['disableGeoip']\n    ): Promise<PostHogFlagsResponse['featureFlags'] | undefined> => {\n      return (await super.getFeatureFlagsStateless(distinctId, groups, undefined, undefined, disableGeoip)).flags\n    }\n\n    // :TRICKY: If we flush, or need to shut down, to not lose events we want this promise to resolve before we flush\n    const capturePromise = Promise.resolve()\n      .then(async () => {\n        if (sendFeatureFlags) {\n          // If we are sending feature flags, we need to make sure we have the latest flags\n          // return await super.getFeatureFlagsStateless(distinctId, groups, undefined, undefined, disableGeoip)\n          return await _getFlags(distinctId, groups, disableGeoip)\n        }\n\n        if (event === '$feature_flag_called') {\n          // If we're capturing a $feature_flag_called event, we don't want to enrich the event with cached flags that may be out of date.\n          return {}\n        }\n\n        if ((this.featureFlagsPoller?.featureFlags?.length || 0) > 0) {\n          // Otherwise we may as well check for the flags locally and include them if they are already loaded\n          const groupsWithStringValues: Record<string, string> = {}\n          for (const [key, value] of Object.entries(groups || {})) {\n            groupsWithStringValues[key] = String(value)\n          }\n\n          return await this.getAllFlags(distinctId, {\n            groups: groupsWithStringValues,\n            disableGeoip,\n            onlyEvaluateLocally: true,\n          })\n        }\n        return {}\n      })\n      .then((flags) => {\n        // Derive the relevant flag properties to add\n        const additionalProperties: Record<string, any> = {}\n        if (flags) {\n          for (const [feature, variant] of Object.entries(flags)) {\n            additionalProperties[`$feature/${feature}`] = variant\n          }\n        }\n        const activeFlags = Object.keys(flags || {})\n          .filter((flag) => flags?.[flag] !== false)\n          .sort()\n        if (activeFlags.length > 0) {\n          additionalProperties['$active_feature_flags'] = activeFlags\n        }\n\n        return additionalProperties\n      })\n      .catch(() => {\n        // Something went wrong getting the flag info - we should capture the event anyways\n        return {}\n      })\n      .then((additionalProperties) => {\n        // No matter what - capture the event\n        _capture({ ...additionalProperties, ...properties, $groups: groups })\n      })\n\n    this.addPendingPromise(capturePromise)\n  }\n\n  async captureImmediate(props: EventMessage): Promise<void> {\n    if (typeof props === 'string') {\n      this.logMsgIfDebug(() =>\n        console.warn('Called capture() with a string as the first argument when an object was expected.')\n      )\n    }\n    const { distinctId, event, properties, groups, sendFeatureFlags, timestamp, disableGeoip, uuid }: EventMessage =\n      props\n\n    const _capture = (props: EventMessage['properties']): Promise<void> => {\n      return super.captureStatelessImmediate(distinctId, event, props, { timestamp, disableGeoip, uuid })\n    }\n\n    const _getFlags = async (\n      distinctId: EventMessage['distinctId'],\n      groups: EventMessage['groups'],\n      disableGeoip: EventMessage['disableGeoip']\n    ): Promise<PostHogFlagsResponse['featureFlags'] | undefined> => {\n      return (await super.getFeatureFlagsStateless(distinctId, groups, undefined, undefined, disableGeoip)).flags\n    }\n\n    const capturePromise = Promise.resolve()\n      .then(async () => {\n        if (sendFeatureFlags) {\n          // If we are sending feature flags, we need to make sure we have the latest flags\n          // return await super.getFeatureFlagsStateless(distinctId, groups, undefined, undefined, disableGeoip)\n          return await _getFlags(distinctId, groups, disableGeoip)\n        }\n\n        if (event === '$feature_flag_called') {\n          // If we're capturing a $feature_flag_called event, we don't want to enrich the event with cached flags that may be out of date.\n          return {}\n        }\n\n        if ((this.featureFlagsPoller?.featureFlags?.length || 0) > 0) {\n          // Otherwise we may as well check for the flags locally and include them if they are already loaded\n          const groupsWithStringValues: Record<string, string> = {}\n          for (const [key, value] of Object.entries(groups || {})) {\n            groupsWithStringValues[key] = String(value)\n          }\n\n          return await this.getAllFlags(distinctId, {\n            groups: groupsWithStringValues,\n            disableGeoip,\n            onlyEvaluateLocally: true,\n          })\n        }\n        return {}\n      })\n      .then((flags) => {\n        // Derive the relevant flag properties to add\n        const additionalProperties: Record<string, any> = {}\n        if (flags) {\n          for (const [feature, variant] of Object.entries(flags)) {\n            additionalProperties[`$feature/${feature}`] = variant\n          }\n        }\n        const activeFlags = Object.keys(flags || {})\n          .filter((flag) => flags?.[flag] !== false)\n          .sort()\n        if (activeFlags.length > 0) {\n          additionalProperties['$active_feature_flags'] = activeFlags\n        }\n\n        return additionalProperties\n      })\n      .catch(() => {\n        // Something went wrong getting the flag info - we should capture the event anyways\n        return {}\n      })\n      .then((additionalProperties) => {\n        // No matter what - capture the event\n        _capture({ ...additionalProperties, ...properties, $groups: groups })\n      })\n\n    await capturePromise\n  }\n\n  identify({ distinctId, properties, disableGeoip }: IdentifyMessage): void {\n    // Catch properties passed as $set and move them to the top level\n\n    // promote $set and $set_once to top level\n    const userPropsOnce = properties?.$set_once\n    delete properties?.$set_once\n\n    // if no $set is provided we assume all properties are $set\n    const userProps = properties?.$set || properties\n\n    super.identifyStateless(\n      distinctId,\n      {\n        $set: userProps,\n        $set_once: userPropsOnce,\n      },\n      { disableGeoip }\n    )\n  }\n\n  async identifyImmediate({ distinctId, properties, disableGeoip }: IdentifyMessage): Promise<void> {\n    // promote $set and $set_once to top level\n    const userPropsOnce = properties?.$set_once\n    delete properties?.$set_once\n\n    // if no $set is provided we assume all properties are $set\n    const userProps = properties?.$set || properties\n\n    await super.identifyStatelessImmediate(\n      distinctId,\n      {\n        $set: userProps,\n        $set_once: userPropsOnce,\n      },\n      { disableGeoip }\n    )\n  }\n\n  alias(data: { distinctId: string; alias: string; disableGeoip?: boolean }): void {\n    super.aliasStateless(data.alias, data.distinctId, undefined, { disableGeoip: data.disableGeoip })\n  }\n\n  async aliasImmediate(data: { distinctId: string; alias: string; disableGeoip?: boolean }): Promise<void> {\n    await super.aliasStatelessImmediate(data.alias, data.distinctId, undefined, { disableGeoip: data.disableGeoip })\n  }\n\n  isLocalEvaluationReady(): boolean {\n    return this.featureFlagsPoller?.isLocalEvaluationReady() ?? false\n  }\n\n  async waitForLocalEvaluationReady(timeoutMs: number = THIRTY_SECONDS): Promise<boolean> {\n    if (this.isLocalEvaluationReady()) {\n      return true\n    }\n\n    if (this.featureFlagsPoller === undefined) {\n      return false\n    }\n\n    return new Promise((resolve) => {\n      const timeout = setTimeout(() => {\n        cleanup()\n        resolve(false)\n      }, timeoutMs)\n\n      const cleanup = this._events.on('localEvaluationFlagsLoaded', (count: number) => {\n        clearTimeout(timeout)\n        cleanup()\n        resolve(count > 0)\n      })\n    })\n  }\n\n  async getFeatureFlag(\n    key: string,\n    distinctId: string,\n    options?: {\n      groups?: Record<string, string>\n      personProperties?: Record<string, string>\n      groupProperties?: Record<string, Record<string, string>>\n      onlyEvaluateLocally?: boolean\n      sendFeatureFlagEvents?: boolean\n      disableGeoip?: boolean\n    }\n  ): Promise<FeatureFlagValue | undefined> {\n    const { groups, disableGeoip } = options || {}\n    let { onlyEvaluateLocally, sendFeatureFlagEvents, personProperties, groupProperties } = options || {}\n\n    const adjustedProperties = this.addLocalPersonAndGroupProperties(\n      distinctId,\n      groups,\n      personProperties,\n      groupProperties\n    )\n\n    personProperties = adjustedProperties.allPersonProperties\n    groupProperties = adjustedProperties.allGroupProperties\n\n    // set defaults\n    if (onlyEvaluateLocally == undefined) {\n      onlyEvaluateLocally = false\n    }\n    if (sendFeatureFlagEvents == undefined) {\n      sendFeatureFlagEvents = true\n    }\n\n    let response = await this.featureFlagsPoller?.getFeatureFlag(\n      key,\n      distinctId,\n      groups,\n      personProperties,\n      groupProperties\n    )\n\n    const flagWasLocallyEvaluated = response !== undefined\n    let requestId = undefined\n    let flagDetail: FeatureFlagDetail | undefined = undefined\n    if (!flagWasLocallyEvaluated && !onlyEvaluateLocally) {\n      const remoteResponse = await super.getFeatureFlagDetailStateless(\n        key,\n        distinctId,\n        groups,\n        personProperties,\n        groupProperties,\n        disableGeoip\n      )\n\n      if (remoteResponse === undefined) {\n        return undefined\n      }\n\n      flagDetail = remoteResponse.response\n      response = getFeatureFlagValue(flagDetail)\n      requestId = remoteResponse?.requestId\n    }\n\n    const featureFlagReportedKey = `${key}_${response}`\n\n    if (\n      sendFeatureFlagEvents &&\n      (!(distinctId in this.distinctIdHasSentFlagCalls) ||\n        !this.distinctIdHasSentFlagCalls[distinctId].includes(featureFlagReportedKey))\n    ) {\n      if (Object.keys(this.distinctIdHasSentFlagCalls).length >= this.maxCacheSize) {\n        this.distinctIdHasSentFlagCalls = {}\n      }\n      if (Array.isArray(this.distinctIdHasSentFlagCalls[distinctId])) {\n        this.distinctIdHasSentFlagCalls[distinctId].push(featureFlagReportedKey)\n      } else {\n        this.distinctIdHasSentFlagCalls[distinctId] = [featureFlagReportedKey]\n      }\n      this.capture({\n        distinctId,\n        event: '$feature_flag_called',\n        properties: {\n          $feature_flag: key,\n          $feature_flag_response: response,\n          $feature_flag_id: flagDetail?.metadata?.id,\n          $feature_flag_version: flagDetail?.metadata?.version,\n          $feature_flag_reason: flagDetail?.reason?.description ?? flagDetail?.reason?.code,\n          locally_evaluated: flagWasLocallyEvaluated,\n          [`$feature/${key}`]: response,\n          $feature_flag_request_id: requestId,\n        },\n        groups,\n        disableGeoip,\n      })\n    }\n    return response\n  }\n\n  async getFeatureFlagPayload(\n    key: string,\n    distinctId: string,\n    matchValue?: FeatureFlagValue,\n    options?: {\n      groups?: Record<string, string>\n      personProperties?: Record<string, string>\n      groupProperties?: Record<string, Record<string, string>>\n      onlyEvaluateLocally?: boolean\n      sendFeatureFlagEvents?: boolean\n      disableGeoip?: boolean\n    }\n  ): Promise<JsonType | undefined> {\n    const { groups, disableGeoip } = options || {}\n    let { onlyEvaluateLocally, sendFeatureFlagEvents, personProperties, groupProperties } = options || {}\n\n    const adjustedProperties = this.addLocalPersonAndGroupProperties(\n      distinctId,\n      groups,\n      personProperties,\n      groupProperties\n    )\n\n    personProperties = adjustedProperties.allPersonProperties\n    groupProperties = adjustedProperties.allGroupProperties\n\n    let response = undefined\n\n    const localEvaluationEnabled = this.featureFlagsPoller !== undefined\n    if (localEvaluationEnabled) {\n      // Try to get match value locally if not provided\n      if (!matchValue) {\n        matchValue = await this.getFeatureFlag(key, distinctId, {\n          ...options,\n          onlyEvaluateLocally: true,\n          sendFeatureFlagEvents: false,\n        })\n      }\n\n      if (matchValue) {\n        response = await this.featureFlagsPoller?.computeFeatureFlagPayloadLocally(key, matchValue)\n      }\n    }\n    //}\n\n    // set defaults\n    if (onlyEvaluateLocally == undefined) {\n      onlyEvaluateLocally = false\n    }\n    if (sendFeatureFlagEvents == undefined) {\n      sendFeatureFlagEvents = true\n    }\n\n    // set defaults\n    if (onlyEvaluateLocally == undefined) {\n      onlyEvaluateLocally = false\n    }\n\n    const payloadWasLocallyEvaluated = response !== undefined\n\n    if (!payloadWasLocallyEvaluated && !onlyEvaluateLocally) {\n      response = await super.getFeatureFlagPayloadStateless(\n        key,\n        distinctId,\n        groups,\n        personProperties,\n        groupProperties,\n        disableGeoip\n      )\n    }\n    return response\n  }\n\n  async getRemoteConfigPayload(flagKey: string): Promise<JsonType | undefined> {\n    const response = await this.featureFlagsPoller?._requestRemoteConfigPayload(flagKey)\n    if (!response) {\n      return undefined\n    }\n\n    const parsed = await response.json()\n    // The payload from the endpoint is stored as a JSON encoded string. So when we return\n    // it, it's effectively double encoded. As far as we know, we should never get single-encoded\n    // JSON, but we'll be defensive here just in case.\n    if (typeof parsed === 'string') {\n      try {\n        // If the parsed value is a string, try parsing it again to handle double-encoded JSON\n        return JSON.parse(parsed)\n      } catch (e) {\n        // If second parse fails, return the string as is\n        return parsed\n      }\n    }\n    return parsed\n  }\n\n  async isFeatureEnabled(\n    key: string,\n    distinctId: string,\n    options?: {\n      groups?: Record<string, string>\n      personProperties?: Record<string, string>\n      groupProperties?: Record<string, Record<string, string>>\n      onlyEvaluateLocally?: boolean\n      sendFeatureFlagEvents?: boolean\n      disableGeoip?: boolean\n    }\n  ): Promise<boolean | undefined> {\n    const feat = await this.getFeatureFlag(key, distinctId, options)\n    if (feat === undefined) {\n      return undefined\n    }\n    return !!feat || false\n  }\n\n  async getAllFlags(\n    distinctId: string,\n    options?: {\n      groups?: Record<string, string>\n      personProperties?: Record<string, string>\n      groupProperties?: Record<string, Record<string, string>>\n      onlyEvaluateLocally?: boolean\n      disableGeoip?: boolean\n    }\n  ): Promise<Record<string, FeatureFlagValue>> {\n    const response = await this.getAllFlagsAndPayloads(distinctId, options)\n    return response.featureFlags || {}\n  }\n\n  async getAllFlagsAndPayloads(\n    distinctId: string,\n    options?: {\n      groups?: Record<string, string>\n      personProperties?: Record<string, string>\n      groupProperties?: Record<string, Record<string, string>>\n      onlyEvaluateLocally?: boolean\n      disableGeoip?: boolean\n    }\n  ): Promise<PostHogFlagsAndPayloadsResponse> {\n    const { groups, disableGeoip } = options || {}\n    let { onlyEvaluateLocally, personProperties, groupProperties } = options || {}\n\n    const adjustedProperties = this.addLocalPersonAndGroupProperties(\n      distinctId,\n      groups,\n      personProperties,\n      groupProperties\n    )\n\n    personProperties = adjustedProperties.allPersonProperties\n    groupProperties = adjustedProperties.allGroupProperties\n\n    // set defaults\n    if (onlyEvaluateLocally == undefined) {\n      onlyEvaluateLocally = false\n    }\n\n    const localEvaluationResult = await this.featureFlagsPoller?.getAllFlagsAndPayloads(\n      distinctId,\n      groups,\n      personProperties,\n      groupProperties\n    )\n\n    let featureFlags = {}\n    let featureFlagPayloads = {}\n    let fallbackToFlags = true\n    if (localEvaluationResult) {\n      featureFlags = localEvaluationResult.response\n      featureFlagPayloads = localEvaluationResult.payloads\n      fallbackToFlags = localEvaluationResult.fallbackToFlags\n    }\n\n    if (fallbackToFlags && !onlyEvaluateLocally) {\n      const remoteEvaluationResult = await super.getFeatureFlagsAndPayloadsStateless(\n        distinctId,\n        groups,\n        personProperties,\n        groupProperties,\n        disableGeoip\n      )\n      featureFlags = {\n        ...featureFlags,\n        ...(remoteEvaluationResult.flags || {}),\n      }\n      featureFlagPayloads = {\n        ...featureFlagPayloads,\n        ...(remoteEvaluationResult.payloads || {}),\n      }\n    }\n\n    return { featureFlags, featureFlagPayloads }\n  }\n\n  groupIdentify({ groupType, groupKey, properties, distinctId, disableGeoip }: GroupIdentifyMessage): void {\n    super.groupIdentifyStateless(groupType, groupKey, properties, { disableGeoip }, distinctId)\n  }\n\n  /**\n   * Reloads the feature flag definitions from the server for local evaluation.\n   * This is useful to call if you want to ensure that the feature flags are up to date before calling getFeatureFlag.\n   */\n  async reloadFeatureFlags(): Promise<void> {\n    await this.featureFlagsPoller?.loadFeatureFlags(true)\n  }\n\n  async _shutdown(shutdownTimeoutMs?: number): Promise<void> {\n    this.featureFlagsPoller?.stopPoller()\n    return super._shutdown(shutdownTimeoutMs)\n  }\n\n  private addLocalPersonAndGroupProperties(\n    distinctId: string,\n    groups?: Record<string, string>,\n    personProperties?: Record<string, string>,\n    groupProperties?: Record<string, Record<string, string>>\n  ): { allPersonProperties: Record<string, string>; allGroupProperties: Record<string, Record<string, string>> } {\n    const allPersonProperties = { distinct_id: distinctId, ...(personProperties || {}) }\n\n    const allGroupProperties: Record<string, Record<string, string>> = {}\n    if (groups) {\n      for (const groupName of Object.keys(groups)) {\n        allGroupProperties[groupName] = {\n          $group_key: groups[groupName],\n          ...(groupProperties?.[groupName] || {}),\n        }\n      }\n    }\n\n    return { allPersonProperties, allGroupProperties }\n  }\n\n  captureException(error: unknown, distinctId?: string, additionalProperties?: Record<string | number, any>): void {\n    const syntheticException = new Error('PostHog syntheticException')\n    ErrorTracking.captureException(this, error, { syntheticException }, distinctId, additionalProperties)\n  }\n}\n","// Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry\n// Licensed under the MIT License\n\nimport { GetModuleFn, StackFrame, StackLineParser, StackLineParserFn, StackParser } from './types'\n\n// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re-written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/\nconst STACKTRACE_FRAME_LIMIT = 50\n\nconst UNKNOWN_FUNCTION = '?'\n\n/** Node Stack line parser */\nfunction node(getModule?: GetModuleFn): StackLineParserFn {\n  const FILENAME_MATCH = /^\\s*[-]{4,}$/\n  const FULL_MATCH = /at (?:async )?(?:(.+?)\\s+\\()?(?:(.+):(\\d+):(\\d+)?|([^)]+))\\)?/\n\n  return (line: string) => {\n    const lineMatch = line.match(FULL_MATCH)\n\n    if (lineMatch) {\n      let object: string | undefined\n      let method: string | undefined\n      let functionName: string | undefined\n      let typeName: string | undefined\n      let methodName: string | undefined\n\n      if (lineMatch[1]) {\n        functionName = lineMatch[1]\n\n        let methodStart = functionName.lastIndexOf('.')\n        if (functionName[methodStart - 1] === '.') {\n          methodStart--\n        }\n\n        if (methodStart > 0) {\n          object = functionName.slice(0, methodStart)\n          method = functionName.slice(methodStart + 1)\n          const objectEnd = object.indexOf('.Module')\n          if (objectEnd > 0) {\n            functionName = functionName.slice(objectEnd + 1)\n            object = object.slice(0, objectEnd)\n          }\n        }\n        typeName = undefined\n      }\n\n      if (method) {\n        typeName = object\n        methodName = method\n      }\n\n      if (method === '<anonymous>') {\n        methodName = undefined\n        functionName = undefined\n      }\n\n      if (functionName === undefined) {\n        methodName = methodName || UNKNOWN_FUNCTION\n        functionName = typeName ? `${typeName}.${methodName}` : methodName\n      }\n\n      let filename = lineMatch[2]?.startsWith('file://') ? lineMatch[2].slice(7) : lineMatch[2]\n      const isNative = lineMatch[5] === 'native'\n\n      // If it's a Windows path, trim the leading slash so that `/C:/foo` becomes `C:/foo`\n      if (filename?.match(/\\/[A-Z]:/)) {\n        filename = filename.slice(1)\n      }\n\n      if (!filename && lineMatch[5] && !isNative) {\n        filename = lineMatch[5]\n      }\n\n      return {\n        filename: filename ? decodeURI(filename) : undefined,\n        module: getModule ? getModule(filename) : undefined,\n        function: functionName,\n        lineno: _parseIntOrUndefined(lineMatch[3]),\n        colno: _parseIntOrUndefined(lineMatch[4]),\n        in_app: filenameIsInApp(filename || '', isNative),\n        platform: 'node:javascript',\n      }\n    }\n\n    if (line.match(FILENAME_MATCH)) {\n      return {\n        filename: line,\n        platform: 'node:javascript',\n      }\n    }\n\n    return undefined\n  }\n}\n\n/**\n * Does this filename look like it's part of the app code?\n */\nfunction filenameIsInApp(filename: string, isNative: boolean = false): boolean {\n  const isInternal =\n    isNative ||\n    (filename &&\n      // It's not internal if it's an absolute linux path\n      !filename.startsWith('/') &&\n      // It's not internal if it's an absolute windows path\n      !filename.match(/^[A-Z]:/) &&\n      // It's not internal if the path is starting with a dot\n      !filename.startsWith('.') &&\n      // It's not internal if the frame has a protocol. In node, this is usually the case if the file got pre-processed with a bundler like webpack\n      !filename.match(/^[a-zA-Z]([a-zA-Z0-9.\\-+])*:\\/\\//)) // Schema from: https://stackoverflow.com/a/3641782\n\n  // in_app is all that's not an internal Node function or a module within node_modules\n  // note that isNative appears to return true even for node core libraries\n  // see https://github.com/getsentry/raven-node/issues/176\n\n  return !isInternal && filename !== undefined && !filename.includes('node_modules/')\n}\n\nfunction _parseIntOrUndefined(input: string | undefined): number | undefined {\n  return parseInt(input || '', 10) || undefined\n}\n\nfunction nodeStackLineParser(getModule?: GetModuleFn): StackLineParser {\n  return [90, node(getModule)]\n}\n\nexport function createStackParser(getModule?: GetModuleFn): StackParser {\n  const parsers = [nodeStackLineParser(getModule)]\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map((p) => p[1])\n\n  return (stack: string, skipFirstLines: number = 0): StackFrame[] => {\n    const frames: StackFrame[] = []\n    const lines = stack.split('\\n')\n\n    for (let i = skipFirstLines; i < lines.length; i++) {\n      const line = lines[i] as string\n      // Ignore lines over 1kb as they are unlikely to be stack frames.\n      if (line.length > 1024) {\n        continue\n      }\n\n      // https://github.com/getsentry/sentry-javascript/issues/5459\n      // Remove webpack (error: *) wrappers\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line\n\n      // https://github.com/getsentry/sentry-javascript/issues/7813\n      // Skip Error: lines\n      if (cleanedLine.match(/\\S*Error: /)) {\n        continue\n      }\n\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine)\n\n        if (frame) {\n          frames.push(frame)\n          break\n        }\n      }\n\n      if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n        break\n      }\n    }\n\n    return reverseAndStripFrames(frames)\n  }\n}\n\nfunction reverseAndStripFrames(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n  if (!stack.length) {\n    return []\n  }\n\n  const localStack = Array.from(stack)\n\n  localStack.reverse()\n\n  return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map((frame) => ({\n    ...frame,\n    filename: frame.filename || getLastStackFrame(localStack).filename,\n    function: frame.function || UNKNOWN_FUNCTION,\n  }))\n}\n\nfunction getLastStackFrame(arr: StackFrame[]): StackFrame {\n  return arr[arr.length - 1] || {}\n}\n","export * from '../exports'\n\nimport { createGetModuleFromFilename } from '../extensions/error-tracking/get-module.node'\nimport { addSourceContext } from '../extensions/error-tracking/context-lines.node'\nimport ErrorTracking from '../extensions/error-tracking'\n\nimport { PostHogBackendClient } from '../client'\nimport { createStackParser } from '../extensions/error-tracking/stack-parser'\n\nErrorTracking.stackParser = createStackParser(createGetModuleFromFilename())\nErrorTracking.frameModifiers = [addSourceContext]\n\nexport class PostHog extends PostHogBackendClient {\n  getLibraryId(): string {\n    return 'posthog-node'\n  }\n}\n"],"names":["NAME","createEventProcessor","_posthog","organization","projectId","prefix","severityAllowList","event","shouldProcessLevel","includes","level","tags","userId","PostHogSentryIntegration","POSTHOG_ID_TAG","undefined","uiHost","options","host","personUrl","URL","apiKey","toString","exceptions","exception","values","exceptionList","map","stacktrace","type","frames","frame","platform","properties","$exception_message","value","message","$exception_type","$exception_personURL","$exception_level","$exception_list","$sentry_event_id","event_id","$sentry_exception","$sentry_exception_message","$sentry_exception_type","$sentry_tags","capture","distinctId","sentryIntegration","processor","name","processEvent","constructor","setupOnce","addGlobalEventProcessor","getCurrentHub","getClient","getDsn","makeUncaughtExceptionHandler","captureFn","onFatalFn","calledFatalError","Object","assign","error","userProvidedListenersCount","global","process","listeners","filter","listener","_posthogErrorHandler","length","processWouldExit","mechanism","handled","addUncaughtExceptionListener","on","addUnhandledRejectionListener","reason","parsedStackResults","lastKeysCount","cachedFilenameChunkIds","getFilenameToChunkIdMap","stackParser","chunkIdMap","globalThis","_posthogChunkIds","console","chunkIdKeys","keys","reduce","acc","stackKey","result","parsedStack","i","stackFrame","filename","chunkId","isEvent","candidate","Event","isInstanceOf","isPlainObject","isBuiltin","isError","prototype","call","Error","base","isErrorEvent","className","propertiesFromUnknownInput","frameModifiers","input","hint","providedMechanism","errorList","getErrorList","Promise","all","exceptionFromError","getError","cause","synthetic","errorFromProp","getErrorPropertyFromObject","getMessageForObject","ex","syntheticException","obj","prop","hasOwnProperty","extractExceptionKeysForMessage","getObjectClassName","getPrototypeOf","e","maxLength","convertToPlainObject","sort","firstKey","truncate","includedKeys","serialized","slice","join","str","max","stack","getOwnProperties","newObj","target","serializeEventTarget","currentTarget","extractedProps","property","_oO","parseStackFrames","modifier","applyChunkIds","parser","filenameChunkIdMap","forEach","chunk_id","SHUTDOWN_TIMEOUT","ErrorTracking","captureException","client","additionalProperties","$process_person_profile","exceptionProperties","uuidv7","_exceptionAutocaptureEnabled","enableExceptionAutocapture","startAutocaptureIfEnabled","isEnabled","onException","bind","onFatalError","shutdown","isDisabled","setupExpressErrorHandler","app","use","_","__","next","createGetModuleFromFilename","basePath","argv","dirname","cwd","isWindows","sep","normalizedBase","normalizeWindowsPath","normalizedFilename","dir","file","ext","posix","parse","decodedFile","decodeURIComponent","n","lastIndexOf","replace","startsWith","moduleName","path","ReduceableCache","_maxSize","_cache","Map","get","key","delete","set","size","LRU_FILE_CONTENTS_CACHE","LRU_FILE_CONTENTS_FS_READ_FAILED","DEFAULT_LINES_OF_CONTEXT","MAX_CONTEXTLINES_COLNO","MAX_CONTEXTLINES_LINENO","addSourceContext","filesToLines","lineno","shouldSkipContextLinesForFile","shouldSkipContextLinesForFrame","filesToLinesOutput","push","files","readlinePromises","filesToLineRanges","a","b","ranges","makeLineReaderRanges","every","r","rangeExistsInContentCache","cache","emplace","getContextLinesFromFile","catch","addSourceContextToFrames","output","resolve","stream","createReadStream","lineReaded","createInterface","destroyStreamAndResolve","destroy","lineNumber","currentRangeIndex","range","rangeStart","rangeEnd","onStreamError","close","removeAllListeners","line","snipLine","context_line","contents","addContextToFrame","pre_context","makeRangeStart","clearLineContext","end","makeRangeEnd","post_context","endsWith","colno","lines","current","makeContextRange","out","Math","newLine","lineLength","start","min","Lazy","factory","getValue","initializationPromise","isInitialized","waitForInitialization","nodeCrypto","getNodeCrypto","webCrypto","crypto","subtle","webcrypto","getWebCrypto","hashSHA1","text","createHash","update","digest","hashBuffer","TextEncoder","encode","hashArray","Array","from","Uint8Array","byte","padStart","SIXTY_SECONDS","LONG_SCALE","NULL_VALUES_ALLOWED_OPERATORS","ClientError","captureStackTrace","setPrototypeOf","InconclusiveMatchError","FeatureFlagsPoller","pollingInterval","personalApiKey","projectApiKey","timeout","customHeaders","debugMode","shouldBeginExponentialBackoff","backOffCount","featureFlags","featureFlagsByKey","groupTypeMapping","cohorts","loadedSuccessfullyOnce","poller","fetch","onError","onLoad","loadFeatureFlags","debug","enabled","logMsgIfDebug","fn","getFeatureFlag","groups","personProperties","groupProperties","response","featureFlag","flag","computeFlagLocally","computeFeatureFlagPayloadLocally","matchValue","filters","payloads","JSON","getAllFlagsAndPayloads","fallbackToFlags","matchPayload","ensure_experience_continuity","active","flagFilters","aggregation_group_type_index","groupName","String","warn","focusedGroupProperties","matchFeatureFlagProperties","flagConditions","isInconclusive","sortedFlagConditions","conditionA","conditionB","AHasVariantOverride","variant","BHasVariantOverride","condition","isConditionMatch","variantOverride","flagVariants","multivariate","variants","some","getMatchingVariant","rolloutPercentage","rollout_percentage","warnFunction","msg","propertyType","matches","matchCohort","matchProperty","_hash","hashValue","matchingVariant","variantLookupTable","find","valueMin","valueMax","lookupTable","multivariates","forceReload","_loadFeatureFlags","isLocalEvaluationReady","getPollingInterval","clearTimeout","setTimeout","res","_requestFeatureFlagDefinitions","status","responseJson","json","stringify","flags","curr","group_type_mapping","err","getPersonalApiKeyRequestOptions","method","headers","Authorization","url","abortTimeout","controller","AbortController","safeSetTimeout","abort","signal","stopPoller","_requestRemoteConfigPayload","flagKey","salt","hashString","parseInt","propertyValues","operator","overrideValue","computeExactMatch","isArray","val","toLowerCase","compare","lhs","rhs","isValidRegex","match","parsedValue","parseFloat","parsedDate","relativeDateParseForFeatureFlagMatching","convertToDateTime","overrideDate","cohortProperties","cohortId","propertyGroup","matchPropertyGroup","propertyGroupType","errorMatchingLocally","negation","regex","RegExp","Date","date","isNaN","valueOf","parsedDt","toISOString","number","interval","setUTCHours","getUTCHours","setUTCDate","getUTCDate","setUTCMonth","getUTCMonth","setUTCFullYear","getUTCFullYear","PostHogMemoryStorage","_memoryStorage","getProperty","setProperty","MINIMUM_POLLING_INTERVAL","THIRTY_SECONDS","MAX_CACHE_SIZE","PostHogBackendClient","PostHogCoreStateless","featureFlagsPollingInterval","featureFlagsPoller","requestTimeout","_events","emit","count","getCustomHeaders","errorTracking","distinctIdHasSentFlagCalls","maxCacheSize","getPersistedProperty","setPersistedProperty","getLibraryVersion","version","getCustomUserAgent","getLibraryId","enable","optIn","disable","optOut","props","sendFeatureFlags","timestamp","disableGeoip","uuid","_capture","captureStateless","_getFlags","getFeatureFlagsStateless","capturePromise","then","groupsWithStringValues","entries","getAllFlags","onlyEvaluateLocally","feature","activeFlags","$groups","addPendingPromise","captureImmediate","captureStatelessImmediate","identify","userPropsOnce","$set_once","userProps","$set","identifyStateless","identifyImmediate","identifyStatelessImmediate","alias","data","aliasStateless","aliasImmediate","aliasStatelessImmediate","waitForLocalEvaluationReady","timeoutMs","cleanup","sendFeatureFlagEvents","adjustedProperties","addLocalPersonAndGroupProperties","allPersonProperties","allGroupProperties","flagWasLocallyEvaluated","requestId","flagDetail","remoteResponse","getFeatureFlagDetailStateless","getFeatureFlagValue","featureFlagReportedKey","$feature_flag","$feature_flag_response","$feature_flag_id","metadata","id","$feature_flag_version","$feature_flag_reason","description","code","locally_evaluated","$feature_flag_request_id","getFeatureFlagPayload","localEvaluationEnabled","payloadWasLocallyEvaluated","getFeatureFlagPayloadStateless","getRemoteConfigPayload","parsed","isFeatureEnabled","feat","localEvaluationResult","featureFlagPayloads","remoteEvaluationResult","getFeatureFlagsAndPayloadsStateless","groupIdentify","groupType","groupKey","groupIdentifyStateless","reloadFeatureFlags","_shutdown","shutdownTimeoutMs","distinct_id","$group_key","WEBPACK_ERROR_REGEXP","STACKTRACE_FRAME_LIMIT","UNKNOWN_FUNCTION","node","getModule","FILENAME_MATCH","FULL_MATCH","lineMatch","object","functionName","typeName","methodName","methodStart","objectEnd","indexOf","isNative","decodeURI","module","function","_parseIntOrUndefined","in_app","filenameIsInApp","isInternal","nodeStackLineParser","createStackParser","parsers","sortedParsers","p","skipFirstLines","split","cleanedLine","test","reverseAndStripFrames","localStack","reverse","getLastStackFrame","arr","PostHog"],"mappings":"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"}