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
@@ -1 +1 @@
1
- {"version":3,"file":"sessionid.js","sourceRoot":"","sources":["../../src/sessionid.ts"],"names":[],"mappings":"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","sourcesContent":["import { PostHogPersistence } from './posthog-persistence'\nimport { SESSION_ID } from './constants'\nimport { sessionStore } from './storage'\nimport { PostHogConfig, SessionIdChangedCallback } from './types'\nimport { uuidv7 } from './uuidv7'\nimport { _isArray, _isNumber, _isUndefined, logger, window } from './utils'\n\nconst MAX_SESSION_IDLE_TIMEOUT = 30 * 60 // 30 minutes\nconst MIN_SESSION_IDLE_TIMEOUT = 60 // 1 minute\nconst SESSION_LENGTH_LIMIT = 24 * 3600 * 1000 // 24 hours\n\nexport class SessionIdManager {\n private readonly _sessionIdGenerator: () => string\n private readonly _windowIdGenerator: () => string\n private config: Partial<PostHogConfig>\n private persistence: PostHogPersistence\n private _windowId: string | null | undefined\n private _sessionId: string | null | undefined\n private readonly _window_id_storage_key: string\n private readonly _primary_window_exists_storage_key: string\n private _sessionStartTimestamp: number | null\n\n private _sessionActivityTimestamp: number | null\n private readonly _sessionTimeoutMs: number\n private _sessionIdChangedHandlers: SessionIdChangedCallback[] = []\n\n constructor(\n config: Partial<PostHogConfig>,\n persistence: PostHogPersistence,\n sessionIdGenerator?: () => string,\n windowIdGenerator?: () => string\n ) {\n this.config = config\n this.persistence = persistence\n this._windowId = undefined\n this._sessionId = undefined\n this._sessionStartTimestamp = null\n this._sessionActivityTimestamp = null\n this._sessionIdGenerator = sessionIdGenerator || uuidv7\n this._windowIdGenerator = windowIdGenerator || uuidv7\n\n const persistenceName = config['persistence_name'] || config['token']\n let desiredTimeout = config['session_idle_timeout_seconds'] || MAX_SESSION_IDLE_TIMEOUT\n\n if (!_isNumber(desiredTimeout)) {\n logger.warn('session_idle_timeout_seconds must be a number. Defaulting to 30 minutes.')\n desiredTimeout = MAX_SESSION_IDLE_TIMEOUT\n } else if (desiredTimeout > MAX_SESSION_IDLE_TIMEOUT) {\n logger.warn('session_idle_timeout_seconds cannot be greater than 30 minutes. Using 30 minutes instead.')\n } else if (desiredTimeout < MIN_SESSION_IDLE_TIMEOUT) {\n logger.warn('session_idle_timeout_seconds cannot be less than 60 seconds. Using 60 seconds instead.')\n }\n\n this._sessionTimeoutMs =\n Math.min(Math.max(desiredTimeout, MIN_SESSION_IDLE_TIMEOUT), MAX_SESSION_IDLE_TIMEOUT) * 1000\n this._window_id_storage_key = 'ph_' + persistenceName + '_window_id'\n this._primary_window_exists_storage_key = 'ph_' + persistenceName + '_primary_window_exists'\n\n // primary_window_exists is set when the DOM has been loaded and is cleared on unload\n // if it exists here it means there was no unload which suggests this window is opened as a tab duplication, window.open, etc.\n if (this._canUseSessionStorage()) {\n const lastWindowId = sessionStore.parse(this._window_id_storage_key)\n\n const primaryWindowExists = sessionStore.parse(this._primary_window_exists_storage_key)\n if (lastWindowId && !primaryWindowExists) {\n // Persist window from previous storage state\n this._windowId = lastWindowId\n } else {\n // Wipe any reference to previous window id\n sessionStore.remove(this._window_id_storage_key)\n }\n // Flag this session as having a primary window\n sessionStore.set(this._primary_window_exists_storage_key, true)\n }\n\n this._listenToReloadWindow()\n }\n\n onSessionId(callback: SessionIdChangedCallback): () => void {\n // KLUDGE: when running in tests the handlers array was always undefined\n // it's yucky but safe to set it here so that it's always definitely available\n if (_isUndefined(this._sessionIdChangedHandlers)) {\n this._sessionIdChangedHandlers = []\n }\n\n this._sessionIdChangedHandlers.push(callback)\n if (this._sessionId) {\n callback(this._sessionId, this._windowId)\n }\n return () => {\n this._sessionIdChangedHandlers = this._sessionIdChangedHandlers.filter((h) => h !== callback)\n }\n }\n\n private _canUseSessionStorage(): boolean {\n // We only want to use sessionStorage if persistence is enabled and not memory storage\n return this.config.persistence !== 'memory' && !this.persistence.disabled && sessionStore.is_supported()\n }\n\n // Note: this tries to store the windowId in sessionStorage. SessionStorage is unique to the current window/tab,\n // and persists page loads/reloads. So it's uniquely suited for storing the windowId. This function also respects\n // when persistence is disabled (by user config) and when sessionStorage is not supported (it *should* be supported on all browsers),\n // and in that case, it falls back to memory (which sadly, won't persist page loads)\n private _setWindowId(windowId: string): void {\n if (windowId !== this._windowId) {\n this._windowId = windowId\n if (this._canUseSessionStorage()) {\n sessionStore.set(this._window_id_storage_key, windowId)\n }\n }\n }\n\n private _getWindowId(): string | null {\n if (this._windowId) {\n return this._windowId\n }\n if (this._canUseSessionStorage()) {\n return sessionStore.parse(this._window_id_storage_key)\n }\n // New window id will be generated\n return null\n }\n\n // Note: 'this.persistence.register' can be disabled in the config.\n // In that case, this works by storing sessionId and the timestamp in memory.\n private _setSessionId(\n sessionId: string | null,\n sessionActivityTimestamp: number | null,\n sessionStartTimestamp: number | null\n ): void {\n if (\n sessionId !== this._sessionId ||\n sessionActivityTimestamp !== this._sessionActivityTimestamp ||\n sessionStartTimestamp !== this._sessionStartTimestamp\n ) {\n this._sessionStartTimestamp = sessionStartTimestamp\n this._sessionActivityTimestamp = sessionActivityTimestamp\n this._sessionId = sessionId\n\n this.persistence.register({\n [SESSION_ID]: [sessionActivityTimestamp, sessionId, sessionStartTimestamp],\n })\n }\n }\n\n private _getSessionId(): [number, string, number] {\n if (this._sessionId && this._sessionActivityTimestamp && this._sessionStartTimestamp) {\n return [this._sessionActivityTimestamp, this._sessionId, this._sessionStartTimestamp]\n }\n const sessionId = this.persistence.props[SESSION_ID]\n\n if (_isArray(sessionId) && sessionId.length === 2) {\n // Storage does not yet have a session start time. Add the last activity timestamp as the start time\n sessionId.push(sessionId[0])\n }\n\n return sessionId || [0, null, 0]\n }\n\n // Resets the session id by setting it to null. On the subsequent call to checkAndGetSessionAndWindowId,\n // new ids will be generated.\n resetSessionId(): void {\n this._setSessionId(null, null, null)\n }\n\n /*\n * Listens to window unloads and removes the primaryWindowExists key from sessionStorage.\n * Reloaded or fresh tabs created after a DOM unloads (reloading the same tab) WILL NOT have this primaryWindowExists flag in session storage.\n * Cloned sessions (new tab, tab duplication, window.open(), ...) WILL have this primaryWindowExists flag in their copied session storage.\n * We conditionally check the primaryWindowExists value in the constructor to decide if the window id in the last session storage should be carried over.\n */\n private _listenToReloadWindow(): void {\n window.addEventListener('beforeunload', () => {\n if (this._canUseSessionStorage()) {\n sessionStore.remove(this._primary_window_exists_storage_key)\n }\n })\n }\n\n /*\n * This function returns the current sessionId and windowId. It should be used to\n * access these values over directly calling `._sessionId` or `._windowId`.\n * In addition to returning the sessionId and windowId, this function also manages cycling the\n * sessionId and windowId when appropriate by doing the following:\n *\n * 1. If the sessionId or windowId is not set, it will generate a new one and store it.\n * 2. If the readOnly param is set to false, it will:\n * a. Check if it has been > SESSION_CHANGE_THRESHOLD since the last call with this flag set.\n * If so, it will generate a new sessionId and store it.\n * b. Update the timestamp stored with the sessionId to ensure the current session is extended\n * for the appropriate amount of time.\n *\n * @param {boolean} readOnly (optional) Defaults to False. Should be set to True when the call to the function should not extend or cycle the session (e.g. being called for non-user generated events)\n * @param {Number} timestamp (optional) Defaults to the current time. The timestamp to be stored with the sessionId (used when determining if a new sessionId should be generated)\n */\n checkAndGetSessionAndWindowId(readOnly = false, _timestamp: number | null = null) {\n const timestamp = _timestamp || new Date().getTime()\n\n // eslint-disable-next-line prefer-const\n let [lastTimestamp, sessionId, startTimestamp] = this._getSessionId()\n let windowId = this._getWindowId()\n\n const sessionPastMaximumLength =\n startTimestamp && startTimestamp > 0 && Math.abs(timestamp - startTimestamp) > SESSION_LENGTH_LIMIT\n\n let valuesChanged = false\n const noSessionId = !sessionId\n const activityTimeout = !readOnly && Math.abs(timestamp - lastTimestamp) > this._sessionTimeoutMs\n if (noSessionId || activityTimeout || sessionPastMaximumLength) {\n sessionId = this._sessionIdGenerator()\n windowId = this._windowIdGenerator()\n startTimestamp = timestamp\n valuesChanged = true\n } else if (!windowId) {\n windowId = this._windowIdGenerator()\n valuesChanged = true\n }\n\n const newTimestamp = lastTimestamp === 0 || !readOnly || sessionPastMaximumLength ? timestamp : lastTimestamp\n const sessionStartTimestamp = startTimestamp === 0 ? new Date().getTime() : startTimestamp\n\n this._setWindowId(windowId)\n this._setSessionId(sessionId, newTimestamp, sessionStartTimestamp)\n\n if (valuesChanged) {\n this._sessionIdChangedHandlers.forEach((handler) => handler(sessionId, windowId))\n }\n\n return {\n sessionId,\n windowId,\n sessionStartTimestamp,\n }\n }\n}\n"]}
1
+ {"version":3,"file":"sessionid.js","sourceRoot":"","sources":["../../src/sessionid.ts"],"names":[],"mappings":"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","sourcesContent":["import { PostHogPersistence } from './posthog-persistence'\nimport { SESSION_ID } from './constants'\nimport { sessionStore } from './storage'\nimport { PostHogConfig, SessionIdChangedCallback } from './types'\nimport { uuidv7 } from './uuidv7'\nimport { logger, window } from './utils'\n\nimport { _isArray, _isNumber, _isUndefined } from './utils/type-utils'\n\nconst MAX_SESSION_IDLE_TIMEOUT = 30 * 60 // 30 minutes\nconst MIN_SESSION_IDLE_TIMEOUT = 60 // 1 minute\nconst SESSION_LENGTH_LIMIT = 24 * 3600 * 1000 // 24 hours\n\nexport class SessionIdManager {\n private readonly _sessionIdGenerator: () => string\n private readonly _windowIdGenerator: () => string\n private config: Partial<PostHogConfig>\n private persistence: PostHogPersistence\n private _windowId: string | null | undefined\n private _sessionId: string | null | undefined\n private readonly _window_id_storage_key: string\n private readonly _primary_window_exists_storage_key: string\n private _sessionStartTimestamp: number | null\n\n private _sessionActivityTimestamp: number | null\n private readonly _sessionTimeoutMs: number\n private _sessionIdChangedHandlers: SessionIdChangedCallback[] = []\n\n constructor(\n config: Partial<PostHogConfig>,\n persistence: PostHogPersistence,\n sessionIdGenerator?: () => string,\n windowIdGenerator?: () => string\n ) {\n this.config = config\n this.persistence = persistence\n this._windowId = undefined\n this._sessionId = undefined\n this._sessionStartTimestamp = null\n this._sessionActivityTimestamp = null\n this._sessionIdGenerator = sessionIdGenerator || uuidv7\n this._windowIdGenerator = windowIdGenerator || uuidv7\n\n const persistenceName = config['persistence_name'] || config['token']\n let desiredTimeout = config['session_idle_timeout_seconds'] || MAX_SESSION_IDLE_TIMEOUT\n\n if (!_isNumber(desiredTimeout)) {\n logger.warn('session_idle_timeout_seconds must be a number. Defaulting to 30 minutes.')\n desiredTimeout = MAX_SESSION_IDLE_TIMEOUT\n } else if (desiredTimeout > MAX_SESSION_IDLE_TIMEOUT) {\n logger.warn('session_idle_timeout_seconds cannot be greater than 30 minutes. Using 30 minutes instead.')\n } else if (desiredTimeout < MIN_SESSION_IDLE_TIMEOUT) {\n logger.warn('session_idle_timeout_seconds cannot be less than 60 seconds. Using 60 seconds instead.')\n }\n\n this._sessionTimeoutMs =\n Math.min(Math.max(desiredTimeout, MIN_SESSION_IDLE_TIMEOUT), MAX_SESSION_IDLE_TIMEOUT) * 1000\n this._window_id_storage_key = 'ph_' + persistenceName + '_window_id'\n this._primary_window_exists_storage_key = 'ph_' + persistenceName + '_primary_window_exists'\n\n // primary_window_exists is set when the DOM has been loaded and is cleared on unload\n // if it exists here it means there was no unload which suggests this window is opened as a tab duplication, window.open, etc.\n if (this._canUseSessionStorage()) {\n const lastWindowId = sessionStore.parse(this._window_id_storage_key)\n\n const primaryWindowExists = sessionStore.parse(this._primary_window_exists_storage_key)\n if (lastWindowId && !primaryWindowExists) {\n // Persist window from previous storage state\n this._windowId = lastWindowId\n } else {\n // Wipe any reference to previous window id\n sessionStore.remove(this._window_id_storage_key)\n }\n // Flag this session as having a primary window\n sessionStore.set(this._primary_window_exists_storage_key, true)\n }\n\n this._listenToReloadWindow()\n }\n\n onSessionId(callback: SessionIdChangedCallback): () => void {\n // KLUDGE: when running in tests the handlers array was always undefined\n // it's yucky but safe to set it here so that it's always definitely available\n if (_isUndefined(this._sessionIdChangedHandlers)) {\n this._sessionIdChangedHandlers = []\n }\n\n this._sessionIdChangedHandlers.push(callback)\n if (this._sessionId) {\n callback(this._sessionId, this._windowId)\n }\n return () => {\n this._sessionIdChangedHandlers = this._sessionIdChangedHandlers.filter((h) => h !== callback)\n }\n }\n\n private _canUseSessionStorage(): boolean {\n // We only want to use sessionStorage if persistence is enabled and not memory storage\n return this.config.persistence !== 'memory' && !this.persistence.disabled && sessionStore.is_supported()\n }\n\n // Note: this tries to store the windowId in sessionStorage. SessionStorage is unique to the current window/tab,\n // and persists page loads/reloads. So it's uniquely suited for storing the windowId. This function also respects\n // when persistence is disabled (by user config) and when sessionStorage is not supported (it *should* be supported on all browsers),\n // and in that case, it falls back to memory (which sadly, won't persist page loads)\n private _setWindowId(windowId: string): void {\n if (windowId !== this._windowId) {\n this._windowId = windowId\n if (this._canUseSessionStorage()) {\n sessionStore.set(this._window_id_storage_key, windowId)\n }\n }\n }\n\n private _getWindowId(): string | null {\n if (this._windowId) {\n return this._windowId\n }\n if (this._canUseSessionStorage()) {\n return sessionStore.parse(this._window_id_storage_key)\n }\n // New window id will be generated\n return null\n }\n\n // Note: 'this.persistence.register' can be disabled in the config.\n // In that case, this works by storing sessionId and the timestamp in memory.\n private _setSessionId(\n sessionId: string | null,\n sessionActivityTimestamp: number | null,\n sessionStartTimestamp: number | null\n ): void {\n if (\n sessionId !== this._sessionId ||\n sessionActivityTimestamp !== this._sessionActivityTimestamp ||\n sessionStartTimestamp !== this._sessionStartTimestamp\n ) {\n this._sessionStartTimestamp = sessionStartTimestamp\n this._sessionActivityTimestamp = sessionActivityTimestamp\n this._sessionId = sessionId\n\n this.persistence.register({\n [SESSION_ID]: [sessionActivityTimestamp, sessionId, sessionStartTimestamp],\n })\n }\n }\n\n private _getSessionId(): [number, string, number] {\n if (this._sessionId && this._sessionActivityTimestamp && this._sessionStartTimestamp) {\n return [this._sessionActivityTimestamp, this._sessionId, this._sessionStartTimestamp]\n }\n const sessionId = this.persistence.props[SESSION_ID]\n\n if (_isArray(sessionId) && sessionId.length === 2) {\n // Storage does not yet have a session start time. Add the last activity timestamp as the start time\n sessionId.push(sessionId[0])\n }\n\n return sessionId || [0, null, 0]\n }\n\n // Resets the session id by setting it to null. On the subsequent call to checkAndGetSessionAndWindowId,\n // new ids will be generated.\n resetSessionId(): void {\n this._setSessionId(null, null, null)\n }\n\n /*\n * Listens to window unloads and removes the primaryWindowExists key from sessionStorage.\n * Reloaded or fresh tabs created after a DOM unloads (reloading the same tab) WILL NOT have this primaryWindowExists flag in session storage.\n * Cloned sessions (new tab, tab duplication, window.open(), ...) WILL have this primaryWindowExists flag in their copied session storage.\n * We conditionally check the primaryWindowExists value in the constructor to decide if the window id in the last session storage should be carried over.\n */\n private _listenToReloadWindow(): void {\n window.addEventListener('beforeunload', () => {\n if (this._canUseSessionStorage()) {\n sessionStore.remove(this._primary_window_exists_storage_key)\n }\n })\n }\n\n /*\n * This function returns the current sessionId and windowId. It should be used to\n * access these values over directly calling `._sessionId` or `._windowId`.\n * In addition to returning the sessionId and windowId, this function also manages cycling the\n * sessionId and windowId when appropriate by doing the following:\n *\n * 1. If the sessionId or windowId is not set, it will generate a new one and store it.\n * 2. If the readOnly param is set to false, it will:\n * a. Check if it has been > SESSION_CHANGE_THRESHOLD since the last call with this flag set.\n * If so, it will generate a new sessionId and store it.\n * b. Update the timestamp stored with the sessionId to ensure the current session is extended\n * for the appropriate amount of time.\n *\n * @param {boolean} readOnly (optional) Defaults to False. Should be set to True when the call to the function should not extend or cycle the session (e.g. being called for non-user generated events)\n * @param {Number} timestamp (optional) Defaults to the current time. The timestamp to be stored with the sessionId (used when determining if a new sessionId should be generated)\n */\n checkAndGetSessionAndWindowId(readOnly = false, _timestamp: number | null = null) {\n const timestamp = _timestamp || new Date().getTime()\n\n // eslint-disable-next-line prefer-const\n let [lastTimestamp, sessionId, startTimestamp] = this._getSessionId()\n let windowId = this._getWindowId()\n\n const sessionPastMaximumLength =\n startTimestamp && startTimestamp > 0 && Math.abs(timestamp - startTimestamp) > SESSION_LENGTH_LIMIT\n\n let valuesChanged = false\n const noSessionId = !sessionId\n const activityTimeout = !readOnly && Math.abs(timestamp - lastTimestamp) > this._sessionTimeoutMs\n if (noSessionId || activityTimeout || sessionPastMaximumLength) {\n sessionId = this._sessionIdGenerator()\n windowId = this._windowIdGenerator()\n startTimestamp = timestamp\n valuesChanged = true\n } else if (!windowId) {\n windowId = this._windowIdGenerator()\n valuesChanged = true\n }\n\n const newTimestamp = lastTimestamp === 0 || !readOnly || sessionPastMaximumLength ? timestamp : lastTimestamp\n const sessionStartTimestamp = startTimestamp === 0 ? new Date().getTime() : startTimestamp\n\n this._setWindowId(windowId)\n this._setSessionId(sessionId, newTimestamp, sessionStartTimestamp)\n\n if (valuesChanged) {\n this._sessionIdChangedHandlers.forEach((handler) => handler(sessionId, windowId))\n }\n\n return {\n sessionId,\n windowId,\n sessionStartTimestamp,\n }\n }\n}\n"]}
@@ -9,8 +9,9 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- import { _extend, _isNull, _isUndefined, logger } from './utils';
12
+ import { _extend, logger } from './utils';
13
13
  import { DISTINCT_ID, SESSION_ID, SESSION_RECORDING_IS_SAMPLED } from './constants';
