posthog-js 1.87.2 → 1.87.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/array.full.js +1 -1
  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/es.js +1 -1
  6. package/dist/es.js.map +1 -1
  7. package/dist/exception-autocapture.js +1 -1
  8. package/dist/exception-autocapture.js.map +1 -1
  9. package/dist/module.js +1 -1
  10. package/dist/module.js.map +1 -1
  11. package/dist/recorder-v2.js +2 -2
  12. package/dist/recorder-v2.js.map +1 -1
  13. package/dist/recorder.js +1 -1
  14. package/dist/recorder.js.map +1 -1
  15. package/dist/surveys.js +1 -1
  16. package/dist/surveys.js.map +1 -1
  17. package/lib/package.json +1 -1
  18. package/lib/src/autocapture-utils.js +2 -1
  19. package/lib/src/autocapture-utils.js.map +1 -1
  20. package/lib/src/autocapture.js +2 -1
  21. package/lib/src/autocapture.js.map +1 -1
  22. package/lib/src/decide.js +2 -1
  23. package/lib/src/decide.js.map +1 -1
  24. package/lib/src/extensions/exception-autocapture/error-conversion.js +1 -1
  25. package/lib/src/extensions/exception-autocapture/error-conversion.js.map +1 -1
  26. package/lib/src/extensions/exception-autocapture/index.js +2 -1
  27. package/lib/src/extensions/exception-autocapture/index.js.map +1 -1
  28. package/lib/src/extensions/exception-autocapture/stack-trace.js +1 -1
  29. package/lib/src/extensions/exception-autocapture/stack-trace.js.map +1 -1
  30. package/lib/src/extensions/exception-autocapture/type-checking.js +1 -1
  31. package/lib/src/extensions/exception-autocapture/type-checking.js.map +1 -1
  32. package/lib/src/extensions/replay/sessionrecording-utils.js +1 -1
  33. package/lib/src/extensions/replay/sessionrecording-utils.js.map +1 -1
  34. package/lib/src/extensions/replay/sessionrecording.js +2 -1
  35. package/lib/src/extensions/replay/sessionrecording.js.map +1 -1
  36. package/lib/src/extensions/replay/web-performance.js +3 -1
  37. package/lib/src/extensions/replay/web-performance.js.map +1 -1
  38. package/lib/src/extensions/surveys.js +1 -1
  39. package/lib/src/extensions/surveys.js.map +1 -1
  40. package/lib/src/extensions/toolbar.js +2 -1
  41. package/lib/src/extensions/toolbar.js.map +1 -1
  42. package/lib/src/gdpr-utils.js +2 -1
  43. package/lib/src/gdpr-utils.js.map +1 -1
  44. package/lib/src/loader-exception-autocapture.js +1 -1
  45. package/lib/src/loader-exception-autocapture.js.map +1 -1
  46. package/lib/src/loader-recorder-v2.js +1 -1
  47. package/lib/src/loader-recorder-v2.js.map +1 -1
  48. package/lib/src/loader-recorder.js +1 -1
  49. package/lib/src/loader-recorder.js.map +1 -1
  50. package/lib/src/loader-surveys.js +1 -1
  51. package/lib/src/loader-surveys.js.map +1 -1
  52. package/lib/src/posthog-core.js +7 -4
  53. package/lib/src/posthog-core.js.map +1 -1
  54. package/lib/src/posthog-featureflags.js +3 -2
  55. package/lib/src/posthog-featureflags.js.map +1 -1
  56. package/lib/src/posthog-persistence.js +3 -1
  57. package/lib/src/posthog-persistence.js.map +1 -1
  58. package/lib/src/posthog-surveys.js +1 -1
  59. package/lib/src/posthog-surveys.js.map +1 -1
  60. package/lib/src/request-queue.js +2 -1
  61. package/lib/src/request-queue.js.map +1 -1
  62. package/lib/src/retry-queue.js +2 -1
  63. package/lib/src/retry-queue.js.map +1 -1
  64. package/lib/src/send-request.js +9 -5
  65. package/lib/src/send-request.js.map +1 -1
  66. package/lib/src/sessionid.js +2 -1
  67. package/lib/src/sessionid.js.map +1 -1
  68. package/lib/src/storage.js +2 -1
  69. package/lib/src/storage.js.map +1 -1
  70. package/lib/src/utils/event-utils.d.ts +29 -0
  71. package/lib/src/utils/event-utils.js +297 -0
  72. package/lib/src/utils/event-utils.js.map +1 -0
  73. package/lib/src/{utils.d.ts → utils/index.d.ts} +5 -45
  74. package/lib/src/{utils.js → utils/index.js} +8 -402
  75. package/lib/src/utils/index.js.map +1 -0
  76. package/lib/src/utils/request-utils.d.ts +5 -0
  77. package/lib/src/utils/request-utils.js +58 -0
  78. package/lib/src/utils/request-utils.js.map +1 -0
  79. package/lib/src/utils/type-utils.d.ts +12 -0
  80. package/lib/src/utils/type-utils.js +64 -0
  81. package/lib/src/utils/type-utils.js.map +1 -0
  82. package/lib/src/uuidv7.js +2 -1
  83. package/lib/src/uuidv7.js.map +1 -1
  84. package/package.json +1 -1
  85. package/lib/src/utils.js.map +0 -1
@@ -36,8 +36,9 @@ var __read = (this && this.__read) || function (o, n) {
36
36
  }
37
37
  return ar;
38
38
  };
39
- import { _base64Encode, _entries, _extend, _isArray, logger } from './utils';
39
+ import { _base64Encode, _entries, _extend, logger } from './utils';
40
40
  import { PERSISTENCE_EARLY_ACCESS_FEATURES, ENABLED_FEATURE_FLAGS, STORED_GROUP_PROPERTIES_KEY, STORED_PERSON_PROPERTIES_KEY, FLAG_CALL_REPORTED, } from './constants';
41
+ import { _isArray } from './utils/type-utils';
41
42
  var PERSISTENCE_ACTIVE_FEATURE_FLAGS = '$active_feature_flags';
42
43
  var PERSISTENCE_OVERRIDE_FEATURE_FLAGS = '$override_feature_flags';
43
44
  var PERSISTENCE_FEATURE_FLAG_PAYLOADS = '$feature_flag_payloads';
