posthog-node 4.2.2 → 4.2.3
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 +4 -0
- package/lib/index.cjs.js +9 -4
- package/lib/index.cjs.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.esm.js +9 -4
- package/lib/index.esm.js.map +1 -1
- package/lib/posthog-core/src/index.d.ts +1 -1
- package/package.json +1 -1
- package/src/posthog-node.ts +9 -2
- package/test/posthog-node.spec.ts +29 -3
package/lib/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../posthog-core/src/types.ts","../../posthog-core/src/utils.ts","../../posthog-core/src/lz-string.ts","../../posthog-core/src/eventemitter.ts","../../posthog-core/src/vendor/uuidv7.ts","../../posthog-core/src/index.ts","../../posthog-core/src/storage-memory.ts","../src/fetch.ts","../src/feature-flags.ts","../src/posthog-node.ts","../src/extensions/sentry-integration.ts"],"sourcesContent":["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 /** Option to bootstrap the library with given distinctId and feature flags */\n bootstrap?: {\n distinctId?: string\n isIdentifiedId?: boolean\n featureFlags?: Record<string, boolean | string>\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 /** For Session Analysis how long before we expire a session (defaults to 30 mins) */\n sessionExpirationTimeSeconds?: number\n /** Whether to post events to PostHog in JSON or compressed format. Defaults to 'json' */\n captureMode?: 'json' | 'form'\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 FeatureFlags = 'feature_flags',\n FeatureFlagPayloads = 'feature_flag_payloads',\n OverrideFeatureFlags = 'override_feature_flags',\n Queue = 'queue',\n OptedOut = 'opted_out',\n SessionId = 'session_id',\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}\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\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]: any\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} & {\n [key: string]: any\n} // Any key prefixed with `attr__` can be added\n\nexport type PostHogDecideResponse = {\n config: { enable_collect_everything: boolean }\n editorParams: { toolbarVersion: string; jsURL: string }\n isAuthenticated: true\n supportedCompression: string[]\n featureFlags: {\n [key: string]: string | boolean\n }\n featureFlagPayloads: {\n [key: string]: JsonType\n }\n errorsWhileComputingFlags: boolean\n sessionRecording?:\n | boolean\n | {\n [key: string]: JsonType\n }\n}\n\nexport type PostHogFlagsAndPayloadsResponse = {\n featureFlags: PostHogDecideResponse['featureFlags']\n featureFlagPayloads: PostHogDecideResponse['featureFlagPayloads']\n}\n\nexport type JsonType = string | number | boolean | null | { [key: string]: JsonType } | Array<JsonType>\n","export function assert(truthyValue: any, message: string): void {\n if (!truthyValue) {\n throw new Error(message)\n }\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: any) => 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((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","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\n\n// private property\nconst f = String.fromCharCode\nconst keyStrBase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\nconst baseReverseDic: any = {}\n\nfunction getBaseValue(alphabet: any, character: any): any {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {}\n for (let i = 0; i < alphabet.length; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i\n }\n }\n return baseReverseDic[alphabet][character]\n}\n\nexport const LZString = {\n compressToBase64: function (input: any): string {\n if (input == null) {\n return ''\n }\n const res = LZString._compress(input, 6, function (a: any) {\n return keyStrBase64.charAt(a)\n })\n switch (\n res.length % 4 // To produce valid Base64\n ) {\n default: // When could this happen ?\n case 0:\n return res\n case 1:\n return res + '==='\n case 2:\n return res + '=='\n case 3:\n return res + '='\n }\n },\n\n decompressFromBase64: function (input: any): any {\n if (input == null) {\n return ''\n }\n if (input == '') {\n return null\n }\n return LZString._decompress(input.length, 32, function (index: any) {\n return getBaseValue(keyStrBase64, input.charAt(index))\n })\n },\n\n compress: function (uncompressed: any): any {\n return LZString._compress(uncompressed, 16, function (a: any) {\n return f(a)\n })\n },\n _compress: function (uncompressed: any, bitsPerChar: any, getCharFromInt: any): any {\n if (uncompressed == null) {\n return ''\n }\n const context_dictionary: any = {},\n context_dictionaryToCreate: any = {},\n context_data = []\n\n let i,\n value,\n context_c = '',\n context_wc = '',\n context_w = '',\n context_enlargeIn = 2, // Compensate for the first entry which should not count\n context_dictSize = 3,\n context_numBits = 2,\n context_data_val = 0,\n context_data_position = 0,\n ii\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii)\n if (!Object.prototype.hasOwnProperty.call(context_dictionary, context_c)) {\n context_dictionary[context_c] = context_dictSize++\n context_dictionaryToCreate[context_c] = true\n }\n\n context_wc = context_w + context_c\n if (Object.prototype.hasOwnProperty.call(context_dictionary, context_wc)) {\n context_w = context_wc\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) {\n if (context_w.charCodeAt(0) < 256) {\n for (i = 0; i < context_numBits; i++) {\n context_data_val = context_data_val << 1\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n }\n value = context_w.charCodeAt(0)\n for (i = 0; i < 8; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n } else {\n value = 1\n for (i = 0; i < context_numBits; i++) {\n context_data_val = (context_data_val << 1) | value\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = 0\n }\n value = context_w.charCodeAt(0)\n for (i = 0; i < 16; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n }\n context_enlargeIn--\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits)\n context_numBits++\n }\n delete context_dictionaryToCreate[context_w]\n } else {\n value = context_dictionary[context_w]\n for (i = 0; i < context_numBits; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n }\n context_enlargeIn--\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits)\n context_numBits++\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++\n context_w = String(context_c)\n }\n }\n\n // Output the code for w.\n if (context_w !== '') {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) {\n if (context_w.charCodeAt(0) < 256) {\n for (i = 0; i < context_numBits; i++) {\n context_data_val = context_data_val << 1\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n }\n value = context_w.charCodeAt(0)\n for (i = 0; i < 8; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n } else {\n value = 1\n for (i = 0; i < context_numBits; i++) {\n context_data_val = (context_data_val << 1) | value\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = 0\n }\n value = context_w.charCodeAt(0)\n for (i = 0; i < 16; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n }\n context_enlargeIn--\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits)\n context_numBits++\n }\n delete context_dictionaryToCreate[context_w]\n } else {\n value = context_dictionary[context_w]\n for (i = 0; i < context_numBits; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n }\n context_enlargeIn--\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits)\n context_numBits++\n }\n }\n\n // Mark the end of the stream\n value = 2\n for (i = 0; i < context_numBits; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n\n // Flush the last char\n while (true) {\n context_data_val = context_data_val << 1\n if (context_data_position == bitsPerChar - 1) {\n context_data.push(getCharFromInt(context_data_val))\n break\n } else {\n context_data_position++\n }\n }\n return context_data.join('')\n },\n\n decompress: function (compressed: any): any {\n if (compressed == null) {\n return ''\n }\n if (compressed == '') {\n return null\n }\n return LZString._decompress(compressed.length, 32768, function (index: any) {\n return compressed.charCodeAt(index)\n })\n },\n\n _decompress: function (length: any, resetValue: any, getNextValue: any): any {\n const dictionary = [],\n result = [],\n data = { val: getNextValue(0), position: resetValue, index: 1 }\n\n let next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry: any = '',\n i,\n w,\n bits,\n resb,\n maxpower,\n power,\n c\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i\n }\n\n bits = 0\n maxpower = Math.pow(2, 2)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n switch ((next = bits)) {\n case 0:\n bits = 0\n maxpower = Math.pow(2, 8)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n c = f(bits)\n break\n case 1:\n bits = 0\n maxpower = Math.pow(2, 16)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n c = f(bits)\n break\n case 2:\n return ''\n }\n dictionary[3] = c\n w = c\n result.push(c)\n while (true) {\n if (data.index > length) {\n return ''\n }\n\n bits = 0\n maxpower = Math.pow(2, numBits)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n\n switch ((c = bits)) {\n case 0:\n bits = 0\n maxpower = Math.pow(2, 8)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n\n dictionary[dictSize++] = f(bits)\n c = dictSize - 1\n enlargeIn--\n break\n case 1:\n bits = 0\n maxpower = Math.pow(2, 16)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n dictionary[dictSize++] = f(bits)\n c = dictSize - 1\n enlargeIn--\n break\n case 2:\n return result.join('')\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits)\n numBits++\n }\n\n if (dictionary[c]) {\n entry = dictionary[c]\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0)\n } else {\n return null\n }\n }\n result.push(entry)\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0)\n enlargeIn--\n\n w = entry\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits)\n numBits++\n }\n }\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","// 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","import {\n PostHogFetchOptions,\n PostHogFetchResponse,\n PostHogQueueItem,\n PostHogAutocaptureElement,\n PostHogDecideResponse,\n PostHogCoreOptions,\n PostHogEventProperties,\n PostHogPersistedProperty,\n PostHogCaptureOptions,\n JsonType,\n} from './types'\nimport {\n assert,\n currentISOTime,\n currentTimestamp,\n removeTrailingSlash,\n retriable,\n RetriableOptions,\n safeSetTimeout,\n} from './utils'\nexport * as utils from './utils'\nimport { LZString } from './lz-string'\nimport { SimpleEventEmitter } from './eventemitter'\nimport { uuidv7 } from './vendor/uuidv7'\n\nclass PostHogFetchHttpError extends Error {\n name = 'PostHogFetchHttpError'\n\n constructor(public response: PostHogFetchResponse) {\n super('HTTP error while fetching PostHog: ' + response.status)\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\nfunction isPostHogFetchError(err: any): boolean {\n return typeof err === 'object' && (err instanceof PostHogFetchHttpError || err instanceof PostHogFetchNetworkError)\n}\n\nexport abstract class PostHogCoreStateless {\n // options\n readonly apiKey: string\n readonly host: string\n private flushAt: number\n private maxBatchSize: number\n private maxQueueSize: number\n private flushInterval: number\n private flushPromise: Promise<any> | null = null\n private requestTimeout: number\n private featureFlagsRequestTimeoutMs: number\n private captureMode: 'form' | 'json'\n private removeDebugCallback?: () => void\n private disableGeoip: boolean = true\n private historicalMigration: boolean = false\n protected disabled = false\n\n private defaultOptIn: boolean = true\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\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.captureMode = options?.captureMode || 'json'\n\n // If enable is explicitly set to false we override the optout\n this.defaultOptIn = options?.defaultOptIn ?? true\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.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 }\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(): any {\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: { distinct_id: string; event: string; properties?: PostHogEventProperties }): any {\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` key.\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 captureStateless(\n distinctId: string,\n event: string,\n properties?: { [key: string]: any },\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 aliasStateless(\n alias: string,\n distinctId: string,\n properties?: { [key: string]: any },\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 /***\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 /***\n *** FEATURE FLAGS\n ***/\n\n protected async getDecide(\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<PostHogDecideResponse | undefined> {\n await this._initPromise\n\n const url = `${this.host}/decide/?v=3`\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 // Don't retry /decide API calls\n return this.fetchWithRetry(url, fetchOptions, { retryCount: 0 }, this.featureFlagsRequestTimeoutMs)\n .then((response) => response.json() as Promise<PostHogDecideResponse>)\n .catch((error) => {\n this._events.emit('error', error)\n return undefined\n })\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<boolean | string | undefined> {\n await this._initPromise\n\n const featureFlags = await this.getFeatureFlagsStateless(\n distinctId,\n groups,\n personProperties,\n groupProperties,\n disableGeoip\n )\n\n if (!featureFlags) {\n // If we haven't loaded flags yet, or errored out, we respond with undefined\n return undefined\n }\n\n let response = featureFlags[key]\n // `/decide` v3 returns all flags\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 response\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 )\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 ): Promise<PostHogDecideResponse['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 )\n ).payloads\n\n return payloads\n }\n\n protected _parsePayload(response: any): any {\n try {\n return JSON.parse(response)\n } catch {\n return response\n }\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 ): Promise<PostHogDecideResponse['featureFlags'] | undefined> {\n await this._initPromise\n\n return (\n await this.getFeatureFlagsAndPayloadsStateless(\n distinctId,\n groups,\n personProperties,\n groupProperties,\n disableGeoip\n )\n ).flags\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 ): Promise<{\n flags: PostHogDecideResponse['featureFlags'] | undefined\n payloads: PostHogDecideResponse['featureFlagPayloads'] | undefined\n }> {\n await this._initPromise\n\n const extraPayload: Record<string, any> = {}\n if (disableGeoip ?? this.disableGeoip) {\n extraPayload['geoip_disable'] = true\n }\n const decideResponse = await this.getDecide(distinctId, groups, personProperties, groupProperties, extraPayload)\n\n const flags = decideResponse?.featureFlags\n const payloads = decideResponse?.featureFlagPayloads\n\n let parsedPayloads = payloads\n\n if (payloads) {\n parsedPayloads = Object.fromEntries(Object.entries(payloads).map(([k, v]) => [k, this._parsePayload(v)]))\n }\n\n return {\n flags,\n payloads: parsedPayloads,\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 = {\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 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 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(() => {})\n }\n\n async flush(): Promise<any[]> {\n if (!this.flushPromise) {\n this.flushPromise = this._flush().finally(() => {\n this.flushPromise = null\n })\n this.addPendingPromise(this.flushPromise)\n }\n return this.flushPromise\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<any[]> {\n this.clearFlushTimer()\n await this._initPromise\n\n const queue = this.getPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue) || []\n\n if (!queue.length) {\n return []\n }\n\n const items = queue.slice(0, this.maxBatchSize)\n const messages = items.map((item) => item.message)\n\n const persistQueueChange = (): void => {\n const refreshedQueue = this.getPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue) || []\n this.setPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue, refreshedQueue.slice(items.length))\n }\n\n const data: Record<string, any> = {\n api_key: this.apiKey,\n batch: messages,\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 =\n this.captureMode === 'form'\n ? `${this.host}/e/?ip=1&_=${currentTimestamp()}&v=${this.getLibraryVersion()}`\n : `${this.host}/batch/`\n\n const fetchOptions: PostHogFetchOptions =\n this.captureMode === 'form'\n ? {\n method: 'POST',\n mode: 'no-cors',\n credentials: 'omit',\n headers: { ...this.getCustomHeaders(), 'Content-Type': 'application/x-www-form-urlencoded' },\n body: `data=${encodeURIComponent(LZString.compressToBase64(payload))}&compression=lz64`,\n }\n : {\n method: 'POST',\n headers: { ...this.getCustomHeaders(), 'Content-Type': 'application/json' },\n body: payload,\n }\n\n try {\n await this.fetchWithRetry(url, fetchOptions)\n } catch (err) {\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 this._events.emit('flush', messages)\n\n return messages\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 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)\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 this.logMsgIfDebug(() => console.error('Error while shutting down PostHog', 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\nexport abstract class PostHogCore extends PostHogCoreStateless {\n // options\n private sendFeatureFlagEvent: boolean\n private flagCallReported: { [key: string]: boolean } = {}\n\n // internal\n protected _decideResponsePromise?: Promise<PostHogDecideResponse | undefined> // TODO: come back to this, fix typing\n protected _sessionExpirationTimeSeconds: number\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 if (bootstrapfeatureFlags && Object.keys(bootstrapfeatureFlags).length) {\n const bootstrapFlags = Object.keys(bootstrapfeatureFlags)\n .filter((flag) => !!bootstrapfeatureFlags[flag])\n .reduce(\n (res: Record<string, string | boolean>, key) => ((res[key] = bootstrapfeatureFlags[key] || false), res),\n {}\n )\n\n if (Object.keys(bootstrapFlags).length) {\n const currentFlags =\n this.getPersistedProperty<PostHogDecideResponse['featureFlags']>(PostHogPersistedProperty.FeatureFlags) || {}\n const newFeatureFlags = { ...bootstrapFlags, ...currentFlags }\n this.setKnownFeatureFlags(newFeatureFlags)\n }\n\n const bootstrapFlagPayloads = bootstrap.featureFlagPayloads\n if (bootstrapFlagPayloads && Object.keys(bootstrapFlagPayloads).length) {\n const currentFlagPayloads =\n this.getPersistedProperty<PostHogDecideResponse['featureFlagPayloads']>(\n PostHogPersistedProperty.FeatureFlagPayloads\n ) || {}\n const newFeatureFlagPayloads = { ...bootstrapFlagPayloads, ...currentFlagPayloads }\n this.setKnownFeatureFlagPayloads(newFeatureFlagPayloads)\n }\n }\n }\n\n // NOTE: Props are lazy loaded from localstorage hence the complex getter setter logic\n private get props(): PostHogEventProperties {\n if (!this._props) {\n this._props = this.getPersistedProperty<PostHogEventProperties>(PostHogPersistedProperty.Props)\n }\n return this._props || {}\n }\n\n private set props(val: PostHogEventProperties | undefined) {\n this._props = val\n }\n\n private clearProps(): void {\n this.props = undefined\n this.sessionProps = {}\n this.flagCallReported = {}\n }\n\n private _props: PostHogEventProperties | undefined\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 }\n\n protected getCommonEventProperties(): any {\n const featureFlags = this.getFeatureFlags()\n\n const featureVariantProperties: Record<string, string | boolean> = {}\n if (featureFlags) {\n for (const [feature, variant] of Object.entries(featureFlags)) {\n featureVariantProperties[`$feature/${feature}`] = variant\n }\n }\n return {\n $active_feature_flags: featureFlags ? Object.keys(featureFlags) : undefined,\n ...featureVariantProperties,\n ...super.getCommonEventProperties(),\n }\n }\n\n private enrichProperties(properties?: PostHogEventProperties): any {\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 sessionTimestamp = this.getPersistedProperty<number>(PostHogPersistedProperty.SessionLastTimestamp) || 0\n if (!sessionId || Date.now() - sessionTimestamp > this._sessionExpirationTimeSeconds * 1000) {\n sessionId = uuidv7()\n this.setPersistedProperty(PostHogPersistedProperty.SessionId, sessionId)\n }\n this.setPersistedProperty(PostHogPersistedProperty.SessionLastTimestamp, Date.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 })\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 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 async register(properties: { [key: string]: any }): 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 registerForSession(properties: { [key: string]: any }): 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)\n }\n\n const allProperties = this.enrichProperties({\n ...properties,\n $anon_distinct_id: this.getAnonymousId(),\n $set: properties,\n })\n\n if (distinctId !== previousDistinctId) {\n // We keep the AnonymousId to be used by decide 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?: { [key: string]: any }, options?: PostHogCaptureOptions): void {\n this.wrap(() => {\n const distinctId = this.getDistinctId()\n\n if (properties?.$groups) {\n this.groups(properties.$groups)\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: { [type: string]: string | number }): void {\n this.wrap(() => {\n // Get persisted groups\n const existingGroups = this.props.$groups || {}\n\n this.register({\n $groups: {\n ...existingGroups,\n ...groups,\n },\n })\n\n if (Object.keys(groups).find((type) => existingGroups[type] !== 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, {})\n })\n }\n\n /** @deprecated - Renamed to setPersonPropertiesForFlags */\n personProperties(properties: { [type: string]: string }): void {\n return this.setPersonPropertiesForFlags(properties)\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, {})\n })\n }\n\n /** @deprecated - Renamed to setGroupPropertiesForFlags */\n groupProperties(properties: { [type: string]: Record<string, string> }): void {\n this.wrap(() => {\n this.setGroupPropertiesForFlags(properties)\n })\n }\n\n /***\n *** FEATURE FLAGS\n ***/\n private async decideAsync(sendAnonDistinctId: boolean = true): Promise<PostHogDecideResponse | undefined> {\n await this._initPromise\n if (this._decideResponsePromise) {\n return this._decideResponsePromise\n }\n return this._decideAsync(sendAnonDistinctId)\n }\n\n private async _decideAsync(sendAnonDistinctId: boolean = true): Promise<PostHogDecideResponse | undefined> {\n this._decideResponsePromise = this._initPromise\n .then(() => {\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 return super.getDecide(distinctId, groups, personProperties, groupProperties, extraProperties).then((res) => {\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 newFeatureFlags = res.featureFlags\n let newFeatureFlagPayloads = res.featureFlagPayloads\n if (res.errorsWhileComputingFlags) {\n // if not all flags were computed, we upsert flags instead of replacing them\n const currentFlags = this.getPersistedProperty<PostHogDecideResponse['featureFlags']>(\n PostHogPersistedProperty.FeatureFlags\n )\n const currentFlagPayloads = this.getPersistedProperty<PostHogDecideResponse['featureFlagPayloads']>(\n PostHogPersistedProperty.FeatureFlagPayloads\n )\n newFeatureFlags = { ...currentFlags, ...res.featureFlags }\n newFeatureFlagPayloads = { ...currentFlagPayloads, ...res.featureFlagPayloads }\n }\n this.setKnownFeatureFlags(newFeatureFlags)\n this.setKnownFeatureFlagPayloads(\n Object.fromEntries(\n Object.entries(newFeatureFlagPayloads || {}).map(([k, v]) => [k, this._parsePayload(v)])\n )\n )\n\n const sessionReplay = res?.sessionRecording\n if (sessionReplay) {\n this.setPersistedProperty(PostHogPersistedProperty.SessionReplay, sessionReplay)\n this.logMsgIfDebug(() =>\n console.log('PostHog Debug', 'Session replay config: ', JSON.stringify(sessionReplay))\n )\n } else {\n this.logMsgIfDebug(() => console.info('PostHog Debug', 'Session replay config disabled.'))\n this.setPersistedProperty(PostHogPersistedProperty.SessionReplay, null)\n }\n }\n\n return res\n })\n })\n .finally(() => {\n this._decideResponsePromise = undefined\n })\n return this._decideResponsePromise\n }\n\n private setKnownFeatureFlags(featureFlags: PostHogDecideResponse['featureFlags']): void {\n this.wrap(() => {\n this.setPersistedProperty<PostHogDecideResponse['featureFlags']>(\n PostHogPersistedProperty.FeatureFlags,\n featureFlags\n )\n this._events.emit('featureflags', featureFlags)\n })\n }\n\n private setKnownFeatureFlagPayloads(featureFlagPayloads: PostHogDecideResponse['featureFlagPayloads']): void {\n this.wrap(() => {\n this.setPersistedProperty<PostHogDecideResponse['featureFlagPayloads']>(\n PostHogPersistedProperty.FeatureFlagPayloads,\n featureFlagPayloads\n )\n })\n }\n\n getFeatureFlag(key: string): boolean | string | undefined {\n const featureFlags = this.getFeatureFlags()\n\n if (!featureFlags) {\n // If we haven't loaded flags yet, or errored out, we respond with undefined\n return undefined\n }\n\n let response = featureFlags[key]\n // `/decide` v3 returns all flags\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 this.flagCallReported[key] = true\n this.capture('$feature_flag_called', {\n $feature_flag: key,\n $feature_flag_response: response,\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(): PostHogDecideResponse['featureFlagPayloads'] | undefined {\n const payloads = this.getPersistedProperty<PostHogDecideResponse['featureFlagPayloads']>(\n PostHogPersistedProperty.FeatureFlagPayloads\n )\n\n return payloads\n }\n\n getFeatureFlags(): PostHogDecideResponse['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 let flags = this.getPersistedProperty<PostHogDecideResponse['featureFlags']>(PostHogPersistedProperty.FeatureFlags)\n const overriddenFlags = this.getPersistedProperty<PostHogDecideResponse['featureFlags']>(\n PostHogPersistedProperty.OverrideFeatureFlags\n )\n\n if (!overriddenFlags) {\n return flags\n }\n\n flags = flags || {}\n\n for (const key in overriddenFlags) {\n if (!overriddenFlags[key]) {\n delete flags[key]\n } else {\n flags[key] = overriddenFlags[key]\n }\n }\n\n return flags\n }\n\n getFeatureFlagsAndPayloads(): {\n flags: PostHogDecideResponse['featureFlags'] | undefined\n payloads: PostHogDecideResponse['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(cb?: (err?: Error, flags?: PostHogDecideResponse['featureFlags']) => void): void {\n this.decideAsync()\n .then((res) => {\n cb?.(undefined, res?.featureFlags)\n })\n .catch((e) => {\n cb?.(e, undefined)\n if (!cb) {\n this.logMsgIfDebug(() => console.log('[PostHog] Error reloading feature flags', e))\n }\n })\n }\n\n async reloadFeatureFlagsAsync(\n sendAnonDistinctId: boolean = true\n ): Promise<PostHogDecideResponse['featureFlags'] | undefined> {\n return (await this.decideAsync(sendAnonDistinctId))?.featureFlags\n }\n\n onFeatureFlags(cb: (flags: PostHogDecideResponse['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: string | boolean) => 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: PostHogDecideResponse['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\nexport * from './types'\nexport { LZString }\n","import { PostHogPersistedProperty } from './types'\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","/**\n * Fetch wrapper\n *\n * We want to polyfill fetch when not available with axios but use it when it is.\n * NOTE: The current version of Axios has an issue when in non-node environments like Clouflare Workers.\n * This is currently solved by using the global fetch if available instead.\n * See https://github.com/PostHog/posthog-js-lite/issues/127 for more info\n */\n\nimport { PostHogFetchOptions, PostHogFetchResponse } from 'posthog-core/src'\n\ntype FetchLike = (url: string, options: PostHogFetchOptions) => Promise<PostHogFetchResponse>\n\nlet _fetch: FetchLike | undefined =\n // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error\n // @ts-ignore\n typeof fetch !== 'undefined' ? fetch : typeof global.fetch !== 'undefined' ? global.fetch : undefined\n\nif (!_fetch) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const axios = require('axios')\n\n _fetch = async (url: string, options: PostHogFetchOptions): Promise<PostHogFetchResponse> => {\n const res = await axios.request({\n url,\n headers: options.headers,\n method: options.method.toLowerCase(),\n data: options.body,\n signal: options.signal,\n // fetch only throws on network errors, not on HTTP errors\n validateStatus: () => true,\n })\n\n return {\n status: res.status,\n text: async () => res.data,\n json: async () => res.data,\n }\n }\n}\n\n// NOTE: We have to export this as default, even though we prefer named exports as we are relying on detecting \"fetch\" in the global scope\nexport default _fetch as FetchLike\n","import { createHash } from 'rusha'\nimport { FeatureFlagCondition, FlagProperty, PostHogFeatureFlag, PropertyGroup } from './types'\nimport { JsonType, PostHogFetchOptions, PostHogFetchResponse } from 'posthog-core/src'\nimport { safeSetTimeout } from 'posthog-core/src/utils'\nimport fetch from './fetch'\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 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\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 // NOTE: as any is required here as the AbortSignal typing is slightly misaligned but works just fine\n this.fetch = options.fetch || fetch\n this.onError = options.onError\n this.customHeaders = customHeaders\n\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<string | boolean | undefined> {\n await this.loadFeatureFlags()\n\n let response: string | boolean | 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 = 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: string | boolean): 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, string | boolean>\n payloads: Record<string, JsonType>\n fallbackToDecide: boolean\n }> {\n await this.loadFeatureFlags()\n\n const response: Record<string, string | boolean> = {}\n const payloads: Record<string, JsonType> = {}\n let fallbackToDecide = this.featureFlags.length == 0\n\n this.featureFlags.map(async (flag) => {\n try {\n const matchValue = 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 fallbackToDecide = true\n }\n })\n\n return { response, payloads, fallbackToDecide }\n }\n\n 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 ): string | boolean {\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 this.matchFeatureFlagProperties(flag, groups[groupName], focusedGroupProperties)\n } else {\n return this.matchFeatureFlagProperties(flag, distinctId, personProperties)\n }\n }\n\n matchFeatureFlagProperties(\n flag: PostHogFeatureFlag,\n distinctId: string,\n properties: Record<string, string>\n ): string | boolean {\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 (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 = 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 isConditionMatch(\n flag: PostHogFeatureFlag,\n distinctId: string,\n condition: FeatureFlagCondition,\n properties: Record<string, string>\n ): 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 && _hash(flag.key, distinctId) > rolloutPercentage / 100.0) {\n return false\n }\n\n return true\n }\n\n getMatchingVariant(flag: PostHogFeatureFlag, distinctId: string): string | boolean | undefined {\n const hashValue = _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 async _loadFeatureFlags(): Promise<void> {\n if (this.poller) {\n clearTimeout(this.poller)\n this.poller = undefined\n }\n this.poller = setTimeout(() => this._loadFeatureFlags(), this.pollingInterval)\n\n try {\n const res = await this._requestFeatureFlagDefinitions()\n\n if (res && res.status === 401) {\n throw new ClientError(\n `Your personalApiKey is invalid. Are you sure you're not using your Project API key? More information: https://posthog.com/docs/api/overview`\n )\n }\n\n if (res && res.status !== 200) {\n // something else went wrong, or the server is down.\n // In this case, don't override existing flags\n return\n }\n\n const responseJson = await res.json()\n if (!('flags' in responseJson)) {\n this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(responseJson)}`))\n }\n\n this.featureFlags = responseJson.flags || []\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 || {}\n this.cohorts = responseJson.cohorts || []\n this.loadedSuccessfullyOnce = true\n } catch (err) {\n // if an error that is not an instance of ClientError is thrown\n // we silently ignore the error when reloading feature flags\n if (err instanceof ClientError) {\n this.onError?.(err)\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: PostHogFetchOptions = {\n method: 'GET',\n headers: {\n ...this.customHeaders,\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.personalApiKey}`,\n },\n }\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\nfunction _hash(key: string, distinctId: string, salt: string = ''): number {\n // rusha is a fast sha1 implementation in pure javascript\n const sha1Hash = createHash()\n sha1Hash.update(`${key}.${distinctId}${salt}`)\n return parseInt(sha1Hash.digest('hex').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 { version } from '../package.json'\n\nimport {\n JsonType,\n PostHogCoreOptions,\n PostHogCoreStateless,\n PostHogDecideResponse,\n PostHogFetchOptions,\n PostHogFetchResponse,\n PostHogFlagsAndPayloadsResponse,\n PostHogPersistedProperty,\n} from '../../posthog-core/src'\nimport { PostHogMemoryStorage } from '../../posthog-core/src/storage-memory'\nimport { EventMessage, GroupIdentifyMessage, IdentifyMessage, PostHogNodeV1 } from './types'\nimport { FeatureFlagsPoller } from './feature-flags'\nimport fetch from './fetch'\n\nexport type PostHogOptions = PostHogCoreOptions & {\n persistence?: 'memory'\n personalApiKey?: string\n // The interval in milliseconds between polls for refreshing feature flag definitions. Defaults to 30 seconds.\n featureFlagsPollingInterval?: number\n // Maximum size of cache that deduplicates $feature_flag_called calls per user.\n maxCacheSize?: number\n fetch?: (url: string, options: PostHogFetchOptions) => Promise<PostHogFetchResponse>\n}\n\nconst THIRTY_SECONDS = 30 * 1000\nconst MAX_CACHE_SIZE = 50 * 1000\n\n// The actual exported Nodejs API.\nexport class PostHog extends PostHogCoreStateless implements PostHogNodeV1 {\n private _memoryStorage = new PostHogMemoryStorage()\n\n private featureFlagsPoller?: FeatureFlagsPoller\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 if (options.personalApiKey) {\n this.featureFlagsPoller = new FeatureFlagsPoller({\n pollingInterval:\n typeof options.featureFlagsPollingInterval === 'number'\n ? options.featureFlagsPollingInterval\n : THIRTY_SECONDS,\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 customHeaders: this.getCustomHeaders(),\n })\n }\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\n getLibraryId(): string {\n return 'posthog-node'\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({\n distinctId,\n event,\n properties,\n groups,\n sendFeatureFlags,\n timestamp,\n disableGeoip,\n uuid,\n }: EventMessage): void {\n const _capture = (props: EventMessage['properties']): void => {\n super.captureStateless(distinctId, event, props, { timestamp, disableGeoip, uuid })\n }\n\n const _getFlags = (\n distinctId: EventMessage['distinctId'],\n groups: EventMessage['groups'],\n disableGeoip: EventMessage['disableGeoip']\n ): Promise<PostHogDecideResponse['featureFlags'] | undefined> => {\n return super.getFeatureFlagsStateless(distinctId, groups, undefined, undefined, disableGeoip)\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 ((this.featureFlagsPoller?.featureFlags?.length || 0) > 0) {\n // Otherwise we may as well check for the flags locally and include them if there\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 || {}).filter((flag) => flags?.[flag] !== false)\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 identify({ distinctId, properties, disableGeoip }: IdentifyMessage): void {\n // Catch properties passed as $set and move them to the top level\n const personProperties = properties?.$set || properties\n\n super.identifyStateless(\n distinctId,\n {\n $set: personProperties,\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 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<string | boolean | 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\n if (!flagWasLocallyEvaluated && !onlyEvaluateLocally) {\n response = await super.getFeatureFlagStateless(\n key,\n distinctId,\n groups,\n personProperties,\n groupProperties,\n disableGeoip\n )\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 locally_evaluated: flagWasLocallyEvaluated,\n [`$feature/${key}`]: response,\n },\n groups,\n disableGeoip,\n })\n }\n return response\n }\n\n async getFeatureFlagPayload(\n key: string,\n distinctId: string,\n matchValue?: string | boolean,\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 // 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 })\n }\n\n if (matchValue) {\n response = await this.featureFlagsPoller?.computeFeatureFlagPayloadLocally(key, matchValue)\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 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, string | boolean>> {\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 fallbackToDecide = true\n if (localEvaluationResult) {\n featureFlags = localEvaluationResult.response\n featureFlagPayloads = localEvaluationResult.payloads\n fallbackToDecide = localEvaluationResult.fallbackToDecide\n }\n\n if (fallbackToDecide && !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 async reloadFeatureFlags(): Promise<void> {\n await this.featureFlagsPoller?.loadFeatureFlags(true)\n }\n\n async shutdown(shutdownTimeoutMs?: number): Promise<void> {\n this.featureFlagsPoller?.stopPoller()\n return super.shutdown(shutdownTimeoutMs)\n }\n\n private addLocalPersonAndGroupProperties(\n distinctId: string,\n groups?: Record<string, string>,\n personProperties?: Record<string, string>,\n groupProperties?: Record<string, Record<string, string>>\n ): { allPersonProperties: Record<string, string>; allGroupProperties: Record<string, Record<string, string>> } {\n const allPersonProperties = { distinct_id: distinctId, ...(personProperties || {}) }\n\n const allGroupProperties: Record<string, Record<string, string>> = {}\n if (groups) {\n for (const groupName of Object.keys(groups)) {\n allGroupProperties[groupName] = {\n $group_key: groups[groupName],\n ...(groupProperties?.[groupName] || {}),\n }\n }\n }\n\n return { allPersonProperties, allGroupProperties }\n }\n}\n","/**\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 */\nimport { type PostHog } from '../posthog-node'\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// Integration as _SentryIntegration,\n// Primitive as _SentryPrimitive,\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 _SentryHub = any\ntype _SentryException = any\ntype _SentryPrimitive = any\n\ninterface _SentryIntegration {\n name: string\n setupOnce(addGlobalEventProcessor: (callback: _SentryEventProcessor) => void, getCurrentHub: () => _SentryHub): void\n}\n\ninterface PostHogSentryExceptionProperties {\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 $exception_type?: string\n $exception_message?: string\n $exception_personURL?: string\n}\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 */\nexport class PostHogSentryIntegration implements _SentryIntegration {\n public readonly name = 'posthog-node'\n\n public static readonly POSTHOG_ID_TAG = 'posthog_distinct_id'\n\n public constructor(\n private readonly posthog: PostHog,\n private readonly posthogHost?: string,\n private readonly organization?: string,\n private readonly prefix?: string\n ) {\n this.posthogHost = posthog.options.host ?? 'https://us.i.posthog.com'\n }\n\n public setupOnce(\n addGlobalEventProcessor: (callback: _SentryEventProcessor) => void,\n getCurrentHub: () => _SentryHub\n ): void {\n addGlobalEventProcessor((event: _SentryEvent): _SentryEvent => {\n if (event.exception?.values === undefined || event.exception.values.length === 0) {\n return event\n }\n\n if (!event.tags) {\n event.tags = {}\n }\n\n const sentry = getCurrentHub()\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 event.tags['PostHog Person URL'] = new URL(`/person/${userId}`, this.posthogHost).toString()\n\n const properties: PostHogSentryExceptionProperties = {\n // PostHog Exception Properties\n $exception_message: event.exception.values[0]?.value,\n $exception_type: event.exception.values[0]?.type,\n $exception_personURL: event.tags['PostHog Person URL'],\n // Sentry Exception Properties\n $sentry_event_id: event.event_id,\n $sentry_exception: event.exception,\n $sentry_exception_message: event.exception.values[0]?.value,\n $sentry_exception_type: event.exception.values[0]?.type,\n $sentry_tags: event.tags,\n }\n\n const projectId = sentry.getClient()?.getDsn()?.projectId\n if (this.organization !== undefined && projectId !== undefined && event.event_id !== undefined) {\n properties.$sentry_url = `${this.prefix ?? 'https://sentry.io/organizations'}/${\n this.organization\n }/issues/?project=${projectId}&query=${event.event_id}`\n }\n\n this.posthog.capture({ event: '$exception', distinctId: userId, properties })\n\n return event\n })\n }\n}\n"],"names":["_fetch","fetch","global","undefined","axios","require","url","options","res","request","headers","method","toLowerCase","data","body","signal","validateStatus","status","text","json","LONG_SCALE","NULL_VALUES_ALLOWED_OPERATORS","ClientError","Error","constructor","message","captureStackTrace","name","Object","setPrototypeOf","prototype","InconclusiveMatchError","FeatureFlagsPoller","pollingInterval","personalApiKey","projectApiKey","timeout","host","customHeaders","debugMode","featureFlags","featureFlagsByKey","groupTypeMapping","cohorts","loadedSuccessfullyOnce","poller","onError","loadFeatureFlags","debug","enabled","logMsgIfDebug","fn","getFeatureFlag","key","distinctId","groups","personProperties","groupProperties","response","featureFlag","flag","computeFlagLocally","console","e","computeFeatureFlagPayloadLocally","matchValue","filters","payloads","toString","JSON","parse","getAllFlagsAndPayloads","fallbackToDecide","length","map","matchPayload","ensure_experience_continuity","active","flagFilters","aggregation_group_type_index","groupName","String","warn","focusedGroupProperties","matchFeatureFlagProperties","properties","flagConditions","isInconclusive","result","sortedFlagConditions","sort","conditionA","conditionB","AHasVariantOverride","variant","BHasVariantOverride","condition","isConditionMatch","variantOverride","flagVariants","multivariate","variants","some","getMatchingVariant","rolloutPercentage","rollout_percentage","warnFunction","msg","prop","propertyType","type","matches","matchCohort","matchProperty","_hash","hashValue","matchingVariant","variantLookupTable","find","valueMin","valueMax","lookupTable","multivariates","forEach","push","forceReload","_loadFeatureFlags","clearTimeout","setTimeout","_requestFeatureFlagDefinitions","responseJson","stringify","flags","reduce","acc","curr","group_type_mapping","err","Authorization","abortTimeout","controller","AbortController","safeSetTimeout","abort","stopPoller","salt","sha1Hash","createHash","update","parseInt","digest","slice","property","propertyValues","value","operator","overrideValue","includes","computeExactMatch","Array","isArray","val","compare","lhs","rhs","isValidRegex","match","parsedValue","parseFloat","parsedDate","relativeDateParseForFeatureFlagMatching","convertToDateTime","overrideDate","cohortProperties","cohortId","propertyGroup","matchPropertyGroup","propertyGroupType","values","errorMatchingLocally","negation","regex","RegExp","Date","date","isNaN","valueOf","parsedDt","toISOString","number","interval","setUTCHours","getUTCHours","setUTCDate","getUTCDate","setUTCMonth","getUTCMonth","setUTCFullYear","getUTCFullYear","THIRTY_SECONDS","MAX_CACHE_SIZE","PostHog","PostHogCoreStateless","apiKey","_memoryStorage","PostHogMemoryStorage","featureFlagsPoller","featureFlagsPollingInterval","requestTimeout","_events","emit","getCustomHeaders","distinctIdHasSentFlagCalls","maxCacheSize","getPersistedProperty","getProperty","setPersistedProperty","setProperty","getLibraryId","getLibraryVersion","version","getCustomUserAgent","enable","optIn","disable","optOut","capture","event","sendFeatureFlags","timestamp","disableGeoip","uuid","_capture","props","captureStateless","_getFlags","getFeatureFlagsStateless","capturePromise","Promise","resolve","then","groupsWithStringValues","entries","getAllFlags","onlyEvaluateLocally","additionalProperties","feature","activeFlags","keys","filter","catch","$groups","addPendingPromise","identify","$set","identifyStateless","alias","aliasStateless","sendFeatureFlagEvents","adjustedProperties","addLocalPersonAndGroupProperties","allPersonProperties","allGroupProperties","flagWasLocallyEvaluated","getFeatureFlagStateless","featureFlagReportedKey","$feature_flag","$feature_flag_response","locally_evaluated","getFeatureFlagPayload","payloadWasLocallyEvaluated","getFeatureFlagPayloadStateless","isFeatureEnabled","feat","localEvaluationResult","featureFlagPayloads","remoteEvaluationResult","getFeatureFlagsAndPayloadsStateless","groupIdentify","groupType","groupKey","groupIdentifyStateless","reloadFeatureFlags","shutdown","shutdownTimeoutMs","distinct_id","$group_key","PostHogSentryIntegration","posthog","posthogHost","organization","prefix","setupOnce","addGlobalEventProcessor","getCurrentHub","exception","tags","sentry","userId","POSTHOG_ID_TAG","URL","$exception_message","$exception_type","$exception_personURL","$sentry_event_id","event_id","$sentry_exception","$sentry_exception_message","$sentry_exception_type","$sentry_tags","projectId","getClient","getDsn","$sentry_url"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../posthog-core/src/types.ts","../../posthog-core/src/utils.ts","../../posthog-core/src/lz-string.ts","../../posthog-core/src/eventemitter.ts","../../posthog-core/src/vendor/uuidv7.ts","../../posthog-core/src/index.ts","../../posthog-core/src/storage-memory.ts","../src/fetch.ts","../src/feature-flags.ts","../src/posthog-node.ts","../src/extensions/sentry-integration.ts"],"sourcesContent":["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 /** Option to bootstrap the library with given distinctId and feature flags */\n bootstrap?: {\n distinctId?: string\n isIdentifiedId?: boolean\n featureFlags?: Record<string, boolean | string>\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 /** For Session Analysis how long before we expire a session (defaults to 30 mins) */\n sessionExpirationTimeSeconds?: number\n /** Whether to post events to PostHog in JSON or compressed format. Defaults to 'json' */\n captureMode?: 'json' | 'form'\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 FeatureFlags = 'feature_flags',\n FeatureFlagPayloads = 'feature_flag_payloads',\n OverrideFeatureFlags = 'override_feature_flags',\n Queue = 'queue',\n OptedOut = 'opted_out',\n SessionId = 'session_id',\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}\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\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]: any\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} & {\n [key: string]: any\n} // Any key prefixed with `attr__` can be added\n\nexport type PostHogDecideResponse = {\n config: { enable_collect_everything: boolean }\n editorParams: { toolbarVersion: string; jsURL: string }\n isAuthenticated: true\n supportedCompression: string[]\n featureFlags: {\n [key: string]: string | boolean\n }\n featureFlagPayloads: {\n [key: string]: JsonType\n }\n errorsWhileComputingFlags: boolean\n sessionRecording?:\n | boolean\n | {\n [key: string]: JsonType\n }\n}\n\nexport type PostHogFlagsAndPayloadsResponse = {\n featureFlags: PostHogDecideResponse['featureFlags']\n featureFlagPayloads: PostHogDecideResponse['featureFlagPayloads']\n}\n\nexport type JsonType = string | number | boolean | null | { [key: string]: JsonType } | Array<JsonType>\n","export function assert(truthyValue: any, message: string): void {\n if (!truthyValue) {\n throw new Error(message)\n }\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: any) => 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((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","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\n\n// private property\nconst f = String.fromCharCode\nconst keyStrBase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\nconst baseReverseDic: any = {}\n\nfunction getBaseValue(alphabet: any, character: any): any {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {}\n for (let i = 0; i < alphabet.length; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i\n }\n }\n return baseReverseDic[alphabet][character]\n}\n\nexport const LZString = {\n compressToBase64: function (input: any): string {\n if (input == null) {\n return ''\n }\n const res = LZString._compress(input, 6, function (a: any) {\n return keyStrBase64.charAt(a)\n })\n switch (\n res.length % 4 // To produce valid Base64\n ) {\n default: // When could this happen ?\n case 0:\n return res\n case 1:\n return res + '==='\n case 2:\n return res + '=='\n case 3:\n return res + '='\n }\n },\n\n decompressFromBase64: function (input: any): any {\n if (input == null) {\n return ''\n }\n if (input == '') {\n return null\n }\n return LZString._decompress(input.length, 32, function (index: any) {\n return getBaseValue(keyStrBase64, input.charAt(index))\n })\n },\n\n compress: function (uncompressed: any): any {\n return LZString._compress(uncompressed, 16, function (a: any) {\n return f(a)\n })\n },\n _compress: function (uncompressed: any, bitsPerChar: any, getCharFromInt: any): any {\n if (uncompressed == null) {\n return ''\n }\n const context_dictionary: any = {},\n context_dictionaryToCreate: any = {},\n context_data = []\n\n let i,\n value,\n context_c = '',\n context_wc = '',\n context_w = '',\n context_enlargeIn = 2, // Compensate for the first entry which should not count\n context_dictSize = 3,\n context_numBits = 2,\n context_data_val = 0,\n context_data_position = 0,\n ii\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii)\n if (!Object.prototype.hasOwnProperty.call(context_dictionary, context_c)) {\n context_dictionary[context_c] = context_dictSize++\n context_dictionaryToCreate[context_c] = true\n }\n\n context_wc = context_w + context_c\n if (Object.prototype.hasOwnProperty.call(context_dictionary, context_wc)) {\n context_w = context_wc\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) {\n if (context_w.charCodeAt(0) < 256) {\n for (i = 0; i < context_numBits; i++) {\n context_data_val = context_data_val << 1\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n }\n value = context_w.charCodeAt(0)\n for (i = 0; i < 8; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n } else {\n value = 1\n for (i = 0; i < context_numBits; i++) {\n context_data_val = (context_data_val << 1) | value\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = 0\n }\n value = context_w.charCodeAt(0)\n for (i = 0; i < 16; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n }\n context_enlargeIn--\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits)\n context_numBits++\n }\n delete context_dictionaryToCreate[context_w]\n } else {\n value = context_dictionary[context_w]\n for (i = 0; i < context_numBits; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n }\n context_enlargeIn--\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits)\n context_numBits++\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++\n context_w = String(context_c)\n }\n }\n\n // Output the code for w.\n if (context_w !== '') {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate, context_w)) {\n if (context_w.charCodeAt(0) < 256) {\n for (i = 0; i < context_numBits; i++) {\n context_data_val = context_data_val << 1\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n }\n value = context_w.charCodeAt(0)\n for (i = 0; i < 8; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n } else {\n value = 1\n for (i = 0; i < context_numBits; i++) {\n context_data_val = (context_data_val << 1) | value\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = 0\n }\n value = context_w.charCodeAt(0)\n for (i = 0; i < 16; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n }\n context_enlargeIn--\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits)\n context_numBits++\n }\n delete context_dictionaryToCreate[context_w]\n } else {\n value = context_dictionary[context_w]\n for (i = 0; i < context_numBits; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n }\n context_enlargeIn--\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits)\n context_numBits++\n }\n }\n\n // Mark the end of the stream\n value = 2\n for (i = 0; i < context_numBits; i++) {\n context_data_val = (context_data_val << 1) | (value & 1)\n if (context_data_position == bitsPerChar - 1) {\n context_data_position = 0\n context_data.push(getCharFromInt(context_data_val))\n context_data_val = 0\n } else {\n context_data_position++\n }\n value = value >> 1\n }\n\n // Flush the last char\n while (true) {\n context_data_val = context_data_val << 1\n if (context_data_position == bitsPerChar - 1) {\n context_data.push(getCharFromInt(context_data_val))\n break\n } else {\n context_data_position++\n }\n }\n return context_data.join('')\n },\n\n decompress: function (compressed: any): any {\n if (compressed == null) {\n return ''\n }\n if (compressed == '') {\n return null\n }\n return LZString._decompress(compressed.length, 32768, function (index: any) {\n return compressed.charCodeAt(index)\n })\n },\n\n _decompress: function (length: any, resetValue: any, getNextValue: any): any {\n const dictionary = [],\n result = [],\n data = { val: getNextValue(0), position: resetValue, index: 1 }\n\n let next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry: any = '',\n i,\n w,\n bits,\n resb,\n maxpower,\n power,\n c\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i\n }\n\n bits = 0\n maxpower = Math.pow(2, 2)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n switch ((next = bits)) {\n case 0:\n bits = 0\n maxpower = Math.pow(2, 8)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n c = f(bits)\n break\n case 1:\n bits = 0\n maxpower = Math.pow(2, 16)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n c = f(bits)\n break\n case 2:\n return ''\n }\n dictionary[3] = c\n w = c\n result.push(c)\n while (true) {\n if (data.index > length) {\n return ''\n }\n\n bits = 0\n maxpower = Math.pow(2, numBits)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n\n switch ((c = bits)) {\n case 0:\n bits = 0\n maxpower = Math.pow(2, 8)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n\n dictionary[dictSize++] = f(bits)\n c = dictSize - 1\n enlargeIn--\n break\n case 1:\n bits = 0\n maxpower = Math.pow(2, 16)\n power = 1\n while (power != maxpower) {\n resb = data.val & data.position\n data.position >>= 1\n if (data.position == 0) {\n data.position = resetValue\n data.val = getNextValue(data.index++)\n }\n bits |= (resb > 0 ? 1 : 0) * power\n power <<= 1\n }\n dictionary[dictSize++] = f(bits)\n c = dictSize - 1\n enlargeIn--\n break\n case 2:\n return result.join('')\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits)\n numBits++\n }\n\n if (dictionary[c]) {\n entry = dictionary[c]\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0)\n } else {\n return null\n }\n }\n result.push(entry)\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0)\n enlargeIn--\n\n w = entry\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits)\n numBits++\n }\n }\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","// 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","import {\n PostHogFetchOptions,\n PostHogFetchResponse,\n PostHogQueueItem,\n PostHogAutocaptureElement,\n PostHogDecideResponse,\n PostHogCoreOptions,\n PostHogEventProperties,\n PostHogPersistedProperty,\n PostHogCaptureOptions,\n JsonType,\n} from './types'\nimport {\n assert,\n currentISOTime,\n currentTimestamp,\n removeTrailingSlash,\n retriable,\n RetriableOptions,\n safeSetTimeout,\n} from './utils'\nexport * as utils from './utils'\nimport { LZString } from './lz-string'\nimport { SimpleEventEmitter } from './eventemitter'\nimport { uuidv7 } from './vendor/uuidv7'\n\nclass PostHogFetchHttpError extends Error {\n name = 'PostHogFetchHttpError'\n\n constructor(public response: PostHogFetchResponse) {\n super('HTTP error while fetching PostHog: ' + response.status)\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\nfunction isPostHogFetchError(err: any): boolean {\n return typeof err === 'object' && (err instanceof PostHogFetchHttpError || err instanceof PostHogFetchNetworkError)\n}\n\nexport abstract class PostHogCoreStateless {\n // options\n readonly apiKey: string\n readonly host: string\n readonly flushAt: number\n private maxBatchSize: number\n private maxQueueSize: number\n private flushInterval: number\n private flushPromise: Promise<any> | null = null\n private requestTimeout: number\n private featureFlagsRequestTimeoutMs: number\n private captureMode: 'form' | 'json'\n private removeDebugCallback?: () => void\n private disableGeoip: boolean = true\n private historicalMigration: boolean = false\n protected disabled = false\n\n private defaultOptIn: boolean = true\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\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.captureMode = options?.captureMode || 'json'\n\n // If enable is explicitly set to false we override the optout\n this.defaultOptIn = options?.defaultOptIn ?? true\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.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 }\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(): any {\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: { distinct_id: string; event: string; properties?: PostHogEventProperties }): any {\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 captureStateless(\n distinctId: string,\n event: string,\n properties?: { [key: string]: any },\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 aliasStateless(\n alias: string,\n distinctId: string,\n properties?: { [key: string]: any },\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 /***\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 /***\n *** FEATURE FLAGS\n ***/\n\n protected async getDecide(\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<PostHogDecideResponse | undefined> {\n await this._initPromise\n\n const url = `${this.host}/decide/?v=3`\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 // Don't retry /decide API calls\n return this.fetchWithRetry(url, fetchOptions, { retryCount: 0 }, this.featureFlagsRequestTimeoutMs)\n .then((response) => response.json() as Promise<PostHogDecideResponse>)\n .catch((error) => {\n this._events.emit('error', error)\n return undefined\n })\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<boolean | string | undefined> {\n await this._initPromise\n\n const featureFlags = await this.getFeatureFlagsStateless(\n distinctId,\n groups,\n personProperties,\n groupProperties,\n disableGeoip\n )\n\n if (!featureFlags) {\n // If we haven't loaded flags yet, or errored out, we respond with undefined\n return undefined\n }\n\n let response = featureFlags[key]\n // `/decide` v3 returns all flags\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 response\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 )\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 ): Promise<PostHogDecideResponse['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 )\n ).payloads\n\n return payloads\n }\n\n protected _parsePayload(response: any): any {\n try {\n return JSON.parse(response)\n } catch {\n return response\n }\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 ): Promise<PostHogDecideResponse['featureFlags'] | undefined> {\n await this._initPromise\n\n return (\n await this.getFeatureFlagsAndPayloadsStateless(\n distinctId,\n groups,\n personProperties,\n groupProperties,\n disableGeoip\n )\n ).flags\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 ): Promise<{\n flags: PostHogDecideResponse['featureFlags'] | undefined\n payloads: PostHogDecideResponse['featureFlagPayloads'] | undefined\n }> {\n await this._initPromise\n\n const extraPayload: Record<string, any> = {}\n if (disableGeoip ?? this.disableGeoip) {\n extraPayload['geoip_disable'] = true\n }\n const decideResponse = await this.getDecide(distinctId, groups, personProperties, groupProperties, extraPayload)\n\n const flags = decideResponse?.featureFlags\n const payloads = decideResponse?.featureFlagPayloads\n\n let parsedPayloads = payloads\n\n if (payloads) {\n parsedPayloads = Object.fromEntries(Object.entries(payloads).map(([k, v]) => [k, this._parsePayload(v)]))\n }\n\n return {\n flags,\n payloads: parsedPayloads,\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 = {\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 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 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(() => {})\n }\n\n async flush(): Promise<any[]> {\n if (!this.flushPromise) {\n this.flushPromise = this._flush().finally(() => {\n this.flushPromise = null\n })\n this.addPendingPromise(this.flushPromise)\n }\n return this.flushPromise\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<any[]> {\n this.clearFlushTimer()\n await this._initPromise\n\n const queue = this.getPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue) || []\n\n if (!queue.length) {\n return []\n }\n\n const items = queue.slice(0, this.maxBatchSize)\n const messages = items.map((item) => item.message)\n\n const persistQueueChange = (): void => {\n const refreshedQueue = this.getPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue) || []\n this.setPersistedProperty<PostHogQueueItem[]>(PostHogPersistedProperty.Queue, refreshedQueue.slice(items.length))\n }\n\n const data: Record<string, any> = {\n api_key: this.apiKey,\n batch: messages,\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 =\n this.captureMode === 'form'\n ? `${this.host}/e/?ip=1&_=${currentTimestamp()}&v=${this.getLibraryVersion()}`\n : `${this.host}/batch/`\n\n const fetchOptions: PostHogFetchOptions =\n this.captureMode === 'form'\n ? {\n method: 'POST',\n mode: 'no-cors',\n credentials: 'omit',\n headers: { ...this.getCustomHeaders(), 'Content-Type': 'application/x-www-form-urlencoded' },\n body: `data=${encodeURIComponent(LZString.compressToBase64(payload))}&compression=lz64`,\n }\n : {\n method: 'POST',\n headers: { ...this.getCustomHeaders(), 'Content-Type': 'application/json' },\n body: payload,\n }\n\n try {\n await this.fetchWithRetry(url, fetchOptions)\n } catch (err) {\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 this._events.emit('flush', messages)\n\n return messages\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 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)\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 this.logMsgIfDebug(() => console.error('Error while shutting down PostHog', 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\nexport abstract class PostHogCore extends PostHogCoreStateless {\n // options\n private sendFeatureFlagEvent: boolean\n private flagCallReported: { [key: string]: boolean } = {}\n\n // internal\n protected _decideResponsePromise?: Promise<PostHogDecideResponse | undefined> // TODO: come back to this, fix typing\n protected _sessionExpirationTimeSeconds: number\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 if (bootstrapfeatureFlags && Object.keys(bootstrapfeatureFlags).length) {\n const bootstrapFlags = Object.keys(bootstrapfeatureFlags)\n .filter((flag) => !!bootstrapfeatureFlags[flag])\n .reduce(\n (res: Record<string, string | boolean>, key) => ((res[key] = bootstrapfeatureFlags[key] || false), res),\n {}\n )\n\n if (Object.keys(bootstrapFlags).length) {\n const currentFlags =\n this.getPersistedProperty<PostHogDecideResponse['featureFlags']>(PostHogPersistedProperty.FeatureFlags) || {}\n const newFeatureFlags = { ...bootstrapFlags, ...currentFlags }\n this.setKnownFeatureFlags(newFeatureFlags)\n }\n\n const bootstrapFlagPayloads = bootstrap.featureFlagPayloads\n if (bootstrapFlagPayloads && Object.keys(bootstrapFlagPayloads).length) {\n const currentFlagPayloads =\n this.getPersistedProperty<PostHogDecideResponse['featureFlagPayloads']>(\n PostHogPersistedProperty.FeatureFlagPayloads\n ) || {}\n const newFeatureFlagPayloads = { ...bootstrapFlagPayloads, ...currentFlagPayloads }\n this.setKnownFeatureFlagPayloads(newFeatureFlagPayloads)\n }\n }\n }\n\n // NOTE: Props are lazy loaded from localstorage hence the complex getter setter logic\n private get props(): PostHogEventProperties {\n if (!this._props) {\n this._props = this.getPersistedProperty<PostHogEventProperties>(PostHogPersistedProperty.Props)\n }\n return this._props || {}\n }\n\n private set props(val: PostHogEventProperties | undefined) {\n this._props = val\n }\n\n private clearProps(): void {\n this.props = undefined\n this.sessionProps = {}\n this.flagCallReported = {}\n }\n\n private _props: PostHogEventProperties | undefined\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 }\n\n protected getCommonEventProperties(): any {\n const featureFlags = this.getFeatureFlags()\n\n const featureVariantProperties: Record<string, string | boolean> = {}\n if (featureFlags) {\n for (const [feature, variant] of Object.entries(featureFlags)) {\n featureVariantProperties[`$feature/${feature}`] = variant\n }\n }\n return {\n $active_feature_flags: featureFlags ? Object.keys(featureFlags) : undefined,\n ...featureVariantProperties,\n ...super.getCommonEventProperties(),\n }\n }\n\n private enrichProperties(properties?: PostHogEventProperties): any {\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 sessionTimestamp = this.getPersistedProperty<number>(PostHogPersistedProperty.SessionLastTimestamp) || 0\n if (!sessionId || Date.now() - sessionTimestamp > this._sessionExpirationTimeSeconds * 1000) {\n sessionId = uuidv7()\n this.setPersistedProperty(PostHogPersistedProperty.SessionId, sessionId)\n }\n this.setPersistedProperty(PostHogPersistedProperty.SessionLastTimestamp, Date.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 })\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 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 async register(properties: { [key: string]: any }): 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 registerForSession(properties: { [key: string]: any }): 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)\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 $set: userProps,\n $set_once: userPropsOnce,\n })\n\n if (distinctId !== previousDistinctId) {\n // We keep the AnonymousId to be used by decide 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?: { [key: string]: any }, options?: PostHogCaptureOptions): void {\n this.wrap(() => {\n const distinctId = this.getDistinctId()\n\n if (properties?.$groups) {\n this.groups(properties.$groups)\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: { [type: string]: string | number }): void {\n this.wrap(() => {\n // Get persisted groups\n const existingGroups = this.props.$groups || {}\n\n this.register({\n $groups: {\n ...existingGroups,\n ...groups,\n },\n })\n\n if (Object.keys(groups).find((type) => existingGroups[type] !== 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, {})\n })\n }\n\n /** @deprecated - Renamed to setPersonPropertiesForFlags */\n personProperties(properties: { [type: string]: string }): void {\n return this.setPersonPropertiesForFlags(properties)\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, {})\n })\n }\n\n /** @deprecated - Renamed to setGroupPropertiesForFlags */\n groupProperties(properties: { [type: string]: Record<string, string> }): void {\n this.wrap(() => {\n this.setGroupPropertiesForFlags(properties)\n })\n }\n\n /***\n *** FEATURE FLAGS\n ***/\n private async decideAsync(sendAnonDistinctId: boolean = true): Promise<PostHogDecideResponse | undefined> {\n await this._initPromise\n if (this._decideResponsePromise) {\n return this._decideResponsePromise\n }\n return this._decideAsync(sendAnonDistinctId)\n }\n\n private async _decideAsync(sendAnonDistinctId: boolean = true): Promise<PostHogDecideResponse | undefined> {\n this._decideResponsePromise = this._initPromise\n .then(() => {\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 return super.getDecide(distinctId, groups, personProperties, groupProperties, extraProperties).then((res) => {\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 newFeatureFlags = res.featureFlags\n let newFeatureFlagPayloads = res.featureFlagPayloads\n if (res.errorsWhileComputingFlags) {\n // if not all flags were computed, we upsert flags instead of replacing them\n const currentFlags = this.getPersistedProperty<PostHogDecideResponse['featureFlags']>(\n PostHogPersistedProperty.FeatureFlags\n )\n const currentFlagPayloads = this.getPersistedProperty<PostHogDecideResponse['featureFlagPayloads']>(\n PostHogPersistedProperty.FeatureFlagPayloads\n )\n newFeatureFlags = { ...currentFlags, ...res.featureFlags }\n newFeatureFlagPayloads = { ...currentFlagPayloads, ...res.featureFlagPayloads }\n }\n this.setKnownFeatureFlags(newFeatureFlags)\n this.setKnownFeatureFlagPayloads(\n Object.fromEntries(\n Object.entries(newFeatureFlagPayloads || {}).map(([k, v]) => [k, this._parsePayload(v)])\n )\n )\n\n const sessionReplay = res?.sessionRecording\n if (sessionReplay) {\n this.setPersistedProperty(PostHogPersistedProperty.SessionReplay, sessionReplay)\n this.logMsgIfDebug(() =>\n console.log('PostHog Debug', 'Session replay config: ', JSON.stringify(sessionReplay))\n )\n } else {\n this.logMsgIfDebug(() => console.info('PostHog Debug', 'Session replay config disabled.'))\n this.setPersistedProperty(PostHogPersistedProperty.SessionReplay, null)\n }\n }\n\n return res\n })\n })\n .finally(() => {\n this._decideResponsePromise = undefined\n })\n return this._decideResponsePromise\n }\n\n private setKnownFeatureFlags(featureFlags: PostHogDecideResponse['featureFlags']): void {\n this.wrap(() => {\n this.setPersistedProperty<PostHogDecideResponse['featureFlags']>(\n PostHogPersistedProperty.FeatureFlags,\n featureFlags\n )\n this._events.emit('featureflags', featureFlags)\n })\n }\n\n private setKnownFeatureFlagPayloads(featureFlagPayloads: PostHogDecideResponse['featureFlagPayloads']): void {\n this.wrap(() => {\n this.setPersistedProperty<PostHogDecideResponse['featureFlagPayloads']>(\n PostHogPersistedProperty.FeatureFlagPayloads,\n featureFlagPayloads\n )\n })\n }\n\n getFeatureFlag(key: string): boolean | string | undefined {\n const featureFlags = this.getFeatureFlags()\n\n if (!featureFlags) {\n // If we haven't loaded flags yet, or errored out, we respond with undefined\n return undefined\n }\n\n let response = featureFlags[key]\n // `/decide` v3 returns all flags\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 this.flagCallReported[key] = true\n this.capture('$feature_flag_called', {\n $feature_flag: key,\n $feature_flag_response: response,\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(): PostHogDecideResponse['featureFlagPayloads'] | undefined {\n const payloads = this.getPersistedProperty<PostHogDecideResponse['featureFlagPayloads']>(\n PostHogPersistedProperty.FeatureFlagPayloads\n )\n\n return payloads\n }\n\n getFeatureFlags(): PostHogDecideResponse['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 let flags = this.getPersistedProperty<PostHogDecideResponse['featureFlags']>(PostHogPersistedProperty.FeatureFlags)\n const overriddenFlags = this.getPersistedProperty<PostHogDecideResponse['featureFlags']>(\n PostHogPersistedProperty.OverrideFeatureFlags\n )\n\n if (!overriddenFlags) {\n return flags\n }\n\n flags = flags || {}\n\n for (const key in overriddenFlags) {\n if (!overriddenFlags[key]) {\n delete flags[key]\n } else {\n flags[key] = overriddenFlags[key]\n }\n }\n\n return flags\n }\n\n getFeatureFlagsAndPayloads(): {\n flags: PostHogDecideResponse['featureFlags'] | undefined\n payloads: PostHogDecideResponse['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(cb?: (err?: Error, flags?: PostHogDecideResponse['featureFlags']) => void): void {\n this.decideAsync()\n .then((res) => {\n cb?.(undefined, res?.featureFlags)\n })\n .catch((e) => {\n cb?.(e, undefined)\n if (!cb) {\n this.logMsgIfDebug(() => console.log('[PostHog] Error reloading feature flags', e))\n }\n })\n }\n\n async reloadFeatureFlagsAsync(\n sendAnonDistinctId: boolean = true\n ): Promise<PostHogDecideResponse['featureFlags'] | undefined> {\n return (await this.decideAsync(sendAnonDistinctId))?.featureFlags\n }\n\n onFeatureFlags(cb: (flags: PostHogDecideResponse['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: string | boolean) => 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: PostHogDecideResponse['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\nexport * from './types'\nexport { LZString }\n","import { PostHogPersistedProperty } from './types'\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","/**\n * Fetch wrapper\n *\n * We want to polyfill fetch when not available with axios but use it when it is.\n * NOTE: The current version of Axios has an issue when in non-node environments like Clouflare Workers.\n * This is currently solved by using the global fetch if available instead.\n * See https://github.com/PostHog/posthog-js-lite/issues/127 for more info\n */\n\nimport { PostHogFetchOptions, PostHogFetchResponse } from 'posthog-core/src'\n\ntype FetchLike = (url: string, options: PostHogFetchOptions) => Promise<PostHogFetchResponse>\n\nlet _fetch: FetchLike | undefined =\n // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error\n // @ts-ignore\n typeof fetch !== 'undefined' ? fetch : typeof global.fetch !== 'undefined' ? global.fetch : undefined\n\nif (!_fetch) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const axios = require('axios')\n\n _fetch = async (url: string, options: PostHogFetchOptions): Promise<PostHogFetchResponse> => {\n const res = await axios.request({\n url,\n headers: options.headers,\n method: options.method.toLowerCase(),\n data: options.body,\n signal: options.signal,\n // fetch only throws on network errors, not on HTTP errors\n validateStatus: () => true,\n })\n\n return {\n status: res.status,\n text: async () => res.data,\n json: async () => res.data,\n }\n }\n}\n\n// NOTE: We have to export this as default, even though we prefer named exports as we are relying on detecting \"fetch\" in the global scope\nexport default _fetch as FetchLike\n","import { createHash } from 'rusha'\nimport { FeatureFlagCondition, FlagProperty, PostHogFeatureFlag, PropertyGroup } from './types'\nimport { JsonType, PostHogFetchOptions, PostHogFetchResponse } from 'posthog-core/src'\nimport { safeSetTimeout } from 'posthog-core/src/utils'\nimport fetch from './fetch'\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 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\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 // NOTE: as any is required here as the AbortSignal typing is slightly misaligned but works just fine\n this.fetch = options.fetch || fetch\n this.onError = options.onError\n this.customHeaders = customHeaders\n\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<string | boolean | undefined> {\n await this.loadFeatureFlags()\n\n let response: string | boolean | 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 = 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: string | boolean): 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, string | boolean>\n payloads: Record<string, JsonType>\n fallbackToDecide: boolean\n }> {\n await this.loadFeatureFlags()\n\n const response: Record<string, string | boolean> = {}\n const payloads: Record<string, JsonType> = {}\n let fallbackToDecide = this.featureFlags.length == 0\n\n this.featureFlags.map(async (flag) => {\n try {\n const matchValue = 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 fallbackToDecide = true\n }\n })\n\n return { response, payloads, fallbackToDecide }\n }\n\n 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 ): string | boolean {\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 this.matchFeatureFlagProperties(flag, groups[groupName], focusedGroupProperties)\n } else {\n return this.matchFeatureFlagProperties(flag, distinctId, personProperties)\n }\n }\n\n matchFeatureFlagProperties(\n flag: PostHogFeatureFlag,\n distinctId: string,\n properties: Record<string, string>\n ): string | boolean {\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 (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 = 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 isConditionMatch(\n flag: PostHogFeatureFlag,\n distinctId: string,\n condition: FeatureFlagCondition,\n properties: Record<string, string>\n ): 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 && _hash(flag.key, distinctId) > rolloutPercentage / 100.0) {\n return false\n }\n\n return true\n }\n\n getMatchingVariant(flag: PostHogFeatureFlag, distinctId: string): string | boolean | undefined {\n const hashValue = _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 async _loadFeatureFlags(): Promise<void> {\n if (this.poller) {\n clearTimeout(this.poller)\n this.poller = undefined\n }\n this.poller = setTimeout(() => this._loadFeatureFlags(), this.pollingInterval)\n\n try {\n const res = await this._requestFeatureFlagDefinitions()\n\n if (res && res.status === 401) {\n throw new ClientError(\n `Your personalApiKey is invalid. Are you sure you're not using your Project API key? More information: https://posthog.com/docs/api/overview`\n )\n }\n\n if (res && res.status !== 200) {\n // something else went wrong, or the server is down.\n // In this case, don't override existing flags\n return\n }\n\n const responseJson = await res.json()\n if (!('flags' in responseJson)) {\n this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(responseJson)}`))\n }\n\n this.featureFlags = responseJson.flags || []\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 || {}\n this.cohorts = responseJson.cohorts || []\n this.loadedSuccessfullyOnce = true\n } catch (err) {\n // if an error that is not an instance of ClientError is thrown\n // we silently ignore the error when reloading feature flags\n if (err instanceof ClientError) {\n this.onError?.(err)\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: PostHogFetchOptions = {\n method: 'GET',\n headers: {\n ...this.customHeaders,\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.personalApiKey}`,\n },\n }\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\nfunction _hash(key: string, distinctId: string, salt: string = ''): number {\n // rusha is a fast sha1 implementation in pure javascript\n const sha1Hash = createHash()\n sha1Hash.update(`${key}.${distinctId}${salt}`)\n return parseInt(sha1Hash.digest('hex').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 { version } from '../package.json'\n\nimport {\n JsonType,\n PostHogCoreOptions,\n PostHogCoreStateless,\n PostHogDecideResponse,\n PostHogFetchOptions,\n PostHogFetchResponse,\n PostHogFlagsAndPayloadsResponse,\n PostHogPersistedProperty,\n} from '../../posthog-core/src'\nimport { PostHogMemoryStorage } from '../../posthog-core/src/storage-memory'\nimport { EventMessage, GroupIdentifyMessage, IdentifyMessage, PostHogNodeV1 } from './types'\nimport { FeatureFlagsPoller } from './feature-flags'\nimport fetch from './fetch'\n\nexport type PostHogOptions = PostHogCoreOptions & {\n persistence?: 'memory'\n personalApiKey?: string\n // The interval in milliseconds between polls for refreshing feature flag definitions. Defaults to 30 seconds.\n featureFlagsPollingInterval?: number\n // Maximum size of cache that deduplicates $feature_flag_called calls per user.\n maxCacheSize?: number\n fetch?: (url: string, options: PostHogFetchOptions) => Promise<PostHogFetchResponse>\n}\n\nconst THIRTY_SECONDS = 30 * 1000\nconst MAX_CACHE_SIZE = 50 * 1000\n\n// The actual exported Nodejs API.\nexport class PostHog extends PostHogCoreStateless implements PostHogNodeV1 {\n private _memoryStorage = new PostHogMemoryStorage()\n\n private featureFlagsPoller?: FeatureFlagsPoller\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 if (options.personalApiKey) {\n this.featureFlagsPoller = new FeatureFlagsPoller({\n pollingInterval:\n typeof options.featureFlagsPollingInterval === 'number'\n ? options.featureFlagsPollingInterval\n : THIRTY_SECONDS,\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 customHeaders: this.getCustomHeaders(),\n })\n }\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\n getLibraryId(): string {\n return 'posthog-node'\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({\n distinctId,\n event,\n properties,\n groups,\n sendFeatureFlags,\n timestamp,\n disableGeoip,\n uuid,\n }: EventMessage): void {\n const _capture = (props: EventMessage['properties']): void => {\n super.captureStateless(distinctId, event, props, { timestamp, disableGeoip, uuid })\n }\n\n const _getFlags = (\n distinctId: EventMessage['distinctId'],\n groups: EventMessage['groups'],\n disableGeoip: EventMessage['disableGeoip']\n ): Promise<PostHogDecideResponse['featureFlags'] | undefined> => {\n return super.getFeatureFlagsStateless(distinctId, groups, undefined, undefined, disableGeoip)\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 ((this.featureFlagsPoller?.featureFlags?.length || 0) > 0) {\n // Otherwise we may as well check for the flags locally and include them if there\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 || {}).filter((flag) => flags?.[flag] !== false)\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 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 alias(data: { distinctId: string; alias: string; disableGeoip?: boolean }): void {\n super.aliasStateless(data.alias, data.distinctId, undefined, { disableGeoip: data.disableGeoip })\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<string | boolean | 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\n if (!flagWasLocallyEvaluated && !onlyEvaluateLocally) {\n response = await super.getFeatureFlagStateless(\n key,\n distinctId,\n groups,\n personProperties,\n groupProperties,\n disableGeoip\n )\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 locally_evaluated: flagWasLocallyEvaluated,\n [`$feature/${key}`]: response,\n },\n groups,\n disableGeoip,\n })\n }\n return response\n }\n\n async getFeatureFlagPayload(\n key: string,\n distinctId: string,\n matchValue?: string | boolean,\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 // 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 })\n }\n\n if (matchValue) {\n response = await this.featureFlagsPoller?.computeFeatureFlagPayloadLocally(key, matchValue)\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 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, string | boolean>> {\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 fallbackToDecide = true\n if (localEvaluationResult) {\n featureFlags = localEvaluationResult.response\n featureFlagPayloads = localEvaluationResult.payloads\n fallbackToDecide = localEvaluationResult.fallbackToDecide\n }\n\n if (fallbackToDecide && !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 async reloadFeatureFlags(): Promise<void> {\n await this.featureFlagsPoller?.loadFeatureFlags(true)\n }\n\n async shutdown(shutdownTimeoutMs?: number): Promise<void> {\n this.featureFlagsPoller?.stopPoller()\n return super.shutdown(shutdownTimeoutMs)\n }\n\n private addLocalPersonAndGroupProperties(\n distinctId: string,\n groups?: Record<string, string>,\n personProperties?: Record<string, string>,\n groupProperties?: Record<string, Record<string, string>>\n ): { allPersonProperties: Record<string, string>; allGroupProperties: Record<string, Record<string, string>> } {\n const allPersonProperties = { distinct_id: distinctId, ...(personProperties || {}) }\n\n const allGroupProperties: Record<string, Record<string, string>> = {}\n if (groups) {\n for (const groupName of Object.keys(groups)) {\n allGroupProperties[groupName] = {\n $group_key: groups[groupName],\n ...(groupProperties?.[groupName] || {}),\n }\n }\n }\n\n return { allPersonProperties, allGroupProperties }\n }\n}\n","/**\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 */\nimport { type PostHog } from '../posthog-node'\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// Integration as _SentryIntegration,\n// Primitive as _SentryPrimitive,\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 _SentryHub = any\ntype _SentryException = any\ntype _SentryPrimitive = any\n\ninterface _SentryIntegration {\n name: string\n setupOnce(addGlobalEventProcessor: (callback: _SentryEventProcessor) => void, getCurrentHub: () => _SentryHub): void\n}\n\ninterface PostHogSentryExceptionProperties {\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 $exception_type?: string\n $exception_message?: string\n $exception_personURL?: string\n}\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 */\nexport class PostHogSentryIntegration implements _SentryIntegration {\n public readonly name = 'posthog-node'\n\n public static readonly POSTHOG_ID_TAG = 'posthog_distinct_id'\n\n public constructor(\n private readonly posthog: PostHog,\n private readonly posthogHost?: string,\n private readonly organization?: string,\n private readonly prefix?: string\n ) {\n this.posthogHost = posthog.options.host ?? 'https://us.i.posthog.com'\n }\n\n public setupOnce(\n addGlobalEventProcessor: (callback: _SentryEventProcessor) => void,\n getCurrentHub: () => _SentryHub\n ): void {\n addGlobalEventProcessor((event: _SentryEvent): _SentryEvent => {\n if (event.exception?.values === undefined || event.exception.values.length === 0) {\n return event\n }\n\n if (!event.tags) {\n event.tags = {}\n }\n\n const sentry = getCurrentHub()\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 event.tags['PostHog Person URL'] = new URL(`/person/${userId}`, this.posthogHost).toString()\n\n const properties: PostHogSentryExceptionProperties = {\n // PostHog Exception Properties\n $exception_message: event.exception.values[0]?.value,\n $exception_type: event.exception.values[0]?.type,\n $exception_personURL: event.tags['PostHog Person URL'],\n // Sentry Exception Properties\n $sentry_event_id: event.event_id,\n $sentry_exception: event.exception,\n $sentry_exception_message: event.exception.values[0]?.value,\n $sentry_exception_type: event.exception.values[0]?.type,\n $sentry_tags: event.tags,\n }\n\n const projectId = sentry.getClient()?.getDsn()?.projectId\n if (this.organization !== undefined && projectId !== undefined && event.event_id !== undefined) {\n properties.$sentry_url = `${this.prefix ?? 'https://sentry.io/organizations'}/${\n this.organization\n }/issues/?project=${projectId}&query=${event.event_id}`\n }\n\n this.posthog.capture({ event: '$exception', distinctId: userId, properties })\n\n return event\n })\n }\n}\n"],"names":["_fetch","fetch","global","undefined","axios","require","url","options","res","request","headers","method","toLowerCase","data","body","signal","validateStatus","status","text","json","LONG_SCALE","NULL_VALUES_ALLOWED_OPERATORS","ClientError","Error","constructor","message","captureStackTrace","name","Object","setPrototypeOf","prototype","InconclusiveMatchError","FeatureFlagsPoller","pollingInterval","personalApiKey","projectApiKey","timeout","host","customHeaders","debugMode","featureFlags","featureFlagsByKey","groupTypeMapping","cohorts","loadedSuccessfullyOnce","poller","onError","loadFeatureFlags","debug","enabled","logMsgIfDebug","fn","getFeatureFlag","key","distinctId","groups","personProperties","groupProperties","response","featureFlag","flag","computeFlagLocally","console","e","computeFeatureFlagPayloadLocally","matchValue","filters","payloads","toString","JSON","parse","getAllFlagsAndPayloads","fallbackToDecide","length","map","matchPayload","ensure_experience_continuity","active","flagFilters","aggregation_group_type_index","groupName","String","warn","focusedGroupProperties","matchFeatureFlagProperties","properties","flagConditions","isInconclusive","result","sortedFlagConditions","sort","conditionA","conditionB","AHasVariantOverride","variant","BHasVariantOverride","condition","isConditionMatch","variantOverride","flagVariants","multivariate","variants","some","getMatchingVariant","rolloutPercentage","rollout_percentage","warnFunction","msg","prop","propertyType","type","matches","matchCohort","matchProperty","_hash","hashValue","matchingVariant","variantLookupTable","find","valueMin","valueMax","lookupTable","multivariates","forEach","push","forceReload","_loadFeatureFlags","clearTimeout","setTimeout","_requestFeatureFlagDefinitions","responseJson","stringify","flags","reduce","acc","curr","group_type_mapping","err","Authorization","abortTimeout","controller","AbortController","safeSetTimeout","abort","stopPoller","salt","sha1Hash","createHash","update","parseInt","digest","slice","property","propertyValues","value","operator","overrideValue","includes","computeExactMatch","Array","isArray","val","compare","lhs","rhs","isValidRegex","match","parsedValue","parseFloat","parsedDate","relativeDateParseForFeatureFlagMatching","convertToDateTime","overrideDate","cohortProperties","cohortId","propertyGroup","matchPropertyGroup","propertyGroupType","values","errorMatchingLocally","negation","regex","RegExp","Date","date","isNaN","valueOf","parsedDt","toISOString","number","interval","setUTCHours","getUTCHours","setUTCDate","getUTCDate","setUTCMonth","getUTCMonth","setUTCFullYear","getUTCFullYear","THIRTY_SECONDS","MAX_CACHE_SIZE","PostHog","PostHogCoreStateless","apiKey","_memoryStorage","PostHogMemoryStorage","featureFlagsPoller","featureFlagsPollingInterval","requestTimeout","_events","emit","getCustomHeaders","distinctIdHasSentFlagCalls","maxCacheSize","getPersistedProperty","getProperty","setPersistedProperty","setProperty","getLibraryId","getLibraryVersion","version","getCustomUserAgent","enable","optIn","disable","optOut","capture","event","sendFeatureFlags","timestamp","disableGeoip","uuid","_capture","props","captureStateless","_getFlags","getFeatureFlagsStateless","capturePromise","Promise","resolve","then","groupsWithStringValues","entries","getAllFlags","onlyEvaluateLocally","additionalProperties","feature","activeFlags","keys","filter","catch","$groups","addPendingPromise","identify","userPropsOnce","$set_once","userProps","$set","identifyStateless","alias","aliasStateless","sendFeatureFlagEvents","adjustedProperties","addLocalPersonAndGroupProperties","allPersonProperties","allGroupProperties","flagWasLocallyEvaluated","getFeatureFlagStateless","featureFlagReportedKey","$feature_flag","$feature_flag_response","locally_evaluated","getFeatureFlagPayload","payloadWasLocallyEvaluated","getFeatureFlagPayloadStateless","isFeatureEnabled","feat","localEvaluationResult","featureFlagPayloads","remoteEvaluationResult","getFeatureFlagsAndPayloadsStateless","groupIdentify","groupType","groupKey","groupIdentifyStateless","reloadFeatureFlags","shutdown","shutdownTimeoutMs","distinct_id","$group_key","PostHogSentryIntegration","posthog","posthogHost","organization","prefix","setupOnce","addGlobalEventProcessor","getCurrentHub","exception","tags","sentry","userId","POSTHOG_ID_TAG","URL","$exception_message","$exception_type","$exception_personURL","$sentry_event_id","event_id","$sentry_exception","$sentry_exception_message","$sentry_exception_type","$sentry_tags","projectId","getClient","getDsn","$sentry_url"],"mappings":"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"}
|