14
+ import { _isNull, _isUndefined } from './utils/type-utils';
14
15
  var DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i;
15
16
  // Methods partially borrowed from quirksmode.org/js/cookies.html
16
17
  export var cookieStore = {
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"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","sourcesContent":["import { _extend, _isNull, _isUndefined, logger } from './utils'\nimport { PersistentStore, Properties } from './types'\nimport { DISTINCT_ID, SESSION_ID, SESSION_RECORDING_IS_SAMPLED } from './constants'\n\nconst DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z]{2,}$/i\n\n// Methods partially borrowed from quirksmode.org/js/cookies.html\nexport const cookieStore: PersistentStore = {\n is_supported: () => true,\n\n error: function (msg) {\n logger.error('cookieStore error: ' + msg)\n },\n\n get: function (name) {\n try {\n const nameEQ = name + '='\n const ca = document.cookie.split(';').filter((x) => x.length)\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i]\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length)\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length))\n }\n }\n } catch (err) {}\n return null\n },\n\n parse: function (name) {\n let cookie\n try {\n cookie = JSON.parse(cookieStore.get(name)) || {}\n } catch (err) {\n // noop\n }\n return cookie\n },\n\n set: function (name, value, days, cross_subdomain, is_secure) {\n try {\n let cdomain = '',\n expires = '',\n secure = ''\n\n if (cross_subdomain) {\n // NOTE: Could we use this for cross domain tracking?\n const matches = document.location.hostname.match(DOMAIN_MATCH_REGEX),\n domain = matches ? matches[0] : ''\n\n cdomain = domain ? '; domain=.' + domain : ''\n }\n\n if (days) {\n const date = new Date()\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n expires = '; expires=' + date.toUTCString()\n }\n\n if (is_secure) {\n secure = '; secure'\n }\n\n const new_cookie_val =\n name +\n '=' +\n encodeURIComponent(JSON.stringify(value)) +\n expires +\n '; SameSite=Lax; path=/' +\n cdomain +\n secure\n document.cookie = new_cookie_val\n return new_cookie_val\n } catch (err) {\n return\n }\n },\n\n remove: function (name, cross_subdomain) {\n try {\n cookieStore.set(name, '', -1, cross_subdomain)\n } catch (err) {\n return\n }\n },\n}\n\nlet _localStorage_supported: boolean | null = null\n\nexport const localStore: PersistentStore = {\n is_supported: function () {\n if (!_isNull(_localStorage_supported)) {\n return _localStorage_supported\n }\n\n let supported = true\n if (!_isUndefined(window)) {\n try {\n const key = '__mplssupport__',\n val = 'xyz'\n localStore.set(key, val)\n if (localStore.get(key) !== '\"xyz\"') {\n supported = false\n }\n localStore.remove(key)\n } catch (err) {\n supported = false\n }\n } else {\n supported = false\n }\n if (!supported) {\n logger.error('localStorage unsupported; falling back to cookie store')\n }\n\n _localStorage_supported = supported\n return supported\n },\n\n error: function (msg) {\n logger.error('localStorage error: ' + msg)\n },\n\n get: function (name) {\n try {\n return window.localStorage.getItem(name)\n } catch (err) {\n localStore.error(err)\n }\n return null\n },\n\n parse: function (name) {\n try {\n return JSON.parse(localStore.get(name)) || {}\n } catch (err) {\n // noop\n }\n return null\n },\n\n set: function (name, value) {\n try {\n window.localStorage.setItem(name, JSON.stringify(value))\n } catch (err) {\n localStore.error(err)\n }\n },\n\n remove: function (name) {\n try {\n window.localStorage.removeItem(name)\n } catch (err) {\n localStore.error(err)\n }\n },\n}\n\n// Use localstorage for most data but still use cookie for COOKIE_PERSISTED_PROPERTIES\n// This solves issues with cookies having too much data in them causing headers too large\n// Also makes sure we don't have to send a ton of data to the server\nconst COOKIE_PERSISTED_PROPERTIES = [DISTINCT_ID, SESSION_ID, SESSION_RECORDING_IS_SAMPLED]\n\nexport const localPlusCookieStore: PersistentStore = {\n ...localStore,\n parse: function (name) {\n try {\n let extend: Properties = {}\n try {\n // See if there's a cookie stored with data.\n extend = cookieStore.parse(name) || {}\n } catch (err) {}\n const value = _extend(extend, JSON.parse(localStore.get(name) || '{}'))\n localStore.set(name, value)\n return value\n } catch (err) {\n // noop\n }\n return null\n },\n\n set: function (name, value, days, cross_subdomain, is_secure) {\n try {\n localStore.set(name, value)\n const cookiePersistedProperties: Record<string, any> = {}\n COOKIE_PERSISTED_PROPERTIES.forEach((key) => {\n if (value[key]) {\n cookiePersistedProperties[key] = value[key]\n }\n })\n\n if (Object.keys(cookiePersistedProperties).length) {\n cookieStore.set(name, cookiePersistedProperties, days, cross_subdomain, is_secure)\n }\n } catch (err) {\n localStore.error(err)\n }\n },\n\n remove: function (name, cross_subdomain) {\n try {\n window.localStorage.removeItem(name)\n cookieStore.remove(name, cross_subdomain)\n } catch (err) {\n localStore.error(err)\n }\n },\n}\n\nconst memoryStorage: Properties = {}\n\n// Storage that only lasts the length of the pageview if we don't want to use cookies\nexport const memoryStore: PersistentStore = {\n is_supported: function () {\n return true\n },\n\n error: function (msg) {\n logger.error('memoryStorage error: ' + msg)\n },\n\n get: function (name) {\n return memoryStorage[name] || null\n },\n\n parse: function (name) {\n return memoryStorage[name] || null\n },\n\n set: function (name, value) {\n memoryStorage[name] = value\n },\n\n remove: function (name) {\n delete memoryStorage[name]\n },\n}\n\nlet sessionStorageSupported: boolean | null = null\nexport const resetSessionStorageSupported = () => {\n sessionStorageSupported = null\n}\n// Storage that only lasts the length of a tab/window. Survives page refreshes\nexport const sessionStore: PersistentStore = {\n is_supported: function () {\n if (!_isNull(sessionStorageSupported)) {\n return sessionStorageSupported\n }\n sessionStorageSupported = true\n if (!_isUndefined(window)) {\n try {\n const key = '__support__',\n val = 'xyz'\n sessionStore.set(key, val)\n if (sessionStore.get(key) !== '\"xyz\"') {\n sessionStorageSupported = false\n }\n sessionStore.remove(key)\n } catch (err) {\n sessionStorageSupported = false\n }\n } else {\n sessionStorageSupported = false\n }\n return sessionStorageSupported\n },\n\n error: function (msg) {\n logger.error('sessionStorage error: ', msg)\n },\n\n get: function (name) {\n try {\n return window.sessionStorage.getItem(name)\n } catch (err) {\n sessionStore.error(err)\n }\n return null\n },\n\n parse: function (name) {\n try {\n return JSON.parse(sessionStore.get(name)) || null\n } catch (err) {\n // noop\n }\n return null\n },\n\n set: function (name, value) {\n try {\n window.sessionStorage.setItem(name, JSON.stringify(value))\n } catch (err) {\n sessionStore.error(err)\n }\n },\n\n remove: function (name) {\n try {\n window.sessionStorage.removeItem(name)\n } catch (err) {\n sessionStore.error(err)\n }\n },\n}\n"]}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"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","sourcesContent":["import { _extend, logger } from './utils'\nimport { PersistentStore, Properties } from './types'\nimport { DISTINCT_ID, SESSION_ID, SESSION_RECORDING_IS_SAMPLED } from './constants'\n\nimport { _isNull, _isUndefined } from './utils/type-utils'\n\nconst DOMAIN_MATCH_REGEX = /[a-z0-9][a-z0-9-]+\\.[a-z]{2,}$/i\n\n// Methods partially borrowed from quirksmode.org/js/cookies.html\nexport const cookieStore: PersistentStore = {\n is_supported: () => true,\n\n error: function (msg) {\n logger.error('cookieStore error: ' + msg)\n },\n\n get: function (name) {\n try {\n const nameEQ = name + '='\n const ca = document.cookie.split(';').filter((x) => x.length)\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i]\n while (c.charAt(0) == ' ') {\n c = c.substring(1, c.length)\n }\n if (c.indexOf(nameEQ) === 0) {\n return decodeURIComponent(c.substring(nameEQ.length, c.length))\n }\n }\n } catch (err) {}\n return null\n },\n\n parse: function (name) {\n let cookie\n try {\n cookie = JSON.parse(cookieStore.get(name)) || {}\n } catch (err) {\n // noop\n }\n return cookie\n },\n\n set: function (name, value, days, cross_subdomain, is_secure) {\n try {\n let cdomain = '',\n expires = '',\n secure = ''\n\n if (cross_subdomain) {\n // NOTE: Could we use this for cross domain tracking?\n const matches = document.location.hostname.match(DOMAIN_MATCH_REGEX),\n domain = matches ? matches[0] : ''\n\n cdomain = domain ? '; domain=.' + domain : ''\n }\n\n if (days) {\n const date = new Date()\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n expires = '; expires=' + date.toUTCString()\n }\n\n if (is_secure) {\n secure = '; secure'\n }\n\n const new_cookie_val =\n name +\n '=' +\n encodeURIComponent(JSON.stringify(value)) +\n expires +\n '; SameSite=Lax; path=/' +\n cdomain +\n secure\n document.cookie = new_cookie_val\n return new_cookie_val\n } catch (err) {\n return\n }\n },\n\n remove: function (name, cross_subdomain) {\n try {\n cookieStore.set(name, '', -1, cross_subdomain)\n } catch (err) {\n return\n }\n },\n}\n\nlet _localStorage_supported: boolean | null = null\n\nexport const localStore: PersistentStore = {\n is_supported: function () {\n if (!_isNull(_localStorage_supported)) {\n return _localStorage_supported\n }\n\n let supported = true\n if (!_isUndefined(window)) {\n try {\n const key = '__mplssupport__',\n val = 'xyz'\n localStore.set(key, val)\n if (localStore.get(key) !== '\"xyz\"') {\n supported = false\n }\n localStore.remove(key)\n } catch (err) {\n supported = false\n }\n } else {\n supported = false\n }\n if (!supported) {\n logger.error('localStorage unsupported; falling back to cookie store')\n }\n\n _localStorage_supported = supported\n return supported\n },\n\n error: function (msg) {\n logger.error('localStorage error: ' + msg)\n },\n\n get: function (name) {\n try {\n return window.localStorage.getItem(name)\n } catch (err) {\n localStore.error(err)\n }\n return null\n },\n\n parse: function (name) {\n try {\n return JSON.parse(localStore.get(name)) || {}\n } catch (err) {\n // noop\n }\n return null\n },\n\n set: function (name, value) {\n try {\n window.localStorage.setItem(name, JSON.stringify(value))\n } catch (err) {\n localStore.error(err)\n }\n },\n\n remove: function (name) {\n try {\n window.localStorage.removeItem(name)\n } catch (err) {\n localStore.error(err)\n }\n },\n}\n\n// Use localstorage for most data but still use cookie for COOKIE_PERSISTED_PROPERTIES\n// This solves issues with cookies having too much data in them causing headers too large\n// Also makes sure we don't have to send a ton of data to the server\nconst COOKIE_PERSISTED_PROPERTIES = [DISTINCT_ID, SESSION_ID, SESSION_RECORDING_IS_SAMPLED]\n\nexport const localPlusCookieStore: PersistentStore = {\n ...localStore,\n parse: function (name) {\n try {\n let extend: Properties = {}\n try {\n // See if there's a cookie stored with data.\n extend = cookieStore.parse(name) || {}\n } catch (err) {}\n const value = _extend(extend, JSON.parse(localStore.get(name) || '{}'))\n localStore.set(name, value)\n return value\n } catch (err) {\n // noop\n }\n return null\n },\n\n set: function (name, value, days, cross_subdomain, is_secure) {\n try {\n localStore.set(name, value)\n const cookiePersistedProperties: Record<string, any> = {}\n COOKIE_PERSISTED_PROPERTIES.forEach((key) => {\n if (value[key]) {\n cookiePersistedProperties[key] = value[key]\n }\n })\n\n if (Object.keys(cookiePersistedProperties).length) {\n cookieStore.set(name, cookiePersistedProperties, days, cross_subdomain, is_secure)\n }\n } catch (err) {\n localStore.error(err)\n }\n },\n\n remove: function (name, cross_subdomain) {\n try {\n window.localStorage.removeItem(name)\n cookieStore.remove(name, cross_subdomain)\n } catch (err) {\n localStore.error(err)\n }\n },\n}\n\nconst memoryStorage: Properties = {}\n\n// Storage that only lasts the length of the pageview if we don't want to use cookies\nexport const memoryStore: PersistentStore = {\n is_supported: function () {\n return true\n },\n\n error: function (msg) {\n logger.error('memoryStorage error: ' + msg)\n },\n\n get: function (name) {\n return memoryStorage[name] || null\n },\n\n parse: function (name) {\n return memoryStorage[name] || null\n },\n\n set: function (name, value) {\n memoryStorage[name] = value\n },\n\n remove: function (name) {\n delete memoryStorage[name]\n },\n}\n\nlet sessionStorageSupported: boolean | null = null\nexport const resetSessionStorageSupported = () => {\n sessionStorageSupported = null\n}\n// Storage that only lasts the length of a tab/window. Survives page refreshes\nexport const sessionStore: PersistentStore = {\n is_supported: function () {\n if (!_isNull(sessionStorageSupported)) {\n return sessionStorageSupported\n }\n sessionStorageSupported = true\n if (!_isUndefined(window)) {\n try {\n const key = '__support__',\n val = 'xyz'\n sessionStore.set(key, val)\n if (sessionStore.get(key) !== '\"xyz\"') {\n sessionStorageSupported = false\n }\n sessionStore.remove(key)\n } catch (err) {\n sessionStorageSupported = false\n }\n } else {\n sessionStorageSupported = false\n }\n return sessionStorageSupported\n },\n\n error: function (msg) {\n logger.error('sessionStorage error: ', msg)\n },\n\n get: function (name) {\n try {\n return window.sessionStorage.getItem(name)\n } catch (err) {\n sessionStore.error(err)\n }\n return null\n },\n\n parse: function (name) {\n try {\n return JSON.parse(sessionStore.get(name)) || null\n } catch (err) {\n // noop\n }\n return null\n },\n\n set: function (name, value) {\n try {\n window.sessionStorage.setItem(name, JSON.stringify(value))\n } catch (err) {\n sessionStore.error(err)\n }\n },\n\n remove: function (name) {\n try {\n window.sessionStorage.removeItem(name)\n } catch (err) {\n sessionStore.error(err)\n }\n },\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import { Properties } from '../types';
2
+ export declare const _info: {
3
+ campaignParams: (customParams?: string[]) => Record<string, any>;
4
+ searchEngine: () => string | null;
5
+ searchInfo: () => Record<string, any>;
6
+ /**
7
+ * This function detects which browser is running this script.
8
+ * The order of the checks are important since many user agents
9
+ * include key words used in later checks.
10
+ */
11
+ browser: (user_agent: string, vendor: string, opera?: any) => string;
12
+ /**
13
+ * This function detects which browser version is running this script,
14
+ * parsing major and minor version (e.g., 42.1). User agent strings from:
15
+ * http://www.useragentstring.com/pages/useragentstring.php
16
+ */
17
+ browserVersion: (userAgent: string, vendor: string, opera: string) => number | null;
18
+ browserLanguage: () => string;
19
+ os: (user_agent: string) => {
20
+ os_name: string;
21
+ os_version: string;
22
+ };
23
+ device: (user_agent: string) => string;
24
+ deviceType: (user_agent: string) => string;
25
+ referrer: () => string;
26
+ referringDomain: () => string;
27
+ properties: () => Properties;
28
+ people_properties: () => Properties;
29
+ };
@@ -0,0 +1,297 @@
1
+ import { _getQueryParam } from './request-utils';
2
+ import { _isNull, _isUndefined } from './type-utils';
3
+ import Config from '../config';
4
+ import { _each, _extend, _includes, _strip_empty_properties, _timestamp, document, userAgent } from './index';
5
+ export var _info = {
6
+ campaignParams: function (customParams) {
7
+ var campaign_keywords = [
8
+ 'utm_source',
9
+ 'utm_medium',
10
+ 'utm_campaign',
11
+ 'utm_content',
12
+ 'utm_term',
13
+ 'gclid',
14
+ 'fbclid',
15
+ 'msclkid',
16
+ ].concat(customParams || []);
17
+ var params = {};
18
+ _each(campaign_keywords, function (kwkey) {
19
+ var kw = _getQueryParam(document.URL, kwkey);
20
+ if (kw.length) {
21
+ params[kwkey] = kw;
22
+ }
23
+ });
24
+ return params;
25
+ },
26
+ searchEngine: function () {
27
+ var referrer = document.referrer;
28
+ if (!referrer) {
29
+ return null;
30
+ }
31
+ else if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {
32
+ return 'google';
33
+ }
34
+ else if (referrer.search('https?://(.*)bing.com') === 0) {
35
+ return 'bing';
36
+ }
37
+ else if (referrer.search('https?://(.*)yahoo.com') === 0) {
38
+ return 'yahoo';
39
+ }
40
+ else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {
41
+ return 'duckduckgo';
42
+ }
43
+ else {
44
+ return null;
45
+ }
46
+ },
47
+ searchInfo: function () {
48
+ var search = _info.searchEngine(), param = search != 'yahoo' ? 'q' : 'p', ret = {};
49
+ if (!_isNull(search)) {
50
+ ret['$search_engine'] = search;
51
+ var keyword = _getQueryParam(document.referrer, param);
52
+ if (keyword.length) {
53
+ ret['ph_keyword'] = keyword;
54
+ }
55
+ }
56
+ return ret;
57
+ },
58
+ /**
59
+ * This function detects which browser is running this script.
60
+ * The order of the checks are important since many user agents
61
+ * include key words used in later checks.
62
+ */
63
+ browser: function (user_agent, vendor, opera) {
64
+ vendor = vendor || ''; // vendor is undefined for at least IE9
65
+ if (opera || _includes(user_agent, ' OPR/')) {
66
+ if (_includes(user_agent, 'Mini')) {
67
+ return 'Opera Mini';
68
+ }
69
+ return 'Opera';
70
+ }
71
+ else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {
72
+ return 'BlackBerry';
73
+ }
74
+ else if (_includes(user_agent, 'IEMobile') || _includes(user_agent, 'WPDesktop')) {
75
+ return 'Internet Explorer Mobile';
76
+ }
77
+ else if (_includes(user_agent, 'SamsungBrowser/')) {
78
+ // https://developer.samsung.com/internet/user-agent-string-format
79
+ return 'Samsung Internet';
80
+ }
81
+ else if (_includes(user_agent, 'Edge') || _includes(user_agent, 'Edg/')) {
82
+ return 'Microsoft Edge';
83
+ }
84
+ else if (_includes(user_agent, 'FBIOS')) {
85
+ return 'Facebook Mobile';
86
+ }
87
+ else if (_includes(user_agent, 'Chrome')) {
88
+ return 'Chrome';
89
+ }
90
+ else if (_includes(user_agent, 'CriOS')) {
91
+ return 'Chrome iOS';
92
+ }
93
+ else if (_includes(user_agent, 'UCWEB') || _includes(user_agent, 'UCBrowser')) {
94
+ return 'UC Browser';
95
+ }
96
+ else if (_includes(user_agent, 'FxiOS')) {
97
+ return 'Firefox iOS';
98
+ }
99
+ else if (_includes(vendor, 'Apple')) {
100
+ if (_includes(user_agent, 'Mobile')) {
101
+ return 'Mobile Safari';
102
+ }
103
+ return 'Safari';
104
+ }
105
+ else if (_includes(user_agent, 'Android')) {
106
+ return 'Android Mobile';
107
+ }
108
+ else if (_includes(user_agent, 'Konqueror')) {
109
+ return 'Konqueror';
110
+ }
111
+ else if (_includes(user_agent, 'Firefox')) {
112
+ return 'Firefox';
113
+ }
114
+ else if (_includes(user_agent, 'MSIE') || _includes(user_agent, 'Trident/')) {
115
+ return 'Internet Explorer';
116
+ }
117
+ else if (_includes(user_agent, 'Gecko')) {
118
+ return 'Mozilla';
119
+ }
120
+ else {
121
+ return '';
122
+ }
123
+ },
124
+ /**
125
+ * This function detects which browser version is running this script,
126
+ * parsing major and minor version (e.g., 42.1). User agent strings from:
127
+ * http://www.useragentstring.com/pages/useragentstring.php
128
+ */
129
+ browserVersion: function (userAgent, vendor, opera) {
130
+ var browser = _info.browser(userAgent, vendor, opera);
131
+ var versionRegexs = {
132
+ 'Internet Explorer Mobile': /rv:(\d+(\.\d+)?)/,
133
+ 'Microsoft Edge': /Edge?\/(\d+(\.\d+)?)/,
134
+ Chrome: /Chrome\/(\d+(\.\d+)?)/,
135
+ 'Chrome iOS': /CriOS\/(\d+(\.\d+)?)/,
136
+ 'UC Browser': /(UCBrowser|UCWEB)\/(\d+(\.\d+)?)/,
137
+ Safari: /Version\/(\d+(\.\d+)?)/,
138
+ 'Mobile Safari': /Version\/(\d+(\.\d+)?)/,
139
+ Opera: /(Opera|OPR)\/(\d+(\.\d+)?)/,
140
+ Firefox: /Firefox\/(\d+(\.\d+)?)/,
141
+ 'Firefox iOS': /FxiOS\/(\d+(\.\d+)?)/,
142
+ Konqueror: /Konqueror:(\d+(\.\d+)?)/,
143
+ BlackBerry: /BlackBerry (\d+(\.\d+)?)/,
144
+ 'Android Mobile': /android\s(\d+(\.\d+)?)/,
145
+ 'Samsung Internet': /SamsungBrowser\/(\d+(\.\d+)?)/,
146
+ 'Internet Explorer': /(rv:|MSIE )(\d+(\.\d+)?)/,
147
+ Mozilla: /rv:(\d+(\.\d+)?)/,
148
+ };
149
+ var regex = versionRegexs[browser];
150
+ if (_isUndefined(regex)) {
151
+ return null;
152
+ }
153
+ var matches = userAgent.match(regex);
154
+ if (!matches) {
155
+ return null;
156
+ }
157
+ return parseFloat(matches[matches.length - 2]);
158
+ },
159
+ browserLanguage: function () {
160
+ return (navigator.language || // Any modern browser
161
+ navigator.userLanguage // IE11
162
+ );
163
+ },
164
+ os: function (user_agent) {
165
+ if (/Windows/i.test(user_agent)) {
166
+ if (/Phone/.test(user_agent) || /WPDesktop/.test(user_agent)) {
167
+ return { os_name: 'Windows Phone', os_version: '' };
168
+ }
169
+ var match = /Windows NT ([0-9.]+)/i.exec(user_agent);
170
+ if (match && match[1]) {
171
+ var version = match[1];
172
+ return { os_name: 'Windows', os_version: version };
173
+ }
174
+ return { os_name: 'Windows', os_version: '' };
175
+ }
176
+ else if (/(iPhone|iPad|iPod)/.test(user_agent)) {
177
+ var match = /OS (\d+)_(\d+)_?(\d+)?/i.exec(user_agent);
178
+ if (match && match[1]) {
179
+ var versionParts = [match[1], match[2], match[3] || '0'];
180
+ return { os_name: 'iOS', os_version: versionParts.join('.') };
181
+ }
182
+ return { os_name: 'iOS', os_version: '' };
183
+ }
184
+ else if (/Android/.test(user_agent)) {
185
+ var match = /Android (\d+)\.(\d+)\.?(\d+)?/i.exec(user_agent);
186
+ if (match && match[1]) {
187
+ var versionParts = [match[1], match[2], match[3] || '0'];
188
+ return { os_name: 'Android', os_version: versionParts.join('.') };
189
+ }
190
+ return { os_name: 'Android', os_version: '' };
191
+ }
192
+ else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {
193
+ return { os_name: 'BlackBerry', os_version: '' };
194
+ }
195
+ else if (/Mac/i.test(user_agent)) {
196
+ var match = /Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i.exec(user_agent);
197
+ if (match && match[1]) {
198
+ var versionParts = [match[1], match[2], match[3] || '0'];
199
+ return { os_name: 'Mac OS X', os_version: versionParts.join('.') };
200
+ }
201
+ return { os_name: 'Mac OS X', os_version: '' };
202
+ }
203
+ else if (/Linux/.test(user_agent)) {
204
+ return { os_name: 'Linux', os_version: '' };
205
+ }
206
+ else if (/CrOS/.test(user_agent)) {
207
+ return { os_name: 'Chrome OS', os_version: '' };
208
+ }
209
+ else {
210
+ return { os_name: '', os_version: '' };
211
+ }
212
+ },
213
+ device: function (user_agent) {
214
+ if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {
215
+ return 'Windows Phone';
216
+ }
217
+ else if (/iPad/.test(user_agent)) {
218
+ return 'iPad';
219
+ }
220
+ else if (/iPod/.test(user_agent)) {
221
+ return 'iPod Touch';
222
+ }
223
+ else if (/iPhone/.test(user_agent)) {
224
+ return 'iPhone';
225
+ }
226
+ else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {
227
+ return 'BlackBerry';
228
+ }
229
+ else if (/Android/.test(user_agent) && !/Mobile/.test(user_agent)) {
230
+ return 'Android Tablet';
231
+ }
232
+ else if (/Android/.test(user_agent)) {
233
+ return 'Android';
234
+ }
235
+ else {
236
+ return '';
237
+ }
238
+ },
239
+ deviceType: function (user_agent) {
240
+ var device = this.device(user_agent);
241
+ if (device === 'iPad' || device === 'Android Tablet') {
242
+ return 'Tablet';
243
+ }
244
+ else if (device) {
245
+ return 'Mobile';
246
+ }
247
+ else {
248
+ return 'Desktop';
249
+ }
250
+ },
251
+ referrer: function () {
252
+ return document.referrer || '$direct';
253
+ },
254
+ referringDomain: function () {
255
+ if (!document.referrer) {
256
+ return '$direct';
257
+ }
258
+ var parser = document.createElement('a'); // Unfortunately we cannot use new URL due to IE11
259
+ parser.href = document.referrer;
260
+ return parser.host;
261
+ },
262
+ properties: function () {
263
+ var _a = _info.os(userAgent), os_name = _a.os_name, os_version = _a.os_version;
264
+ return _extend(_strip_empty_properties({
265
+ $os: os_name,
266
+ $os_version: os_version,
267
+ $browser: _info.browser(userAgent, navigator.vendor, window.opera),
268
+ $device: _info.device(userAgent),
269
+ $device_type: _info.deviceType(userAgent),
270
+ }), {
271
+ $current_url: window === null || window === void 0 ? void 0 : window.location.href,
272
+ $host: window === null || window === void 0 ? void 0 : window.location.host,
273
+ $pathname: window === null || window === void 0 ? void 0 : window.location.pathname,
274
+ $browser_version: _info.browserVersion(userAgent, navigator.vendor, window.opera),
275
+ $browser_language: _info.browserLanguage(),
276
+ $screen_height: window === null || window === void 0 ? void 0 : window.screen.height,
277
+ $screen_width: window === null || window === void 0 ? void 0 : window.screen.width,
278
+ $viewport_height: window === null || window === void 0 ? void 0 : window.innerHeight,
279
+ $viewport_width: window === null || window === void 0 ? void 0 : window.innerWidth,
280
+ $lib: 'web',
281
+ $lib_version: Config.LIB_VERSION,
282
+ $insert_id: Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10),
283
+ $time: _timestamp() / 1000, // epoch time in seconds
284
+ });
285
+ },
286
+ people_properties: function () {
287
+ var _a = _info.os(userAgent), os_name = _a.os_name, os_version = _a.os_version;
288
+ return _extend(_strip_empty_properties({
289
+ $os: os_name,
290
+ $os_version: os_version,
291
+ $browser: _info.browser(userAgent, navigator.vendor, window.opera),
292
+ }), {
293
+ $browser_version: _info.browserVersion(userAgent, navigator.vendor, window.opera),
294
+ });
295
+ },
296
+ };
297
+ //# sourceMappingURL=event-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-utils.js","sourceRoot":"","sources":["../../../src/utils/event-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { _getQueryParam } from './request-utils'\nimport { _isNull, _isUndefined } from './type-utils'\nimport { Properties } from '../types'\nimport Config from '../config'\nimport { _each, _extend, _includes, _strip_empty_properties, _timestamp, document, userAgent } from './index'\n\nexport const _info = {\n campaignParams: function (customParams?: string[]): Record<string, any> {\n const campaign_keywords = [\n 'utm_source',\n 'utm_medium',\n 'utm_campaign',\n 'utm_content',\n 'utm_term',\n 'gclid',\n 'fbclid',\n 'msclkid',\n ].concat(customParams || [])\n\n const params: Record<string, any> = {}\n _each(campaign_keywords, function (kwkey) {\n const kw = _getQueryParam(document.URL, kwkey)\n if (kw.length) {\n params[kwkey] = kw\n }\n })\n\n return params\n },\n\n searchEngine: function (): string | null {\n const referrer = document.referrer\n if (!referrer) {\n return null\n } else if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {\n return 'google'\n } else if (referrer.search('https?://(.*)bing.com') === 0) {\n return 'bing'\n } else if (referrer.search('https?://(.*)yahoo.com') === 0) {\n return 'yahoo'\n } else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {\n return 'duckduckgo'\n } else {\n return null\n }\n },\n\n searchInfo: function (): Record<string, any> {\n const search = _info.searchEngine(),\n param = search != 'yahoo' ? 'q' : 'p',\n ret: Record<string, any> = {}\n\n if (!_isNull(search)) {\n ret['$search_engine'] = search\n\n const keyword = _getQueryParam(document.referrer, param)\n if (keyword.length) {\n ret['ph_keyword'] = keyword\n }\n }\n\n return ret\n },\n\n /**\n * This function detects which browser is running this script.\n * The order of the checks are important since many user agents\n * include key words used in later checks.\n */\n browser: function (user_agent: string, vendor: string, opera?: any): string {\n vendor = vendor || '' // vendor is undefined for at least IE9\n if (opera || _includes(user_agent, ' OPR/')) {\n if (_includes(user_agent, 'Mini')) {\n return 'Opera Mini'\n }\n return 'Opera'\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry'\n } else if (_includes(user_agent, 'IEMobile') || _includes(user_agent, 'WPDesktop')) {\n return 'Internet Explorer Mobile'\n } else if (_includes(user_agent, 'SamsungBrowser/')) {\n // https://developer.samsung.com/internet/user-agent-string-format\n return 'Samsung Internet'\n } else if (_includes(user_agent, 'Edge') || _includes(user_agent, 'Edg/')) {\n return 'Microsoft Edge'\n } else if (_includes(user_agent, 'FBIOS')) {\n return 'Facebook Mobile'\n } else if (_includes(user_agent, 'Chrome')) {\n return 'Chrome'\n } else if (_includes(user_agent, 'CriOS')) {\n return 'Chrome iOS'\n } else if (_includes(user_agent, 'UCWEB') || _includes(user_agent, 'UCBrowser')) {\n return 'UC Browser'\n } else if (_includes(user_agent, 'FxiOS')) {\n return 'Firefox iOS'\n } else if (_includes(vendor, 'Apple')) {\n if (_includes(user_agent, 'Mobile')) {\n return 'Mobile Safari'\n }\n return 'Safari'\n } else if (_includes(user_agent, 'Android')) {\n return 'Android Mobile'\n } else if (_includes(user_agent, 'Konqueror')) {\n return 'Konqueror'\n } else if (_includes(user_agent, 'Firefox')) {\n return 'Firefox'\n } else if (_includes(user_agent, 'MSIE') || _includes(user_agent, 'Trident/')) {\n return 'Internet Explorer'\n } else if (_includes(user_agent, 'Gecko')) {\n return 'Mozilla'\n } else {\n return ''\n }\n },\n\n /**\n * This function detects which browser version is running this script,\n * parsing major and minor version (e.g., 42.1). User agent strings from:\n * http://www.useragentstring.com/pages/useragentstring.php\n */\n browserVersion: function (userAgent: string, vendor: string, opera: string): number | null {\n const browser = _info.browser(userAgent, vendor, opera)\n const versionRegexs = {\n 'Internet Explorer Mobile': /rv:(\\d+(\\.\\d+)?)/,\n 'Microsoft Edge': /Edge?\\/(\\d+(\\.\\d+)?)/,\n Chrome: /Chrome\\/(\\d+(\\.\\d+)?)/,\n 'Chrome iOS': /CriOS\\/(\\d+(\\.\\d+)?)/,\n 'UC Browser': /(UCBrowser|UCWEB)\\/(\\d+(\\.\\d+)?)/,\n Safari: /Version\\/(\\d+(\\.\\d+)?)/,\n 'Mobile Safari': /Version\\/(\\d+(\\.\\d+)?)/,\n Opera: /(Opera|OPR)\\/(\\d+(\\.\\d+)?)/,\n Firefox: /Firefox\\/(\\d+(\\.\\d+)?)/,\n 'Firefox iOS': /FxiOS\\/(\\d+(\\.\\d+)?)/,\n Konqueror: /Konqueror:(\\d+(\\.\\d+)?)/,\n BlackBerry: /BlackBerry (\\d+(\\.\\d+)?)/,\n 'Android Mobile': /android\\s(\\d+(\\.\\d+)?)/,\n 'Samsung Internet': /SamsungBrowser\\/(\\d+(\\.\\d+)?)/,\n 'Internet Explorer': /(rv:|MSIE )(\\d+(\\.\\d+)?)/,\n Mozilla: /rv:(\\d+(\\.\\d+)?)/,\n }\n const regex: RegExp | undefined = versionRegexs[browser as keyof typeof versionRegexs]\n if (_isUndefined(regex)) {\n return null\n }\n const matches = userAgent.match(regex)\n if (!matches) {\n return null\n }\n return parseFloat(matches[matches.length - 2])\n },\n\n browserLanguage: function (): string {\n return (\n navigator.language || // Any modern browser\n (navigator as Record<string, any>).userLanguage // IE11\n )\n },\n\n os: function (user_agent: string): { os_name: string; os_version: string } {\n if (/Windows/i.test(user_agent)) {\n if (/Phone/.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return { os_name: 'Windows Phone', os_version: '' }\n }\n const match = /Windows NT ([0-9.]+)/i.exec(user_agent)\n if (match && match[1]) {\n const version = match[1]\n return { os_name: 'Windows', os_version: version }\n }\n return { os_name: 'Windows', os_version: '' }\n } else if (/(iPhone|iPad|iPod)/.test(user_agent)) {\n const match = /OS (\\d+)_(\\d+)_?(\\d+)?/i.exec(user_agent)\n if (match && match[1]) {\n const versionParts = [match[1], match[2], match[3] || '0']\n return { os_name: 'iOS', os_version: versionParts.join('.') }\n }\n return { os_name: 'iOS', os_version: '' }\n } else if (/Android/.test(user_agent)) {\n const match = /Android (\\d+)\\.(\\d+)\\.?(\\d+)?/i.exec(user_agent)\n if (match && match[1]) {\n const versionParts = [match[1], match[2], match[3] || '0']\n return { os_name: 'Android', os_version: versionParts.join('.') }\n }\n return { os_name: 'Android', os_version: '' }\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return { os_name: 'BlackBerry', os_version: '' }\n } else if (/Mac/i.test(user_agent)) {\n const match = /Mac OS X (\\d+)[_.](\\d+)[_.]?(\\d+)?/i.exec(user_agent)\n if (match && match[1]) {\n const versionParts = [match[1], match[2], match[3] || '0']\n return { os_name: 'Mac OS X', os_version: versionParts.join('.') }\n }\n return { os_name: 'Mac OS X', os_version: '' }\n } else if (/Linux/.test(user_agent)) {\n return { os_name: 'Linux', os_version: '' }\n } else if (/CrOS/.test(user_agent)) {\n return { os_name: 'Chrome OS', os_version: '' }\n } else {\n return { os_name: '', os_version: '' }\n }\n },\n\n device: function (user_agent: string): string {\n if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {\n return 'Windows Phone'\n } else if (/iPad/.test(user_agent)) {\n return 'iPad'\n } else if (/iPod/.test(user_agent)) {\n return 'iPod Touch'\n } else if (/iPhone/.test(user_agent)) {\n return 'iPhone'\n } else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {\n return 'BlackBerry'\n } else if (/Android/.test(user_agent) && !/Mobile/.test(user_agent)) {\n return 'Android Tablet'\n } else if (/Android/.test(user_agent)) {\n return 'Android'\n } else {\n return ''\n }\n },\n\n deviceType: function (user_agent: string): string {\n const device = this.device(user_agent)\n if (device === 'iPad' || device === 'Android Tablet') {\n return 'Tablet'\n } else if (device) {\n return 'Mobile'\n } else {\n return 'Desktop'\n }\n },\n\n referrer: function (): string {\n return document.referrer || '$direct'\n },\n\n referringDomain: function (): string {\n if (!document.referrer) {\n return '$direct'\n }\n const parser = document.createElement('a') // Unfortunately we cannot use new URL due to IE11\n parser.href = document.referrer\n return parser.host\n },\n\n properties: function (): Properties {\n const { os_name, os_version } = _info.os(userAgent)\n return _extend(\n _strip_empty_properties({\n $os: os_name,\n $os_version: os_version,\n $browser: _info.browser(userAgent, navigator.vendor, (window as any).opera),\n $device: _info.device(userAgent),\n $device_type: _info.deviceType(userAgent),\n }),\n {\n $current_url: window?.location.href,\n $host: window?.location.host,\n $pathname: window?.location.pathname,\n $browser_version: _info.browserVersion(userAgent, navigator.vendor, (window as any).opera),\n $browser_language: _info.browserLanguage(),\n $screen_height: window?.screen.height,\n $screen_width: window?.screen.width,\n $viewport_height: window?.innerHeight,\n $viewport_width: window?.innerWidth,\n $lib: 'web',\n $lib_version: Config.LIB_VERSION,\n $insert_id: Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10),\n $time: _timestamp() / 1000, // epoch time in seconds\n }\n )\n },\n\n people_properties: function (): Properties {\n const { os_name, os_version } = _info.os(userAgent)\n return _extend(\n _strip_empty_properties({\n $os: os_name,\n $os_version: os_version,\n $browser: _info.browser(userAgent, navigator.vendor, (window as any).opera),\n }),\n {\n $browser_version: _info.browserVersion(userAgent, navigator.vendor, (window as any).opera),\n }\n )\n },\n}\n"]}
@@ -1,4 +1,7 @@
1
- import { Breaker, EventHandler, Properties } from './types';
1
+ import { Breaker, EventHandler, Properties } from '../types';
2
+ export declare const ArrayProto: any[];
3
+ export declare const nativeForEach: (callbackfn: (value: any, index: number, array: any[]) => void, thisArg?: any) => void;
4
+ export declare const nativeIndexOf: (searchElement: any, fromIndex?: number | undefined) => number;
2
5
  declare const win: Window & typeof globalThis;
