posthog-node 5.3.1 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +52 -0
- package/lib/edge/index.cjs +79 -38
- package/lib/edge/index.cjs.map +1 -1
- package/lib/edge/index.mjs +79 -38
- package/lib/edge/index.mjs.map +1 -1
- package/lib/index.d.ts +9 -2
- package/lib/node/index.cjs +79 -38
- package/lib/node/index.cjs.map +1 -1
- package/lib/node/index.mjs +79 -38
- package/lib/node/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","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 buildEventMessage(\n error: unknown,\n hint: EventHint,\n distinctId?: string,\n additionalProperties?: Record<string | number, any>\n ): Promise<EventMessage> {\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 return {\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 void ErrorTracking.buildEventMessage(exception, hint).then((msg) => {\n this.client.capture(msg)\n })\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.buildEventMessage(error, hint, uuidv7(), { $process_person_profile: false }).then((msg) =>\n _posthog.capture(msg)\n )\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 TopLeft = 'top_left',\n TopCenter = 'top_center',\n TopRight = 'top_right',\n MiddleLeft = 'middle_left',\n MiddleCenter = 'middle_center',\n MiddleRight = 'middle_right',\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\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 safeSetTimeout,\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 // Only start the poller if local evaluation is enabled (defaults to true for backward compatibility)\n const shouldEnableLocalEvaluation = options.enableLocalEvaluation !== false\n\n if (shouldEnableLocalEvaluation) {\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 }\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 if (!this.options.personalApiKey) {\n throw new Error('Personal API key is required for remote config payload decryption')\n }\n\n const response = await this._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 async _requestRemoteConfigPayload(flagKey: string): Promise<PostHogFetchResponse | undefined> {\n if (!this.options.personalApiKey) {\n return undefined\n }\n\n const url = `${this.host}/api/projects/@current/feature_flags/${flagKey}/remote_config/`\n\n const options: PostHogFetchOptions = {\n method: 'GET',\n headers: {\n ...this.getCustomHeaders(),\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.options.personalApiKey}`,\n },\n }\n\n let abortTimeout = null\n if (this.options.requestTimeout && typeof this.options.requestTimeout === 'number') {\n const controller = new AbortController()\n abortTimeout = safeSetTimeout(() => {\n controller.abort()\n }, this.options.requestTimeout)\n options.signal = controller.signal\n }\n\n try {\n return await this.fetch(url, options)\n } catch (error) {\n this._events.emit('error', error)\n return undefined\n } finally {\n if (abortTimeout) {\n clearTimeout(abortTimeout)\n }\n }\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.buildEventMessage(error, { syntheticException }, distinctId, additionalProperties).then((msg) => {\n this.capture(msg)\n })\n }\n\n async captureExceptionImmediate(\n error: unknown,\n distinctId?: string,\n additionalProperties?: Record<string | number, any>\n ): Promise<void> {\n const syntheticException = new Error('PostHog syntheticException')\n const evtMsg = await ErrorTracking.buildEventMessage(\n error,\n { syntheticException },\n distinctId,\n additionalProperties\n )\n return await this.captureImmediate(evtMsg)\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","buildEventMessage","additionalProperties","$process_person_profile","exceptionProperties","uuidv7","client","_exceptionAutocaptureEnabled","enableExceptionAutocapture","startAutocaptureIfEnabled","isEnabled","onException","bind","onFatalError","then","msg","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","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","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","shouldEnableLocalEvaluation","enableLocalEvaluation","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","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","flagKey","_requestRemoteConfigPayload","parsed","isFeatureEnabled","feat","localEvaluationResult","featureFlagPayloads","remoteEvaluationResult","getFeatureFlagsAndPayloadsStateless","groupIdentify","groupType","groupKey","groupIdentifyStateless","reloadFeatureFlags","_shutdown","shutdownTimeoutMs","distinct_id","$group_key","captureException","captureExceptionImmediate","evtMsg","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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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","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 buildEventMessage(\n error: unknown,\n hint: EventHint,\n distinctId?: string,\n additionalProperties?: Record<string | number, any>\n ): Promise<EventMessage> {\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 return {\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 void ErrorTracking.buildEventMessage(exception, hint).then((msg) => {\n this.client.capture(msg)\n })\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.buildEventMessage(error, hint, uuidv7(), { $process_person_profile: false }).then((msg) =>\n _posthog.capture(msg)\n )\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 TopLeft = 'top_left',\n TopCenter = 'top_center',\n TopRight = 'top_right',\n MiddleLeft = 'middle_left',\n MiddleCenter = 'middle_center',\n MiddleRight = 'middle_right',\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 this.onError?.(new Error(`Unable to compute flag locally: ${flag.key} - ${e.message}`))\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\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 safeSetTimeout,\n} from 'posthog-core'\nimport {\n EventMessage,\n GroupIdentifyMessage,\n IdentifyMessage,\n IPostHog,\n PostHogOptions,\n SendFeatureFlagsOptions,\n} from './types'\nimport { FeatureFlagDetail, FeatureFlagValue } from 'posthog-core'\nimport { FeatureFlagsPoller } from './extensions/feature-flags/feature-flags'\nimport ErrorTracking from './extensions/error-tracking'\nimport { isPlainObject } from './extensions/error-tracking/type-checking'\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 // Only start the poller if local evaluation is enabled (defaults to true for backward compatibility)\n const shouldEnableLocalEvaluation = options.enableLocalEvaluation !== false\n\n if (shouldEnableLocalEvaluation) {\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 }\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 // :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 evaluate them locally if the user prefers it, otherwise we fall back to remote evaluation\n const sendFeatureFlagsOptions = typeof sendFeatureFlags === 'object' ? sendFeatureFlags : undefined\n return await this.getFeatureFlagsForEvent(distinctId, groups, disableGeoip, sendFeatureFlagsOptions)\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 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 capturePromise = Promise.resolve()\n .then(async () => {\n if (sendFeatureFlags) {\n // If we are sending feature flags, we evaluate them locally if the user prefers it, otherwise we fall back to remote evaluation\n const sendFeatureFlagsOptions = typeof sendFeatureFlags === 'object' ? sendFeatureFlags : undefined\n return await this.getFeatureFlagsForEvent(distinctId, groups, disableGeoip, sendFeatureFlagsOptions)\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 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 if (!this.options.personalApiKey) {\n throw new Error('Personal API key is required for remote config payload decryption')\n }\n\n const response = await this._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 async _requestRemoteConfigPayload(flagKey: string): Promise<PostHogFetchResponse | undefined> {\n if (!this.options.personalApiKey) {\n return undefined\n }\n\n const url = `${this.host}/api/projects/@current/feature_flags/${flagKey}/remote_config/`\n\n const options: PostHogFetchOptions = {\n method: 'GET',\n headers: {\n ...this.getCustomHeaders(),\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.options.personalApiKey}`,\n },\n }\n\n let abortTimeout = null\n if (this.options.requestTimeout && typeof this.options.requestTimeout === 'number') {\n const controller = new AbortController()\n abortTimeout = safeSetTimeout(() => {\n controller.abort()\n }, this.options.requestTimeout)\n options.signal = controller.signal\n }\n\n try {\n return await this.fetch(url, options)\n } catch (error) {\n this._events.emit('error', error)\n return undefined\n } finally {\n if (abortTimeout) {\n clearTimeout(abortTimeout)\n }\n }\n }\n\n private extractPropertiesFromEvent(\n eventProperties?: Record<string | number, any>,\n groups?: Record<string, string | number>\n ): {\n personProperties: Record<string, string>\n groupProperties: Record<string, Record<string, string>>\n } {\n if (!eventProperties) {\n return { personProperties: {}, groupProperties: {} }\n }\n\n const personProperties: Record<string, string> = {}\n const groupProperties: Record<string, Record<string, string>> = {}\n\n for (const [key, value] of Object.entries(eventProperties)) {\n // If the value is a plain object and the key exists in groups, treat it as group properties\n if (isPlainObject(value) && groups && key in groups) {\n const groupProps: Record<string, string> = {}\n for (const [groupKey, groupValue] of Object.entries(value as Record<string, any>)) {\n groupProps[String(groupKey)] = String(groupValue)\n }\n groupProperties[String(key)] = groupProps\n } else {\n // Otherwise treat as person property\n personProperties[String(key)] = String(value)\n }\n }\n\n return { personProperties, groupProperties }\n }\n\n private async getFeatureFlagsForEvent(\n distinctId: string,\n groups?: Record<string, string | number>,\n disableGeoip?: boolean,\n sendFeatureFlagsOptions?: SendFeatureFlagsOptions\n ): Promise<PostHogFlagsResponse['featureFlags'] | undefined> {\n // Use properties directly from options if they exist\n const finalPersonProperties = sendFeatureFlagsOptions?.personProperties || {}\n const finalGroupProperties = sendFeatureFlagsOptions?.groupProperties || {}\n\n // Check if we should only evaluate locally\n const onlyEvaluateLocally = sendFeatureFlagsOptions?.onlyEvaluateLocally ?? false\n\n // If onlyEvaluateLocally is true, only use local evaluation\n if (onlyEvaluateLocally) {\n if ((this.featureFlagsPoller?.featureFlags?.length || 0) > 0) {\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 personProperties: finalPersonProperties,\n groupProperties: finalGroupProperties,\n disableGeoip,\n onlyEvaluateLocally: true,\n })\n } else {\n // If onlyEvaluateLocally is true but we don't have local flags, return empty\n return {}\n }\n }\n\n // Prefer local evaluation if available (default behavior; I'd rather not penalize users who haven't updated to the new API but still want to use local evaluation)\n if ((this.featureFlagsPoller?.featureFlags?.length || 0) > 0) {\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 personProperties: finalPersonProperties,\n groupProperties: finalGroupProperties,\n disableGeoip,\n onlyEvaluateLocally: true,\n })\n }\n\n // Fall back to remote evaluation if local evaluation is not available\n return (\n await super.getFeatureFlagsStateless(\n distinctId,\n groups,\n finalPersonProperties,\n finalGroupProperties,\n disableGeoip\n )\n ).flags\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.buildEventMessage(error, { syntheticException }, distinctId, additionalProperties).then((msg) => {\n this.capture(msg)\n })\n }\n\n async captureExceptionImmediate(\n error: unknown,\n distinctId?: string,\n additionalProperties?: Record<string | number, any>\n ): Promise<void> {\n const syntheticException = new Error('PostHog syntheticException')\n const evtMsg = await ErrorTracking.buildEventMessage(\n error,\n { syntheticException },\n distinctId,\n additionalProperties\n )\n return await this.captureImmediate(evtMsg)\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","buildEventMessage","additionalProperties","$process_person_profile","exceptionProperties","uuidv7","client","_exceptionAutocaptureEnabled","enableExceptionAutocapture","startAutocaptureIfEnabled","isEnabled","onException","bind","onFatalError","then","msg","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","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","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","shouldEnableLocalEvaluation","enableLocalEvaluation","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","capturePromise","sendFeatureFlagsOptions","getFeatureFlagsForEvent","feature","entries","activeFlags","$groups","addPendingPromise","captureImmediate","captureStatelessImmediate","identify","userPropsOnce","$set_once","userProps","$set","identifyStateless","identifyImmediate","identifyStatelessImmediate","alias","data","aliasStateless","aliasImmediate","aliasStatelessImmediate","waitForLocalEvaluationReady","timeoutMs","cleanup","onlyEvaluateLocally","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","flagKey","_requestRemoteConfigPayload","parsed","isFeatureEnabled","feat","getAllFlags","localEvaluationResult","featureFlagPayloads","remoteEvaluationResult","getFeatureFlagsAndPayloadsStateless","groupIdentify","groupType","groupKey","groupIdentifyStateless","reloadFeatureFlags","_shutdown","shutdownTimeoutMs","extractPropertiesFromEvent","eventProperties","groupProps","groupValue","finalPersonProperties","finalGroupProperties","groupsWithStringValues","getFeatureFlagsStateless","distinct_id","$group_key","captureException","captureExceptionImmediate","evtMsg","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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"}
|