posthog-js 1.158.0 → 1.158.2

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.
Files changed (96) hide show
  1. package/dist/array.full.js +2 -2
  2. package/dist/array.full.js.map +1 -1
  3. package/dist/array.js +1 -1
  4. package/dist/array.js.map +1 -1
  5. package/dist/exception-autocapture.js.map +1 -1
  6. package/dist/lib/src/entrypoints/web-vitals.d.ts +4 -4
  7. package/dist/lib/src/extensions/replay/config.d.ts +1 -1
  8. package/dist/lib/src/extensions/replay/sessionrecording.d.ts +4 -0
  9. package/dist/lib/src/extensions/surveys.d.ts +2 -2
  10. package/dist/lib/src/utils/globals.d.ts +6 -6
  11. package/dist/lib/src/utils/logger.d.ts +1 -1
  12. package/dist/main.js +1 -1
  13. package/dist/main.js.map +1 -1
  14. package/dist/module.d.ts +4 -0
  15. package/dist/module.js +1 -1
  16. package/dist/module.js.map +1 -1
  17. package/dist/recorder-v2.js.map +1 -1
  18. package/dist/recorder.js.map +1 -1
  19. package/lib/package.json +14 -9
  20. package/lib/src/autocapture-utils.js.map +1 -1
  21. package/lib/src/autocapture.js.map +1 -1
  22. package/lib/src/consent.js +1 -1
  23. package/lib/src/consent.js.map +1 -1
  24. package/lib/src/decide.js.map +1 -1
  25. package/lib/src/entrypoints/exception-autocapture.js.map +1 -1
  26. package/lib/src/entrypoints/recorder.js +12 -12
  27. package/lib/src/entrypoints/recorder.js.map +1 -1
  28. package/lib/src/entrypoints/surveys.js.map +1 -1
  29. package/lib/src/entrypoints/tracing-headers.js.map +1 -1
  30. package/lib/src/entrypoints/web-vitals.d.ts +4 -4
  31. package/lib/src/extensions/exception-autocapture/error-conversion.js +2 -2
  32. package/lib/src/extensions/exception-autocapture/error-conversion.js.map +1 -1
  33. package/lib/src/extensions/exception-autocapture/index.js.map +1 -1
  34. package/lib/src/extensions/exception-autocapture/stack-trace.js.map +1 -1
  35. package/lib/src/extensions/exception-autocapture/type-checking.js +1 -1
  36. package/lib/src/extensions/exception-autocapture/type-checking.js.map +1 -1
  37. package/lib/src/extensions/rageclick.js.map +1 -1
  38. package/lib/src/extensions/replay/config.d.ts +1 -1
  39. package/lib/src/extensions/replay/config.js.map +1 -1
  40. package/lib/src/extensions/replay/external/denylist.js.map +1 -1
  41. package/lib/src/extensions/replay/mutation-rate-limiter.js.map +1 -1
  42. package/lib/src/extensions/replay/rrweb-plugins/patch.js.map +1 -1
  43. package/lib/src/extensions/replay/sessionrecording-utils.js.map +1 -1
  44. package/lib/src/extensions/replay/sessionrecording.d.ts +4 -0
  45. package/lib/src/extensions/replay/sessionrecording.js +22 -13
  46. package/lib/src/extensions/replay/sessionrecording.js.map +1 -1
  47. package/lib/src/extensions/segment-integration.js.map +1 -1
  48. package/lib/src/extensions/sentry-integration.js.map +1 -1
  49. package/lib/src/extensions/surveys/action-matcher.js.map +1 -1
  50. package/lib/src/extensions/surveys/components/BottomSection.jsx.map +1 -1
  51. package/lib/src/extensions/surveys/components/ConfirmationMessage.jsx.map +1 -1
  52. package/lib/src/extensions/surveys/components/QuestionTypes.jsx.map +1 -1
  53. package/lib/src/extensions/surveys/hooks/useContrastingTextColor.js.map +1 -1
  54. package/lib/src/extensions/surveys/surveys-utils.jsx.map +1 -1
  55. package/lib/src/extensions/surveys.d.ts +2 -2
  56. package/lib/src/extensions/surveys.jsx.map +1 -1
  57. package/lib/src/extensions/toolbar.js +2 -2
  58. package/lib/src/extensions/toolbar.js.map +1 -1
  59. package/lib/src/extensions/tracing-headers.js.map +1 -1
  60. package/lib/src/extensions/web-vitals/index.js.map +1 -1
  61. package/lib/src/heatmaps.js.map +1 -1
  62. package/lib/src/page-view.js.map +1 -1
  63. package/lib/src/posthog-core.js +5 -5
  64. package/lib/src/posthog-core.js.map +1 -1
  65. package/lib/src/posthog-featureflags.js.map +1 -1
  66. package/lib/src/posthog-persistence.js.map +1 -1
  67. package/lib/src/posthog-surveys.js.map +1 -1
  68. package/lib/src/rate-limiter.js.map +1 -1
  69. package/lib/src/request-queue.js.map +1 -1
  70. package/lib/src/request.js +2 -2
  71. package/lib/src/request.js.map +1 -1
  72. package/lib/src/retry-queue.js.map +1 -1
  73. package/lib/src/scroll-manager.js.map +1 -1
  74. package/lib/src/session-props.js.map +1 -1
  75. package/lib/src/sessionid.js.map +1 -1
  76. package/lib/src/storage.js +10 -10
  77. package/lib/src/storage.js.map +1 -1
  78. package/lib/src/types.js.map +1 -1
  79. package/lib/src/utils/blocked-uas.js.map +1 -1
  80. package/lib/src/utils/event-utils.js +13 -13
  81. package/lib/src/utils/event-utils.js.map +1 -1
  82. package/lib/src/utils/globals.d.ts +6 -6
  83. package/lib/src/utils/index.js +3 -3
  84. package/lib/src/utils/index.js.map +1 -1
  85. package/lib/src/utils/logger.d.ts +1 -1
  86. package/lib/src/utils/logger.js.map +1 -1
  87. package/lib/src/utils/request-router.js +11 -2
  88. package/lib/src/utils/request-router.js.map +1 -1
  89. package/lib/src/utils/request-utils.js +1 -1
  90. package/lib/src/utils/request-utils.js.map +1 -1
  91. package/lib/src/utils/simple-event-emitter.js.map +1 -1
  92. package/lib/src/utils/survey-event-receiver.js.map +1 -1
  93. package/lib/src/utils/type-utils.js.map +1 -1
  94. package/lib/src/utils/user-agent-utils.js.map +1 -1
  95. package/lib/src/uuidv7.js.map +1 -1
  96. package/package.json +14 -9