@@ -289,7 +290,7 @@ var PostHogFeatureFlags = /** @class */ (function () {
289
290
  PostHogFeatureFlags.prototype.override = function (flags) {
290
291
  var _a, _b;
291
292
  if (!this.instance.__loaded || !this.instance.persistence) {
292
- return logger.unintializedWarning('posthog.feature_flags.override');
293
+ return logger.uninitializedWarning('posthog.feature_flags.override');
293
294
  }
294
295
  this._override_warning = false;
295
296
  if (flags === false) {
@@ -1 +1 @@
1
- {"version":3,"file":"posthog-featureflags.js","sourceRoot":"","sources":["../../src/posthog-featureflags.ts"],"names":[],"mappings":"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","sourcesContent":["import { _base64Encode, _entries, _extend, _isArray, logger } from './utils'\nimport { PostHog } from './posthog-core'\nimport {\n DecideResponse,\n FeatureFlagsCallback,\n EarlyAccessFeatureCallback,\n EarlyAccessFeatureResponse,\n Properties,\n JsonType,\n RequestCallback,\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\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 // 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 } else {\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 }\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 if (overriddenFlags[overriddenKeys[i]] === false) {\n delete finalFlags[overriddenKeys[i]]\n } else {\n finalFlags[overriddenKeys[i]] = overriddenFlags[overriddenKeys[i]]\n }\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 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 = JSON.stringify({\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 const encoded_data = _base64Encode(json_data)\n this.instance._send_request(\n this.instance.config.api_host + '/decide/?v=3',\n { data: encoded_data },\n { method: 'POST' },\n this.instance._prepare_callback((response) => {\n // reset anon_distinct_id after at least a single request with it\n // makes it through\n this.$anon_distinct_id = undefined\n this.receivedFeatureFlags(response as DecideResponse)\n\n // :TRICKY: Reload - start another request if queued!\n this.setReloadingPaused(false)\n this._startReloadTimer()\n }) as RequestCallback\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>): 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()\n }\n\n /*\n * Override feature flags for debugging.\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 *\n * @param {Object|Array|String} flags Flags to override with.\n */\n override(flags: boolean | string[] | Record<string, string | boolean>): void {\n if (!this.instance.__loaded || !this.instance.persistence) {\n return logger.unintializedWarning('posthog.feature_flags.override')\n }\n\n this._override_warning = false\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 `${this.instance.config.api_host}/api/early_access_features/?token=${this.instance.config.token}`,\n {},\n { method: 'GET' },\n (response) => {\n const earlyAccessFeatures = (response 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(): void {\n const { flags, flagVariants } = this._prepareFeatureFlagsForCallbacks()\n this.featureFlagEventHandlers.forEach((handler) => handler(flags, flagVariants))\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAalE,OAAO,EACH,iCAAiC,EACjC,qBAAqB,EACrB,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,GACrB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,IAAM,gCAAgC,GAAG,uBAAuB,CAAA;AAChE,IAAM,kCAAkC,GAAG,yBAAyB,CAAA;AACpE,IAAM,iCAAiC,GAAG,wBAAwB,CAAA;AAElE,MAAM,CAAC,IAAM,wBAAwB,GAAG,UAAC,YAA+C;;IACpF,IAAM,kBAAkB,GAAqC,EAAE,CAAA;;QAC/D,KAA2B,IAAA,KAAA,SAAA,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC,CAAA,gBAAA,4BAAE;YAA9C,IAAA,KAAA,mBAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;YAClB,IAAI,KAAK,EAAE;gBACP,kBAAkB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;aAClC;SACJ;;;;;;;;;IACD,OAAO,kBAAkB,CAAA;AAC7B,CAAC,CAAA;AAED,MAAM,CAAC,IAAM,8BAA8B,GAAG,UAC1C,QAAiC,EACjC,WAA+B,EAC/B,YAAmD,EACnD,mBAAkD;;IADlD,6BAAA,EAAA,iBAAmD;IACnD,oCAAA,EAAA,wBAAkD;IAElD,IAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;IACtC,IAAM,YAAY,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAA;IACpD,IAAI,KAAK,EAAE;QACP,mBAAmB;QACnB,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACjB,IAAM,sBAAsB,GAA4B,EAAE,CAAA;YAC1D,IAAI,KAAK,EAAE;gBACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;iBAC1C;aACJ;YACD,WAAW;gBACP,WAAW,CAAC,QAAQ;oBAChB,GAAC,gCAAgC,IAAG,KAAK;oBACzC,GAAC,qBAAqB,IAAG,sBAAsB;wBACjD,CAAA;SACT;aAAM;YACH,oBAAoB;YACpB,IAAI,eAAe,GAAG,KAAK,CAAA;YAC3B,IAAI,sBAAsB,GAAG,YAAY,CAAA;YACzC,IAAI,QAAQ,CAAC,yBAAyB,EAAE;gBACpC,4EAA4E;gBAC5E,eAAe,yBAAQ,YAAY,GAAK,eAAe,CAAE,CAAA;gBACzD,sBAAsB,yBAAQ,mBAAmB,GAAK,sBAAsB,CAAE,CAAA;aACjF;YACD,WAAW;gBACP,WAAW,CAAC,QAAQ;oBAChB,GAAC,gCAAgC,IAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC;oBAC1F,GAAC,qBAAqB,IAAG,eAAe,IAAI,EAAE;oBAC9C,GAAC,iCAAiC,IAAG,sBAAsB,IAAI,EAAE;wBACnE,CAAA;SACT;KACJ;AACL,CAAC,CAAA;AAED;IAQI,6BAAY,QAAiB;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAA;QAC9B,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAA;QAElC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAA;QACrC,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAA;IAC3C,CAAC;IAED,sCAAQ,GAAR;QACI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,6CAAe,GAAf;QACI,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAA;QACtE,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAA;QACtF,IAAI,CAAC,eAAe,EAAE;YAClB,OAAO,YAAY,IAAI,EAAE,CAAA;SAC5B;QAED,IAAM,UAAU,GAAG,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,CAAA;QAC5C,IAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;gBAC9C,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;aACvC;iBAAM;gBACH,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;aACrE;SACJ;QACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;gBACtC,YAAY,cAAA;gBACZ,eAAe,iBAAA;gBACf,UAAU,YAAA;aACb,CAAC,CAAA;YACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;SAChC;QACD,OAAO,UAAU,CAAA;IACrB,CAAC;IAED,6CAAe,GAAf;QACI,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAA;QAClF,OAAO,YAAY,IAAI,EAAE,CAAA;IAC7B,CAAC;IAED;;;;;;;;OAQG;IACH,gDAAkB,GAAlB;QACI,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;YAChC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAA;YACpC,IAAI,CAAC,iBAAiB,EAAE,CAAA;SAC3B;IACL,CAAC;IAED,oDAAsB,GAAtB,UAAuB,gBAAwB;QAC3C,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAA;IAC7C,CAAC;IAED,gDAAkB,GAAlB,UAAmB,QAAiB;QAChC,IAAI,CAAC,0BAA0B,GAAG,QAAQ,CAAA;IAC9C,CAAC;IAED,+CAAiB,GAAjB;QACI,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAA;IACzC,CAAC;IAED,+CAAiB,GAAjB;QAAA,iBASC;QARG,IAAI,IAAI,CAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE;YACnE,UAAU,CAAC;gBACP,IAAI,CAAC,KAAI,CAAC,0BAA0B,IAAI,KAAI,CAAC,wBAAwB,EAAE;oBACnE,KAAI,CAAC,wBAAwB,GAAG,KAAK,CAAA;oBACrC,KAAI,CAAC,0BAA0B,EAAE,CAAA;iBACpC;YACL,CAAC,EAAE,CAAC,CAAC,CAAA;SACR;IACL,CAAC;IAED,wDAA0B,GAA1B;QAAA,iBA+BC;QA9BG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAA;QACxC,IAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAA;QACjF,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAA;QAC/E,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;YAC5C,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;YACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,iBAAiB,EAAE,gBAAgB;YACnC,gBAAgB,EAAE,eAAe;YACjC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,IAAI,SAAS;SAClF,CAAC,CAAA;QAEF,IAAM,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,CAAC,aAAa,CACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,cAAc,EAC9C,EAAE,IAAI,EAAE,YAAY,EAAE,EACtB,EAAE,MAAM,EAAE,MAAM,EAAE,EAClB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,UAAC,QAAQ;YACrC,iEAAiE;YACjE,mBAAmB;YACnB,KAAI,CAAC,iBAAiB,GAAG,SAAS,CAAA;YAClC,KAAI,CAAC,oBAAoB,CAAC,QAA0B,CAAC,CAAA;YAErD,qDAAqD;YACrD,KAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;YAC9B,KAAI,CAAC,iBAAiB,EAAE,CAAA;QAC5B,CAAC,CAAoB,CACxB,CAAA;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,4CAAc,GAAd,UAAe,GAAW,EAAE,OAAsC;;;QAAtC,wBAAA,EAAA,YAAsC;QAC9D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YACzF,MAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG,GAAG,GAAG,+CAA+C,CAAC,CAAA;YAC/F,OAAO,SAAS,CAAA;SACnB;QACD,IAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAA;QAC7C,IAAM,eAAe,GAAG,UAAG,SAAS,CAAE,CAAA;QACtC,IAAM,gBAAgB,GAA6B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;QAEvG,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC,EAAE;YAClD,IAAI,CAAC,CAAC,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;gBAChF,IAAI,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE;oBACjC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;iBAC9C;qBAAM;oBACH,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;iBAC5C;gBACD,MAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,QAAQ,WAAG,GAAC,kBAAkB,IAAG,gBAAgB,MAAG,CAAA;gBAE/E,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,sBAAsB,EAAE,SAAS,EAAE,CAAC,CAAA;aAC3G;SACJ;QACD,OAAO,SAAS,CAAA;IACpB,CAAC;IAED,mDAAqB,GAArB,UAAsB,GAAW;QAC7B,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED;;;;;;;;;OASG;IACH,8CAAgB,GAAhB,UAAiB,GAAW,EAAE,OAAsC;QAAtC,wBAAA,EAAA,YAAsC;QAChE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YACzF,MAAM,CAAC,IAAI,CAAC,4BAA4B,GAAG,GAAG,GAAG,+CAA+C,CAAC,CAAA;YACjG,OAAO,SAAS,CAAA;SACnB;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC9C,CAAC;IAED,oDAAsB,GAAtB,UAAuB,OAA6B;QAChD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC;IAED,uDAAyB,GAAzB,UAA0B,OAA6B;QACnD,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,KAAK,OAAO,EAAb,CAAa,CAAC,CAAA;IAC9F,CAAC;IAED,kDAAoB,GAApB,UAAqB,QAAiC;QAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC5B,OAAM;SACT;QACD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,IAAI,CAAA;QACzC,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAC3C,IAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAClD,8BAA8B,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAA;QACtG,IAAI,CAAC,0BAA0B,EAAE,CAAA;IACrC,CAAC;IAED;;;;;;;;;;OAUG;IACH,sCAAQ,GAAR,UAAS,KAA4D;;QACjE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YACvD,OAAO,MAAM,CAAC,oBAAoB,CAAC,gCAAgC,CAAC,CAAA;SACvE;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAA;QAE9B,IAAI,KAAK,KAAK,KAAK,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAA;SAC3E;aAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACxB,IAAM,QAAQ,GAAqC,EAAE,CAAA;YACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;aAC5B;YACD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,WAAG,GAAC,kCAAkC,IAAG,QAAQ,MAAG,CAAA;SACzF;aAAM;YACH,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,WAAG,GAAC,kCAAkC,IAAG,KAAK,MAAG,CAAA;SACtF;IACL,CAAC;IACD;;;;;;;;;;;OAWG;IACH,4CAAc,GAAd,UAAe,QAA8B;QAA7C,iBAOC;QANG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;QACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;YAC9B,IAAA,KAA0B,IAAI,CAAC,gCAAgC,EAAE,EAA/D,KAAK,WAAA,EAAE,YAAY,kBAA4C,CAAA;YACvE,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;SAChC;QACD,OAAO,cAAM,OAAA,KAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAxC,CAAwC,CAAA;IACzD,CAAC;IAED,gEAAkC,GAAlC,UAAmC,GAAW,EAAE,UAAmB;;;QAC/D,IAAM,oBAAoB;YACtB,GAAC,8BAAuB,GAAG,CAAE,IAAG,UAAU;eAC7C,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,4BAA4B,EAAE;YAChD,aAAa,EAAE,GAAG;YAClB,mBAAmB,EAAE,UAAU;YAC/B,IAAI,EAAE,oBAAoB;SAC7B,CAAC,CAAA;QACF,IAAI,CAAC,2BAA2B,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;QAE7D,IAAM,QAAQ,yBAAQ,IAAI,CAAC,eAAe,EAAE,gBAAG,GAAG,IAAG,UAAU,MAAE,CAAA;QACjE,MAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,QAAQ;YAC/B,GAAC,gCAAgC,IAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YACnF,GAAC,qBAAqB,IAAG,QAAQ;gBACnC,CAAA;QACF,IAAI,CAAC,0BAA0B,EAAE,CAAA;IACrC,CAAC;IAED,oDAAsB,GAAtB,UAAuB,QAAoC,EAAE,YAAoB;QAAjF,iBAiBC;QAjB4D,6BAAA,EAAA,oBAAoB;QAC7E,IAAM,8BAA8B,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAA;QAEpG,IAAI,CAAC,8BAA8B,IAAI,YAAY,EAAE;YACjD,IAAI,CAAC,QAAQ,CAAC,aAAa,CACvB,UAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,+CAAqC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAE,EACjG,EAAE,EACF,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB,UAAC,QAAQ;;;gBACL,IAAM,mBAAmB,GAAI,QAAuC,CAAC,mBAAmB,CAAA;gBACxF,MAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,QAAQ,WAAG,GAAC,iCAAiC,IAAG,mBAAmB,MAAG,CAAA;gBACjG,OAAO,QAAQ,CAAC,mBAAmB,CAAC,CAAA;YACxC,CAAC,CACJ,CAAA;SACJ;aAAM;YACH,OAAO,QAAQ,CAAC,8BAA8B,CAAC,CAAA;SAClD;IACL,CAAC;IAED,8DAAgC,GAAhC;QACI,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC7B,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAE3C,gBAAgB;QAChB,IAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,YAAY,CAAC,IAAI,CAAC,EAAlB,CAAkB,CAAC,CAAA;QAC9D,IAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;aAC/C,MAAM,CAAC,UAAC,UAAU,IAAK,OAAA,YAAY,CAAC,UAAU,CAAC,EAAxB,CAAwB,CAAC;aAChD,MAAM,CAAC,UAAC,GAAqC,EAAE,GAAG;YAC/C,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;YAC5B,OAAO,GAAG,CAAA;QACd,CAAC,EAAE,EAAE,CAAC,CAAA;QAEV,OAAO;YACH,KAAK,EAAE,WAAW;YAClB,YAAY,EAAE,kBAAkB;SACnC,CAAA;IACL,CAAC;IAED,wDAA0B,GAA1B;QACU,IAAA,KAA0B,IAAI,CAAC,gCAAgC,EAAE,EAA/D,KAAK,WAAA,EAAE,YAAY,kBAA4C,CAAA;QACvE,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,EAA5B,CAA4B,CAAC,CAAA;IACpF,CAAC;IAED;;;;OAIG;IACH,yDAA2B,GAA3B,UAA4B,UAAsB,EAAE,kBAAyB;;QAAzB,mCAAA,EAAA,yBAAyB;QACzE,kCAAkC;QAClC,IAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAA;QAEzF,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAClB,GAAC,4BAA4B,0BACtB,kBAAkB,GAClB,UAAU,CAChB;gBACH,CAAA;QAEF,IAAI,kBAAkB,EAAE;YACpB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAA;SACrC;IACL,CAAC;IAED,2DAA6B,GAA7B;QACI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAA;IAC1D,CAAC;IAED;;;;;;;OAOG;IACH,wDAA0B,GAA1B,UAA2B,UAA0C,EAAE,kBAAyB;;QAAzB,mCAAA,EAAA,yBAAyB;QAC5F,iCAAiC;QACjC,IAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAA;QAExF,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9C,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,UAAC,SAAS;gBAC9C,kBAAkB,CAAC,SAAS,CAAC,yBACtB,kBAAkB,CAAC,SAAS,CAAC,GAC7B,UAAU,CAAC,SAAS,CAAC,CAC3B,CAAA;gBACD,OAAO,UAAU,CAAC,SAAS,CAAC,CAAA;YAChC,CAAC,CAAC,CAAA;SACL;QAED,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAClB,GAAC,2BAA2B,0BACrB,kBAAkB,GAClB,UAAU,CAChB;gBACH,CAAA;QAEF,IAAI,kBAAkB,EAAE;YACpB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAA;SACrC;IACL,CAAC;IAED,0DAA4B,GAA5B,UAA6B,UAAmB;;QAC5C,IAAI,UAAU,EAAE;YACZ,IAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAA;YACxF,IAAI,CAAC,QAAQ,CAAC,QAAQ;gBAClB,GAAC,2BAA2B,0BAAQ,kBAAkB,gBAAG,UAAU,IAAG,EAAE,MAAE;oBAC5E,CAAA;SACL;aAAM;YACH,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAA;SACxD;IACL,CAAC;IACL,0BAAC;AAAD,CAAC,AA/XD,IA+XC","sourcesContent":["import { _base64Encode, _entries, _extend, logger } from './utils'\nimport { PostHog } from './posthog-core'\nimport {\n DecideResponse,\n FeatureFlagsCallback,\n EarlyAccessFeatureCallback,\n EarlyAccessFeatureResponse,\n Properties,\n JsonType,\n RequestCallback,\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'\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 // 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 } else {\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 }\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 if (overriddenFlags[overriddenKeys[i]] === false) {\n delete finalFlags[overriddenKeys[i]]\n } else {\n finalFlags[overriddenKeys[i]] = overriddenFlags[overriddenKeys[i]]\n }\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 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 = JSON.stringify({\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 const encoded_data = _base64Encode(json_data)\n this.instance._send_request(\n this.instance.config.api_host + '/decide/?v=3',\n { data: encoded_data },\n { method: 'POST' },\n this.instance._prepare_callback((response) => {\n // reset anon_distinct_id after at least a single request with it\n // makes it through\n this.$anon_distinct_id = undefined\n this.receivedFeatureFlags(response as DecideResponse)\n\n // :TRICKY: Reload - start another request if queued!\n this.setReloadingPaused(false)\n this._startReloadTimer()\n }) as RequestCallback\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>): 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()\n }\n\n /*\n * Override feature flags for debugging.\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 *\n * @param {Object|Array|String} flags Flags to override with.\n */\n override(flags: boolean | string[] | Record<string, string | boolean>): void {\n if (!this.instance.__loaded || !this.instance.persistence) {\n return logger.uninitializedWarning('posthog.feature_flags.override')\n }\n\n this._override_warning = false\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 `${this.instance.config.api_host}/api/early_access_features/?token=${this.instance.config.token}`,\n {},\n { method: 'GET' },\n (response) => {\n const earlyAccessFeatures = (response 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(): void {\n const { flags, flagVariants } = this._prepareFeatureFlagsForCallbacks()\n this.featureFlagEventHandlers.forEach((handler) => handler(flags, flagVariants))\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,7 +1,9 @@
1
1
  /* eslint camelcase: "off" */
2
- import { _each, _extend, _include, _info, _isObject, _isUndefined, _strip_empty_properties, logger } from './utils';
2
+ import { _each, _extend, _include, _strip_empty_properties, logger } from './utils';
3
3
  import { cookieStore, localStore, localPlusCookieStore, memoryStore, sessionStore } from './storage';
4
4
  import { PERSISTENCE_RESERVED_PROPERTIES, EVENT_TIMERS_KEY, ENABLED_FEATURE_FLAGS, POSTHOG_QUOTA_LIMITED, USER_STATE, } from './constants';
5
+ import { _isObject, _isUndefined } from './utils/type-utils';
6
+ import { _info } from './utils/event-utils';
5
7
  var CASE_INSENSITIVE_PERSISTENCE_TYPES = [
6
8
  'cookie',
7
9
  'localstorage',
@@ -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, _info, _isObject, _isUndefined, _strip_empty_properties, logger } from './utils'\nimport { cookieStore, localStore, localPlusCookieStore, memoryStore, sessionStore } from './storage'\nimport { PersistentStore, PostHogConfig, Properties } from './types'\nimport {\n PERSISTENCE_RESERVED_PROPERTIES,\n EVENT_TIMERS_KEY,\n ENABLED_FEATURE_FLAGS,\n POSTHOG_QUOTA_LIMITED,\n USER_STATE,\n} from './constants'\n\nconst CASE_INSENSITIVE_PERSISTENCE_TYPES: readonly Lowercase<PostHogConfig['persistence']>[] = [\n 'cookie',\n 'localstorage',\n 'localstorage+cookie',\n 'sessionstorage',\n 'memory',\n]\n\n/**\n * PostHog Persistence Object\n * @constructor\n */\nexport class PostHogPersistence {\n props: Properties\n storage: PersistentStore\n campaign_params_saved: boolean\n custom_campaign_params: string[]\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 user_state: 'anonymous' | 'identified'\n\n constructor(config: PostHogConfig) {\n // clean chars that aren't accepted by the http spec for cookie values\n // https://datatracker.ietf.org/doc/html/rfc2616#section-2.2\n let token = ''\n\n if (config['token']) {\n token = config['token'].replace(/\\+/g, 'PL').replace(/\\//g, 'SL').replace(/=/g, 'EQ')\n }\n\n this.props = {}\n this.campaign_params_saved = false\n this.custom_campaign_params = config['custom_campaign_params'] || []\n\n if (config['persistence_name']) {\n this.name = 'ph_' + config['persistence_name']\n } else {\n this.name = 'ph_' + token + '_posthog'\n }\n\n if (\n CASE_INSENSITIVE_PERSISTENCE_TYPES.indexOf(\n config['persistence'].toLowerCase() as Lowercase<PostHogConfig['persistence']>\n ) === -1\n ) {\n logger.critical('Unknown persistence type ' + config['persistence'] + '; falling back to cookie')\n config['persistence'] = 'cookie'\n }\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 this.storage = localStore\n } else if (storage_type === 'localstorage+cookie' && localPlusCookieStore.is_supported()) {\n this.storage = localPlusCookieStore\n } else if (storage_type === 'sessionstorage' && sessionStore.is_supported()) {\n this.storage = sessionStore\n } else if (storage_type === 'memory') {\n this.storage = memoryStore\n } else {\n this.storage = cookieStore\n }\n\n this.user_state = 'anonymous'\n\n this.load()\n this.update_config(config)\n this.save()\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)\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.custom_campaign_params))\n this.campaign_params_saved = true\n }\n }\n\n update_search_keyword(): void {\n this.register(_info.searchInfo())\n }\n\n update_referrer_info(): void {\n this.register({\n $referrer: this.props['$referrer'] || _info.referrer(),\n $referring_domain: this.props['$referring_domain'] || _info.referringDomain(),\n })\n }\n\n get_referrer_info(): Properties {\n return _strip_empty_properties({\n $referrer: this['props']['$referrer'],\n $referring_domain: this['props']['$referring_domain'],\n })\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): 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\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_user_state(): 'anonymous' | 'identified' {\n return this.props[USER_STATE] || 'anonymous'\n }\n\n set_user_state(state: 'anonymous' | 'identified'): void {\n this.props[USER_STATE] = state\n this.save()\n }\n\n get_quota_limits(): Record<string, number> {\n return this.props[POSTHOG_QUOTA_LIMITED] || {}\n }\n\n set_quota_limits(state: Record<string, number>): void {\n this.props[POSTHOG_QUOTA_LIMITED] = state\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, _strip_empty_properties, logger } from './utils'\nimport { cookieStore, localStore, localPlusCookieStore, memoryStore, sessionStore } from './storage'\nimport { PersistentStore, PostHogConfig, Properties } from './types'\nimport {\n PERSISTENCE_RESERVED_PROPERTIES,\n EVENT_TIMERS_KEY,\n ENABLED_FEATURE_FLAGS,\n POSTHOG_QUOTA_LIMITED,\n USER_STATE,\n} from './constants'\n\nimport { _isObject, _isUndefined } from './utils/type-utils'\nimport { _info } from './utils/event-utils'\n\nconst CASE_INSENSITIVE_PERSISTENCE_TYPES: readonly Lowercase<PostHogConfig['persistence']>[] = [\n 'cookie',\n 'localstorage',\n 'localstorage+cookie',\n 'sessionstorage',\n 'memory',\n]\n\n/**\n * PostHog Persistence Object\n * @constructor\n */\nexport class PostHogPersistence {\n props: Properties\n storage: PersistentStore\n campaign_params_saved: boolean\n custom_campaign_params: string[]\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 user_state: 'anonymous' | 'identified'\n\n constructor(config: PostHogConfig) {\n // clean chars that aren't accepted by the http spec for cookie values\n // https://datatracker.ietf.org/doc/html/rfc2616#section-2.2\n let token = ''\n\n if (config['token']) {\n token = config['token'].replace(/\\+/g, 'PL').replace(/\\//g, 'SL').replace(/=/g, 'EQ')\n }\n\n this.props = {}\n this.campaign_params_saved = false\n this.custom_campaign_params = config['custom_campaign_params'] || []\n\n if (config['persistence_name']) {\n this.name = 'ph_' + config['persistence_name']\n } else {\n this.name = 'ph_' + token + '_posthog'\n }\n\n if (\n CASE_INSENSITIVE_PERSISTENCE_TYPES.indexOf(\n config['persistence'].toLowerCase() as Lowercase<PostHogConfig['persistence']>\n ) === -1\n ) {\n logger.critical('Unknown persistence type ' + config['persistence'] + '; falling back to cookie')\n config['persistence'] = 'cookie'\n }\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 this.storage = localStore\n } else if (storage_type === 'localstorage+cookie' && localPlusCookieStore.is_supported()) {\n this.storage = localPlusCookieStore\n } else if (storage_type === 'sessionstorage' && sessionStore.is_supported()) {\n this.storage = sessionStore\n } else if (storage_type === 'memory') {\n this.storage = memoryStore\n } else {\n this.storage = cookieStore\n }\n\n this.user_state = 'anonymous'\n\n this.load()\n this.update_config(config)\n this.save()\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)\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.custom_campaign_params))\n this.campaign_params_saved = true\n }\n }\n\n update_search_keyword(): void {\n this.register(_info.searchInfo())\n }\n\n update_referrer_info(): void {\n this.register({\n $referrer: this.props['$referrer'] || _info.referrer(),\n $referring_domain: this.props['$referring_domain'] || _info.referringDomain(),\n })\n }\n\n get_referrer_info(): Properties {\n return _strip_empty_properties({\n $referrer: this['props']['$referrer'],\n $referring_domain: this['props']['$referring_domain'],\n })\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): 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\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_user_state(): 'anonymous' | 'identified' {\n return this.props[USER_STATE] || 'anonymous'\n }\n\n set_user_state(state: 'anonymous' | 'identified'): void {\n this.props[USER_STATE] = state\n this.save()\n }\n\n get_quota_limits(): Record<string, number> {\n return this.props[POSTHOG_QUOTA_LIMITED] || {}\n }\n\n set_quota_limits(state: Record<string, number>): void {\n this.props[POSTHOG_QUOTA_LIMITED] = state\n this.save()\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { SURVEYS } from './constants';
2
- import { _isUrlMatchingRegex } from './utils';
2
+ import { _isUrlMatchingRegex } from './utils/request-utils';
3
3
  export var surveyUrlValidationMap = {
4
4
  icontains: function (conditionsUrl) { return window.location.href.toLowerCase().indexOf(conditionsUrl.toLowerCase()) > -1; },
5
5
  regex: function (conditionsUrl) { return _isUrlMatchingRegex(window.location.href, conditionsUrl); },
@@ -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 { _isUrlMatchingRegex } from './utils'\nimport { SurveyCallback, SurveyUrlMatchType } from './posthog-surveys-types'\n\nexport const surveyUrlValidationMap: Record<SurveyUrlMatchType, (conditionsUrl: string) => boolean> = {\n icontains: (conditionsUrl) => window.location.href.toLowerCase().indexOf(conditionsUrl.toLowerCase()) > -1,\n regex: (conditionsUrl) => _isUrlMatchingRegex(window.location.href, conditionsUrl),\n exact: (conditionsUrl) => window.location.href === conditionsUrl,\n}\n\nexport class PostHogSurveys {\n instance: PostHog\n\n constructor(instance: PostHog) {\n this.instance = instance\n }\n\n getSurveys(callback: SurveyCallback, forceReload = false) {\n const existingSurveys = this.instance.get_property(SURVEYS)\n if (!existingSurveys || forceReload) {\n this.instance._send_request(\n `${this.instance.config.api_host}/api/surveys/?token=${this.instance.config.token}`,\n {},\n { method: 'GET' },\n (response) => {\n const surveys = response.surveys || []\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 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 const targetingMatchedSurveys = conditionMatchedSurveys.filter((survey) => {\n if (!survey.linked_flag_key && !survey.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 return linkedFlagCheck && targetingFlagCheck\n })\n\n return callback(targetingMatchedSurveys)\n }, forceReload)\n }\n}\n"]}
1
+ {"version":3,"file":"posthog-surveys.js","sourceRoot":"","sources":["../../src/posthog-surveys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,MAAM,CAAC,IAAM,sBAAsB,GAAmE;IAClG,SAAS,EAAE,UAAC,aAAa,IAAK,OAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,EAA5E,CAA4E;IAC1G,KAAK,EAAE,UAAC,aAAa,IAAK,OAAA,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,EAAxD,CAAwD;IAClF,KAAK,EAAE,UAAC,aAAa,IAAK,OAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAtC,CAAsC;CACnE,CAAA;AAED;IAGI,wBAAY,QAAiB;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC5B,CAAC;IAED,mCAAU,GAAV,UAAW,QAAwB,EAAE,WAAmB;QAAxD,iBAgBC;QAhBoC,4BAAA,EAAA,mBAAmB;QACpD,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC3D,IAAI,CAAC,eAAe,IAAI,WAAW,EAAE;YACjC,IAAI,CAAC,QAAQ,CAAC,aAAa,CACvB,UAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,iCAAuB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAE,EACnF,EAAE,EACF,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB,UAAC,QAAQ;;;gBACL,IAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAA;gBACtC,MAAA,KAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,QAAQ,WAAG,GAAC,OAAO,IAAG,OAAO,MAAG,CAAA;gBAC3D,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC5B,CAAC,CACJ,CAAA;SACJ;aAAM;YACH,OAAO,QAAQ,CAAC,eAAe,CAAC,CAAA;SACnC;IACL,CAAC;IAED,iDAAwB,GAAxB,UAAyB,QAAwB,EAAE,WAAmB;QAAtE,iBAkCC;QAlCkD,4BAAA,EAAA,mBAAmB;QAClE,IAAI,CAAC,UAAU,CAAC,UAAC,OAAO;YACpB,IAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,MAAM;gBACxC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACpD,CAAC,CAAC,CAAA;YACF,IAAM,uBAAuB,GAAG,aAAa,CAAC,MAAM,CAAC,UAAC,MAAM;;gBACxD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;oBACpB,OAAO,IAAI,CAAA;iBACd;gBAED,+FAA+F;gBAC/F,IAAM,QAAQ,GAAG,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,GAAG;oBACnC,CAAC,CAAC,sBAAsB,CAAC,MAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,YAAY,mCAAI,WAAW,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;oBAC/F,CAAC,CAAC,IAAI,CAAA;gBACV,IAAM,aAAa,GAAG,CAAA,MAAA,MAAM,CAAC,UAAU,0CAAE,QAAQ;oBAC7C,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;oBACpD,CAAC,CAAC,IAAI,CAAA;gBACV,OAAO,QAAQ,IAAI,aAAa,CAAA;YACpC,CAAC,CAAC,CAAA;YACF,IAAM,uBAAuB,GAAG,uBAAuB,CAAC,MAAM,CAAC,UAAC,MAAM;gBAClE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;oBACvD,OAAO,IAAI,CAAA;iBACd;gBACD,IAAM,eAAe,GAAG,MAAM,CAAC,eAAe;oBAC1C,CAAC,CAAC,KAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC;oBACrE,CAAC,CAAC,IAAI,CAAA;gBACV,IAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB;oBAChD,CAAC,CAAC,KAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,kBAAkB,CAAC;oBACxE,CAAC,CAAC,IAAI,CAAA;gBACV,OAAO,eAAe,IAAI,kBAAkB,CAAA;YAChD,CAAC,CAAC,CAAA;YAEF,OAAO,QAAQ,CAAC,uBAAuB,CAAC,CAAA;QAC5C,CAAC,EAAE,WAAW,CAAC,CAAA;IACnB,CAAC;IACL,qBAAC;AAAD,CAAC,AA5DD,IA4DC","sourcesContent":["import { PostHog } from './posthog-core'\nimport { SURVEYS } from './constants'\nimport { SurveyCallback, SurveyUrlMatchType } from './posthog-surveys-types'\nimport { _isUrlMatchingRegex } from './utils/request-utils'\n\nexport const surveyUrlValidationMap: Record<SurveyUrlMatchType, (conditionsUrl: string) => boolean> = {\n icontains: (conditionsUrl) => window.location.href.toLowerCase().indexOf(conditionsUrl.toLowerCase()) > -1,\n regex: (conditionsUrl) => _isUrlMatchingRegex(window.location.href, conditionsUrl),\n exact: (conditionsUrl) => window.location.href === conditionsUrl,\n}\n\nexport class PostHogSurveys {\n instance: PostHog\n\n constructor(instance: PostHog) {\n this.instance = instance\n }\n\n getSurveys(callback: SurveyCallback, forceReload = false) {\n const existingSurveys = this.instance.get_property(SURVEYS)\n if (!existingSurveys || forceReload) {\n this.instance._send_request(\n `${this.instance.config.api_host}/api/surveys/?token=${this.instance.config.token}`,\n {},\n { method: 'GET' },\n (response) => {\n const surveys = response.surveys || []\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 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 const targetingMatchedSurveys = conditionMatchedSurveys.filter((survey) => {\n if (!survey.linked_flag_key && !survey.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 return linkedFlagCheck && targetingFlagCheck\n })\n\n return callback(targetingMatchedSurveys)\n }, forceReload)\n }\n}\n"]}
@@ -50,7 +50,8 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
50
50
  return to.concat(ar || Array.prototype.slice.call(from));
51
51
  };
52
52
  import { RequestQueueScaffold } from './base-request-queue';
53
- import { _each, _isUndefined } from './utils';
53
+ import { _each } from './utils';
54
+ import { _isUndefined } from './utils/type-utils';
54
55
  var RequestQueue = /** @class */ (function (_super) {
55
56
  __extends(RequestQueue, _super);
56
57
  function RequestQueue(handlePollRequest, pollInterval) {
@@ -1 +1 @@
1
- {"version":3,"file":"request-queue.js","sourceRoot":"","sources":["../../src/request-queue.ts"],"names":[],"mappings":"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","sourcesContent":["import { RequestQueueScaffold } from './base-request-queue'\nimport { _each, _isUndefined } from './utils'\nimport { Properties, QueuedRequestData, XHROptions } from './types'\n\nexport class RequestQueue extends RequestQueueScaffold {\n handlePollRequest: (url: string, data: Properties, options?: XHROptions) => void\n\n constructor(handlePollRequest: (url: string, data: Properties, options?: XHROptions) => void, pollInterval = 3000) {\n super(pollInterval)\n this.handlePollRequest = handlePollRequest\n }\n\n enqueue(url: string, data: Properties, options: XHROptions): void {\n this._event_queue.push({ url, data, options })\n\n if (!this.isPolling) {\n this.isPolling = true\n this.poll()\n }\n }\n\n poll(): void {\n clearTimeout(this._poller)\n this._poller = setTimeout(() => {\n if (this._event_queue.length > 0) {\n const requests = this.formatQueue()\n for (const key in requests) {\n const { url, data, options } = requests[key]\n _each(data, (_, dataKey) => {\n data[dataKey]['offset'] = Math.abs(data[dataKey]['timestamp'] - this.getTime())\n delete data[dataKey]['timestamp']\n })\n this.handlePollRequest(url, data, options)\n }\n this._event_queue.length = 0 // flush the _event_queue\n this._empty_queue_count = 0\n } else {\n this._empty_queue_count++\n }\n\n /**\n * _empty_queue_count will increment each time the queue is polled\n * and it is empty. To avoid empty polling (user went idle, stepped away from comp)\n * we can turn it off with the isPolling flag.\n *\n * Polling will be re enabled when the next time PostHogLib.capture is called with\n * an event that should be added to the event queue.\n */\n if (this._empty_queue_count > 4) {\n this.isPolling = false\n this._empty_queue_count = 0\n }\n if (this.isPolling) {\n this.poll()\n }\n }, this._pollInterval) as any as number\n }\n\n unload(): void {\n clearTimeout(this._poller)\n const requests = this._event_queue.length > 0 ? this.formatQueue() : {}\n this._event_queue.length = 0\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(({ url, data, options }) => {\n this.handlePollRequest(url, data, { ...options, transport: 'sendBeacon' })\n })\n }\n\n formatQueue(): Record<string, QueuedRequestData> {\n const requests: Record<string, QueuedRequestData> = {}\n _each(this._event_queue, (request) => {\n const { url, data, options } = request\n const key = (options ? options._batchKey : null) || url\n if (_isUndefined(requests[key])) {\n requests[key] = { data: [], url, options }\n }\n\n // :TRICKY: Metrics-only code\n if (\n options &&\n requests[key].options &&\n requests[key].options._metrics &&\n !(requests[key].options._metrics as any)['rrweb_full_snapshot']\n ) {\n ;(requests[key].options._metrics as any)['rrweb_full_snapshot'] =\n options._metrics['rrweb_full_snapshot']\n }\n requests[key].data.push(data)\n })\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 { RequestQueueScaffold } from './base-request-queue'\nimport { _each } from './utils'\nimport { Properties, QueuedRequestData, XHROptions } from './types'\n\nimport { _isUndefined } from './utils/type-utils'\n\nexport class RequestQueue extends RequestQueueScaffold {\n handlePollRequest: (url: string, data: Properties, options?: XHROptions) => void\n\n constructor(handlePollRequest: (url: string, data: Properties, options?: XHROptions) => void, pollInterval = 3000) {\n super(pollInterval)\n this.handlePollRequest = handlePollRequest\n }\n\n enqueue(url: string, data: Properties, options: XHROptions): void {\n this._event_queue.push({ url, data, options })\n\n if (!this.isPolling) {\n this.isPolling = true\n this.poll()\n }\n }\n\n poll(): void {\n clearTimeout(this._poller)\n this._poller = setTimeout(() => {\n if (this._event_queue.length > 0) {\n const requests = this.formatQueue()\n for (const key in requests) {\n const { url, data, options } = requests[key]\n _each(data, (_, dataKey) => {\n data[dataKey]['offset'] = Math.abs(data[dataKey]['timestamp'] - this.getTime())\n delete data[dataKey]['timestamp']\n })\n this.handlePollRequest(url, data, options)\n }\n this._event_queue.length = 0 // flush the _event_queue\n this._empty_queue_count = 0\n } else {\n this._empty_queue_count++\n }\n\n /**\n * _empty_queue_count will increment each time the queue is polled\n * and it is empty. To avoid empty polling (user went idle, stepped away from comp)\n * we can turn it off with the isPolling flag.\n *\n * Polling will be re enabled when the next time PostHogLib.capture is called with\n * an event that should be added to the event queue.\n */\n if (this._empty_queue_count > 4) {\n this.isPolling = false\n this._empty_queue_count = 0\n }\n if (this.isPolling) {\n this.poll()\n }\n }, this._pollInterval) as any as number\n }\n\n unload(): void {\n clearTimeout(this._poller)\n const requests = this._event_queue.length > 0 ? this.formatQueue() : {}\n this._event_queue.length = 0\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(({ url, data, options }) => {\n this.handlePollRequest(url, data, { ...options, transport: 'sendBeacon' })\n })\n }\n\n formatQueue(): Record<string, QueuedRequestData> {\n const requests: Record<string, QueuedRequestData> = {}\n _each(this._event_queue, (request) => {\n const { url, data, options } = request\n const key = (options ? options._batchKey : null) || url\n if (_isUndefined(requests[key])) {\n requests[key] = { data: [], url, options }\n }\n\n // :TRICKY: Metrics-only code\n if (\n options &&\n requests[key].options &&\n requests[key].options._metrics &&\n !(requests[key].options._metrics as any)['rrweb_full_snapshot']\n ) {\n ;(requests[key].options._metrics as any)['rrweb_full_snapshot'] =\n options._metrics['rrweb_full_snapshot']\n }\n requests[key].data.push(data)\n })\n return requests\n }\n}\n"]}
@@ -37,7 +37,8 @@ var __values = (this && this.__values) || function(o) {
37
37
  };
38
38
  import { RequestQueueScaffold } from './base-request-queue';
39
39
  import { encodePostData, xhr } from './send-request';
40
- import { _isUndefined, logger } from './utils';
40
+ import { logger } from './utils';
41
+ import { _isUndefined } from './utils/type-utils';
41
42
  var thirtyMinutes = 30 * 60 * 1000;
42
43
  /**
43
44
  * Generates a jitter-ed exponential backoff delay in milliseconds
@@ -1 +1 @@
1
- {"version":3,"file":"retry-queue.js","sourceRoot":"","sources":["../../src/retry-queue.ts"],"names":[],"mappings":"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","sourcesContent":["import { RequestQueueScaffold } from './base-request-queue'\nimport { encodePostData, xhr } from './send-request'\nimport { QueuedRequestData, RetryQueueElement } from './types'\nimport { _isUndefined, logger } from './utils'\nimport { RateLimiter } from './rate-limiter'\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\nexport class RetryQueue extends RequestQueueScaffold {\n queue: RetryQueueElement[]\n isPolling: boolean\n areWeOnline: boolean\n onXHRError: (failedRequest: XMLHttpRequest) => void\n rateLimiter: RateLimiter\n\n constructor(onXHRError: (failedRequest: XMLHttpRequest) => void, rateLimiter: RateLimiter) {\n super()\n this.isPolling = false\n this.queue = []\n this.areWeOnline = true\n this.onXHRError = onXHRError\n this.rateLimiter = rateLimiter\n\n if (!_isUndefined(window) && 'onLine' in window.navigator) {\n this.areWeOnline = window.navigator.onLine\n window.addEventListener('online', () => {\n this._handleWeAreNowOnline()\n })\n window.addEventListener('offline', () => {\n this.areWeOnline = false\n })\n }\n }\n\n enqueue(requestData: QueuedRequestData): void {\n const retriesPerformedSoFar = requestData.retriesPerformedSoFar || 0\n if (retriesPerformedSoFar >= 10) {\n return\n }\n const msToNextRetry = pickNextRetryDelay(retriesPerformedSoFar)\n const retryAt = new Date(Date.now() + msToNextRetry)\n\n this.queue.push({ retryAt, requestData })\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 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._pollInterval) as any as number\n }\n\n flush(): void {\n // using Date.now to make tests easier, as recommended here https://codewithhugo.com/mocking-the-current-date-in-jest-tests/\n const now = new Date(Date.now())\n const toFlush = this.queue.filter(({ retryAt }) => retryAt < now)\n if (toFlush.length > 0) {\n this.queue = this.queue.filter(({ retryAt }) => retryAt >= now)\n for (const { requestData } of toFlush) {\n this._executeXhrRequest(requestData)\n }\n }\n }\n\n unload(): void {\n if (this._poller) {\n clearTimeout(this._poller)\n this._poller = undefined\n }\n\n for (const { requestData } of this.queue) {\n const { url, data, options } = requestData\n\n if (this.rateLimiter.isRateLimited(options._batchKey)) {\n logger.warn('[RetryQueue] is quota limited. Dropping request.')\n continue\n }\n\n try {\n // we've had send beacon in place for at least 2 years\n // eslint-disable-next-line compat/compat\n window.navigator.sendBeacon(url, encodePostData(data, { ...options, sendBeacon: true }))\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 _executeXhrRequest({ url, data, options, headers, callback, retriesPerformedSoFar }: QueuedRequestData): void {\n if (this.rateLimiter.isRateLimited(options._batchKey)) {\n return\n }\n\n xhr({\n url,\n data: data || {},\n options: options || {},\n headers: headers || {},\n retriesPerformedSoFar: retriesPerformedSoFar || 0,\n callback,\n retryQueue: this,\n onXHRError: this.onXHRError,\n onResponse: this.rateLimiter.checkForLimiting,\n })\n }\n\n _handleWeAreNowOnline(): void {\n this.areWeOnline = true\n this.flush()\n }\n}\n"]}
1
+ {"version":3,"file":"retry-queue.js","sourceRoot":"","sources":["../../src/retry-queue.ts"],"names":[],"mappings":"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","sourcesContent":["import { RequestQueueScaffold } from './base-request-queue'\nimport { encodePostData, xhr } from './send-request'\nimport { QueuedRequestData, RetryQueueElement } from './types'\nimport { logger } from './utils'\nimport { RateLimiter } from './rate-limiter'\n\nimport { _isUndefined } from './utils/type-utils'\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\nexport class RetryQueue extends RequestQueueScaffold {\n queue: RetryQueueElement[]\n isPolling: boolean\n areWeOnline: boolean\n onXHRError: (failedRequest: XMLHttpRequest) => void\n rateLimiter: RateLimiter\n\n constructor(onXHRError: (failedRequest: XMLHttpRequest) => void, rateLimiter: RateLimiter) {\n super()\n this.isPolling = false\n this.queue = []\n this.areWeOnline = true\n this.onXHRError = onXHRError\n this.rateLimiter = rateLimiter\n\n if (!_isUndefined(window) && 'onLine' in window.navigator) {\n this.areWeOnline = window.navigator.onLine\n window.addEventListener('online', () => {\n this._handleWeAreNowOnline()\n })\n window.addEventListener('offline', () => {\n this.areWeOnline = false\n })\n }\n }\n\n enqueue(requestData: QueuedRequestData): void {\n const retriesPerformedSoFar = requestData.retriesPerformedSoFar || 0\n if (retriesPerformedSoFar >= 10) {\n return\n }\n const msToNextRetry = pickNextRetryDelay(retriesPerformedSoFar)\n const retryAt = new Date(Date.now() + msToNextRetry)\n\n this.queue.push({ retryAt, requestData })\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 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._pollInterval) as any as number\n }\n\n flush(): void {\n // using Date.now to make tests easier, as recommended here https://codewithhugo.com/mocking-the-current-date-in-jest-tests/\n const now = new Date(Date.now())\n const toFlush = this.queue.filter(({ retryAt }) => retryAt < now)\n if (toFlush.length > 0) {\n this.queue = this.queue.filter(({ retryAt }) => retryAt >= now)\n for (const { requestData } of toFlush) {\n this._executeXhrRequest(requestData)\n }\n }\n }\n\n unload(): void {\n if (this._poller) {\n clearTimeout(this._poller)\n this._poller = undefined\n }\n\n for (const { requestData } of this.queue) {\n const { url, data, options } = requestData\n\n if (this.rateLimiter.isRateLimited(options._batchKey)) {\n logger.warn('[RetryQueue] is quota limited. Dropping request.')\n continue\n }\n\n try {\n // we've had send beacon in place for at least 2 years\n // eslint-disable-next-line compat/compat\n window.navigator.sendBeacon(url, encodePostData(data, { ...options, sendBeacon: true }))\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 _executeXhrRequest({ url, data, options, headers, callback, retriesPerformedSoFar }: QueuedRequestData): void {\n if (this.rateLimiter.isRateLimited(options._batchKey)) {\n return\n }\n\n xhr({\n url,\n data: data || {},\n options: options || {},\n headers: headers || {},\n retriesPerformedSoFar: retriesPerformedSoFar || 0,\n callback,\n retryQueue: this,\n onXHRError: this.onXHRError,\n onResponse: this.rateLimiter.checkForLimiting,\n })\n }\n\n _handleWeAreNowOnline(): void {\n this.areWeOnline = true\n this.flush()\n }\n}\n"]}
@@ -9,8 +9,10 @@ var __values = (this && this.__values) || function(o) {
9
9
  };
10
10
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
11
11
  };
12
- import { _each, _HTTPBuildQuery, _isArray, _isFunction, logger } from './utils';
12
+ import { _each, logger } from './utils';
13
13
  import Config from './config';
14
+ import { _HTTPBuildQuery } from './utils/request-utils';
15
+ import { _isArray, _isFunction, _isNumber, _isUint8Array, _isUndefined } from './utils/type-utils';
14
16
  export var addParamsToURL = function (url, urlQueryArgs, parameterOptions) {
15
17
  var e_1, _a;
16
18
  var args = urlQueryArgs || {};
@@ -24,7 +26,7 @@ export var addParamsToURL = function (url, urlQueryArgs, parameterOptions) {
24
26
  for (var params_1 = __values(params), params_1_1 = params_1.next(); !params_1_1.done; params_1_1 = params_1.next()) {
25
27
  var p = params_1_1.value;
26
28
  var key = p.split('=')[0];
27
- if (args[key]) {
29
+ if (!_isUndefined(args[key])) {
28
30
  delete args[key];
29
31
  }
30
32
  }
@@ -42,7 +44,7 @@ export var addParamsToURL = function (url, urlQueryArgs, parameterOptions) {
42
44
  };
43
45
  export var encodePostData = function (data, options) {
44
46
  if (options.blob && data.buffer) {
45
- return new Blob([data.buffer], { type: 'text/plain' });
47
+ return new Blob([_isUint8Array(data) ? data : data.buffer], { type: 'text/plain' });
46
48
  }
47
49
  if (options.sendBeacon || options.blob) {
48
50
  var body = encodePostData(data, { method: 'POST' });
@@ -52,8 +54,7 @@ export var encodePostData = function (data, options) {
52
54
  return null;
53
55
  }
54
56
  var body_data;
55
- var isUint8Array = function (d) { return Object.prototype.toString.call(d) === '[object Uint8Array]'; };
56
- if (_isArray(data) || isUint8Array(data)) {
57
+ if (_isArray(data) || _isUint8Array(data)) {
57
58
  // TODO: eh? passing an Array here?
58
59
  body_data = 'data=' + encodeURIComponent(data);
59
60
  }
@@ -67,6 +68,9 @@ export var encodePostData = function (data, options) {
67
68
  };
68
69
  export var xhr = function (_a) {
69
70
  var url = _a.url, data = _a.data, headers = _a.headers, options = _a.options, callback = _a.callback, retriesPerformedSoFar = _a.retriesPerformedSoFar, retryQueue = _a.retryQueue, onXHRError = _a.onXHRError, _b = _a.timeout, timeout = _b === void 0 ? 60000 : _b, onResponse = _a.onResponse;
71
+ if (_isNumber(retriesPerformedSoFar) && retriesPerformedSoFar > 0) {
72
+ url = addParamsToURL(url, { retry_count: retriesPerformedSoFar }, {});
73
+ }
70
74
  var req = new XMLHttpRequest();
71
75
  req.open(options.method || 'GET', url, true);
72
76
  var body = encodePostData(data, options);
@@ -1 +1 @@
1
- {"version":3,"file":"send-request.js","sourceRoot":"","sources":["../../src/send-request.ts"],"names":[],"mappings":"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","sourcesContent":["import { _each, _HTTPBuildQuery, _isArray, _isFunction, logger } from './utils'\nimport Config from './config'\nimport { PostData, XHROptions, XHRParams } from './types'\n\nexport const addParamsToURL = (\n url: string,\n urlQueryArgs: Record<string, any> | undefined,\n parameterOptions: { ip?: boolean }\n): string => {\n const args = urlQueryArgs || {}\n args['ip'] = parameterOptions['ip'] ? 1 : 0\n args['_'] = new Date().getTime().toString()\n args['ver'] = Config.LIB_VERSION\n\n const halves = url.split('?')\n if (halves.length > 1) {\n const params = halves[1].split('&')\n for (const p of params) {\n const key = p.split('=')[0]\n if (args[key]) {\n delete args[key]\n }\n }\n }\n\n const argSeparator = url.indexOf('?') > -1 ? '&' : '?'\n return url + argSeparator + _HTTPBuildQuery(args)\n}\n\nexport const encodePostData = (data: PostData | Uint8Array, options: Partial<XHROptions>): string | BlobPart | null => {\n if (options.blob && data.buffer) {\n return new Blob([data.buffer], { type: 'text/plain' })\n }\n\n if (options.sendBeacon || options.blob) {\n const body = encodePostData(data, { method: 'POST' }) as BlobPart\n return new Blob([body], { type: 'application/x-www-form-urlencoded' })\n }\n\n if (options.method !== 'POST') {\n return null\n }\n\n let body_data\n const isUint8Array = (d: unknown): d is Uint8Array => Object.prototype.toString.call(d) === '[object Uint8Array]'\n if (_isArray(data) || isUint8Array(data)) {\n // TODO: eh? passing an Array here?\n body_data = 'data=' + encodeURIComponent(data as any)\n } else {\n body_data = 'data=' + encodeURIComponent(data.data as string)\n }\n\n if ('compression' in data && data.compression) {\n body_data += '&compression=' + data.compression\n }\n\n return body_data\n}\n\nexport const xhr = ({\n url,\n data,\n headers,\n options,\n callback,\n retriesPerformedSoFar,\n retryQueue,\n onXHRError,\n timeout = 60000,\n onResponse,\n}: XHRParams) => {\n const req = new XMLHttpRequest()\n req.open(options.method || 'GET', url, true)\n\n const body = encodePostData(data, options)\n\n _each(headers, function (headerValue, headerName) {\n req.setRequestHeader(headerName, headerValue)\n })\n\n if (options.method === 'POST' && !options.blob) {\n req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')\n }\n\n req.timeout = timeout\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 onResponse?.(req)\n if (req.status === 200) {\n if (callback) {\n let response\n try {\n response = JSON.parse(req.responseText)\n } catch (e) {\n logger.error(e)\n return\n }\n callback(response)\n }\n } else {\n if (_isFunction(onXHRError)) {\n onXHRError(req)\n }\n\n // don't retry errors between 400 and 500 inclusive\n if (req.status < 400 || req.status > 500) {\n retryQueue.enqueue({\n url,\n data,\n options,\n headers,\n retriesPerformedSoFar: (retriesPerformedSoFar || 0) + 1,\n callback,\n })\n }\n\n callback?.({ status: 0 })\n }\n }\n }\n req.send(body)\n}\n"]}
1
+ {"version":3,"file":"send-request.js","sourceRoot":"","sources":["../../src/send-request.ts"],"names":[],"mappings":"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","sourcesContent":["import { _each, logger } from './utils'\nimport Config from './config'\nimport { PostData, XHROptions, XHRParams } from './types'\nimport { _HTTPBuildQuery } from './utils/request-utils'\n\nimport { _isArray, _isFunction, _isNumber, _isUint8Array, _isUndefined } from './utils/type-utils'\n\nexport const addParamsToURL = (\n url: string,\n urlQueryArgs: Record<string, any> | undefined,\n parameterOptions: { ip?: boolean }\n): string => {\n const args = urlQueryArgs || {}\n args['ip'] = parameterOptions['ip'] ? 1 : 0\n args['_'] = new Date().getTime().toString()\n args['ver'] = Config.LIB_VERSION\n\n const halves = url.split('?')\n if (halves.length > 1) {\n const params = halves[1].split('&')\n for (const p of params) {\n const key = p.split('=')[0]\n if (!_isUndefined(args[key])) {\n delete args[key]\n }\n }\n }\n\n const argSeparator = url.indexOf('?') > -1 ? '&' : '?'\n return url + argSeparator + _HTTPBuildQuery(args)\n}\n\nexport const encodePostData = (data: PostData | Uint8Array, options: Partial<XHROptions>): string | BlobPart | null => {\n if (options.blob && data.buffer) {\n return new Blob([_isUint8Array(data) ? data : data.buffer], { type: 'text/plain' })\n }\n\n if (options.sendBeacon || options.blob) {\n const body = encodePostData(data, { method: 'POST' }) as BlobPart\n return new Blob([body], { type: 'application/x-www-form-urlencoded' })\n }\n\n if (options.method !== 'POST') {\n return null\n }\n\n let body_data\n\n if (_isArray(data) || _isUint8Array(data)) {\n // TODO: eh? passing an Array here?\n body_data = 'data=' + encodeURIComponent(data as any)\n } else {\n body_data = 'data=' + encodeURIComponent(data.data as string)\n }\n\n if ('compression' in data && data.compression) {\n body_data += '&compression=' + data.compression\n }\n\n return body_data\n}\n\nexport const xhr = ({\n url,\n data,\n headers,\n options,\n callback,\n retriesPerformedSoFar,\n retryQueue,\n onXHRError,\n timeout = 60000,\n onResponse,\n}: XHRParams) => {\n if (_isNumber(retriesPerformedSoFar) && retriesPerformedSoFar > 0) {\n url = addParamsToURL(url, { retry_count: retriesPerformedSoFar }, {})\n }\n\n const req = new XMLHttpRequest()\n req.open(options.method || 'GET', url, true)\n\n const body = encodePostData(data, options)\n\n _each(headers, function (headerValue, headerName) {\n req.setRequestHeader(headerName, headerValue)\n })\n\n if (options.method === 'POST' && !options.blob) {\n req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')\n }\n\n req.timeout = timeout\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 onResponse?.(req)\n if (req.status === 200) {\n if (callback) {\n let response\n try {\n response = JSON.parse(req.responseText)\n } catch (e) {\n logger.error(e)\n return\n }\n callback(response)\n }\n } else {\n if (_isFunction(onXHRError)) {\n onXHRError(req)\n }\n\n // don't retry errors between 400 and 500 inclusive\n if (req.status < 400 || req.status > 500) {\n retryQueue.enqueue({\n url,\n data,\n options,\n headers,\n retriesPerformedSoFar: (retriesPerformedSoFar || 0) + 1,\n callback,\n })\n }\n\n callback?.({ status: 0 })\n }\n }\n }\n req.send(body)\n}\n"]}
@@ -17,7 +17,8 @@ var __read = (this && this.__read) || function (o, n) {
17
17
  import { SESSION_ID } from './constants';
18
18
  import { sessionStore } from './storage';
19
19
  import { uuidv7 } from './uuidv7';
20
- import { _isArray, _isNumber, _isUndefined, logger, window } from './utils';
20
+ import { logger, window } from './utils';
21
+ import { _isArray, _isNumber, _isUndefined } from './utils/type-utils';
21
22
  var MAX_SESSION_IDLE_TIMEOUT = 30 * 60; // 30 minutes
22
23
  var MIN_SESSION_IDLE_TIMEOUT = 60; // 1 minute
23
24
  var SESSION_LENGTH_LIMIT = 24 * 3600 * 1000; // 24 hours