3
6
  declare const document: Document;
4
7
  declare const userAgent: string;
@@ -8,7 +11,7 @@ export declare const logger: {
8
11
  warn: (...args: any[]) => void;
9
12
  error: (...args: any[]) => void;
10
13
  critical: (...args: any[]) => void;
11
- unintializedWarning: (methodName: string) => void;
14
+ uninitializedWarning: (methodName: string) => void;
12
15
  };
13
16
  export declare const _trim: (str: string) => string;
14
17
  export declare const _bind_instance_methods: (obj: Record<string, any>) => void;
@@ -20,8 +23,6 @@ export declare function _eachArray<E = any>(obj: E[] | null | undefined, iterato
20
23
  */
21
24
  export declare function _each(obj: any, iterator: (value: any, key: any) => void | Breaker, thisArg?: any): void;
22
25
  export declare const _extend: (obj: Record<string, any>, ...args: Record<string, any>[]) => Record<string, any>;
23
- export declare const _isArray: (arg: any) => arg is any[];
24
- export declare const _isFunction: (f: any) => f is (...args: any[]) => any;
25
26
  export declare const _include: (obj: null | string | Array<any> | Record<string, any>, target: any) => boolean | Breaker;
26
27
  export declare function _includes<T = any>(str: T[] | string, needle: T): boolean;
27
28
  /**
@@ -29,16 +30,7 @@ export declare function _includes<T = any>(str: T[] | string, needle: T): boolea
29
30
  * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
30
31
  */
31
32
  export declare function _entries<T = any>(obj: Record<string, T>): [string, T][];
32
- export declare const _isObject: (x: unknown) => x is Record<string, any>;
33
- export declare const _isEmptyObject: (x: unknown) => x is Record<string, any>;
34
- export declare const _isUndefined: (x: unknown) => x is undefined;
35
- export declare const _isString: (x: unknown) => x is string;
36
- export declare const _isNull: (x: unknown) => x is null;
37
- export declare const _isDate: (x: unknown) => x is Date;
38
- export declare const _isNumber: (x: unknown) => x is number;
39
- export declare const _isBoolean: (x: unknown) => x is boolean;
40
33
  export declare const _isValidRegex: (str: string) => boolean;
41
- export declare const _isUrlMatchingRegex: (url: string, pattern: string) => boolean;
42
34
  export declare const _encodeDates: (obj: Properties) => Properties;
43
35
  export declare const _timestamp: () => number;
44
36
  export declare const _formatDate: (d: Date) => string;
@@ -54,39 +46,7 @@ export declare function _base64Encode(data: string): string;
54
46
  export declare const _utf8Encode: (string: string) => string;
55
47
  export declare const DEFAULT_BLOCKED_UA_STRS: string[];
56
48
  export declare const _isBlockedUA: (ua: string, customBlockedUserAgents: string[]) => boolean;
57
- export declare const _HTTPBuildQuery: (formdata: Record<string, any>, arg_separator?: string) => string;
58
- export declare const _getQueryParam: (url: string, param: string) => string;
59
- export declare const _getHashParam: (hash: string, param: string) => string | null;
60
49
  export declare const _register_event: (element: Element | Window | Document | Node, type: string, handler: EventHandler, oldSchool?: boolean, useCapture?: boolean) => void;
61
- export declare const isLocalhost: () => boolean;
62
50
  export declare function loadScript(scriptUrlToLoad: string, callback: (error?: string | Event, event?: Event) => void): void;
63
- export declare const _info: {
64
- campaignParams: (customParams?: string[]) => Record<string, any>;
65
- searchEngine: () => string | null;
66
- searchInfo: () => Record<string, any>;
67
- /**
68
- * This function detects which browser is running this script.
69
- * The order of the checks are important since many user agents
70
- * include key words used in later checks.
71
- */
72
- browser: (user_agent: string, vendor: string, opera?: any) => string;
73
- /**
74
- * This function detects which browser version is running this script,
75
- * parsing major and minor version (e.g., 42.1). User agent strings from:
76
- * http://www.useragentstring.com/pages/useragentstring.php
77
- */
78
- browserVersion: (userAgent: string, vendor: string, opera: string) => number | null;
79
- browserLanguage: () => string;
80
- os: (user_agent: string) => {
81
- os_name: string;
82
- os_version: string;
83
- };
84
- device: (user_agent: string) => string;
85
- deviceType: (user_agent: string) => string;
86
- referrer: () => string;
87
- referringDomain: () => string;
88
- properties: () => Properties;
89
- people_properties: () => Properties;
90
- };
91
51
  export declare function isCrossDomainCookie(documentLocation: Location | undefined): boolean;
92
52
  export { win as window, userAgent, document };