@@ -1 +1 @@
1
- {"version":3,"file":"posthog-featureflags.js","sourceRoot":"","sources":["../../src/posthog-featureflags.ts"],"names":[],"mappings":"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","sourcesContent":["import { entries, extend } from './utils'\nimport { PostHog } from './posthog-core'\nimport {\n DecideResponse,\n FeatureFlagsCallback,\n EarlyAccessFeatureCallback,\n EarlyAccessFeatureResponse,\n Properties,\n JsonType,\n Compression,\n} from './types'\nimport { PostHogPersistence } from './posthog-persistence'\n\nimport {\n PERSISTENCE_EARLY_ACCESS_FEATURES,\n ENABLED_FEATURE_FLAGS,\n STORED_GROUP_PROPERTIES_KEY,\n STORED_PERSON_PROPERTIES_KEY,\n FLAG_CALL_REPORTED,\n} from './constants'\n\nimport { isArray } from './utils/type-utils'\nimport { logger } from './utils/logger'\n\nconst PERSISTENCE_ACTIVE_FEATURE_FLAGS = '$active_feature_flags'\nconst PERSISTENCE_OVERRIDE_FEATURE_FLAGS = '$override_feature_flags'\nconst PERSISTENCE_FEATURE_FLAG_PAYLOADS = '$feature_flag_payloads'\n\nexport const filterActiveFeatureFlags = (featureFlags?: Record<string, string | boolean>) => {\n const activeFeatureFlags: Record<string, string | boolean> = {}\n for (const [key, value] of entries(featureFlags || {})) {\n if (value) {\n activeFeatureFlags[key] = value\n }\n }\n return activeFeatureFlags\n}\n\nexport const parseFeatureFlagDecideResponse = (\n response: Partial<DecideResponse>,\n persistence: PostHogPersistence,\n currentFlags: Record<string, string | boolean> = {},\n currentFlagPayloads: Record<string, JsonType> = {}\n) => {\n const flags = response['featureFlags']\n const flagPayloads = response['featureFlagPayloads']\n if (!flags) {\n return\n }\n // using the v1 api\n if (isArray(flags)) {\n const $enabled_feature_flags: Record<string, boolean> = {}\n if (flags) {\n for (let i = 0; i < flags.length; i++) {\n $enabled_feature_flags[flags[i]] = true\n }\n }\n persistence &&\n persistence.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: flags,\n [ENABLED_FEATURE_FLAGS]: $enabled_feature_flags,\n })\n return\n }\n\n // using the v2+ api\n let newFeatureFlags = flags\n let newFeatureFlagPayloads = flagPayloads\n if (response.errorsWhileComputingFlags) {\n // if not all flags were computed, we upsert flags instead of replacing them\n newFeatureFlags = { ...currentFlags, ...newFeatureFlags }\n newFeatureFlagPayloads = { ...currentFlagPayloads, ...newFeatureFlagPayloads }\n }\n persistence &&\n persistence.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: Object.keys(filterActiveFeatureFlags(newFeatureFlags)),\n [ENABLED_FEATURE_FLAGS]: newFeatureFlags || {},\n [PERSISTENCE_FEATURE_FLAG_PAYLOADS]: newFeatureFlagPayloads || {},\n })\n}\n\nexport class PostHogFeatureFlags {\n instance: PostHog\n _override_warning: boolean\n featureFlagEventHandlers: FeatureFlagsCallback[]\n reloadFeatureFlagsQueued: boolean\n reloadFeatureFlagsInAction: boolean\n $anon_distinct_id: string | undefined\n\n constructor(instance: PostHog) {\n this.instance = instance\n this._override_warning = false\n this.featureFlagEventHandlers = []\n\n this.reloadFeatureFlagsQueued = false\n this.reloadFeatureFlagsInAction = false\n }\n\n getFlags(): string[] {\n return Object.keys(this.getFlagVariants())\n }\n\n getFlagVariants(): Record<string, string | boolean> {\n const enabledFlags = this.instance.get_property(ENABLED_FEATURE_FLAGS)\n const overriddenFlags = this.instance.get_property(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n if (!overriddenFlags) {\n return enabledFlags || {}\n }\n\n const finalFlags = extend({}, enabledFlags)\n const overriddenKeys = Object.keys(overriddenFlags)\n for (let i = 0; i < overriddenKeys.length; i++) {\n finalFlags[overriddenKeys[i]] = overriddenFlags[overriddenKeys[i]]\n }\n if (!this._override_warning) {\n logger.warn(' Overriding feature flags!', {\n enabledFlags,\n overriddenFlags,\n finalFlags,\n })\n this._override_warning = true\n }\n return finalFlags\n }\n\n getFlagPayloads(): Record<string, JsonType> {\n const flagPayloads = this.instance.get_property(PERSISTENCE_FEATURE_FLAG_PAYLOADS)\n return flagPayloads || {}\n }\n\n /**\n * Reloads feature flags asynchronously.\n *\n * Constraints:\n *\n * 1. Avoid parallel requests\n * 2. Delay a few milliseconds after each reloadFeatureFlags call to batch subsequent changes together\n * 3. Don't call this during initial load (as /decide will be called instead), see posthog-core.js\n */\n reloadFeatureFlags(): void {\n if (!this.reloadFeatureFlagsQueued) {\n this.reloadFeatureFlagsQueued = true\n this._startReloadTimer()\n }\n }\n\n setAnonymousDistinctId(anon_distinct_id: string): void {\n this.$anon_distinct_id = anon_distinct_id\n }\n\n setReloadingPaused(isPaused: boolean): void {\n this.reloadFeatureFlagsInAction = isPaused\n }\n\n resetRequestQueue(): void {\n this.reloadFeatureFlagsQueued = false\n }\n\n _startReloadTimer(): void {\n if (this.reloadFeatureFlagsQueued && !this.reloadFeatureFlagsInAction) {\n setTimeout(() => {\n if (!this.reloadFeatureFlagsInAction && this.reloadFeatureFlagsQueued) {\n this.reloadFeatureFlagsQueued = false\n this._reloadFeatureFlagsRequest()\n }\n }, 5)\n }\n }\n\n _reloadFeatureFlagsRequest(): void {\n if (this.instance.config.advanced_disable_feature_flags) {\n return\n }\n\n this.setReloadingPaused(true)\n const token = this.instance.config.token\n const personProperties = this.instance.get_property(STORED_PERSON_PROPERTIES_KEY)\n const groupProperties = this.instance.get_property(STORED_GROUP_PROPERTIES_KEY)\n const json_data = {\n token: token,\n distinct_id: this.instance.get_distinct_id(),\n groups: this.instance.getGroups(),\n $anon_distinct_id: this.$anon_distinct_id,\n person_properties: personProperties,\n group_properties: groupProperties,\n disable_flags: this.instance.config.advanced_disable_feature_flags || undefined,\n }\n\n this.instance._send_request({\n method: 'POST',\n url: this.instance.requestRouter.endpointFor('api', '/decide/?v=3'),\n data: json_data,\n compression: this.instance.config.disable_compression ? undefined : Compression.Base64,\n timeout: this.instance.config.feature_flag_request_timeout_ms,\n callback: (response) => {\n this.setReloadingPaused(false)\n\n let errorsLoading = true\n\n if (response.statusCode === 200) {\n // successful request\n // reset anon_distinct_id after at least a single request with it\n // makes it through\n this.$anon_distinct_id = undefined\n errorsLoading = false\n }\n // :TRICKY: We want to fire the callback even if the request fails\n // and return existing flags if they exist\n // This is because we don't want to block clients waiting for flags to load.\n // It's possible they're waiting for the callback to render the UI, but it never occurs.\n this.receivedFeatureFlags(response.json ?? {}, errorsLoading)\n\n // :TRICKY: Reload - start another request if queued!\n this._startReloadTimer()\n },\n })\n }\n\n /*\n * Get feature flag's value for user.\n *\n * ### Usage:\n *\n * if(posthog.getFeatureFlag('my-flag') === 'some-variant') { // do something }\n *\n * @param {Object|String} key Key of the feature flag.\n * @param {Object|String} options (optional) If {send_event: false}, we won't send an $feature_flag_call event to PostHog.\n */\n getFeatureFlag(key: string, options: { send_event?: boolean } = {}): boolean | string | undefined {\n if (!this.instance.decideEndpointWasHit && !(this.getFlags() && this.getFlags().length > 0)) {\n logger.warn('getFeatureFlag for key \"' + key + '\" failed. Feature flags didn\\'t load in time.')\n return undefined\n }\n const flagValue = this.getFlagVariants()[key]\n const flagReportValue = `${flagValue}`\n const flagCallReported: Record<string, string[]> = this.instance.get_property(FLAG_CALL_REPORTED) || {}\n\n if (options.send_event || !('send_event' in options)) {\n if (!(key in flagCallReported) || !flagCallReported[key].includes(flagReportValue)) {\n if (isArray(flagCallReported[key])) {\n flagCallReported[key].push(flagReportValue)\n } else {\n flagCallReported[key] = [flagReportValue]\n }\n this.instance.persistence?.register({ [FLAG_CALL_REPORTED]: flagCallReported })\n\n this.instance.capture('$feature_flag_called', { $feature_flag: key, $feature_flag_response: flagValue })\n }\n }\n return flagValue\n }\n\n getFeatureFlagPayload(key: string): JsonType {\n const payloads = this.getFlagPayloads()\n return payloads[key]\n }\n\n /*\n * See if feature flag is enabled for user.\n *\n * ### Usage:\n *\n * if(posthog.isFeatureEnabled('beta-feature')) { // do something }\n *\n * @param {Object|String} key Key of the feature flag.\n * @param {Object|String} options (optional) If {send_event: false}, we won't send an $feature_flag_call event to PostHog.\n */\n isFeatureEnabled(key: string, options: { send_event?: boolean } = {}): boolean | undefined {\n if (!this.instance.decideEndpointWasHit && !(this.getFlags() && this.getFlags().length > 0)) {\n logger.warn('isFeatureEnabled for key \"' + key + '\" failed. Feature flags didn\\'t load in time.')\n return undefined\n }\n return !!this.getFeatureFlag(key, options)\n }\n\n addFeatureFlagsHandler(handler: FeatureFlagsCallback): void {\n this.featureFlagEventHandlers.push(handler)\n }\n\n removeFeatureFlagsHandler(handler: FeatureFlagsCallback): void {\n this.featureFlagEventHandlers = this.featureFlagEventHandlers.filter((h) => h !== handler)\n }\n\n receivedFeatureFlags(response: Partial<DecideResponse>, errorsLoading?: boolean): void {\n if (!this.instance.persistence) {\n return\n }\n this.instance.decideEndpointWasHit = true\n const currentFlags = this.getFlagVariants()\n const currentFlagPayloads = this.getFlagPayloads()\n parseFeatureFlagDecideResponse(response, this.instance.persistence, currentFlags, currentFlagPayloads)\n this._fireFeatureFlagsCallbacks(errorsLoading)\n }\n\n /*\n * Override feature flags on the client-side. Useful for setting non-persistent feature flags, or for testing/debugging\n * feature flags in the PostHog app.\n *\n * ### Usage:\n *\n * - posthog.feature_flags.override(false)\n * - posthog.feature_flags.override(['beta-feature'])\n * - posthog.feature_flags.override({'beta-feature': 'variant', 'other-feature': true})\n * - posthog.feature_flags.override({'beta-feature': 'variant'}, true) // Suppress warning log\n *\n * @param {Object|Array|String} flags Flags to override with.\n * @param {boolean} [suppressWarning=false] Optional parameter to suppress the override warning.\n */\n override(flags: boolean | string[] | Record<string, string | boolean>, suppressWarning: boolean = false): void {\n if (!this.instance.__loaded || !this.instance.persistence) {\n return logger.uninitializedWarning('posthog.feature_flags.override')\n }\n\n this._override_warning = suppressWarning\n\n if (flags === false) {\n this.instance.persistence.unregister(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n } else if (isArray(flags)) {\n const flagsObj: Record<string, string | boolean> = {}\n for (let i = 0; i < flags.length; i++) {\n flagsObj[flags[i]] = true\n }\n this.instance.persistence.register({ [PERSISTENCE_OVERRIDE_FEATURE_FLAGS]: flagsObj })\n } else {\n this.instance.persistence.register({ [PERSISTENCE_OVERRIDE_FEATURE_FLAGS]: flags })\n }\n }\n /*\n * Register an event listener that runs when feature flags become available or when they change.\n * If there are flags, the listener is called immediately in addition to being called on future changes.\n *\n * ### Usage:\n *\n * posthog.onFeatureFlags(function(featureFlags) { // do something })\n *\n * @param {Function} [callback] The callback function will be called once the feature flags are ready or when they are updated.\n * It'll return a list of feature flags enabled for the user.\n * @returns {Function} A function that can be called to unsubscribe the listener. Used by useEffect when the component unmounts.\n */\n onFeatureFlags(callback: FeatureFlagsCallback): () => void {\n this.addFeatureFlagsHandler(callback)\n if (this.instance.decideEndpointWasHit) {\n const { flags, flagVariants } = this._prepareFeatureFlagsForCallbacks()\n callback(flags, flagVariants)\n }\n return () => this.removeFeatureFlagsHandler(callback)\n }\n\n updateEarlyAccessFeatureEnrollment(key: string, isEnrolled: boolean): void {\n const enrollmentPersonProp = {\n [`$feature_enrollment/${key}`]: isEnrolled,\n }\n this.instance.capture('$feature_enrollment_update', {\n $feature_flag: key,\n $feature_enrollment: isEnrolled,\n $set: enrollmentPersonProp,\n })\n this.setPersonPropertiesForFlags(enrollmentPersonProp, false)\n\n const newFlags = { ...this.getFlagVariants(), [key]: isEnrolled }\n this.instance.persistence?.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: Object.keys(filterActiveFeatureFlags(newFlags)),\n [ENABLED_FEATURE_FLAGS]: newFlags,\n })\n this._fireFeatureFlagsCallbacks()\n }\n\n getEarlyAccessFeatures(callback: EarlyAccessFeatureCallback, force_reload = false): void {\n const existing_early_access_features = this.instance.get_property(PERSISTENCE_EARLY_ACCESS_FEATURES)\n\n if (!existing_early_access_features || force_reload) {\n this.instance._send_request({\n transport: 'XHR',\n url: this.instance.requestRouter.endpointFor(\n 'api',\n `/api/early_access_features/?token=${this.instance.config.token}`\n ),\n method: 'GET',\n callback: (response) => {\n if (!response.json) {\n return\n }\n const earlyAccessFeatures = (response.json as EarlyAccessFeatureResponse).earlyAccessFeatures\n this.instance.persistence?.register({ [PERSISTENCE_EARLY_ACCESS_FEATURES]: earlyAccessFeatures })\n return callback(earlyAccessFeatures)\n },\n })\n } else {\n return callback(existing_early_access_features)\n }\n }\n\n _prepareFeatureFlagsForCallbacks(): { flags: string[]; flagVariants: Record<string, string | boolean> } {\n const flags = this.getFlags()\n const flagVariants = this.getFlagVariants()\n\n // Return truthy\n const truthyFlags = flags.filter((flag) => flagVariants[flag])\n const truthyFlagVariants = Object.keys(flagVariants)\n .filter((variantKey) => flagVariants[variantKey])\n .reduce((res: Record<string, string | boolean>, key) => {\n res[key] = flagVariants[key]\n return res\n }, {})\n\n return {\n flags: truthyFlags,\n flagVariants: truthyFlagVariants,\n }\n }\n\n _fireFeatureFlagsCallbacks(errorsLoading?: boolean): void {\n const { flags, flagVariants } = this._prepareFeatureFlagsForCallbacks()\n this.featureFlagEventHandlers.forEach((handler) => handler(flags, flagVariants, { errorsLoading }))\n }\n\n /**\n * Set override person properties for feature flags.\n * This is used when dealing with new persons / where you don't want to wait for ingestion\n * to update user properties.\n */\n setPersonPropertiesForFlags(properties: Properties, reloadFeatureFlags = true): void {\n // Get persisted person properties\n const existingProperties = this.instance.get_property(STORED_PERSON_PROPERTIES_KEY) || {}\n\n this.instance.register({\n [STORED_PERSON_PROPERTIES_KEY]: {\n ...existingProperties,\n ...properties,\n },\n })\n\n if (reloadFeatureFlags) {\n this.instance.reloadFeatureFlags()\n }\n }\n\n resetPersonPropertiesForFlags(): void {\n this.instance.unregister(STORED_PERSON_PROPERTIES_KEY)\n }\n\n /**\n * Set override group properties for feature flags.\n * This is used when dealing with new groups / where you don't want to wait for ingestion\n * to update properties.\n * Takes in an object, the key of which is the group type.\n * For example:\n * setGroupPropertiesForFlags({'organization': { name: 'CYZ', employees: '11' } })\n */\n setGroupPropertiesForFlags(properties: { [type: string]: Properties }, reloadFeatureFlags = true): void {\n // Get persisted group properties\n const existingProperties = this.instance.get_property(STORED_GROUP_PROPERTIES_KEY) || {}\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.instance.register({\n [STORED_GROUP_PROPERTIES_KEY]: {\n ...existingProperties,\n ...properties,\n },\n })\n\n if (reloadFeatureFlags) {\n this.instance.reloadFeatureFlags()\n }\n }\n\n resetGroupPropertiesForFlags(group_type?: string): void {\n if (group_type) {\n const existingProperties = this.instance.get_property(STORED_GROUP_PROPERTIES_KEY) || {}\n this.instance.register({\n [STORED_GROUP_PROPERTIES_KEY]: { ...existingProperties, [group_type]: {} },\n })\n } else {\n this.instance.unregister(STORED_GROUP_PROPERTIES_KEY)\n }\n }\n}\n"]}
1
+ {"version":3,"file":"posthog-featureflags.js","sourceRoot":"","sources":["../../src/posthog-featureflags.ts"],"names":[],"mappings":"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","sourcesContent":["import { entries, extend } from './utils'\nimport { PostHog } from './posthog-core'\nimport {\n DecideResponse,\n FeatureFlagsCallback,\n EarlyAccessFeatureCallback,\n EarlyAccessFeatureResponse,\n Properties,\n JsonType,\n Compression,\n} from './types'\nimport { PostHogPersistence } from './posthog-persistence'\n\nimport {\n PERSISTENCE_EARLY_ACCESS_FEATURES,\n ENABLED_FEATURE_FLAGS,\n STORED_GROUP_PROPERTIES_KEY,\n STORED_PERSON_PROPERTIES_KEY,\n FLAG_CALL_REPORTED,\n} from './constants'\n\nimport { isArray } from './utils/type-utils'\nimport { logger } from './utils/logger'\n\nconst PERSISTENCE_ACTIVE_FEATURE_FLAGS = '$active_feature_flags'\nconst PERSISTENCE_OVERRIDE_FEATURE_FLAGS = '$override_feature_flags'\nconst PERSISTENCE_FEATURE_FLAG_PAYLOADS = '$feature_flag_payloads'\n\nexport const filterActiveFeatureFlags = (featureFlags?: Record<string, string | boolean>) => {\n const activeFeatureFlags: Record<string, string | boolean> = {}\n for (const [key, value] of entries(featureFlags || {})) {\n if (value) {\n activeFeatureFlags[key] = value\n }\n }\n return activeFeatureFlags\n}\n\nexport const parseFeatureFlagDecideResponse = (\n response: Partial<DecideResponse>,\n persistence: PostHogPersistence,\n currentFlags: Record<string, string | boolean> = {},\n currentFlagPayloads: Record<string, JsonType> = {}\n) => {\n const flags = response['featureFlags']\n const flagPayloads = response['featureFlagPayloads']\n if (!flags) {\n return\n }\n // using the v1 api\n if (isArray(flags)) {\n const $enabled_feature_flags: Record<string, boolean> = {}\n if (flags) {\n for (let i = 0; i < flags.length; i++) {\n $enabled_feature_flags[flags[i]] = true\n }\n }\n persistence &&\n persistence.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: flags,\n [ENABLED_FEATURE_FLAGS]: $enabled_feature_flags,\n })\n return\n }\n\n // using the v2+ api\n let newFeatureFlags = flags\n let newFeatureFlagPayloads = flagPayloads\n if (response.errorsWhileComputingFlags) {\n // if not all flags were computed, we upsert flags instead of replacing them\n newFeatureFlags = { ...currentFlags, ...newFeatureFlags }\n newFeatureFlagPayloads = { ...currentFlagPayloads, ...newFeatureFlagPayloads }\n }\n persistence &&\n persistence.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: Object.keys(filterActiveFeatureFlags(newFeatureFlags)),\n [ENABLED_FEATURE_FLAGS]: newFeatureFlags || {},\n [PERSISTENCE_FEATURE_FLAG_PAYLOADS]: newFeatureFlagPayloads || {},\n })\n}\n\nexport class PostHogFeatureFlags {\n instance: PostHog\n _override_warning: boolean\n featureFlagEventHandlers: FeatureFlagsCallback[]\n reloadFeatureFlagsQueued: boolean\n reloadFeatureFlagsInAction: boolean\n $anon_distinct_id: string | undefined\n\n constructor(instance: PostHog) {\n this.instance = instance\n this._override_warning = false\n this.featureFlagEventHandlers = []\n\n this.reloadFeatureFlagsQueued = false\n this.reloadFeatureFlagsInAction = false\n }\n\n getFlags(): string[] {\n return Object.keys(this.getFlagVariants())\n }\n\n getFlagVariants(): Record<string, string | boolean> {\n const enabledFlags = this.instance.get_property(ENABLED_FEATURE_FLAGS)\n const overriddenFlags = this.instance.get_property(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n if (!overriddenFlags) {\n return enabledFlags || {}\n }\n\n const finalFlags = extend({}, enabledFlags)\n const overriddenKeys = Object.keys(overriddenFlags)\n for (let i = 0; i < overriddenKeys.length; i++) {\n finalFlags[overriddenKeys[i]] = overriddenFlags[overriddenKeys[i]]\n }\n if (!this._override_warning) {\n logger.warn(' Overriding feature flags!', {\n enabledFlags,\n overriddenFlags,\n finalFlags,\n })\n this._override_warning = true\n }\n return finalFlags\n }\n\n getFlagPayloads(): Record<string, JsonType> {\n const flagPayloads = this.instance.get_property(PERSISTENCE_FEATURE_FLAG_PAYLOADS)\n return flagPayloads || {}\n }\n\n /**\n * Reloads feature flags asynchronously.\n *\n * Constraints:\n *\n * 1. Avoid parallel requests\n * 2. Delay a few milliseconds after each reloadFeatureFlags call to batch subsequent changes together\n * 3. Don't call this during initial load (as /decide will be called instead), see posthog-core.js\n */\n reloadFeatureFlags(): void {\n if (!this.reloadFeatureFlagsQueued) {\n this.reloadFeatureFlagsQueued = true\n this._startReloadTimer()\n }\n }\n\n setAnonymousDistinctId(anon_distinct_id: string): void {\n this.$anon_distinct_id = anon_distinct_id\n }\n\n setReloadingPaused(isPaused: boolean): void {\n this.reloadFeatureFlagsInAction = isPaused\n }\n\n resetRequestQueue(): void {\n this.reloadFeatureFlagsQueued = false\n }\n\n _startReloadTimer(): void {\n if (this.reloadFeatureFlagsQueued && !this.reloadFeatureFlagsInAction) {\n setTimeout(() => {\n if (!this.reloadFeatureFlagsInAction && this.reloadFeatureFlagsQueued) {\n this.reloadFeatureFlagsQueued = false\n this._reloadFeatureFlagsRequest()\n }\n }, 5)\n }\n }\n\n _reloadFeatureFlagsRequest(): void {\n if (this.instance.config.advanced_disable_feature_flags) {\n return\n }\n\n this.setReloadingPaused(true)\n const token = this.instance.config.token\n const personProperties = this.instance.get_property(STORED_PERSON_PROPERTIES_KEY)\n const groupProperties = this.instance.get_property(STORED_GROUP_PROPERTIES_KEY)\n const json_data = {\n token: token,\n distinct_id: this.instance.get_distinct_id(),\n groups: this.instance.getGroups(),\n $anon_distinct_id: this.$anon_distinct_id,\n person_properties: personProperties,\n group_properties: groupProperties,\n disable_flags: this.instance.config.advanced_disable_feature_flags || undefined,\n }\n\n this.instance._send_request({\n method: 'POST',\n url: this.instance.requestRouter.endpointFor('api', '/decide/?v=3'),\n data: json_data,\n compression: this.instance.config.disable_compression ? undefined : Compression.Base64,\n timeout: this.instance.config.feature_flag_request_timeout_ms,\n callback: (response) => {\n this.setReloadingPaused(false)\n\n let errorsLoading = true\n\n if (response.statusCode === 200) {\n // successful request\n // reset anon_distinct_id after at least a single request with it\n // makes it through\n this.$anon_distinct_id = undefined\n errorsLoading = false\n }\n // :TRICKY: We want to fire the callback even if the request fails\n // and return existing flags if they exist\n // This is because we don't want to block clients waiting for flags to load.\n // It's possible they're waiting for the callback to render the UI, but it never occurs.\n this.receivedFeatureFlags(response.json ?? {}, errorsLoading)\n\n // :TRICKY: Reload - start another request if queued!\n this._startReloadTimer()\n },\n })\n }\n\n /*\n * Get feature flag's value for user.\n *\n * ### Usage:\n *\n * if(posthog.getFeatureFlag('my-flag') === 'some-variant') { // do something }\n *\n * @param {Object|String} key Key of the feature flag.\n * @param {Object|String} options (optional) If {send_event: false}, we won't send an $feature_flag_call event to PostHog.\n */\n getFeatureFlag(key: string, options: { send_event?: boolean } = {}): boolean | string | undefined {\n if (!this.instance.decideEndpointWasHit && !(this.getFlags() && this.getFlags().length > 0)) {\n logger.warn('getFeatureFlag for key \"' + key + '\" failed. Feature flags didn\\'t load in time.')\n return undefined\n }\n const flagValue = this.getFlagVariants()[key]\n const flagReportValue = `${flagValue}`\n const flagCallReported: Record<string, string[]> = this.instance.get_property(FLAG_CALL_REPORTED) || {}\n\n if (options.send_event || !('send_event' in options)) {\n if (!(key in flagCallReported) || !flagCallReported[key].includes(flagReportValue)) {\n if (isArray(flagCallReported[key])) {\n flagCallReported[key].push(flagReportValue)\n } else {\n flagCallReported[key] = [flagReportValue]\n }\n this.instance.persistence?.register({ [FLAG_CALL_REPORTED]: flagCallReported })\n\n this.instance.capture('$feature_flag_called', { $feature_flag: key, $feature_flag_response: flagValue })\n }\n }\n return flagValue\n }\n\n getFeatureFlagPayload(key: string): JsonType {\n const payloads = this.getFlagPayloads()\n return payloads[key]\n }\n\n /*\n * See if feature flag is enabled for user.\n *\n * ### Usage:\n *\n * if(posthog.isFeatureEnabled('beta-feature')) { // do something }\n *\n * @param {Object|String} key Key of the feature flag.\n * @param {Object|String} options (optional) If {send_event: false}, we won't send an $feature_flag_call event to PostHog.\n */\n isFeatureEnabled(key: string, options: { send_event?: boolean } = {}): boolean | undefined {\n if (!this.instance.decideEndpointWasHit && !(this.getFlags() && this.getFlags().length > 0)) {\n logger.warn('isFeatureEnabled for key \"' + key + '\" failed. Feature flags didn\\'t load in time.')\n return undefined\n }\n return !!this.getFeatureFlag(key, options)\n }\n\n addFeatureFlagsHandler(handler: FeatureFlagsCallback): void {\n this.featureFlagEventHandlers.push(handler)\n }\n\n removeFeatureFlagsHandler(handler: FeatureFlagsCallback): void {\n this.featureFlagEventHandlers = this.featureFlagEventHandlers.filter((h) => h !== handler)\n }\n\n receivedFeatureFlags(response: Partial<DecideResponse>, errorsLoading?: boolean): void {\n if (!this.instance.persistence) {\n return\n }\n this.instance.decideEndpointWasHit = true\n const currentFlags = this.getFlagVariants()\n const currentFlagPayloads = this.getFlagPayloads()\n parseFeatureFlagDecideResponse(response, this.instance.persistence, currentFlags, currentFlagPayloads)\n this._fireFeatureFlagsCallbacks(errorsLoading)\n }\n\n /*\n * Override feature flags on the client-side. Useful for setting non-persistent feature flags, or for testing/debugging\n * feature flags in the PostHog app.\n *\n * ### Usage:\n *\n * - posthog.feature_flags.override(false)\n * - posthog.feature_flags.override(['beta-feature'])\n * - posthog.feature_flags.override({'beta-feature': 'variant', 'other-feature': true})\n * - posthog.feature_flags.override({'beta-feature': 'variant'}, true) // Suppress warning log\n *\n * @param {Object|Array|String} flags Flags to override with.\n * @param {boolean} [suppressWarning=false] Optional parameter to suppress the override warning.\n */\n override(flags: boolean | string[] | Record<string, string | boolean>, suppressWarning: boolean = false): void {\n if (!this.instance.__loaded || !this.instance.persistence) {\n return logger.uninitializedWarning('posthog.feature_flags.override')\n }\n\n this._override_warning = suppressWarning\n\n if (flags === false) {\n this.instance.persistence.unregister(PERSISTENCE_OVERRIDE_FEATURE_FLAGS)\n } else if (isArray(flags)) {\n const flagsObj: Record<string, string | boolean> = {}\n for (let i = 0; i < flags.length; i++) {\n flagsObj[flags[i]] = true\n }\n this.instance.persistence.register({ [PERSISTENCE_OVERRIDE_FEATURE_FLAGS]: flagsObj })\n } else {\n this.instance.persistence.register({ [PERSISTENCE_OVERRIDE_FEATURE_FLAGS]: flags })\n }\n }\n /*\n * Register an event listener that runs when feature flags become available or when they change.\n * If there are flags, the listener is called immediately in addition to being called on future changes.\n *\n * ### Usage:\n *\n * posthog.onFeatureFlags(function(featureFlags) { // do something })\n *\n * @param {Function} [callback] The callback function will be called once the feature flags are ready or when they are updated.\n * It'll return a list of feature flags enabled for the user.\n * @returns {Function} A function that can be called to unsubscribe the listener. Used by useEffect when the component unmounts.\n */\n onFeatureFlags(callback: FeatureFlagsCallback): () => void {\n this.addFeatureFlagsHandler(callback)\n if (this.instance.decideEndpointWasHit) {\n const { flags, flagVariants } = this._prepareFeatureFlagsForCallbacks()\n callback(flags, flagVariants)\n }\n return () => this.removeFeatureFlagsHandler(callback)\n }\n\n updateEarlyAccessFeatureEnrollment(key: string, isEnrolled: boolean): void {\n const enrollmentPersonProp = {\n [`$feature_enrollment/${key}`]: isEnrolled,\n }\n this.instance.capture('$feature_enrollment_update', {\n $feature_flag: key,\n $feature_enrollment: isEnrolled,\n $set: enrollmentPersonProp,\n })\n this.setPersonPropertiesForFlags(enrollmentPersonProp, false)\n\n const newFlags = { ...this.getFlagVariants(), [key]: isEnrolled }\n this.instance.persistence?.register({\n [PERSISTENCE_ACTIVE_FEATURE_FLAGS]: Object.keys(filterActiveFeatureFlags(newFlags)),\n [ENABLED_FEATURE_FLAGS]: newFlags,\n })\n this._fireFeatureFlagsCallbacks()\n }\n\n getEarlyAccessFeatures(callback: EarlyAccessFeatureCallback, force_reload = false): void {\n const existing_early_access_features = this.instance.get_property(PERSISTENCE_EARLY_ACCESS_FEATURES)\n\n if (!existing_early_access_features || force_reload) {\n this.instance._send_request({\n transport: 'XHR',\n url: this.instance.requestRouter.endpointFor(\n 'api',\n `/api/early_access_features/?token=${this.instance.config.token}`\n ),\n method: 'GET',\n callback: (response) => {\n if (!response.json) {\n return\n }\n const earlyAccessFeatures = (response.json as EarlyAccessFeatureResponse).earlyAccessFeatures\n this.instance.persistence?.register({ [PERSISTENCE_EARLY_ACCESS_FEATURES]: earlyAccessFeatures })\n return callback(earlyAccessFeatures)\n },\n })\n } else {\n return callback(existing_early_access_features)\n }\n }\n\n _prepareFeatureFlagsForCallbacks(): { flags: string[]; flagVariants: Record<string, string | boolean> } {\n const flags = this.getFlags()\n const flagVariants = this.getFlagVariants()\n\n // Return truthy\n const truthyFlags = flags.filter((flag) => flagVariants[flag])\n const truthyFlagVariants = Object.keys(flagVariants)\n .filter((variantKey) => flagVariants[variantKey])\n .reduce((res: Record<string, string | boolean>, key) => {\n res[key] = flagVariants[key]\n return res\n }, {})\n\n return {\n flags: truthyFlags,\n flagVariants: truthyFlagVariants,\n }\n }\n\n _fireFeatureFlagsCallbacks(errorsLoading?: boolean): void {\n const { flags, flagVariants } = this._prepareFeatureFlagsForCallbacks()\n this.featureFlagEventHandlers.forEach((handler) => handler(flags, flagVariants, { errorsLoading }))\n }\n\n /**\n * Set override person properties for feature flags.\n * This is used when dealing with new persons / where you don't want to wait for ingestion\n * to update user properties.\n */\n setPersonPropertiesForFlags(properties: Properties, reloadFeatureFlags = true): void {\n // Get persisted person properties\n const existingProperties = this.instance.get_property(STORED_PERSON_PROPERTIES_KEY) || {}\n\n this.instance.register({\n [STORED_PERSON_PROPERTIES_KEY]: {\n ...existingProperties,\n ...properties,\n },\n })\n\n if (reloadFeatureFlags) {\n this.instance.reloadFeatureFlags()\n }\n }\n\n resetPersonPropertiesForFlags(): void {\n this.instance.unregister(STORED_PERSON_PROPERTIES_KEY)\n }\n\n /**\n * Set override group properties for feature flags.\n * This is used when dealing with new groups / where you don't want to wait for ingestion\n * to update properties.\n * Takes in an object, the key of which is the group type.\n * For example:\n * setGroupPropertiesForFlags({'organization': { name: 'CYZ', employees: '11' } })\n */\n setGroupPropertiesForFlags(properties: { [type: string]: Properties }, reloadFeatureFlags = true): void {\n // Get persisted group properties\n const existingProperties = this.instance.get_property(STORED_GROUP_PROPERTIES_KEY) || {}\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.instance.register({\n [STORED_GROUP_PROPERTIES_KEY]: {\n ...existingProperties,\n ...properties,\n },\n })\n\n if (reloadFeatureFlags) {\n this.instance.reloadFeatureFlags()\n }\n }\n\n resetGroupPropertiesForFlags(group_type?: string): void {\n if (group_type) {\n const existingProperties = this.instance.get_property(STORED_GROUP_PROPERTIES_KEY) || {}\n this.instance.register({\n [STORED_GROUP_PROPERTIES_KEY]: { ...existingProperties, [group_type]: {} },\n })\n } else {\n this.instance.unregister(STORED_GROUP_PROPERTIES_KEY)\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"posthog-persistence.js","sourceRoot":"","sources":["../../src/posthog-persistence.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint camelcase: \"off\" */\n\nimport { each, extend, include, stripEmptyProperties, stripLeadingDollar } from './utils'\nimport { cookieStore, localPlusCookieStore, localStore, memoryStore, sessionStore } from './storage'\nimport { PersistentStore, PostHogConfig, Properties } from './types'\nimport {\n ENABLED_FEATURE_FLAGS,\n EVENT_TIMERS_KEY,\n INITIAL_CAMPAIGN_PARAMS,\n INITIAL_PERSON_INFO,\n INITIAL_REFERRER_INFO,\n PERSISTENCE_RESERVED_PROPERTIES,\n} from './constants'\n\nimport { isObject, isUndefined } from './utils/type-utils'\nimport { Info } from './utils/event-utils'\nimport { logger } from './utils/logger'\n\nconst CASE_INSENSITIVE_PERSISTENCE_TYPES: readonly Lowercase<PostHogConfig['persistence']>[] = [\n 'cookie',\n 'localstorage',\n 'localstorage+cookie',\n 'sessionstorage',\n 'memory',\n]\n\nconst parseName = (config: PostHogConfig): string => {\n let token = ''\n if (config['token']) {\n token = config['token'].replace(/\\+/g, 'PL').replace(/\\//g, 'SL').replace(/=/g, 'EQ')\n }\n\n if (config['persistence_name']) {\n return 'ph_' + config['persistence_name']\n } else {\n return 'ph_' + token + '_posthog'\n }\n}\n\n/**\n * PostHog Persistence Object\n * @constructor\n */\nexport class PostHogPersistence {\n private config: PostHogConfig\n props: Properties\n storage: PersistentStore\n campaign_params_saved: boolean\n name: string\n disabled: boolean | undefined\n secure: boolean | undefined\n expire_days: number | undefined\n default_expiry: number | undefined\n cross_subdomain: boolean | undefined\n\n constructor(config: PostHogConfig) {\n this.config = config\n this.props = {}\n this.campaign_params_saved = false\n this.name = parseName(config)\n this.storage = this.buildStorage(config)\n this.load()\n if (config.debug) {\n logger.info('Persistence loaded', config['persistence'], { ...this.props })\n }\n this.update_config(config, config)\n this.save()\n }\n\n private buildStorage(config: PostHogConfig) {\n if (\n CASE_INSENSITIVE_PERSISTENCE_TYPES.indexOf(\n config['persistence'].toLowerCase() as Lowercase<PostHogConfig['persistence']>\n ) === -1\n ) {\n logger.critical(\n 'Unknown persistence type ' + config['persistence'] + '; falling back to localStorage+cookie'\n )\n config['persistence'] = 'localStorage+cookie'\n }\n\n let store: PersistentStore\n // We handle storage type in a case-insensitive way for backwards compatibility\n const storage_type = config['persistence'].toLowerCase() as Lowercase<PostHogConfig['persistence']>\n if (storage_type === 'localstorage' && localStore.is_supported()) {\n store = localStore\n } else if (storage_type === 'localstorage+cookie' && localPlusCookieStore.is_supported()) {\n store = localPlusCookieStore\n } else if (storage_type === 'sessionstorage' && sessionStore.is_supported()) {\n store = sessionStore\n } else if (storage_type === 'memory') {\n store = memoryStore\n } else if (storage_type === 'cookie') {\n store = cookieStore\n } else if (localPlusCookieStore.is_supported()) {\n // selected storage type wasn't supported, fallback to 'localstorage+cookie' if possible\n store = localPlusCookieStore\n } else {\n store = cookieStore\n }\n\n return store\n }\n\n properties(): Properties {\n const p: Properties = {}\n // Filter out reserved properties\n each(this.props, function (v, k) {\n if (k === ENABLED_FEATURE_FLAGS && isObject(v)) {\n const keys = Object.keys(v)\n for (let i = 0; i < keys.length; i++) {\n p[`$feature/${keys[i]}`] = v[keys[i]]\n }\n } else if (!include(PERSISTENCE_RESERVED_PROPERTIES, k)) {\n p[k] = v\n }\n })\n return p\n }\n\n load(): void {\n if (this.disabled) {\n return\n }\n\n const entry = this.storage.parse(this.name)\n\n if (entry) {\n this.props = extend({}, entry)\n }\n }\n\n /**\n * NOTE: Saving frequently causes issues with Recordings and Consent Management Platform (CMP) tools which\n * observe cookie changes, and modify their UI, often causing infinite loops.\n * As such callers of this should ideally check that the data has changed beforehand\n */\n save(): void {\n if (this.disabled) {\n return\n }\n this.storage.set(this.name, this.props, this.expire_days, this.cross_subdomain, this.secure, this.config.debug)\n }\n\n remove(): void {\n // remove both domain and subdomain cookies\n this.storage.remove(this.name, false)\n this.storage.remove(this.name, true)\n }\n\n // removes the storage entry and deletes all loaded data\n // forced name for tests\n\n clear(): void {\n this.remove()\n this.props = {}\n }\n\n /**\n * @param {Object} props\n * @param {*=} default_value\n * @param {number=} days\n */\n\n register_once(props: Properties, default_value: any, days?: number): boolean {\n if (isObject(props)) {\n if (isUndefined(default_value)) {\n default_value = 'None'\n }\n this.expire_days = isUndefined(days) ? this.default_expiry : days\n\n let hasChanges = false\n\n each(props, (val, prop) => {\n if (!this.props.hasOwnProperty(prop) || this.props[prop] === default_value) {\n this.props[prop] = val\n hasChanges = true\n }\n })\n\n if (hasChanges) {\n this.save()\n return true\n }\n }\n return false\n }\n\n /**\n * @param {Object} props\n * @param {number=} days\n */\n\n register(props: Properties, days?: number): boolean {\n if (isObject(props)) {\n this.expire_days = isUndefined(days) ? this.default_expiry : days\n\n let hasChanges = false\n\n each(props, (val, prop) => {\n if (props.hasOwnProperty(prop) && this.props[prop] !== val) {\n this.props[prop] = val\n hasChanges = true\n }\n })\n\n if (hasChanges) {\n this.save()\n return true\n }\n }\n return false\n }\n\n unregister(prop: string): void {\n if (prop in this.props) {\n delete this.props[prop]\n this.save()\n }\n }\n\n update_campaign_params(): void {\n if (!this.campaign_params_saved) {\n this.register(Info.campaignParams(this.config.custom_campaign_params))\n this.campaign_params_saved = true\n }\n }\n update_search_keyword(): void {\n this.register(Info.searchInfo())\n }\n\n update_referrer_info(): void {\n this.register_once(Info.referrerInfo(), undefined)\n }\n\n set_initial_person_info(): void {\n if (this.props[INITIAL_CAMPAIGN_PARAMS] || this.props[INITIAL_REFERRER_INFO]) {\n // the user has initial properties stored the previous way, don't save them again\n return\n }\n\n this.register_once(\n {\n [INITIAL_PERSON_INFO]: Info.initialPersonInfo(),\n },\n undefined\n )\n }\n\n get_referrer_info(): Properties {\n return stripEmptyProperties({\n $referrer: this['props']['$referrer'],\n $referring_domain: this['props']['$referring_domain'],\n })\n }\n\n get_initial_props(): Properties {\n const p: Properties = {}\n\n // this section isn't written to anymore, but we should keep reading from it for backwards compatibility\n // for a while\n each([INITIAL_REFERRER_INFO, INITIAL_CAMPAIGN_PARAMS], (key) => {\n const initialReferrerInfo = this.props[key]\n if (initialReferrerInfo) {\n each(initialReferrerInfo, function (v, k) {\n p['$initial_' + stripLeadingDollar(k)] = v\n })\n }\n })\n const initialPersonInfo = this.props[INITIAL_PERSON_INFO]\n if (initialPersonInfo) {\n const initialPersonProps = Info.initialPersonPropsFromInfo(initialPersonInfo)\n extend(p, initialPersonProps)\n }\n\n return p\n }\n\n // safely fills the passed in object with stored properties,\n // does not override any properties defined in both\n // returns the passed in object\n\n safe_merge(props: Properties): Properties {\n each(this.props, function (val, prop) {\n if (!(prop in props)) {\n props[prop] = val\n }\n })\n\n return props\n }\n\n update_config(config: PostHogConfig, oldConfig: PostHogConfig): void {\n this.default_expiry = this.expire_days = config['cookie_expiration']\n this.set_disabled(config['disable_persistence'])\n this.set_cross_subdomain(config['cross_subdomain_cookie'])\n this.set_secure(config['secure_cookie'])\n\n if (config.persistence !== oldConfig.persistence) {\n // If the persistence type has changed, we need to migrate the data.\n const newStore = this.buildStorage(config)\n const props = this.props\n\n // clear the old store\n this.clear()\n this.storage = newStore\n this.props = props\n\n this.save()\n }\n }\n\n set_disabled(disabled: boolean): void {\n this.disabled = disabled\n if (this.disabled) {\n this.remove()\n } else {\n this.save()\n }\n }\n\n set_cross_subdomain(cross_subdomain: boolean): void {\n if (cross_subdomain !== this.cross_subdomain) {\n this.cross_subdomain = cross_subdomain\n this.remove()\n this.save()\n }\n }\n\n get_cross_subdomain(): boolean {\n return !!this.cross_subdomain\n }\n\n set_secure(secure: boolean): void {\n if (secure !== this.secure) {\n this.secure = secure\n this.remove()\n this.save()\n }\n }\n\n set_event_timer(event_name: string, timestamp: number): void {\n const timers = this.props[EVENT_TIMERS_KEY] || {}\n timers[event_name] = timestamp\n this.props[EVENT_TIMERS_KEY] = timers\n this.save()\n }\n\n remove_event_timer(event_name: string): number {\n const timers = this.props[EVENT_TIMERS_KEY] || {}\n const timestamp = timers[event_name]\n if (!isUndefined(timestamp)) {\n delete this.props[EVENT_TIMERS_KEY][event_name]\n this.save()\n }\n return timestamp\n }\n\n get_property(prop: string): any {\n return this.props[prop]\n }\n\n set_property(prop: string, to: any): void {\n this.props[prop] = to\n this.save()\n }\n}\n"]}
1
+ {"version":3,"file":"posthog-persistence.js","sourceRoot":"","sources":["../../src/posthog-persistence.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint camelcase: \"off\" */\n\nimport { each, extend, include, stripEmptyProperties, stripLeadingDollar } from './utils'\nimport { cookieStore, localPlusCookieStore, localStore, memoryStore, sessionStore } from './storage'\nimport { PersistentStore, PostHogConfig, Properties } from './types'\nimport {\n ENABLED_FEATURE_FLAGS,\n EVENT_TIMERS_KEY,\n INITIAL_CAMPAIGN_PARAMS,\n INITIAL_PERSON_INFO,\n INITIAL_REFERRER_INFO,\n PERSISTENCE_RESERVED_PROPERTIES,\n} from './constants'\n\nimport { isObject, isUndefined } from './utils/type-utils'\nimport { Info } from './utils/event-utils'\nimport { logger } from './utils/logger'\n\nconst CASE_INSENSITIVE_PERSISTENCE_TYPES: readonly Lowercase<PostHogConfig['persistence']>[] = [\n 'cookie',\n 'localstorage',\n 'localstorage+cookie',\n 'sessionstorage',\n 'memory',\n]\n\nconst parseName = (config: PostHogConfig): string => {\n let token = ''\n if (config['token']) {\n token = config['token'].replace(/\\+/g, 'PL').replace(/\\//g, 'SL').replace(/=/g, 'EQ')\n }\n\n if (config['persistence_name']) {\n return 'ph_' + config['persistence_name']\n } else {\n return 'ph_' + token + '_posthog'\n }\n}\n\n/**\n * PostHog Persistence Object\n * @constructor\n */\nexport class PostHogPersistence {\n private config: PostHogConfig\n props: Properties\n storage: PersistentStore\n campaign_params_saved: boolean\n name: string\n disabled: boolean | undefined\n secure: boolean | undefined\n expire_days: number | undefined\n default_expiry: number | undefined\n cross_subdomain: boolean | undefined\n\n constructor(config: PostHogConfig) {\n this.config = config\n this.props = {}\n this.campaign_params_saved = false\n this.name = parseName(config)\n this.storage = this.buildStorage(config)\n this.load()\n if (config.debug) {\n logger.info('Persistence loaded', config['persistence'], { ...this.props })\n }\n this.update_config(config, config)\n this.save()\n }\n\n private buildStorage(config: PostHogConfig) {\n if (\n CASE_INSENSITIVE_PERSISTENCE_TYPES.indexOf(\n config['persistence'].toLowerCase() as Lowercase<PostHogConfig['persistence']>\n ) === -1\n ) {\n logger.critical(\n 'Unknown persistence type ' + config['persistence'] + '; falling back to localStorage+cookie'\n )\n config['persistence'] = 'localStorage+cookie'\n }\n\n let store: PersistentStore\n // We handle storage type in a case-insensitive way for backwards compatibility\n const storage_type = config['persistence'].toLowerCase() as Lowercase<PostHogConfig['persistence']>\n if (storage_type === 'localstorage' && localStore.is_supported()) {\n store = localStore\n } else if (storage_type === 'localstorage+cookie' && localPlusCookieStore.is_supported()) {\n store = localPlusCookieStore\n } else if (storage_type === 'sessionstorage' && sessionStore.is_supported()) {\n store = sessionStore\n } else if (storage_type === 'memory') {\n store = memoryStore\n } else if (storage_type === 'cookie') {\n store = cookieStore\n } else if (localPlusCookieStore.is_supported()) {\n // selected storage type wasn't supported, fallback to 'localstorage+cookie' if possible\n store = localPlusCookieStore\n } else {\n store = cookieStore\n }\n\n return store\n }\n\n properties(): Properties {\n const p: Properties = {}\n // Filter out reserved properties\n each(this.props, function (v, k) {\n if (k === ENABLED_FEATURE_FLAGS && isObject(v)) {\n const keys = Object.keys(v)\n for (let i = 0; i < keys.length; i++) {\n p[`$feature/${keys[i]}`] = v[keys[i]]\n }\n } else if (!include(PERSISTENCE_RESERVED_PROPERTIES, k)) {\n p[k] = v\n }\n })\n return p\n }\n\n load(): void {\n if (this.disabled) {\n return\n }\n\n const entry = this.storage.parse(this.name)\n\n if (entry) {\n this.props = extend({}, entry)\n }\n }\n\n /**\n * NOTE: Saving frequently causes issues with Recordings and Consent Management Platform (CMP) tools which\n * observe cookie changes, and modify their UI, often causing infinite loops.\n * As such callers of this should ideally check that the data has changed beforehand\n */\n save(): void {\n if (this.disabled) {\n return\n }\n this.storage.set(this.name, this.props, this.expire_days, this.cross_subdomain, this.secure, this.config.debug)\n }\n\n remove(): void {\n // remove both domain and subdomain cookies\n this.storage.remove(this.name, false)\n this.storage.remove(this.name, true)\n }\n\n // removes the storage entry and deletes all loaded data\n // forced name for tests\n\n clear(): void {\n this.remove()\n this.props = {}\n }\n\n /**\n * @param {Object} props\n * @param {*=} default_value\n * @param {number=} days\n */\n\n register_once(props: Properties, default_value: any, days?: number): boolean {\n if (isObject(props)) {\n if (isUndefined(default_value)) {\n default_value = 'None'\n }\n this.expire_days = isUndefined(days) ? this.default_expiry : days\n\n let hasChanges = false\n\n each(props, (val, prop) => {\n if (!this.props.hasOwnProperty(prop) || this.props[prop] === default_value) {\n this.props[prop] = val\n hasChanges = true\n }\n })\n\n if (hasChanges) {\n this.save()\n return true\n }\n }\n return false\n }\n\n /**\n * @param {Object} props\n * @param {number=} days\n */\n\n register(props: Properties, days?: number): boolean {\n if (isObject(props)) {\n this.expire_days = isUndefined(days) ? this.default_expiry : days\n\n let hasChanges = false\n\n each(props, (val, prop) => {\n if (props.hasOwnProperty(prop) && this.props[prop] !== val) {\n this.props[prop] = val\n hasChanges = true\n }\n })\n\n if (hasChanges) {\n this.save()\n return true\n }\n }\n return false\n }\n\n unregister(prop: string): void {\n if (prop in this.props) {\n delete this.props[prop]\n this.save()\n }\n }\n\n update_campaign_params(): void {\n if (!this.campaign_params_saved) {\n this.register(Info.campaignParams(this.config.custom_campaign_params))\n this.campaign_params_saved = true\n }\n }\n update_search_keyword(): void {\n this.register(Info.searchInfo())\n }\n\n update_referrer_info(): void {\n this.register_once(Info.referrerInfo(), undefined)\n }\n\n set_initial_person_info(): void {\n if (this.props[INITIAL_CAMPAIGN_PARAMS] || this.props[INITIAL_REFERRER_INFO]) {\n // the user has initial properties stored the previous way, don't save them again\n return\n }\n\n this.register_once(\n {\n [INITIAL_PERSON_INFO]: Info.initialPersonInfo(),\n },\n undefined\n )\n }\n\n get_referrer_info(): Properties {\n return stripEmptyProperties({\n $referrer: this['props']['$referrer'],\n $referring_domain: this['props']['$referring_domain'],\n })\n }\n\n get_initial_props(): Properties {\n const p: Properties = {}\n\n // this section isn't written to anymore, but we should keep reading from it for backwards compatibility\n // for a while\n each([INITIAL_REFERRER_INFO, INITIAL_CAMPAIGN_PARAMS], (key) => {\n const initialReferrerInfo = this.props[key]\n if (initialReferrerInfo) {\n each(initialReferrerInfo, function (v, k) {\n p['$initial_' + stripLeadingDollar(k)] = v\n })\n }\n })\n const initialPersonInfo = this.props[INITIAL_PERSON_INFO]\n if (initialPersonInfo) {\n const initialPersonProps = Info.initialPersonPropsFromInfo(initialPersonInfo)\n extend(p, initialPersonProps)\n }\n\n return p\n }\n\n // safely fills the passed in object with stored properties,\n // does not override any properties defined in both\n // returns the passed in object\n\n safe_merge(props: Properties): Properties {\n each(this.props, function (val, prop) {\n if (!(prop in props)) {\n props[prop] = val\n }\n })\n\n return props\n }\n\n update_config(config: PostHogConfig, oldConfig: PostHogConfig): void {\n this.default_expiry = this.expire_days = config['cookie_expiration']\n this.set_disabled(config['disable_persistence'])\n this.set_cross_subdomain(config['cross_subdomain_cookie'])\n this.set_secure(config['secure_cookie'])\n\n if (config.persistence !== oldConfig.persistence) {\n // If the persistence type has changed, we need to migrate the data.\n const newStore = this.buildStorage(config)\n const props = this.props\n\n // clear the old store\n this.clear()\n this.storage = newStore\n this.props = props\n\n this.save()\n }\n }\n\n set_disabled(disabled: boolean): void {\n this.disabled = disabled\n if (this.disabled) {\n this.remove()\n } else {\n this.save()\n }\n }\n\n set_cross_subdomain(cross_subdomain: boolean): void {\n if (cross_subdomain !== this.cross_subdomain) {\n this.cross_subdomain = cross_subdomain\n this.remove()\n this.save()\n }\n }\n\n get_cross_subdomain(): boolean {\n return !!this.cross_subdomain\n }\n\n set_secure(secure: boolean): void {\n if (secure !== this.secure) {\n this.secure = secure\n this.remove()\n this.save()\n }\n }\n\n set_event_timer(event_name: string, timestamp: number): void {\n const timers = this.props[EVENT_TIMERS_KEY] || {}\n timers[event_name] = timestamp\n this.props[EVENT_TIMERS_KEY] = timers\n this.save()\n }\n\n remove_event_timer(event_name: string): number {\n const timers = this.props[EVENT_TIMERS_KEY] || {}\n const timestamp = timers[event_name]\n if (!isUndefined(timestamp)) {\n delete this.props[EVENT_TIMERS_KEY][event_name]\n this.save()\n }\n return timestamp\n }\n\n get_property(prop: string): any {\n return this.props[prop]\n }\n\n set_property(prop: string, to: any): void {\n this.props[prop] = to\n this.save()\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"posthog-surveys.js","sourceRoot":"","sources":["../../src/posthog-surveys.ts"],"names":[],"mappings":"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","sourcesContent":["import { PostHog } from './posthog-core'\nimport { SURVEYS } from './constants'\nimport {\n Survey,\n SurveyCallback,\n SurveyQuestionBranchingType,\n SurveyQuestionType,\n SurveyUrlMatchType,\n} from './posthog-surveys-types'\nimport { isUrlMatchingRegex } from './utils/request-utils'\nimport { SurveyEventReceiver } from './utils/survey-event-receiver'\nimport { assignableWindow, document, window } from './utils/globals'\nimport { DecideResponse } from './types'\nimport { logger } from './utils/logger'\nimport { isNullish } from './utils/type-utils'\n\nconst LOGGER_PREFIX = '[Surveys]'\n\nexport const surveyUrlValidationMap: Record<SurveyUrlMatchType, (conditionsUrl: string) => boolean> = {\n icontains: (conditionsUrl) =>\n !!window && window.location.href.toLowerCase().indexOf(conditionsUrl.toLowerCase()) > -1,\n not_icontains: (conditionsUrl) =>\n !!window && window.location.href.toLowerCase().indexOf(conditionsUrl.toLowerCase()) === -1,\n regex: (conditionsUrl) => !!window && isUrlMatchingRegex(window.location.href, conditionsUrl),\n not_regex: (conditionsUrl) => !!window && !isUrlMatchingRegex(window.location.href, conditionsUrl),\n exact: (conditionsUrl) => window?.location.href === conditionsUrl,\n is_not: (conditionsUrl) => window?.location.href !== conditionsUrl,\n}\n\nfunction getRatingBucketForResponseValue(responseValue: number, scale: number) {\n if (scale === 3) {\n if (responseValue < 1 || responseValue > 3) {\n throw new Error('The response must be in range 1-3')\n }\n\n return responseValue === 1 ? 'negative' : responseValue === 2 ? 'neutral' : 'positive'\n } else if (scale === 5) {\n if (responseValue < 1 || responseValue > 5) {\n throw new Error('The response must be in range 1-5')\n }\n\n return responseValue <= 2 ? 'negative' : responseValue === 3 ? 'neutral' : 'positive'\n } else if (scale === 10) {\n if (responseValue < 0 || responseValue > 10) {\n throw new Error('The response must be in range 0-10')\n }\n\n return responseValue <= 6 ? 'detractors' : responseValue <= 8 ? 'passives' : 'promoters'\n }\n\n throw new Error('The scale must be one of: 3, 5, 10')\n}\n\nexport class PostHogSurveys {\n private _decideServerResponse?: boolean\n public _surveyEventReceiver: SurveyEventReceiver | null\n private _surveyManager: any\n\n constructor(private readonly instance: PostHog) {\n // we set this to undefined here because we need the persistence storage for this type\n // but that's not initialized until loadIfEnabled is called.\n this._surveyEventReceiver = null\n }\n\n afterDecideResponse(response: DecideResponse) {\n this._decideServerResponse = !!response['surveys']\n this.loadIfEnabled()\n }\n\n loadIfEnabled() {\n const surveysGenerator = assignableWindow?.extendPostHogWithSurveys\n\n if (!this.instance.config.disable_surveys && this._decideServerResponse && !surveysGenerator) {\n if (this._surveyEventReceiver == null) {\n this._surveyEventReceiver = new SurveyEventReceiver(this.instance)\n }\n this.instance.requestRouter.loadScript('/static/surveys.js', (err) => {\n if (err) {\n return logger.error(LOGGER_PREFIX, 'Could not load surveys script', err)\n }\n\n this._surveyManager = assignableWindow.extendPostHogWithSurveys(this.instance)\n })\n }\n }\n\n getSurveys(callback: SurveyCallback, forceReload = false) {\n // In case we manage to load the surveys script, but config says not to load surveys\n // then we shouldn't return survey data\n if (this.instance.config.disable_surveys) {\n return callback([])\n }\n\n if (this._surveyEventReceiver == null) {\n this._surveyEventReceiver = new SurveyEventReceiver(this.instance)\n }\n\n const existingSurveys = this.instance.get_property(SURVEYS)\n if (!existingSurveys || forceReload) {\n this.instance._send_request({\n url: this.instance.requestRouter.endpointFor(\n 'api',\n `/api/surveys/?token=${this.instance.config.token}`\n ),\n method: 'GET',\n transport: 'XHR',\n callback: (response) => {\n if (response.statusCode !== 200 || !response.json) {\n return callback([])\n }\n const surveys = response.json.surveys || []\n\n const eventOrActionBasedSurveys = surveys.filter(\n (survey: Survey) =>\n (survey.conditions?.events &&\n survey.conditions?.events?.values &&\n survey.conditions?.events?.values?.length > 0) ||\n (survey.conditions?.actions &&\n survey.conditions?.actions?.values &&\n survey.conditions?.actions?.values?.length > 0)\n )\n\n if (eventOrActionBasedSurveys.length > 0) {\n this._surveyEventReceiver?.register(eventOrActionBasedSurveys)\n }\n\n this.instance.persistence?.register({ [SURVEYS]: surveys })\n return callback(surveys)\n },\n })\n } else {\n return callback(existingSurveys)\n }\n }\n\n getActiveMatchingSurveys(callback: SurveyCallback, forceReload = false) {\n this.getSurveys((surveys) => {\n const activeSurveys = surveys.filter((survey) => {\n return !!(survey.start_date && !survey.end_date)\n })\n\n const conditionMatchedSurveys = activeSurveys.filter((survey) => {\n if (!survey.conditions) {\n return true\n }\n\n // use urlMatchType to validate url condition, fallback to contains for backwards compatibility\n const urlCheck = survey.conditions?.url\n ? surveyUrlValidationMap[survey.conditions?.urlMatchType ?? 'icontains'](survey.conditions.url)\n : true\n const selectorCheck = survey.conditions?.selector\n ? document?.querySelector(survey.conditions.selector)\n : true\n return urlCheck && selectorCheck\n })\n\n // get all the surveys that have been activated so far with user actions.\n const activatedSurveys: string[] | undefined = this._surveyEventReceiver?.getSurveys()\n const targetingMatchedSurveys = conditionMatchedSurveys.filter((survey) => {\n if (!survey.linked_flag_key && !survey.targeting_flag_key && !survey.internal_targeting_flag_key) {\n return true\n }\n const linkedFlagCheck = survey.linked_flag_key\n ? this.instance.featureFlags.isFeatureEnabled(survey.linked_flag_key)\n : true\n const targetingFlagCheck = survey.targeting_flag_key\n ? this.instance.featureFlags.isFeatureEnabled(survey.targeting_flag_key)\n : true\n\n const hasEvents =\n survey.conditions?.events &&\n survey.conditions?.events?.values &&\n survey.conditions?.events?.values.length > 0\n\n const hasActions =\n survey.conditions?.actions &&\n survey.conditions?.actions?.values &&\n survey.conditions?.actions?.values.length > 0\n const eventBasedTargetingFlagCheck =\n hasEvents || hasActions ? activatedSurveys?.includes(survey.id) : true\n\n const overrideInternalTargetingFlagCheck = this._canActivateRepeatedly(survey)\n const internalTargetingFlagCheck =\n survey.internal_targeting_flag_key && !overrideInternalTargetingFlagCheck\n ? this.instance.featureFlags.isFeatureEnabled(survey.internal_targeting_flag_key)\n : true\n\n return (\n linkedFlagCheck && targetingFlagCheck && internalTargetingFlagCheck && eventBasedTargetingFlagCheck\n )\n })\n\n return callback(targetingMatchedSurveys)\n }, forceReload)\n }\n\n getNextSurveyStep(survey: Survey, currentQuestionIndex: number, response: string | string[] | number | null) {\n const question = survey.questions[currentQuestionIndex]\n const nextQuestionIndex = currentQuestionIndex + 1\n\n if (!question.branching?.type) {\n if (currentQuestionIndex === survey.questions.length - 1) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n\n if (question.branching.type === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n } else if (question.branching.type === SurveyQuestionBranchingType.SpecificQuestion) {\n if (Number.isInteger(question.branching.index)) {\n return question.branching.index\n }\n } else if (question.branching.type === SurveyQuestionBranchingType.ResponseBased) {\n // Single choice\n if (question.type === SurveyQuestionType.SingleChoice) {\n // :KLUDGE: for now, look up the choiceIndex based on the response\n // TODO: once QuestionTypes.MultipleChoiceQuestion is refactored, pass the selected choiceIndex into this method\n const selectedChoiceIndex = question.choices.indexOf(`${response}`)\n\n if (question.branching?.responseValues?.hasOwnProperty(selectedChoiceIndex)) {\n const nextStep = question.branching.responseValues[selectedChoiceIndex]\n\n // Specific question\n if (Number.isInteger(nextStep)) {\n return nextStep\n }\n\n if (nextStep === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n } else if (question.type === SurveyQuestionType.Rating) {\n if (typeof response !== 'number' || !Number.isInteger(response)) {\n throw new Error('The response type must be an integer')\n }\n\n const ratingBucket = getRatingBucketForResponseValue(response, question.scale)\n\n if (question.branching?.responseValues?.hasOwnProperty(ratingBucket)) {\n const nextStep = question.branching.responseValues[ratingBucket]\n\n // Specific question\n if (Number.isInteger(nextStep)) {\n return nextStep\n }\n\n if (nextStep === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n }\n\n return nextQuestionIndex\n }\n\n logger.warn(LOGGER_PREFIX, 'Falling back to next question index due to unexpected branching type')\n return nextQuestionIndex\n }\n\n // this method is lazily loaded onto the window to avoid loading preact and other dependencies if surveys is not enabled\n private _canActivateRepeatedly(survey: Survey) {\n if (isNullish(assignableWindow.__PosthogExtensions__.canActivateRepeatedly)) {\n logger.warn(LOGGER_PREFIX, 'canActivateRepeatedly is not defined, must init before calling')\n }\n return assignableWindow.__PosthogExtensions__.canActivateRepeatedly(survey)\n }\n\n canRenderSurvey(surveyId: string) {\n if (isNullish(this._surveyManager)) {\n logger.warn(LOGGER_PREFIX, 'canActivateRepeatedly is not defined, must init before calling')\n return\n }\n this.getSurveys((surveys) => {\n const survey = surveys.filter((x) => x.id === surveyId)[0]\n\n this._surveyManager.canRenderSurvey(survey)\n })\n }\n\n renderSurvey(surveyId: string, selector: string) {\n if (isNullish(this._surveyManager)) {\n logger.warn(LOGGER_PREFIX, 'canActivateRepeatedly is not defined, must init before calling')\n return\n }\n this.getSurveys((surveys) => {\n const survey = surveys.filter((x) => x.id === surveyId)[0]\n\n this._surveyManager.renderSurvey(survey, document?.querySelector(selector))\n })\n }\n}\n"]}
1
+ {"version":3,"file":"posthog-surveys.js","sourceRoot":"","sources":["../../src/posthog-surveys.ts"],"names":[],"mappings":"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","sourcesContent":["import { PostHog } from './posthog-core'\nimport { SURVEYS } from './constants'\nimport {\n Survey,\n SurveyCallback,\n SurveyQuestionBranchingType,\n SurveyQuestionType,\n SurveyUrlMatchType,\n} from './posthog-surveys-types'\nimport { isUrlMatchingRegex } from './utils/request-utils'\nimport { SurveyEventReceiver } from './utils/survey-event-receiver'\nimport { assignableWindow, document, window } from './utils/globals'\nimport { DecideResponse } from './types'\nimport { logger } from './utils/logger'\nimport { isNullish } from './utils/type-utils'\n\nconst LOGGER_PREFIX = '[Surveys]'\n\nexport const surveyUrlValidationMap: Record<SurveyUrlMatchType, (conditionsUrl: string) => boolean> = {\n icontains: (conditionsUrl) =>\n !!window && window.location.href.toLowerCase().indexOf(conditionsUrl.toLowerCase()) > -1,\n not_icontains: (conditionsUrl) =>\n !!window && window.location.href.toLowerCase().indexOf(conditionsUrl.toLowerCase()) === -1,\n regex: (conditionsUrl) => !!window && isUrlMatchingRegex(window.location.href, conditionsUrl),\n not_regex: (conditionsUrl) => !!window && !isUrlMatchingRegex(window.location.href, conditionsUrl),\n exact: (conditionsUrl) => window?.location.href === conditionsUrl,\n is_not: (conditionsUrl) => window?.location.href !== conditionsUrl,\n}\n\nfunction getRatingBucketForResponseValue(responseValue: number, scale: number) {\n if (scale === 3) {\n if (responseValue < 1 || responseValue > 3) {\n throw new Error('The response must be in range 1-3')\n }\n\n return responseValue === 1 ? 'negative' : responseValue === 2 ? 'neutral' : 'positive'\n } else if (scale === 5) {\n if (responseValue < 1 || responseValue > 5) {\n throw new Error('The response must be in range 1-5')\n }\n\n return responseValue <= 2 ? 'negative' : responseValue === 3 ? 'neutral' : 'positive'\n } else if (scale === 10) {\n if (responseValue < 0 || responseValue > 10) {\n throw new Error('The response must be in range 0-10')\n }\n\n return responseValue <= 6 ? 'detractors' : responseValue <= 8 ? 'passives' : 'promoters'\n }\n\n throw new Error('The scale must be one of: 3, 5, 10')\n}\n\nexport class PostHogSurveys {\n private _decideServerResponse?: boolean\n public _surveyEventReceiver: SurveyEventReceiver | null\n private _surveyManager: any\n\n constructor(private readonly instance: PostHog) {\n // we set this to undefined here because we need the persistence storage for this type\n // but that's not initialized until loadIfEnabled is called.\n this._surveyEventReceiver = null\n }\n\n afterDecideResponse(response: DecideResponse) {\n this._decideServerResponse = !!response['surveys']\n this.loadIfEnabled()\n }\n\n loadIfEnabled() {\n const surveysGenerator = assignableWindow?.extendPostHogWithSurveys\n\n if (!this.instance.config.disable_surveys && this._decideServerResponse && !surveysGenerator) {\n if (this._surveyEventReceiver == null) {\n this._surveyEventReceiver = new SurveyEventReceiver(this.instance)\n }\n this.instance.requestRouter.loadScript('/static/surveys.js', (err) => {\n if (err) {\n return logger.error(LOGGER_PREFIX, 'Could not load surveys script', err)\n }\n\n this._surveyManager = assignableWindow.extendPostHogWithSurveys(this.instance)\n })\n }\n }\n\n getSurveys(callback: SurveyCallback, forceReload = false) {\n // In case we manage to load the surveys script, but config says not to load surveys\n // then we shouldn't return survey data\n if (this.instance.config.disable_surveys) {\n return callback([])\n }\n\n if (this._surveyEventReceiver == null) {\n this._surveyEventReceiver = new SurveyEventReceiver(this.instance)\n }\n\n const existingSurveys = this.instance.get_property(SURVEYS)\n if (!existingSurveys || forceReload) {\n this.instance._send_request({\n url: this.instance.requestRouter.endpointFor(\n 'api',\n `/api/surveys/?token=${this.instance.config.token}`\n ),\n method: 'GET',\n transport: 'XHR',\n callback: (response) => {\n if (response.statusCode !== 200 || !response.json) {\n return callback([])\n }\n const surveys = response.json.surveys || []\n\n const eventOrActionBasedSurveys = surveys.filter(\n (survey: Survey) =>\n (survey.conditions?.events &&\n survey.conditions?.events?.values &&\n survey.conditions?.events?.values?.length > 0) ||\n (survey.conditions?.actions &&\n survey.conditions?.actions?.values &&\n survey.conditions?.actions?.values?.length > 0)\n )\n\n if (eventOrActionBasedSurveys.length > 0) {\n this._surveyEventReceiver?.register(eventOrActionBasedSurveys)\n }\n\n this.instance.persistence?.register({ [SURVEYS]: surveys })\n return callback(surveys)\n },\n })\n } else {\n return callback(existingSurveys)\n }\n }\n\n getActiveMatchingSurveys(callback: SurveyCallback, forceReload = false) {\n this.getSurveys((surveys) => {\n const activeSurveys = surveys.filter((survey) => {\n return !!(survey.start_date && !survey.end_date)\n })\n\n const conditionMatchedSurveys = activeSurveys.filter((survey) => {\n if (!survey.conditions) {\n return true\n }\n\n // use urlMatchType to validate url condition, fallback to contains for backwards compatibility\n const urlCheck = survey.conditions?.url\n ? surveyUrlValidationMap[survey.conditions?.urlMatchType ?? 'icontains'](survey.conditions.url)\n : true\n const selectorCheck = survey.conditions?.selector\n ? document?.querySelector(survey.conditions.selector)\n : true\n return urlCheck && selectorCheck\n })\n\n // get all the surveys that have been activated so far with user actions.\n const activatedSurveys: string[] | undefined = this._surveyEventReceiver?.getSurveys()\n const targetingMatchedSurveys = conditionMatchedSurveys.filter((survey) => {\n if (!survey.linked_flag_key && !survey.targeting_flag_key && !survey.internal_targeting_flag_key) {\n return true\n }\n const linkedFlagCheck = survey.linked_flag_key\n ? this.instance.featureFlags.isFeatureEnabled(survey.linked_flag_key)\n : true\n const targetingFlagCheck = survey.targeting_flag_key\n ? this.instance.featureFlags.isFeatureEnabled(survey.targeting_flag_key)\n : true\n\n const hasEvents =\n survey.conditions?.events &&\n survey.conditions?.events?.values &&\n survey.conditions?.events?.values.length > 0\n\n const hasActions =\n survey.conditions?.actions &&\n survey.conditions?.actions?.values &&\n survey.conditions?.actions?.values.length > 0\n const eventBasedTargetingFlagCheck =\n hasEvents || hasActions ? activatedSurveys?.includes(survey.id) : true\n\n const overrideInternalTargetingFlagCheck = this._canActivateRepeatedly(survey)\n const internalTargetingFlagCheck =\n survey.internal_targeting_flag_key && !overrideInternalTargetingFlagCheck\n ? this.instance.featureFlags.isFeatureEnabled(survey.internal_targeting_flag_key)\n : true\n\n return (\n linkedFlagCheck && targetingFlagCheck && internalTargetingFlagCheck && eventBasedTargetingFlagCheck\n )\n })\n\n return callback(targetingMatchedSurveys)\n }, forceReload)\n }\n\n getNextSurveyStep(survey: Survey, currentQuestionIndex: number, response: string | string[] | number | null) {\n const question = survey.questions[currentQuestionIndex]\n const nextQuestionIndex = currentQuestionIndex + 1\n\n if (!question.branching?.type) {\n if (currentQuestionIndex === survey.questions.length - 1) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n\n if (question.branching.type === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n } else if (question.branching.type === SurveyQuestionBranchingType.SpecificQuestion) {\n if (Number.isInteger(question.branching.index)) {\n return question.branching.index\n }\n } else if (question.branching.type === SurveyQuestionBranchingType.ResponseBased) {\n // Single choice\n if (question.type === SurveyQuestionType.SingleChoice) {\n // :KLUDGE: for now, look up the choiceIndex based on the response\n // TODO: once QuestionTypes.MultipleChoiceQuestion is refactored, pass the selected choiceIndex into this method\n const selectedChoiceIndex = question.choices.indexOf(`${response}`)\n\n if (question.branching?.responseValues?.hasOwnProperty(selectedChoiceIndex)) {\n const nextStep = question.branching.responseValues[selectedChoiceIndex]\n\n // Specific question\n if (Number.isInteger(nextStep)) {\n return nextStep\n }\n\n if (nextStep === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n } else if (question.type === SurveyQuestionType.Rating) {\n if (typeof response !== 'number' || !Number.isInteger(response)) {\n throw new Error('The response type must be an integer')\n }\n\n const ratingBucket = getRatingBucketForResponseValue(response, question.scale)\n\n if (question.branching?.responseValues?.hasOwnProperty(ratingBucket)) {\n const nextStep = question.branching.responseValues[ratingBucket]\n\n // Specific question\n if (Number.isInteger(nextStep)) {\n return nextStep\n }\n\n if (nextStep === SurveyQuestionBranchingType.End) {\n return SurveyQuestionBranchingType.End\n }\n\n return nextQuestionIndex\n }\n }\n\n return nextQuestionIndex\n }\n\n logger.warn(LOGGER_PREFIX, 'Falling back to next question index due to unexpected branching type')\n return nextQuestionIndex\n }\n\n // this method is lazily loaded onto the window to avoid loading preact and other dependencies if surveys is not enabled\n private _canActivateRepeatedly(survey: Survey) {\n if (isNullish(assignableWindow.__PosthogExtensions__.canActivateRepeatedly)) {\n logger.warn(LOGGER_PREFIX, 'canActivateRepeatedly is not defined, must init before calling')\n }\n return assignableWindow.__PosthogExtensions__.canActivateRepeatedly(survey)\n }\n\n canRenderSurvey(surveyId: string) {\n if (isNullish(this._surveyManager)) {\n logger.warn(LOGGER_PREFIX, 'canActivateRepeatedly is not defined, must init before calling')\n return\n }\n this.getSurveys((surveys) => {\n const survey = surveys.filter((x) => x.id === surveyId)[0]\n\n this._surveyManager.canRenderSurvey(survey)\n })\n }\n\n renderSurvey(surveyId: string, selector: string) {\n if (isNullish(this._surveyManager)) {\n logger.warn(LOGGER_PREFIX, 'canActivateRepeatedly is not defined, must init before calling')\n return\n }\n this.getSurveys((surveys) => {\n const survey = surveys.filter((x) => x.id === surveyId)[0]\n\n this._surveyManager.renderSurvey(survey, document?.querySelector(selector))\n })\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/rate-limiter.ts"],"names":[],"mappings":"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","sourcesContent":["import { CAPTURE_RATE_LIMIT } from './constants'\nimport type { PostHog } from './posthog-core'\nimport { RequestResponse } from './types'\nimport { logger } from './utils/logger'\n\nconst ONE_MINUTE_IN_MILLISECONDS = 60 * 1000\nconst RATE_LIMIT_EVENT = '$$client_ingestion_warning'\n\ninterface CaptureResponse {\n quota_limited?: string[]\n}\n\nexport class RateLimiter {\n instance: PostHog\n serverLimits: Record<string, number> = {}\n\n captureEventsPerSecond: number\n captureEventsBurstLimit: number\n lastEventRateLimited = false\n\n constructor(instance: PostHog) {\n this.instance = instance\n\n this.captureEventsPerSecond = instance.config.rate_limiting?.events_per_second || 10\n this.captureEventsBurstLimit = Math.max(\n instance.config.rate_limiting?.events_burst_limit || this.captureEventsPerSecond * 10,\n this.captureEventsPerSecond\n )\n\n this.lastEventRateLimited = this.clientRateLimitContext(true).isRateLimited\n }\n\n public clientRateLimitContext(checkOnly = false): {\n isRateLimited: boolean\n remainingTokens: number\n } {\n // This is primarily to prevent runaway loops from flooding capture with millions of events for a single user.\n // It's as much for our protection as theirs.\n const now = new Date().getTime()\n const bucket = this.instance.persistence?.get_property(CAPTURE_RATE_LIMIT) ?? {\n tokens: this.captureEventsBurstLimit,\n last: now,\n }\n\n bucket.tokens += ((now - bucket.last) / 1000) * this.captureEventsPerSecond\n bucket.last = now\n\n if (bucket.tokens > this.captureEventsBurstLimit) {\n bucket.tokens = this.captureEventsBurstLimit\n }\n\n const isRateLimited = bucket.tokens < 1\n\n if (!isRateLimited && !checkOnly) {\n bucket.tokens = Math.max(0, bucket.tokens - 1)\n }\n\n if (isRateLimited && !this.lastEventRateLimited && !checkOnly) {\n this.instance.capture(\n RATE_LIMIT_EVENT,\n {\n $$client_ingestion_warning_message: `posthog-js client rate limited. Config is set to ${this.captureEventsPerSecond} events per second and ${this.captureEventsBurstLimit} events burst limit.`,\n },\n {\n skip_client_rate_limiting: true,\n }\n )\n }\n\n this.lastEventRateLimited = isRateLimited\n this.instance.persistence?.set_property(CAPTURE_RATE_LIMIT, bucket)\n\n return {\n isRateLimited,\n remainingTokens: bucket.tokens,\n }\n }\n\n public isServerRateLimited(batchKey: string | undefined): boolean {\n const retryAfter = this.serverLimits[batchKey || 'events'] || false\n\n if (retryAfter === false) {\n return false\n }\n return new Date().getTime() < retryAfter\n }\n\n public checkForLimiting = (httpResponse: RequestResponse): void => {\n const text = httpResponse.text\n\n if (!text || !text.length) {\n return\n }\n\n try {\n const response: CaptureResponse = JSON.parse(text)\n const quotaLimitedProducts = response.quota_limited || []\n quotaLimitedProducts.forEach((batchKey) => {\n logger.info(`[RateLimiter] ${batchKey || 'events'} is quota limited.`)\n this.serverLimits[batchKey] = new Date().getTime() + ONE_MINUTE_IN_MILLISECONDS\n })\n } catch (e: any) {\n logger.warn(`[RateLimiter] could not rate limit - continuing. Error: \"${e?.message}\"`, { text })\n return\n }\n }\n}\n"]}
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/rate-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,IAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAA;AAC5C,IAAM,gBAAgB,GAAG,4BAA4B,CAAA;AAMrD;IAQI,qBAAY,QAAiB;QAA7B,iBAUC;;QAhBD,iBAAY,GAA2B,EAAE,CAAA;QAIzC,yBAAoB,GAAG,KAAK,CAAA;QAqErB,qBAAgB,GAAG,UAAC,YAA6B;YACpD,IAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAA;YAE9B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACxB,OAAM;YACV,CAAC;YAED,IAAI,CAAC;gBACD,IAAM,QAAQ,GAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAClD,IAAM,oBAAoB,GAAG,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAA;gBACzD,oBAAoB,CAAC,OAAO,CAAC,UAAC,QAAQ;oBAClC,MAAM,CAAC,IAAI,CAAC,wBAAiB,QAAQ,IAAI,QAAQ,uBAAoB,CAAC,CAAA;oBACtE,KAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,0BAA0B,CAAA;gBACnF,CAAC,CAAC,CAAA;YACN,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,oEAA4D,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,OAAG,EAAE,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;gBAChG,OAAM;YACV,CAAC;QACL,CAAC,CAAA;QApFG,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAExB,IAAI,CAAC,sBAAsB,GAAG,CAAA,MAAA,QAAQ,CAAC,MAAM,CAAC,aAAa,0CAAE,iBAAiB,KAAI,EAAE,CAAA;QACpF,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,GAAG,CACnC,CAAA,MAAA,QAAQ,CAAC,MAAM,CAAC,aAAa,0CAAE,kBAAkB,KAAI,IAAI,CAAC,sBAAsB,GAAG,EAAE,EACrF,IAAI,CAAC,sBAAsB,CAC9B,CAAA;QAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,aAAa,CAAA;IAC/E,CAAC;IAEM,4CAAsB,GAA7B,UAA8B,SAAiB;;QAAjB,0BAAA,EAAA,iBAAiB;QAI3C,8GAA8G;QAC9G,6CAA6C;QAC7C,IAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QAChC,IAAM,MAAM,GAAG,MAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,YAAY,CAAC,kBAAkB,CAAC,mCAAI;YAC1E,MAAM,EAAE,IAAI,CAAC,uBAAuB;YACpC,IAAI,EAAE,GAAG;SACZ,CAAA;QAED,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAA;QAC3E,MAAM,CAAC,IAAI,GAAG,GAAG,CAAA;QAEjB,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAA;QAChD,CAAC;QAED,IAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;QAEvC,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAClD,CAAC;QAED,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5D,IAAI,CAAC,QAAQ,CAAC,OAAO,CACjB,gBAAgB,EAChB;gBACI,kCAAkC,EAAE,2DAAoD,IAAI,CAAC,sBAAsB,oCAA0B,IAAI,CAAC,uBAAuB,yBAAsB;aAClM,EACD;gBACI,yBAAyB,EAAE,IAAI;aAClC,CACJ,CAAA;QACL,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,aAAa,CAAA;QACzC,MAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAA;QAEnE,OAAO;YACH,aAAa,eAAA;YACb,eAAe,EAAE,MAAM,CAAC,MAAM;SACjC,CAAA;IACL,CAAC;IAEM,yCAAmB,GAA1B,UAA2B,QAA4B;QACnD,IAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAA;QAEnE,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YACvB,OAAO,KAAK,CAAA;QAChB,CAAC;QACD,OAAO,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,UAAU,CAAA;IAC5C,CAAC;IAqBL,kBAAC;AAAD,CAAC,AA9FD,IA8FC","sourcesContent":["import { CAPTURE_RATE_LIMIT } from './constants'\nimport type { PostHog } from './posthog-core'\nimport { RequestResponse } from './types'\nimport { logger } from './utils/logger'\n\nconst ONE_MINUTE_IN_MILLISECONDS = 60 * 1000\nconst RATE_LIMIT_EVENT = '$$client_ingestion_warning'\n\ninterface CaptureResponse {\n quota_limited?: string[]\n}\n\nexport class RateLimiter {\n instance: PostHog\n serverLimits: Record<string, number> = {}\n\n captureEventsPerSecond: number\n captureEventsBurstLimit: number\n lastEventRateLimited = false\n\n constructor(instance: PostHog) {\n this.instance = instance\n\n this.captureEventsPerSecond = instance.config.rate_limiting?.events_per_second || 10\n this.captureEventsBurstLimit = Math.max(\n instance.config.rate_limiting?.events_burst_limit || this.captureEventsPerSecond * 10,\n this.captureEventsPerSecond\n )\n\n this.lastEventRateLimited = this.clientRateLimitContext(true).isRateLimited\n }\n\n public clientRateLimitContext(checkOnly = false): {\n isRateLimited: boolean\n remainingTokens: number\n } {\n // This is primarily to prevent runaway loops from flooding capture with millions of events for a single user.\n // It's as much for our protection as theirs.\n const now = new Date().getTime()\n const bucket = this.instance.persistence?.get_property(CAPTURE_RATE_LIMIT) ?? {\n tokens: this.captureEventsBurstLimit,\n last: now,\n }\n\n bucket.tokens += ((now - bucket.last) / 1000) * this.captureEventsPerSecond\n bucket.last = now\n\n if (bucket.tokens > this.captureEventsBurstLimit) {\n bucket.tokens = this.captureEventsBurstLimit\n }\n\n const isRateLimited = bucket.tokens < 1\n\n if (!isRateLimited && !checkOnly) {\n bucket.tokens = Math.max(0, bucket.tokens - 1)\n }\n\n if (isRateLimited && !this.lastEventRateLimited && !checkOnly) {\n this.instance.capture(\n RATE_LIMIT_EVENT,\n {\n $$client_ingestion_warning_message: `posthog-js client rate limited. Config is set to ${this.captureEventsPerSecond} events per second and ${this.captureEventsBurstLimit} events burst limit.`,\n },\n {\n skip_client_rate_limiting: true,\n }\n )\n }\n\n this.lastEventRateLimited = isRateLimited\n this.instance.persistence?.set_property(CAPTURE_RATE_LIMIT, bucket)\n\n return {\n isRateLimited,\n remainingTokens: bucket.tokens,\n }\n }\n\n public isServerRateLimited(batchKey: string | undefined): boolean {\n const retryAfter = this.serverLimits[batchKey || 'events'] || false\n\n if (retryAfter === false) {\n return false\n }\n return new Date().getTime() < retryAfter\n }\n\n public checkForLimiting = (httpResponse: RequestResponse): void => {\n const text = httpResponse.text\n\n if (!text || !text.length) {\n return\n }\n\n try {\n const response: CaptureResponse = JSON.parse(text)\n const quotaLimitedProducts = response.quota_limited || []\n quotaLimitedProducts.forEach((batchKey) => {\n logger.info(`[RateLimiter] ${batchKey || 'events'} is quota limited.`)\n this.serverLimits[batchKey] = new Date().getTime() + ONE_MINUTE_IN_MILLISECONDS\n })\n } catch (e: any) {\n logger.warn(`[RateLimiter] could not rate limit - continuing. Error: \"${e?.message}\"`, { text })\n return\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"request-queue.js","sourceRoot":"","sources":["../../src/request-queue.ts"],"names":[],"mappings":"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","sourcesContent":["import { QueuedRequestOptions } from './types'\nimport { each } from './utils'\n\nimport { isArray, isUndefined } from './utils/type-utils'\n\nexport class RequestQueue {\n // We start in a paused state and only start flushing when enabled by the parent\n private isPaused: boolean = true\n private queue: QueuedRequestOptions[] = []\n private flushTimeout?: ReturnType<typeof setTimeout>\n private flushTimeoutMs = 3000\n private sendRequest: (req: QueuedRequestOptions) => void\n\n constructor(sendRequest: (req: QueuedRequestOptions) => void) {\n this.sendRequest = sendRequest\n }\n\n enqueue(req: QueuedRequestOptions): void {\n this.queue.push(req)\n\n if (!this.flushTimeout) {\n this.setFlushTimeout()\n }\n }\n\n unload(): void {\n this.clearFlushTimeout()\n const requests = this.queue.length > 0 ? this.formatQueue() : {}\n const requestValues = Object.values(requests)\n\n // Always force events to be sent before recordings, as events are more important, and recordings are bigger and thus less likely to arrive\n const sortedRequests = [\n ...requestValues.filter((r) => r.url.indexOf('/e') === 0),\n ...requestValues.filter((r) => r.url.indexOf('/e') !== 0),\n ]\n sortedRequests.map((req) => {\n this.sendRequest({ ...req, transport: 'sendBeacon' })\n })\n }\n\n enable(): void {\n this.isPaused = false\n this.setFlushTimeout()\n }\n\n private setFlushTimeout(): void {\n if (this.isPaused) {\n return\n }\n this.flushTimeout = setTimeout(() => {\n this.clearFlushTimeout()\n if (this.queue.length > 0) {\n const requests = this.formatQueue()\n for (const key in requests) {\n const req = requests[key]\n const now = new Date().getTime()\n\n if (req.data && isArray(req.data)) {\n each(req.data, (data) => {\n data['offset'] = Math.abs(data['timestamp'] - now)\n delete data['timestamp']\n })\n }\n this.sendRequest(req)\n }\n }\n }, this.flushTimeoutMs)\n }\n\n private clearFlushTimeout(): void {\n clearTimeout(this.flushTimeout)\n this.flushTimeout = undefined\n }\n\n private formatQueue(): Record<string, QueuedRequestOptions> {\n const requests: Record<string, QueuedRequestOptions> = {}\n each(this.queue, (request: QueuedRequestOptions) => {\n const req = request\n const key = (req ? req.batchKey : null) || req.url\n if (isUndefined(requests[key])) {\n // TODO: What about this -it seems to batch data into an array - do we always want that?\n requests[key] = { ...req, data: [] }\n }\n\n requests[key].data?.push(req.data)\n })\n\n this.queue = []\n return requests\n }\n}\n"]}
1
+ {"version":3,"file":"request-queue.js","sourceRoot":"","sources":["../../src/request-queue.ts"],"names":[],"mappings":"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","sourcesContent":["import { QueuedRequestOptions } from './types'\nimport { each } from './utils'\n\nimport { isArray, isUndefined } from './utils/type-utils'\n\nexport class RequestQueue {\n // We start in a paused state and only start flushing when enabled by the parent\n private isPaused: boolean = true\n private queue: QueuedRequestOptions[] = []\n private flushTimeout?: ReturnType<typeof setTimeout>\n private flushTimeoutMs = 3000\n private sendRequest: (req: QueuedRequestOptions) => void\n\n constructor(sendRequest: (req: QueuedRequestOptions) => void) {\n this.sendRequest = sendRequest\n }\n\n enqueue(req: QueuedRequestOptions): void {\n this.queue.push(req)\n\n if (!this.flushTimeout) {\n this.setFlushTimeout()\n }\n }\n\n unload(): void {\n this.clearFlushTimeout()\n const requests = this.queue.length > 0 ? this.formatQueue() : {}\n const requestValues = Object.values(requests)\n\n // Always force events to be sent before recordings, as events are more important, and recordings are bigger and thus less likely to arrive\n const sortedRequests = [\n ...requestValues.filter((r) => r.url.indexOf('/e') === 0),\n ...requestValues.filter((r) => r.url.indexOf('/e') !== 0),\n ]\n sortedRequests.map((req) => {\n this.sendRequest({ ...req, transport: 'sendBeacon' })\n })\n }\n\n enable(): void {\n this.isPaused = false\n this.setFlushTimeout()\n }\n\n private setFlushTimeout(): void {\n if (this.isPaused) {\n return\n }\n this.flushTimeout = setTimeout(() => {\n this.clearFlushTimeout()\n if (this.queue.length > 0) {\n const requests = this.formatQueue()\n for (const key in requests) {\n const req = requests[key]\n const now = new Date().getTime()\n\n if (req.data && isArray(req.data)) {\n each(req.data, (data) => {\n data['offset'] = Math.abs(data['timestamp'] - now)\n delete data['timestamp']\n })\n }\n this.sendRequest(req)\n }\n }\n }, this.flushTimeoutMs)\n }\n\n private clearFlushTimeout(): void {\n clearTimeout(this.flushTimeout)\n this.flushTimeout = undefined\n }\n\n private formatQueue(): Record<string, QueuedRequestOptions> {\n const requests: Record<string, QueuedRequestOptions> = {}\n each(this.queue, (request: QueuedRequestOptions) => {\n const req = request\n const key = (req ? req.batchKey : null) || req.url\n if (isUndefined(requests[key])) {\n // TODO: What about this -it seems to batch data into an array - do we always want that?\n requests[key] = { ...req, data: [] }\n }\n\n requests[key].data?.push(req.data)\n })\n\n this.queue = []\n return requests\n }\n}\n"]}
@@ -104,7 +104,7 @@ var xhr = function (options) {
104
104
  try {
105
105
  response.json = JSON.parse(req.responseText);
106
106
  }
107
- catch (e) {
107
+ catch (_b) {
108
108
  // logger.error(e)
109
109
  }
110
110
  }
@@ -179,7 +179,7 @@ var _sendBeacon = function (options) {
179
179
  var sendBeaconBody = typeof body === 'string' ? new Blob([body], { type: contentType }) : body;
180
180
  navigator.sendBeacon(url, sendBeaconBody);
181
181
  }
182
- catch (e) {
182
+ catch (_c) {
183
183
  // send beacon is a best-effort, fire-and-forget mechanism on page unload,
184
184
  // we don't want to throw errors here
185
185
  }
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":"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","sourcesContent":["import { _base64Encode, each, find } from './utils'\nimport Config from './config'\nimport { Compression, RequestOptions, RequestResponse } from './types'\nimport { formDataToQuery } from './utils/request-utils'\n\nimport { logger } from './utils/logger'\nimport { fetch, XMLHttpRequest, AbortController, navigator } from './utils/globals'\nimport { gzipSync, strToU8 } from 'fflate'\n\n// eslint-disable-next-line compat/compat\nexport const SUPPORTS_REQUEST = !!XMLHttpRequest || !!fetch\n\nconst CONTENT_TYPE_PLAIN = 'text/plain'\nconst CONTENT_TYPE_JSON = 'application/json'\nconst CONTENT_TYPE_FORM = 'application/x-www-form-urlencoded'\n\ntype EncodedBody = {\n contentType: string\n body: string | BlobPart\n}\n\nexport const extendURLParams = (url: string, params: Record<string, any>): string => {\n const [baseUrl, search] = url.split('?')\n const newParams = { ...params }\n\n search?.split('&').forEach((pair) => {\n const [key] = pair.split('=')\n delete newParams[key]\n })\n\n let newSearch = formDataToQuery(newParams)\n newSearch = newSearch ? (search ? search + '&' : '') + newSearch : search\n\n return `${baseUrl}?${newSearch}`\n}\n\nconst encodeToDataString = (data: string | Record<string, any>): string => {\n return 'data=' + encodeURIComponent(typeof data === 'string' ? data : JSON.stringify(data))\n}\n\nconst encodePostData = ({ data, compression }: RequestOptions): EncodedBody | undefined => {\n if (!data) {\n return\n }\n\n if (compression === Compression.GZipJS) {\n const gzipData = gzipSync(strToU8(JSON.stringify(data)), { mtime: 0 })\n return {\n contentType: CONTENT_TYPE_PLAIN,\n body: new Blob([gzipData], { type: CONTENT_TYPE_PLAIN }),\n }\n }\n\n if (compression === Compression.Base64) {\n const b64data = _base64Encode(JSON.stringify(data))\n\n return {\n contentType: CONTENT_TYPE_FORM,\n body: encodeToDataString(b64data),\n }\n }\n\n return {\n contentType: CONTENT_TYPE_JSON,\n body: JSON.stringify(data),\n }\n}\n\nconst xhr = (options: RequestOptions) => {\n const req = new XMLHttpRequest!()\n req.open(options.method || 'GET', options.url, true)\n const { contentType, body } = encodePostData(options) ?? {}\n\n each(options.headers, function (headerValue, headerName) {\n req.setRequestHeader(headerName, headerValue)\n })\n\n if (contentType) {\n req.setRequestHeader('Content-Type', contentType)\n }\n\n if (options.timeout) {\n req.timeout = options.timeout\n }\n // send the ph_optout cookie\n // withCredentials cannot be modified until after calling .open on Android and Mobile Safari\n req.withCredentials = true\n req.onreadystatechange = () => {\n // XMLHttpRequest.DONE == 4, except in safari 4\n if (req.readyState === 4) {\n const response: RequestResponse = {\n statusCode: req.status,\n text: req.responseText,\n }\n if (req.status === 200) {\n try {\n response.json = JSON.parse(req.responseText)\n } catch (e) {\n // logger.error(e)\n }\n }\n\n options.callback?.(response)\n }\n }\n req.send(body)\n}\n\nconst _fetch = (options: RequestOptions) => {\n const { contentType, body } = encodePostData(options) ?? {}\n\n // eslint-disable-next-line compat/compat\n const headers = new Headers()\n each(options.headers, function (headerValue, headerName) {\n headers.append(headerName, headerValue)\n })\n\n if (contentType) {\n headers.append('Content-Type', contentType)\n }\n\n const url = options.url\n let aborter: { signal: any; timeout: ReturnType<typeof setTimeout> } | null = null\n\n if (AbortController) {\n const controller = new AbortController()\n aborter = {\n signal: controller.signal,\n timeout: setTimeout(() => controller.abort(), options.timeout),\n }\n }\n\n fetch!(url, {\n method: options?.method || 'GET',\n headers,\n keepalive: options.method === 'POST',\n body,\n signal: aborter?.signal,\n })\n .then((response) => {\n return response.text().then((responseText) => {\n const res: RequestResponse = {\n statusCode: response.status,\n text: responseText,\n }\n\n if (response.status === 200) {\n try {\n res.json = JSON.parse(responseText)\n } catch (e) {\n logger.error(e)\n }\n }\n\n options.callback?.(res)\n })\n })\n .catch((error) => {\n logger.error(error)\n options.callback?.({ statusCode: 0, text: error })\n })\n .finally(() => (aborter ? clearTimeout(aborter.timeout) : null))\n\n return\n}\n\nconst _sendBeacon = (options: RequestOptions) => {\n // beacon documentation https://w3c.github.io/beacon/\n // beacons format the message and use the type property\n\n const url = extendURLParams(options.url, {\n beacon: '1',\n })\n\n try {\n const { contentType, body } = encodePostData(options) ?? {}\n // sendBeacon requires a blob so we convert it\n const sendBeaconBody = typeof body === 'string' ? new Blob([body], { type: contentType }) : body\n navigator!.sendBeacon!(url, sendBeaconBody)\n } catch (e) {\n // send beacon is a best-effort, fire-and-forget mechanism on page unload,\n // we don't want to throw errors here\n }\n}\n\nconst AVAILABLE_TRANSPORTS: { transport: RequestOptions['transport']; method: (options: RequestOptions) => void }[] = []\n\n// We add the transports in order of preference\n\nif (XMLHttpRequest) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'XHR',\n method: xhr,\n })\n}\n\nif (fetch) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'fetch',\n method: _fetch,\n })\n}\n\nif (navigator?.sendBeacon) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'sendBeacon',\n method: _sendBeacon,\n })\n}\n\n// This is the entrypoint. It takes care of sanitizing the options and then calls the appropriate request method.\nexport const request = (_options: RequestOptions) => {\n // Clone the options so we don't modify the original object\n const options = { ..._options }\n options.timeout = options.timeout || 60000\n\n options.url = extendURLParams(options.url, {\n _: new Date().getTime().toString(),\n ver: Config.LIB_VERSION,\n compression: options.compression,\n })\n\n const transport = options.transport ?? 'XHR'\n\n const transportMethod =\n find(AVAILABLE_TRANSPORTS, (t) => t.transport === transport)?.method ?? AVAILABLE_TRANSPORTS[0].method\n\n if (!transportMethod) {\n throw new Error('No available transport method')\n }\n\n transportMethod(options)\n}\n"]}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":"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","sourcesContent":["import { _base64Encode, each, find } from './utils'\nimport Config from './config'\nimport { Compression, RequestOptions, RequestResponse } from './types'\nimport { formDataToQuery } from './utils/request-utils'\n\nimport { logger } from './utils/logger'\nimport { fetch, XMLHttpRequest, AbortController, navigator } from './utils/globals'\nimport { gzipSync, strToU8 } from 'fflate'\n\n// eslint-disable-next-line compat/compat\nexport const SUPPORTS_REQUEST = !!XMLHttpRequest || !!fetch\n\nconst CONTENT_TYPE_PLAIN = 'text/plain'\nconst CONTENT_TYPE_JSON = 'application/json'\nconst CONTENT_TYPE_FORM = 'application/x-www-form-urlencoded'\n\ntype EncodedBody = {\n contentType: string\n body: string | BlobPart\n}\n\nexport const extendURLParams = (url: string, params: Record<string, any>): string => {\n const [baseUrl, search] = url.split('?')\n const newParams = { ...params }\n\n search?.split('&').forEach((pair) => {\n const [key] = pair.split('=')\n delete newParams[key]\n })\n\n let newSearch = formDataToQuery(newParams)\n newSearch = newSearch ? (search ? search + '&' : '') + newSearch : search\n\n return `${baseUrl}?${newSearch}`\n}\n\nconst encodeToDataString = (data: string | Record<string, any>): string => {\n return 'data=' + encodeURIComponent(typeof data === 'string' ? data : JSON.stringify(data))\n}\n\nconst encodePostData = ({ data, compression }: RequestOptions): EncodedBody | undefined => {\n if (!data) {\n return\n }\n\n if (compression === Compression.GZipJS) {\n const gzipData = gzipSync(strToU8(JSON.stringify(data)), { mtime: 0 })\n return {\n contentType: CONTENT_TYPE_PLAIN,\n body: new Blob([gzipData], { type: CONTENT_TYPE_PLAIN }),\n }\n }\n\n if (compression === Compression.Base64) {\n const b64data = _base64Encode(JSON.stringify(data))\n\n return {\n contentType: CONTENT_TYPE_FORM,\n body: encodeToDataString(b64data),\n }\n }\n\n return {\n contentType: CONTENT_TYPE_JSON,\n body: JSON.stringify(data),\n }\n}\n\nconst xhr = (options: RequestOptions) => {\n const req = new XMLHttpRequest!()\n req.open(options.method || 'GET', options.url, true)\n const { contentType, body } = encodePostData(options) ?? {}\n\n each(options.headers, function (headerValue, headerName) {\n req.setRequestHeader(headerName, headerValue)\n })\n\n if (contentType) {\n req.setRequestHeader('Content-Type', contentType)\n }\n\n if (options.timeout) {\n req.timeout = options.timeout\n }\n // send the ph_optout cookie\n // withCredentials cannot be modified until after calling .open on Android and Mobile Safari\n req.withCredentials = true\n req.onreadystatechange = () => {\n // XMLHttpRequest.DONE == 4, except in safari 4\n if (req.readyState === 4) {\n const response: RequestResponse = {\n statusCode: req.status,\n text: req.responseText,\n }\n if (req.status === 200) {\n try {\n response.json = JSON.parse(req.responseText)\n } catch {\n // logger.error(e)\n }\n }\n\n options.callback?.(response)\n }\n }\n req.send(body)\n}\n\nconst _fetch = (options: RequestOptions) => {\n const { contentType, body } = encodePostData(options) ?? {}\n\n // eslint-disable-next-line compat/compat\n const headers = new Headers()\n each(options.headers, function (headerValue, headerName) {\n headers.append(headerName, headerValue)\n })\n\n if (contentType) {\n headers.append('Content-Type', contentType)\n }\n\n const url = options.url\n let aborter: { signal: any; timeout: ReturnType<typeof setTimeout> } | null = null\n\n if (AbortController) {\n const controller = new AbortController()\n aborter = {\n signal: controller.signal,\n timeout: setTimeout(() => controller.abort(), options.timeout),\n }\n }\n\n fetch!(url, {\n method: options?.method || 'GET',\n headers,\n keepalive: options.method === 'POST',\n body,\n signal: aborter?.signal,\n })\n .then((response) => {\n return response.text().then((responseText) => {\n const res: RequestResponse = {\n statusCode: response.status,\n text: responseText,\n }\n\n if (response.status === 200) {\n try {\n res.json = JSON.parse(responseText)\n } catch (e) {\n logger.error(e)\n }\n }\n\n options.callback?.(res)\n })\n })\n .catch((error) => {\n logger.error(error)\n options.callback?.({ statusCode: 0, text: error })\n })\n .finally(() => (aborter ? clearTimeout(aborter.timeout) : null))\n\n return\n}\n\nconst _sendBeacon = (options: RequestOptions) => {\n // beacon documentation https://w3c.github.io/beacon/\n // beacons format the message and use the type property\n\n const url = extendURLParams(options.url, {\n beacon: '1',\n })\n\n try {\n const { contentType, body } = encodePostData(options) ?? {}\n // sendBeacon requires a blob so we convert it\n const sendBeaconBody = typeof body === 'string' ? new Blob([body], { type: contentType }) : body\n navigator!.sendBeacon!(url, sendBeaconBody)\n } catch {\n // send beacon is a best-effort, fire-and-forget mechanism on page unload,\n // we don't want to throw errors here\n }\n}\n\nconst AVAILABLE_TRANSPORTS: { transport: RequestOptions['transport']; method: (options: RequestOptions) => void }[] = []\n\n// We add the transports in order of preference\n\nif (XMLHttpRequest) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'XHR',\n method: xhr,\n })\n}\n\nif (fetch) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'fetch',\n method: _fetch,\n })\n}\n\nif (navigator?.sendBeacon) {\n AVAILABLE_TRANSPORTS.push({\n transport: 'sendBeacon',\n method: _sendBeacon,\n })\n}\n\n// This is the entrypoint. It takes care of sanitizing the options and then calls the appropriate request method.\nexport const request = (_options: RequestOptions) => {\n // Clone the options so we don't modify the original object\n const options = { ..._options }\n options.timeout = options.timeout || 60000\n\n options.url = extendURLParams(options.url, {\n _: new Date().getTime().toString(),\n ver: Config.LIB_VERSION,\n compression: options.compression,\n })\n\n const transport = options.transport ?? 'XHR'\n\n const transportMethod =\n find(AVAILABLE_TRANSPORTS, (t) => t.transport === transport)?.method ?? AVAILABLE_TRANSPORTS[0].method\n\n if (!transportMethod) {\n throw new Error('No available transport method')\n }\n\n transportMethod(options)\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"retry-queue.js","sourceRoot":"","sources":["../../src/retry-queue.ts"],"names":[],"mappings":"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","sourcesContent":["import { RetriableRequestOptions } from './types'\n\nimport { isNumber, isUndefined } from './utils/type-utils'\nimport { logger } from './utils/logger'\nimport { window } from './utils/globals'\nimport { PostHog } from './posthog-core'\nimport { extendURLParams } from './request'\n\nconst thirtyMinutes = 30 * 60 * 1000\n\n/**\n * Generates a jitter-ed exponential backoff delay in milliseconds\n *\n * The base value is 6 seconds, which is doubled with each retry\n * up to the maximum of 30 minutes\n *\n * Each value then has +/- 50% jitter\n *\n * Giving a range of 6 seconds up to 45 minutes\n */\nexport function pickNextRetryDelay(retriesPerformedSoFar: number): number {\n const rawBackoffTime = 3000 * 2 ** retriesPerformedSoFar\n const minBackoff = rawBackoffTime / 2\n const cappedBackoffTime = Math.min(thirtyMinutes, rawBackoffTime)\n const jitterFraction = Math.random() - 0.5 // A random number between -0.5 and 0.5\n const jitter = jitterFraction * (cappedBackoffTime - minBackoff)\n return Math.ceil(cappedBackoffTime + jitter)\n}\n\ninterface RetryQueueElement {\n retryAt: number\n requestOptions: RetriableRequestOptions\n}\n\nexport class RetryQueue {\n private isPolling: boolean = false // flag to continue to recursively poll or not\n private poller: number | undefined // to become interval for reference to clear later\n private pollIntervalMs: number = 3000\n private queue: RetryQueueElement[] = []\n private areWeOnline: boolean\n\n constructor(private instance: PostHog) {\n this.queue = []\n this.areWeOnline = true\n\n if (!isUndefined(window) && 'onLine' in window.navigator) {\n this.areWeOnline = window.navigator.onLine\n window.addEventListener('online', () => {\n this.areWeOnline = true\n this.flush()\n })\n window.addEventListener('offline', () => {\n this.areWeOnline = false\n })\n }\n }\n\n retriableRequest({ retriesPerformedSoFar, ...options }: RetriableRequestOptions): void {\n if (isNumber(retriesPerformedSoFar) && retriesPerformedSoFar > 0) {\n options.url = extendURLParams(options.url, { retry_count: retriesPerformedSoFar })\n }\n\n this.instance._send_request({\n ...options,\n callback: (response) => {\n if (response.statusCode !== 200 && (response.statusCode < 400 || response.statusCode >= 500)) {\n if ((retriesPerformedSoFar ?? 0) < 10) {\n this.enqueue({\n retriesPerformedSoFar,\n ...options,\n })\n return\n }\n }\n\n options.callback?.(response)\n },\n })\n }\n\n private enqueue(requestOptions: RetriableRequestOptions): void {\n const retriesPerformedSoFar = requestOptions.retriesPerformedSoFar || 0\n requestOptions.retriesPerformedSoFar = retriesPerformedSoFar + 1\n\n const msToNextRetry = pickNextRetryDelay(retriesPerformedSoFar)\n const retryAt = Date.now() + msToNextRetry\n\n this.queue.push({ retryAt, requestOptions })\n\n let logMessage = `Enqueued failed request for retry in ${msToNextRetry}`\n if (!navigator.onLine) {\n logMessage += ' (Browser is offline)'\n }\n logger.warn(logMessage)\n\n if (!this.isPolling) {\n this.isPolling = true\n this.poll()\n }\n }\n\n private poll(): void {\n this.poller && clearTimeout(this.poller)\n this.poller = setTimeout(() => {\n if (this.areWeOnline && this.queue.length > 0) {\n this.flush()\n }\n this.poll()\n }, this.pollIntervalMs) as any as number\n }\n\n private flush(): void {\n const now = Date.now()\n const notToFlush: RetryQueueElement[] = []\n const toFlush = this.queue.filter((item) => {\n if (item.retryAt < now) {\n return true\n }\n notToFlush.push(item)\n return false\n })\n\n this.queue = notToFlush\n\n if (toFlush.length > 0) {\n for (const { requestOptions } of toFlush) {\n this.retriableRequest(requestOptions)\n }\n }\n }\n\n unload(): void {\n if (this.poller) {\n clearTimeout(this.poller)\n this.poller = undefined\n }\n\n for (const { requestOptions } of this.queue) {\n try {\n // we've had send beacon in place for at least 2 years\n // eslint-disable-next-line compat/compat\n this.instance._send_request({\n ...requestOptions,\n transport: 'sendBeacon',\n })\n } catch (e) {\n // Note sendBeacon automatically retries, and after the first retry it will lose reference to contextual `this`.\n // This means in some cases `this.getConfig` will be undefined.\n logger.error(e)\n }\n }\n this.queue = []\n }\n}\n"]}
1
+ {"version":3,"file":"retry-queue.js","sourceRoot":"","sources":["../../src/retry-queue.ts"],"names":[],"mappings":"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","sourcesContent":["import { RetriableRequestOptions } from './types'\n\nimport { isNumber, isUndefined } from './utils/type-utils'\nimport { logger } from './utils/logger'\nimport { window } from './utils/globals'\nimport { PostHog } from './posthog-core'\nimport { extendURLParams } from './request'\n\nconst thirtyMinutes = 30 * 60 * 1000\n\n/**\n * Generates a jitter-ed exponential backoff delay in milliseconds\n *\n * The base value is 6 seconds, which is doubled with each retry\n * up to the maximum of 30 minutes\n *\n * Each value then has +/- 50% jitter\n *\n * Giving a range of 6 seconds up to 45 minutes\n */\nexport function pickNextRetryDelay(retriesPerformedSoFar: number): number {\n const rawBackoffTime = 3000 * 2 ** retriesPerformedSoFar\n const minBackoff = rawBackoffTime / 2\n const cappedBackoffTime = Math.min(thirtyMinutes, rawBackoffTime)\n const jitterFraction = Math.random() - 0.5 // A random number between -0.5 and 0.5\n const jitter = jitterFraction * (cappedBackoffTime - minBackoff)\n return Math.ceil(cappedBackoffTime + jitter)\n}\n\ninterface RetryQueueElement {\n retryAt: number\n requestOptions: RetriableRequestOptions\n}\n\nexport class RetryQueue {\n private isPolling: boolean = false // flag to continue to recursively poll or not\n private poller: number | undefined // to become interval for reference to clear later\n private pollIntervalMs: number = 3000\n private queue: RetryQueueElement[] = []\n private areWeOnline: boolean\n\n constructor(private instance: PostHog) {\n this.queue = []\n this.areWeOnline = true\n\n if (!isUndefined(window) && 'onLine' in window.navigator) {\n this.areWeOnline = window.navigator.onLine\n window.addEventListener('online', () => {\n this.areWeOnline = true\n this.flush()\n })\n window.addEventListener('offline', () => {\n this.areWeOnline = false\n })\n }\n }\n\n retriableRequest({ retriesPerformedSoFar, ...options }: RetriableRequestOptions): void {\n if (isNumber(retriesPerformedSoFar) && retriesPerformedSoFar > 0) {\n options.url = extendURLParams(options.url, { retry_count: retriesPerformedSoFar })\n }\n\n this.instance._send_request({\n ...options,\n callback: (response) => {\n if (response.statusCode !== 200 && (response.statusCode < 400 || response.statusCode >= 500)) {\n if ((retriesPerformedSoFar ?? 0) < 10) {\n this.enqueue({\n retriesPerformedSoFar,\n ...options,\n })\n return\n }\n }\n\n options.callback?.(response)\n },\n })\n }\n\n private enqueue(requestOptions: RetriableRequestOptions): void {\n const retriesPerformedSoFar = requestOptions.retriesPerformedSoFar || 0\n requestOptions.retriesPerformedSoFar = retriesPerformedSoFar + 1\n\n const msToNextRetry = pickNextRetryDelay(retriesPerformedSoFar)\n const retryAt = Date.now() + msToNextRetry\n\n this.queue.push({ retryAt, requestOptions })\n\n let logMessage = `Enqueued failed request for retry in ${msToNextRetry}`\n if (!navigator.onLine) {\n logMessage += ' (Browser is offline)'\n }\n logger.warn(logMessage)\n\n if (!this.isPolling) {\n this.isPolling = true\n this.poll()\n }\n }\n\n private poll(): void {\n this.poller && clearTimeout(this.poller)\n this.poller = setTimeout(() => {\n if (this.areWeOnline && this.queue.length > 0) {\n this.flush()\n }\n this.poll()\n }, this.pollIntervalMs) as any as number\n }\n\n private flush(): void {\n const now = Date.now()\n const notToFlush: RetryQueueElement[] = []\n const toFlush = this.queue.filter((item) => {\n if (item.retryAt < now) {\n return true\n }\n notToFlush.push(item)\n return false\n })\n\n this.queue = notToFlush\n\n if (toFlush.length > 0) {\n for (const { requestOptions } of toFlush) {\n this.retriableRequest(requestOptions)\n }\n }\n }\n\n unload(): void {\n if (this.poller) {\n clearTimeout(this.poller)\n this.poller = undefined\n }\n\n for (const { requestOptions } of this.queue) {\n try {\n // we've had send beacon in place for at least 2 years\n // eslint-disable-next-line compat/compat\n this.instance._send_request({\n ...requestOptions,\n transport: 'sendBeacon',\n })\n } catch (e) {\n // Note sendBeacon automatically retries, and after the first retry it will lose reference to contextual `this`.\n // This means in some cases `this.getConfig` will be undefined.\n logger.error(e)\n }\n }\n this.queue = []\n }\n}\n"]}