@tiendanube/live-state 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +109 -0
- package/dist/clarity-BvtWdaMS.js +45 -0
- package/dist/clarity-BvtWdaMS.js.map +1 -0
- package/dist/clarity-Dc6nPh3X.cjs +2 -0
- package/dist/clarity-Dc6nPh3X.cjs.map +1 -0
- package/dist/index.cjs +12 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +8039 -0
- package/dist/index.js.map +1 -0
- package/dist/src/components/LiveStateAlert.d.ts +15 -0
- package/dist/src/components/LiveStateAlert.d.ts.map +1 -0
- package/dist/src/components/LiveStateInfo.d.ts +16 -0
- package/dist/src/components/LiveStateInfo.d.ts.map +1 -0
- package/dist/src/components/LiveStateRenderer.d.ts +11 -0
- package/dist/src/components/LiveStateRenderer.d.ts.map +1 -0
- package/dist/src/hooks/useLiveState.d.ts +22 -0
- package/dist/src/hooks/useLiveState.d.ts.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/providers/LiveStateProvider.d.ts +28 -0
- package/dist/src/providers/LiveStateProvider.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +101 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/utils/analytics.d.ts +41 -0
- package/dist/src/utils/analytics.d.ts.map +1 -0
- package/dist/src/utils/cta.d.ts +8 -0
- package/dist/src/utils/cta.d.ts.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["React","noop","UNDEFINED","React","useEffect","useLayoutEffect","SWRConfig","use","React","React","serialize$1","isUndefined$1","isFunction$1","OBJECT$1","__assign","__values","__read","IdentifyOperation","__values","__assign","__read","__read","__values","__assign","__assign","__values","__assign","IdentifyOperation","__assign","__assign","__values","__read","getLanguage","__assign","__values","__read","__assign","__values","__assign","__read","globalScope","__values","__read","__read","__values","__read","__read","__values","__read","__assign","__assign","__values","ZenObservable","__values","safeJsonStringifyModule","__values","__assign","VERSION","VERSION","__assign","__assign","__values","__read","__assign","__read","__assign","__read","VERSION","__assign","PAGE_VIEW_SESSION_STORAGE_KEY","__assign","__read","IdentifyOperation","__values","__read","__assign","PLUGIN_NAME","__read","constants.PAGE_VIEW_SESSION_STORAGE_KEY","Observable","__assign","__values","__values","__values","constants.DATA_AMP_MASK_ATTRIBUTES","__read","__values","constants.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY","constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG","constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT","constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT","constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP","constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES","constants.AMPLITUDE_EVENT_PROP_ELEMENT_PATH","constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL","constants.AMPLITUDE_EVENT_PROP_PAGE_URL","constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE","constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT","constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH","constants.AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID","constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID","constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS","constants.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL","constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF","constants.AMPLITUDE_EVENT_PROP_PAGE_URL","constants.AMPLITUDE_EVENT_PROP_MAX_PAGE_X","constants.AMPLITUDE_EVENT_PROP_MAX_PAGE_Y","constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT","constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH","constants.AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID","ObservablesEnum","__assign","constants.PLUGIN_NAME","Observable","__read","constants.AMPLITUDE_ORIGINS_MAP","__values","__assign","__assign","__assign","Observable","constants.FRUSTRATION_PLUGIN_NAME","__read","Observable","__assign","ObservablesEnum","__values","PLUGIN_NAME","__values","__read","constants.PLUGIN_NAME","Observable","__assign","__read","__read","__assign","__assign","VERSION","__values","__read","client"],"sources":["../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../node_modules/use-sync-external-store/shim/index.js","../node_modules/dequal/lite/index.mjs","../node_modules/swr/dist/_internal/config-context-12s-CCVTDPOP.mjs","../node_modules/swr/dist/_internal/constants.mjs","../node_modules/swr/dist/_internal/index.mjs","../node_modules/swr/dist/index/index.mjs","../node_modules/tslib/tslib.es6.mjs","../node_modules/@amplitude/analytics-core/lib/esm/types/event/event.js","../node_modules/@amplitude/analytics-core/lib/esm/types/constants.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/valid-properties.js","../node_modules/@amplitude/analytics-core/lib/esm/identify.js","../node_modules/@amplitude/analytics-core/lib/esm/types/messages.js","../node_modules/@amplitude/analytics-core/lib/esm/types/status.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/result-builder.js","../node_modules/@amplitude/analytics-core/lib/esm/global-scope.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/uuid.js","../node_modules/@amplitude/analytics-core/lib/esm/timeline.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/event-builder.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/return-wrapper.js","../node_modules/@amplitude/analytics-core/lib/esm/core-client.js","../node_modules/@amplitude/analytics-core/lib/esm/revenue.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/chunk.js","../node_modules/@amplitude/analytics-core/lib/esm/types/loglevel.js","../node_modules/@amplitude/analytics-core/lib/esm/logger.js","../node_modules/@amplitude/analytics-core/lib/esm/config.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/status-code.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/debug.js","../node_modules/@amplitude/analytics-core/lib/esm/plugins/destination.js","../node_modules/@amplitude/analytics-connector/dist/analytics-connector.esm.js","../node_modules/@amplitude/analytics-core/lib/esm/analytics-connector.js","../node_modules/@amplitude/analytics-core/lib/esm/plugins/identity.js","../node_modules/@amplitude/analytics-core/lib/esm/session.js","../node_modules/@amplitude/analytics-core/lib/esm/cookie-name.js","../node_modules/@amplitude/analytics-core/lib/esm/language.js","../node_modules/@amplitude/analytics-core/lib/esm/query-params.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/url-utils.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/sampling.js","../node_modules/@amplitude/analytics-core/lib/esm/storage/memory.js","../node_modules/@amplitude/analytics-core/lib/esm/storage/cookie.js","../node_modules/@amplitude/analytics-core/lib/esm/storage/helpers.js","../node_modules/@amplitude/analytics-core/lib/esm/storage/browser-storage.js","../node_modules/@amplitude/analytics-core/lib/esm/diagnostics/diagnostics-storage.js","../node_modules/@amplitude/analytics-core/lib/esm/diagnostics/uncaught-sdk-errors.js","../node_modules/@amplitude/analytics-core/lib/esm/diagnostics/diagnostics-client.js","../node_modules/@amplitude/analytics-core/lib/esm/transports/base.js","../node_modules/@amplitude/analytics-core/lib/esm/transports/gzip.js","../node_modules/@amplitude/analytics-core/lib/esm/remote-config/remote-config-localstorage.js","../node_modules/@amplitude/analytics-core/lib/esm/remote-config/remote-config.js","../node_modules/@amplitude/analytics-core/lib/esm/observers/console.js","../node_modules/@amplitude/analytics-core/lib/esm/types/element-interactions.js","../node_modules/@amplitude/analytics-core/lib/esm/types/frustration-interactions.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/json-query.js","../node_modules/@amplitude/analytics-core/lib/esm/network-request-event.js","../node_modules/@amplitude/analytics-core/lib/esm/observers/network.js","../node_modules/@amplitude/analytics-core/lib/esm/campaign/campaign-parser.js","../node_modules/@amplitude/analytics-core/lib/esm/plugins/helpers.js","../node_modules/zen-observable/lib/Observable.js","../node_modules/zen-observable/index.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/observable.js","../node_modules/safe-json-stringify/index.js","../node_modules/@amplitude/analytics-core/lib/esm/utils/safe-stringify.js","../node_modules/@amplitude/analytics-core/lib/esm/messenger/constants.js","../node_modules/@amplitude/analytics-core/lib/esm/messenger/utils.js","../node_modules/@amplitude/analytics-core/lib/esm/messenger/base-window-messenger.js","../node_modules/@amplitude/analytics-core/lib/esm/messenger/background-capture.js","../node_modules/@amplitude/analytics-core/lib/esm/types/config/browser-config.js","../node_modules/@amplitude/analytics-browser/lib/esm/default-tracking.js","../node_modules/@amplitude/analytics-browser/lib/esm/utils/snippet-helper.js","../node_modules/@amplitude/analytics-browser/lib/esm/version.js","../node_modules/@amplitude/analytics-browser/lib/esm/lib-prefix.js","../node_modules/@amplitude/analytics-browser/lib/esm/plugins/context.js","../node_modules/@amplitude/analytics-browser/lib/esm/storage/local-storage.js","../node_modules/@amplitude/analytics-browser/lib/esm/storage/session-storage.js","../node_modules/@amplitude/analytics-browser/lib/esm/transports/xhr.js","../node_modules/@amplitude/analytics-browser/lib/esm/transports/fetch.js","../node_modules/@amplitude/analytics-browser/lib/esm/transports/send-beacon.js","../node_modules/@amplitude/analytics-browser/lib/esm/cookie-migration/index.js","../node_modules/@amplitude/analytics-browser/lib/esm/constants.js","../node_modules/@amplitude/analytics-browser/lib/esm/attribution/helpers.js","../node_modules/@amplitude/analytics-browser/lib/esm/config.js","../node_modules/@amplitude/plugin-page-view-tracking-browser/lib/esm/utils.js","../node_modules/@amplitude/plugin-page-view-tracking-browser/lib/esm/page-view-tracking.js","../node_modules/@amplitude/analytics-browser/lib/esm/plugins/form-interaction-tracking.js","../node_modules/@amplitude/analytics-browser/lib/esm/plugins/file-download-tracking.js","../node_modules/@amplitude/analytics-browser/lib/esm/det-notification.js","../node_modules/@amplitude/analytics-browser/lib/esm/plugins/network-connectivity-checker.js","../node_modules/@amplitude/analytics-browser/lib/esm/config/joined-config.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/version.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/constants.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/helpers.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/libs/messenger.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-click.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-change.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-action-click.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-scroll.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/observables.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/pageActions/matchEventToFilter.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/pageActions/actions.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/pageActions/triggers.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/hierarchy.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/libs/element-path.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/data-extractor.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-exposure.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-viewport-content-updated.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture-plugin.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-dead-click.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-rage-click.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-error-click.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/autocapture/track-thrashed-cursor.js","../node_modules/@amplitude/plugin-autocapture-browser/lib/esm/frustration-plugin.js","../node_modules/@amplitude/plugin-network-capture-browser/lib/esm/constants.js","../node_modules/@amplitude/plugin-network-capture-browser/lib/esm/track-network-event.js","../node_modules/@amplitude/plugin-network-capture-browser/lib/esm/network-capture-plugin.js","../node_modules/@amplitude/plugin-web-vitals-browser/lib/esm/constants.js","../node_modules/web-vitals/dist/web-vitals.js","../node_modules/@amplitude/plugin-web-vitals-browser/lib/esm/web-vitals-plugin.js","../node_modules/@amplitude/analytics-browser/lib/esm/attribution/web-attribution.js","../node_modules/@amplitude/plugin-page-url-enrichment-browser/lib/esm/page-url-enrichment.js","../node_modules/@amplitude/plugin-custom-enrichment-browser/lib/esm/custom-enrichment.js","../node_modules/@amplitude/analytics-browser/lib/esm/browser-client.js","../node_modules/@amplitude/analytics-browser/lib/esm/browser-client-factory.js","../node_modules/@amplitude/analytics-browser/lib/esm/index.js","../src/utils/analytics.ts","../src/providers/LiveStateProvider.tsx","../src/hooks/useLiveState.ts","../src/utils/cta.ts","../src/components/LiveStateAlert.tsx","../src/components/LiveStateInfo.tsx","../src/components/LiveStateRenderer.tsx"],"sourcesContent":["/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","var has = Object.prototype.hasOwnProperty;\n\nexport function dequal(foo, bar) {\n\tvar ctor, len;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","'use client';\nimport React, { useEffect, useLayoutEffect, createContext, useContext, useMemo, useRef, createElement } from 'react';\nimport * as revalidateEvents from './events.mjs';\nimport { dequal } from 'dequal/lite';\n\n// Global state used to deduplicate requests and store listeners\nconst SWRGlobalState = new WeakMap();\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\nconst mergeObjects = (a, b)=>({\n ...a,\n ...b\n });\nconst isPromiseLike = (x)=>isFunction(x.then);\n\nconst EMPTY_CACHE = {};\nconst INITIAL_CACHE = {};\nconst STR_UNDEFINED = 'undefined';\n// NOTE: Use the function to guarantee it's re-evaluated between jsdom and node runtime for tests.\nconst isWindowDefined = typeof window != STR_UNDEFINED;\nconst isDocumentDefined = typeof document != STR_UNDEFINED;\nconst isLegacyDeno = isWindowDefined && 'Deno' in window;\nconst hasRequestAnimationFrame = ()=>isWindowDefined && typeof window['requestAnimationFrame'] != STR_UNDEFINED;\nconst createCacheHelper = (cache, key)=>{\n const state = SWRGlobalState.get(cache);\n return [\n // Getter\n ()=>!isUndefined(key) && cache.get(key) || EMPTY_CACHE,\n // Setter\n (info)=>{\n if (!isUndefined(key)) {\n const prev = cache.get(key);\n // Before writing to the store, we keep the value in the initial cache\n // if it's not there yet.\n if (!(key in INITIAL_CACHE)) {\n INITIAL_CACHE[key] = prev;\n }\n state[5](key, mergeObjects(prev, info), prev || EMPTY_CACHE);\n }\n },\n // Subscriber\n state[6],\n // Get server cache snapshot\n ()=>{\n if (!isUndefined(key)) {\n // If the cache was updated on the client, we return the stored initial value.\n if (key in INITIAL_CACHE) return INITIAL_CACHE[key];\n }\n // If we haven't done any client-side updates, we return the current value.\n return !isUndefined(key) && cache.get(key) || EMPTY_CACHE;\n }\n ];\n} // export { UNDEFINED, OBJECT, isUndefined, isFunction, mergeObjects, isPromiseLike }\n;\n\n/**\n * Due to the bug https://bugs.chromium.org/p/chromium/issues/detail?id=678075,\n * it's not reliable to detect if the browser is currently online or offline\n * based on `navigator.onLine`.\n * As a workaround, we always assume it's online on the first load, and change\n * the status upon `online` or `offline` events.\n */ let online = true;\nconst isOnline = ()=>online;\n// For node and React Native, `add/removeEventListener` doesn't exist on window.\nconst [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListener ? [\n window.addEventListener.bind(window),\n window.removeEventListener.bind(window)\n] : [\n noop,\n noop\n];\nconst isVisible = ()=>{\n const visibilityState = isDocumentDefined && document.visibilityState;\n return isUndefined(visibilityState) || visibilityState !== 'hidden';\n};\nconst initFocus = (callback)=>{\n // focus revalidate\n if (isDocumentDefined) {\n document.addEventListener('visibilitychange', callback);\n }\n onWindowEvent('focus', callback);\n return ()=>{\n if (isDocumentDefined) {\n document.removeEventListener('visibilitychange', callback);\n }\n offWindowEvent('focus', callback);\n };\n};\nconst initReconnect = (callback)=>{\n // revalidate on reconnected\n const onOnline = ()=>{\n online = true;\n callback();\n };\n // nothing to revalidate, just update the status\n const onOffline = ()=>{\n online = false;\n };\n onWindowEvent('online', onOnline);\n onWindowEvent('offline', onOffline);\n return ()=>{\n offWindowEvent('online', onOnline);\n offWindowEvent('offline', onOffline);\n };\n};\nconst preset = {\n isOnline,\n isVisible\n};\nconst defaultConfigOptions = {\n initFocus,\n initReconnect\n};\n\nconst IS_REACT_LEGACY = !React.useId;\nconst IS_SERVER = !isWindowDefined || isLegacyDeno;\n// Polyfill requestAnimationFrame\nconst rAF = (f)=>hasRequestAnimationFrame() ? window['requestAnimationFrame'](f) : setTimeout(f, 1);\n// React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser.\nconst useIsomorphicLayoutEffect = IS_SERVER ? useEffect : useLayoutEffect;\n// This assignment is to extend the Navigator type to use effectiveType.\nconst navigatorConnection = typeof navigator !== 'undefined' && navigator.connection;\n// Adjust the config based on slow connection status (<= 70Kbps).\nconst slowConnection = !IS_SERVER && navigatorConnection && ([\n 'slow-2g',\n '2g'\n].includes(navigatorConnection.effectiveType) || navigatorConnection.saveData);\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nconst table = new WeakMap();\nconst getTypeName = (value)=>OBJECT.prototype.toString.call(value);\nconst isObjectTypeName = (typeName, type)=>typeName === `[object ${type}]`;\n// counter of the key\nlet counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const typeName = getTypeName(arg);\n const isDate = isObjectTypeName(typeName, 'Date');\n const isRegex = isObjectTypeName(typeName, 'RegExp');\n const isPlainObject = isObjectTypeName(typeName, 'Object');\n let result;\n let index;\n if (OBJECT(arg) === arg && !isDate && !isRegex) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result) return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (Array.isArray(arg)) {\n // Array.\n result = '@';\n for(index = 0; index < arg.length; index++){\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (isPlainObject) {\n // Object, sort keys.\n result = '#';\n const keys = OBJECT.keys(arg).sort();\n while(!isUndefined(index = keys.pop())){\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\n// Global timestamp.\nlet __timestamp = 0;\nconst getTimestamp = ()=>++__timestamp;\n\nasync function internalMutate(...args) {\n const [cache, _key, _data, _opts] = args;\n // When passing as a boolean, it's explicitly used to disable/enable\n // revalidation.\n const options = mergeObjects({\n populateCache: true,\n throwOnError: true\n }, typeof _opts === 'boolean' ? {\n revalidate: _opts\n } : _opts || {});\n let populateCache = options.populateCache;\n const rollbackOnErrorOption = options.rollbackOnError;\n let optimisticData = options.optimisticData;\n const rollbackOnError = (error)=>{\n return typeof rollbackOnErrorOption === 'function' ? rollbackOnErrorOption(error) : rollbackOnErrorOption !== false;\n };\n const throwOnError = options.throwOnError;\n // If the second argument is a key filter, return the mutation results for all\n // filtered keys.\n if (isFunction(_key)) {\n const keyFilter = _key;\n const matchedKeys = [];\n const it = cache.keys();\n for (const key of it){\n if (// Skip the special useSWRInfinite and useSWRSubscription keys.\n !/^\\$(inf|sub)\\$/.test(key) && keyFilter(cache.get(key)._k)) {\n matchedKeys.push(key);\n }\n }\n return Promise.all(matchedKeys.map(mutateByKey));\n }\n return mutateByKey(_key);\n async function mutateByKey(_k) {\n // Serialize key\n const [key] = serialize(_k);\n if (!key) return;\n const [get, set] = createCacheHelper(cache, key);\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n const startRevalidate = ()=>{\n const revalidators = EVENT_REVALIDATORS[key];\n const revalidate = isFunction(options.revalidate) ? options.revalidate(get().data, _k) : options.revalidate !== false;\n if (revalidate) {\n // Invalidate the key by deleting the concurrent request markers so new\n // requests will not be deduped.\n delete FETCH[key];\n delete PRELOAD[key];\n if (revalidators && revalidators[0]) {\n return revalidators[0](revalidateEvents.MUTATE_EVENT).then(()=>get().data);\n }\n }\n return get().data;\n };\n // If there is no new data provided, revalidate the key with current state.\n if (args.length < 3) {\n // Revalidate and broadcast state.\n return startRevalidate();\n }\n let data = _data;\n let error;\n let isError = false;\n // Update global timestamps.\n const beforeMutationTs = getTimestamp();\n MUTATION[key] = [\n beforeMutationTs,\n 0\n ];\n const hasOptimisticData = !isUndefined(optimisticData);\n const state = get();\n // `displayedData` is the current value on screen. It could be the optimistic value\n // that is going to be overridden by a `committedData`, or get reverted back.\n // `committedData` is the validated value that comes from a fetch or mutation.\n const displayedData = state.data;\n const currentData = state._c;\n const committedData = isUndefined(currentData) ? displayedData : currentData;\n // Do optimistic data update.\n if (hasOptimisticData) {\n optimisticData = isFunction(optimisticData) ? optimisticData(committedData, displayedData) : optimisticData;\n // When we set optimistic data, backup the current committedData data in `_c`.\n set({\n data: optimisticData,\n _c: committedData\n });\n }\n if (isFunction(data)) {\n // `data` is a function, call it passing current cache value.\n try {\n data = data(committedData);\n } catch (err) {\n // If it throws an error synchronously, we shouldn't update the cache.\n error = err;\n isError = true;\n }\n }\n // `data` is a promise/thenable, resolve the final data first.\n if (data && isPromiseLike(data)) {\n // This means that the mutation is async, we need to check timestamps to\n // avoid race conditions.\n data = await data.catch((err)=>{\n error = err;\n isError = true;\n });\n // Check if other mutations have occurred since we've started this mutation.\n // If there's a race we don't update cache or broadcast the change,\n // just return the data.\n if (beforeMutationTs !== MUTATION[key][0]) {\n if (isError) throw error;\n return data;\n } else if (isError && hasOptimisticData && rollbackOnError(error)) {\n // Rollback. Always populate the cache in this case but without\n // transforming the data.\n populateCache = true;\n // Reset data to be the latest committed data, and clear the `_c` value.\n set({\n data: committedData,\n _c: UNDEFINED\n });\n }\n }\n // If we should write back the cache after request.\n if (populateCache) {\n if (!isError) {\n // Transform the result into data.\n if (isFunction(populateCache)) {\n const populateCachedData = populateCache(data, committedData);\n set({\n data: populateCachedData,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n } else {\n // Only update cached data and reset the error if there's no error. Data can be `undefined` here.\n set({\n data,\n error: UNDEFINED,\n _c: UNDEFINED\n });\n }\n }\n }\n // Reset the timestamp to mark the mutation has ended.\n MUTATION[key][1] = getTimestamp();\n // Update existing SWR Hooks' internal states:\n Promise.resolve(startRevalidate()).then(()=>{\n // The mutation and revalidation are ended, we can clear it since the data is\n // not an optimistic value anymore.\n set({\n _c: UNDEFINED\n });\n });\n // Throw error or return data\n if (isError) {\n if (throwOnError) throw error;\n return;\n }\n return data;\n }\n}\n\nconst revalidateAllKeys = (revalidators, type)=>{\n for(const key in revalidators){\n if (revalidators[key][0]) revalidators[key][0](type);\n }\n};\nconst initCache = (provider, options)=>{\n // The global state for a specific provider will be used to deduplicate\n // requests and store listeners. As well as a mutate function that is bound to\n // the cache.\n // The provider's global state might be already initialized. Let's try to get the\n // global state associated with the provider first.\n if (!SWRGlobalState.has(provider)) {\n const opts = mergeObjects(defaultConfigOptions, options);\n // If there's no global state bound to the provider, create a new one with the\n // new mutate function.\n const EVENT_REVALIDATORS = Object.create(null);\n const mutate = internalMutate.bind(UNDEFINED, provider);\n let unmount = noop;\n const subscriptions = Object.create(null);\n const subscribe = (key, callback)=>{\n const subs = subscriptions[key] || [];\n subscriptions[key] = subs;\n subs.push(callback);\n return ()=>subs.splice(subs.indexOf(callback), 1);\n };\n const setter = (key, value, prev)=>{\n provider.set(key, value);\n const subs = subscriptions[key];\n if (subs) {\n for (const fn of subs){\n fn(value, prev);\n }\n }\n };\n const initProvider = ()=>{\n if (!SWRGlobalState.has(provider)) {\n // Update the state if it's new, or if the provider has been extended.\n SWRGlobalState.set(provider, [\n EVENT_REVALIDATORS,\n Object.create(null),\n Object.create(null),\n Object.create(null),\n mutate,\n setter,\n subscribe\n ]);\n if (!IS_SERVER) {\n // When listening to the native events for auto revalidations,\n // we intentionally put a delay (setTimeout) here to make sure they are\n // fired after immediate JavaScript executions, which can be\n // React's state updates.\n // This avoids some unnecessary revalidations such as\n // https://github.com/vercel/swr/issues/1680.\n const releaseFocus = opts.initFocus(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, revalidateEvents.FOCUS_EVENT)));\n const releaseReconnect = opts.initReconnect(setTimeout.bind(UNDEFINED, revalidateAllKeys.bind(UNDEFINED, EVENT_REVALIDATORS, revalidateEvents.RECONNECT_EVENT)));\n unmount = ()=>{\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n releaseFocus && releaseFocus();\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n releaseReconnect && releaseReconnect();\n // When un-mounting, we need to remove the cache provider from the state\n // storage too because it's a side-effect. Otherwise, when re-mounting we\n // will not re-register those event listeners.\n SWRGlobalState.delete(provider);\n };\n }\n }\n };\n initProvider();\n // This is a new provider, we need to initialize it and setup DOM events\n // listeners for `focus` and `reconnect` actions.\n // We might want to inject an extra layer on top of `provider` in the future,\n // such as key serialization, auto GC, etc.\n // For now, it's just a `Map` interface without any modifications.\n return [\n provider,\n mutate,\n initProvider,\n unmount\n ];\n }\n return [\n provider,\n SWRGlobalState.get(provider)[4]\n ];\n};\n\n// error retry\nconst onErrorRetry = (_, __, config, revalidate, opts)=>{\n const maxRetryCount = config.errorRetryCount;\n const currentRetryCount = opts.retryCount;\n // Exponential backoff\n const timeout = ~~((Math.random() + 0.5) * (1 << (currentRetryCount < 8 ? currentRetryCount : 8))) * config.errorRetryInterval;\n if (!isUndefined(maxRetryCount) && currentRetryCount > maxRetryCount) {\n return;\n }\n setTimeout(revalidate, timeout, opts);\n};\nconst compare = dequal;\n// Default cache provider\nconst [cache, mutate] = initCache(new Map());\n// Default config\nconst defaultConfig = mergeObjects({\n // events\n onLoadingSlow: noop,\n onSuccess: noop,\n onError: noop,\n onErrorRetry,\n onDiscarded: noop,\n // switches\n revalidateOnFocus: true,\n revalidateOnReconnect: true,\n revalidateIfStale: true,\n shouldRetryOnError: true,\n // timeouts\n errorRetryInterval: slowConnection ? 10000 : 5000,\n focusThrottleInterval: 5 * 1000,\n dedupingInterval: 2 * 1000,\n loadingTimeout: slowConnection ? 5000 : 3000,\n // providers\n compare,\n isPaused: ()=>false,\n cache,\n mutate,\n fallback: {}\n}, // use web preset by default\npreset);\n\nconst mergeConfigs = (a, b)=>{\n // Need to create a new object to avoid mutating the original here.\n const v = mergeObjects(a, b);\n // If two configs are provided, merge their `use` and `fallback` options.\n if (b) {\n const { use: u1, fallback: f1 } = a;\n const { use: u2, fallback: f2 } = b;\n if (u1 && u2) {\n v.use = u1.concat(u2);\n }\n if (f1 && f2) {\n v.fallback = mergeObjects(f1, f2);\n }\n }\n return v;\n};\n\nconst SWRConfigContext = createContext({});\nconst SWRConfig = (props)=>{\n const { value } = props;\n const parentConfig = useContext(SWRConfigContext);\n const isFunctionalConfig = isFunction(value);\n const config = useMemo(()=>isFunctionalConfig ? value(parentConfig) : value, [\n isFunctionalConfig,\n parentConfig,\n value\n ]);\n // Extend parent context values and middleware.\n const extendedConfig = useMemo(()=>isFunctionalConfig ? config : mergeConfigs(parentConfig, config), [\n isFunctionalConfig,\n parentConfig,\n config\n ]);\n // Should not use the inherited provider.\n const provider = config && config.provider;\n // initialize the cache only on first access.\n const cacheContextRef = useRef(UNDEFINED);\n if (provider && !cacheContextRef.current) {\n cacheContextRef.current = initCache(provider(extendedConfig.cache || cache), config);\n }\n const cacheContext = cacheContextRef.current;\n // Override the cache if a new provider is given.\n if (cacheContext) {\n extendedConfig.cache = cacheContext[0];\n extendedConfig.mutate = cacheContext[1];\n }\n // Unsubscribe events.\n useIsomorphicLayoutEffect(()=>{\n if (cacheContext) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n cacheContext[2] && cacheContext[2]();\n return cacheContext[3];\n }\n }, []);\n return createElement(SWRConfigContext.Provider, mergeObjects(props, {\n value: extendedConfig\n }));\n};\n\nexport { noop as A, isPromiseLike as B, IS_SERVER as I, OBJECT as O, SWRConfigContext as S, UNDEFINED as U, isFunction as a, SWRGlobalState as b, cache as c, defaultConfig as d, isUndefined as e, mergeConfigs as f, SWRConfig as g, initCache as h, isWindowDefined as i, mutate as j, compare as k, stableHash as l, mergeObjects as m, internalMutate as n, getTimestamp as o, preset as p, defaultConfigOptions as q, IS_REACT_LEGACY as r, serialize as s, rAF as t, useIsomorphicLayoutEffect as u, slowConnection as v, isDocumentDefined as w, isLegacyDeno as x, hasRequestAnimationFrame as y, createCacheHelper as z };\n","const INFINITE_PREFIX = '$inf$';\n\nexport { INFINITE_PREFIX };\n","import { i as isWindowDefined, a as isFunction, S as SWRConfigContext, m as mergeObjects, d as defaultConfig, s as serialize, b as SWRGlobalState, c as cache, e as isUndefined, I as IS_SERVER, f as mergeConfigs } from './config-context-12s-CCVTDPOP.mjs';\nexport { r as IS_REACT_LEGACY, O as OBJECT, g as SWRConfig, U as UNDEFINED, k as compare, z as createCacheHelper, q as defaultConfigOptions, o as getTimestamp, y as hasRequestAnimationFrame, h as initCache, n as internalMutate, w as isDocumentDefined, x as isLegacyDeno, B as isPromiseLike, j as mutate, A as noop, p as preset, t as rAF, v as slowConnection, l as stableHash, u as useIsomorphicLayoutEffect } from './config-context-12s-CCVTDPOP.mjs';\nimport * as revalidateEvents from './events.mjs';\nexport { revalidateEvents };\nimport { INFINITE_PREFIX } from './constants.mjs';\nexport { INFINITE_PREFIX } from './constants.mjs';\nimport React, { useContext, useMemo } from 'react';\nexport * from './types.mjs';\n\n// @ts-expect-error\nconst enableDevtools = isWindowDefined && window.__SWR_DEVTOOLS_USE__;\nconst use = enableDevtools ? window.__SWR_DEVTOOLS_USE__ : [];\nconst setupDevTools = ()=>{\n if (enableDevtools) {\n // @ts-expect-error\n window.__SWR_DEVTOOLS_REACT__ = React;\n }\n};\n\nconst normalize = (args)=>{\n return isFunction(args[1]) ? [\n args[0],\n args[1],\n args[2] || {}\n ] : [\n args[0],\n null,\n (args[1] === null ? args[2] : args[1]) || {}\n ];\n};\n\nconst useSWRConfig = ()=>{\n const parentConfig = useContext(SWRConfigContext);\n const mergedConfig = useMemo(()=>mergeObjects(defaultConfig, parentConfig), [\n parentConfig\n ]);\n return mergedConfig;\n};\n\nconst preload = (key_, fetcher)=>{\n // preload should be a no-op on the server\n if (IS_SERVER) {\n return undefined;\n }\n const [key, fnArg] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n // Prevent preload to be called multiple times before used.\n if (PRELOAD[key]) return PRELOAD[key];\n const req = fetcher(fnArg);\n PRELOAD[key] = req;\n return req;\n};\nconst middleware = (useSWRNext)=>(key_, fetcher_, config)=>{\n // fetcher might be a sync function, so this should not be an async function\n const fetcher = fetcher_ && ((...args)=>{\n const [key] = serialize(key_);\n const [, , , PRELOAD] = SWRGlobalState.get(cache);\n if (key.startsWith(INFINITE_PREFIX)) {\n // we want the infinite fetcher to be called.\n // handling of the PRELOAD cache happens there.\n return fetcher_(...args);\n }\n const req = PRELOAD[key];\n if (isUndefined(req)) return fetcher_(...args);\n delete PRELOAD[key];\n return req;\n });\n return useSWRNext(key_, fetcher, config);\n };\n\nconst BUILT_IN_MIDDLEWARE = use.concat(middleware);\n\n// It's tricky to pass generic types as parameters, so we just directly override\n// the types here.\nconst withArgs = (hook)=>{\n return function useSWRArgs(...args) {\n // Get the default and inherited configuration.\n const fallbackConfig = useSWRConfig();\n // Normalize arguments.\n const [key, fn, _config] = normalize(args);\n // Merge configurations.\n const config = mergeConfigs(fallbackConfig, _config);\n // Apply middleware\n let next = hook;\n const { use } = config;\n const middleware = (use || []).concat(BUILT_IN_MIDDLEWARE);\n for(let i = middleware.length; i--;){\n next = middleware[i](next);\n }\n return next(key, fn || config.fetcher || null, config);\n };\n};\n\n// Add a callback function to a list of keyed callback functions and return\n// the unsubscribe function.\nconst subscribeCallback = (key, callbacks, callback)=>{\n const keyedRevalidators = callbacks[key] || (callbacks[key] = []);\n keyedRevalidators.push(callback);\n return ()=>{\n const index = keyedRevalidators.indexOf(callback);\n if (index >= 0) {\n // O(1): faster than splice\n keyedRevalidators[index] = keyedRevalidators[keyedRevalidators.length - 1];\n keyedRevalidators.pop();\n }\n };\n};\n\n// Create a custom hook with a middleware\nconst withMiddleware = (useSWR, middleware)=>{\n return (...args)=>{\n const [key, fn, config] = normalize(args);\n const uses = (config.use || []).concat(middleware);\n return useSWR(key, fn, {\n ...config,\n use: uses\n });\n };\n};\n\nsetupDevTools();\n\nexport { IS_SERVER, SWRGlobalState, cache, defaultConfig, isFunction, isUndefined, isWindowDefined, mergeConfigs, mergeObjects, normalize, preload, serialize, subscribeCallback, useSWRConfig, withArgs, withMiddleware };\n","import React, { useRef, useMemo, useCallback, useDebugValue } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { UNDEFINED as UNDEFINED$1, OBJECT as OBJECT$1, SWRConfig as SWRConfig$1, defaultConfig, withArgs, SWRGlobalState, serialize as serialize$1, createCacheHelper, isUndefined as isUndefined$1, isPromiseLike, IS_SERVER, noop as noop$1, getTimestamp, isFunction as isFunction$1, revalidateEvents, internalMutate, useIsomorphicLayoutEffect, subscribeCallback, rAF, IS_REACT_LEGACY, mergeObjects } from '../_internal/index.mjs';\nexport { mutate, preload, useSWRConfig } from '../_internal/index.mjs';\n\n// Shared state between server components and client components\nconst noop = ()=>{};\n// Using noop() as the undefined value as undefined can be replaced\n// by something else. Prettier ignore and extra parentheses are necessary here\n// to ensure that tsc doesn't remove the __NOINLINE__ comment.\n// prettier-ignore\nconst UNDEFINED = /*#__NOINLINE__*/ noop();\nconst OBJECT = Object;\nconst isUndefined = (v)=>v === UNDEFINED;\nconst isFunction = (v)=>typeof v == 'function';\n\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nconst table = new WeakMap();\nconst getTypeName = (value)=>OBJECT.prototype.toString.call(value);\nconst isObjectTypeName = (typeName, type)=>typeName === `[object ${type}]`;\n// counter of the key\nlet counter = 0;\n// A stable hash implementation that supports:\n// - Fast and ensures unique hash properties\n// - Handles unserializable values\n// - Handles object key ordering\n// - Generates short results\n//\n// This is not a serialization function, and the result is not guaranteed to be\n// parsable.\nconst stableHash = (arg)=>{\n const type = typeof arg;\n const typeName = getTypeName(arg);\n const isDate = isObjectTypeName(typeName, 'Date');\n const isRegex = isObjectTypeName(typeName, 'RegExp');\n const isPlainObject = isObjectTypeName(typeName, 'Object');\n let result;\n let index;\n if (OBJECT(arg) === arg && !isDate && !isRegex) {\n // Object/function, not null/date/regexp. Use WeakMap to store the id first.\n // If it's already hashed, directly return the result.\n result = table.get(arg);\n if (result) return result;\n // Store the hash first for circular reference detection before entering the\n // recursive `stableHash` calls.\n // For other objects like set and map, we use this id directly as the hash.\n result = ++counter + '~';\n table.set(arg, result);\n if (Array.isArray(arg)) {\n // Array.\n result = '@';\n for(index = 0; index < arg.length; index++){\n result += stableHash(arg[index]) + ',';\n }\n table.set(arg, result);\n }\n if (isPlainObject) {\n // Object, sort keys.\n result = '#';\n const keys = OBJECT.keys(arg).sort();\n while(!isUndefined(index = keys.pop())){\n if (!isUndefined(arg[index])) {\n result += index + ':' + stableHash(arg[index]) + ',';\n }\n }\n table.set(arg, result);\n }\n } else {\n result = isDate ? arg.toJSON() : type == 'symbol' ? arg.toString() : type == 'string' ? JSON.stringify(arg) : '' + arg;\n }\n return result;\n};\n\nconst serialize = (key)=>{\n if (isFunction(key)) {\n try {\n key = key();\n } catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n // Use the original key as the argument of fetcher. This can be a string or an\n // array of values.\n const args = key;\n // If key is not falsy, or not an empty array, hash it.\n key = typeof key == 'string' ? key : (Array.isArray(key) ? key.length : key) ? stableHash(key) : '';\n return [\n key,\n args\n ];\n};\n\nconst unstable_serialize = (key)=>serialize(key)[0];\n\n/// <reference types=\"react/experimental\" />\nconst use = React.use || // This extra generic is to avoid TypeScript mixing up the generic and JSX sytax\n// and emitting an error.\n// We assume that this is only for the `use(thenable)` case, not `use(context)`.\n// https://github.com/facebook/react/blob/aed00dacfb79d17c53218404c52b1c7aa59c4a89/packages/react-server/src/ReactFizzThenable.js#L45\n((thenable)=>{\n switch(thenable.status){\n case 'pending':\n throw thenable;\n case 'fulfilled':\n return thenable.value;\n case 'rejected':\n throw thenable.reason;\n default:\n thenable.status = 'pending';\n thenable.then((v)=>{\n thenable.status = 'fulfilled';\n thenable.value = v;\n }, (e)=>{\n thenable.status = 'rejected';\n thenable.reason = e;\n });\n throw thenable;\n }\n});\nconst WITH_DEDUPE = {\n dedupe: true\n};\nconst resolvedUndef = Promise.resolve(UNDEFINED$1);\nconst sub = ()=>noop$1;\n/**\n * The core implementation of the useSWR hook.\n *\n * This is the main handler function that implements all SWR functionality including\n * data fetching, caching, revalidation, error handling, and state management.\n * It manages the complete lifecycle of SWR requests from initialization through\n * cleanup.\n *\n * Key responsibilities:\n * - Key serialization and normalization\n * - Cache state management and synchronization\n * - Automatic and manual revalidation\n * - Error handling and retry logic\n * - Suspense integration\n * - Loading state management\n * - Effect cleanup and memory management\n *\n * @template Data - The type of data returned by the fetcher\n * @template Error - The type of error that can be thrown\n *\n * @param _key - The SWR key (string, array, object, function, or falsy)\n * @param fetcher - The fetcher function to retrieve data, or null to disable fetching\n * @param config - Complete SWR configuration object with both public and internal options\n *\n * @returns SWRResponse object containing data, error, mutate function, and loading states\n *\n * @internal This is the internal implementation. Use `useSWR` instead.\n */ const useSWRHandler = (_key, fetcher, config)=>{\n const { cache, compare, suspense, fallbackData, revalidateOnMount, revalidateIfStale, refreshInterval, refreshWhenHidden, refreshWhenOffline, keepPreviousData, strictServerPrefetchWarning } = config;\n const [EVENT_REVALIDATORS, MUTATION, FETCH, PRELOAD] = SWRGlobalState.get(cache);\n // `key` is the identifier of the SWR internal state,\n // `fnArg` is the argument/arguments parsed from the key, which will be passed\n // to the fetcher.\n // All of them are derived from `_key`.\n const [key, fnArg] = serialize$1(_key);\n // If it's the initial render of this hook.\n const initialMountedRef = useRef(false);\n // If the hook is unmounted already. This will be used to prevent some effects\n // to be called after unmounting.\n const unmountedRef = useRef(false);\n // Refs to keep the key and config.\n const keyRef = useRef(key);\n const fetcherRef = useRef(fetcher);\n const configRef = useRef(config);\n const getConfig = ()=>configRef.current;\n const isActive = ()=>getConfig().isVisible() && getConfig().isOnline();\n const [getCache, setCache, subscribeCache, getInitialCache] = createCacheHelper(cache, key);\n const stateDependencies = useRef({}).current;\n // Resolve the fallback data from either the inline option, or the global provider.\n // If it's a promise, we simply let React suspend and resolve it for us.\n const fallback = isUndefined$1(fallbackData) ? isUndefined$1(config.fallback) ? UNDEFINED$1 : config.fallback[key] : fallbackData;\n const isEqual = (prev, current)=>{\n for(const _ in stateDependencies){\n const t = _;\n if (t === 'data') {\n if (!compare(prev[t], current[t])) {\n if (!isUndefined$1(prev[t])) {\n return false;\n }\n if (!compare(returnedData, current[t])) {\n return false;\n }\n }\n } else {\n if (current[t] !== prev[t]) {\n return false;\n }\n }\n }\n return true;\n };\n const isInitialMount = !initialMountedRef.current;\n const getSnapshot = useMemo(()=>{\n const cachedData = getCache();\n const initialData = getInitialCache();\n const getSelectedCache = (state)=>{\n // We only select the needed fields from the state.\n const snapshot = mergeObjects(state);\n delete snapshot._k;\n const shouldStartRequest = (()=>{\n if (!key) return false;\n if (!fetcher) return false;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined$1(revalidateOnMount)) return revalidateOnMount;\n const data = !isUndefined$1(fallback) ? fallback : snapshot.data;\n if (suspense) return isUndefined$1(data) || revalidateIfStale;\n return isUndefined$1(data) || revalidateIfStale;\n })();\n if (!shouldStartRequest) {\n return snapshot;\n }\n return {\n isValidating: true,\n isLoading: true,\n ...snapshot\n };\n };\n const clientSnapshot = getSelectedCache(cachedData);\n const serverSnapshot = cachedData === initialData ? clientSnapshot : getSelectedCache(initialData);\n // To make sure that we are returning the same object reference to avoid\n // unnecessary re-renders, we keep the previous snapshot and use deep\n // comparison to check if we need to return a new one.\n let memorizedSnapshot = clientSnapshot;\n return [\n ()=>{\n const newSnapshot = getSelectedCache(getCache());\n const compareResult = isEqual(newSnapshot, memorizedSnapshot);\n if (compareResult) {\n // Mentally, we should always return the `memorizedSnapshot` here\n // as there's no change between the new and old snapshots.\n // However, since the `isEqual` function only compares selected fields,\n // the values of the unselected fields might be changed. That's\n // simply because we didn't track them.\n // To support the case in https://github.com/vercel/swr/pull/2576,\n // we need to update these fields in the `memorizedSnapshot` too\n // with direct mutations to ensure the snapshot is always up-to-date\n // even for the unselected fields, but only trigger re-renders when\n // the selected fields are changed.\n memorizedSnapshot.data = newSnapshot.data;\n memorizedSnapshot.isLoading = newSnapshot.isLoading;\n memorizedSnapshot.isValidating = newSnapshot.isValidating;\n memorizedSnapshot.error = newSnapshot.error;\n return memorizedSnapshot;\n } else {\n memorizedSnapshot = newSnapshot;\n return newSnapshot;\n }\n },\n ()=>serverSnapshot\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n cache,\n key\n ]);\n // Get the current state that SWR should return.\n const cached = useSyncExternalStore(useCallback((callback)=>subscribeCache(key, (current, prev)=>{\n if (!isEqual(prev, current)) callback();\n }), // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n cache,\n key\n ]), getSnapshot[0], getSnapshot[1]);\n const hasRevalidator = EVENT_REVALIDATORS[key] && EVENT_REVALIDATORS[key].length > 0;\n const cachedData = cached.data;\n const data = isUndefined$1(cachedData) ? fallback && isPromiseLike(fallback) ? use(fallback) : fallback : cachedData;\n const error = cached.error;\n // Use a ref to store previously returned data. Use the initial data as its initial value.\n const laggyDataRef = useRef(data);\n const returnedData = keepPreviousData ? isUndefined$1(cachedData) ? isUndefined$1(laggyDataRef.current) ? data : laggyDataRef.current : cachedData : data;\n const hasKeyButNoData = key && isUndefined$1(data);\n const hydrationRef = useRef(null);\n // Note: the conditionally hook call is fine because the environment\n // `IS_SERVER` never changes.\n // @ts-expect-error -- use hydrationRef directly\n !IS_SERVER && // getServerSnapshot is only called during hydration\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useSyncExternalStore(sub, ()=>{\n hydrationRef.current = false;\n return hydrationRef;\n }, ()=>{\n hydrationRef.current = true;\n return hydrationRef;\n });\n const isHydration = hydrationRef.current;\n // During the initial SSR render, warn if the key has no data pre-fetched via:\n // - fallback data\n // - preload calls\n // - initial data from the cache provider\n // We only warn once for each key during Hydration.\n if (strictServerPrefetchWarning && isHydration && !suspense && hasKeyButNoData) {\n console.warn(`Missing pre-initiated data for serialized key \"${key}\" during server-side rendering. Data fetching should be initiated on the server and provided to SWR via fallback data. You can set \"strictServerPrefetchWarning: false\" to disable this warning.`);\n }\n // Resolve the default validating state:\n // If it's able to validate, and it should revalidate when mount, this will be true.\n // - Suspense mode and there's stale data for the initial render.\n // - Not suspense mode and there is no fallback data and `revalidateIfStale` is enabled.\n // - `revalidateIfStale` is enabled but `data` is not defined.\n const shouldDoInitialRevalidation = (()=>{\n if (!key || !fetcher) return false;\n // If it's paused, we skip revalidation.\n if (getConfig().isPaused()) return false;\n // if a key already has revalidators and also has error, we should not trigger revalidation\n if (hasRevalidator && !isUndefined$1(error)) return false;\n // If `revalidateOnMount` is set, we take the value directly.\n if (isInitialMount && !isUndefined$1(revalidateOnMount)) return revalidateOnMount;\n // Under suspense mode, it will always fetch on render if there is no\n // stale data so no need to revalidate immediately mount it again.\n // If data exists, only revalidate if `revalidateIfStale` is true.\n if (suspense) return isUndefined$1(data) ? false : revalidateIfStale;\n // If there is no stale data, we need to revalidate when mount;\n // If `revalidateIfStale` is set to true, we will always revalidate.\n return isUndefined$1(data) || revalidateIfStale;\n })();\n const defaultValidatingState = isInitialMount && shouldDoInitialRevalidation;\n const isValidating = isUndefined$1(cached.isValidating) ? defaultValidatingState : cached.isValidating;\n const isLoading = isUndefined$1(cached.isLoading) ? defaultValidatingState : cached.isLoading;\n // The revalidation function is a carefully crafted wrapper of the original\n // `fetcher`, to correctly handle the many edge cases.\n const revalidate = useCallback(async (revalidateOpts)=>{\n const currentFetcher = fetcherRef.current;\n if (!key || !currentFetcher || unmountedRef.current || getConfig().isPaused()) {\n return false;\n }\n let newData;\n let startAt;\n let loading = true;\n const opts = revalidateOpts || {};\n // If there is no ongoing concurrent request, or `dedupe` is not set, a\n // new request should be initiated.\n const shouldStartNewRequest = !FETCH[key] || !opts.dedupe;\n /*\n For React 17\n Do unmount check for calls:\n If key has changed during the revalidation, or the component has been\n unmounted, old dispatch and old event callbacks should not take any\n effect\n\n For React 18\n only check if key has changed\n https://github.com/reactwg/react-18/discussions/82\n */ const callbackSafeguard = ()=>{\n if (IS_REACT_LEGACY) {\n return !unmountedRef.current && key === keyRef.current && initialMountedRef.current;\n }\n return key === keyRef.current;\n };\n // The final state object when the request finishes.\n const finalState = {\n isValidating: false,\n isLoading: false\n };\n const finishRequestAndUpdateState = ()=>{\n setCache(finalState);\n };\n const cleanupState = ()=>{\n // Check if it's still the same request before deleting it.\n const requestInfo = FETCH[key];\n if (requestInfo && requestInfo[1] === startAt) {\n delete FETCH[key];\n }\n };\n // Start fetching. Change the `isValidating` state, update the cache.\n const initialState = {\n isValidating: true\n };\n // It is in the `isLoading` state, if and only if there is no cached data.\n // This bypasses fallback data and laggy data.\n if (isUndefined$1(getCache().data)) {\n initialState.isLoading = true;\n }\n try {\n if (shouldStartNewRequest) {\n setCache(initialState);\n // If no cache is being rendered currently (it shows a blank page),\n // we trigger the loading slow event.\n if (config.loadingTimeout && isUndefined$1(getCache().data)) {\n setTimeout(()=>{\n if (loading && callbackSafeguard()) {\n getConfig().onLoadingSlow(key, config);\n }\n }, config.loadingTimeout);\n }\n // Start the request and save the timestamp.\n // Key must be truthy if entering here.\n FETCH[key] = [\n currentFetcher(fnArg),\n getTimestamp()\n ];\n }\n // Wait until the ongoing request is done. Deduplication is also\n // considered here.\n ;\n [newData, startAt] = FETCH[key];\n newData = await newData;\n if (shouldStartNewRequest) {\n // If the request isn't interrupted, clean it up after the\n // deduplication interval.\n setTimeout(cleanupState, config.dedupingInterval);\n }\n // If there're other ongoing request(s), started after the current one,\n // we need to ignore the current one to avoid possible race conditions:\n // req1------------------>res1 (current one)\n // req2---------------->res2\n // the request that fired later will always be kept.\n // The timestamp maybe be `undefined` or a number\n if (!FETCH[key] || FETCH[key][1] !== startAt) {\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Clear error.\n finalState.error = UNDEFINED$1;\n // If there're other mutations(s), that overlapped with the current revalidation:\n // case 1:\n // req------------------>res\n // mutate------>end\n // case 2:\n // req------------>res\n // mutate------>end\n // case 3:\n // req------------------>res\n // mutate-------...---------->\n // we have to ignore the revalidation result (res) because it's no longer fresh.\n // meanwhile, a new revalidation should be triggered when the mutation ends.\n const mutationInfo = MUTATION[key];\n if (!isUndefined$1(mutationInfo) && // case 1\n (startAt <= mutationInfo[0] || // case 2\n startAt <= mutationInfo[1] || // case 3\n mutationInfo[1] === 0)) {\n finishRequestAndUpdateState();\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onDiscarded(key);\n }\n }\n return false;\n }\n // Deep compare with the latest state to avoid extra re-renders.\n // For local state, compare and assign.\n const cacheData = getCache().data;\n // Since the compare fn could be custom fn\n // cacheData might be different from newData even when compare fn returns True\n finalState.data = compare(cacheData, newData) ? cacheData : newData;\n // Trigger the successful callback if it's the original request.\n if (shouldStartNewRequest) {\n if (callbackSafeguard()) {\n getConfig().onSuccess(newData, key, config);\n }\n }\n } catch (err) {\n cleanupState();\n const currentConfig = getConfig();\n const { shouldRetryOnError } = currentConfig;\n // Not paused, we continue handling the error. Otherwise, discard it.\n if (!currentConfig.isPaused()) {\n // Get a new error, don't use deep comparison for errors.\n finalState.error = err;\n // Error event and retry logic. Only for the actual request, not\n // deduped ones.\n if (shouldStartNewRequest && callbackSafeguard()) {\n currentConfig.onError(err, key, currentConfig);\n if (shouldRetryOnError === true || isFunction$1(shouldRetryOnError) && shouldRetryOnError(err)) {\n if (!getConfig().revalidateOnFocus || !getConfig().revalidateOnReconnect || isActive()) {\n // If it's inactive, stop. It will auto-revalidate when\n // refocusing or reconnecting.\n // When retrying, deduplication is always enabled.\n currentConfig.onErrorRetry(err, key, currentConfig, (_opts)=>{\n const revalidators = EVENT_REVALIDATORS[key];\n if (revalidators && revalidators[0]) {\n revalidators[0](revalidateEvents.ERROR_REVALIDATE_EVENT, _opts);\n }\n }, {\n retryCount: (opts.retryCount || 0) + 1,\n dedupe: true\n });\n }\n }\n }\n }\n }\n // Mark loading as stopped.\n loading = false;\n // Update the current hook's state.\n finishRequestAndUpdateState();\n return true;\n }, // `setState` is immutable, and `eventsCallback`, `fnArg`, and\n // `keyValidating` are depending on `key`, so we can exclude them from\n // the deps array.\n //\n // FIXME:\n // `fn` and `config` might be changed during the lifecycle,\n // but they might be changed every render like this.\n // `useSWR('key', () => fetch('/api/'), { suspense: true })`\n // So we omit the values from the deps array\n // even though it might cause unexpected behaviors.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n key,\n cache\n ]);\n // Similar to the global mutate but bound to the current cache and key.\n // `cache` isn't allowed to change during the lifecycle.\n const boundMutate = useCallback(// Use callback to make sure `keyRef.current` returns latest result every time\n (...args)=>{\n return internalMutate(cache, keyRef.current, ...args);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // The logic for updating refs.\n useIsomorphicLayoutEffect(()=>{\n fetcherRef.current = fetcher;\n configRef.current = config;\n // Handle laggy data updates. If there's cached data of the current key,\n // it'll be the correct reference.\n if (!isUndefined$1(cachedData)) {\n laggyDataRef.current = cachedData;\n }\n });\n // After mounted or key changed.\n useIsomorphicLayoutEffect(()=>{\n if (!key) return;\n const softRevalidate = revalidate.bind(UNDEFINED$1, WITH_DEDUPE);\n let nextFocusRevalidatedAt = 0;\n if (getConfig().revalidateOnFocus) {\n const initNow = Date.now();\n nextFocusRevalidatedAt = initNow + getConfig().focusThrottleInterval;\n }\n // Expose revalidators to global event listeners. So we can trigger\n // revalidation from the outside.\n const onRevalidate = (type, opts = {})=>{\n if (type == revalidateEvents.FOCUS_EVENT) {\n const now = Date.now();\n if (getConfig().revalidateOnFocus && now > nextFocusRevalidatedAt && isActive()) {\n nextFocusRevalidatedAt = now + getConfig().focusThrottleInterval;\n softRevalidate();\n }\n } else if (type == revalidateEvents.RECONNECT_EVENT) {\n if (getConfig().revalidateOnReconnect && isActive()) {\n softRevalidate();\n }\n } else if (type == revalidateEvents.MUTATE_EVENT) {\n return revalidate();\n } else if (type == revalidateEvents.ERROR_REVALIDATE_EVENT) {\n return revalidate(opts);\n }\n return;\n };\n const unsubEvents = subscribeCallback(key, EVENT_REVALIDATORS, onRevalidate);\n // Mark the component as mounted and update corresponding refs.\n unmountedRef.current = false;\n keyRef.current = key;\n initialMountedRef.current = true;\n // Keep the original key in the cache.\n setCache({\n _k: fnArg\n });\n // Trigger a revalidation\n if (shouldDoInitialRevalidation) {\n // Performance optimization: if a request is already in progress for this key,\n // skip the revalidation to avoid redundant work\n if (!FETCH[key]) {\n if (isUndefined$1(data) || IS_SERVER) {\n // Revalidate immediately.\n softRevalidate();\n } else {\n // Delay the revalidate if we have data to return so we won't block\n // rendering.\n rAF(softRevalidate);\n }\n }\n }\n return ()=>{\n // Mark it as unmounted.\n unmountedRef.current = true;\n unsubEvents();\n };\n }, [\n key\n ]);\n // Polling\n useIsomorphicLayoutEffect(()=>{\n let timer;\n function next() {\n // Use the passed interval\n // ...or invoke the function with the updated data to get the interval\n const interval = isFunction$1(refreshInterval) ? refreshInterval(getCache().data) : refreshInterval;\n // We only start the next interval if `refreshInterval` is not 0, and:\n // - `force` is true, which is the start of polling\n // - or `timer` is not 0, which means the effect wasn't canceled\n if (interval && timer !== -1) {\n timer = setTimeout(execute, interval);\n }\n }\n function execute() {\n // Check if it's OK to execute:\n // Only revalidate when the page is visible, online, and not errored.\n if (!getCache().error && (refreshWhenHidden || getConfig().isVisible()) && (refreshWhenOffline || getConfig().isOnline())) {\n revalidate(WITH_DEDUPE).then(next);\n } else {\n // Schedule the next interval to check again.\n next();\n }\n }\n next();\n return ()=>{\n if (timer) {\n clearTimeout(timer);\n timer = -1;\n }\n };\n }, [\n refreshInterval,\n refreshWhenHidden,\n refreshWhenOffline,\n key\n ]);\n // Display debug info in React DevTools.\n useDebugValue(returnedData);\n // In Suspense mode, we can't return the empty `data` state.\n // If there is an `error`, the `error` needs to be thrown to the error boundary.\n // If there is no `error`, the `revalidation` promise needs to be thrown to\n // the suspense boundary.\n if (suspense) {\n // SWR should throw when trying to use Suspense on the server with React 18,\n // without providing any fallback data. This causes hydration errors. See:\n // https://github.com/vercel/swr/issues/1832\n if (!IS_REACT_LEGACY && IS_SERVER && hasKeyButNoData) {\n throw new Error('Fallback data is required when using Suspense in SSR.');\n }\n // Always update fetcher and config refs even with the Suspense mode.\n if (hasKeyButNoData) {\n fetcherRef.current = fetcher;\n configRef.current = config;\n unmountedRef.current = false;\n }\n const req = PRELOAD[key];\n const mutateReq = !isUndefined$1(req) && hasKeyButNoData ? boundMutate(req) : resolvedUndef;\n use(mutateReq);\n if (!isUndefined$1(error) && hasKeyButNoData) {\n throw error;\n }\n const revalidation = hasKeyButNoData ? revalidate(WITH_DEDUPE) : resolvedUndef;\n if (!isUndefined$1(returnedData) && hasKeyButNoData) {\n // @ts-ignore modify react promise status\n revalidation.status = 'fulfilled';\n // @ts-ignore modify react promise value\n revalidation.value = true;\n }\n use(revalidation);\n }\n const swrResponse = {\n mutate: boundMutate,\n get data () {\n stateDependencies.data = true;\n return returnedData;\n },\n get error () {\n stateDependencies.error = true;\n return error;\n },\n get isValidating () {\n stateDependencies.isValidating = true;\n return isValidating;\n },\n get isLoading () {\n stateDependencies.isLoading = true;\n return isLoading;\n }\n };\n return swrResponse;\n};\nconst SWRConfig = OBJECT$1.defineProperty(SWRConfig$1, 'defaultValue', {\n value: defaultConfig\n});\n/**\n * A hook to fetch data.\n *\n * @see {@link https://swr.vercel.app}\n *\n * @example\n * ```jsx\n * import useSWR from 'swr'\n * function Profile() {\n * const { data, error, isLoading } = useSWR('/api/user', fetcher)\n * if (error) return <div>failed to load</div>\n * if (isLoading) return <div>loading...</div>\n * return <div>hello {data.name}!</div>\n * }\n * ```\n */ const useSWR = withArgs(useSWRHandler);\n\n// useSWR\n\nexport { SWRConfig, useSWR as default, unstable_serialize };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var IdentifyOperation;\n(function (IdentifyOperation) {\n // Base Operations to set values\n IdentifyOperation[\"SET\"] = \"$set\";\n IdentifyOperation[\"SET_ONCE\"] = \"$setOnce\";\n // Operations around modifying existing values\n IdentifyOperation[\"ADD\"] = \"$add\";\n IdentifyOperation[\"APPEND\"] = \"$append\";\n IdentifyOperation[\"PREPEND\"] = \"$prepend\";\n IdentifyOperation[\"REMOVE\"] = \"$remove\";\n // Operations around appending values *if* they aren't present\n IdentifyOperation[\"PREINSERT\"] = \"$preInsert\";\n IdentifyOperation[\"POSTINSERT\"] = \"$postInsert\";\n // Operations around removing properties/values\n IdentifyOperation[\"UNSET\"] = \"$unset\";\n IdentifyOperation[\"CLEAR_ALL\"] = \"$clearAll\";\n})(IdentifyOperation || (IdentifyOperation = {}));\n/**\n * Strings that have special meaning when used as an event's type\n * and have different specifications.\n */\nexport var SpecialEventType;\n(function (SpecialEventType) {\n SpecialEventType[\"IDENTIFY\"] = \"$identify\";\n SpecialEventType[\"GROUP_IDENTIFY\"] = \"$groupidentify\";\n SpecialEventType[\"REVENUE\"] = \"revenue_amount\";\n})(SpecialEventType || (SpecialEventType = {}));\n//# sourceMappingURL=event.js.map","export var UNSET_VALUE = '-';\nexport var AMPLITUDE_PREFIX = 'AMP';\nexport var STORAGE_PREFIX = \"\".concat(AMPLITUDE_PREFIX, \"_unsent\");\nexport var DEFAULT_INSTANCE_NAME = '$default_instance';\nexport var AMPLITUDE_SERVER_URL = 'https://api2.amplitude.com/2/httpapi';\nexport var EU_AMPLITUDE_SERVER_URL = 'https://api.eu.amplitude.com/2/httpapi';\nexport var AMPLITUDE_BATCH_SERVER_URL = 'https://api2.amplitude.com/batch';\nexport var EU_AMPLITUDE_BATCH_SERVER_URL = 'https://api.eu.amplitude.com/batch';\n// Campaign constants\nexport var UTM_CAMPAIGN = 'utm_campaign';\nexport var UTM_CONTENT = 'utm_content';\nexport var UTM_ID = 'utm_id';\nexport var UTM_MEDIUM = 'utm_medium';\nexport var UTM_SOURCE = 'utm_source';\nexport var UTM_TERM = 'utm_term';\nexport var DCLID = 'dclid';\nexport var FBCLID = 'fbclid';\nexport var GBRAID = 'gbraid';\nexport var GCLID = 'gclid';\nexport var KO_CLICK_ID = 'ko_click_id';\nexport var LI_FAT_ID = 'li_fat_id';\nexport var MSCLKID = 'msclkid';\nexport var RDT_CID = 'rdt_cid';\nexport var TTCLID = 'ttclid';\nexport var TWCLID = 'twclid';\nexport var WBRAID = 'wbraid';\nexport var EMPTY_VALUE = 'EMPTY';\nexport var BASE_CAMPAIGN = {\n utm_campaign: undefined,\n utm_content: undefined,\n utm_id: undefined,\n utm_medium: undefined,\n utm_source: undefined,\n utm_term: undefined,\n referrer: undefined,\n referring_domain: undefined,\n dclid: undefined,\n gbraid: undefined,\n gclid: undefined,\n fbclid: undefined,\n ko_click_id: undefined,\n li_fat_id: undefined,\n msclkid: undefined,\n rdt_cid: undefined,\n ttclid: undefined,\n twclid: undefined,\n wbraid: undefined,\n};\nexport var MKTG = 'MKTG';\n// list of Network headers that are safe to capture\nexport var SAFE_HEADERS = [\n 'access-control-allow-origin',\n 'access-control-allow-credentials',\n 'access-control-expose-headers',\n 'access-control-max-age',\n 'access-control-allow-methods',\n 'access-control-allow-headers',\n 'accept-patch',\n 'accept-ranges',\n 'age',\n 'allow',\n 'alt-svc',\n 'cache-control',\n 'connection',\n 'content-disposition',\n 'content-encoding',\n 'content-language',\n 'content-length',\n 'content-location',\n 'content-md5',\n 'content-range',\n 'content-type',\n 'date',\n 'delta-base',\n 'etag',\n 'expires',\n 'im',\n 'last-modified',\n 'link',\n 'location',\n 'permanent',\n 'p3p',\n 'pragma',\n 'proxy-authenticate',\n 'public-key-pins',\n 'retry-after',\n 'server',\n 'status',\n 'strict-transport-security',\n 'trailer',\n 'transfer-encoding',\n 'tk',\n 'upgrade',\n 'vary',\n 'via',\n 'warning',\n 'www-authenticate',\n 'x-b3-traceid',\n 'x-frame-options',\n];\n// list of Network headers to never capture\nexport var FORBIDDEN_HEADERS = ['authorization', 'cookie', 'set-cookie'];\n//# sourceMappingURL=constants.js.map","import { __values } from \"tslib\";\nvar MAX_PROPERTY_KEYS = 1000;\nexport var isValidObject = function (properties) {\n if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n return false;\n }\n for (var key in properties) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var value = properties[key];\n if (!isValidProperties(key, value))\n return false;\n }\n return true;\n};\nexport var isValidProperties = function (property, value) {\n var e_1, _a;\n if (typeof property !== 'string')\n return false;\n if (Array.isArray(value)) {\n var isValid = true;\n try {\n for (var value_1 = __values(value), value_1_1 = value_1.next(); !value_1_1.done; value_1_1 = value_1.next()) {\n var valueElement = value_1_1.value;\n if (Array.isArray(valueElement)) {\n return false;\n }\n else if (typeof valueElement === 'object') {\n isValid = isValid && isValidObject(valueElement);\n }\n else if (!['number', 'string'].includes(typeof valueElement)) {\n return false;\n }\n if (!isValid) {\n return false;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (value_1_1 && !value_1_1.done && (_a = value_1.return)) _a.call(value_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else if (value === null || value === undefined) {\n return false;\n }\n else if (typeof value === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return isValidObject(value);\n }\n else if (!['number', 'string', 'boolean'].includes(typeof value)) {\n return false;\n }\n return true;\n};\n//# sourceMappingURL=valid-properties.js.map","import { __assign } from \"tslib\";\nimport { UNSET_VALUE } from './types/constants';\nimport { isValidProperties } from './utils/valid-properties';\nvar Identify = /** @class */ (function () {\n function Identify() {\n this._propertySet = new Set();\n this._properties = {};\n }\n Identify.prototype.getUserProperties = function () {\n return __assign({}, this._properties);\n };\n Identify.prototype.set = function (property, value) {\n this._safeSet(IdentifyOperation.SET, property, value);\n return this;\n };\n Identify.prototype.setOnce = function (property, value) {\n this._safeSet(IdentifyOperation.SET_ONCE, property, value);\n return this;\n };\n Identify.prototype.append = function (property, value) {\n this._safeSet(IdentifyOperation.APPEND, property, value);\n return this;\n };\n Identify.prototype.prepend = function (property, value) {\n this._safeSet(IdentifyOperation.PREPEND, property, value);\n return this;\n };\n Identify.prototype.postInsert = function (property, value) {\n this._safeSet(IdentifyOperation.POSTINSERT, property, value);\n return this;\n };\n Identify.prototype.preInsert = function (property, value) {\n this._safeSet(IdentifyOperation.PREINSERT, property, value);\n return this;\n };\n Identify.prototype.remove = function (property, value) {\n this._safeSet(IdentifyOperation.REMOVE, property, value);\n return this;\n };\n Identify.prototype.add = function (property, value) {\n this._safeSet(IdentifyOperation.ADD, property, value);\n return this;\n };\n Identify.prototype.unset = function (property) {\n this._safeSet(IdentifyOperation.UNSET, property, UNSET_VALUE);\n return this;\n };\n Identify.prototype.clearAll = function () {\n // When clear all happens, all properties are unset. Reset the entire object.\n this._properties = {};\n this._properties[IdentifyOperation.CLEAR_ALL] = UNSET_VALUE;\n return this;\n };\n // Returns whether or not this set actually worked.\n Identify.prototype._safeSet = function (operation, property, value) {\n if (this._validate(operation, property, value)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var userPropertyMap = this._properties[operation];\n if (userPropertyMap === undefined) {\n userPropertyMap = {};\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this._properties[operation] = userPropertyMap;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n userPropertyMap[property] = value;\n this._propertySet.add(property);\n return true;\n }\n return false;\n };\n Identify.prototype._validate = function (operation, property, value) {\n if (this._properties[IdentifyOperation.CLEAR_ALL] !== undefined) {\n // clear all already set. Skipping operation;\n return false;\n }\n if (this._propertySet.has(property)) {\n // Property already used. Skipping operation\n return false;\n }\n if (operation === IdentifyOperation.ADD) {\n return typeof value === 'number';\n }\n if (operation !== IdentifyOperation.UNSET && operation !== IdentifyOperation.REMOVE) {\n return isValidProperties(property, value);\n }\n return true;\n };\n return Identify;\n}());\nexport { Identify };\nexport var IdentifyOperation;\n(function (IdentifyOperation) {\n // Base Operations to set values\n IdentifyOperation[\"SET\"] = \"$set\";\n IdentifyOperation[\"SET_ONCE\"] = \"$setOnce\";\n // Operations around modifying existing values\n IdentifyOperation[\"ADD\"] = \"$add\";\n IdentifyOperation[\"APPEND\"] = \"$append\";\n IdentifyOperation[\"PREPEND\"] = \"$prepend\";\n IdentifyOperation[\"REMOVE\"] = \"$remove\";\n // Operations around appending values *if* they aren't present\n IdentifyOperation[\"PREINSERT\"] = \"$preInsert\";\n IdentifyOperation[\"POSTINSERT\"] = \"$postInsert\";\n // Operations around removing properties/values\n IdentifyOperation[\"UNSET\"] = \"$unset\";\n IdentifyOperation[\"CLEAR_ALL\"] = \"$clearAll\";\n})(IdentifyOperation || (IdentifyOperation = {}));\n/**\n * Note that the order of operations should align with https://github.com/amplitude/nova/blob/7701b5986b565d4b2fb53b99a9f2175df055dea8/src/main/java/com/amplitude/ingestion/core/UserPropertyUtils.java#L210\n */\nexport var OrderedIdentifyOperations = [\n IdentifyOperation.CLEAR_ALL,\n IdentifyOperation.UNSET,\n IdentifyOperation.SET,\n IdentifyOperation.SET_ONCE,\n IdentifyOperation.ADD,\n IdentifyOperation.APPEND,\n IdentifyOperation.PREPEND,\n IdentifyOperation.PREINSERT,\n IdentifyOperation.POSTINSERT,\n IdentifyOperation.REMOVE,\n];\n//# sourceMappingURL=identify.js.map","export var SUCCESS_MESSAGE = 'Event tracked successfully';\nexport var UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport var MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';\nexport var OPT_OUT_MESSAGE = 'Event skipped due to optOut config';\nexport var MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';\nexport var INVALID_API_KEY = 'Invalid API key';\nexport var CLIENT_NOT_INITIALIZED = 'Client not initialized';\n//# sourceMappingURL=messages.js.map","/** The status of an event. */\nexport var Status;\n(function (Status) {\n /** The status could not be determined. */\n Status[\"Unknown\"] = \"unknown\";\n /** The event was skipped due to configuration or callbacks. */\n Status[\"Skipped\"] = \"skipped\";\n /** The event was sent successfully. */\n Status[\"Success\"] = \"success\";\n /** A user or device in the payload is currently rate limited and should try again later. */\n Status[\"RateLimit\"] = \"rate_limit\";\n /** The sent payload was too large to be processed. */\n Status[\"PayloadTooLarge\"] = \"payload_too_large\";\n /** The event could not be processed. */\n Status[\"Invalid\"] = \"invalid\";\n /** A server-side error ocurred during submission. */\n Status[\"Failed\"] = \"failed\";\n /** a server or client side error occuring when a request takes too long and is cancelled */\n Status[\"Timeout\"] = \"Timeout\";\n /** NodeJS runtime environment error.. E.g. disconnected from network */\n Status[\"SystemError\"] = \"SystemError\";\n})(Status || (Status = {}));\n//# sourceMappingURL=status.js.map","import { Status } from '../types/status';\nexport var buildResult = function (event, code, message) {\n if (code === void 0) { code = 0; }\n if (message === void 0) { message = Status.Unknown; }\n return { event: event, code: code, message: message };\n};\n//# sourceMappingURL=result-builder.js.map","/* eslint-disable no-restricted-globals */\n/* Only file allowed to access to globalThis, window, self */\nexport var getGlobalScope = function () {\n // This should only be used for integrations with Amplitude that are not running in a browser environment\n // We need to specify the name of the global variable as a string to prevent it from being minified\n var ampIntegrationContextName = 'ampIntegrationContext';\n if (typeof globalThis !== 'undefined' && typeof globalThis[ampIntegrationContextName] !== 'undefined') {\n return globalThis[ampIntegrationContextName];\n }\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n};\n//# sourceMappingURL=global-scope.js.map","/**\n * Source: [jed's gist's comment]{@link https://gist.github.com/jed/982883?permalink_comment_id=3223002#gistcomment-3223002}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\nimport { __read, __spreadArray } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nvar legacyUUID = function (a) {\n return a // if the placeholder was passed, return\n ? // a random number from 0 to 15\n (a ^ // unless b is 8,\n ((Math.random() * // in which case\n 16) >> // a random number from\n (a / 4))) // 8 to 11\n .toString(16) // in hexadecimal\n : // or otherwise a concatenated string:\n (String(1e7) + // 10000000 +\n String(-1e3) + // -1000 +\n String(-4e3) + // -4000 +\n String(-8e3) + // -80000000 +\n String(-1e11)) // -100000000000,\n .replace(\n // replacing\n /[018]/g, // zeroes, ones, and eights with\n UUID);\n};\nvar hex = __spreadArray([], __read(Array(256).keys()), false).map(function (index) { return index.toString(16).padStart(2, '0'); });\nexport var UUID = function (a) {\n var _a;\n var globalScope = getGlobalScope();\n /* istanbul ignore next */\n if (!((_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.crypto) === null || _a === void 0 ? void 0 : _a.getRandomValues)) {\n // Fallback to legacy UUID generation if crypto is not available\n return legacyUUID(a);\n }\n var r = globalScope.crypto.getRandomValues(new Uint8Array(16));\n r[6] = (r[6] & 0x0f) | 0x40;\n r[8] = (r[8] & 0x3f) | 0x80;\n return __spreadArray([], __read(r.entries()), false).map(function (_a) {\n var _b = __read(_a, 2), index = _b[0], int = _b[1];\n return ([4, 6, 8, 10].includes(index) ? \"-\".concat(hex[int]) : hex[int]);\n }).join('');\n};\n//# sourceMappingURL=uuid.js.map","import { __assign, __awaiter, __generator, __read, __values } from \"tslib\";\nimport { buildResult } from './utils/result-builder';\nimport { UUID } from './utils/uuid';\nvar Timeline = /** @class */ (function () {\n function Timeline(client) {\n this.client = client;\n this.queue = [];\n // Flag to guarantee one schedule apply is running\n this.applying = false;\n // Flag indicates whether timeline is ready to process event\n // Events collected before timeline is ready will stay in the queue to be processed later\n this.plugins = [];\n this._optOutListeners = [];\n }\n Timeline.prototype.register = function (plugin, config) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (this.plugins.some(function (existingPlugin) { return existingPlugin.name === plugin.name; })) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n this.loggerProvider.warn(\"Plugin with name \".concat(plugin.name, \" already exists, skipping registration\"));\n return [2 /*return*/];\n }\n if (plugin.name === undefined) {\n plugin.name = UUID();\n this.loggerProvider.warn(\"Plugin name is undefined. \\n Generating a random UUID for plugin name: \".concat(plugin.name, \". \\n Set a name for the plugin to prevent it from being added multiple times.\"));\n }\n plugin.type = (_a = plugin.type) !== null && _a !== void 0 ? _a : 'enrichment';\n return [4 /*yield*/, ((_b = plugin.setup) === null || _b === void 0 ? void 0 : _b.call(plugin, config, this.client))];\n case 1:\n _c.sent();\n this.plugins.push(plugin);\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.deregister = function (pluginName, config) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var index, plugin;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n index = this.plugins.findIndex(function (plugin) { return plugin.name === pluginName; });\n if (index === -1) {\n config.loggerProvider.warn(\"Plugin with name \".concat(pluginName, \" does not exist, skipping deregistration\"));\n return [2 /*return*/];\n }\n plugin = this.plugins[index];\n this.plugins.splice(index, 1);\n return [4 /*yield*/, ((_a = plugin.teardown) === null || _a === void 0 ? void 0 : _a.call(plugin))];\n case 1:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.reset = function (client) {\n this._clearOptOutListeners();\n this.applying = false;\n var plugins = this.plugins;\n plugins.map(function (plugin) { var _a; return (_a = plugin.teardown) === null || _a === void 0 ? void 0 : _a.call(plugin); });\n this.plugins = [];\n this.client = client;\n };\n Timeline.prototype.push = function (event) {\n var _this = this;\n return new Promise(function (resolve) {\n _this.queue.push([event, resolve]);\n _this.scheduleApply(0);\n });\n };\n Timeline.prototype.scheduleApply = function (timeout) {\n var _this = this;\n if (this.applying)\n return;\n this.applying = true;\n setTimeout(function () {\n void _this.apply(_this.queue.shift()).then(function () {\n _this.applying = false;\n if (_this.queue.length > 0) {\n _this.scheduleApply(0);\n }\n });\n }, timeout);\n };\n Timeline.prototype.apply = function (item) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, event, _b, resolve, before, before_1, before_1_1, plugin, e, e_1_1, enrichment, enrichment_1, enrichment_1_1, plugin, e, e_2_1, destination, executeDestinations;\n var e_1, _c, e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (!item) {\n return [2 /*return*/];\n }\n _a = __read(item, 1), event = _a[0];\n _b = __read(item, 2), resolve = _b[1];\n // Log initial event\n this.loggerProvider.log('Timeline.apply: Initial event', event);\n before = this.plugins.filter(function (plugin) { return plugin.type === 'before'; });\n _e.label = 1;\n case 1:\n _e.trys.push([1, 6, 7, 8]);\n before_1 = __values(before), before_1_1 = before_1.next();\n _e.label = 2;\n case 2:\n if (!!before_1_1.done) return [3 /*break*/, 5];\n plugin = before_1_1.value;\n /* istanbul ignore if */\n if (!plugin.execute) {\n // do nothing\n return [3 /*break*/, 4];\n }\n return [4 /*yield*/, plugin.execute(__assign({}, event))];\n case 3:\n e = _e.sent();\n if (e === null) {\n this.loggerProvider.log(\"Timeline.apply: Event filtered out by before plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n resolve({ event: event, code: 0, message: '' });\n return [2 /*return*/];\n }\n else {\n event = e;\n this.loggerProvider.log(\"Timeline.apply: Event after before plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n }\n _e.label = 4;\n case 4:\n before_1_1 = before_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _e.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (before_1_1 && !before_1_1.done && (_c = before_1.return)) _c.call(before_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8:\n enrichment = this.plugins.filter(function (plugin) { return plugin.type === 'enrichment' || plugin.type === undefined; });\n _e.label = 9;\n case 9:\n _e.trys.push([9, 14, 15, 16]);\n enrichment_1 = __values(enrichment), enrichment_1_1 = enrichment_1.next();\n _e.label = 10;\n case 10:\n if (!!enrichment_1_1.done) return [3 /*break*/, 13];\n plugin = enrichment_1_1.value;\n /* istanbul ignore if */\n if (!plugin.execute) {\n // do nothing\n return [3 /*break*/, 12];\n }\n return [4 /*yield*/, plugin.execute(__assign({}, event))];\n case 11:\n e = _e.sent();\n if (e === null) {\n this.loggerProvider.log(\"Timeline.apply: Event filtered out by enrichment plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n resolve({ event: event, code: 0, message: '' });\n return [2 /*return*/];\n }\n else {\n event = e;\n this.loggerProvider.log(\"Timeline.apply: Event after enrichment plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n }\n _e.label = 12;\n case 12:\n enrichment_1_1 = enrichment_1.next();\n return [3 /*break*/, 10];\n case 13: return [3 /*break*/, 16];\n case 14:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 16];\n case 15:\n try {\n if (enrichment_1_1 && !enrichment_1_1.done && (_d = enrichment_1.return)) _d.call(enrichment_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 16:\n destination = this.plugins.filter(function (plugin) { return plugin.type === 'destination'; });\n // Log final event before sending to destinations\n this.loggerProvider.log(\"Timeline.apply: Final event before destinations, event: \".concat(JSON.stringify(event)));\n executeDestinations = destination.map(function (plugin) {\n var eventClone = __assign({}, event);\n return plugin.execute(eventClone).catch(function (e) { return buildResult(eventClone, 0, String(e)); });\n });\n void Promise.all(executeDestinations).then(function (_a) {\n var _b = __read(_a, 1), result = _b[0];\n var resolveResult = result || buildResult(event, 100, 'Event not tracked, no destination plugins on the instance');\n resolve(resolveResult);\n });\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.flush = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queue, destination, executeDestinations;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queue = this.queue;\n this.queue = [];\n return [4 /*yield*/, Promise.all(queue.map(function (item) { return _this.apply(item); }))];\n case 1:\n _a.sent();\n destination = this.plugins.filter(function (plugin) { return plugin.type === 'destination'; });\n executeDestinations = destination.map(function (plugin) {\n return plugin.flush && plugin.flush();\n });\n return [4 /*yield*/, Promise.all(executeDestinations)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.addOptOutListener = function (cb) {\n this._optOutListeners.push(cb);\n };\n Timeline.prototype._clearOptOutListeners = function () {\n this._optOutListeners = [];\n };\n Timeline.prototype.onIdentityChanged = function (identity) {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onIdentityChanged() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onIdentityChanged) === null || _a === void 0 ? void 0 : _a.call(plugin, identity));\n });\n };\n Timeline.prototype.onSessionIdChanged = function (sessionId) {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onSessionIdChanged() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onSessionIdChanged) === null || _a === void 0 ? void 0 : _a.call(plugin, sessionId));\n });\n };\n Timeline.prototype.onOptOutChanged = function (optOut) {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onOptOutChanged() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onOptOutChanged) === null || _a === void 0 ? void 0 : _a.call(plugin, optOut));\n });\n void this._callOptOutListeners(optOut);\n };\n Timeline.prototype._callOptOutListeners = function (optOut) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, listener, e_3, e_4_1;\n var e_4, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _d.trys.push([0, 7, 8, 9]);\n _a = __values(this._optOutListeners), _b = _a.next();\n _d.label = 1;\n case 1:\n if (!!_b.done) return [3 /*break*/, 6];\n listener = _b.value;\n _d.label = 2;\n case 2:\n _d.trys.push([2, 4, , 5]);\n return [4 /*yield*/, listener(optOut)];\n case 3:\n _d.sent();\n return [3 /*break*/, 5];\n case 4:\n e_3 = _d.sent();\n /* istanbul ignore next */\n this.loggerProvider.error('Error calling optOut listener', e_3);\n return [3 /*break*/, 5];\n case 5:\n _b = _a.next();\n return [3 /*break*/, 1];\n case 6: return [3 /*break*/, 9];\n case 7:\n e_4_1 = _d.sent();\n e_4 = { error: e_4_1 };\n return [3 /*break*/, 9];\n case 8:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_4) throw e_4.error; }\n return [7 /*endfinally*/];\n case 9: return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.onReset = function () {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onReset() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onReset) === null || _a === void 0 ? void 0 : _a.call(plugin));\n });\n };\n return Timeline;\n}());\nexport { Timeline };\n//# sourceMappingURL=timeline.js.map","import { __assign } from \"tslib\";\nimport { Identify } from '../identify';\nimport { SpecialEventType } from '../types/event/event';\nexport var createTrackEvent = function (eventInput, eventProperties, eventOptions) {\n var baseEvent = typeof eventInput === 'string' ? { event_type: eventInput } : eventInput;\n return __assign(__assign(__assign({}, baseEvent), eventOptions), (eventProperties && { event_properties: eventProperties }));\n};\nexport var createIdentifyEvent = function (identify, eventOptions) {\n var identifyEvent = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.IDENTIFY, user_properties: identify.getUserProperties() });\n return identifyEvent;\n};\nexport var createGroupIdentifyEvent = function (groupType, groupName, identify, eventOptions) {\n var _a;\n var groupIdentify = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.GROUP_IDENTIFY, group_properties: identify.getUserProperties(), groups: (_a = {},\n _a[groupType] = groupName,\n _a) });\n return groupIdentify;\n};\nexport var createGroupEvent = function (groupType, groupName, eventOptions) {\n var _a;\n var identify = new Identify();\n identify.set(groupType, groupName);\n var groupEvent = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.IDENTIFY, user_properties: identify.getUserProperties(), groups: (_a = {},\n _a[groupType] = groupName,\n _a) });\n return groupEvent;\n};\nexport var createRevenueEvent = function (revenue, eventOptions) {\n return __assign(__assign({}, eventOptions), { event_type: SpecialEventType.REVENUE, event_properties: revenue.getEventProperties() });\n};\n//# sourceMappingURL=event-builder.js.map","export var returnWrapper = function (awaitable) { return ({\n promise: awaitable || Promise.resolve(),\n}); };\n//# sourceMappingURL=return-wrapper.js.map","import { __assign, __awaiter, __generator, __values } from \"tslib\";\nimport { IdentifyOperation, SpecialEventType, } from './types/event/event';\nimport { OrderedIdentifyOperations } from './identify';\nimport { CLIENT_NOT_INITIALIZED, OPT_OUT_MESSAGE } from './types/messages';\nimport { Timeline } from './timeline';\nimport { createGroupEvent, createGroupIdentifyEvent, createIdentifyEvent, createRevenueEvent, createTrackEvent, } from './utils/event-builder';\nimport { buildResult } from './utils/result-builder';\nimport { returnWrapper } from './utils/return-wrapper';\nvar AmplitudeCore = /** @class */ (function () {\n function AmplitudeCore(name) {\n if (name === void 0) { name = '$default'; }\n this.initializing = false;\n this.isReady = false;\n this.q = [];\n this.dispatchQ = [];\n this.logEvent = this.track.bind(this);\n this.timeline = new Timeline(this);\n this.name = name;\n }\n AmplitudeCore.prototype._init = function (config) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.config = config;\n this.timeline.reset(this);\n this.timeline.loggerProvider = this.config.loggerProvider;\n return [4 /*yield*/, this.runQueuedFunctions('q')];\n case 1:\n _a.sent();\n this.isReady = true;\n return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.runQueuedFunctions = function (queueName) {\n return __awaiter(this, void 0, void 0, function () {\n var queuedFunctions, queuedFunctions_1, queuedFunctions_1_1, queuedFunction, val, e_1_1;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queuedFunctions = this[queueName];\n this[queueName] = [];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 8, 9, 10]);\n queuedFunctions_1 = __values(queuedFunctions), queuedFunctions_1_1 = queuedFunctions_1.next();\n _b.label = 2;\n case 2:\n if (!!queuedFunctions_1_1.done) return [3 /*break*/, 7];\n queuedFunction = queuedFunctions_1_1.value;\n val = queuedFunction();\n if (!(val && 'promise' in val)) return [3 /*break*/, 4];\n return [4 /*yield*/, val.promise];\n case 3:\n _b.sent();\n return [3 /*break*/, 6];\n case 4: return [4 /*yield*/, val];\n case 5:\n _b.sent();\n _b.label = 6;\n case 6:\n queuedFunctions_1_1 = queuedFunctions_1.next();\n return [3 /*break*/, 2];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (queuedFunctions_1_1 && !queuedFunctions_1_1.done && (_a = queuedFunctions_1.return)) _a.call(queuedFunctions_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 10:\n if (!this[queueName].length) return [3 /*break*/, 12];\n return [4 /*yield*/, this.runQueuedFunctions(queueName)];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.track = function (eventInput, eventProperties, eventOptions) {\n var event = createTrackEvent(eventInput, eventProperties, eventOptions);\n // Update client user properties immediately and synchronously\n this.userProperties = this.getOperationAppliedUserProperties(event.user_properties);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.identify = function (identify, eventOptions) {\n var event = createIdentifyEvent(identify, eventOptions);\n // Update client user properties immediately and synchronously\n this.userProperties = this.getOperationAppliedUserProperties(event.user_properties);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.groupIdentify = function (groupType, groupName, identify, eventOptions) {\n var event = createGroupIdentifyEvent(groupType, groupName, identify, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.setGroup = function (groupType, groupName, eventOptions) {\n var event = createGroupEvent(groupType, groupName, eventOptions);\n // Update client user properties immediately and synchronously\n this.userProperties = this.getOperationAppliedUserProperties(event.user_properties);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.revenue = function (revenue, eventOptions) {\n var event = createRevenueEvent(revenue, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.add = function (plugin) {\n if (!this.isReady) {\n this.q.push(this._addPlugin.bind(this, plugin));\n return returnWrapper();\n }\n return this._addPlugin(plugin);\n };\n AmplitudeCore.prototype._addPlugin = function (plugin) {\n return returnWrapper(this.timeline.register(plugin, this.config));\n };\n AmplitudeCore.prototype.remove = function (pluginName) {\n if (!this.isReady) {\n this.q.push(this._removePlugin.bind(this, pluginName));\n return returnWrapper();\n }\n return this._removePlugin(pluginName);\n };\n AmplitudeCore.prototype._removePlugin = function (pluginName) {\n return returnWrapper(this.timeline.deregister(pluginName, this.config));\n };\n AmplitudeCore.prototype.dispatchWithCallback = function (event, callback) {\n if (!this.isReady) {\n return callback(buildResult(event, 0, CLIENT_NOT_INITIALIZED));\n }\n void this.process(event).then(callback);\n };\n AmplitudeCore.prototype.dispatch = function (event) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n if (!this.isReady) {\n return [2 /*return*/, new Promise(function (resolve) {\n _this.dispatchQ.push(_this.dispatchWithCallback.bind(_this, event, resolve));\n })];\n }\n return [2 /*return*/, this.process(event)];\n });\n });\n };\n /**\n *\n * This method applies identify operations to user properties and\n * returns a single object representing the final user property state.\n *\n * This is a best-effort api that only supports $set, $clearAll, and $unset.\n * Other operations are not supported and are ignored.\n *\n * Operations are applied on top of current client state (this.userProperties).\n *\n * @param userProperties The new user properties object from identify() or setIdentity().\n * @returns A key-value object user properties without operations.\n *\n * @example\n * Input:\n * {\n * $set: { plan: 'premium' },\n * custom_flag: true\n * }\n *\n * Output:\n * {\n * plan: 'premium',\n * custom_flag: true\n * }\n */\n AmplitudeCore.prototype.getOperationAppliedUserProperties = function (userProperties) {\n var _a;\n var base = (_a = this.userProperties) !== null && _a !== void 0 ? _a : {};\n var updatedProperties = __assign({}, base);\n if (userProperties === undefined) {\n return updatedProperties;\n }\n // Keep non-operation keys for later merge\n var nonOpProperties = {};\n Object.keys(userProperties).forEach(function (key) {\n if (!Object.values(IdentifyOperation).includes(key)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n nonOpProperties[key] = userProperties[key];\n }\n });\n OrderedIdentifyOperations.forEach(function (operation) {\n // Skip when key is an operation.\n if (!Object.keys(userProperties).includes(operation))\n return;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var opProperties = userProperties[operation];\n switch (operation) {\n case IdentifyOperation.CLEAR_ALL:\n // Due to operation order, the following line will never execute.\n /* istanbul ignore next */\n Object.keys(updatedProperties).forEach(function (prop) {\n delete updatedProperties[prop];\n });\n break;\n case IdentifyOperation.UNSET:\n Object.keys(opProperties).forEach(function (prop) {\n delete updatedProperties[prop];\n });\n break;\n case IdentifyOperation.SET:\n Object.assign(updatedProperties, opProperties);\n break;\n }\n });\n // Merge non-operation properties.\n // Custom properties should not be affected by operations.\n // https://github.com/amplitude/nova/blob/343f678ded83c032e83b189796b3c2be161b48f5/src/main/java/com/amplitude/userproperty/model/ModifyUserPropertiesIdent.java#L79-L83\n Object.assign(updatedProperties, nonOpProperties);\n return updatedProperties;\n };\n AmplitudeCore.prototype.process = function (event) {\n return __awaiter(this, void 0, void 0, function () {\n var result, e_2, message, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n // skip event processing if opt out\n if (this.config.optOut) {\n return [2 /*return*/, buildResult(event, 0, OPT_OUT_MESSAGE)];\n }\n if (event.event_type === SpecialEventType.IDENTIFY) {\n // Do not update this.userProperties here.\n // It is only set synchronously in identify() or setIdentity()\n this.timeline.onIdentityChanged({ userProperties: this.userProperties });\n }\n return [4 /*yield*/, this.timeline.push(event)];\n case 1:\n result = _a.sent();\n result.code === 200\n ? this.config.loggerProvider.log(result.message)\n : result.code === 100\n ? this.config.loggerProvider.warn(result.message)\n : this.config.loggerProvider.error(result.message);\n return [2 /*return*/, result];\n case 2:\n e_2 = _a.sent();\n message = String(e_2);\n this.config.loggerProvider.error(message);\n result = buildResult(event, 0, message);\n return [2 /*return*/, result];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.setOptOut = function (optOut) {\n if (!this.isReady) {\n this.q.push(this._setOptOut.bind(this, Boolean(optOut)));\n return;\n }\n this._setOptOut(optOut);\n };\n AmplitudeCore.prototype._setOptOut = function (optOut) {\n if (this.config.optOut !== optOut) {\n this.config.optOut = Boolean(optOut);\n this.timeline.onOptOutChanged(optOut);\n }\n };\n AmplitudeCore.prototype.flush = function () {\n return returnWrapper(this.timeline.flush());\n };\n AmplitudeCore.prototype.plugin = function (name) {\n var plugin = this.timeline.plugins.find(function (plugin) { return plugin.name === name; });\n if (plugin === undefined) {\n this.config.loggerProvider.debug(\"Cannot find plugin with name \".concat(name));\n return undefined;\n }\n return plugin;\n };\n AmplitudeCore.prototype.plugins = function (pluginClass) {\n return this.timeline.plugins.filter(function (plugin) { return plugin instanceof pluginClass; });\n };\n return AmplitudeCore;\n}());\nexport { AmplitudeCore };\n//# sourceMappingURL=core-client.js.map","import { __assign } from \"tslib\";\nimport { isValidObject } from './utils/valid-properties';\nvar Revenue = /** @class */ (function () {\n function Revenue() {\n this.productId = '';\n this.quantity = 1;\n this.price = 0.0;\n }\n Revenue.prototype.setProductId = function (productId) {\n this.productId = productId;\n return this;\n };\n Revenue.prototype.setQuantity = function (quantity) {\n if (quantity > 0) {\n this.quantity = quantity;\n }\n return this;\n };\n Revenue.prototype.setPrice = function (price) {\n this.price = price;\n return this;\n };\n Revenue.prototype.setRevenueType = function (revenueType) {\n this.revenueType = revenueType;\n return this;\n };\n Revenue.prototype.setCurrency = function (currency) {\n this.currency = currency;\n return this;\n };\n Revenue.prototype.setRevenue = function (revenue) {\n this.revenue = revenue;\n return this;\n };\n Revenue.prototype.setReceipt = function (receipt) {\n this.receipt = receipt;\n return this;\n };\n Revenue.prototype.setReceiptSig = function (receiptSig) {\n this.receiptSig = receiptSig;\n return this;\n };\n Revenue.prototype.setEventProperties = function (properties) {\n try {\n // JSON.stringify drops undefined/function/symbol values before validation,\n // so a single undefined property no longer causes the whole object to be rejected.\n var filtered = JSON.parse(JSON.stringify(properties));\n if (isValidObject(filtered)) {\n this.properties = filtered;\n }\n }\n catch (_a) {\n // no-op: invalid properties are ignored\n }\n return this;\n };\n Revenue.prototype.getEventProperties = function () {\n var eventProperties = this.properties ? __assign({}, this.properties) : {};\n eventProperties[RevenueProperty.REVENUE_PRODUCT_ID] = this.productId;\n eventProperties[RevenueProperty.REVENUE_QUANTITY] = this.quantity;\n eventProperties[RevenueProperty.REVENUE_PRICE] = this.price;\n eventProperties[RevenueProperty.REVENUE_TYPE] = this.revenueType;\n eventProperties[RevenueProperty.REVENUE_CURRENCY] = this.currency;\n eventProperties[RevenueProperty.REVENUE] = this.revenue;\n eventProperties[RevenueProperty.RECEIPT] = this.receipt;\n eventProperties[RevenueProperty.RECEIPT_SIG] = this.receiptSig;\n return eventProperties;\n };\n return Revenue;\n}());\nexport { Revenue };\nexport var RevenueProperty;\n(function (RevenueProperty) {\n RevenueProperty[\"REVENUE_PRODUCT_ID\"] = \"$productId\";\n RevenueProperty[\"REVENUE_QUANTITY\"] = \"$quantity\";\n RevenueProperty[\"REVENUE_PRICE\"] = \"$price\";\n RevenueProperty[\"REVENUE_TYPE\"] = \"$revenueType\";\n RevenueProperty[\"REVENUE_CURRENCY\"] = \"$currency\";\n RevenueProperty[\"REVENUE\"] = \"$revenue\";\n RevenueProperty[\"RECEIPT\"] = \"$receipt\";\n RevenueProperty[\"RECEIPT_SIG\"] = \"$receiptSig\";\n})(RevenueProperty || (RevenueProperty = {}));\n//# sourceMappingURL=revenue.js.map","// Creates an array of elements split into groups the length of size.\n// If array can't be split evenly, the final chunk will be the remaining elements.\n// Works similary as https://lodash.com/docs/4.17.15#chunk\nexport var chunk = function (arr, size) {\n var chunkSize = Math.max(size, 1);\n return arr.reduce(function (chunks, element, index) {\n var chunkIndex = Math.floor(index / chunkSize);\n if (!chunks[chunkIndex]) {\n chunks[chunkIndex] = [];\n }\n chunks[chunkIndex].push(element);\n return chunks;\n }, []);\n};\n//# sourceMappingURL=chunk.js.map","export var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"None\"] = 0] = \"None\";\n LogLevel[LogLevel[\"Error\"] = 1] = \"Error\";\n LogLevel[LogLevel[\"Warn\"] = 2] = \"Warn\";\n LogLevel[LogLevel[\"Verbose\"] = 3] = \"Verbose\";\n LogLevel[LogLevel[\"Debug\"] = 4] = \"Debug\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=loglevel.js.map","import { LogLevel } from './types/loglevel';\nvar PREFIX = 'Amplitude Logger ';\nvar Logger = /** @class */ (function () {\n function Logger() {\n this.logLevel = LogLevel.None;\n }\n Logger.prototype.disable = function () {\n this.logLevel = LogLevel.None;\n };\n Logger.prototype.enable = function (logLevel) {\n if (logLevel === void 0) { logLevel = LogLevel.Warn; }\n this.logLevel = logLevel;\n };\n Logger.prototype.log = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Verbose) {\n return;\n }\n console.log(\"\".concat(PREFIX, \"[Log]: \").concat(args.join(' ')));\n };\n Logger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Warn) {\n return;\n }\n console.warn(\"\".concat(PREFIX, \"[Warn]: \").concat(args.join(' ')));\n };\n Logger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Error) {\n return;\n }\n console.error(\"\".concat(PREFIX, \"[Error]: \").concat(args.join(' ')));\n };\n Logger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Debug) {\n return;\n }\n // console.debug output is hidden by default in chrome\n console.log(\"\".concat(PREFIX, \"[Debug]: \").concat(args.join(' ')));\n };\n return Logger;\n}());\nexport { Logger };\n//# sourceMappingURL=logger.js.map","import { AMPLITUDE_SERVER_URL, AMPLITUDE_BATCH_SERVER_URL, EU_AMPLITUDE_SERVER_URL, EU_AMPLITUDE_BATCH_SERVER_URL, DEFAULT_INSTANCE_NAME, } from './types/constants';\nimport { Logger } from './logger';\nimport { LogLevel } from './types/loglevel';\nexport var getDefaultConfig = function () { return ({\n flushMaxRetries: 12,\n flushQueueSize: 200,\n flushIntervalMillis: 10000,\n instanceName: DEFAULT_INSTANCE_NAME,\n logLevel: LogLevel.Warn,\n loggerProvider: new Logger(),\n offline: false,\n optOut: false,\n serverUrl: AMPLITUDE_SERVER_URL,\n serverZone: 'US',\n useBatch: false,\n}); };\nvar Config = /** @class */ (function () {\n function Config(options) {\n var _a, _b, _c, _d;\n this._optOut = false;\n var defaultConfig = getDefaultConfig();\n this.apiKey = options.apiKey;\n this.flushIntervalMillis = (_a = options.flushIntervalMillis) !== null && _a !== void 0 ? _a : defaultConfig.flushIntervalMillis;\n this.flushMaxRetries = options.flushMaxRetries || defaultConfig.flushMaxRetries;\n this.flushQueueSize = options.flushQueueSize || defaultConfig.flushQueueSize;\n this.instanceName = options.instanceName || defaultConfig.instanceName;\n this.loggerProvider = options.loggerProvider || defaultConfig.loggerProvider;\n this.logLevel = (_b = options.logLevel) !== null && _b !== void 0 ? _b : defaultConfig.logLevel;\n this.minIdLength = options.minIdLength;\n this.plan = options.plan;\n this.ingestionMetadata = options.ingestionMetadata;\n this.offline = options.offline !== undefined ? options.offline : defaultConfig.offline;\n this.optOut = (_c = options.optOut) !== null && _c !== void 0 ? _c : defaultConfig.optOut;\n this.serverUrl = options.serverUrl;\n this.serverZone = options.serverZone || defaultConfig.serverZone;\n this.storageProvider = options.storageProvider;\n this.transportProvider = options.transportProvider;\n this.useBatch = (_d = options.useBatch) !== null && _d !== void 0 ? _d : defaultConfig.useBatch;\n this.loggerProvider.enable(this.logLevel);\n var serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);\n this.serverZone = serverConfig.serverZone;\n this.serverUrl = serverConfig.serverUrl;\n }\n Object.defineProperty(Config.prototype, \"optOut\", {\n get: function () {\n return this._optOut;\n },\n set: function (optOut) {\n this._optOut = optOut;\n },\n enumerable: false,\n configurable: true\n });\n return Config;\n}());\nexport { Config };\nexport var getServerUrl = function (serverZone, useBatch) {\n if (serverZone === 'EU') {\n return useBatch ? EU_AMPLITUDE_BATCH_SERVER_URL : EU_AMPLITUDE_SERVER_URL;\n }\n return useBatch ? AMPLITUDE_BATCH_SERVER_URL : AMPLITUDE_SERVER_URL;\n};\nexport var createServerConfig = function (serverUrl, serverZone, useBatch) {\n if (serverUrl === void 0) { serverUrl = ''; }\n if (serverZone === void 0) { serverZone = getDefaultConfig().serverZone; }\n if (useBatch === void 0) { useBatch = getDefaultConfig().useBatch; }\n if (serverUrl) {\n return { serverUrl: serverUrl, serverZone: undefined };\n }\n var _serverZone = ['US', 'EU'].includes(serverZone) ? serverZone : getDefaultConfig().serverZone;\n return {\n serverZone: _serverZone,\n serverUrl: getServerUrl(_serverZone, useBatch),\n };\n};\nvar RequestMetadata = /** @class */ (function () {\n function RequestMetadata() {\n this.sdk = {\n metrics: {\n histogram: {},\n },\n };\n }\n RequestMetadata.prototype.recordHistogram = function (key, value) {\n this.sdk.metrics.histogram[key] = value;\n };\n return RequestMetadata;\n}());\nexport { RequestMetadata };\nvar HistogramOptions = /** @class */ (function () {\n function HistogramOptions() {\n }\n return HistogramOptions;\n}());\n//# sourceMappingURL=config.js.map","/**\n * Checks if an HTTP status code indicates success (2xx range)\n * @param code - The HTTP status code to check\n * @returns true if the status code is in the 2xx range, false otherwise\n */\nexport function isSuccessStatusCode(code) {\n return code >= 200 && code < 300;\n}\n//# sourceMappingURL=status-code.js.map","import { __assign, __values } from \"tslib\";\nimport { LogLevel } from '../types/loglevel';\nexport var getStacktrace = function (ignoreDepth) {\n if (ignoreDepth === void 0) { ignoreDepth = 0; }\n var trace = new Error().stack || '';\n return trace\n .split('\\n')\n .slice(2 + ignoreDepth)\n .map(function (text) { return text.trim(); });\n};\n// This hook makes sure we always get the latest logger and logLevel.\nexport var getClientLogConfig = function (client) { return function () {\n var _a = __assign({}, client.config), logger = _a.loggerProvider, logLevel = _a.logLevel;\n return {\n logger: logger,\n logLevel: logLevel,\n };\n}; };\n// This is a convenient function to get the attribute from object with string path, similar to lodash '#get'.\nexport var getValueByStringPath = function (obj, path) {\n var e_1, _a;\n path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\n path = path.replace(/^\\./, ''); // strip a leading dot\n try {\n for (var _b = __values(path.split('.')), _c = _b.next(); !_c.done; _c = _b.next()) {\n var attr = _c.value;\n if (attr in obj) {\n obj = obj[attr];\n }\n else {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return obj;\n};\nexport var getClientStates = function (client, paths) { return function () {\n var e_2, _a;\n var res = {};\n try {\n for (var paths_1 = __values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {\n var path = paths_1_1.value;\n res[path] = getValueByStringPath(client, path);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return res;\n}; };\nexport var debugWrapper = function (fn, fnName, getLogConfig, getStates, fnContext) {\n if (fnContext === void 0) { fnContext = null; }\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _a = getLogConfig(), logger = _a.logger, logLevel = _a.logLevel;\n // return early if possible to reduce overhead\n if ((logLevel && logLevel < LogLevel.Debug) || !logLevel || !logger) {\n return fn.apply(fnContext, args);\n }\n var debugContext = {\n type: 'invoke public method',\n name: fnName,\n args: args,\n stacktrace: getStacktrace(1),\n time: {\n start: new Date().toISOString(),\n },\n states: {},\n };\n if (getStates && debugContext.states) {\n debugContext.states.before = getStates();\n }\n var result = fn.apply(fnContext, args);\n if (result && result.promise) {\n // if result is a promise, add the callback\n result.promise.then(function () {\n if (getStates && debugContext.states) {\n debugContext.states.after = getStates();\n }\n if (debugContext.time) {\n debugContext.time.end = new Date().toISOString();\n }\n logger.debug(JSON.stringify(debugContext, null, 2));\n });\n }\n else {\n if (getStates && debugContext.states) {\n debugContext.states.after = getStates();\n }\n if (debugContext.time) {\n debugContext.time.end = new Date().toISOString();\n }\n logger.debug(JSON.stringify(debugContext, null, 2));\n }\n return result;\n };\n};\n//# sourceMappingURL=debug.js.map","import { __awaiter, __generator, __read, __rest, __spreadArray } from \"tslib\";\nimport { Status } from '../types/status';\nimport { INVALID_API_KEY, MAX_RETRIES_EXCEEDED_MESSAGE, MISSING_API_KEY_MESSAGE, SUCCESS_MESSAGE, UNEXPECTED_ERROR_MESSAGE, } from '../types/messages';\nimport { AMPLITUDE_BATCH_SERVER_URL, AMPLITUDE_SERVER_URL, EU_AMPLITUDE_BATCH_SERVER_URL, EU_AMPLITUDE_SERVER_URL, STORAGE_PREFIX, } from '../types/constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-builder';\nimport { createServerConfig, RequestMetadata } from '../config';\nimport { UUID } from '../utils/uuid';\nimport { isSuccessStatusCode } from '../utils/status-code';\nimport { getStacktrace } from '../utils/debug';\nvar DEFAULT_AMPLITUDE_SERVER_URLS = new Set([\n AMPLITUDE_SERVER_URL,\n EU_AMPLITUDE_SERVER_URL,\n AMPLITUDE_BATCH_SERVER_URL,\n EU_AMPLITUDE_BATCH_SERVER_URL,\n]);\nvar shouldCompressUploadBodyForRequest = function (serverUrl, enableRequestBodyCompression) {\n if (enableRequestBodyCompression === void 0) { enableRequestBodyCompression = false; }\n if (DEFAULT_AMPLITUDE_SERVER_URLS.has(serverUrl)) {\n return true;\n }\n return enableRequestBodyCompression;\n};\nfunction getErrorMessage(error) {\n if (error instanceof Error)\n return error.message;\n return String(error);\n}\nexport function getResponseBodyString(res) {\n var responseBodyString = '';\n try {\n if ('body' in res) {\n responseBodyString = JSON.stringify(res.body, null, 2);\n }\n }\n catch (_a) {\n // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n }\n return responseBodyString;\n}\nvar Destination = /** @class */ (function () {\n function Destination(context) {\n this.name = 'amplitude';\n this.type = 'destination';\n this.retryTimeout = 1000;\n this.throttleTimeout = 30000;\n this.storageKey = '';\n // Indicator of whether events that are scheduled (but not flushed yet).\n // When flush:\n // 1. assign `scheduleId` to `flushId`\n // 2. set `scheduleId` to null\n this.scheduleId = null;\n // Timeout in milliseconds of current schedule\n this.scheduledTimeout = 0;\n // Indicator of whether current flush resolves.\n // When flush resolves, set `flushId` to null\n this.flushId = null;\n this.queue = [];\n this.diagnosticsClient = context === null || context === void 0 ? void 0 : context.diagnosticsClient;\n }\n Destination.prototype.setup = function (config) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var unsent;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n this.config = config;\n this.storageKey = \"\".concat(STORAGE_PREFIX, \"_\").concat(this.config.apiKey.substring(0, 10));\n return [4 /*yield*/, ((_a = this.config.storageProvider) === null || _a === void 0 ? void 0 : _a.get(this.storageKey))];\n case 1:\n unsent = _b.sent();\n if (unsent && unsent.length > 0) {\n void Promise.all(unsent.map(function (event) { return _this.execute(event); })).catch();\n }\n return [2 /*return*/, Promise.resolve(undefined)];\n }\n });\n });\n };\n Destination.prototype.execute = function (event) {\n var _this = this;\n // Assign insert_id for dropping invalid event later\n if (!event.insert_id) {\n event.insert_id = UUID();\n }\n return new Promise(function (resolve) {\n var context = {\n event: event,\n attempts: 0,\n callback: function (result) { return resolve(result); },\n timeout: 0,\n };\n _this.queue.push(context);\n _this.schedule(_this.config.flushIntervalMillis);\n _this.saveEvents();\n });\n };\n Destination.prototype.removeEventsExceedFlushMaxRetries = function (list) {\n var _this = this;\n return list.filter(function (context) {\n context.attempts += 1;\n if (context.attempts < _this.config.flushMaxRetries) {\n return true;\n }\n void _this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);\n return false;\n });\n };\n Destination.prototype.scheduleEvents = function (list) {\n var _this = this;\n list.forEach(function (context) {\n _this.schedule(context.timeout === 0 ? _this.config.flushIntervalMillis : context.timeout);\n });\n };\n // Schedule a flush in timeout when\n // 1. No schedule\n // 2. Timeout greater than existing timeout.\n // This makes sure that when throttled, no flush when throttle timeout expires.\n Destination.prototype.schedule = function (timeout) {\n var _this = this;\n if (this.config.offline) {\n return;\n }\n if (this.scheduleId === null || (this.scheduleId && timeout > this.scheduledTimeout)) {\n if (this.scheduleId) {\n clearTimeout(this.scheduleId);\n }\n this.scheduledTimeout = timeout;\n this.scheduleId = setTimeout(function () {\n _this.queue = _this.queue.map(function (context) {\n context.timeout = 0;\n return context;\n });\n void _this.flush(true);\n }, timeout);\n return;\n }\n };\n // Mark current schedule is flushed.\n Destination.prototype.resetSchedule = function () {\n this.scheduleId = null;\n this.scheduledTimeout = 0;\n };\n // Flush all events regardless of their timeout\n Destination.prototype.flush = function (useRetry) {\n if (useRetry === void 0) { useRetry = false; }\n return __awaiter(this, void 0, void 0, function () {\n var list, later, batches;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Skip flush if offline\n if (this.config.offline) {\n this.resetSchedule();\n this.config.loggerProvider.debug('Skipping flush while offline.');\n return [2 /*return*/];\n }\n if (this.flushId) {\n this.resetSchedule();\n this.config.loggerProvider.debug('Skipping flush because previous flush has not resolved.');\n return [2 /*return*/];\n }\n this.flushId = this.scheduleId;\n this.resetSchedule();\n list = [];\n later = [];\n this.queue.forEach(function (context) { return (context.timeout === 0 ? list.push(context) : later.push(context)); });\n batches = chunk(list, this.config.flushQueueSize);\n // Promise.all() doesn't guarantee resolve order.\n // Sequentially resolve to make sure backend receives events in order\n return [4 /*yield*/, batches.reduce(function (promise, batch) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, promise];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.send(batch, useRetry)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n }); }, Promise.resolve())];\n case 1:\n // Promise.all() doesn't guarantee resolve order.\n // Sequentially resolve to make sure backend receives events in order\n _a.sent();\n // Mark current flush is done\n this.flushId = null;\n this.scheduleEvents(this.queue);\n return [2 /*return*/];\n }\n });\n });\n };\n Destination.prototype.send = function (list, useRetry) {\n var _a;\n if (useRetry === void 0) { useRetry = true; }\n return __awaiter(this, void 0, void 0, function () {\n var payload, serverUrl, shouldCompressUploadBody, res, e_1, errorMessage;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.config.apiKey) {\n return [2 /*return*/, this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE)];\n }\n payload = {\n api_key: this.config.apiKey,\n events: list.map(function (context) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var _a = context.event, extra = _a.extra, eventWithoutExtra = __rest(_a, [\"extra\"]);\n return eventWithoutExtra;\n }),\n options: {\n min_id_length: this.config.minIdLength,\n },\n client_upload_time: new Date().toISOString(),\n request_metadata: this.config.requestMetadata,\n };\n this.config.requestMetadata = new RequestMetadata();\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n serverUrl = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch).serverUrl;\n shouldCompressUploadBody = shouldCompressUploadBodyForRequest(serverUrl, this.config.enableRequestBodyCompression);\n return [4 /*yield*/, this.config.transportProvider.send(serverUrl, payload, this.config._enableRequestBodyCompressionExperimental && shouldCompressUploadBody)];\n case 2:\n res = _b.sent();\n if (res === null) {\n this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n return [2 /*return*/];\n }\n if (!useRetry) {\n if ('body' in res) {\n this.fulfillRequest(list, res.statusCode, \"\".concat(res.status, \": \").concat(getResponseBodyString(res)));\n }\n else {\n this.fulfillRequest(list, res.statusCode, res.status);\n }\n return [2 /*return*/];\n }\n this.handleResponse(res, list);\n return [3 /*break*/, 4];\n case 3:\n e_1 = _b.sent();\n errorMessage = getErrorMessage(e_1);\n this.config.loggerProvider.error(errorMessage);\n (_a = this.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.recordEvent('analytics.events.unsuccessful.from.catch.error', {\n events: list.map(function (context) { return context.event.event_type; }),\n message: errorMessage,\n stack_trace: getStacktrace(),\n });\n this.handleResponse({ status: Status.Failed, statusCode: 0 }, list);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n Destination.prototype.handleResponse = function (res, list) {\n var _a;\n if (!isSuccessStatusCode(res.statusCode)) {\n (_a = this.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.recordEvent('analytics.events.unsuccessful', {\n events: list.map(function (context) { return context.event.event_type; }),\n code: res.statusCode,\n status: res.status,\n body: getResponseBodyString(res),\n stack_trace: getStacktrace(),\n });\n }\n var status = res.status;\n switch (status) {\n case Status.Success: {\n this.handleSuccessResponse(res, list);\n break;\n }\n case Status.Invalid: {\n this.handleInvalidResponse(res, list);\n break;\n }\n case Status.PayloadTooLarge: {\n this.handlePayloadTooLargeResponse(res, list);\n break;\n }\n case Status.RateLimit: {\n this.handleRateLimitResponse(res, list);\n break;\n }\n default: {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(\"{code: 0, error: \\\"Status '\".concat(status, \"' provided for \").concat(list.length, \" events\\\"}\"));\n this.handleOtherResponse(list);\n break;\n }\n }\n };\n Destination.prototype.handleSuccessResponse = function (res, list) {\n this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n };\n Destination.prototype.handleInvalidResponse = function (res, list) {\n var _this = this;\n if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n var dropIndex = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(Object.values(res.body.eventsWithInvalidFields)), false), __read(Object.values(res.body.eventsWithMissingFields)), false), __read(Object.values(res.body.eventsWithInvalidIdLengths)), false), __read(res.body.silencedEvents), false).flat();\n var dropIndexSet = new Set(dropIndex);\n var retry = list.filter(function (context, index) {\n if (dropIndexSet.has(index)) {\n _this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n return true;\n });\n if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n }\n var tryable = this.removeEventsExceedFlushMaxRetries(retry);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handlePayloadTooLargeResponse = function (res, list) {\n if (list.length === 1) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n this.config.flushQueueSize /= 2;\n var tryable = this.removeEventsExceedFlushMaxRetries(list);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handleRateLimitResponse = function (res, list) {\n var _this = this;\n var dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n var dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n var throttledIndex = res.body.throttledEvents;\n var dropUserIdsSet = new Set(dropUserIds);\n var dropDeviceIdsSet = new Set(dropDeviceIds);\n var throttledIndexSet = new Set(throttledIndex);\n var retry = list.filter(function (context, index) {\n if ((context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))) {\n _this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n if (throttledIndexSet.has(index)) {\n context.timeout = _this.throttleTimeout;\n }\n return true;\n });\n if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n }\n var tryable = this.removeEventsExceedFlushMaxRetries(retry);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handleOtherResponse = function (list) {\n var _this = this;\n var later = list.map(function (context) {\n context.timeout = context.attempts * _this.retryTimeout;\n return context;\n });\n var tryable = this.removeEventsExceedFlushMaxRetries(later);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.fulfillRequest = function (list, code, message) {\n var _a, _b, _c;\n // Record diagnostics for dropped events (non-success status codes)\n if (!isSuccessStatusCode(code)) {\n (_a = this.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.increment('analytics.events.dropped', list.length);\n (_b = this.diagnosticsClient) === null || _b === void 0 ? void 0 : _b.recordEvent('analytics.events.dropped', {\n events: list.map(function (context) { return context.event.event_type; }),\n code: code,\n message: message,\n stack_trace: getStacktrace(),\n });\n }\n else {\n (_c = this.diagnosticsClient) === null || _c === void 0 ? void 0 : _c.increment('analytics.events.sent', list.length);\n }\n this.removeEvents(list);\n list.forEach(function (context) { return context.callback(buildResult(context.event, code, message)); });\n };\n /**\n * This is called on\n * 1) new events are added to queue; or\n * 2) response comes back for a request\n *\n * Update the event storage based on the queue\n */\n Destination.prototype.saveEvents = function () {\n if (!this.config.storageProvider) {\n return;\n }\n var updatedEvents = this.queue.map(function (context) { return context.event; });\n void this.config.storageProvider.set(this.storageKey, updatedEvents);\n };\n /**\n * This is called on response comes back for a request\n */\n Destination.prototype.removeEvents = function (eventsToRemove) {\n this.queue = this.queue.filter(function (queuedContext) { return !eventsToRemove.some(function (context) { return context.event.insert_id === queuedContext.event.insert_id; }); });\n this.saveEvents();\n };\n return Destination;\n}());\nexport { Destination };\n//# sourceMappingURL=destination.js.map","var ApplicationContextProviderImpl = /** @class */ (function () {\n function ApplicationContextProviderImpl() {\n }\n ApplicationContextProviderImpl.prototype.getApplicationContext = function () {\n return {\n versionName: this.versionName,\n language: getLanguage(),\n platform: 'Web',\n os: undefined,\n deviceModel: undefined,\n };\n };\n return ApplicationContextProviderImpl;\n}());\nvar getLanguage = function () {\n return ((typeof navigator !== 'undefined' &&\n ((navigator.languages && navigator.languages[0]) ||\n navigator.language)) ||\n '');\n};\n\nvar EventBridgeImpl = /** @class */ (function () {\n function EventBridgeImpl() {\n this.queue = [];\n }\n EventBridgeImpl.prototype.logEvent = function (event) {\n if (!this.receiver) {\n if (this.queue.length < 512) {\n this.queue.push(event);\n }\n }\n else {\n this.receiver(event);\n }\n };\n EventBridgeImpl.prototype.setEventReceiver = function (receiver) {\n this.receiver = receiver;\n if (this.queue.length > 0) {\n this.queue.forEach(function (event) {\n receiver(event);\n });\n this.queue = [];\n }\n };\n return EventBridgeImpl;\n}());\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar isEqual = function (obj1, obj2) {\n var e_1, _a;\n var primitive = ['string', 'number', 'boolean', 'undefined'];\n var typeA = typeof obj1;\n var typeB = typeof obj2;\n if (typeA !== typeB) {\n return false;\n }\n try {\n for (var primitive_1 = __values(primitive), primitive_1_1 = primitive_1.next(); !primitive_1_1.done; primitive_1_1 = primitive_1.next()) {\n var p = primitive_1_1.value;\n if (p === typeA) {\n return obj1 === obj2;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (primitive_1_1 && !primitive_1_1.done && (_a = primitive_1.return)) _a.call(primitive_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // check null\n if (obj1 == null && obj2 == null) {\n return true;\n }\n else if (obj1 == null || obj2 == null) {\n return false;\n }\n // if got here - objects\n if (obj1.length !== obj2.length) {\n return false;\n }\n //check if arrays\n var isArrayA = Array.isArray(obj1);\n var isArrayB = Array.isArray(obj2);\n if (isArrayA !== isArrayB) {\n return false;\n }\n if (isArrayA && isArrayB) {\n //arrays\n for (var i = 0; i < obj1.length; i++) {\n if (!isEqual(obj1[i], obj2[i])) {\n return false;\n }\n }\n }\n else {\n //objects\n var sorted1 = Object.keys(obj1).sort();\n var sorted2 = Object.keys(obj2).sort();\n if (!isEqual(sorted1, sorted2)) {\n return false;\n }\n //compare object values\n var result_1 = true;\n Object.keys(obj1).forEach(function (key) {\n if (!isEqual(obj1[key], obj2[key])) {\n result_1 = false;\n }\n });\n return result_1;\n }\n return true;\n};\n\nvar ID_OP_SET = '$set';\nvar ID_OP_UNSET = '$unset';\nvar ID_OP_CLEAR_ALL = '$clearAll';\n// Polyfill for Object.entries\nif (!Object.entries) {\n Object.entries = function (obj) {\n var ownProps = Object.keys(obj);\n var i = ownProps.length;\n var resArray = new Array(i);\n while (i--) {\n resArray[i] = [ownProps[i], obj[ownProps[i]]];\n }\n return resArray;\n };\n}\nvar IdentityStoreImpl = /** @class */ (function () {\n function IdentityStoreImpl() {\n this.identity = { userProperties: {} };\n this.listeners = new Set();\n }\n IdentityStoreImpl.prototype.editIdentity = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n var actingUserProperties = __assign({}, this.identity.userProperties);\n var actingIdentity = __assign(__assign({}, this.identity), { userProperties: actingUserProperties });\n return {\n setUserId: function (userId) {\n actingIdentity.userId = userId;\n return this;\n },\n setDeviceId: function (deviceId) {\n actingIdentity.deviceId = deviceId;\n return this;\n },\n setUserProperties: function (userProperties) {\n actingIdentity.userProperties = userProperties;\n return this;\n },\n setOptOut: function (optOut) {\n actingIdentity.optOut = optOut;\n return this;\n },\n updateUserProperties: function (actions) {\n var e_1, _a, e_2, _b, e_3, _c;\n var actingProperties = actingIdentity.userProperties || {};\n try {\n for (var _d = __values(Object.entries(actions)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var _f = __read(_e.value, 2), action = _f[0], properties = _f[1];\n switch (action) {\n case ID_OP_SET:\n try {\n for (var _g = (e_2 = void 0, __values(Object.entries(properties))), _h = _g.next(); !_h.done; _h = _g.next()) {\n var _j = __read(_h.value, 2), key = _j[0], value = _j[1];\n actingProperties[key] = value;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n }\n finally { if (e_2) throw e_2.error; }\n }\n break;\n case ID_OP_UNSET:\n try {\n for (var _k = (e_3 = void 0, __values(Object.keys(properties))), _l = _k.next(); !_l.done; _l = _k.next()) {\n var key = _l.value;\n delete actingProperties[key];\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n }\n finally { if (e_3) throw e_3.error; }\n }\n break;\n case ID_OP_CLEAR_ALL:\n actingProperties = {};\n break;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_1) throw e_1.error; }\n }\n actingIdentity.userProperties = actingProperties;\n return this;\n },\n commit: function () {\n self.setIdentity(actingIdentity);\n return this;\n },\n };\n };\n IdentityStoreImpl.prototype.getIdentity = function () {\n return __assign({}, this.identity);\n };\n IdentityStoreImpl.prototype.setIdentity = function (identity) {\n var originalIdentity = __assign({}, this.identity);\n this.identity = __assign({}, identity);\n if (!isEqual(originalIdentity, this.identity)) {\n this.listeners.forEach(function (listener) {\n listener(identity);\n });\n }\n };\n IdentityStoreImpl.prototype.addIdentityListener = function (listener) {\n this.listeners.add(listener);\n };\n IdentityStoreImpl.prototype.removeIdentityListener = function (listener) {\n this.listeners.delete(listener);\n };\n return IdentityStoreImpl;\n}());\n\nvar safeGlobal = typeof globalThis !== 'undefined'\n ? globalThis\n : typeof global !== 'undefined'\n ? global\n : self;\n\nvar AnalyticsConnector = /** @class */ (function () {\n function AnalyticsConnector() {\n this.identityStore = new IdentityStoreImpl();\n this.eventBridge = new EventBridgeImpl();\n this.applicationContextProvider = new ApplicationContextProviderImpl();\n }\n AnalyticsConnector.getInstance = function (instanceName) {\n if (!safeGlobal['analyticsConnectorInstances']) {\n safeGlobal['analyticsConnectorInstances'] = {};\n }\n if (!safeGlobal['analyticsConnectorInstances'][instanceName]) {\n safeGlobal['analyticsConnectorInstances'][instanceName] =\n new AnalyticsConnector();\n }\n return safeGlobal['analyticsConnectorInstances'][instanceName];\n };\n return AnalyticsConnector;\n}());\n\nexport { AnalyticsConnector };\n","import { AnalyticsConnector } from '@amplitude/analytics-connector';\nimport { DEFAULT_INSTANCE_NAME } from './types/constants';\nexport var getAnalyticsConnector = function (instanceName) {\n if (instanceName === void 0) { instanceName = DEFAULT_INSTANCE_NAME; }\n return AnalyticsConnector.getInstance(instanceName);\n};\nexport var setConnectorUserId = function (userId, instanceName) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setUserId(userId).commit();\n};\nexport var setConnectorDeviceId = function (deviceId, instanceName) {\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setDeviceId(deviceId).commit();\n};\n//# sourceMappingURL=analytics-connector.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { getAnalyticsConnector } from '../analytics-connector';\nvar IdentityEventSender = /** @class */ (function () {\n function IdentityEventSender() {\n this.name = 'identity';\n this.type = 'before';\n this.identityStore = getAnalyticsConnector().identityStore;\n }\n IdentityEventSender.prototype.execute = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var userProperties;\n return __generator(this, function (_a) {\n userProperties = context.user_properties;\n if (userProperties) {\n this.identityStore.editIdentity().updateUserProperties(userProperties).commit();\n }\n return [2 /*return*/, context];\n });\n });\n };\n IdentityEventSender.prototype.setup = function (config) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (config.instanceName) {\n this.identityStore = getAnalyticsConnector(config.instanceName).identityStore;\n }\n return [2 /*return*/];\n });\n });\n };\n return IdentityEventSender;\n}());\nexport { IdentityEventSender };\n//# sourceMappingURL=identity.js.map","export var isNewSession = function (sessionTimeout, lastEventTime) {\n if (lastEventTime === void 0) { lastEventTime = Date.now(); }\n var currentTime = Date.now();\n var timeSinceLastEvent = currentTime - lastEventTime;\n return timeSinceLastEvent > sessionTimeout;\n};\n//# sourceMappingURL=session.js.map","import { AMPLITUDE_PREFIX } from './types/constants';\nexport var getCookieName = function (apiKey, postKey, limit) {\n if (postKey === void 0) { postKey = ''; }\n if (limit === void 0) { limit = 10; }\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\nexport var getOldCookieName = function (apiKey) {\n return \"\".concat(AMPLITUDE_PREFIX.toLowerCase(), \"_\").concat(apiKey.substring(0, 6));\n};\n//# sourceMappingURL=cookie-name.js.map","export var getLanguage = function () {\n var _a, _b, _c, _d;\n if (typeof navigator === 'undefined')\n return '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n var userLanguage = navigator.userLanguage;\n return (_d = (_c = (_b = (_a = navigator.languages) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : navigator.language) !== null && _c !== void 0 ? _c : userLanguage) !== null && _d !== void 0 ? _d : '';\n};\n//# sourceMappingURL=language.js.map","import { getGlobalScope } from './global-scope';\nexport var getQueryParams = function () {\n var _a;\n var globalScope = getGlobalScope();\n /* istanbul ignore if */\n if (!((_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.location) === null || _a === void 0 ? void 0 : _a.search)) {\n return {};\n }\n var pairs = globalScope.location.search.substring(1).split('&').filter(Boolean);\n var params = pairs.reduce(function (acc, curr) {\n var query = curr.split('=', 2);\n var key = tryDecodeURIComponent(query[0]);\n var value = tryDecodeURIComponent(query[1]);\n if (!value) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n return params;\n};\nexport var tryDecodeURIComponent = function (value) {\n if (value === void 0) { value = ''; }\n try {\n return decodeURIComponent(value);\n }\n catch (_a) {\n return '';\n }\n};\n//# sourceMappingURL=query-params.js.map","/**\n * Checks if a given URL matches any pattern in an allowlist of URLs or regex patterns.\n * @param url - The URL to check\n * @param allowlist - Array of allowed URLs (strings) or regex patterns\n * @returns true if the URL matches any pattern in the allowlist, false otherwise\n */\nexport var isUrlMatchAllowlist = function (url, allowlist) {\n if (!allowlist || !allowlist.length) {\n return true;\n }\n return allowlist.some(function (allowedUrl) {\n if (typeof allowedUrl === 'string') {\n return url === allowedUrl;\n }\n return url.match(allowedUrl);\n });\n};\nexport var getDecodeURI = function (locationStr, loggerProvider) {\n var decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Malformed URI sequence: ', e);\n }\n return decodedLocationStr;\n};\n//# sourceMappingURL=url-utils.js.map","export var generateHashCode = function (str) {\n var hash = 0;\n if (str.length === 0)\n return hash;\n for (var i = 0; i < str.length; i++) {\n var chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0;\n }\n return hash;\n};\nexport var isTimestampInSample = function (timestamp, sampleRate) {\n var hashNumber = generateHashCode(timestamp.toString());\n var absHash = Math.abs(hashNumber);\n var absHashMultiply = absHash * 31;\n var mod = absHashMultiply % 1000000;\n return mod / 1000000 < sampleRate;\n};\n// TODO(xinyi): replace the temp one in diagnostics client after the fix\n// istanbul ignore next\nexport var isTimestampInSampleTemp = function (timestamp, sampleRate) {\n var hashNumber = generateHashCode(timestamp.toString());\n var absHash = Math.abs(hashNumber);\n var absHashMultiply = absHash * 31;\n var mod = absHashMultiply % 100000;\n return mod / 100000 < sampleRate;\n};\n//# sourceMappingURL=sampling.js.map","import { __awaiter, __generator } from \"tslib\";\nvar MemoryStorage = /** @class */ (function () {\n function MemoryStorage() {\n this.memoryStorage = new Map();\n }\n MemoryStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, true];\n });\n });\n };\n MemoryStorage.prototype.get = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.memoryStorage.get(key)];\n });\n });\n };\n MemoryStorage.prototype.getRaw = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var value;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.get(key)];\n case 1:\n value = _a.sent();\n return [2 /*return*/, value ? JSON.stringify(value) : undefined];\n }\n });\n });\n };\n MemoryStorage.prototype.set = function (key, value) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.set(key, value);\n return [2 /*return*/];\n });\n });\n };\n MemoryStorage.prototype.remove = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.delete(key);\n return [2 /*return*/];\n });\n });\n };\n MemoryStorage.prototype.reset = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.clear();\n return [2 /*return*/];\n });\n });\n };\n return MemoryStorage;\n}());\nexport { MemoryStorage };\n//# sourceMappingURL=memory.js.map","import { __assign, __awaiter, __generator, __values } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\n/* istanbul ignore next */\nvar getLocks = function () {\n var _a;\n var globalScope = getGlobalScope();\n return (_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.navigator) === null || _a === void 0 ? void 0 : _a.locks;\n};\nvar CookieStorage = /** @class */ (function () {\n function CookieStorage(options, config) {\n if (config === void 0) { config = {}; }\n this.options = __assign({}, options);\n this.config = config;\n }\n CookieStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n var testKey, testCookieOptions, testStorage, testValue;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n testKey = 'AMP_TEST';\n testCookieOptions = __assign({}, this.options);\n testStorage = new CookieStorage(testCookieOptions);\n testValue = String(Date.now());\n return [4 /*yield*/, testStorage.transaction(testKey, function (storage) {\n var _a, _b;\n try {\n storage.set(testValue);\n var value = storage.get();\n var result = value === testValue;\n /* istanbul ignore next */\n if (!result && _this.config.diagnosticsClient) {\n (_a = _this.config.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.recordEvent('cookies.isEnabled.failure', {\n reason: 'Test Value mismatch',\n testKey: testKey,\n testValue: testValue,\n sync: true,\n });\n }\n return result;\n }\n catch (e) {\n /* istanbul ignore next */\n if (_this.config.diagnosticsClient) {\n var errMessage = e instanceof Error ? e.message : String(e);\n (_b = _this.config.diagnosticsClient) === null || _b === void 0 ? void 0 : _b.recordEvent('cookies.isEnabled.failure', {\n reason: 'Cookie getter/setter failed',\n testKey: testKey,\n testValue: testValue,\n error: errMessage,\n sync: true,\n });\n }\n return false;\n }\n finally {\n // clean-up the AMP_TEST cookie behind us\n storage.set(null);\n }\n })];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n CookieStorage.prototype.get = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var value;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.getRaw(key)];\n case 1:\n value = _a.sent();\n return [2 /*return*/, this.decodeCookieValue(key, value)];\n }\n });\n });\n };\n CookieStorage.prototype.decodeCookieValue = function (key, value) {\n if (!value) {\n return undefined;\n }\n try {\n var decodedValue = decodeCookieValue(value);\n if (decodedValue === undefined) {\n console.error(\"Amplitude Logger [Error]: Failed to decode cookie value for key: \".concat(key, \", value: \").concat(value));\n return undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return JSON.parse(decodedValue);\n }\n catch (_a) {\n console.error(\"Amplitude Logger [Error]: Failed to parse cookie value for key: \".concat(key, \", value: \").concat(value));\n return undefined;\n }\n };\n CookieStorage.prototype.getSync = function (key) {\n var value = this.getRawSync(key);\n return this.decodeCookieValue(key, value);\n };\n CookieStorage.prototype.getRaw = function (key) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n var globalScope, globalScopeWithCookiesStore, cookieStore, cookies, cookies_1, cookies_1_1, cookie, ignoreError_1;\n var e_1, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n globalScope = getGlobalScope();\n globalScopeWithCookiesStore = globalScope;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 4, , 5]);\n cookieStore = globalScopeWithCookiesStore === null || globalScopeWithCookiesStore === void 0 ? void 0 : globalScopeWithCookiesStore.cookieStore;\n if (!cookieStore) return [3 /*break*/, 3];\n return [4 /*yield*/, cookieStore.getAll(key)];\n case 2:\n cookies = _d.sent();\n if (cookies) {\n /* istanbul ignore if */\n if (cookies.length > 1) {\n (_a = this.config.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.recordEvent('cookies.duplicate', {\n cookies: cookies.map(function (cookie) { return cookie.domain; }),\n });\n (_b = this.config.diagnosticsClient) === null || _b === void 0 ? void 0 : _b.increment('cookies.duplicate.occurrence.cookieStore');\n }\n try {\n for (cookies_1 = __values(cookies), cookies_1_1 = cookies_1.next(); !cookies_1_1.done; cookies_1_1 = cookies_1.next()) {\n cookie = cookies_1_1.value;\n if (isDomainEqual(cookie.domain, this.options.domain)) {\n return [2 /*return*/, cookie.value];\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (cookies_1_1 && !cookies_1_1.done && (_c = cookies_1.return)) _c.call(cookies_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n _d.label = 3;\n case 3: return [3 /*break*/, 5];\n case 4:\n ignoreError_1 = _d.sent();\n return [3 /*break*/, 5];\n case 5: return [2 /*return*/, this.getRawSync(key)];\n }\n });\n });\n };\n CookieStorage.prototype.getRawSync = function (key) {\n var _this = this;\n var _a, _b;\n var globalScope = getGlobalScope();\n var cookies = ((_b = (_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.document) === null || _a === void 0 ? void 0 : _a.cookie.split('; ')) !== null && _b !== void 0 ? _b : []).filter(function (c) { return c.indexOf(key + '=') === 0; });\n var match = undefined;\n // if matcher function is provided, use it to de-duplicate when there's more than one cookie\n /* istanbul ignore if */\n var duplicateResolverFn = this.config.duplicateResolverFn;\n if (typeof duplicateResolverFn === 'function' && cookies.length > 1) {\n match = cookies.find(function (c) {\n var _a;\n try {\n var res = duplicateResolverFn(c.substring(key.length + 1));\n if (!res) {\n (_a = _this.config.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.increment('cookies.duplicate.occurrence.document.cookie');\n }\n return res;\n }\n catch (ignoreError) {\n /* istanbul ignore next */\n return false;\n }\n });\n }\n // if match was not found, just get the first one that matches the key\n if (!match) {\n match = cookies[0];\n }\n if (!match) {\n return undefined;\n }\n return match.substring(key.length + 1);\n };\n CookieStorage.prototype.set = function (key, value) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.setSync(key, value);\n return [2 /*return*/];\n });\n });\n };\n CookieStorage.prototype.setSync = function (key, value) {\n var _a;\n try {\n var expirationDays = (_a = this.options.expirationDays) !== null && _a !== void 0 ? _a : 0;\n var expires = value !== null ? expirationDays : -1;\n var expireDate = undefined;\n if (expires) {\n var date = new Date();\n date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n expireDate = date;\n }\n var str = \"\".concat(key, \"=\").concat(btoa(encodeURIComponent(JSON.stringify(value))));\n if (expireDate) {\n str += \"; expires=\".concat(expireDate.toUTCString());\n }\n str += '; path=/';\n if (this.options.domain) {\n str += \"; domain=\".concat(this.options.domain);\n }\n if (this.options.secure) {\n str += '; Secure';\n }\n if (this.options.sameSite) {\n str += \"; SameSite=\".concat(this.options.sameSite);\n }\n var globalScope = getGlobalScope();\n if (globalScope === null || globalScope === void 0 ? void 0 : globalScope.document) {\n globalScope.document.cookie = str;\n }\n }\n catch (error) {\n var errorMessage = error instanceof Error ? error.message : String(error);\n console.error(\"Amplitude Logger [Error]: Failed to set cookie for key: \".concat(key, \". Error: \").concat(errorMessage));\n }\n };\n CookieStorage.prototype.remove = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.set(key, null)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.prototype.reset = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n CookieStorage.isDomainWritable = function (domain) {\n return __awaiter(this, void 0, void 0, function () {\n var options, storageKey, storage, res, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (CookieStorage.cachedTlds[domain]) {\n return [2 /*return*/, true];\n }\n options = {\n domain: '.' + domain,\n };\n storageKey = 'AMP_TLDTEST';\n storage = new CookieStorage(options);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, storage.transaction(storageKey, function (storageSync) {\n if (CookieStorage.cachedTlds[domain]) {\n return true;\n }\n try {\n storageSync.set(1);\n var result = !!storageSync.get();\n if (result) {\n CookieStorage.cachedTlds[domain] = true;\n }\n return result;\n }\n finally {\n storageSync.set(null);\n }\n })];\n case 2:\n res = _a.sent();\n return [2 /*return*/, !!res];\n case 3:\n error_1 = _a.sent();\n return [2 /*return*/, false];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.prototype.transaction = function (key, callback) {\n return __awaiter(this, void 0, void 0, function () {\n var locks, callbackWrapper, error_2;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n locks = getLocks();\n callbackWrapper = function () {\n // construct a sync storage object that is scoped to\n // Cookie with name <key>\n var storageSync = {\n get: function () { return _this.getSync(key); },\n set: function (value) { return _this.setSync(key, value); },\n };\n return callback(storageSync);\n };\n // if 'locks' is missing, it is a legacy browser, just call the callback directly\n // and settle for a transaction that isn't isolated across tabs\n if (!locks) {\n return [2 /*return*/, callbackWrapper()];\n }\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, locks.request(\"com.amplitude:cookie-lock:\".concat(key), callbackWrapper)];\n case 2: return [2 /*return*/, (_a.sent())];\n case 3:\n error_2 = _a.sent();\n return [2 /*return*/, callbackWrapper()];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.cachedTlds = {};\n return CookieStorage;\n}());\nexport { CookieStorage };\nvar decodeCookiesAsDefault = function (value) {\n try {\n return decodeURIComponent(atob(value));\n }\n catch (_a) {\n return undefined;\n }\n};\nvar decodeCookiesWithDoubleUrlEncoding = function (value) {\n // Modern Ruby (v7+) automatically encodes cookies with URL encoding by\n // https://api.rubyonrails.org/classes/ActionDispatch/Cookies.html\n try {\n return decodeURIComponent(atob(decodeURIComponent(value)));\n }\n catch (_a) {\n return undefined;\n }\n};\n/**\n * Decodes a cookie value that was encoded with btoa(encodeURIComponent(...)).\n * Handles both standard encoding and double URL encoding (used by Ruby Rails v7+).\n */\nexport var decodeCookieValue = function (value) {\n var _a;\n return (_a = decodeCookiesAsDefault(value)) !== null && _a !== void 0 ? _a : decodeCookiesWithDoubleUrlEncoding(value);\n};\n/**\n * Compares two domain strings for equality, ignoring leading dots.\n * This is useful for comparing cookie domains since \".example.com\" and \"example.com\"\n * are effectively equivalent for cookie scoping.\n */\nexport var isDomainEqual = function (domain1, domain2) {\n if (domain1 === '' && domain2 === '') {\n return true;\n }\n if (!domain1 || !domain2) {\n return false;\n }\n var normalized1 = domain1.startsWith('.') ? domain1.substring(1) : domain1;\n var normalized2 = domain2.startsWith('.') ? domain2.substring(1) : domain2;\n return normalized1.toLowerCase() === normalized2.toLowerCase();\n};\n//# sourceMappingURL=cookie.js.map","import { AMPLITUDE_PREFIX } from '../types/constants';\nexport var getStorageKey = function (apiKey, postKey, limit) {\n if (postKey === void 0) { postKey = ''; }\n if (limit === void 0) { limit = 10; }\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\n//# sourceMappingURL=helpers.js.map","import { __awaiter, __generator } from \"tslib\";\nvar BrowserStorage = /** @class */ (function () {\n function BrowserStorage(storage) {\n this.storage = storage;\n }\n BrowserStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n var random, testStorage, testKey, value, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n /* istanbul ignore if */\n if (!this.storage) {\n return [2 /*return*/, false];\n }\n random = String(Date.now());\n testStorage = new BrowserStorage(this.storage);\n testKey = 'AMP_TEST';\n _b.label = 1;\n case 1:\n _b.trys.push([1, 4, 5, 7]);\n return [4 /*yield*/, testStorage.set(testKey, random)];\n case 2:\n _b.sent();\n return [4 /*yield*/, testStorage.get(testKey)];\n case 3:\n value = _b.sent();\n return [2 /*return*/, value === random];\n case 4:\n _a = _b.sent();\n /* istanbul ignore next */\n return [2 /*return*/, false];\n case 5: return [4 /*yield*/, testStorage.remove(testKey)];\n case 6:\n _b.sent();\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n BrowserStorage.prototype.get = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var value, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getRaw(key)];\n case 1:\n value = _b.sent();\n if (!value) {\n return [2 /*return*/, undefined];\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return [2 /*return*/, JSON.parse(value)];\n case 2:\n _a = _b.sent();\n console.error(\"[Amplitude] Error: Could not get value from storage\");\n return [2 /*return*/, undefined];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n BrowserStorage.prototype.getRaw = function (key) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n return [2 /*return*/, ((_a = this.storage) === null || _a === void 0 ? void 0 : _a.getItem(key)) || undefined];\n });\n });\n };\n BrowserStorage.prototype.set = function (key, value) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.setItem(key, JSON.stringify(value));\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n BrowserStorage.prototype.remove = function (key) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.removeItem(key);\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n BrowserStorage.prototype.reset = function () {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.clear();\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n return BrowserStorage;\n}());\nexport { BrowserStorage };\n//# sourceMappingURL=browser-storage.js.map","import { __awaiter, __generator, __read } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nvar MAX_PERSISTENT_STORAGE_EVENTS_COUNT = 10;\n// Database configuration\nvar DB_VERSION = 1;\n// Table names for different diagnostics types\nexport var TABLE_NAMES = {\n TAGS: 'tags',\n COUNTERS: 'counters',\n HISTOGRAMS: 'histograms',\n EVENTS: 'events',\n INTERNAL: 'internal', // New table for internal storage like flush timestamps\n};\n// Keys for internal storage table\nexport var INTERNAL_KEYS = {\n LAST_FLUSH_TIMESTAMP: 'last_flush_timestamp',\n};\n/**\n * Purpose-specific IndexedDB storage for diagnostics data\n * Provides optimized methods for each type of diagnostics data\n */\nvar DiagnosticsStorage = /** @class */ (function () {\n function DiagnosticsStorage(apiKey, logger) {\n this.dbPromise = null;\n this.logger = logger;\n this.dbName = \"AMP_diagnostics_\".concat(apiKey.substring(0, 10));\n }\n /**\n * Check if IndexedDB is supported in the current environment\n * @returns true if IndexedDB is available, false otherwise\n */\n DiagnosticsStorage.isSupported = function () {\n var _a;\n return ((_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.indexedDB) !== undefined;\n };\n DiagnosticsStorage.prototype.getDB = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!this.dbPromise) {\n this.dbPromise = this.openDB();\n }\n return [2 /*return*/, this.dbPromise];\n });\n });\n };\n DiagnosticsStorage.prototype.openDB = function () {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var request = indexedDB.open(_this.dbName, DB_VERSION);\n request.onerror = function () {\n // Clear dbPromise when it rejects for the first time\n _this.dbPromise = null;\n reject(new Error('Failed to open IndexedDB'));\n };\n request.onsuccess = function () {\n var db = request.result;\n // Clear dbPromise when connection was on but went off later\n db.onclose = function () {\n _this.dbPromise = null;\n _this.logger.debug('DiagnosticsStorage: DB connection closed.');\n };\n db.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: A global database error occurred.', event);\n db.close();\n };\n resolve(db);\n };\n request.onupgradeneeded = function (event) {\n var db = event.target.result;\n _this.createTables(db);\n };\n });\n };\n DiagnosticsStorage.prototype.createTables = function (db) {\n // Create tags table\n if (!db.objectStoreNames.contains(TABLE_NAMES.TAGS)) {\n db.createObjectStore(TABLE_NAMES.TAGS, { keyPath: 'key' });\n }\n // Create counters table\n if (!db.objectStoreNames.contains(TABLE_NAMES.COUNTERS)) {\n db.createObjectStore(TABLE_NAMES.COUNTERS, { keyPath: 'key' });\n }\n // Create histograms table for storing histogram stats (count, min, max, sum)\n if (!db.objectStoreNames.contains(TABLE_NAMES.HISTOGRAMS)) {\n db.createObjectStore(TABLE_NAMES.HISTOGRAMS, {\n keyPath: 'key',\n });\n }\n // Create events table\n if (!db.objectStoreNames.contains(TABLE_NAMES.EVENTS)) {\n var eventsStore = db.createObjectStore(TABLE_NAMES.EVENTS, {\n keyPath: 'id',\n autoIncrement: true,\n });\n // Create index on time for chronological queries\n eventsStore.createIndex('time_idx', 'time', { unique: false });\n }\n // Create internal table for storing internal data like flush timestamps\n if (!db.objectStoreNames.contains(TABLE_NAMES.INTERNAL)) {\n db.createObjectStore(TABLE_NAMES.INTERNAL, { keyPath: 'key' });\n }\n };\n DiagnosticsStorage.prototype.setTags = function (tags) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_1, store_1, error_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (Object.entries(tags).length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_1 = db.transaction([TABLE_NAMES.TAGS], 'readwrite');\n store_1 = transaction_1.objectStore(TABLE_NAMES.TAGS);\n return [2 /*return*/, new Promise(function (resolve) {\n var entries = Object.entries(tags);\n transaction_1.oncomplete = function () {\n resolve();\n };\n transaction_1.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set tags', event);\n resolve();\n };\n entries.forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n var putRequest = store_1.put({ key: key, value: value });\n putRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set tag', key, value, event);\n };\n });\n })];\n case 2:\n error_1 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to set tags', error_1);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.incrementCounters = function (counters) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_2, store_2, error_2;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (Object.entries(counters).length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_2 = db.transaction([TABLE_NAMES.COUNTERS], 'readwrite');\n store_2 = transaction_2.objectStore(TABLE_NAMES.COUNTERS);\n return [2 /*return*/, new Promise(function (resolve) {\n var entries = Object.entries(counters);\n transaction_2.oncomplete = function () {\n resolve();\n };\n transaction_2.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to increment counters', event);\n resolve();\n };\n // Read existing values and update them\n entries.forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], incrementValue = _b[1];\n var getRequest = store_2.get(key);\n getRequest.onsuccess = function () {\n var existingRecord = getRequest.result;\n /* istanbul ignore next */\n var existingValue = existingRecord ? existingRecord.value : 0;\n var putRequest = store_2.put({ key: key, value: existingValue + incrementValue });\n putRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to update counter', key, event);\n };\n };\n getRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to read existing counter', key, event);\n };\n });\n })];\n case 2:\n error_2 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to increment counters', error_2);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.setHistogramStats = function (histogramStats) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_3, store_3, error_3;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (Object.entries(histogramStats).length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_3 = db.transaction([TABLE_NAMES.HISTOGRAMS], 'readwrite');\n store_3 = transaction_3.objectStore(TABLE_NAMES.HISTOGRAMS);\n return [2 /*return*/, new Promise(function (resolve) {\n var entries = Object.entries(histogramStats);\n transaction_3.oncomplete = function () {\n resolve();\n };\n transaction_3.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', event);\n resolve();\n };\n // Read existing values and update them\n entries.forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], newStats = _b[1];\n var getRequest = store_3.get(key);\n getRequest.onsuccess = function () {\n var existingRecord = getRequest.result;\n var updatedStats;\n /* istanbul ignore next */\n if (existingRecord) {\n // Accumulate with existing stats\n updatedStats = {\n key: key,\n count: existingRecord.count + newStats.count,\n min: Math.min(existingRecord.min, newStats.min),\n max: Math.max(existingRecord.max, newStats.max),\n sum: existingRecord.sum + newStats.sum,\n };\n }\n else {\n // Create new stats\n updatedStats = {\n key: key,\n count: newStats.count,\n min: newStats.min,\n max: newStats.max,\n sum: newStats.sum,\n };\n }\n var putRequest = store_3.put(updatedStats);\n putRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', key, event);\n };\n };\n getRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to read existing histogram stats', key, event);\n };\n });\n })];\n case 2:\n error_3 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', error_3);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.addEventRecords = function (events) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_4, store_4, error_4;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (events.length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_4 = db.transaction([TABLE_NAMES.EVENTS], 'readwrite');\n store_4 = transaction_4.objectStore(TABLE_NAMES.EVENTS);\n return [2 /*return*/, new Promise(function (resolve) {\n transaction_4.oncomplete = function () {\n resolve();\n };\n /* istanbul ignore next */\n transaction_4.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to add event records', event);\n resolve();\n };\n // First, check how many events are currently stored\n var countRequest = store_4.count();\n countRequest.onsuccess = function () {\n var currentCount = countRequest.result;\n // Calculate how many events we can add\n var availableSlots = Math.max(0, MAX_PERSISTENT_STORAGE_EVENTS_COUNT - currentCount);\n if (availableSlots < events.length) {\n _this.logger.debug(\"DiagnosticsStorage: Only added \".concat(availableSlots, \" of \").concat(events.length, \" events due to storage limit\"));\n }\n // Only add events up to the available slots (take the least recent ones)\n events.slice(0, availableSlots).forEach(function (event) {\n var request = store_4.add(event);\n request.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to add event record', event);\n };\n });\n };\n countRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to count existing events', event);\n };\n })];\n case 2:\n error_4 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to add event records', error_4);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.setInternal = function (key, value) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_5, store_5, error_5;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_5 = db.transaction([TABLE_NAMES.INTERNAL], 'readwrite');\n store_5 = transaction_5.objectStore(TABLE_NAMES.INTERNAL);\n return [2 /*return*/, new Promise(function (resolve, reject) {\n /* istanbul ignore next */\n transaction_5.onabort = function () { return reject(new Error('Failed to set internal value')); };\n var request = store_5.put({ key: key, value: value });\n request.onsuccess = function () { return resolve(); };\n /* istanbul ignore next */\n request.onerror = function () { return reject(new Error('Failed to set internal value')); };\n })];\n case 2:\n error_5 = _a.sent();\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to set internal value', error_5);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.getInternal = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_6, store_6, error_6;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_6 = db.transaction([TABLE_NAMES.INTERNAL], 'readonly');\n store_6 = transaction_6.objectStore(TABLE_NAMES.INTERNAL);\n return [2 /*return*/, new Promise(function (resolve, reject) {\n /* istanbul ignore next */\n transaction_6.onabort = function () { return reject(new Error('Failed to get internal value')); };\n var request = store_6.get(key);\n request.onsuccess = function () { return resolve(request.result); };\n /* istanbul ignore next */\n request.onerror = function () { return reject(new Error('Failed to get internal value')); };\n })];\n case 2:\n error_6 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to get internal value', error_6);\n return [2 /*return*/, undefined];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.getLastFlushTimestamp = function () {\n return __awaiter(this, void 0, void 0, function () {\n var record, error_7;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getInternal(INTERNAL_KEYS.LAST_FLUSH_TIMESTAMP)];\n case 1:\n record = _a.sent();\n return [2 /*return*/, record ? parseInt(record.value, 10) : undefined];\n case 2:\n error_7 = _a.sent();\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to get last flush timestamp', error_7);\n /* istanbul ignore next */\n return [2 /*return*/, undefined];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.setLastFlushTimestamp = function (timestamp) {\n return __awaiter(this, void 0, void 0, function () {\n var error_8;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.setInternal(INTERNAL_KEYS.LAST_FLUSH_TIMESTAMP, timestamp.toString())];\n case 1:\n _a.sent();\n return [3 /*break*/, 3];\n case 2:\n error_8 = _a.sent();\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to set last flush timestamp', error_8);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /* istanbul ignore next */\n DiagnosticsStorage.prototype.clearTable = function (transaction, tableName) {\n return new Promise(function (resolve, reject) {\n var store = transaction.objectStore(tableName);\n var request = store.clear();\n request.onsuccess = function () { return resolve(); };\n request.onerror = function () { return reject(new Error(\"Failed to clear table \".concat(tableName))); };\n });\n };\n /* istanbul ignore next */\n DiagnosticsStorage.prototype.getAllAndClear = function () {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction, _a, tags, counters, histogramStats, events, error_9;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 4, , 5]);\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _b.sent();\n transaction = db.transaction([TABLE_NAMES.TAGS, TABLE_NAMES.COUNTERS, TABLE_NAMES.HISTOGRAMS, TABLE_NAMES.EVENTS], 'readwrite');\n return [4 /*yield*/, Promise.all([\n this.getAllFromStore(transaction, TABLE_NAMES.TAGS),\n this.getAllFromStore(transaction, TABLE_NAMES.COUNTERS),\n this.getAllFromStore(transaction, TABLE_NAMES.HISTOGRAMS),\n this.getAllFromStore(transaction, TABLE_NAMES.EVENTS),\n ])];\n case 2:\n _a = __read.apply(void 0, [_b.sent(), 4]), tags = _a[0], counters = _a[1], histogramStats = _a[2], events = _a[3];\n // Clear all data in the same transaction\n return [4 /*yield*/, Promise.all([\n this.clearTable(transaction, TABLE_NAMES.COUNTERS),\n this.clearTable(transaction, TABLE_NAMES.HISTOGRAMS),\n this.clearTable(transaction, TABLE_NAMES.EVENTS),\n ])];\n case 3:\n // Clear all data in the same transaction\n _b.sent();\n return [2 /*return*/, { tags: tags, counters: counters, histogramStats: histogramStats, events: events }];\n case 4:\n error_9 = _b.sent();\n this.logger.debug('DiagnosticsStorage: Failed to get all and clear data', error_9);\n return [2 /*return*/, { tags: [], counters: [], histogramStats: [], events: [] }];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Helper method to get all records from a store within a transaction\n */\n /* istanbul ignore next */\n DiagnosticsStorage.prototype.getAllFromStore = function (transaction, tableName) {\n return new Promise(function (resolve, reject) {\n var store = transaction.objectStore(tableName);\n var request = store.getAll();\n request.onsuccess = function () { return resolve(request.result); };\n request.onerror = function () { return reject(new Error(\"Failed to get all from \".concat(tableName))); };\n });\n };\n return DiagnosticsStorage;\n}());\nexport { DiagnosticsStorage };\n//# sourceMappingURL=diagnostics-storage.js.map","import { __assign, __values } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nexport var GLOBAL_KEY = '__AMPLITUDE_SCRIPT_URL__';\nexport var EVENT_NAME_ERROR_UNCAUGHT = 'sdk.error.uncaught';\nvar getNormalizedScriptUrls = function () {\n var scope = getGlobalScope();\n /* istanbul ignore next */\n if (!scope) {\n return [];\n }\n var value = scope[GLOBAL_KEY];\n if (Array.isArray(value)) {\n return value;\n }\n /* istanbul ignore next - legacy single URL stored as string */\n if (typeof value === 'string') {\n return [value];\n }\n return [];\n};\nvar addNormalizedScriptUrl = function (url) {\n var scope = getGlobalScope();\n /* istanbul ignore next */\n if (!scope) {\n return;\n }\n var urls = getNormalizedScriptUrls();\n if (!urls.includes(url)) {\n urls.push(url);\n scope[GLOBAL_KEY] = urls;\n }\n};\nexport var registerSdkLoaderMetadata = function (metadata) {\n if (metadata.scriptUrl) {\n var normalized = normalizeUrl(metadata.scriptUrl);\n if (normalized) {\n addNormalizedScriptUrl(normalized);\n }\n }\n};\nexport var enableSdkErrorListeners = function (client) {\n var scope = getGlobalScope();\n if (!scope || typeof scope.addEventListener !== 'function') {\n return;\n }\n var handleError = function (event) {\n var error = event.error instanceof Error ? event.error : undefined;\n var stack = error === null || error === void 0 ? void 0 : error.stack;\n var match = detectSdkOrigin({ filename: event.filename, stack: stack });\n if (!match) {\n return;\n }\n capture({\n type: 'error',\n message: event.message,\n stack: stack,\n filename: event.filename,\n errorName: error === null || error === void 0 ? void 0 : error.name,\n metadata: {\n colno: event.colno,\n lineno: event.lineno,\n isTrusted: event.isTrusted,\n matchReason: match,\n },\n });\n };\n var handleRejection = function (event) {\n var _a;\n var error = event.reason instanceof Error ? event.reason : undefined;\n var stack = error === null || error === void 0 ? void 0 : error.stack;\n var filename = extractFilenameFromStack(stack);\n var match = detectSdkOrigin({ filename: filename, stack: stack });\n if (!match) {\n return;\n }\n /* istanbul ignore next */\n capture({\n type: 'unhandledrejection',\n message: (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : stringifyReason(event.reason),\n stack: stack,\n filename: filename,\n errorName: error === null || error === void 0 ? void 0 : error.name,\n metadata: {\n isTrusted: event.isTrusted,\n matchReason: match,\n },\n });\n };\n var capture = function (context) {\n client.recordEvent(EVENT_NAME_ERROR_UNCAUGHT, __assign({ type: context.type, message: context.message, filename: context.filename, error_name: context.errorName, stack: context.stack }, context.metadata));\n };\n scope.addEventListener('error', handleError, true);\n scope.addEventListener('unhandledrejection', handleRejection, true);\n};\nvar detectSdkOrigin = function (payload) {\n var e_1, _a;\n var normalizedScriptUrls = getNormalizedScriptUrls();\n if (normalizedScriptUrls.length === 0) {\n return undefined;\n }\n try {\n for (var normalizedScriptUrls_1 = __values(normalizedScriptUrls), normalizedScriptUrls_1_1 = normalizedScriptUrls_1.next(); !normalizedScriptUrls_1_1.done; normalizedScriptUrls_1_1 = normalizedScriptUrls_1.next()) {\n var normalizedScriptUrl = normalizedScriptUrls_1_1.value;\n if (payload.filename && payload.filename.includes(normalizedScriptUrl)) {\n return 'filename';\n }\n if (payload.stack && payload.stack.includes(normalizedScriptUrl)) {\n return 'stack';\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (normalizedScriptUrls_1_1 && !normalizedScriptUrls_1_1.done && (_a = normalizedScriptUrls_1.return)) _a.call(normalizedScriptUrls_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return undefined;\n};\nvar normalizeUrl = function (value) {\n var _a, _b;\n try {\n /* istanbul ignore next */\n var url = new URL(value, (_b = (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.location) === null || _b === void 0 ? void 0 : _b.origin);\n return url.origin + url.pathname;\n }\n catch (_c) {\n return undefined;\n }\n};\nvar extractFilenameFromStack = function (stack) {\n if (!stack) {\n return undefined;\n }\n var match = stack.match(/(https?:\\/\\/\\S+?)(?=[)\\s]|$)/);\n /* istanbul ignore next */\n return match ? match[1] : undefined;\n};\n/* istanbul ignore next */\nvar stringifyReason = function (reason) {\n if (typeof reason === 'string') {\n return reason;\n }\n try {\n return JSON.stringify(reason);\n }\n catch (_a) {\n return '[object Object]';\n }\n};\n//# sourceMappingURL=uncaught-sdk-errors.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { DiagnosticsStorage } from './diagnostics-storage';\nimport { getGlobalScope } from '../global-scope';\nimport { isTimestampInSampleTemp } from '../utils/sampling';\nimport { enableSdkErrorListeners } from './uncaught-sdk-errors';\nexport var SAVE_INTERVAL_MS = 1000; // 1 second\nexport var FLUSH_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes\nexport var DIAGNOSTICS_US_SERVER_URL = 'https://diagnostics.prod.us-west-2.amplitude.com/v1/capture';\nexport var DIAGNOSTICS_EU_SERVER_URL = 'https://diagnostics.prod.eu-central-1.amplitude.com/v1/capture';\n// In-memory storage limits\nexport var MAX_MEMORY_STORAGE_COUNT = 10000; // for tags, counters, histograms separately\nexport var MAX_MEMORY_STORAGE_EVENTS_COUNT = 10;\nvar DiagnosticsClient = /** @class */ (function () {\n function DiagnosticsClient(apiKey, logger, serverZone, options) {\n if (serverZone === void 0) { serverZone = 'US'; }\n // In-memory storages\n this.inMemoryTags = {};\n this.inMemoryCounters = {};\n this.inMemoryHistograms = {};\n this.inMemoryEvents = [];\n // Timer for 1-second persistence\n this.saveTimer = null;\n // Timer for flush interval\n this.flushTimer = null;\n this.apiKey = apiKey;\n this.logger = logger;\n this.serverUrl = serverZone === 'US' ? DIAGNOSTICS_US_SERVER_URL : DIAGNOSTICS_EU_SERVER_URL;\n this.logger.debug('DiagnosticsClient: Initializing with options', JSON.stringify(options, null, 2));\n // Diagnostics is enabled by default with sample rate of 0 (no sampling)\n this.config = __assign({ enabled: true, sampleRate: 0 }, options);\n this.startTimestamp = Date.now();\n this.shouldTrack = isTimestampInSampleTemp(this.startTimestamp, this.config.sampleRate) && this.config.enabled;\n if (DiagnosticsStorage.isSupported()) {\n this.storage = new DiagnosticsStorage(apiKey, logger);\n }\n else {\n this.logger.debug('DiagnosticsClient: IndexedDB is not supported');\n }\n void this.initializeFlushInterval();\n // Track internal diagnostics metrics for sampling\n if (this.shouldTrack) {\n this.increment('sdk.diagnostics.sampled.in.and.enabled');\n enableSdkErrorListeners(this);\n }\n }\n /**\n * Check if storage is available and tracking is enabled\n */\n DiagnosticsClient.prototype.isStorageAndTrackEnabled = function () {\n return Boolean(this.storage) && Boolean(this.shouldTrack);\n };\n DiagnosticsClient.prototype.setTag = function (name, value) {\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (Object.keys(this.inMemoryTags).length >= MAX_MEMORY_STORAGE_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return setTags as reaching memory limit');\n return;\n }\n this.inMemoryTags[name] = value;\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.increment = function (name, size) {\n if (size === void 0) { size = 1; }\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (Object.keys(this.inMemoryCounters).length >= MAX_MEMORY_STORAGE_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return increment as reaching memory limit');\n return;\n }\n this.inMemoryCounters[name] = (this.inMemoryCounters[name] || 0) + size;\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.recordHistogram = function (name, value) {\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (Object.keys(this.inMemoryHistograms).length >= MAX_MEMORY_STORAGE_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return recordHistogram as reaching memory limit');\n return;\n }\n var existing = this.inMemoryHistograms[name];\n if (existing) {\n // Update existing stats incrementally\n existing.count += 1;\n existing.min = Math.min(existing.min, value);\n existing.max = Math.max(existing.max, value);\n existing.sum += value;\n }\n else {\n // Create new stats\n this.inMemoryHistograms[name] = {\n count: 1,\n min: value,\n max: value,\n sum: value,\n };\n }\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.recordEvent = function (name, properties) {\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (this.inMemoryEvents.length >= MAX_MEMORY_STORAGE_EVENTS_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return recordEvent as reaching memory limit');\n return;\n }\n this.inMemoryEvents.push({\n event_name: name,\n time: Date.now(),\n event_properties: properties,\n });\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.startTimersIfNeeded = function () {\n var _this = this;\n if (!this.saveTimer) {\n this.saveTimer = setTimeout(function () {\n _this.saveAllDataToStorage()\n .catch(function (error) {\n _this.logger.debug('DiagnosticsClient: Failed to save all data to storage', error);\n })\n .finally(function () {\n _this.saveTimer = null;\n });\n }, SAVE_INTERVAL_MS);\n }\n if (!this.flushTimer) {\n this.flushTimer = setTimeout(function () {\n _this._flush()\n .catch(function (error) {\n _this.logger.debug('DiagnosticsClient: Failed to flush', error);\n })\n .finally(function () {\n _this.flushTimer = null;\n });\n }, FLUSH_INTERVAL_MS);\n }\n };\n DiagnosticsClient.prototype.saveAllDataToStorage = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tagsToSave, countersToSave, histogramsToSave, eventsToSave;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.storage) {\n return [2 /*return*/];\n }\n tagsToSave = __assign({}, this.inMemoryTags);\n countersToSave = __assign({}, this.inMemoryCounters);\n histogramsToSave = __assign({}, this.inMemoryHistograms);\n eventsToSave = __spreadArray([], __read(this.inMemoryEvents), false);\n this.inMemoryEvents = [];\n this.inMemoryTags = {};\n this.inMemoryCounters = {};\n this.inMemoryHistograms = {};\n return [4 /*yield*/, Promise.all([\n this.storage.setTags(tagsToSave),\n this.storage.incrementCounters(countersToSave),\n this.storage.setHistogramStats(histogramsToSave),\n this.storage.addEventRecords(eventsToSave),\n ])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsClient.prototype._flush = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, tagRecords, counterRecords, histogramStatsRecords, eventRecords, tags, counters, histogram, events, payload;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.storage) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.saveAllDataToStorage()];\n case 1:\n _b.sent();\n this.saveTimer = null;\n this.flushTimer = null;\n return [4 /*yield*/, this.storage.getAllAndClear()];\n case 2:\n _a = _b.sent(), tagRecords = _a.tags, counterRecords = _a.counters, histogramStatsRecords = _a.histogramStats, eventRecords = _a.events;\n // Update the last flush timestamp\n void this.storage.setLastFlushTimestamp(Date.now());\n tags = {};\n tagRecords.forEach(function (record) {\n tags[record.key] = record.value;\n });\n counters = {};\n counterRecords.forEach(function (record) {\n counters[record.key] = record.value;\n });\n histogram = {};\n histogramStatsRecords.forEach(function (stats) {\n histogram[stats.key] = {\n count: stats.count,\n min: stats.min,\n max: stats.max,\n avg: Math.round((stats.sum / stats.count) * 100) / 100, // round the average to 2 decimal places.\n };\n });\n events = eventRecords.map(function (record) { return ({\n event_name: record.event_name,\n time: record.time,\n event_properties: record.event_properties,\n }); });\n // Early return if all data collections are empty\n if (Object.keys(counters).length === 0 && Object.keys(histogram).length === 0 && events.length === 0) {\n return [2 /*return*/];\n }\n payload = {\n tags: tags,\n histogram: histogram,\n counters: counters,\n events: events,\n };\n // Send payload to diagnostics server\n void this.fetch(payload);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Send diagnostics data to the server\n */\n DiagnosticsClient.prototype.fetch = function (payload) {\n return __awaiter(this, void 0, void 0, function () {\n var response, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (!getGlobalScope()) {\n throw new Error('DiagnosticsClient: Fetch is not supported');\n }\n return [4 /*yield*/, fetch(this.serverUrl, {\n method: 'POST',\n headers: {\n 'X-ApiKey': this.apiKey,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n })];\n case 1:\n response = _a.sent();\n if (!response.ok) {\n this.logger.debug('DiagnosticsClient: Failed to send diagnostics data.');\n return [2 /*return*/];\n }\n this.logger.debug('DiagnosticsClient: Successfully sent diagnostics data');\n return [3 /*break*/, 3];\n case 2:\n error_1 = _a.sent();\n this.logger.debug('DiagnosticsClient: Failed to send diagnostics data. ', error_1);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Initialize flush interval logic.\n * Check if 5 minutes has passed since last flush, if so flush immediately.\n * Otherwise set a timer to flush when the interval is reached.\n */\n DiagnosticsClient.prototype.initializeFlushInterval = function () {\n return __awaiter(this, void 0, void 0, function () {\n var now, lastFlushTimestamp, timeSinceLastFlush;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.storage) {\n return [2 /*return*/];\n }\n now = Date.now();\n return [4 /*yield*/, this.storage.getLastFlushTimestamp()];\n case 1:\n lastFlushTimestamp = (_a.sent()) || -1;\n // If last flush timestamp is -1, it means this is a new client\n // Save current timestamp as the initial \"last flush timestamp\"\n // and schedule the flush timer\n if (lastFlushTimestamp === -1) {\n void this.storage.setLastFlushTimestamp(now);\n this._setFlushTimer(FLUSH_INTERVAL_MS);\n return [2 /*return*/];\n }\n timeSinceLastFlush = now - lastFlushTimestamp;\n if (timeSinceLastFlush >= FLUSH_INTERVAL_MS) {\n // More than 5 minutes has passed, flush immediately\n void this._flush();\n return [2 /*return*/];\n }\n else {\n // Set timer for remaining time\n this._setFlushTimer(FLUSH_INTERVAL_MS - timeSinceLastFlush);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Helper method to set flush timer with consistent error handling\n */\n DiagnosticsClient.prototype._setFlushTimer = function (delay) {\n var _this = this;\n this.flushTimer = setTimeout(function () {\n _this._flush()\n .catch(function (error) {\n _this.logger.debug('DiagnosticsClient: Failed to flush', error);\n })\n .finally(function () {\n _this.flushTimer = null;\n });\n }, delay);\n };\n DiagnosticsClient.prototype._setSampleRate = function (sampleRate) {\n this.logger.debug('DiagnosticsClient: Setting sample rate to', sampleRate);\n this.config.sampleRate = sampleRate;\n this.shouldTrack = isTimestampInSampleTemp(this.startTimestamp, this.config.sampleRate) && this.config.enabled;\n this.logger.debug('DiagnosticsClient: Should track is', this.shouldTrack);\n };\n return DiagnosticsClient;\n}());\nexport { DiagnosticsClient };\n//# sourceMappingURL=diagnostics-client.js.map","import { Status } from '../types/status';\nimport { isSuccessStatusCode } from '../utils/status-code';\nvar BaseTransport = /** @class */ (function () {\n function BaseTransport() {\n }\n BaseTransport.prototype.send = function (_serverUrl, _payload, _enableRequestBodyCompression) {\n return Promise.resolve(null);\n };\n BaseTransport.prototype.buildResponse = function (responseJSON) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n if (typeof responseJSON !== 'object') {\n return null;\n }\n var statusCode = responseJSON.code || 0;\n var status = this.buildStatus(statusCode);\n switch (status) {\n case Status.Success:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n eventsIngested: (_a = responseJSON.events_ingested) !== null && _a !== void 0 ? _a : 0,\n payloadSizeBytes: (_b = responseJSON.payload_size_bytes) !== null && _b !== void 0 ? _b : 0,\n serverUploadTime: (_c = responseJSON.server_upload_time) !== null && _c !== void 0 ? _c : 0,\n },\n };\n case Status.Invalid:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_d = responseJSON.error) !== null && _d !== void 0 ? _d : '',\n missingField: (_e = responseJSON.missing_field) !== null && _e !== void 0 ? _e : '',\n eventsWithInvalidFields: (_f = responseJSON.events_with_invalid_fields) !== null && _f !== void 0 ? _f : {},\n eventsWithMissingFields: (_g = responseJSON.events_with_missing_fields) !== null && _g !== void 0 ? _g : {},\n eventsWithInvalidIdLengths: (_h = responseJSON.events_with_invalid_id_lengths) !== null && _h !== void 0 ? _h : {},\n epsThreshold: (_j = responseJSON.eps_threshold) !== null && _j !== void 0 ? _j : 0,\n exceededDailyQuotaDevices: (_k = responseJSON.exceeded_daily_quota_devices) !== null && _k !== void 0 ? _k : {},\n silencedDevices: (_l = responseJSON.silenced_devices) !== null && _l !== void 0 ? _l : [],\n silencedEvents: (_m = responseJSON.silenced_events) !== null && _m !== void 0 ? _m : [],\n throttledDevices: (_o = responseJSON.throttled_devices) !== null && _o !== void 0 ? _o : {},\n throttledEvents: (_p = responseJSON.throttled_events) !== null && _p !== void 0 ? _p : [],\n },\n };\n case Status.PayloadTooLarge:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_q = responseJSON.error) !== null && _q !== void 0 ? _q : '',\n },\n };\n case Status.RateLimit:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_r = responseJSON.error) !== null && _r !== void 0 ? _r : '',\n epsThreshold: (_s = responseJSON.eps_threshold) !== null && _s !== void 0 ? _s : 0,\n throttledDevices: (_t = responseJSON.throttled_devices) !== null && _t !== void 0 ? _t : {},\n throttledUsers: (_u = responseJSON.throttled_users) !== null && _u !== void 0 ? _u : {},\n exceededDailyQuotaDevices: (_v = responseJSON.exceeded_daily_quota_devices) !== null && _v !== void 0 ? _v : {},\n exceededDailyQuotaUsers: (_w = responseJSON.exceeded_daily_quota_users) !== null && _w !== void 0 ? _w : {},\n throttledEvents: (_x = responseJSON.throttled_events) !== null && _x !== void 0 ? _x : [],\n },\n };\n case Status.Timeout:\n default:\n return {\n status: status,\n statusCode: statusCode,\n };\n }\n };\n BaseTransport.prototype.buildStatus = function (code) {\n if (isSuccessStatusCode(code)) {\n return Status.Success;\n }\n if (code === 429) {\n return Status.RateLimit;\n }\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n if (code === 408) {\n return Status.Timeout;\n }\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n if (code >= 500) {\n return Status.Failed;\n }\n return Status.Unknown;\n };\n return BaseTransport;\n}());\nexport { BaseTransport };\n//# sourceMappingURL=base.js.map","import { __awaiter, __generator } from \"tslib\";\nexport var MIN_GZIP_UPLOAD_BODY_SIZE_BYTES = 2 * 1024;\n/**\n * Returns true if CompressionStream is available (e.g. in supported browsers).\n */\nexport function isCompressionStreamAvailable() {\n return typeof CompressionStream !== 'undefined';\n}\n/**\n * Compress a string to gzip and return the result as an ArrayBuffer.\n * Best-effort: returns undefined if CompressionStream is unavailable or compression fails.\n * Payload is small so buffering is fine. Used by Fetch and XHR transports.\n */\nexport function compressToGzipArrayBuffer(data) {\n return __awaiter(this, void 0, void 0, function () {\n var CompressionStreamImpl, stream, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n CompressionStreamImpl = CompressionStream;\n if (typeof CompressionStreamImpl === 'undefined') {\n return [2 /*return*/, undefined];\n }\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n stream = new Blob([data]).stream().pipeThrough(new CompressionStreamImpl('gzip'));\n return [4 /*yield*/, new Response(stream).arrayBuffer()];\n case 2: return [2 /*return*/, _b.sent()];\n case 3:\n _a = _b.sent();\n return [2 /*return*/, undefined];\n case 4: return [2 /*return*/];\n }\n });\n });\n}\n//# sourceMappingURL=gzip.js.map","var RemoteConfigLocalStorage = /** @class */ (function () {\n function RemoteConfigLocalStorage(apiKey, logger) {\n this.key = \"AMP_remote_config_\".concat(apiKey.substring(0, 10));\n this.logger = logger;\n }\n RemoteConfigLocalStorage.prototype.fetchConfig = function () {\n var result = null;\n var failedRemoteConfigInfo = {\n remoteConfig: null,\n lastFetch: new Date(),\n };\n try {\n result = localStorage.getItem(this.key);\n }\n catch (error) {\n this.logger.debug('Remote config localstorage failed to access: ', error);\n return Promise.resolve(failedRemoteConfigInfo);\n }\n if (result === null) {\n this.logger.debug('Remote config localstorage gets null because the key does not exist');\n return Promise.resolve(failedRemoteConfigInfo);\n }\n try {\n var remoteConfigInfo = JSON.parse(result);\n this.logger.debug(\"Remote config localstorage parsed successfully: \".concat(JSON.stringify(remoteConfigInfo)));\n return Promise.resolve({\n remoteConfig: remoteConfigInfo.remoteConfig,\n lastFetch: new Date(remoteConfigInfo.lastFetch),\n });\n }\n catch (error) {\n this.logger.debug('Remote config localstorage failed to parse: ', error);\n localStorage.removeItem(this.key);\n return Promise.resolve(failedRemoteConfigInfo);\n }\n };\n RemoteConfigLocalStorage.prototype.setConfig = function (config) {\n try {\n localStorage.setItem(this.key, JSON.stringify(config));\n this.logger.debug('Remote config localstorage set successfully.');\n return Promise.resolve(true);\n }\n catch (error) {\n this.logger.debug('Remote config localstorage failed to set: ', error);\n }\n return Promise.resolve(false);\n };\n return RemoteConfigLocalStorage;\n}());\nexport { RemoteConfigLocalStorage };\n//# sourceMappingURL=remote-config-localstorage.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { RemoteConfigLocalStorage } from './remote-config-localstorage';\nimport { UUID } from '../utils/uuid';\nexport var US_SERVER_URL = 'https://sr-client-cfg.amplitude.com/config';\nexport var EU_SERVER_URL = 'https://sr-client-cfg.eu.amplitude.com/config';\nexport var DEFAULT_MAX_RETRIES = 3;\nvar CODE_STATUS = {\n INVALID_API_KEY: 401,\n FORBIDDEN: 403,\n RATE_LIMIT: 429,\n};\n/**\n * The default timeout for fetch in milliseconds.\n * Linear backoff policy: timeout / retry times is the interval between fetch retry.\n */\nvar DEFAULT_TIMEOUT = 1000;\n/**\n * The minimum time between fetches in milliseconds.\n * This prevents too many requests from being sent in a short period of time.\n */\nvar DEFAULT_MIN_TIME_BETWEEN_FETCHES = 5 * 60 * 1000; // 5 minutes\nvar RemoteConfigClient = /** @class */ (function () {\n function RemoteConfigClient(apiKey, logger, serverZone, serverUrl) {\n if (serverZone === void 0) { serverZone = 'US'; }\n // Registered callbackInfos by subscribe().\n this.callbackInfos = [];\n // Track the last successful fetch time for throttling (timestamp in milliseconds).\n this.lastSuccessfulFetch = null;\n // Store the in-flight fetch promise for deduplication.\n this.fetchPromise = null;\n // Used to skip periodic updateConfigs calls when API key is invalid.\n this.isLastFetchInvalidApiKey = false;\n this.apiKey = apiKey;\n this.serverUrl = serverUrl || (serverZone === 'US' ? US_SERVER_URL : EU_SERVER_URL);\n this.logger = logger;\n this.storage = new RemoteConfigLocalStorage(apiKey, logger);\n }\n RemoteConfigClient.prototype.subscribe = function (key, deliveryMode, callback) {\n var id = UUID();\n var callbackInfo = {\n id: id,\n key: key,\n deliveryMode: deliveryMode,\n callback: callback,\n };\n this.callbackInfos.push(callbackInfo);\n if (deliveryMode === 'all') {\n void this.subscribeAll(callbackInfo);\n }\n else {\n void this.subscribeWaitForRemote(callbackInfo, deliveryMode.timeout);\n }\n return id;\n };\n RemoteConfigClient.prototype.unsubscribe = function (id) {\n var index = this.callbackInfos.findIndex(function (callbackInfo) { return callbackInfo.id === id; });\n if (index === -1) {\n this.logger.debug(\"Remote config client unsubscribe failed because callback with id \".concat(id, \" doesn't exist.\"));\n return false;\n }\n this.callbackInfos.splice(index, 1);\n this.logger.debug(\"Remote config client unsubscribe succeeded removing callback with id \".concat(id, \".\"));\n return true;\n };\n RemoteConfigClient.prototype.updateConfigs = function () {\n return __awaiter(this, void 0, void 0, function () {\n var timeSinceLastFetch, result;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Check if we need to throttle based on last successful fetch time\n if (this.lastSuccessfulFetch) {\n timeSinceLastFetch = Date.now() - this.lastSuccessfulFetch;\n if (timeSinceLastFetch < DEFAULT_MIN_TIME_BETWEEN_FETCHES) {\n this.logger.debug('Remote config client skipping updateConfigs: Too recent');\n return [2 /*return*/];\n }\n }\n return [4 /*yield*/, this.getOrCreateFetchPromise()];\n case 1:\n result = _a.sent();\n void this.storage.setConfig(result);\n this.callbackInfos.forEach(function (callbackInfo) {\n _this.sendCallback(callbackInfo, result, 'remote');\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Get the in-flight fetch promise or create a new one.\n * This ensures multiple subscribe calls share the same network request.\n */\n RemoteConfigClient.prototype.getOrCreateFetchPromise = function () {\n var _this = this;\n if (this.fetchPromise) {\n return this.fetchPromise;\n }\n if (this.isLastFetchInvalidApiKey) {\n this.logger.debug('Remote config client skipping fetch: Invalid API key');\n this.fetchPromise = Promise.resolve({\n remoteConfig: null,\n lastFetch: new Date(),\n }).finally(function () {\n _this.fetchPromise = null;\n });\n return this.fetchPromise;\n }\n this.fetchPromise = this.fetch()\n .then(function (result) {\n // Update last successful fetch time if we got a valid config\n if (result.remoteConfig !== null) {\n _this.lastSuccessfulFetch = Date.now();\n }\n return result;\n })\n .finally(function () {\n // Clear the promise after it settles (success or failure)\n _this.fetchPromise = null;\n });\n return this.fetchPromise;\n };\n /**\n * Send remote first. If it's already complete, we can skip the cached response.\n * - if remote is fetched first, no cache fetch.\n * - if cache is fetched first, still fetching remote.\n */\n RemoteConfigClient.prototype.subscribeAll = function (callbackInfo) {\n return __awaiter(this, void 0, void 0, function () {\n var remotePromise, cachePromise, result;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n remotePromise = this.getOrCreateFetchPromise().then(function (result) {\n _this.logger.debug(\"Remote config client subscription all mode fetched from remote: \".concat(JSON.stringify(result)));\n _this.sendCallback(callbackInfo, result, 'remote');\n void _this.storage.setConfig(result);\n });\n cachePromise = this.storage.fetchConfig().then(function (result) {\n return result;\n });\n return [4 /*yield*/, Promise.race([remotePromise, cachePromise])];\n case 1:\n result = _a.sent();\n // If cache is fetched first, wait for remote.\n if (result !== undefined) {\n this.logger.debug(\"Remote config client subscription all mode fetched from cache: \".concat(JSON.stringify(result)));\n // Skip sending callback if cache is empty (first time user).\n if (result.remoteConfig !== null) {\n this.sendCallback(callbackInfo, result, 'cache');\n }\n else {\n this.logger.debug('Remote config client skips sending callback because cache is empty (first time user).');\n }\n }\n return [4 /*yield*/, remotePromise];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Waits for a remote response until the given timeout, then return a cached copy, if available.\n */\n RemoteConfigClient.prototype.subscribeWaitForRemote = function (callbackInfo, timeout) {\n return __awaiter(this, void 0, void 0, function () {\n var timeoutPromise, result, error_1, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n timeoutPromise = new Promise(function (_, reject) {\n setTimeout(function () {\n reject('Timeout exceeded');\n }, timeout);\n });\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 5]);\n return [4 /*yield*/, Promise.race([\n this.getOrCreateFetchPromise(),\n timeoutPromise,\n ])];\n case 2:\n result = (_a.sent());\n this.logger.debug('Remote config client subscription wait for remote mode returns from remote.');\n this.sendCallback(callbackInfo, result, 'remote');\n void this.storage.setConfig(result);\n return [3 /*break*/, 5];\n case 3:\n error_1 = _a.sent();\n this.logger.debug('Remote config client subscription wait for remote mode exceeded timeout. Try to fetch from cache.');\n return [4 /*yield*/, this.storage.fetchConfig()];\n case 4:\n result = _a.sent();\n if (result.remoteConfig !== null) {\n this.logger.debug('Remote config client subscription wait for remote mode returns a cached copy.');\n this.sendCallback(callbackInfo, result, 'cache');\n }\n else {\n this.logger.debug('Remote config client subscription wait for remote mode failed to fetch cache.');\n this.sendCallback(callbackInfo, result, 'remote');\n }\n return [3 /*break*/, 5];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Call the callback with filtered remote config based on key.\n * @param remoteConfigInfo - the whole remote config object without filtering by key.\n */\n RemoteConfigClient.prototype.sendCallback = function (callbackInfo, remoteConfigInfo, source) {\n callbackInfo.lastCallback = new Date();\n var filteredConfig;\n if (callbackInfo.key) {\n // Filter remote config by key.\n // For example, if remote config is {a: {b: {c: 1}}},\n // if key = 'a', filter result is {b: {c: 1}};\n // if key = 'a.b', filter result is {c: 1}\n filteredConfig = callbackInfo.key.split('.').reduce(function (config, key) {\n if (config === null) {\n return config;\n }\n return key in config ? config[key] : null;\n }, remoteConfigInfo.remoteConfig);\n }\n else {\n filteredConfig = remoteConfigInfo.remoteConfig;\n }\n callbackInfo.callback(filteredConfig, source, remoteConfigInfo.lastFetch);\n };\n /**\n * Fetch remote config from remote.\n * @param retries - the number of retries. default is 3.\n * @param timeout - the timeout in milliseconds. Default is 1000.\n * This timeout serves two purposes:\n * 1. It determines how long to wait for each remote config fetch request before aborting it.\n * If the fetch does not complete within the specified timeout, the request is cancelled using AbortController,\n * and the attempt is considered failed (and may be retried if retries remain).\n * 2. It is also used to calculate the interval between retries. The total timeout is divided by the number of retries,\n * so each retry waits for (timeout / retries) milliseconds before the next attempt (linear backoff).\n * Retry behavior by status code:\n * - 401: invalid API key (stop retries and disable future updateConfigs calls).\n * - 429: retry up to max retries.\n * - other 4xx: no retry.\n * - 5xx and network failures: retry up to max retries.\n * @returns the remote config info. null if failed to fetch or the response is not valid JSON.\n */\n RemoteConfigClient.prototype.fetch = function (retries, timeout) {\n if (retries === void 0) { retries = DEFAULT_MAX_RETRIES; }\n if (timeout === void 0) { timeout = DEFAULT_TIMEOUT; }\n return __awaiter(this, void 0, void 0, function () {\n var interval, failedRemoteConfigInfo, _loop_1, this_1, attempt, state_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n interval = timeout / retries;\n failedRemoteConfigInfo = {\n remoteConfig: null,\n lastFetch: new Date(),\n };\n _loop_1 = function (attempt) {\n var shouldRetry, abortController, timeoutId, res, body, remoteConfig, error_2;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n shouldRetry = true;\n abortController = new AbortController();\n timeoutId = setTimeout(function () { return abortController.abort(); }, timeout);\n _b.label = 1;\n case 1:\n _b.trys.push([1, 7, 8, 9]);\n return [4 /*yield*/, fetch(this_1.getUrlParams(), {\n method: 'GET',\n headers: {\n Accept: '*/*',\n },\n signal: abortController.signal,\n })];\n case 2:\n res = _b.sent();\n if (!!res.ok) return [3 /*break*/, 4];\n return [4 /*yield*/, res.text()];\n case 3:\n body = _b.sent();\n this_1.logger.debug(\"Remote config client fetch with retry time \".concat(retries, \" failed with \").concat(res.status, \": \").concat(body));\n if (res.status === CODE_STATUS.INVALID_API_KEY || res.status === CODE_STATUS.FORBIDDEN) {\n this_1.logger.error(\"Remote config client fetch failed with \".concat(res.status, \". Invalid API key; future fetches will be skipped.\"));\n this_1.isLastFetchInvalidApiKey = true;\n shouldRetry = false;\n }\n else if (res.status >= 400 && res.status < 500 && res.status !== CODE_STATUS.RATE_LIMIT) {\n shouldRetry = false;\n }\n return [3 /*break*/, 6];\n case 4: return [4 /*yield*/, res.json()];\n case 5:\n remoteConfig = (_b.sent());\n return [2 /*return*/, { value: {\n remoteConfig: remoteConfig,\n lastFetch: new Date(),\n } }];\n case 6: return [3 /*break*/, 9];\n case 7:\n error_2 = _b.sent();\n // Handle rejects when the request fails, for example, a network error or timeout\n if (error_2 instanceof Error && error_2.name === 'AbortError') {\n this_1.logger.debug(\"Remote config client fetch with retry time \".concat(retries, \" timed out after \").concat(timeout, \"ms\"));\n }\n else {\n this_1.logger.debug(\"Remote config client fetch with retry time \".concat(retries, \" is rejected because: \"), error_2);\n }\n return [3 /*break*/, 9];\n case 8:\n // Clear the timeout since request completed or failed\n clearTimeout(timeoutId);\n return [7 /*endfinally*/];\n case 9:\n if (!shouldRetry) {\n return [2 /*return*/, \"break\"];\n }\n if (!(attempt < retries - 1)) return [3 /*break*/, 11];\n return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, _this.getJitterDelay(interval)); })];\n case 10:\n _b.sent();\n _b.label = 11;\n case 11: return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n attempt = 0;\n _a.label = 1;\n case 1:\n if (!(attempt < retries)) return [3 /*break*/, 4];\n return [5 /*yield**/, _loop_1(attempt)];\n case 2:\n state_1 = _a.sent();\n if (typeof state_1 === \"object\")\n return [2 /*return*/, state_1.value];\n if (state_1 === \"break\")\n return [3 /*break*/, 4];\n _a.label = 3;\n case 3:\n attempt++;\n return [3 /*break*/, 1];\n case 4: return [2 /*return*/, failedRemoteConfigInfo];\n }\n });\n });\n };\n /**\n * Return jitter in the bound of [0,baseDelay) and then floor round.\n */\n RemoteConfigClient.prototype.getJitterDelay = function (baseDelay) {\n return Math.floor(Math.random() * baseDelay);\n };\n RemoteConfigClient.prototype.getUrlParams = function () {\n // URL encode the API key to handle special characters\n var encodedApiKey = encodeURIComponent(this.apiKey);\n var urlParams = new URLSearchParams();\n urlParams.append('config_group', RemoteConfigClient.CONFIG_GROUP);\n return \"\".concat(this.serverUrl, \"/\").concat(encodedApiKey, \"?\").concat(urlParams.toString());\n };\n RemoteConfigClient.CONFIG_GROUP = 'browser';\n return RemoteConfigClient;\n}());\nexport { RemoteConfigClient };\n//# sourceMappingURL=remote-config.js.map","import { __read, __values } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nvar globalScope = getGlobalScope();\n/* istanbul ignore next */\nvar originalConsole = globalScope === null || globalScope === void 0 ? void 0 : globalScope.console;\nvar handlers = {};\n// keeps reference to original console methods\nvar originalFn = {};\nvar inConsoleOverride = false;\nfunction overrideConsole(logLevel) {\n /* istanbul ignore if */\n if (!originalConsole) {\n return false;\n }\n // should not override if original console property is not a function\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access */\n if (typeof originalConsole[logLevel] !== 'function') {\n return false;\n }\n // if console is already overridden, return true\n if (originalFn[logLevel]) {\n return true;\n }\n // override console method\n var handler = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n try {\n if (handlers[logLevel] && !inConsoleOverride) {\n // add a re-entrancy guard to prevent infinite recursion\n inConsoleOverride = true;\n var callbacks = handlers[logLevel];\n if (callbacks) {\n callbacks.forEach(function (callback) {\n try {\n callback(logLevel, args);\n }\n catch (_a) {\n // do nothing\n }\n });\n }\n }\n }\n catch (_a) {\n // do nothing\n }\n inConsoleOverride = false;\n return originalFn[logLevel].apply(originalConsole, args);\n };\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access */\n originalFn[logLevel] = originalConsole[logLevel];\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access */\n originalConsole[logLevel] = handler;\n return true;\n}\n/**\n * Observe a console log method (log, warn, error, etc.)\n * @param level - The console log level to observe\n * @param callback - The callback function to call when the console log level is observed\n */\nfunction addListener(level, callback) {\n var res = overrideConsole(level);\n /* istanbul ignore if */\n if (!res) {\n return new Error('Console override failed');\n }\n if (handlers[level]) {\n // using ! is safe because we know the key exists based on condition above\n handlers[level].push(callback);\n }\n else {\n handlers[level] = [callback];\n }\n}\n/**\n * Disconnect a callback function from a console log method\n * @param callback - The callback function to disconnect\n */\nfunction removeListener(callback) {\n var e_1, _a;\n try {\n for (var _b = __values(Object.values(handlers)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var callbacks = _c.value;\n // iterate backwards to avoid index shifting\n for (var i = callbacks.length - 1; i >= 0; i--) {\n if (callbacks[i] === callback) {\n callbacks.splice(i, 1);\n break;\n }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n}\n// this should only be used for testing\n// restoring console can break console overrides\nfunction _restoreConsole() {\n var e_2, _a;\n try {\n for (var _b = __values(Object.entries(originalFn)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], originalHandler = _d[1];\n if (originalHandler) {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access */\n originalConsole[key] = originalHandler;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n originalFn = {};\n handlers = {};\n}\nvar consoleObserver = {\n addListener: addListener,\n removeListener: removeListener,\n _restoreConsole: _restoreConsole,\n};\nexport { consoleObserver };\n//# sourceMappingURL=console.js.map","/**\n * Default CSS selectors to define which elements on the page to track.\n * Extend this list to include additional elements to track. For example:\n * ```\n * autocapturePlugin({\n * cssSelectorAllowlist: [...DEFAULT_CSS_SELECTOR_ALLOWLIST, \".my-class\"],\n * })\n * ```\n */\nexport var DEFAULT_CSS_SELECTOR_ALLOWLIST = [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'label',\n 'video',\n 'audio',\n '[contenteditable=\"true\" i]',\n '[data-amp-default-track]',\n '.amp-default-track',\n];\n/**\n * Default prefix to allow the plugin to capture data attributes as an event property.\n */\nexport var DEFAULT_DATA_ATTRIBUTE_PREFIX = 'data-amp-track-';\n/**\n * Default list of elements on the page should be tracked when the page changes.\n */\nexport var DEFAULT_ACTION_CLICK_ALLOWLIST = ['div', 'span', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\nexport var DEFAULT_EXPOSURE_DURATION = 150;\n//# sourceMappingURL=element-interactions.js.map","import { __read, __spreadArray } from \"tslib\";\nvar CLICKABLE_ELEMENT_SELECTORS = [\n 'a',\n 'button',\n '[role=\"button\"]',\n '[role=\"link\"]',\n '[role=\"menuitem\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]',\n '[role=\"option\"]',\n '[role=\"tab\"]',\n '[role=\"treeitem\"]',\n '[contenteditable=\"true\" i]',\n];\nvar DEFAULT_ERROR_AND_DEAD_CLICK_ALLOWLIST = __spreadArray([\n 'input[type=\"button\"]',\n 'input[type=\"submit\"]',\n 'input[type=\"reset\"]',\n 'input[type=\"image\"]',\n 'input[type=\"file\"]'\n], __read(CLICKABLE_ELEMENT_SELECTORS), false);\n/**\n * Default CSS selectors for dead clicks tracking\n */\nexport var DEFAULT_DEAD_CLICK_ALLOWLIST = DEFAULT_ERROR_AND_DEAD_CLICK_ALLOWLIST;\n/**\n * Default CSS selectors for error tracking\n */\nexport var DEFAULT_ERROR_CLICK_ALLOWLIST = DEFAULT_ERROR_AND_DEAD_CLICK_ALLOWLIST;\n/**\n * Default CSS selectors for rage clicks tracking\n */\nexport var DEFAULT_RAGE_CLICK_ALLOWLIST = ['*'];\n/**\n * Default time window for dead clicks (3 seconds)\n */\nexport var DEFAULT_DEAD_CLICK_WINDOW_MS = 3000;\n/**\n * Default time window for rage clicks (1 second)\n */\nexport var DEFAULT_RAGE_CLICK_WINDOW_MS = 1000;\n/**\n * Default threshold for rage clicks (4 clicks)\n */\nexport var DEFAULT_RAGE_CLICK_THRESHOLD = 4;\n/**\n * Default threshold for rage clicks to be considered out of bounds (50 pixels)\n */\nexport var DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD = 50; // pixels\n//# sourceMappingURL=frustration-interactions.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nfunction isJsonPrimitive(json) {\n return (typeof json === 'string' ||\n typeof json === 'number' ||\n typeof json === 'boolean' ||\n json === null ||\n json === undefined);\n}\n/**\n * Prune a JSON object to only include the keys in the allowlist and excludes the keys\n * in the exclude list.\n *\n * This function is a mutative function that will modify the original JSON object.\n * This is done to avoid creating a new JSON object and copying the data.\n *\n * @param json - The JSON object to prune.\n * @param allowlist - The keys to include in the pruned JSON object.\n * @param excludelist - The keys to exclude from the pruned JSON object.\n */\nexport function pruneJson(json, allowlist, excludelist) {\n if (!json)\n return;\n // tokenize the allowlist and excludelist\n var allowlistTokens = allowlist.map(tokenizeJsonPath);\n var excludelistTokens = excludelist.map(tokenizeJsonPath);\n _pruneJson({\n json: json,\n allowlist: allowlistTokens,\n excludelist: excludelistTokens,\n ancestors: [],\n });\n}\nexport function _pruneJson(_a) {\n var e_1, _b;\n var json = _a.json, targetObject = _a.targetObject, allowlist = _a.allowlist, excludelist = _a.excludelist, ancestors = _a.ancestors, parentObject = _a.parentObject, targetKey = _a.targetKey;\n if (!targetObject) {\n targetObject = json;\n }\n var keys = Object.keys(targetObject);\n try {\n for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {\n var key = keys_1_1.value;\n var path = __spreadArray(__spreadArray([], __read(ancestors), false), [key], false);\n if (isJsonPrimitive(targetObject[key])) {\n // if the value does not match allowlist or matches exclude list, delete it\n if (!hasPathMatchInList(path, allowlist) || hasPathMatchInList(path, excludelist)) {\n delete targetObject[key];\n }\n }\n else {\n _pruneJson({\n json: json,\n targetObject: targetObject[key],\n allowlist: allowlist,\n excludelist: excludelist,\n ancestors: path,\n parentObject: targetObject,\n targetKey: key,\n });\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (keys_1_1 && !keys_1_1.done && (_b = keys_1.return)) _b.call(keys_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // if this object is empty now, delete the whole object\n if (Object.keys(targetObject).length === 0 && parentObject && targetKey) {\n delete parentObject[targetKey];\n }\n}\n/**\n * Tokenize a JSON path string into an array of strings.\n * Escapes ~0 and ~1 to ~ and / respectively.\n *\n * e.g.) turns string \"a/b/c\" into [\"a\", \"b\", \"c\"]\n *\n * @param path - The JSON path to tokenize.\n * @returns The tokenized JSON path.\n */\nexport function tokenizeJsonPath(path) {\n if (path.startsWith('/')) {\n path = path.slice(1);\n }\n return path.split('/').map(function (token) { return token.replace(/~0/g, '~').replace(/~1/g, '/'); });\n}\n/**\n * Check if a JSON path matches a path matcher.\n *\n * Rules:\n * 1. If a key in a path and a matcher are the same, then they match, move to the next\n * 2. If the matcher is a *, then it matches the key, move to the next\n * 3. If the matcher is a **, then it matches >=0 keys\n *\n * @param path - The path to check.\n * @param pathMatcher - The path matcher to check against.\n * @param i - The current index of the path.\n * @param j - The current index of the path matcher.\n * @returns True if the path matches the path matcher, false otherwise.\n */\nexport function isPathMatch(path, pathMatcher, i, j) {\n if (i === void 0) { i = 0; }\n if (j === void 0) { j = 0; }\n if (j === pathMatcher.length) {\n return i === path.length;\n }\n if (i === path.length) {\n while (j < pathMatcher.length && pathMatcher[j] === '**') {\n j++;\n }\n return j === pathMatcher.length;\n }\n var currentMatcher = pathMatcher[j];\n if (currentMatcher === '**') {\n if (j + 1 === pathMatcher.length) {\n return true;\n }\n for (var k = i; k <= path.length; k++) {\n if (isPathMatch(path, pathMatcher, k, j + 1)) {\n return true;\n }\n }\n return false;\n }\n else if (currentMatcher === '*' || currentMatcher === path[i]) {\n return isPathMatch(path, pathMatcher, i + 1, j + 1);\n }\n else {\n return false;\n }\n}\n/**\n * Check if a JSON path matches any of the path matchers in the allow or exclude list.\n *\n * @param path - The JSON path to check.\n * @param allowOrExcludeList - The allow or exclude list to check against.\n * @returns True if the path matches any of the path matchers in the allow or exclude list, false otherwise.\n */\nfunction hasPathMatchInList(path, allowOrExcludeList) {\n return allowOrExcludeList.some(function (l) { return isPathMatch(path, l); });\n}\n//# sourceMappingURL=json-query.js.map","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { getGlobalScope } from './global-scope';\nimport { pruneJson } from './utils/json-query';\nimport { SAFE_HEADERS, FORBIDDEN_HEADERS } from './types/constants';\nvar TEXT_READ_TIMEOUT = 500;\nexport var MAXIMUM_ENTRIES = 100;\n/**\n * This class encapsulates the RequestInit (https://developer.mozilla.org/en-US/docs/Web/API/RequestInit)\n * object so that the consumer can only get access to the headers, method and body size.\n *\n * This is to prevent consumers from directly accessing the Request object\n * and mutating it or running costly operations on it.\n *\n * IMPORTANT:\n * * Do not make changes to this class without careful consideration\n * of performance implications, memory usage and potential to mutate the customer's\n * request.\n * * NEVER .clone() the RequestInit object. This will 2x's the memory overhead of the request\n * * NEVER: call .arrayBuffer(), text(), json() or any other method on the body that\n * consumes the body's stream. This will cause the response to be consumed\n * meaning the body will be empty when the customer tries to access it.\n * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * never call any of the methods on it)\n */\nvar RequestWrapperFetch = /** @class */ (function () {\n function RequestWrapperFetch(request) {\n this.request = request;\n }\n RequestWrapperFetch.prototype.headers = function (allow) {\n var e_1, _a;\n if (allow === void 0) { allow = []; }\n var headersUnsafe = this.request.headers;\n // copy the headers into a new object\n var headersSafeCopy = {};\n if (Array.isArray(headersUnsafe)) {\n headersUnsafe.forEach(function (_a) {\n var _b = __read(_a, 2), headerName = _b[0], headerValue = _b[1];\n headersSafeCopy[headerName] = headerValue;\n });\n }\n else if (headersUnsafe instanceof Headers) {\n headersUnsafe.forEach(function (value, key) {\n headersSafeCopy[key] = value;\n });\n }\n else if (typeof headersUnsafe === 'object' && headersUnsafe !== null) {\n try {\n for (var _b = __values(Object.entries(headersUnsafe)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n headersSafeCopy[key] = value;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n return pruneHeaders(headersSafeCopy, { allow: allow });\n };\n Object.defineProperty(RequestWrapperFetch.prototype, \"bodySize\", {\n get: function () {\n if (typeof this._bodySize === 'number')\n return this._bodySize;\n var global = getGlobalScope();\n /* istanbul ignore if */\n if (!(global === null || global === void 0 ? void 0 : global.TextEncoder)) {\n return;\n }\n var body = this.request.body;\n this._bodySize = getBodySize(body, MAXIMUM_ENTRIES);\n return this._bodySize;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperFetch.prototype, \"method\", {\n get: function () {\n return this.request.method;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperFetch.prototype, \"body\", {\n get: function () {\n if (typeof this.request.body === 'string') {\n return this.request.body;\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n RequestWrapperFetch.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n text = this.body;\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n });\n });\n };\n return RequestWrapperFetch;\n}());\nexport { RequestWrapperFetch };\nvar RequestWrapperXhr = /** @class */ (function () {\n function RequestWrapperXhr(bodyRaw, requestHeaders) {\n this.bodyRaw = bodyRaw;\n this.requestHeaders = requestHeaders;\n }\n RequestWrapperXhr.prototype.headers = function (allow) {\n if (allow === void 0) { allow = []; }\n return pruneHeaders(this.requestHeaders, { allow: allow });\n };\n Object.defineProperty(RequestWrapperXhr.prototype, \"bodySize\", {\n get: function () {\n return getBodySize(this.bodyRaw, MAXIMUM_ENTRIES);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperXhr.prototype, \"body\", {\n get: function () {\n if (typeof this.bodyRaw === 'string') {\n return this.bodyRaw;\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n RequestWrapperXhr.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n text = this.body;\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n });\n });\n };\n return RequestWrapperXhr;\n}());\nexport { RequestWrapperXhr };\nfunction getBodySize(bodyUnsafe, maxEntries) {\n var e_2, _a;\n var bodySize;\n var global = getGlobalScope();\n /* istanbul ignore next */\n var TextEncoder = global === null || global === void 0 ? void 0 : global.TextEncoder;\n /* istanbul ignore next */\n if (!TextEncoder) {\n return;\n }\n var bodySafe;\n if (typeof bodyUnsafe === 'string') {\n bodySafe = bodyUnsafe;\n bodySize = new TextEncoder().encode(bodySafe).length;\n }\n else if (bodyUnsafe instanceof Blob) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.size;\n }\n else if (bodyUnsafe instanceof URLSearchParams) {\n bodySafe = bodyUnsafe;\n bodySize = new TextEncoder().encode(bodySafe.toString()).length;\n }\n else if (ArrayBuffer.isView(bodyUnsafe)) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.byteLength;\n }\n else if (bodyUnsafe instanceof ArrayBuffer) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.byteLength;\n }\n else if (bodyUnsafe instanceof FormData) {\n // Estimating only for text parts; not accurate for files\n var formData = bodyUnsafe;\n var total = 0;\n var count = 0;\n try {\n for (var _b = __values(formData.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n total += key.length;\n if (typeof value === 'string') {\n total += new TextEncoder().encode(value).length;\n }\n else if (value instanceof Blob) {\n total += value.size;\n }\n else {\n // encountered an unknown type\n // we can't estimate the size of this entry\n return;\n }\n // terminate if we reach the maximum number of entries\n // to avoid performance issues in case of very large FormData\n if (++count >= maxEntries) {\n return;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n bodySize = total;\n }\n else if (bodyUnsafe instanceof ReadableStream) {\n // If bodyUnsafe is an instanceof ReadableStream, we can't determine the size,\n // without consuming it, so we return undefined.\n // Never ever consume ReadableStream! DO NOT DO IT!!!\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n bodySafe = bodyUnsafe;\n return;\n }\n return bodySize;\n}\n/**\n * This class encapsulates the Fetch API Response object\n * (https://developer.mozilla.org/en-US/docs/Web/API/Response) so that the consumer can\n * only get access to the headers and body size.\n *\n * This is to prevent consumers from directly accessing the Response object\n * and mutating it or running costly operations on it.\n *\n * IMPORTANT:\n * * Do not make changes to this class without careful consideration\n * of performance implications, memory usage and potential to mutate the customer's\n * response.\n * * Do not .clone() the Response object unless you need to access the body.\n * Cloning will 2x the memory overhead of the response.\n * * NEVER consume the body's stream. This will cause the response to be consumed\n * meaning the body will be empty when the customer tries to access it.\n * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * never call any of the methods on it)\n */\nvar ResponseWrapperFetch = /** @class */ (function () {\n function ResponseWrapperFetch(response) {\n this.response = response;\n }\n ResponseWrapperFetch.prototype.headers = function (allow) {\n var _a;\n if (allow === void 0) { allow = []; }\n if (this.response.headers instanceof Headers) {\n var headersSafe = this.response.headers;\n var headersOut_1 = {};\n /* istanbul ignore next */\n (_a = headersSafe === null || headersSafe === void 0 ? void 0 : headersSafe.forEach) === null || _a === void 0 ? void 0 : _a.call(headersSafe, function (value, key) {\n headersOut_1[key] = value;\n });\n return pruneHeaders(headersOut_1, { allow: allow });\n }\n return;\n };\n Object.defineProperty(ResponseWrapperFetch.prototype, \"bodySize\", {\n get: function () {\n var _a, _b;\n if (this._bodySize !== undefined)\n return this._bodySize;\n /* istanbul ignore next */\n var contentLength = (_b = (_a = this.response.headers) === null || _a === void 0 ? void 0 : _a.get) === null || _b === void 0 ? void 0 : _b.call(_a, 'content-length');\n var bodySize = contentLength ? parseInt(contentLength, 10) : undefined;\n this._bodySize = bodySize;\n return bodySize;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ResponseWrapperFetch.prototype, \"status\", {\n get: function () {\n return this.response.status;\n },\n enumerable: false,\n configurable: true\n });\n ResponseWrapperFetch.prototype.text = function () {\n return __awaiter(this, void 0, void 0, function () {\n var textPromise, timer, text, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // !!!IMPORTANT: we clone the response to avoid mutating the original response\n // never call .text(), .json(), etc.. on the original response always clone it first\n if (!this.clonedResponse) {\n this.clonedResponse = this.response.clone();\n }\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n textPromise = this.clonedResponse.text();\n timer = new Promise(function (resolve) {\n return setTimeout(\n /* istanbul ignore next */\n function () { return resolve(null); }, TEXT_READ_TIMEOUT);\n });\n return [4 /*yield*/, Promise.race([textPromise, timer])];\n case 2:\n text = _a.sent();\n return [2 /*return*/, text];\n case 3:\n error_1 = _a.sent();\n return [2 /*return*/, null];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n ResponseWrapperFetch.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n return [4 /*yield*/, this.text()];\n case 1:\n text = _a.sent();\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n }\n });\n });\n };\n return ResponseWrapperFetch;\n}());\nexport { ResponseWrapperFetch };\nvar ResponseWrapperXhr = /** @class */ (function () {\n function ResponseWrapperXhr(statusCode, headersString, size, getJson) {\n this.statusCode = statusCode;\n this.headersString = headersString;\n this.size = size;\n this.getJson = getJson;\n }\n Object.defineProperty(ResponseWrapperXhr.prototype, \"bodySize\", {\n get: function () {\n return this.size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ResponseWrapperXhr.prototype, \"status\", {\n get: function () {\n return this.statusCode;\n },\n enumerable: false,\n configurable: true\n });\n ResponseWrapperXhr.prototype.headers = function (allow) {\n var e_3, _a;\n if (allow === void 0) { allow = []; }\n if (!this.headersString) {\n return {};\n }\n var headers = {};\n var headerLines = this.headersString.split('\\r\\n');\n try {\n for (var headerLines_1 = __values(headerLines), headerLines_1_1 = headerLines_1.next(); !headerLines_1_1.done; headerLines_1_1 = headerLines_1.next()) {\n var line = headerLines_1_1.value;\n var _b = __read(line.split(': '), 2), key = _b[0], value = _b[1];\n if (key && value) {\n headers[key] = value;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (headerLines_1_1 && !headerLines_1_1.done && (_a = headerLines_1.return)) _a.call(headerLines_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return pruneHeaders(headers, { allow: allow });\n };\n ResponseWrapperXhr.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var jsonBody;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n jsonBody = this.getJson();\n if (jsonBody) {\n pruneJson(jsonBody, allow, exclude);\n return [2 /*return*/, jsonBody];\n }\n return [2 /*return*/, null];\n });\n });\n };\n return ResponseWrapperXhr;\n}());\nexport { ResponseWrapperXhr };\nfunction safeParseAndPruneBody(text, allow, exclude) {\n if (!text)\n return null;\n try {\n var json = JSON.parse(text);\n pruneJson(json, allow, exclude);\n return json;\n }\n catch (error) {\n return null;\n }\n}\nexport var PRUNE_STRATEGY;\n(function (PRUNE_STRATEGY) {\n PRUNE_STRATEGY[\"REDACT\"] = \"redact\";\n PRUNE_STRATEGY[\"REMOVE\"] = \"remove\";\n})(PRUNE_STRATEGY || (PRUNE_STRATEGY = {}));\nvar REDACTED_VALUE = '[REDACTED]';\n/**\n * Prune headers from a headers record object.\n * @param headers - The headers to prune.\n * @param options - The options to prune the headers.\n * @param options.exclude - List of headers to delete from headers\n * @param options.include - List of headers to keep in headers, if not provided, all headers are kept by default\n * @returns The pruned headers.\n */\nexport var pruneHeaders = function (headers, options) {\n var e_4, _a;\n var _b = options.allow, allow = _b === void 0 ? [] : _b, _c = options.strategy, strategy = _c === void 0 ? PRUNE_STRATEGY.REMOVE : _c;\n var exclude = __spreadArray([], __read(FORBIDDEN_HEADERS), false);\n var headersPruned = {};\n var _loop_1 = function (key) {\n var lowerKey = key.toLowerCase();\n if (exclude.find(function (e) { return e.toLowerCase() === lowerKey; })) {\n if (strategy === PRUNE_STRATEGY.REDACT) {\n headersPruned[key] = REDACTED_VALUE;\n }\n }\n else if (!allow.find(function (i) { return i.toLowerCase() === lowerKey; })) {\n if (strategy === PRUNE_STRATEGY.REDACT) {\n headersPruned[key] = REDACTED_VALUE;\n }\n }\n else {\n headersPruned[key] = headers[key];\n }\n };\n try {\n for (var _d = __values(Object.keys(headers)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var key = _e.value;\n _loop_1(key);\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_4) throw e_4.error; }\n }\n return headersPruned;\n};\nvar NetworkRequestEvent = /** @class */ (function () {\n function NetworkRequestEvent(type, method, timestamp, startTime, url, requestWrapper, status, duration, responseWrapper, error, endTime) {\n if (status === void 0) { status = 0; }\n this.type = type;\n this.method = method;\n this.timestamp = timestamp;\n this.startTime = startTime;\n this.url = url;\n this.requestWrapper = requestWrapper;\n this.status = status;\n this.duration = duration;\n this.responseWrapper = responseWrapper;\n this.error = error;\n this.endTime = endTime;\n }\n NetworkRequestEvent.prototype.toSerializable = function () {\n var _a, _b, _c, _d;\n var serialized = {\n type: this.type,\n method: this.method,\n url: this.url,\n timestamp: this.timestamp,\n status: this.status,\n duration: this.duration,\n error: this.error,\n startTime: this.startTime,\n endTime: this.endTime,\n requestHeaders: (_a = this.requestWrapper) === null || _a === void 0 ? void 0 : _a.headers(__spreadArray([], __read(SAFE_HEADERS), false)),\n requestBodySize: (_b = this.requestWrapper) === null || _b === void 0 ? void 0 : _b.bodySize,\n responseHeaders: (_c = this.responseWrapper) === null || _c === void 0 ? void 0 : _c.headers(__spreadArray([], __read(SAFE_HEADERS), false)),\n responseBodySize: (_d = this.responseWrapper) === null || _d === void 0 ? void 0 : _d.bodySize,\n };\n return Object.fromEntries(Object.entries(serialized).filter(function (_a) {\n var _b = __read(_a, 2), _ = _b[0], v = _b[1];\n return v !== undefined;\n }));\n };\n return NetworkRequestEvent;\n}());\nexport { NetworkRequestEvent };\n//# sourceMappingURL=network-request-event.js.map","import { __assign, __awaiter, __generator, __read } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nimport { UUID } from '../utils/uuid';\nimport { NetworkRequestEvent, RequestWrapperFetch, ResponseWrapperFetch, RequestWrapperXhr, ResponseWrapperXhr, } from '../network-request-event';\n/**\n * Typeguard function checks if an input is a Request object.\n */\nfunction isRequest(requestInfo) {\n return typeof requestInfo === 'object' && requestInfo !== null && 'url' in requestInfo && 'method' in requestInfo;\n}\nvar NetworkEventCallback = /** @class */ (function () {\n function NetworkEventCallback(callback, id) {\n if (id === void 0) { id = UUID(); }\n this.callback = callback;\n this.id = id;\n }\n return NetworkEventCallback;\n}());\nexport { NetworkEventCallback };\nfunction safeInvoke(fn) {\n try {\n fn();\n }\n catch (err) {\n // swallow the error\n }\n}\nvar NetworkObserver = /** @class */ (function () {\n function NetworkObserver(logger) {\n this.eventCallbacks = new Map();\n this.isObserving = false;\n this.logger = logger;\n var globalScope = getGlobalScope();\n if (!NetworkObserver.isSupported()) {\n /* istanbul ignore next */\n return;\n }\n this.globalScope = globalScope;\n }\n NetworkObserver.isSupported = function () {\n var globalScope = getGlobalScope();\n return !!globalScope && !!globalScope.fetch;\n };\n NetworkObserver.prototype.subscribe = function (eventCallback, logger) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n if (!this.logger) {\n this.logger = logger;\n }\n this.eventCallbacks.set(eventCallback.id, eventCallback);\n if (!this.isObserving) {\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrOpen = (_c = (_b = (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.XMLHttpRequest) === null || _b === void 0 ? void 0 : _b.prototype) === null || _c === void 0 ? void 0 : _c.open;\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrSend = (_f = (_e = (_d = this.globalScope) === null || _d === void 0 ? void 0 : _d.XMLHttpRequest) === null || _e === void 0 ? void 0 : _e.prototype) === null || _f === void 0 ? void 0 : _f.send;\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrSetRequestHeader = (_j = (_h = (_g = this.globalScope) === null || _g === void 0 ? void 0 : _g.XMLHttpRequest) === null || _h === void 0 ? void 0 : _h.prototype) === null || _j === void 0 ? void 0 : _j.setRequestHeader;\n if (originalXhrOpen && originalXhrSend && originalXhrSetRequestHeader) {\n this.observeXhr(originalXhrOpen, originalXhrSend, originalXhrSetRequestHeader);\n }\n /* istanbul ignore next */\n var originalFetch = (_k = this.globalScope) === null || _k === void 0 ? void 0 : _k.fetch;\n /* istanbul ignore next */\n if (originalFetch) {\n this.observeFetch(originalFetch);\n }\n /* istanbul ignore next */\n this.isObserving = true;\n }\n };\n NetworkObserver.prototype.unsubscribe = function (eventCallback) {\n this.eventCallbacks.delete(eventCallback.id);\n };\n NetworkObserver.prototype.triggerEventCallbacks = function (event) {\n var _this = this;\n this.eventCallbacks.forEach(function (callback) {\n try {\n callback.callback(event);\n }\n catch (err) {\n // if the callback throws an error, we should catch it\n // to avoid breaking the fetch promise chain\n safeInvoke(function () {\n var _a;\n /* istanbul ignore next */\n (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while triggering event callbacks', err);\n });\n }\n });\n };\n NetworkObserver.prototype.handleNetworkRequestEvent = function (requestType, requestInfo, requestWrapper, responseWrapper, typedError, startTime, durationStart) {\n var _a;\n /* istanbul ignore next */\n if (startTime === undefined || durationStart === undefined) {\n // if we reach this point, it means that the performance API is not supported\n // so we can't construct a NetworkRequestEvent\n return;\n }\n // parse the URL and Method\n var url;\n var method = 'GET';\n if (isRequest(requestInfo)) {\n url = requestInfo['url'];\n method = requestInfo['method'];\n }\n else {\n url = (_a = requestInfo === null || requestInfo === void 0 ? void 0 : requestInfo.toString) === null || _a === void 0 ? void 0 : _a.call(requestInfo);\n }\n // strip basic auth from the URL\n if (url) {\n try {\n var parsedUrl = new URL(url);\n // reconstruct the URL without the basic auth\n url = \"\".concat(parsedUrl.protocol, \"//\").concat(parsedUrl.host).concat(parsedUrl.pathname).concat(parsedUrl.search).concat(parsedUrl.hash);\n // eslint-disable-next-line no-empty\n }\n catch (err) { }\n }\n method = (requestWrapper === null || requestWrapper === void 0 ? void 0 : requestWrapper.method) || method;\n var status, error;\n if (responseWrapper) {\n status = responseWrapper.status;\n }\n if (typedError) {\n error = {\n name: typedError.name || 'UnknownError',\n message: typedError.message || 'An unknown error occurred',\n };\n status = 0;\n }\n var duration = Math.floor(performance.now() - durationStart);\n var endTime = Math.floor(startTime + duration);\n var requestEvent = new NetworkRequestEvent(requestType, method, startTime, // timestamp and startTime are aliases\n startTime, url, requestWrapper, status, duration, responseWrapper, error, endTime);\n this.triggerEventCallbacks(requestEvent);\n };\n NetworkObserver.prototype.getTimestamps = function () {\n var _a, _b;\n /* istanbul ignore next */\n return {\n startTime: (_a = Date.now) === null || _a === void 0 ? void 0 : _a.call(Date),\n durationStart: (_b = performance === null || performance === void 0 ? void 0 : performance.now) === null || _b === void 0 ? void 0 : _b.call(performance),\n };\n };\n NetworkObserver.prototype.observeFetch = function (originalFetch) {\n var _this = this;\n /* istanbul ignore next */\n if (!this.globalScope || !originalFetch) {\n return;\n }\n /**\n * IMPORTANT: This overrides window.fetch in browsers.\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of fetch\n * and make sure another developer who is an expert reviews this change throughly\n */\n this.globalScope.fetch = function (requestInfo, requestInit) { return __awaiter(_this, void 0, void 0, function () {\n var timestamps, originalResponse, originalError, err_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n try {\n timestamps = this.getTimestamps();\n }\n catch (error) {\n /* istanbul ignore next */\n safeInvoke(function () { var _a; return (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while retrieving timestamps', error); });\n }\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, originalFetch(requestInfo, requestInit)];\n case 2:\n originalResponse = _a.sent();\n return [3 /*break*/, 4];\n case 3:\n err_1 = _a.sent();\n // Capture error information\n originalError = err_1;\n return [3 /*break*/, 4];\n case 4:\n // 3. call the handler after the fetch call is done\n try {\n this.handleNetworkRequestEvent('fetch', requestInfo, requestInit ? new RequestWrapperFetch(requestInit) : undefined, originalResponse ? new ResponseWrapperFetch(originalResponse) : undefined, originalError, \n /* istanbul ignore next */\n timestamps === null || timestamps === void 0 ? void 0 : timestamps.startTime, \n /* istanbul ignore next */\n timestamps === null || timestamps === void 0 ? void 0 : timestamps.durationStart);\n }\n catch (err) {\n // this catch shouldn't be reachable, but keep it here for safety\n // because we're overriding the fetch function and better to be safe than sorry\n /* istanbul ignore next */\n safeInvoke(function () { var _a; return (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while handling fetch', err); });\n }\n // 4. return the original response or throw the original error\n if (originalResponse) {\n // if the response is not undefined, return it\n return [2 /*return*/, originalResponse];\n }\n else {\n throw originalError;\n }\n return [2 /*return*/];\n }\n });\n }); };\n };\n /**\n * Creates a function that parses the response of an XMLHttpRequest as JSON.\n *\n * Returns function instead of JSON object to avoid unnecessary parsing if the\n * body is not being captured.\n *\n * @param xhrSafe - The XMLHttpRequest object.\n * @param context - The NetworkObserver instance.\n * @returns A function that parses the response of an XMLHttpRequest as JSON.\n */\n NetworkObserver.createXhrJsonParser = function (xhrUnsafe, context) {\n return function () {\n var _a;\n try {\n if (xhrUnsafe.responseType === 'json') {\n // if response is a JS object, clone it so that subscribers can't mutate it\n if ((_a = context.globalScope) === null || _a === void 0 ? void 0 : _a.structuredClone) {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return */\n return context.globalScope.structuredClone(xhrUnsafe.response);\n }\n }\n else if (['text', ''].includes(xhrUnsafe.responseType)) {\n // if response is a string, parse it as JSON\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return */\n return JSON.parse(xhrUnsafe.responseText);\n }\n }\n catch (err) {\n /* istanbul ignore if */\n if (err instanceof Error && err.name === 'InvalidStateError') {\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseText#exceptions\n // if we reach here, it means we don't handle responseType correctly\n safeInvoke(function () {\n var _a;\n return (_a = context.logger) === null || _a === void 0 ? void 0 : _a.debug(\"unexpected error when retrieving responseText. responseType='\".concat(xhrUnsafe.responseType, \"'\"));\n });\n }\n // the other possible error is Json Parse error which we fail silently\n return null;\n }\n return null;\n };\n };\n NetworkObserver.prototype.observeXhr = function (originalXhrOpen, originalXhrSend, originalXhrSetRequestHeader) {\n /* istanbul ignore next */\n if (!this.globalScope || !originalXhrOpen || !originalXhrSend) {\n return;\n }\n var xhrProto = this.globalScope.XMLHttpRequest.prototype;\n var networkObserverContext = this;\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.open\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.open\n * and make sure another developer who is an expert reviews this change throughly\n */\n xhrProto.open = function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var xhrSafe = this;\n var _b = __read(args, 2), method = _b[0], url = _b[1];\n try {\n /* istanbul ignore next */\n xhrSafe.$$AmplitudeAnalyticsEvent = __assign({ method: method, url: (_a = url === null || url === void 0 ? void 0 : url.toString) === null || _a === void 0 ? void 0 : _a.call(url), headers: {} }, networkObserverContext.getTimestamps());\n }\n catch (err) {\n /* istanbul ignore next */\n safeInvoke(function () { var _a; return (_a = networkObserverContext.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while calling xhr open', err); });\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return originalXhrOpen.apply(xhrSafe, args);\n };\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.send\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.send\n * and make sure another developer who is an expert reviews this change throughly\n */\n // allow \"any\" type for args to reflect how it's used in the browser\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n xhrProto.send = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var xhrUnsafe = this;\n var xhrSafe = xhrUnsafe;\n var getJson = NetworkObserver.createXhrJsonParser(xhrUnsafe, networkObserverContext);\n var body = args[0];\n var requestEvent = xhrSafe.$$AmplitudeAnalyticsEvent;\n // if xhrSafe.$$AmplitudeAnalyticsEvent is not set, it means that\n // the xhr.open method was called before we monkey-patched XHR and\n // the event is missed\n if (xhrSafe.$$AmplitudeAnalyticsEvent) {\n xhrSafe.addEventListener('loadend', function () {\n try {\n var responseHeaders = xhrSafe.getAllResponseHeaders();\n var responseBodySize = xhrSafe.getResponseHeader('content-length');\n var responseWrapper = new ResponseWrapperXhr(xhrSafe.status, responseHeaders, \n /* istanbul ignore next */\n responseBodySize ? parseInt(responseBodySize, 10) : undefined, getJson);\n var requestHeaders = xhrSafe.$$AmplitudeAnalyticsEvent.headers;\n var requestWrapper = new RequestWrapperXhr(body, requestHeaders);\n requestEvent.status = xhrSafe.status;\n networkObserverContext.handleNetworkRequestEvent('xhr', { url: requestEvent.url, method: requestEvent.method }, requestWrapper, responseWrapper, undefined, requestEvent.startTime, requestEvent.durationStart);\n }\n catch (err) {\n /* istanbul ignore next */\n safeInvoke(function () { var _a; return (_a = networkObserverContext.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while handling xhr send', err); });\n }\n });\n }\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n return originalXhrSend.apply(xhrSafe, args);\n };\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.setRequestHeader\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.setRequestHeader\n * and make sure another developer who is an expert reviews this change throughly\n */\n // allow \"any\" type for args to reflect how it's used in the browser\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n xhrProto.setRequestHeader = function (headerName, headerValue) {\n var xhrSafe = this;\n try {\n var analyticsEvent = xhrSafe.$$AmplitudeAnalyticsEvent;\n if (analyticsEvent) {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment */\n analyticsEvent.headers[headerName] = headerValue;\n }\n }\n catch (err) {\n /* istanbul ignore next */\n safeInvoke(function () { var _a; return (_a = networkObserverContext.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while calling xhr setRequestHeader', err); });\n }\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n originalXhrSetRequestHeader.apply(xhrSafe, [headerName, headerValue]);\n };\n };\n return NetworkObserver;\n}());\nexport { NetworkObserver };\n// singleton instance of NetworkObserver\nexport var networkObserver = new NetworkObserver();\n//# sourceMappingURL=network.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { getQueryParams } from '../query-params';\nimport { UTM_CAMPAIGN, UTM_CONTENT, UTM_MEDIUM, UTM_SOURCE, UTM_TERM, GCLID, FBCLID, BASE_CAMPAIGN, DCLID, MSCLKID, RDT_CID, TWCLID, TTCLID, KO_CLICK_ID, LI_FAT_ID, GBRAID, WBRAID, UTM_ID, } from '../types/constants';\nvar CampaignParser = /** @class */ (function () {\n function CampaignParser() {\n }\n CampaignParser.prototype.parse = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, __assign(__assign(__assign(__assign({}, BASE_CAMPAIGN), this.getUtmParam()), this.getReferrer()), this.getClickIds())];\n });\n });\n };\n CampaignParser.prototype.getUtmParam = function () {\n var params = getQueryParams();\n var utmCampaign = params[UTM_CAMPAIGN];\n var utmContent = params[UTM_CONTENT];\n var utmId = params[UTM_ID];\n var utmMedium = params[UTM_MEDIUM];\n var utmSource = params[UTM_SOURCE];\n var utmTerm = params[UTM_TERM];\n return {\n utm_campaign: utmCampaign,\n utm_content: utmContent,\n utm_id: utmId,\n utm_medium: utmMedium,\n utm_source: utmSource,\n utm_term: utmTerm,\n };\n };\n CampaignParser.prototype.getReferrer = function () {\n var _a, _b;\n var data = {\n referrer: undefined,\n referring_domain: undefined,\n };\n try {\n data.referrer = document.referrer || undefined;\n data.referring_domain = (_b = (_a = data.referrer) === null || _a === void 0 ? void 0 : _a.split('/')[2]) !== null && _b !== void 0 ? _b : undefined;\n }\n catch (_c) {\n // nothing to track\n }\n return data;\n };\n CampaignParser.prototype.getClickIds = function () {\n var _a;\n var params = getQueryParams();\n return _a = {},\n _a[DCLID] = params[DCLID],\n _a[FBCLID] = params[FBCLID],\n _a[GBRAID] = params[GBRAID],\n _a[GCLID] = params[GCLID],\n _a[KO_CLICK_ID] = params[KO_CLICK_ID],\n _a[LI_FAT_ID] = params[LI_FAT_ID],\n _a[MSCLKID] = params[MSCLKID],\n _a[RDT_CID] = params[RDT_CID],\n _a[TTCLID] = params[TTCLID],\n _a[TWCLID] = params[TWCLID],\n _a[WBRAID] = params[WBRAID],\n _a;\n };\n return CampaignParser;\n}());\nexport { CampaignParser };\n//# sourceMappingURL=campaign-parser.js.map","import { __values } from \"tslib\";\nexport var TEXT_MASK_ATTRIBUTE = 'data-amp-mask';\nexport var MASKED_TEXT_VALUE = '*****';\n// Regex patterns for sensitive data\nexport var CC_REGEX = /\\b(?:\\d[ -]*?){13,16}\\b/;\nexport var SSN_REGEX = /(\\d{3}-?\\d{2}-?\\d{4})/g;\nexport var EMAIL_REGEX = /[^\\s@]+@[^\\s@.]+\\.[^\\s@]+/g;\n/**\n * Replaces sensitive strings (credit cards, SSNs, emails) and custom patterns with masked text\n * @param text - The text to search for sensitive data\n * @param additionalMaskTextPatterns - Optional array of additional regex patterns to mask\n * @returns The text with sensitive data replaced by masked text\n */\nexport var replaceSensitiveString = function (text, additionalMaskTextPatterns) {\n var e_1, _a;\n if (additionalMaskTextPatterns === void 0) { additionalMaskTextPatterns = []; }\n if (typeof text !== 'string') {\n return '';\n }\n var result = text;\n // Check for credit card number (with or without spaces/dashes)\n result = result.replace(CC_REGEX, MASKED_TEXT_VALUE);\n // Check for social security number\n result = result.replace(SSN_REGEX, MASKED_TEXT_VALUE);\n // Check for email\n result = result.replace(EMAIL_REGEX, MASKED_TEXT_VALUE);\n try {\n // Check for additional mask text patterns\n for (var additionalMaskTextPatterns_1 = __values(additionalMaskTextPatterns), additionalMaskTextPatterns_1_1 = additionalMaskTextPatterns_1.next(); !additionalMaskTextPatterns_1_1.done; additionalMaskTextPatterns_1_1 = additionalMaskTextPatterns_1.next()) {\n var pattern = additionalMaskTextPatterns_1_1.value;\n try {\n result = result.replace(pattern, MASKED_TEXT_VALUE);\n }\n catch (_b) {\n // ignore invalid pattern\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (additionalMaskTextPatterns_1_1 && !additionalMaskTextPatterns_1_1.done && (_a = additionalMaskTextPatterns_1.return)) _a.call(additionalMaskTextPatterns_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return result;\n};\n/**\n * Gets the page title, checking if the title element has data-amp-mask attribute\n * @returns The page title, masked if the title element has data-amp-mask attribute\n */\nexport var getPageTitle = function (parseTitleFunction) {\n if (typeof document === 'undefined' || !document.title) {\n return '';\n }\n var titleElement = document.querySelector('title');\n if (titleElement && titleElement.hasAttribute(TEXT_MASK_ATTRIBUTE)) {\n return MASKED_TEXT_VALUE;\n }\n return parseTitleFunction ? parseTitleFunction(document.title) : document.title; // document.title is always synced to the first title element\n};\n//# sourceMappingURL=helpers.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Observable = void 0;\n\n// === Symbol Support ===\nconst hasSymbol = name => Boolean(Symbol[name]);\n\nconst getSymbol = name => hasSymbol(name) ? Symbol[name] : '@@' + name;\n\nconst SymbolIterator = getSymbol('iterator');\nconst SymbolObservable = getSymbol('observable');\nconst SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n let value = obj[key];\n if (value == null) return undefined;\n if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n return value;\n}\n\nfunction getSpecies(obj) {\n let ctor = obj.constructor;\n\n if (ctor !== undefined) {\n ctor = ctor[SymbolSpecies];\n\n if (ctor === null) {\n ctor = undefined;\n }\n }\n\n return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n if (hostReportError.log) {\n hostReportError.log(e);\n } else {\n setTimeout(() => {\n throw e;\n });\n }\n}\n\nfunction enqueue(fn) {\n Promise.resolve().then(() => {\n try {\n fn();\n } catch (e) {\n hostReportError(e);\n }\n });\n}\n\nfunction cleanupSubscription(subscription) {\n let cleanup = subscription._cleanup;\n if (cleanup === undefined) return;\n subscription._cleanup = undefined;\n\n if (!cleanup) {\n return;\n }\n\n try {\n if (typeof cleanup === 'function') {\n cleanup();\n } else {\n let unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n if (unsubscribe) {\n unsubscribe.call(cleanup);\n }\n }\n } catch (e) {\n hostReportError(e);\n }\n}\n\nfunction closeSubscription(subscription) {\n subscription._observer = undefined;\n subscription._queue = undefined;\n subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n let queue = subscription._queue;\n\n if (!queue) {\n return;\n }\n\n subscription._queue = undefined;\n subscription._state = 'ready';\n\n for (let i = 0; i < queue.length; ++i) {\n notifySubscription(subscription, queue[i].type, queue[i].value);\n if (subscription._state === 'closed') break;\n }\n}\n\nfunction notifySubscription(subscription, type, value) {\n subscription._state = 'running';\n let observer = subscription._observer;\n\n try {\n let m = getMethod(observer, type);\n\n switch (type) {\n case 'next':\n if (m) m.call(observer, value);\n break;\n\n case 'error':\n closeSubscription(subscription);\n if (m) m.call(observer, value);else throw value;\n break;\n\n case 'complete':\n closeSubscription(subscription);\n if (m) m.call(observer);\n break;\n }\n } catch (e) {\n hostReportError(e);\n }\n\n if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n if (subscription._state === 'closed') return;\n\n if (subscription._state === 'buffering') {\n subscription._queue.push({\n type,\n value\n });\n\n return;\n }\n\n if (subscription._state !== 'ready') {\n subscription._state = 'buffering';\n subscription._queue = [{\n type,\n value\n }];\n enqueue(() => flushSubscription(subscription));\n return;\n }\n\n notifySubscription(subscription, type, value);\n}\n\nclass Subscription {\n constructor(observer, subscriber) {\n // ASSERT: observer is an object\n // ASSERT: subscriber is callable\n this._cleanup = undefined;\n this._observer = observer;\n this._queue = undefined;\n this._state = 'initializing';\n let self = this;\n let subscriptionObserver = {\n get closed() {\n return self._state === 'closed';\n },\n\n next(value) {\n onNotify(self, 'next', value);\n },\n\n error(value) {\n onNotify(self, 'error', value);\n },\n\n complete() {\n onNotify(self, 'complete');\n }\n\n };\n\n try {\n this._cleanup = subscriber.call(undefined, subscriptionObserver);\n } catch (e) {\n subscriptionObserver.error(e);\n }\n\n if (this._state === 'initializing') this._state = 'ready';\n }\n\n get closed() {\n return this._state === 'closed';\n }\n\n unsubscribe() {\n if (this._state !== 'closed') {\n closeSubscription(this);\n cleanupSubscription(this);\n }\n }\n\n}\n\nclass Observable {\n constructor(subscriber) {\n if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n this._subscriber = subscriber;\n }\n\n subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n observer = {\n next: observer,\n error: arguments[1],\n complete: arguments[2]\n };\n }\n\n return new Subscription(observer, this._subscriber);\n }\n\n forEach(fn) {\n return new Promise((resolve, reject) => {\n if (typeof fn !== 'function') {\n reject(new TypeError(fn + ' is not a function'));\n return;\n }\n\n function done() {\n subscription.unsubscribe();\n resolve();\n }\n\n let subscription = this.subscribe({\n next(value) {\n try {\n fn(value, done);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n\n error: reject,\n complete: resolve\n });\n });\n }\n\n map(fn) {\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n let C = getSpecies(this);\n return new C(observer => this.subscribe({\n next(value) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n\n error(e) {\n observer.error(e);\n },\n\n complete() {\n observer.complete();\n }\n\n }));\n }\n\n filter(fn) {\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n let C = getSpecies(this);\n return new C(observer => this.subscribe({\n next(value) {\n try {\n if (!fn(value)) return;\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n\n error(e) {\n observer.error(e);\n },\n\n complete() {\n observer.complete();\n }\n\n }));\n }\n\n reduce(fn) {\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n let C = getSpecies(this);\n let hasSeed = arguments.length > 1;\n let hasValue = false;\n let seed = arguments[1];\n let acc = seed;\n return new C(observer => this.subscribe({\n next(value) {\n let first = !hasValue;\n hasValue = true;\n\n if (!first || hasSeed) {\n try {\n acc = fn(acc, value);\n } catch (e) {\n return observer.error(e);\n }\n } else {\n acc = value;\n }\n },\n\n error(e) {\n observer.error(e);\n },\n\n complete() {\n if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n observer.next(acc);\n observer.complete();\n }\n\n }));\n }\n\n async all() {\n let values = [];\n await this.forEach(value => values.push(value));\n return values;\n }\n\n concat(...sources) {\n let C = getSpecies(this);\n return new C(observer => {\n let subscription;\n let index = 0;\n\n function startNext(next) {\n subscription = next.subscribe({\n next(v) {\n observer.next(v);\n },\n\n error(e) {\n observer.error(e);\n },\n\n complete() {\n if (index === sources.length) {\n subscription = undefined;\n observer.complete();\n } else {\n startNext(C.from(sources[index++]));\n }\n }\n\n });\n }\n\n startNext(this);\n return () => {\n if (subscription) {\n subscription.unsubscribe();\n subscription = undefined;\n }\n };\n });\n }\n\n flatMap(fn) {\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n let C = getSpecies(this);\n return new C(observer => {\n let subscriptions = [];\n let outer = this.subscribe({\n next(value) {\n if (fn) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n }\n\n let inner = C.from(value).subscribe({\n next(value) {\n observer.next(value);\n },\n\n error(e) {\n observer.error(e);\n },\n\n complete() {\n let i = subscriptions.indexOf(inner);\n if (i >= 0) subscriptions.splice(i, 1);\n completeIfDone();\n }\n\n });\n subscriptions.push(inner);\n },\n\n error(e) {\n observer.error(e);\n },\n\n complete() {\n completeIfDone();\n }\n\n });\n\n function completeIfDone() {\n if (outer.closed && subscriptions.length === 0) observer.complete();\n }\n\n return () => {\n subscriptions.forEach(s => s.unsubscribe());\n outer.unsubscribe();\n };\n });\n }\n\n [SymbolObservable]() {\n return this;\n }\n\n static from(x) {\n let C = typeof this === 'function' ? this : Observable;\n if (x == null) throw new TypeError(x + ' is not an object');\n let method = getMethod(x, SymbolObservable);\n\n if (method) {\n let observable = method.call(x);\n if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n if (isObservable(observable) && observable.constructor === C) return observable;\n return new C(observer => observable.subscribe(observer));\n }\n\n if (hasSymbol('iterator')) {\n method = getMethod(x, SymbolIterator);\n\n if (method) {\n return new C(observer => {\n enqueue(() => {\n if (observer.closed) return;\n\n for (let item of method.call(x)) {\n observer.next(item);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n }\n\n if (Array.isArray(x)) {\n return new C(observer => {\n enqueue(() => {\n if (observer.closed) return;\n\n for (let i = 0; i < x.length; ++i) {\n observer.next(x[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n\n throw new TypeError(x + ' is not observable');\n }\n\n static of(...items) {\n let C = typeof this === 'function' ? this : Observable;\n return new C(observer => {\n enqueue(() => {\n if (observer.closed) return;\n\n for (let i = 0; i < items.length; ++i) {\n observer.next(items[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n\n static get [SymbolSpecies]() {\n return this;\n }\n\n}\n\nexports.Observable = Observable;\nObject.defineProperty(Observable, Symbol('extensions'), {\n value: {\n symbol: SymbolObservable,\n hostReportError\n },\n configurable: true\n});","module.exports = require('./lib/Observable.js').Observable;\n","import { __values } from \"tslib\";\nimport ZenObservable from 'zen-observable';\nexport { ZenObservable as Observable };\n/**\n * asyncMap operator for Zen Observable\n *\n * Maps each value emitted by the source Observable using an async function,\n * emitting the resolved values in the same order they arrive.\n */\nfunction asyncMap(observable, fn) {\n return new ZenObservable(function (observer) {\n observable.subscribe({\n next: function (value) {\n fn(value)\n .then(function (result) {\n return observer.next(result);\n })\n .catch(function (error) { return observer.error(error); });\n },\n error: function (error) {\n observer.error(error);\n },\n complete: function () {\n observer.complete();\n },\n });\n });\n}\n/**\n * merge operator for Zen Observable\n *\n * Merges two observables into a single observable, emitting values from both sources in the order they arrive.\n * @param sourceA Observable to merge\n * @param sourceB Observable to merge\n * @returns Unsubscribable cleanup function\n */\nfunction merge(sourceA, sourceB) {\n return new ZenObservable(function (observer) {\n var closed = false;\n var subscriptions = new Set();\n var cleanup = function () {\n var e_1, _a;\n closed = true;\n try {\n for (var subscriptions_1 = __values(subscriptions), subscriptions_1_1 = subscriptions_1.next(); !subscriptions_1_1.done; subscriptions_1_1 = subscriptions_1.next()) {\n var sub = subscriptions_1_1.value;\n try {\n sub.unsubscribe();\n }\n catch (_b) {\n /* do nothing */\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (subscriptions_1_1 && !subscriptions_1_1.done && (_a = subscriptions_1.return)) _a.call(subscriptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriptions.clear();\n };\n var subscribeTo = function (source) {\n var sub = source.subscribe({\n next: function (value) {\n if (!closed)\n observer.next(value);\n },\n error: function (err) {\n if (!closed) {\n closed = true;\n observer.error(err);\n cleanup();\n }\n },\n complete: function () {\n subscriptions.delete(sub);\n if (!closed && subscriptions.size === 0) {\n observer.complete();\n cleanup();\n closed = true;\n }\n },\n });\n subscriptions.add(sub);\n };\n subscribeTo(sourceA);\n subscribeTo(sourceB);\n return cleanup;\n });\n}\n// function share() {\nfunction multicast(source) {\n var observers = new Set();\n var subscription = null;\n function cleanup() {\n /* istanbul ignore next */\n subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe();\n subscription = null;\n observers.clear();\n }\n return new ZenObservable(function (observer) {\n observers.add(observer);\n if (subscription === null) {\n subscription = source.subscribe({\n next: function (value) {\n var e_2, _a;\n var _b;\n try {\n for (var observers_1 = __values(observers), observers_1_1 = observers_1.next(); !observers_1_1.done; observers_1_1 = observers_1.next()) {\n var obs = observers_1_1.value;\n /* istanbul ignore next */\n (_b = obs.next) === null || _b === void 0 ? void 0 : _b.call(obs, value);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (observers_1_1 && !observers_1_1.done && (_a = observers_1.return)) _a.call(observers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n },\n error: function (err) {\n var e_3, _a;\n var _b;\n try {\n for (var observers_2 = __values(observers), observers_2_1 = observers_2.next(); !observers_2_1.done; observers_2_1 = observers_2.next()) {\n var obs = observers_2_1.value;\n /* istanbul ignore next */\n (_b = obs.error) === null || _b === void 0 ? void 0 : _b.call(obs, err);\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (observers_2_1 && !observers_2_1.done && (_a = observers_2.return)) _a.call(observers_2);\n }\n finally { if (e_3) throw e_3.error; }\n }\n cleanup();\n },\n complete: function () {\n var e_4, _a;\n var _b;\n try {\n for (var observers_3 = __values(observers), observers_3_1 = observers_3.next(); !observers_3_1.done; observers_3_1 = observers_3.next()) {\n var obs = observers_3_1.value;\n /* istanbul ignore next */\n (_b = obs.complete) === null || _b === void 0 ? void 0 : _b.call(obs);\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (observers_3_1 && !observers_3_1.done && (_a = observers_3.return)) _a.call(observers_3);\n }\n finally { if (e_4) throw e_4.error; }\n }\n cleanup();\n },\n });\n }\n // Return unsubscribe function for this observer\n return function () {\n observers.delete(observer);\n // If no observers left, unsubscribe from the source\n if (observers.size === 0 && subscription) {\n subscription.unsubscribe();\n subscription = null;\n }\n };\n });\n}\nexport { asyncMap, multicast, merge };\n//# sourceMappingURL=observable.js.map","var hasProp = Object.prototype.hasOwnProperty;\n\nfunction throwsMessage(err) {\n\treturn '[Throws: ' + (err ? err.message : '?') + ']';\n}\n\nfunction safeGetValueFromPropertyOnObject(obj, property) {\n\tif (hasProp.call(obj, property)) {\n\t\ttry {\n\t\t\treturn obj[property];\n\t\t}\n\t\tcatch (err) {\n\t\t\treturn throwsMessage(err);\n\t\t}\n\t}\n\n\treturn obj[property];\n}\n\nfunction ensureProperties(obj) {\n\tvar seen = [ ]; // store references to objects we have seen before\n\n\tfunction visit(obj) {\n\t\tif (obj === null || typeof obj !== 'object') {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (seen.indexOf(obj) !== -1) {\n\t\t\treturn '[Circular]';\n\t\t}\n\t\tseen.push(obj);\n\n\t\tif (typeof obj.toJSON === 'function') {\n\t\t\ttry {\n\t\t\t\tvar fResult = visit(obj.toJSON());\n\t\t\t\tseen.pop();\n\t\t\t\treturn fResult;\n\t\t\t} catch(err) {\n\t\t\t\treturn throwsMessage(err);\n\t\t\t}\n\t\t}\n\n\t\tif (Array.isArray(obj)) {\n\t\t\tvar aResult = obj.map(visit);\n\t\t\tseen.pop();\n\t\t\treturn aResult;\n\t\t}\n\n\t\tvar result = Object.keys(obj).reduce(function(result, prop) {\n\t\t\t// prevent faulty defined getter properties\n\t\t\tresult[prop] = visit(safeGetValueFromPropertyOnObject(obj, prop));\n\t\t\treturn result;\n\t\t}, {});\n\t\tseen.pop();\n\t\treturn result;\n\t};\n\n\treturn visit(obj);\n}\n\nmodule.exports = function(data, replacer, space) {\n\treturn JSON.stringify(ensureProperties(data), replacer, space);\n}\n\nmodule.exports.ensureProperties = ensureProperties;\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport * as safeJsonStringifyModule from 'safe-json-stringify';\n/* istanbul ignore next */\nvar safeJsonStringify = safeJsonStringifyModule.default || safeJsonStringifyModule;\nexport { safeJsonStringify };\n//# sourceMappingURL=safe-stringify.js.map","// Shared origin constants for Amplitude cross-window communication\nexport var AMPLITUDE_ORIGIN = 'https://app.amplitude.com';\nexport var AMPLITUDE_ORIGIN_EU = 'https://app.eu.amplitude.com';\nexport var AMPLITUDE_ORIGIN_STAGING = 'https://apps.stag2.amplitude.com';\nexport var AMPLITUDE_ORIGINS_MAP = {\n US: AMPLITUDE_ORIGIN,\n EU: AMPLITUDE_ORIGIN_EU,\n STAGING: AMPLITUDE_ORIGIN_STAGING,\n};\n// Background capture script URL (shared between autocapture and session-replay)\nexport var AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL = 'https://cdn.amplitude.com/libs/background-capture-1.0.0-alpha.3.js.gz';\n//# sourceMappingURL=constants.js.map","/* eslint-disable no-restricted-globals */\n/**\n * Dynamically loads an external script by appending a <script> tag to the document head.\n * Deduplicates by checking if a script with the same src already exists.\n */\nexport var asyncLoadScript = function (url) {\n // Dedup: if a script with this src already exists, resolve immediately\n var existing = document.querySelector(\"script[src=\\\"\".concat(CSS.escape(url), \"\\\"]\"));\n if (existing) {\n return Promise.resolve({ status: true });\n }\n return new Promise(function (resolve, reject) {\n var _a;\n try {\n var scriptElement = document.createElement('script');\n scriptElement.type = 'text/javascript';\n scriptElement.async = true;\n scriptElement.src = url;\n scriptElement.addEventListener('load', function () {\n resolve({ status: true });\n }, { once: true });\n scriptElement.addEventListener('error', function () {\n reject({\n status: false,\n message: \"Failed to load the script \".concat(url),\n });\n });\n /* istanbul ignore next */\n (_a = document.head) === null || _a === void 0 ? void 0 : _a.appendChild(scriptElement);\n }\n catch (error) {\n /* istanbul ignore next */\n reject(error);\n }\n });\n};\n/**\n * Generates a simple unique ID for message request/response correlation.\n */\nexport function generateUniqueId() {\n return \"\".concat(Date.now(), \"-\").concat(Math.random().toString(36).substr(2, 9));\n}\n//# sourceMappingURL=utils.js.map","var _a;\nimport { __awaiter, __generator, __values } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nimport { AMPLITUDE_ORIGIN } from './constants';\nimport { asyncLoadScript, generateUniqueId } from './utils';\n/**\n * Brand key used to identify BaseWindowMessenger instances across bundle boundaries.\n */\nvar MESSENGER_BRAND = '__AMPLITUDE_MESSENGER_INSTANCE__';\n/** Global scope key where the singleton messenger is stored. */\nvar MESSENGER_GLOBAL_KEY = '__AMPLITUDE_MESSENGER__';\n/**\n * BaseWindowMessenger provides generic cross-window communication via postMessage.\n * Singleton access via getOrCreateWindowMessenger() to prevent duplicate instances\n */\nvar BaseWindowMessenger = /** @class */ (function () {\n function BaseWindowMessenger(_b) {\n var _c = _b === void 0 ? {} : _b, _d = _c.origin, origin = _d === void 0 ? AMPLITUDE_ORIGIN : _d;\n /** Brand property for cross-bundle instanceof checks. */\n this[_a] = true;\n this.isSetup = false;\n this.messageHandler = null;\n this.requestCallbacks = {};\n this.actionHandlers = new Map();\n /**\n * Messages received for actions that had no registered handler yet.\n * Drained automatically when the corresponding handler is registered via\n * registerActionHandler(), solving startup race conditions between\n * independently-initialized plugins.\n */\n this.pendingMessages = new Map();\n /**\n * Tracks in-flight and completed script loads by URL.\n * Using a map, this prevents duplicate loads before the first resolves.\n */\n this.scriptLoadPromises = new Map();\n this.endpoint = origin;\n }\n /**\n * Send a message to the parent window (window.opener).\n */\n BaseWindowMessenger.prototype.notify = function (message) {\n var _b, _c, _d, _e;\n (_c = (_b = this.logger) === null || _b === void 0 ? void 0 : _b.debug) === null || _c === void 0 ? void 0 : _c.call(_b, 'Message sent: ', JSON.stringify(message));\n (_e = (_d = window.opener) === null || _d === void 0 ? void 0 : _d.postMessage) === null || _e === void 0 ? void 0 : _e.call(_d, message, this.endpoint);\n };\n /**\n * Send an async request to the parent window with a unique ID.\n * Returns a Promise that resolves when the parent responds.\n */\n BaseWindowMessenger.prototype.sendRequest = function (action, args, options) {\n var _this = this;\n if (options === void 0) { options = { timeout: 15000 }; }\n var id = generateUniqueId();\n var request = { id: id, action: action, args: args };\n var promise = new Promise(function (resolve, reject) {\n _this.requestCallbacks[id] = { resolve: resolve, reject: reject };\n _this.notify(request);\n if (options.timeout > 0) {\n setTimeout(function () {\n reject(new Error(\"\".concat(action, \" timed out (id: \").concat(id, \")\")));\n delete _this.requestCallbacks[id];\n }, options.timeout);\n }\n });\n return promise;\n };\n /**\n * Handle a response to a previous request by resolving its Promise.\n */\n BaseWindowMessenger.prototype.handleResponse = function (response) {\n var _b;\n if (!this.requestCallbacks[response.id]) {\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.warn(\"No callback found for request id: \".concat(response.id));\n return;\n }\n this.requestCallbacks[response.id].resolve(response.responseData);\n delete this.requestCallbacks[response.id];\n };\n /**\n * Register a handler for a specific action type.\n * Logs a warning if overwriting an existing handler.\n */\n BaseWindowMessenger.prototype.registerActionHandler = function (action, handler) {\n var e_1, _b;\n var _c, _d;\n if (this.actionHandlers.has(action)) {\n (_d = (_c = this.logger) === null || _c === void 0 ? void 0 : _c.warn) === null || _d === void 0 ? void 0 : _d.call(_c, \"Overwriting existing action handler for: \".concat(action));\n }\n this.actionHandlers.set(action, handler);\n // Replay any messages that arrived before this handler was registered\n var queued = this.pendingMessages.get(action);\n if (queued) {\n this.pendingMessages.delete(action);\n try {\n for (var queued_1 = __values(queued), queued_1_1 = queued_1.next(); !queued_1_1.done; queued_1_1 = queued_1.next()) {\n var data = queued_1_1.value;\n handler(data);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (queued_1_1 && !queued_1_1.done && (_b = queued_1.return)) _b.call(queued_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n };\n /**\n * Load a script once, deduplicating by URL.\n * Safe against concurrent calls — the second call awaits the first's in-flight Promise\n * rather than triggering a duplicate load.\n */\n BaseWindowMessenger.prototype.loadScriptOnce = function (url) {\n return __awaiter(this, void 0, void 0, function () {\n var existing, loadPromise, error_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n existing = this.scriptLoadPromises.get(url);\n if (existing) {\n return [2 /*return*/, existing];\n }\n loadPromise = asyncLoadScript(url).then(function () {\n // Resolve to void\n });\n this.scriptLoadPromises.set(url, loadPromise);\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n return [4 /*yield*/, loadPromise];\n case 2:\n _b.sent();\n return [3 /*break*/, 4];\n case 3:\n error_1 = _b.sent();\n // Remove failed loads so they can be retried\n this.scriptLoadPromises.delete(url);\n throw error_1;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Set up the message listener. Idempotent — safe to call multiple times.\n * Subclasses should call super.setup() and then register their own action handlers.\n */\n BaseWindowMessenger.prototype.setup = function (_b) {\n var _this = this;\n var _c, _d;\n var _e = _b === void 0 ? {} : _b, logger = _e.logger, endpoint = _e.endpoint;\n if (logger) {\n this.logger = logger;\n }\n // If endpoint is customized, don't override a previously customized endpoint.\n if (endpoint && this.endpoint === AMPLITUDE_ORIGIN) {\n this.endpoint = endpoint;\n }\n // Only attach the message listener once\n if (this.isSetup) {\n return;\n }\n this.isSetup = true;\n (_d = (_c = this.logger) === null || _c === void 0 ? void 0 : _c.debug) === null || _d === void 0 ? void 0 : _d.call(_c, 'Setting up messenger');\n // Attach Event Listener to listen for messages from the parent window\n this.messageHandler = function (event) {\n var _b, _c, _d, _e, _f;\n (_c = (_b = _this.logger) === null || _b === void 0 ? void 0 : _b.debug) === null || _c === void 0 ? void 0 : _c.call(_b, 'Message received: ', JSON.stringify(event));\n // Only accept messages from the specified origin\n if (_this.endpoint !== event.origin) {\n return;\n }\n var eventData = event.data;\n var action = eventData === null || eventData === void 0 ? void 0 : eventData.action;\n // Ignore messages without action\n if (!action) {\n return;\n }\n // If id exists, handle responses to previous requests\n if ('id' in eventData && eventData.id) {\n (_e = (_d = _this.logger) === null || _d === void 0 ? void 0 : _d.debug) === null || _e === void 0 ? void 0 : _e.call(_d, 'Received Response to previous request: ', JSON.stringify(event));\n _this.handleResponse(eventData);\n }\n else {\n if (action === 'ping') {\n _this.notify({ action: 'pong' });\n return;\n }\n // Dispatch to registered action handlers, or buffer for late registration\n var handler = _this.actionHandlers.get(action);\n if (handler) {\n handler(eventData.data);\n }\n else {\n var queue = (_f = _this.pendingMessages.get(action)) !== null && _f !== void 0 ? _f : [];\n queue.push(eventData.data);\n _this.pendingMessages.set(action, queue);\n }\n }\n };\n window.addEventListener('message', this.messageHandler);\n this.notify({ action: 'page-loaded' });\n };\n /**\n * Tear down the messenger: remove the message listener, clear all state.\n */\n BaseWindowMessenger.prototype.destroy = function () {\n if (this.messageHandler) {\n window.removeEventListener('message', this.messageHandler);\n this.messageHandler = null;\n }\n this.isSetup = false;\n this.actionHandlers.clear();\n this.pendingMessages.clear();\n this.requestCallbacks = {};\n this.scriptLoadPromises.clear();\n // Remove from global scope if this is the singleton\n var globalScope = getGlobalScope();\n if ((globalScope === null || globalScope === void 0 ? void 0 : globalScope[MESSENGER_GLOBAL_KEY]) === this) {\n delete globalScope[MESSENGER_GLOBAL_KEY];\n }\n };\n return BaseWindowMessenger;\n}());\n_a = MESSENGER_BRAND;\n/**\n * Type guard: checks whether a value is a BaseWindowMessenger instance.\n */\nfunction isWindowMessenger(value) {\n return (typeof value === 'object' &&\n value !== null &&\n MESSENGER_BRAND in value &&\n value[MESSENGER_BRAND] === true);\n}\n/**\n * Get or create a singleton BaseWindowMessenger instance.\n * Ensures only one messenger (and one message listener) exists per page,\n * preventing duplicate script loads and double notifications.\n *\n * The singleton is stored on globalScope under the same MESSENGER_KEY.\n * The branded property check verifies the stored value is actually a messenger.\n */\nexport function getOrCreateWindowMessenger(options) {\n var globalScope = getGlobalScope();\n var existing = globalScope === null || globalScope === void 0 ? void 0 : globalScope[MESSENGER_GLOBAL_KEY];\n if (isWindowMessenger(existing)) {\n return existing;\n }\n var messenger = new BaseWindowMessenger(options);\n if (globalScope) {\n globalScope[MESSENGER_GLOBAL_KEY] = messenger;\n }\n return messenger;\n}\n//# sourceMappingURL=base-window-messenger.js.map","import { AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL } from './constants';\n/**\n * Brand key set on the messenger instance to track whether background capture\n * has been enabled.\n */\nvar BG_CAPTURE_BRAND = '__AMPLITUDE_BACKGROUND_CAPTURE__';\n/**\n * Enable background capture on a messenger instance.\n * Plugins can call this on a shared messenger instance.\n * The first call registers the handlers; subsequent calls are no-ops.\n *\n * @param messenger - The messenger to enable background capture on\n * @param options.scriptUrl - Override the background capture script URL (optional)\n */\nexport function enableBackgroundCapture(messenger, options) {\n var _a;\n // Check the brand on the messenger object itself — works across bundle boundaries\n var branded = messenger;\n if (branded[BG_CAPTURE_BRAND] === true) {\n return;\n }\n branded[BG_CAPTURE_BRAND] = true;\n var scriptUrl = (_a = options === null || options === void 0 ? void 0 : options.scriptUrl) !== null && _a !== void 0 ? _a : AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL;\n var backgroundCaptureInstance = null;\n var onBackgroundCapture = function (type, backgroundCaptureData) {\n var _a, _b;\n if (type === 'background-capture-complete') {\n (_b = (_a = messenger.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'Background capture complete');\n messenger.notify({ action: 'background-capture-complete', data: backgroundCaptureData });\n }\n };\n messenger.registerActionHandler('initialize-background-capture', function () {\n var _a, _b;\n (_b = (_a = messenger.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'Initializing background capture (external script)');\n var resolvedUrl = new URL(scriptUrl, messenger.endpoint).toString();\n messenger\n .loadScriptOnce(resolvedUrl)\n .then(function () {\n var _a, _b, _c;\n (_b = (_a = messenger.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'Background capture script loaded (external)');\n // eslint-disable-next-line\n backgroundCaptureInstance = /* istanbul ignore next -- window is always defined in browser */ (_c = window === null || window === void 0 ? void 0 : window.amplitudeBackgroundCapture) === null || _c === void 0 ? void 0 : _c.call(window, {\n messenger: messenger,\n onBackgroundCapture: onBackgroundCapture,\n });\n messenger.notify({ action: 'background-capture-loaded' });\n })\n .catch(function () {\n var _a;\n (_a = messenger.logger) === null || _a === void 0 ? void 0 : _a.warn('Failed to initialize background capture');\n });\n });\n messenger.registerActionHandler('close-background-capture', function () {\n var _a;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n (_a = backgroundCaptureInstance === null || backgroundCaptureInstance === void 0 ? void 0 : backgroundCaptureInstance.close) === null || _a === void 0 ? void 0 : _a.call(backgroundCaptureInstance);\n backgroundCaptureInstance = null;\n });\n}\n//# sourceMappingURL=background-capture.js.map","export var EXCLUDE_INTERNAL_REFERRERS_CONDITIONS = {\n always: 'always',\n ifEmptyCampaign: 'ifEmptyCampaign',\n};\n//# sourceMappingURL=browser-config.js.map","import { __assign } from \"tslib\";\n/**\n * Returns false if autocapture === false or if autocapture[event],\n * otherwise returns true (even if \"config.autocapture === undefined\")\n */\nvar isTrackingEnabled = function (autocapture, event) {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n if ((autocapture === null || autocapture === void 0 ? void 0 : autocapture[event]) === false) {\n return false;\n }\n return true;\n};\nexport var isAttributionTrackingEnabled = function (autocapture) {\n return isTrackingEnabled(autocapture, 'attribution');\n};\nexport var isFileDownloadTrackingEnabled = function (autocapture) {\n return isTrackingEnabled(autocapture, 'fileDownloads');\n};\nexport var isFormInteractionTrackingEnabled = function (autocapture) {\n return isTrackingEnabled(autocapture, 'formInteractions');\n};\nexport var isPageViewTrackingEnabled = function (autocapture) {\n return isTrackingEnabled(autocapture, 'pageViews');\n};\nexport var isSessionTrackingEnabled = function (autocapture) {\n return isTrackingEnabled(autocapture, 'sessions');\n};\nexport var isPageUrlEnrichmentEnabled = function (autocapture) {\n return isTrackingEnabled(autocapture, 'pageUrlEnrichment');\n};\n/**\n * Returns true if\n * 1. if autocapture.networkTracking === true\n * 2. if autocapture.networkTracking === object\n * otherwise returns false\n */\nexport var isNetworkTrackingEnabled = function (autocapture) {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n if (typeof autocapture === 'object' &&\n (autocapture.networkTracking === true || typeof autocapture.networkTracking === 'object')) {\n return true;\n }\n return false;\n};\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.elementInteractions === true\n * 3. if autocapture.elementInteractions === object\n * otherwise returns false\n */\nexport var isElementInteractionsEnabled = function (autocapture) {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n if (typeof autocapture === 'object' &&\n (autocapture.elementInteractions === true || typeof autocapture.elementInteractions === 'object')) {\n return true;\n }\n return false;\n};\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.webVitals === true\n * otherwise returns false\n */\nexport var isWebVitalsEnabled = function (autocapture) {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n if (typeof autocapture === 'object' && autocapture.webVitals === true) {\n return true;\n }\n return false;\n};\nexport var isFrustrationInteractionsEnabled = function (autocapture) {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n if (typeof autocapture === 'object' &&\n (autocapture.frustrationInteractions === true || typeof autocapture.frustrationInteractions === 'object')) {\n return true;\n }\n return false;\n};\nexport var isCustomEnrichmentEnabled = function (customEnrichment) {\n if (typeof customEnrichment === 'boolean') {\n return customEnrichment;\n }\n if (typeof customEnrichment === 'object' && customEnrichment !== null && customEnrichment.enabled !== false) {\n return true;\n }\n return false;\n};\nexport var getElementInteractionsConfig = function (config) {\n if (isElementInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.elementInteractions === 'object') {\n return config.autocapture.elementInteractions;\n }\n return undefined;\n};\nexport var getFrustrationInteractionsConfig = function (config) {\n if (isFrustrationInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.frustrationInteractions === 'object') {\n return config.autocapture.frustrationInteractions;\n }\n return undefined;\n};\nexport var getNetworkTrackingConfig = function (config) {\n var _a;\n if (isNetworkTrackingEnabled(config.autocapture)) {\n var networkTrackingConfig = void 0;\n if (typeof config.autocapture === 'object' && typeof config.autocapture.networkTracking === 'object') {\n networkTrackingConfig = config.autocapture.networkTracking;\n }\n else if (config.networkTrackingOptions) {\n networkTrackingConfig = config.networkTrackingOptions;\n }\n return __assign(__assign({}, networkTrackingConfig), { captureRules: (_a = networkTrackingConfig === null || networkTrackingConfig === void 0 ? void 0 : networkTrackingConfig.captureRules) === null || _a === void 0 ? void 0 : _a.map(function (rule) {\n var _a, _b, _c;\n // if URLs and hosts are both set, URLs take precedence over hosts\n if (((_a = rule.urls) === null || _a === void 0 ? void 0 : _a.length) && ((_b = rule.hosts) === null || _b === void 0 ? void 0 : _b.length)) {\n var hostsString = JSON.stringify(rule.hosts);\n var urlsString = JSON.stringify(rule.urls);\n /* istanbul ignore next */\n (_c = config.loggerProvider) === null || _c === void 0 ? void 0 : _c.warn(\"Found network capture rule with both urls='\".concat(urlsString, \"' and hosts='\").concat(hostsString, \"' set. \") +\n \"Definition of urls takes precedence over hosts, so ignoring hosts.\");\n return __assign(__assign({}, rule), { hosts: undefined });\n }\n return rule;\n }) });\n }\n return;\n};\nexport var getPageViewTrackingConfig = function (config) {\n var trackOn = function () { return false; };\n var trackHistoryChanges = undefined;\n var eventType;\n var pageCounter = config.pageCounter;\n var isDefaultPageViewTrackingEnabled = isPageViewTrackingEnabled(config.defaultTracking);\n if (isDefaultPageViewTrackingEnabled) {\n trackOn = undefined;\n eventType = undefined;\n if (config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.pageViews &&\n typeof config.defaultTracking.pageViews === 'object') {\n if ('trackOn' in config.defaultTracking.pageViews) {\n trackOn = config.defaultTracking.pageViews.trackOn;\n }\n if ('trackHistoryChanges' in config.defaultTracking.pageViews) {\n trackHistoryChanges = config.defaultTracking.pageViews.trackHistoryChanges;\n }\n if ('eventType' in config.defaultTracking.pageViews && config.defaultTracking.pageViews.eventType) {\n eventType = config.defaultTracking.pageViews.eventType;\n }\n }\n }\n return {\n trackOn: trackOn,\n trackHistoryChanges: trackHistoryChanges,\n eventType: eventType,\n pageCounter: pageCounter,\n };\n};\nexport var getAttributionTrackingConfig = function (config) {\n if (isAttributionTrackingEnabled(config.defaultTracking) &&\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.attribution &&\n typeof config.defaultTracking.attribution === 'object') {\n return __assign({}, config.defaultTracking.attribution);\n }\n return {};\n};\nexport var getFormInteractionsConfig = function (config) {\n if (isFormInteractionTrackingEnabled(config.defaultTracking) &&\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n typeof config.defaultTracking.formInteractions === 'object') {\n return config.defaultTracking.formInteractions;\n }\n return undefined;\n};\n//# sourceMappingURL=default-tracking.js.map","/**\n * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.\n * @ignore\n */\nexport var runQueuedFunctions = function (instance, queue) {\n convertProxyObjectToRealObject(instance, queue);\n};\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n */\nexport var convertProxyObjectToRealObject = function (instance, queue) {\n for (var i = 0; i < queue.length; i++) {\n var _a = queue[i], name_1 = _a.name, args = _a.args, resolve = _a.resolve;\n var fn = instance && instance[name_1];\n if (typeof fn === 'function') {\n var result = fn.apply(instance, args);\n if (typeof resolve === 'function') {\n resolve(result === null || result === void 0 ? void 0 : result.promise);\n }\n }\n }\n return instance;\n};\n/**\n * Check if the param is snippet proxy\n */\nexport var isInstanceProxy = function (instance) {\n var instanceProxy = instance;\n return instanceProxy && instanceProxy._q !== undefined;\n};\n//# sourceMappingURL=snippet-helper.js.map","export var VERSION = '2.39.0';\n//# sourceMappingURL=version.js.map","export var LIBPREFIX = 'amplitude-ts';\n//# sourceMappingURL=lib-prefix.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { UUID, getLanguage } from '@amplitude/analytics-core';\nimport { VERSION } from '../version';\nimport { LIBPREFIX } from '../lib-prefix';\nvar BROWSER_PLATFORM = 'Web';\nvar IP_ADDRESS = '$remote';\nvar Context = /** @class */ (function () {\n function Context() {\n this.name = '@amplitude/plugin-context-browser';\n this.type = 'before';\n this.library = \"\".concat(LIBPREFIX, \"/\").concat(VERSION);\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n this.userAgent = navigator.userAgent;\n }\n }\n Context.prototype.setup = function (config) {\n this.config = config;\n return Promise.resolve(undefined);\n };\n Context.prototype.execute = function (context) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n var time, lastEventId, nextEventId, event;\n return __generator(this, function (_c) {\n time = new Date().getTime();\n lastEventId = (_a = this.config.lastEventId) !== null && _a !== void 0 ? _a : -1;\n nextEventId = (_b = context.event_id) !== null && _b !== void 0 ? _b : lastEventId + 1;\n this.config.lastEventId = nextEventId;\n if (!context.time) {\n this.config.lastEventTime = time;\n }\n event = __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({ user_id: this.config.userId, device_id: this.config.deviceId, session_id: this.config.sessionId, time: time }, (this.config.appVersion && { app_version: this.config.appVersion })), (this.config.trackingOptions.platform && { platform: BROWSER_PLATFORM })), (this.config.trackingOptions.language && { language: getLanguage() })), (this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS })), { insert_id: UUID(), partner_id: this.config.partnerId, plan: this.config.plan }), (this.config.ingestionMetadata && {\n ingestion_metadata: {\n source_name: this.config.ingestionMetadata.sourceName,\n source_version: this.config.ingestionMetadata.sourceVersion,\n },\n })), context), { event_id: nextEventId, library: this.library, user_agent: this.userAgent });\n return [2 /*return*/, event];\n });\n });\n };\n return Context;\n}());\nexport { Context };\n//# sourceMappingURL=context.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { getGlobalScope, BrowserStorage } from '@amplitude/analytics-core';\nvar MAX_ARRAY_LENGTH = 1000;\nvar LocalStorage = /** @class */ (function (_super) {\n __extends(LocalStorage, _super);\n function LocalStorage(config) {\n var _this = this;\n var _a, _b;\n var localStorage;\n try {\n localStorage = (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.localStorage;\n }\n catch (e) {\n (_b = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _b === void 0 ? void 0 : _b.debug(\"Failed to access localStorage. error=\".concat(JSON.stringify(e)));\n localStorage = undefined;\n }\n _this = _super.call(this, localStorage) || this;\n _this.loggerProvider = config === null || config === void 0 ? void 0 : config.loggerProvider;\n return _this;\n }\n LocalStorage.prototype.set = function (key, value) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var droppedEventsCount;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(Array.isArray(value) && value.length > MAX_ARRAY_LENGTH)) return [3 /*break*/, 2];\n droppedEventsCount = value.length - MAX_ARRAY_LENGTH;\n return [4 /*yield*/, _super.prototype.set.call(this, key, value.slice(0, MAX_ARRAY_LENGTH))];\n case 1:\n _b.sent();\n (_a = this.loggerProvider) === null || _a === void 0 ? void 0 : _a.error(\"Failed to save \".concat(droppedEventsCount, \" events because the queue length exceeded \").concat(MAX_ARRAY_LENGTH, \".\"));\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, _super.prototype.set.call(this, key, value)];\n case 3:\n _b.sent();\n _b.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n return LocalStorage;\n}(BrowserStorage));\nexport { LocalStorage };\n//# sourceMappingURL=local-storage.js.map","import { __extends } from \"tslib\";\nimport { getGlobalScope, BrowserStorage } from '@amplitude/analytics-core';\nvar SessionStorage = /** @class */ (function (_super) {\n __extends(SessionStorage, _super);\n function SessionStorage() {\n var _a;\n return _super.call(this, (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.sessionStorage) || this;\n }\n return SessionStorage;\n}(BrowserStorage));\nexport { SessionStorage };\n//# sourceMappingURL=session-storage.js.map","import { __assign, __awaiter, __extends, __generator, __read, __values } from \"tslib\";\nimport { BaseTransport, compressToGzipArrayBuffer, isCompressionStreamAvailable, MIN_GZIP_UPLOAD_BODY_SIZE_BYTES, } from '@amplitude/analytics-core';\nvar XHRTransport = /** @class */ (function (_super) {\n __extends(XHRTransport, _super);\n function XHRTransport(customHeaders) {\n if (customHeaders === void 0) { customHeaders = {}; }\n var _this = _super.call(this) || this;\n _this.state = {\n done: 4,\n };\n _this.customHeaders = customHeaders;\n return _this;\n }\n XHRTransport.prototype.send = function (serverUrl, payload, shouldCompressUploadBody) {\n if (shouldCompressUploadBody === void 0) { shouldCompressUploadBody = false; }\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n /* istanbul ignore if */\n if (typeof XMLHttpRequest === 'undefined') {\n reject(new Error('XHRTransport is not supported.'));\n }\n var xhr = new XMLHttpRequest();\n xhr.open('POST', serverUrl, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === _this.state.done) {\n var responseText = xhr.responseText;\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n resolve(_this.buildResponse(JSON.parse(responseText)));\n }\n catch (_a) {\n resolve(_this.buildResponse({ code: xhr.status }));\n }\n }\n };\n var headers = {\n 'Content-Type': 'application/json',\n Accept: '*/*',\n };\n var bodyString = JSON.stringify(payload);\n var shouldCompressBody = shouldCompressUploadBody &&\n bodyString.length >= MIN_GZIP_UPLOAD_BODY_SIZE_BYTES &&\n isCompressionStreamAvailable();\n var sendBody = function (body) {\n var e_1, _a;\n headers = __assign(__assign({}, _this.customHeaders), headers);\n try {\n for (var _b = __values(Object.entries(headers)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n xhr.setRequestHeader(key, value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n xhr.send(body);\n };\n var doSend = function () { return __awaiter(_this, void 0, void 0, function () {\n var compressed;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!shouldCompressBody) return [3 /*break*/, 2];\n return [4 /*yield*/, compressToGzipArrayBuffer(bodyString)];\n case 1:\n compressed = _a.sent();\n if (compressed) {\n headers['Content-Encoding'] = 'gzip';\n sendBody(compressed);\n }\n else {\n sendBody(bodyString);\n }\n return [3 /*break*/, 3];\n case 2:\n sendBody(bodyString);\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n doSend().catch(reject);\n })];\n });\n });\n };\n return XHRTransport;\n}(BaseTransport));\nexport { XHRTransport };\n//# sourceMappingURL=xhr.js.map","import { __assign, __awaiter, __extends, __generator } from \"tslib\";\nimport { BaseTransport, compressToGzipArrayBuffer, isCompressionStreamAvailable, MIN_GZIP_UPLOAD_BODY_SIZE_BYTES, } from '@amplitude/analytics-core';\n// Temporary browser-specific fetch transport with gzip support.\n// TODO: Merge this implementation back into @amplitude/analytics-core FetchTransport\n// once React Native SDK supports request body gzip.\nvar FetchTransport = /** @class */ (function (_super) {\n __extends(FetchTransport, _super);\n function FetchTransport(customHeaders) {\n if (customHeaders === void 0) { customHeaders = {}; }\n var _this = _super.call(this) || this;\n _this.customHeaders = customHeaders;\n return _this;\n }\n FetchTransport.prototype.send = function (serverUrl, payload, shouldCompressUploadBody) {\n if (shouldCompressUploadBody === void 0) { shouldCompressUploadBody = false; }\n return __awaiter(this, void 0, void 0, function () {\n var bodyString, shouldCompressBody, body, headers, compressed, options, response, responseText;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n /* istanbul ignore if */\n if (typeof fetch === 'undefined') {\n throw new Error('FetchTransport is not supported');\n }\n bodyString = JSON.stringify(payload);\n shouldCompressBody = shouldCompressUploadBody &&\n bodyString.length >= MIN_GZIP_UPLOAD_BODY_SIZE_BYTES &&\n isCompressionStreamAvailable();\n body = bodyString;\n headers = {\n 'Content-Type': 'application/json',\n Accept: '*/*',\n };\n if (!shouldCompressBody) return [3 /*break*/, 2];\n return [4 /*yield*/, compressToGzipArrayBuffer(bodyString)];\n case 1:\n compressed = _a.sent();\n if (compressed) {\n headers['Content-Encoding'] = 'gzip';\n body = compressed;\n }\n _a.label = 2;\n case 2:\n headers = __assign(__assign({}, this.customHeaders), headers);\n options = {\n headers: headers,\n body: body,\n method: 'POST',\n };\n return [4 /*yield*/, fetch(serverUrl, options)];\n case 3:\n response = _a.sent();\n return [4 /*yield*/, response.text()];\n case 4:\n responseText = _a.sent();\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return [2 /*return*/, this.buildResponse(JSON.parse(responseText))];\n }\n catch (_b) {\n return [2 /*return*/, this.buildResponse({ code: response.status })];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n return FetchTransport;\n}(BaseTransport));\nexport { FetchTransport };\n//# sourceMappingURL=fetch.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { BaseTransport, getGlobalScope } from '@amplitude/analytics-core';\n/**\n * SendBeacon does not support custom headers (e.g. Content-Encoding: gzip),\n * so request body compression is not applied even when enableRequestBodyCompression is true.\n */\nvar SendBeaconTransport = /** @class */ (function (_super) {\n __extends(SendBeaconTransport, _super);\n function SendBeaconTransport() {\n return _super.call(this) || this;\n }\n SendBeaconTransport.prototype.send = function (serverUrl, payload, _enableRequestBodyCompression) {\n if (_enableRequestBodyCompression === void 0) { _enableRequestBodyCompression = false; }\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n var globalScope = getGlobalScope();\n /* istanbul ignore if */\n if (!(globalScope === null || globalScope === void 0 ? void 0 : globalScope.navigator.sendBeacon)) {\n throw new Error('SendBeaconTransport is not supported');\n }\n try {\n var data = JSON.stringify(payload);\n // SendBeacon cannot set Content-Encoding, so we always send uncompressed\n var success = globalScope.navigator.sendBeacon(serverUrl, data);\n if (success) {\n return resolve(_this.buildResponse({\n code: 200,\n events_ingested: payload.events.length,\n payload_size_bytes: data.length,\n server_upload_time: Date.now(),\n }));\n }\n return resolve(_this.buildResponse({ code: 500 }));\n }\n catch (e) {\n reject(e);\n }\n })];\n });\n });\n };\n return SendBeaconTransport;\n}(BaseTransport));\nexport { SendBeaconTransport };\n//# sourceMappingURL=send-beacon.js.map","import { __awaiter, __generator, __read } from \"tslib\";\nimport { getOldCookieName } from '@amplitude/analytics-core';\nexport var parseLegacyCookies = function (apiKey, cookieStorage, deleteLegacyCookies) {\n if (deleteLegacyCookies === void 0) { deleteLegacyCookies = true; }\n return __awaiter(void 0, void 0, void 0, function () {\n var cookieName, cookies, _a, deviceId, userId, optOut, sessionId, lastEventTime, lastEventId;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n cookieName = getOldCookieName(apiKey);\n return [4 /*yield*/, cookieStorage.getRaw(cookieName)];\n case 1:\n cookies = _b.sent();\n if (!cookies) {\n return [2 /*return*/, {\n optOut: false,\n }];\n }\n if (!deleteLegacyCookies) return [3 /*break*/, 3];\n return [4 /*yield*/, cookieStorage.remove(cookieName)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n _a = __read(cookies.split('.'), 6), deviceId = _a[0], userId = _a[1], optOut = _a[2], sessionId = _a[3], lastEventTime = _a[4], lastEventId = _a[5];\n return [2 /*return*/, {\n deviceId: deviceId,\n userId: decode(userId),\n sessionId: parseTime(sessionId),\n lastEventId: parseTime(lastEventId),\n lastEventTime: parseTime(lastEventTime),\n optOut: Boolean(optOut),\n }];\n }\n });\n });\n};\nexport var parseTime = function (num) {\n var integer = parseInt(num, 32);\n if (isNaN(integer)) {\n return undefined;\n }\n return integer;\n};\nexport var decode = function (value) {\n if (!atob || !escape || !value) {\n return undefined;\n }\n try {\n return decodeURIComponent(escape(atob(value)));\n }\n catch (_a) {\n return undefined;\n }\n};\n//# sourceMappingURL=index.js.map","export var DEFAULT_EVENT_PREFIX = '[Amplitude]';\nexport var DEFAULT_PAGE_VIEW_EVENT = \"\".concat(DEFAULT_EVENT_PREFIX, \" Page Viewed\");\nexport var DEFAULT_FORM_START_EVENT = \"\".concat(DEFAULT_EVENT_PREFIX, \" Form Started\");\nexport var DEFAULT_FORM_SUBMIT_EVENT = \"\".concat(DEFAULT_EVENT_PREFIX, \" Form Submitted\");\nexport var DEFAULT_FILE_DOWNLOAD_EVENT = \"\".concat(DEFAULT_EVENT_PREFIX, \" File Downloaded\");\nexport var DEFAULT_SESSION_START_EVENT = 'session_start';\nexport var DEFAULT_SESSION_END_EVENT = 'session_end';\nexport var FILE_EXTENSION = \"\".concat(DEFAULT_EVENT_PREFIX, \" File Extension\");\nexport var FILE_NAME = \"\".concat(DEFAULT_EVENT_PREFIX, \" File Name\");\nexport var LINK_ID = \"\".concat(DEFAULT_EVENT_PREFIX, \" Link ID\");\nexport var LINK_TEXT = \"\".concat(DEFAULT_EVENT_PREFIX, \" Link Text\");\nexport var LINK_URL = \"\".concat(DEFAULT_EVENT_PREFIX, \" Link URL\");\nexport var FORM_ID = \"\".concat(DEFAULT_EVENT_PREFIX, \" Form ID\");\nexport var FORM_NAME = \"\".concat(DEFAULT_EVENT_PREFIX, \" Form Name\");\nexport var FORM_DESTINATION = \"\".concat(DEFAULT_EVENT_PREFIX, \" Form Destination\");\nexport var DEFAULT_IDENTITY_STORAGE = 'cookie';\nexport var DEFAULT_SERVER_ZONE = 'US';\n//# sourceMappingURL=constants.js.map","import { __assign, __read, __rest } from \"tslib\";\nimport { createIdentifyEvent, Identify, BASE_CAMPAIGN, getGlobalScope, } from '@amplitude/analytics-core';\nimport { EXCLUDE_INTERNAL_REFERRERS_CONDITIONS } from '../types';\nvar domainWithoutSubdomain = function (domain) {\n var parts = domain.split('.');\n if (parts.length <= 2) {\n return domain;\n }\n return parts.slice(parts.length - 2, parts.length).join('.');\n};\n//Direct traffic mean no external referral, no UTMs, no click-ids, and no other customer identified marketing campaign url params.\nvar isDirectTraffic = function (current) {\n return Object.values(current).every(function (value) { return !value; });\n};\nvar isEmptyCampaign = function (campaign) {\n var campaignWithoutReferrer = __assign(__assign({}, campaign), { referring_domain: undefined, referrer: undefined });\n return Object.values(campaignWithoutReferrer).every(function (value) { return !value; });\n};\nexport var isNewCampaign = function (current, previous, options, logger, isNewSession, topLevelDomain) {\n if (isNewSession === void 0) { isNewSession = true; }\n var referrer = current.referrer, referring_domain = current.referring_domain, currentCampaign = __rest(current, [\"referrer\", \"referring_domain\"]);\n var _a = previous || {}, _previous_referrer = _a.referrer, prevReferringDomain = _a.referring_domain, previousCampaign = __rest(_a, [\"referrer\", \"referring_domain\"]);\n var excludeInternalReferrers = options.excludeInternalReferrers;\n if (excludeInternalReferrers) {\n var condition = getExcludeInternalReferrersCondition(excludeInternalReferrers, logger);\n if (!(condition instanceof TypeError) &&\n current.referring_domain &&\n isInternalReferrer(current.referring_domain, topLevelDomain)) {\n if (condition === 'always') {\n debugLogInternalReferrerExclude(condition, current.referring_domain, logger);\n return false;\n }\n else if (condition === 'ifEmptyCampaign' && isEmptyCampaign(current)) {\n debugLogInternalReferrerExclude(condition, current.referring_domain, logger);\n return false;\n }\n }\n }\n if (isExcludedReferrer(options.excludeReferrers, current.referring_domain)) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n logger.debug(\"This is not a new campaign because \".concat(current.referring_domain, \" is in the exclude referrer list.\"));\n return false;\n }\n //In the same session, direct traffic should not override or unset any persisting query params\n if (!isNewSession && isDirectTraffic(current) && previous) {\n logger.debug('This is not a new campaign because this is a direct traffic in the same session.');\n return false;\n }\n var hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);\n var hasNewDomain = domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');\n var result = !previous || hasNewCampaign || hasNewDomain;\n if (!result) {\n logger.debug(\"This is not a new campaign because it's the same as the previous one.\");\n }\n else {\n logger.debug(\"This is a new campaign. An $identify event will be sent.\");\n }\n return result;\n};\nexport var isExcludedReferrer = function (excludeReferrers, referringDomain) {\n if (excludeReferrers === void 0) { excludeReferrers = []; }\n if (referringDomain === void 0) { referringDomain = ''; }\n return excludeReferrers.some(function (value) {\n return value instanceof RegExp ? value.test(referringDomain) : value === referringDomain;\n });\n};\nexport var isSubdomainOf = function (subDomain, domain) {\n var cookieDomainWithLeadingDot = domain.startsWith('.') ? domain : \".\".concat(domain);\n var subDomainWithLeadingDot = subDomain.startsWith('.') ? subDomain : \".\".concat(subDomain);\n if (subDomainWithLeadingDot.endsWith(cookieDomainWithLeadingDot))\n return true;\n return false;\n};\nexport var createCampaignEvent = function (campaign, options) {\n var campaignParameters = __assign(__assign({}, BASE_CAMPAIGN), campaign);\n var identifyEvent = Object.entries(campaignParameters).reduce(function (identify, _a) {\n var _b;\n var _c = __read(_a, 2), key = _c[0], value = _c[1];\n identify.setOnce(\"initial_\".concat(key), (_b = value !== null && value !== void 0 ? value : options.initialEmptyValue) !== null && _b !== void 0 ? _b : 'EMPTY');\n if (value) {\n return identify.set(key, value);\n }\n return identify.unset(key);\n }, new Identify());\n return createIdentifyEvent(identifyEvent);\n};\nexport var getDefaultExcludedReferrers = function (cookieDomain) {\n var domain = cookieDomain;\n if (domain) {\n if (domain.startsWith('.')) {\n domain = domain.substring(1);\n }\n return [new RegExp(\"\".concat(domain.replace('.', '\\\\.'), \"$\"))];\n }\n return [];\n};\n/**\n * Parses the excludeInternalReferrers configuration to determine the condition on which to\n * exclude internal referrers for campaign attribution.\n *\n * If the config is invalid type, log and return a TypeError.\n *\n * (this does explicit type checking so don't have to rely on TS compiler to catch invalid types)\n *\n * @param excludeInternalReferrers - attribution.excludeInternalReferrers configuration\n * @param logger - logger instance to log error when TypeError\n * @returns The condition if the config is valid, TypeError if the config is invalid.\n */\nvar getExcludeInternalReferrersCondition = function (excludeInternalReferrers, logger) {\n if (excludeInternalReferrers === true) {\n return EXCLUDE_INTERNAL_REFERRERS_CONDITIONS.always;\n }\n if (typeof excludeInternalReferrers === 'object') {\n var condition = excludeInternalReferrers.condition;\n if (typeof condition === 'string' && Object.keys(EXCLUDE_INTERNAL_REFERRERS_CONDITIONS).includes(condition)) {\n return condition;\n }\n else if (typeof condition === 'undefined') {\n return EXCLUDE_INTERNAL_REFERRERS_CONDITIONS.always;\n }\n }\n var errorMessage = \"Invalid configuration provided for attribution.excludeInternalReferrers: \".concat(JSON.stringify(excludeInternalReferrers));\n logger.error(errorMessage);\n return new TypeError(errorMessage);\n};\n// helper function to log debug message when internal referrer is excluded\n// (added this to prevent code duplication and improve readability)\nfunction debugLogInternalReferrerExclude(condition, referringDomain, logger) {\n var baseMessage = \"This is not a new campaign because referring_domain=\".concat(referringDomain, \" is on the same domain as the current page and it is configured to exclude internal referrers\");\n if (condition === 'always') {\n logger.debug(baseMessage);\n }\n else if (condition === 'ifEmptyCampaign') {\n logger.debug(\"\".concat(baseMessage, \" with empty campaign parameters\"));\n }\n}\n// list of domains that are known ccTLDs that are commonly used\n// and are in the Public Suffix List (https://publicsuffix.org/)\nexport var KNOWN_2LDS = [\n 'ac.in',\n 'ac.jp',\n 'ac.kr',\n 'ac.th',\n 'ac.uk',\n 'ac.za',\n 'appspot.com',\n 'asn.au',\n 'azurewebsites.net',\n 'cloudfront.net',\n 'myshopify.com',\n 'blogspot.com',\n 'co.ca',\n 'co.in',\n 'co.jp',\n 'co.kr',\n 'co.nz',\n 'co.th',\n 'co.uk',\n 'co.za',\n 'com.ar',\n 'com.au',\n 'com.br',\n 'com.cn',\n 'com.hk',\n 'com.in',\n 'com.jp',\n 'com.kr',\n 'com.mx',\n 'com.pl',\n 'com.sg',\n 'com.tr',\n 'com.tw',\n 'ed.jp',\n 'edu.au',\n 'edu.br',\n 'edu.cn',\n 'edu.hk',\n 'edu.sg',\n 'edu.th',\n 'edu.tr',\n 'edu.tw',\n 'firebaseapp.com',\n 'fly.dev',\n 'gc.ca',\n 'geek.nz',\n 'github.io',\n 'gitlab.io',\n 'go.jp',\n 'go.kr',\n 'go.th',\n 'gob.ar',\n 'gob.mx',\n 'gov.au',\n 'gov.br',\n 'gov.cn',\n 'gov.hk',\n 'gov.in',\n 'gov.pl',\n 'gov.sg',\n 'gov.tr',\n 'gov.tw',\n 'gov.uk',\n 'gov.za',\n 'govt.nz',\n 'gr.jp',\n 'herokuapp.com',\n 'id.au',\n 'idv.hk',\n 'iwi.nz',\n 'lg.jp',\n 'ltd.uk',\n 'maori.nz',\n 'me.uk',\n 'mil.kr',\n 'ne.jp',\n 'ne.kr',\n 'net.au',\n 'net.br',\n 'net.cn',\n 'net.hk',\n 'net.in',\n 'net.nz',\n 'net.pl',\n 'net.sg',\n 'net.tr',\n 'net.tw',\n 'net.za',\n 'onrender.com',\n 'or.jp',\n 'or.kr',\n 'or.th',\n 'org.ar',\n 'org.au',\n 'org.br',\n 'org.cn',\n 'org.hk',\n 'org.in',\n 'org.mx',\n 'org.nz',\n 'org.pl',\n 'org.sg',\n 'org.tw',\n 'org.uk',\n 'org.za',\n 'pages.dev',\n 'pe.kr',\n 'plc.uk',\n 're.kr',\n 'res.in',\n 'sch.uk',\n 'vercel.app',\n 'netlify.app',\n 'workers.dev',\n];\nexport var getDomain = function (hostnameParam) {\n var _a, _b;\n /* istanbul ignore next */\n var hostname = hostnameParam || ((_b = (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.location) === null || _b === void 0 ? void 0 : _b.hostname);\n if (!hostname) {\n return '';\n }\n var parts = hostname.split('.');\n var tld = parts[parts.length - 1];\n var name = parts[parts.length - 2];\n if (KNOWN_2LDS.find(function (tld) { return hostname.endsWith(\".\".concat(tld)); })) {\n tld = parts[parts.length - 2] + '.' + parts[parts.length - 1];\n name = parts[parts.length - 3];\n }\n if (!name)\n return tld;\n return \"\".concat(name, \".\").concat(tld);\n};\nvar isInternalReferrer = function (referringDomain, topLevelDomain) {\n var globalScope = getGlobalScope();\n /* istanbul ignore if */\n if (!globalScope)\n return false;\n // if referring domain is subdomain of config.cookieDomain, return true\n var internalDomain = (topLevelDomain || '').trim() || getDomain(globalScope.location.hostname);\n return isSubdomainOf(referringDomain, internalDomain);\n};\n//# sourceMappingURL=helpers.js.map","import { __assign, __awaiter, __extends, __generator } from \"tslib\";\nimport { Config, Logger, LogLevel, MemoryStorage, UUID, CookieStorage, getCookieName, getQueryParams, isDomainEqual, decodeCookieValue, } from '@amplitude/analytics-core';\nimport { LocalStorage } from './storage/local-storage';\nimport { SessionStorage } from './storage/session-storage';\nimport { XHRTransport } from './transports/xhr';\nimport { FetchTransport } from './transports/fetch';\nimport { SendBeaconTransport } from './transports/send-beacon';\nimport { parseLegacyCookies } from './cookie-migration';\nimport { DEFAULT_IDENTITY_STORAGE, DEFAULT_SERVER_ZONE } from './constants';\nimport { VERSION } from './version';\nimport { getDomain, KNOWN_2LDS } from './attribution/helpers';\n// Exported for testing purposes only. Do not expose to public interface.\nvar BrowserConfig = /** @class */ (function (_super) {\n __extends(BrowserConfig, _super);\n function BrowserConfig(apiKey, appVersion, cookieStorage, cookieOptions, defaultTracking, autocapture, deviceId, flushIntervalMillis, flushMaxRetries, flushQueueSize, identityStorage, ingestionMetadata, instanceName, lastEventId, lastEventTime, loggerProvider, logLevel, minIdLength, offline, optOut, partnerId, plan, serverUrl, serverZone, sessionId, deferredSessionId, sessionTimeout, storageProvider, trackingOptions, transport, useBatch, fetchRemoteConfig, userId, pageCounter, debugLogsEnabled, networkTrackingOptions, identify, enableDiagnostics, diagnosticsSampleRate, diagnosticsClient, remoteConfig, topLevelDomain, enableRequestBodyCompression, _enableRequestBodyCompressionExperimental, customEnrichment) {\n if (cookieStorage === void 0) { cookieStorage = new MemoryStorage(); }\n if (cookieOptions === void 0) { cookieOptions = {\n domain: '',\n expiration: 365,\n sameSite: 'Lax',\n secure: false,\n upgrade: true,\n }; }\n if (flushIntervalMillis === void 0) { flushIntervalMillis = 1000; }\n if (flushMaxRetries === void 0) { flushMaxRetries = 5; }\n if (flushQueueSize === void 0) { flushQueueSize = 30; }\n if (identityStorage === void 0) { identityStorage = DEFAULT_IDENTITY_STORAGE; }\n if (loggerProvider === void 0) { loggerProvider = new Logger(); }\n if (logLevel === void 0) { logLevel = LogLevel.Warn; }\n if (offline === void 0) { offline = false; }\n if (optOut === void 0) { optOut = false; }\n if (serverUrl === void 0) { serverUrl = ''; }\n if (serverZone === void 0) { serverZone = DEFAULT_SERVER_ZONE; }\n if (sessionTimeout === void 0) { sessionTimeout = 30 * 60 * 1000; }\n if (storageProvider === void 0) { storageProvider = new LocalStorage({ loggerProvider: loggerProvider }); }\n if (trackingOptions === void 0) { trackingOptions = {\n ipAddress: true,\n language: true,\n platform: true,\n }; }\n if (transport === void 0) { transport = 'fetch'; }\n if (useBatch === void 0) { useBatch = false; }\n if (fetchRemoteConfig === void 0) { fetchRemoteConfig = true; }\n if (enableDiagnostics === void 0) { enableDiagnostics = true; }\n if (diagnosticsSampleRate === void 0) { diagnosticsSampleRate = 0; }\n if (enableRequestBodyCompression === void 0) { enableRequestBodyCompression = false; }\n if (_enableRequestBodyCompressionExperimental === void 0) { _enableRequestBodyCompressionExperimental = false; }\n var _this = this;\n var _a;\n _this = _super.call(this, { apiKey: apiKey, storageProvider: storageProvider, transportProvider: createTransport(transport) }) || this;\n _this.apiKey = apiKey;\n _this.appVersion = appVersion;\n _this.cookieOptions = cookieOptions;\n _this.defaultTracking = defaultTracking;\n _this.autocapture = autocapture;\n _this.flushIntervalMillis = flushIntervalMillis;\n _this.flushMaxRetries = flushMaxRetries;\n _this.flushQueueSize = flushQueueSize;\n _this.identityStorage = identityStorage;\n _this.ingestionMetadata = ingestionMetadata;\n _this.instanceName = instanceName;\n _this.loggerProvider = loggerProvider;\n _this.logLevel = logLevel;\n _this.minIdLength = minIdLength;\n _this.offline = offline;\n _this.partnerId = partnerId;\n _this.plan = plan;\n _this.serverUrl = serverUrl;\n _this.serverZone = serverZone;\n _this.sessionTimeout = sessionTimeout;\n _this.storageProvider = storageProvider;\n _this.trackingOptions = trackingOptions;\n _this.transport = transport;\n _this.useBatch = useBatch;\n _this.fetchRemoteConfig = fetchRemoteConfig;\n _this.networkTrackingOptions = networkTrackingOptions;\n _this.identify = identify;\n _this.enableDiagnostics = enableDiagnostics;\n _this.diagnosticsSampleRate = diagnosticsSampleRate;\n _this.diagnosticsClient = diagnosticsClient;\n _this.remoteConfig = remoteConfig;\n _this.topLevelDomain = topLevelDomain;\n _this.enableRequestBodyCompression = enableRequestBodyCompression;\n _this._enableRequestBodyCompressionExperimental = _enableRequestBodyCompressionExperimental;\n _this.customEnrichment = customEnrichment;\n _this.version = VERSION;\n _this._optOut = false;\n _this._cookieStorage = cookieStorage;\n _this.deviceId = deviceId;\n _this.lastEventId = lastEventId;\n _this.lastEventTime = lastEventTime;\n _this.optOut = optOut;\n _this.deferredSessionId = deferredSessionId;\n _this.sessionId = sessionId;\n _this.pageCounter = pageCounter;\n _this.userId = userId;\n _this.debugLogsEnabled = debugLogsEnabled;\n _this.loggerProvider.enable(debugLogsEnabled ? LogLevel.Debug : _this.logLevel);\n _this.networkTrackingOptions = networkTrackingOptions;\n _this.identify = identify;\n _this.enableDiagnostics = enableDiagnostics;\n _this.diagnosticsSampleRate = diagnosticsSampleRate;\n _this.diagnosticsClient = diagnosticsClient;\n // Note: The canonical logic for determining fetchRemoteConfig is in shouldFetchRemoteConfig().\n // This logic is duplicated here to maintain the BrowserConfig constructor contract and ensure\n // the config object has the correct fetchRemoteConfig value set on its properties.\n // The value passed to this constructor should already be computed via shouldFetchRemoteConfig().\n var _fetchRemoteConfig = (_a = remoteConfig === null || remoteConfig === void 0 ? void 0 : remoteConfig.fetchRemoteConfig) !== null && _a !== void 0 ? _a : fetchRemoteConfig;\n _this.remoteConfig = _this.remoteConfig || {};\n _this.remoteConfig.fetchRemoteConfig = _fetchRemoteConfig;\n _this.fetchRemoteConfig = _fetchRemoteConfig;\n _this.topLevelDomain = topLevelDomain || getDomain();\n return _this;\n }\n Object.defineProperty(BrowserConfig.prototype, \"cookieStorage\", {\n get: function () {\n return this._cookieStorage;\n },\n set: function (cookieStorage) {\n if (this._cookieStorage !== cookieStorage) {\n this._cookieStorage = cookieStorage;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"deviceId\", {\n get: function () {\n return this._deviceId;\n },\n set: function (deviceId) {\n if (this._deviceId !== deviceId) {\n this._deviceId = deviceId;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"userId\", {\n get: function () {\n return this._userId;\n },\n set: function (userId) {\n if (this._userId !== userId) {\n this._userId = userId;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"sessionId\", {\n get: function () {\n return this._sessionId;\n },\n set: function (sessionId) {\n if (this._sessionId !== sessionId) {\n this._sessionId = sessionId;\n // Clear deferredSessionId when sessionId is set to prevent stale values\n // from overriding legitimate sessionIds on subsequent page loads\n if (sessionId !== undefined && this._deferredSessionId !== undefined) {\n this._deferredSessionId = undefined;\n }\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"deferredSessionId\", {\n get: function () {\n return this._deferredSessionId;\n },\n set: function (deferredSessionId) {\n if (this._deferredSessionId !== deferredSessionId && deferredSessionId !== this.sessionId) {\n this._deferredSessionId = deferredSessionId;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"optOut\", {\n get: function () {\n return this._optOut;\n },\n set: function (optOut) {\n if (this._optOut !== optOut) {\n this._optOut = optOut;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"lastEventTime\", {\n get: function () {\n return this._lastEventTime;\n },\n set: function (lastEventTime) {\n if (this._lastEventTime !== lastEventTime) {\n this._lastEventTime = lastEventTime;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"lastEventId\", {\n get: function () {\n return this._lastEventId;\n },\n set: function (lastEventId) {\n if (this._lastEventId !== lastEventId) {\n this._lastEventId = lastEventId;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"pageCounter\", {\n get: function () {\n return this._pageCounter;\n },\n set: function (pageCounter) {\n if (this._pageCounter !== pageCounter) {\n this._pageCounter = pageCounter;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(BrowserConfig.prototype, \"debugLogsEnabled\", {\n set: function (debugLogsEnabled) {\n if (this._debugLogsEnabled !== debugLogsEnabled) {\n this._debugLogsEnabled = debugLogsEnabled;\n this.updateStorage();\n }\n },\n enumerable: false,\n configurable: true\n });\n BrowserConfig.prototype.updateStorage = function () {\n var cache = {\n deviceId: this._deviceId,\n userId: this._userId,\n sessionId: this._sessionId,\n deferredSessionId: this._deferredSessionId,\n optOut: this._optOut,\n lastEventTime: this._lastEventTime,\n lastEventId: this._lastEventId,\n pageCounter: this._pageCounter,\n debugLogsEnabled: this._debugLogsEnabled,\n cookieDomain: undefined,\n };\n if (this.cookieStorage instanceof CookieStorage) {\n cache.cookieDomain = this.cookieStorage.options.domain;\n }\n void this.cookieStorage.set(getCookieName(this.apiKey), cache);\n };\n return BrowserConfig;\n}(Config));\nexport { BrowserConfig };\nexport var useBrowserConfig = function (apiKey, options, amplitudeInstance, diagnosticsClient, earlyConfig) {\n if (options === void 0) { options = {}; }\n return __awaiter(void 0, void 0, void 0, function () {\n var identityStorage, defaultCookieDomain, cookieOptions, cookieConfig, cookieStorage, legacyCookies, previousCookies, queryParams, ampTimestamp, isWithinTimeLimit, deviceId, lastEventId, lastEventTime, optOut, sessionId, deferredSessionId, userId, trackingOptions, pageCounter, debugLogsEnabled, browserConfig;\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;\n return __generator(this, function (_6) {\n switch (_6.label) {\n case 0:\n identityStorage = options.identityStorage || DEFAULT_IDENTITY_STORAGE;\n defaultCookieDomain = '';\n if (!(identityStorage === DEFAULT_IDENTITY_STORAGE &&\n !((_a = options.cookieOptions) === null || _a === void 0 ? void 0 : _a.domain) &&\n ((_b = options.cookieOptions) === null || _b === void 0 ? void 0 : _b.domain) !== '')) return [3 /*break*/, 2];\n return [4 /*yield*/, getTopLevelDomain(undefined, diagnosticsClient)];\n case 1:\n defaultCookieDomain = _6.sent();\n _6.label = 2;\n case 2:\n cookieOptions = __assign({ domain: (_d = (_c = options.cookieOptions) === null || _c === void 0 ? void 0 : _c.domain) !== null && _d !== void 0 ? _d : defaultCookieDomain, expiration: 365, sameSite: 'Lax', secure: false, upgrade: true }, options.cookieOptions);\n cookieConfig = {\n // if more than one cookie with the same key exists,\n // look for the cookie that has the domain attribute set to cookieOptions.domain\n duplicateResolverFn: function (value) {\n var decodedValue = decodeCookieValue(value);\n if (!decodedValue) {\n return false;\n }\n var parsed = JSON.parse(decodedValue);\n return isDomainEqual(parsed.cookieDomain, cookieOptions.domain);\n },\n diagnosticsClient: diagnosticsClient,\n };\n cookieStorage = createCookieStorage(options.identityStorage, cookieOptions, cookieConfig);\n return [4 /*yield*/, parseLegacyCookies(apiKey, cookieStorage, (_f = (_e = options.cookieOptions) === null || _e === void 0 ? void 0 : _e.upgrade) !== null && _f !== void 0 ? _f : true)];\n case 3:\n legacyCookies = _6.sent();\n return [4 /*yield*/, cookieStorage.get(getCookieName(apiKey))];\n case 4:\n previousCookies = _6.sent();\n queryParams = getQueryParams();\n ampTimestamp = queryParams.ampTimestamp ? Number(queryParams.ampTimestamp) : undefined;\n isWithinTimeLimit = ampTimestamp ? Date.now() < ampTimestamp : true;\n deviceId = (_l = (_k = (_j = (_g = options.deviceId) !== null && _g !== void 0 ? _g : (isWithinTimeLimit ? (_h = queryParams.ampDeviceId) !== null && _h !== void 0 ? _h : queryParams.deviceId : undefined)) !== null && _j !== void 0 ? _j : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.deviceId) !== null && _k !== void 0 ? _k : legacyCookies.deviceId) !== null && _l !== void 0 ? _l : UUID();\n lastEventId = (_m = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.lastEventId) !== null && _m !== void 0 ? _m : legacyCookies.lastEventId;\n lastEventTime = (_o = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.lastEventTime) !== null && _o !== void 0 ? _o : legacyCookies.lastEventTime;\n optOut = (_q = (_p = options.optOut) !== null && _p !== void 0 ? _p : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.optOut) !== null && _q !== void 0 ? _q : legacyCookies.optOut;\n sessionId = (_r = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.sessionId) !== null && _r !== void 0 ? _r : legacyCookies.sessionId;\n deferredSessionId = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.deferredSessionId;\n userId = (_t = (_s = options.userId) !== null && _s !== void 0 ? _s : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.userId) !== null && _t !== void 0 ? _t : legacyCookies.userId;\n amplitudeInstance.previousSessionDeviceId = (_u = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.deviceId) !== null && _u !== void 0 ? _u : legacyCookies.deviceId;\n amplitudeInstance.previousSessionUserId = (_v = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.userId) !== null && _v !== void 0 ? _v : legacyCookies.userId;\n trackingOptions = {\n ipAddress: (_x = (_w = options.trackingOptions) === null || _w === void 0 ? void 0 : _w.ipAddress) !== null && _x !== void 0 ? _x : true,\n language: (_z = (_y = options.trackingOptions) === null || _y === void 0 ? void 0 : _y.language) !== null && _z !== void 0 ? _z : true,\n platform: (_1 = (_0 = options.trackingOptions) === null || _0 === void 0 ? void 0 : _0.platform) !== null && _1 !== void 0 ? _1 : true,\n };\n pageCounter = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.pageCounter;\n debugLogsEnabled = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.debugLogsEnabled;\n // Override default tracking options if autocapture is set\n if (options.autocapture !== undefined) {\n options.defaultTracking = options.autocapture;\n }\n browserConfig = new BrowserConfig(apiKey, options.appVersion, cookieStorage, cookieOptions, options.defaultTracking, options.autocapture, deviceId, options.flushIntervalMillis, options.flushMaxRetries, options.flushQueueSize, identityStorage, options.ingestionMetadata, options.instanceName, lastEventId, lastEventTime, \n // Use earlyConfig.loggerProvider to ensure consistent logger across DiagnosticsClient/RemoteConfigClient/BrowserConfig\n (_2 = earlyConfig === null || earlyConfig === void 0 ? void 0 : earlyConfig.loggerProvider) !== null && _2 !== void 0 ? _2 : options.loggerProvider, options.logLevel, options.minIdLength, options.offline, optOut, options.partnerId, options.plan, options.serverUrl, \n // Use earlyConfig.serverZone to ensure consistent serverZone\n (_3 = earlyConfig === null || earlyConfig === void 0 ? void 0 : earlyConfig.serverZone) !== null && _3 !== void 0 ? _3 : options.serverZone, sessionId, deferredSessionId, options.sessionTimeout, options.storageProvider, trackingOptions, options.transport, options.useBatch, options.fetchRemoteConfig, userId, pageCounter, debugLogsEnabled, options.networkTrackingOptions, options.identify, \n // Use earlyConfig values (already has remote config applied), otherwise fall back to options\n (_4 = earlyConfig === null || earlyConfig === void 0 ? void 0 : earlyConfig.enableDiagnostics) !== null && _4 !== void 0 ? _4 : options.enableDiagnostics, (_5 = earlyConfig === null || earlyConfig === void 0 ? void 0 : earlyConfig.diagnosticsSampleRate) !== null && _5 !== void 0 ? _5 : amplitudeInstance._diagnosticsSampleRate, diagnosticsClient, options.remoteConfig, defaultCookieDomain, options.enableRequestBodyCompression, amplitudeInstance._enableRequestBodyCompressionExperimentalValue, options.customEnrichment);\n return [4 /*yield*/, browserConfig.storageProvider.isEnabled()];\n case 5:\n if (!(_6.sent())) {\n browserConfig.loggerProvider.warn(\"Storage provider \".concat(browserConfig.storageProvider.constructor.name, \" is not enabled. Falling back to MemoryStorage.\"));\n browserConfig.storageProvider = new MemoryStorage();\n }\n return [2 /*return*/, browserConfig];\n }\n });\n });\n};\nexport var createCookieStorage = function (identityStorage, cookieOptions, cookieConfig) {\n if (identityStorage === void 0) { identityStorage = DEFAULT_IDENTITY_STORAGE; }\n if (cookieOptions === void 0) { cookieOptions = {}; }\n switch (identityStorage) {\n case 'localStorage':\n return new LocalStorage();\n case 'sessionStorage':\n return new SessionStorage();\n case 'none':\n return new MemoryStorage();\n case 'cookie':\n default:\n return new CookieStorage(__assign(__assign({}, cookieOptions), { expirationDays: cookieOptions.expiration }), cookieConfig);\n }\n};\n/**\n * Determines whether to fetch remote config based on options.\n * Extracted to allow early determination before useBrowserConfig is called.\n */\nexport var shouldFetchRemoteConfig = function (options) {\n var _a, _b;\n if (options === void 0) { options = {}; }\n if (((_a = options.remoteConfig) === null || _a === void 0 ? void 0 : _a.fetchRemoteConfig) === true) {\n // set to true if remoteConfig explicitly set to true\n return true;\n }\n else if (((_b = options.remoteConfig) === null || _b === void 0 ? void 0 : _b.fetchRemoteConfig) === false || options.fetchRemoteConfig === false) {\n // set to false if either are set to false explicitly\n return false;\n }\n else {\n // default to true if both undefined\n return true;\n }\n};\nexport var createTransport = function (transport) {\n var type = typeof transport === 'object' ? transport.type : transport;\n var headers = typeof transport === 'object' ? transport.headers : undefined;\n if (type === 'xhr') {\n return new XHRTransport(headers);\n }\n if (type === 'beacon') {\n // SendBeacon does not support custom headers\n return new SendBeaconTransport();\n }\n // Keep a browser-local fetch transport for gzip support.\n // TODO: Merge back to core FetchTransport after React Native supports gzip.\n return new FetchTransport(headers);\n};\nexport var getTopLevelDomain = function (url, diagnosticsClient) { return __awaiter(void 0, void 0, void 0, function () {\n var host, parts, levels, skipLevel, i, i, domain, result, e_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, new CookieStorage(undefined, { diagnosticsClient: diagnosticsClient }).isEnabled()];\n case 1:\n if (!(_a.sent()) ||\n (!url && (typeof location === 'undefined' || !location.hostname))) {\n return [2 /*return*/, ''];\n }\n host = url !== null && url !== void 0 ? url : location.hostname;\n parts = host.split('.');\n // if hostname has less than 2 parts, it's not a registrable domain\n // and the browser won't allow setting domain-scoped cookies for it so return empty string\n if (parts.length === 1) {\n return [2 /*return*/, ''];\n }\n levels = [];\n skipLevel = 1;\n // if the hostname ends with a TLD we know is in the Public Suffix List\n // then the last two parts are definitely not writable as a domain\n if (KNOWN_2LDS.find(function (tld) { return host.endsWith(\".\".concat(tld)); })) {\n skipLevel = 2;\n }\n for (i = parts.length - skipLevel - 1; i >= 0; --i) {\n levels.push(parts.slice(i).join('.'));\n }\n i = 0;\n _a.label = 2;\n case 2:\n if (!(i < levels.length)) return [3 /*break*/, 7];\n domain = levels[i];\n _a.label = 3;\n case 3:\n _a.trys.push([3, 5, , 6]);\n return [4 /*yield*/, CookieStorage.isDomainWritable(domain)];\n case 4:\n result = _a.sent();\n // if the transaction succeeded, the domain is valid\n if (result) {\n return [2 /*return*/, '.' + domain];\n }\n return [3 /*break*/, 6];\n case 5:\n e_1 = _a.sent();\n /* istanbul ignore if */\n if (diagnosticsClient) {\n diagnosticsClient.recordEvent('cookies.tld.failure', {\n reason: \"Unexpected exception checking domain is writable: \".concat(domain),\n error: e_1 instanceof Error ? e_1.message : String(e_1),\n });\n }\n return [3 /*break*/, 6];\n case 6:\n i++;\n return [3 /*break*/, 2];\n case 7:\n // if the transaction failed, the domain is invalid\n // record a diagnostic event\n if (diagnosticsClient) {\n diagnosticsClient.recordEvent('cookies.tld.failure', {\n reason: \"Could not determine TLD for host \".concat(host),\n });\n }\n // return an empty string to indicate that we couldn't determine the TLD\n // so fallback to host-only cookies (scoped to the current host)\n return [2 /*return*/, ''];\n }\n });\n}); };\n//# sourceMappingURL=config.js.map","export var omitUndefined = function (input) {\n var obj = {};\n for (var key in input) {\n var val = input[key];\n if (val) {\n obj[key] = val;\n }\n }\n return obj;\n};\n//# sourceMappingURL=utils.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { getPageTitle, replaceSensitiveString, IdentifyOperation, CampaignParser, getGlobalScope, BASE_CAMPAIGN, BrowserStorage, UUID, } from '@amplitude/analytics-core';\nimport { omitUndefined } from './utils';\nexport var defaultPageViewEvent = '[Amplitude] Page Viewed';\nexport var PAGE_VIEW_SESSION_STORAGE_KEY = 'AMP_PAGE_VIEW';\nexport var pageViewTrackingPlugin = function (options) {\n if (options === void 0) { options = {}; }\n var amplitude;\n var globalScope = getGlobalScope();\n var loggerProvider = undefined;\n var isTracking = false;\n var localConfig;\n var sessionStorage;\n var trackOn = options.trackOn, trackHistoryChanges = options.trackHistoryChanges, _a = options.eventType, eventType = _a === void 0 ? defaultPageViewEvent : _a;\n var getDecodeURI = function (locationStr) {\n var decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Malformed URI sequence: ', e);\n }\n return decodedLocationStr;\n };\n var createPageViewEvent = function (pageViewId) { return __awaiter(void 0, void 0, void 0, function () {\n var locationHREF, _a;\n var _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n _b = {\n event_type: eventType\n };\n _a = [{}];\n return [4 /*yield*/, getCampaignParams()];\n case 1: return [2 /*return*/, (_b.event_properties = __assign.apply(void 0, [__assign.apply(void 0, _a.concat([(_c.sent())])), { '[Amplitude] Page Domain': \n /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '', '[Amplitude] Page Location': locationHREF, '[Amplitude] Page Path': \n /* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '', '[Amplitude] Page Title': /* istanbul ignore next */ getPageTitle(replaceSensitiveString), '[Amplitude] Page URL': locationHREF.split('?')[0], '[Amplitude] Page View ID': pageViewId }]),\n _b)];\n }\n });\n }); };\n var shouldTrackOnPageLoad = function () { return typeof trackOn === 'undefined' || (typeof trackOn === 'function' && trackOn()); };\n /* istanbul ignore next */\n var previousURL = typeof location !== 'undefined' ? location.href : null;\n var trackHistoryPageView = function () { return __awaiter(void 0, void 0, void 0, function () {\n var newURL, shouldTrackPageView, pageViewId, _a, _b, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n newURL = location.href;\n shouldTrackPageView = shouldTrackHistoryPageView(trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n previousURL = newURL;\n if (!shouldTrackPageView) return [3 /*break*/, 4];\n pageViewId = void 0;\n if (sessionStorage) {\n pageViewId = UUID();\n void sessionStorage.set(PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId: pageViewId });\n }\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Tracking page view event');\n if (!(amplitude === null || amplitude === void 0)) return [3 /*break*/, 1];\n _a = void 0;\n return [3 /*break*/, 3];\n case 1:\n _c = (_b = amplitude).track;\n return [4 /*yield*/, createPageViewEvent(pageViewId)];\n case 2:\n _a = _c.apply(_b, [_d.sent()]);\n _d.label = 3;\n case 3:\n _a;\n _d.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n /* istanbul ignore next */\n var handlePageChange = function () {\n void trackHistoryPageView();\n };\n var plugin = {\n name: '@amplitude/plugin-page-view-tracking-browser',\n type: 'enrichment',\n setup: function (config, client) { return __awaiter(void 0, void 0, void 0, function () {\n var pageViewId, _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n amplitude = client;\n localConfig = config;\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n isTracking = true;\n if (globalScope) {\n // init session storage\n try {\n sessionStorage = new BrowserStorage(globalScope.sessionStorage);\n }\n catch (error) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.debug('sessionStorage is not available in this environment.');\n }\n globalScope.addEventListener('popstate', handlePageChange);\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: function (target, thisArg, _a) {\n var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n handlePageChange();\n }\n },\n });\n }\n if (!shouldTrackOnPageLoad()) return [3 /*break*/, 2];\n loggerProvider.log('Tracking page view event');\n pageViewId = void 0;\n if (sessionStorage) {\n pageViewId = UUID();\n void sessionStorage.set(PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId: pageViewId });\n }\n _b = (_a = amplitude).track;\n return [4 /*yield*/, createPageViewEvent(pageViewId)];\n case 1:\n _b.apply(_a, [_c.sent()]);\n _c.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); },\n execute: function (event) { return __awaiter(void 0, void 0, void 0, function () {\n var pageViewId, pageViewSession, pageViewEvent;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(trackOn === 'attribution' && isCampaignEvent(event))) return [3 /*break*/, 4];\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Enriching campaign event to page view event with campaign parameters');\n pageViewId = void 0;\n if (!sessionStorage) return [3 /*break*/, 2];\n return [4 /*yield*/, sessionStorage.get(PAGE_VIEW_SESSION_STORAGE_KEY)];\n case 1:\n pageViewSession = _a.sent();\n pageViewId = pageViewSession === null || pageViewSession === void 0 ? void 0 : pageViewSession.pageViewId;\n _a.label = 2;\n case 2: return [4 /*yield*/, createPageViewEvent(pageViewId)];\n case 3:\n pageViewEvent = _a.sent();\n event.event_type = pageViewEvent.event_type;\n event.event_properties = __assign(__assign({}, event.event_properties), pageViewEvent.event_properties);\n _a.label = 4;\n case 4:\n // Update the pageCounter for the page view event\n if (localConfig && event.event_type === eventType) {\n localConfig.pageCounter = !localConfig.pageCounter ? 1 : localConfig.pageCounter + 1;\n event.event_properties = __assign(__assign({}, event.event_properties), { '[Amplitude] Page Counter': localConfig.pageCounter });\n }\n return [2 /*return*/, event];\n }\n });\n }); },\n teardown: function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (globalScope) {\n globalScope.removeEventListener('popstate', handlePageChange);\n isTracking = false;\n }\n return [2 /*return*/];\n });\n }); },\n };\n return plugin;\n};\nvar getCampaignParams = function () { return __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = omitUndefined;\n return [4 /*yield*/, new CampaignParser().parse()];\n case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])];\n }\n}); }); };\nvar isCampaignEvent = function (event) {\n if (event.event_type === '$identify' && event.user_properties) {\n var properties = event.user_properties;\n var $set = properties[IdentifyOperation.SET] || {};\n var $unset = properties[IdentifyOperation.UNSET] || {};\n var userProperties_1 = __spreadArray(__spreadArray([], __read(Object.keys($set)), false), __read(Object.keys($unset)), false);\n return Object.keys(BASE_CAMPAIGN).every(function (value) { return userProperties_1.includes(value); });\n }\n return false;\n};\nexport var shouldTrackHistoryPageView = function (trackingOption, newURLStr, oldURLStr) {\n switch (trackingOption) {\n case 'pathOnly': {\n if (oldURLStr == '')\n return true;\n var newURL = new URL(newURLStr);\n var oldURL = new URL(oldURLStr);\n var newBaseStr = newURL.origin + newURL.pathname;\n var oldBaseStr = oldURL.origin + oldURL.pathname;\n return newBaseStr !== oldBaseStr;\n }\n default:\n return newURLStr !== oldURLStr;\n }\n};\n//# sourceMappingURL=page-view-tracking.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { DEFAULT_FORM_START_EVENT, DEFAULT_FORM_SUBMIT_EVENT, FORM_ID, FORM_NAME, FORM_DESTINATION, } from '../constants';\nimport { getGlobalScope, } from '@amplitude/analytics-core';\nimport { getFormInteractionsConfig } from '../default-tracking';\nexport var formInteractionTracking = function () {\n var observer;\n var eventListeners = [];\n var addEventListener = function (element, type, handler) {\n element.addEventListener(type, handler);\n eventListeners.push({\n element: element,\n type: type,\n handler: handler,\n });\n };\n var removeClickListeners = function () {\n eventListeners.forEach(function (_a) {\n var element = _a.element, type = _a.type, handler = _a.handler;\n /* istanbul ignore next */\n element === null || element === void 0 ? void 0 : element.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n var formInteractionsConfig;\n var name = '@amplitude/plugin-form-interaction-tracking-browser';\n var type = 'enrichment';\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var initializeFormTracking, window_1;\n return __generator(this, function (_a) {\n formInteractionsConfig = getFormInteractionsConfig(config);\n initializeFormTracking = function () {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn('Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.');\n return;\n }\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n var addedFormNodes = new WeakSet();\n var addFormInteractionListener = function (form) {\n if (addedFormNodes.has(form)) {\n return;\n }\n addedFormNodes.add(form);\n var hasFormChanged = false;\n addEventListener(form, 'change', function () {\n var _a;\n var formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, (_a = {},\n _a[FORM_ID] = stringOrUndefined(form.id),\n _a[FORM_NAME] = stringOrUndefined(form.name),\n _a[FORM_DESTINATION] = formDestination,\n _a));\n }\n hasFormChanged = true;\n });\n addEventListener(form, 'submit', function (event) {\n var _a, _b;\n var formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, (_a = {},\n _a[FORM_ID] = stringOrUndefined(form.id),\n _a[FORM_NAME] = stringOrUndefined(form.name),\n _a[FORM_DESTINATION] = formDestination,\n _a));\n }\n hasFormChanged = true;\n // Check if shouldTrackSubmit callback is provided and use it to determine whether to track form_submit\n if ((formInteractionsConfig === null || formInteractionsConfig === void 0 ? void 0 : formInteractionsConfig.shouldTrackSubmit) !== undefined) {\n if (typeof formInteractionsConfig.shouldTrackSubmit === 'function' &&\n typeof SubmitEvent !== 'undefined' &&\n event instanceof SubmitEvent) {\n try {\n var shouldTrack = formInteractionsConfig.shouldTrackSubmit(event);\n if (!shouldTrack) {\n return;\n }\n }\n catch (e) {\n config.loggerProvider.warn('shouldTrackSubmit callback threw an error, proceeding with tracking.');\n }\n }\n else {\n config.loggerProvider.warn('shouldTrackSubmit is ignored because it is not a function or event is not a SubmitEvent.');\n }\n }\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, (_b = {},\n _b[FORM_ID] = stringOrUndefined(form.id),\n _b[FORM_NAME] = stringOrUndefined(form.name),\n _b[FORM_DESTINATION] = formDestination,\n _b));\n hasFormChanged = false;\n });\n };\n // Adds listener to existing anchor tags\n var forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('form')).map(addFormInteractionListener);\n }\n });\n });\n });\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n // If the document is already loaded, initialize immediately.\n if (document.readyState === 'complete') {\n initializeFormTracking();\n }\n else {\n window_1 = getGlobalScope();\n /* istanbul ignore else*/\n if (window_1) {\n window_1.addEventListener('load', initializeFormTracking);\n }\n else {\n config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');\n }\n }\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {\n return [2 /*return*/, event];\n }); }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n observer === null || observer === void 0 ? void 0 : observer.disconnect();\n removeClickListeners();\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\nexport var stringOrUndefined = function (name) {\n /* istanbul ignore if */\n if (typeof name !== 'string') {\n // We found instances where the value of `name` is an Element and not a string.\n // Elements may have circular references and would throw an error when passed to `JSON.stringify(...)`.\n // If a non-string value is seen, assume there is no value.\n return undefined;\n }\n return name;\n};\n// Extracts the form action attribute, and normalizes it to a valid URL to preserve the previous behavior of accessing the action property directly.\nexport var extractFormAction = function (form) {\n var formDestination = form.getAttribute('action');\n try {\n // eslint-disable-next-line no-restricted-globals\n formDestination = new URL(encodeURI(formDestination !== null && formDestination !== void 0 ? formDestination : ''), window.location.href).href;\n }\n catch (_a) {\n //\n }\n return formDestination;\n};\n//# sourceMappingURL=form-interaction-tracking.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { DEFAULT_FILE_DOWNLOAD_EVENT, FILE_EXTENSION, FILE_NAME, LINK_ID, LINK_TEXT, LINK_URL } from '../constants';\nimport { getGlobalScope } from '@amplitude/analytics-core';\nexport var fileDownloadTracking = function () {\n var observer;\n var eventListeners = [];\n var addEventListener = function (element, type, handler) {\n element.addEventListener(type, handler);\n eventListeners.push({\n element: element,\n type: type,\n handler: handler,\n });\n };\n var removeClickListeners = function () {\n eventListeners.forEach(function (_a) {\n var element = _a.element, type = _a.type, handler = _a.handler;\n /* istanbul ignore next */\n element === null || element === void 0 ? void 0 : element.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n var name = '@amplitude/plugin-file-download-tracking-browser';\n var type = 'enrichment';\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var initializeFileDownloadTracking, window_1;\n return __generator(this, function (_a) {\n initializeFileDownloadTracking = function () {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn('File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.');\n return;\n }\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n var addFileDownloadListener = function (a) {\n var url;\n try {\n // eslint-disable-next-line no-restricted-globals\n url = new URL(a.href, window.location.href);\n }\n catch (_a) {\n /* istanbul ignore next */\n return;\n }\n var result = ext.exec(url.href);\n var fileExtension = result === null || result === void 0 ? void 0 : result[1];\n if (fileExtension) {\n addEventListener(a, 'click', function () {\n var _a;\n if (fileExtension) {\n amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, (_a = {},\n _a[FILE_EXTENSION] = fileExtension,\n _a[FILE_NAME] = url.pathname,\n _a[LINK_ID] = a.id,\n _a[LINK_TEXT] = a.text,\n _a[LINK_URL] = a.href,\n _a));\n }\n });\n }\n };\n var ext = /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)(\\?.+)?$/;\n // Adds listener to existing anchor tags\n var links = Array.from(document.getElementsByTagName('a'));\n links.forEach(addFileDownloadListener);\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n if (node.nodeName === 'A') {\n addFileDownloadListener(node);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('a')).map(addFileDownloadListener);\n }\n });\n });\n });\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n // If the document is already loaded, initialize immediately.\n /* istanbul ignore else*/\n if (document.readyState === 'complete') {\n initializeFileDownloadTracking();\n }\n else {\n window_1 = getGlobalScope();\n /* istanbul ignore else*/\n if (window_1) {\n window_1.addEventListener('load', initializeFileDownloadTracking);\n }\n else {\n config.loggerProvider.debug('File download tracking is not installed because global is undefined.');\n }\n }\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {\n return [2 /*return*/, event];\n }); }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n observer === null || observer === void 0 ? void 0 : observer.disconnect();\n removeClickListeners();\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=file-download-tracking.js.map","var notified = false;\nexport var detNotify = function (config) {\n if (notified || config.defaultTracking !== undefined) {\n return;\n }\n var message = \"`options.defaultTracking` is set to undefined. This implicitly configures your Amplitude instance to track Page Views, Sessions, File Downloads, and Form Interactions. You can suppress this warning by explicitly setting a value to `options.defaultTracking`. The value must either be a boolean, to enable and disable all default events, or an object, for advanced configuration. For example:\\n\\namplitude.init(<YOUR_API_KEY>, {\\n defaultTracking: true,\\n});\\n\\nVisit https://www.docs.developers.amplitude.com/data/sdks/browser-2/#tracking-default-events for more details.\";\n config.loggerProvider.warn(message);\n notified = true;\n};\n/**\n * @private\n * This function is meant for testing purposes only\n */\nexport var resetNotify = function () {\n notified = false;\n};\n//# sourceMappingURL=det-notification.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { getGlobalScope } from '@amplitude/analytics-core';\nexport var networkConnectivityCheckerPlugin = function () {\n var name = '@amplitude/plugin-network-checker-browser';\n var type = 'before';\n var globalScope = getGlobalScope();\n var eventListeners = [];\n var addNetworkListener = function (type, handler) {\n /* istanbul ignore next */\n if (globalScope === null || globalScope === void 0 ? void 0 : globalScope.addEventListener) {\n globalScope === null || globalScope === void 0 ? void 0 : globalScope.addEventListener(type, handler);\n eventListeners.push({\n type: type,\n handler: handler,\n });\n }\n };\n var removeNetworkListeners = function () {\n eventListeners.forEach(function (_a) {\n var type = _a.type, handler = _a.handler;\n /* istanbul ignore next */\n globalScope === null || globalScope === void 0 ? void 0 : globalScope.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (typeof navigator === 'undefined') {\n config.loggerProvider.debug('Network connectivity checker plugin is disabled because navigator is not available.');\n config.offline = false;\n return [2 /*return*/];\n }\n config.offline = !navigator.onLine;\n addNetworkListener('online', function () {\n config.loggerProvider.debug('Network connectivity changed to online.');\n config.offline = false;\n // Flush immediately will cause ERR_NETWORK_CHANGED\n setTimeout(function () {\n amplitude.flush();\n }, config.flushIntervalMillis);\n });\n addNetworkListener('offline', function () {\n config.loggerProvider.debug('Network connectivity changed to offline.');\n config.offline = true;\n });\n return [2 /*return*/];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n removeNetworkListeners();\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=network-connectivity-checker.js.map","import { __assign, __read, __spreadArray, __values } from \"tslib\";\nimport { SAFE_HEADERS, } from '@amplitude/analytics-core';\n/**\n * Performs a deep transformation of a remote config object so that\n * it matches the expected schema of the local config.\n *\n * Specifically, it normalizes nested `enabled` flags into concise union types.\n *\n * ### Transformation Rules:\n * - If an object has `enabled: true`, it is replaced by the same object without the `enabled` field.\n * - If it has only `enabled: true`, it is replaced with `true`.\n * - If it has `enabled: false`, it is replaced with `false` regardless of other fields.\n *\n * ### Examples:\n * Input: { prop: { enabled: true, hello: 'world' }}\n * Output: { prop: { hello: 'world' } }\n *\n * Input: { prop: { enabled: true }}\n * Output: { prop: true }\n *\n * Input: { prop: { enabled: false, hello: 'world' }}\n * Output: { prop: false }\n *\n * Input: { prop: { hello: 'world' }}\n * Output: { prop: { hello: 'world' } } // No change\n *\n * @param config Remote config object to be transformed\n * @returns Transformed config object compatible with local schema\n */\nexport function translateRemoteConfigToLocal(config) {\n var e_1, _a, e_2, _b, e_3, _c;\n var _d, _e, _f, _g, _h, _j;\n // Disabling type checking rules because remote config comes from a remote source\n // and this function needs to handle any unexpected values\n /* eslint-disable @typescript-eslint/no-unsafe-member-access,\n @typescript-eslint/no-unsafe-assignment,\n @typescript-eslint/no-unsafe-argument\n */\n if (typeof config !== 'object' || config === null) {\n return;\n }\n // translations are not applied on array properties\n if (Array.isArray(config)) {\n return;\n }\n var propertyNames = Object.keys(config);\n try {\n for (var propertyNames_1 = __values(propertyNames), propertyNames_1_1 = propertyNames_1.next(); !propertyNames_1_1.done; propertyNames_1_1 = propertyNames_1.next()) {\n var propertyName = propertyNames_1_1.value;\n try {\n var value = config[propertyName];\n // transform objects with { enabled } property to boolean | object\n if (typeof (value === null || value === void 0 ? void 0 : value.enabled) === 'boolean') {\n if (value.enabled) {\n // if enabled is true, set the value to the rest of the object\n // or true if the object has no other properties\n delete value.enabled;\n if (Object.keys(value).length === 0) {\n config[propertyName] = true;\n }\n }\n else {\n // If enabled is false, set the value to false\n config[propertyName] = false;\n }\n }\n // recursively translate properties of the value\n translateRemoteConfigToLocal(value);\n }\n catch (e) {\n // a failure here means that an accessor threw an error\n // so don't translate it\n // TODO(diagnostics): add a diagnostic event for this\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (propertyNames_1_1 && !propertyNames_1_1.done && (_a = propertyNames_1.return)) _a.call(propertyNames_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // translate remote responseHeaders and requestHeaders to local responseHeaders and requestHeaders\n try {\n if ((_f = (_e = (_d = config.autocapture) === null || _d === void 0 ? void 0 : _d.networkTracking) === null || _e === void 0 ? void 0 : _e.captureRules) === null || _f === void 0 ? void 0 : _f.length) {\n try {\n for (var _k = __values(config.autocapture.networkTracking.captureRules), _l = _k.next(); !_l.done; _l = _k.next()) {\n var rule = _l.value;\n try {\n for (var _m = (e_3 = void 0, __values(['responseHeaders', 'requestHeaders'])), _o = _m.next(); !_o.done; _o = _m.next()) {\n var header = _o.value;\n var _p = (_g = rule[header]) !== null && _g !== void 0 ? _g : {}, captureSafeHeaders = _p.captureSafeHeaders, allowlist = _p.allowlist;\n if (!captureSafeHeaders && !allowlist) {\n continue;\n }\n // if allowlist is not an array, remote config contract is violated, remove it\n if (allowlist !== undefined && !Array.isArray(allowlist)) {\n delete rule[header];\n continue;\n }\n rule[header] = __spreadArray(__spreadArray([], __read((captureSafeHeaders ? SAFE_HEADERS : [])), false), __read((allowlist !== null && allowlist !== void 0 ? allowlist : [])), false);\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_o && !_o.done && (_c = _m.return)) _c.call(_m);\n }\n finally { if (e_3) throw e_3.error; }\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_b = _k.return)) _b.call(_k);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n }\n catch (e) {\n /* istanbul ignore next */\n // surprise exception, so don't translate it\n }\n // translate frustrationInteractions pluralization\n var frustrationInteractions = (_h = config.autocapture) === null || _h === void 0 ? void 0 : _h.frustrationInteractions;\n if (frustrationInteractions) {\n if (frustrationInteractions.rageClick) {\n frustrationInteractions.rageClicks = frustrationInteractions.rageClick;\n delete frustrationInteractions.rageClick;\n }\n if (frustrationInteractions.deadClick) {\n frustrationInteractions.deadClicks = frustrationInteractions.deadClick;\n delete frustrationInteractions.deadClick;\n }\n }\n // normalize viewportContentUpdated inside elementInteractions\n try {\n var elementInteractions = (_j = config.autocapture) === null || _j === void 0 ? void 0 : _j.elementInteractions;\n if (elementInteractions && typeof elementInteractions === 'object') {\n // { enabled: true } (no other fields) collapses to `true`; convert back to {} for the SDK.\n if (elementInteractions.viewportContentUpdated === true) {\n elementInteractions.viewportContentUpdated = {};\n }\n // { enabled: false, ... } collapses to `false`; convert back to { enabled: false } for the SDK.\n if (elementInteractions.viewportContentUpdated === false) {\n elementInteractions.viewportContentUpdated = { enabled: false };\n }\n // Migrate deprecated top-level exposureDuration to viewportContentUpdated.exposureDuration\n if (elementInteractions.exposureDuration !== undefined) {\n var viewportContentUpdated = elementInteractions.viewportContentUpdated;\n if (viewportContentUpdated === undefined) {\n elementInteractions.viewportContentUpdated = { exposureDuration: elementInteractions.exposureDuration };\n }\n else if (typeof viewportContentUpdated === 'object' &&\n viewportContentUpdated.exposureDuration === undefined &&\n viewportContentUpdated.enabled !== false) {\n viewportContentUpdated.exposureDuration = elementInteractions.exposureDuration;\n }\n delete elementInteractions.exposureDuration;\n }\n }\n }\n catch (e) {\n /* istanbul ignore next */\n // surprise exception, so don't translate it\n }\n}\nfunction mergeUrls(urlsExact, urlsRegex, browserConfig) {\n var e_4, _a;\n // Convert string patterns to RegExp objects, warn on invalid patterns and skip them\n var regexList = [];\n try {\n for (var _b = __values(urlsRegex !== null && urlsRegex !== void 0 ? urlsRegex : []), _c = _b.next(); !_c.done; _c = _b.next()) {\n var pattern = _c.value;\n try {\n regexList.push(new RegExp(pattern));\n }\n catch (regexError) {\n browserConfig.loggerProvider.warn(\"Invalid regex pattern: \".concat(pattern), regexError);\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_4) throw e_4.error; }\n }\n return urlsExact.concat(regexList);\n}\n/**\n * Updates the browser config in place by applying remote configuration settings.\n * Primarily merges autocapture settings from the remote config into the browser config.\n *\n * @param remoteConfig - The remote configuration to apply, or null if none available\n * @param browserConfig - The browser config object to update (modified in place)\n */\nexport function updateBrowserConfigWithRemoteConfig(remoteConfig, browserConfig) {\n var e_5, _a;\n var _b, _c, _d, _e, _f;\n if (!remoteConfig) {\n return;\n }\n // translate remote config to local compatible format\n translateRemoteConfigToLocal(remoteConfig);\n try {\n browserConfig.loggerProvider.debug('Update browser config with remote configuration:', JSON.stringify(remoteConfig));\n // type cast error will be thrown if remoteConfig is not a valid RemoteConfigBrowserSDK\n // and it will be caught by the try-catch block\n var typedRemoteConfig = remoteConfig;\n // merge remoteConfig.autocapture and browserConfig.autocapture\n // if a field is in remoteConfig.autocapture, use that value\n // if a field is not in remoteConfig.autocapture, use the value from browserConfig.autocapture\n if (typedRemoteConfig && 'autocapture' in typedRemoteConfig) {\n if (typeof typedRemoteConfig.autocapture === 'boolean') {\n browserConfig.autocapture = typedRemoteConfig.autocapture;\n }\n if (typeof typedRemoteConfig.autocapture === 'object' && typedRemoteConfig.autocapture !== null) {\n var transformedAutocaptureRemoteConfig = __assign({}, typedRemoteConfig.autocapture);\n if (browserConfig.autocapture === undefined) {\n browserConfig.autocapture = typedRemoteConfig.autocapture;\n }\n // Handle Element Interactions config initialization\n if (typeof typedRemoteConfig.autocapture.elementInteractions === 'object' &&\n typedRemoteConfig.autocapture.elementInteractions !== null &&\n ((_b = typedRemoteConfig.autocapture.elementInteractions.pageUrlAllowlistRegex) === null || _b === void 0 ? void 0 : _b.length)) {\n transformedAutocaptureRemoteConfig.elementInteractions = __assign({}, typedRemoteConfig.autocapture.elementInteractions);\n var transformedRcElementInteractions = transformedAutocaptureRemoteConfig.elementInteractions;\n // combine exact allow list and regex allow list into just 'pageUrlAllowlist'\n var exactAllowList = (_c = transformedRcElementInteractions.pageUrlAllowlist) !== null && _c !== void 0 ? _c : [];\n var urlsRegex = typedRemoteConfig.autocapture.elementInteractions.pageUrlAllowlistRegex;\n transformedRcElementInteractions.pageUrlAllowlist = mergeUrls(exactAllowList, urlsRegex, browserConfig);\n // clean up the regex allow list\n delete transformedRcElementInteractions.pageUrlAllowlistRegex;\n }\n // Handle Network Tracking config initialization\n if (typeof typedRemoteConfig.autocapture.networkTracking === 'object' &&\n typedRemoteConfig.autocapture.networkTracking !== null &&\n ((_d = typedRemoteConfig.autocapture.networkTracking.captureRules) === null || _d === void 0 ? void 0 : _d.length)) {\n transformedAutocaptureRemoteConfig.networkTracking = __assign({}, typedRemoteConfig.autocapture.networkTracking);\n var transformedRcNetworkTracking = transformedAutocaptureRemoteConfig.networkTracking;\n /* istanbul ignore next */\n var captureRules = (_e = transformedRcNetworkTracking.captureRules) !== null && _e !== void 0 ? _e : [];\n try {\n for (var captureRules_1 = __values(captureRules), captureRules_1_1 = captureRules_1.next(); !captureRules_1_1.done; captureRules_1_1 = captureRules_1.next()) {\n var rule = captureRules_1_1.value;\n rule.urls = mergeUrls((_f = rule.urls) !== null && _f !== void 0 ? _f : [], rule.urlsRegex, browserConfig);\n delete rule.urlsRegex;\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (captureRules_1_1 && !captureRules_1_1.done && (_a = captureRules_1.return)) _a.call(captureRules_1);\n }\n finally { if (e_5) throw e_5.error; }\n }\n }\n if (typeof browserConfig.autocapture === 'boolean') {\n browserConfig.autocapture = __assign({ attribution: browserConfig.autocapture, fileDownloads: browserConfig.autocapture, formInteractions: browserConfig.autocapture, pageViews: browserConfig.autocapture, sessions: browserConfig.autocapture, elementInteractions: browserConfig.autocapture, webVitals: browserConfig.autocapture, frustrationInteractions: browserConfig.autocapture }, transformedAutocaptureRemoteConfig);\n }\n if (typeof browserConfig.autocapture === 'object') {\n browserConfig.autocapture = __assign(__assign({}, browserConfig.autocapture), transformedAutocaptureRemoteConfig);\n }\n }\n // Override default tracking options if autocapture is updated by remote config\n browserConfig.defaultTracking = browserConfig.autocapture;\n }\n if ('customEnrichment' in typedRemoteConfig && typedRemoteConfig.customEnrichment !== null) {\n // Respect a locally-explicit false: if the user disabled custom enrichment at init time,\n // remote config must not re-enable it.\n if (browserConfig.customEnrichment !== false) {\n browserConfig.customEnrichment = typedRemoteConfig.customEnrichment;\n }\n }\n browserConfig.loggerProvider.debug('Browser config after remote config update:', JSON.stringify(browserConfig));\n }\n catch (e) {\n browserConfig.loggerProvider.error('Failed to apply remote configuration because of error: ', e);\n }\n}\n//# sourceMappingURL=joined-config.js.map","export var VERSION = '1.25.2';\n//# sourceMappingURL=version.js.map","export var PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';\nexport var FRUSTRATION_PLUGIN_NAME = '@amplitude/plugin-frustration-browser';\nexport var AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';\nexport var AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = '[Amplitude] Dead Click';\nexport var AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = '[Amplitude] Rage Click';\nexport var AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = '[Amplitude] Error Click';\nexport var AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';\nexport var AMPLITUDE_PAGE_SCROLLED_EVENT = '[Amplitude] Page Scrolled';\nexport var AMPLITUDE_THRASHED_CURSOR_EVENT = '[Amplitude] Thrashed Cursor';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ID = '[Amplitude] Element ID';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = '[Amplitude] Element Class';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_TAG = '[Amplitude] Element Tag';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = '[Amplitude] Element Text';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = '[Amplitude] Element Hierarchy';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_HREF = '[Amplitude] Element Href';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = '[Amplitude] Element Position Left';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = '[Amplitude] Element Position Top';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = '[Amplitude] Element Aria Label';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = '[Amplitude] Element Attributes';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_PATH = '[Amplitude] Element Path';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = '[Amplitude] Element Parent Label';\nexport var AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL';\nexport var AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title';\nexport var AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = '[Amplitude] Viewport Height';\nexport var AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = '[Amplitude] Viewport Width';\nexport var AMPLITUDE_EVENT_PROP_MAX_PAGE_X = '[Amplitude] Max Page X';\nexport var AMPLITUDE_EVENT_PROP_MAX_PAGE_Y = '[Amplitude] Max Page Y';\nexport var AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID = '[Amplitude] Page View ID';\n// Origin constants are now shared via analytics-core; re-export for backwards compatibility\nexport { AMPLITUDE_ORIGIN, AMPLITUDE_ORIGIN_EU, AMPLITUDE_ORIGIN_STAGING, AMPLITUDE_ORIGINS_MAP, AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL, } from '@amplitude/analytics-core';\nexport var AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = 'https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz';\n// This is the class name used by the visual tagging selector to highlight the selected element.\n// Should not use this class in the selector.\nexport var AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = 'amp-visual-tagging-selector-highlight';\n// Data attribute for specifying which attributes should be redacted from autocapture\nexport var DATA_AMP_MASK_ATTRIBUTES = 'data-amp-mask-attributes';\nexport var MAX_MASK_TEXT_PATTERNS = 25;\nexport var MAX_ATTRIBUTE_LENGTH = 128;\n// The key for the page view object in sessionStorage\nexport var PAGE_VIEW_SESSION_STORAGE_KEY = 'AMP_PAGE_VIEW';\nexport var MAX_ELEMENT_EXPOSED_STR_LENGTH = 18000;\n//# sourceMappingURL=constants.js.map","import { __read } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { isUrlMatchAllowlist, getGlobalScope } from '@amplitude/analytics-core';\nimport * as constants from './constants';\nvar SENSITIVE_TAGS = ['input', 'select', 'textarea'];\nexport var isElementPointerCursor = function (element, actionType) {\n var _a;\n /* istanbul ignore next */\n var computedStyle = (_a = window === null || window === void 0 ? void 0 : window.getComputedStyle) === null || _a === void 0 ? void 0 : _a.call(window, element);\n /* istanbul ignore next */\n return (computedStyle === null || computedStyle === void 0 ? void 0 : computedStyle.getPropertyValue('cursor')) === 'pointer' && actionType === 'click';\n};\nexport var isUrlAllowed = function (autocaptureOptions) {\n var pageUrlAllowlist = autocaptureOptions.pageUrlAllowlist, pageUrlExcludelist = autocaptureOptions.pageUrlExcludelist;\n // check if the URL is in the excludelist\n if (pageUrlExcludelist &&\n pageUrlExcludelist.length > 0 &&\n isUrlMatchAllowlist(window.location.href, pageUrlExcludelist)) {\n return false;\n }\n // check if the URL is in the allow list\n if (!isUrlMatchAllowlist(window.location.href, pageUrlAllowlist)) {\n return false;\n }\n return true;\n};\nexport var createShouldTrackEvent = function (autocaptureOptions, allowlist, // this can be any type of css selector allow list\nisAlwaysCaptureCursorPointer) {\n if (isAlwaysCaptureCursorPointer === void 0) { isAlwaysCaptureCursorPointer = false; }\n return function (actionType, element) {\n var _a, _b;\n var shouldTrackEventResolver = autocaptureOptions.shouldTrackEventResolver;\n /* istanbul ignore next */\n var tag = (_b = (_a = element === null || element === void 0 ? void 0 : element.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase) === null || _b === void 0 ? void 0 : _b.call(_a);\n // window, document, and Text nodes have no tag\n if (!tag) {\n return false;\n }\n if (shouldTrackEventResolver) {\n return shouldTrackEventResolver(actionType, element);\n }\n if (!isUrlAllowed(autocaptureOptions)) {\n return false;\n }\n /* istanbul ignore next */\n var elementType = String(element === null || element === void 0 ? void 0 : element.getAttribute('type')) || '';\n if (typeof elementType === 'string') {\n switch (elementType.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n var isCursorPointer = isElementPointerCursor(element, actionType);\n if (isAlwaysCaptureCursorPointer && isCursorPointer) {\n return true;\n }\n /* istanbul ignore if */\n if (allowlist) {\n var hasMatchAnyAllowedSelector = allowlist.some(function (selector) { var _a; return !!((_a = element === null || element === void 0 ? void 0 : element.matches) === null || _a === void 0 ? void 0 : _a.call(element, selector)); });\n if (!hasMatchAnyAllowedSelector) {\n return false;\n }\n }\n switch (tag) {\n case 'input':\n case 'select':\n case 'textarea':\n return actionType === 'change' || actionType === 'click';\n default: {\n /* istanbul ignore next */\n /* istanbul ignore next */\n if (isCursorPointer) {\n return true;\n }\n return actionType === 'click';\n }\n }\n };\n};\nexport var isTextNode = function (node) {\n return !!node && node.nodeType === 3;\n};\nexport var isNonSensitiveElement = function (element) {\n var _a, _b, _c;\n /* istanbul ignore next */\n var tag = (_b = (_a = element === null || element === void 0 ? void 0 : element.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase) === null || _b === void 0 ? void 0 : _b.call(_a);\n var isContentEditable = element instanceof HTMLElement ? ((_c = element.getAttribute('contenteditable')) === null || _c === void 0 ? void 0 : _c.toLowerCase()) === 'true' : false;\n return !SENSITIVE_TAGS.includes(tag) && !isContentEditable;\n};\n/**\n * Collects redacted attribute names from element and ancestor elements with data-amp-mask-attributes\n * The 'id' and 'class' attributes cannot be redacted as they're critical for element identification\n * @param element - The target element to check for redaction attributes\n * @returns Set of attribute names that should be redacted\n */\n/**\n * Parses a comma-separated string of attribute names and filters out protected attributes\n * @param attributeString - Comma-separated string of attribute names\n * @returns Array of valid attribute names, excluding 'id' and 'class'\n */\nexport var parseAttributesToMask = function (attributeString) {\n return attributeString\n ? attributeString\n .split(',')\n .map(function (attr) { return attr.trim(); })\n .filter(function (attr) { return attr.length > 0 && attr !== 'id' && attr !== 'class'; }) // Prevent 'id' and 'class' from being redacted as they're critical for element identification\n : [];\n};\nexport var extractPrefixedAttributes = function (attrs, prefix) {\n return Object.entries(attrs).reduce(function (attributes, _a) {\n var _b = __read(_a, 2), attributeName = _b[0], attributeValue = _b[1];\n if (attributeName.startsWith(prefix)) {\n var attributeKey = attributeName.replace(prefix, '');\n if (attributeKey) {\n attributes[attributeKey] = attributeValue || '';\n }\n }\n return attributes;\n }, {});\n};\nexport var isEmpty = function (value) {\n return (value === undefined ||\n value === null ||\n (typeof value === 'object' && Object.keys(value).length === 0) ||\n (typeof value === 'string' && value.trim().length === 0));\n};\nexport var removeEmptyProperties = function (properties) {\n return Object.keys(properties).reduce(function (filteredProperties, key) {\n var value = properties[key];\n if (!isEmpty(value)) {\n filteredProperties[key] = value;\n }\n return filteredProperties;\n }, {});\n};\nexport var getCurrentPageViewId = function () {\n var _a;\n try {\n var globalScope = getGlobalScope();\n /* istanbul ignore next */\n var raw = (_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.sessionStorage) === null || _a === void 0 ? void 0 : _a.getItem(constants.PAGE_VIEW_SESSION_STORAGE_KEY);\n if (!raw) {\n return undefined;\n }\n var parsed = JSON.parse(raw);\n if (typeof parsed.pageViewId === 'string') {\n return parsed.pageViewId;\n }\n }\n catch (_b) {\n // ignore storage access or JSON errors\n }\n return undefined;\n};\nexport var querySelectUniqueElements = function (root, selectors) {\n if (root && 'querySelectorAll' in root && typeof root.querySelectorAll === 'function') {\n var elementSet = selectors.reduce(function (elements, selector) {\n if (selector) {\n var selectedElements = Array.from(root.querySelectorAll(selector));\n selectedElements.forEach(function (element) {\n elements.add(element);\n });\n }\n return elements;\n }, new Set());\n return Array.from(elementSet);\n }\n return [];\n};\n// Similar as element.closest, but works with multiple selectors\nexport var getClosestElement = function (element, selectors) {\n if (!element) {\n return null;\n }\n /* istanbul ignore next */\n if (selectors.some(function (selector) { var _a; return (_a = element === null || element === void 0 ? void 0 : element.matches) === null || _a === void 0 ? void 0 : _a.call(element, selector); })) {\n return element;\n }\n /* istanbul ignore next */\n return getClosestElement(element === null || element === void 0 ? void 0 : element.parentElement, selectors);\n};\nexport var asyncLoadScript = function (url) {\n return new Promise(function (resolve, reject) {\n var _a;\n try {\n var scriptElement = document.createElement('script');\n scriptElement.type = 'text/javascript';\n scriptElement.async = true;\n scriptElement.src = url;\n scriptElement.addEventListener('load', function () {\n resolve({ status: true });\n }, { once: true });\n scriptElement.addEventListener('error', function () {\n reject({\n status: false,\n message: \"Failed to load the script \".concat(url),\n });\n });\n /* istanbul ignore next */\n (_a = document.head) === null || _a === void 0 ? void 0 : _a.appendChild(scriptElement);\n }\n catch (error) {\n /* istanbul ignore next */\n reject(error);\n }\n });\n};\nexport function generateUniqueId() {\n return \"\".concat(Date.now(), \"-\").concat(Math.random().toString(36).substr(2, 9));\n}\nexport var filterOutNonTrackableEvents = function (event) {\n // Filter out changeEvent events with no target\n // This could happen when change events are triggered programmatically\n if (event.event.target === null || !event.closestTrackedAncestor) {\n return false;\n }\n return true;\n};\n// Type predicate\nexport function isElementBasedEvent(event) {\n return event.type === 'click' || event.type === 'change';\n}\nexport var MouseButton;\n(function (MouseButton) {\n MouseButton[MouseButton[\"LEFT_OR_TOUCH_CONTACT\"] = 0] = \"LEFT_OR_TOUCH_CONTACT\";\n MouseButton[MouseButton[\"MIDDLE\"] = 1] = \"MIDDLE\";\n MouseButton[MouseButton[\"RIGHT\"] = 2] = \"RIGHT\";\n})(MouseButton || (MouseButton = {}));\n//# sourceMappingURL=helpers.js.map","/* istanbul ignore file */\n/* eslint-disable no-restricted-globals */\nimport { AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL, AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS } from '../constants';\nimport { VERSION } from '../version';\n/**\n * Brand key to track whether visual tagging has been enabled on a messenger.\n */\nvar VISUAL_TAGGING_BRAND = '__AMPLITUDE_VISUAL_TAGGING__';\n/**\n * Enable visual tagging on a messenger instance.\n * The first call registers the handlers; subsequent calls are no-ops.\n *\n * @param messenger - The messenger to enable visual tagging on\n * @param options - Visual tagging configuration\n */\nexport function enableVisualTagging(messenger, options) {\n // Idempotency guard — works across bundle boundaries\n var branded = messenger;\n if (branded[VISUAL_TAGGING_BRAND] === true) {\n return;\n }\n branded[VISUAL_TAGGING_BRAND] = true;\n var dataExtractor = options.dataExtractor, isElementSelectable = options.isElementSelectable, cssSelectorAllowlist = options.cssSelectorAllowlist, actionClickAllowlist = options.actionClickAllowlist;\n var amplitudeVisualTaggingSelectorInstance = null;\n var onSelect = function (data) {\n messenger.notify({ action: 'element-selected', data: data });\n };\n var onTrack = function (type, properties) {\n if (type === 'selector-mode-changed') {\n messenger.notify({ action: 'track-selector-mode-changed', data: properties });\n }\n else if (type === 'selector-moved') {\n messenger.notify({ action: 'track-selector-moved', data: properties });\n }\n };\n messenger.registerActionHandler('initialize-visual-tagging-selector', function (actionData) {\n messenger\n .loadScriptOnce(AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL)\n .then(function () {\n var _a;\n // eslint-disable-next-line\n amplitudeVisualTaggingSelectorInstance = (_a = window === null || window === void 0 ? void 0 : window.amplitudeVisualTaggingSelector) === null || _a === void 0 ? void 0 : _a.call(window, {\n getEventTagProps: dataExtractor.getEventTagProps,\n isElementSelectable: function (element) {\n if (isElementSelectable) {\n return isElementSelectable((actionData === null || actionData === void 0 ? void 0 : actionData.actionType) || 'click', element);\n }\n return true;\n },\n onTrack: onTrack,\n onSelect: onSelect,\n visualHighlightClass: AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS,\n messenger: messenger,\n cssSelectorAllowlist: cssSelectorAllowlist,\n actionClickAllowlist: actionClickAllowlist,\n extractDataFromDataSource: dataExtractor.extractDataFromDataSource,\n dataExtractor: dataExtractor,\n diagnostics: {\n autocapture: {\n version: VERSION,\n },\n },\n });\n messenger.notify({ action: 'selector-loaded' });\n })\n .catch(function () {\n var _a;\n (_a = messenger.logger) === null || _a === void 0 ? void 0 : _a.warn('Failed to initialize visual tagging selector');\n });\n });\n messenger.registerActionHandler('close-visual-tagging-selector', function () {\n var _a;\n // eslint-disable-next-line\n (_a = amplitudeVisualTaggingSelectorInstance === null || amplitudeVisualTaggingSelectorInstance === void 0 ? void 0 : amplitudeVisualTaggingSelectorInstance.close) === null || _a === void 0 ? void 0 : _a.call(amplitudeVisualTaggingSelectorInstance);\n });\n}\n//# sourceMappingURL=messenger.js.map","import { filterOutNonTrackableEvents } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\nexport function trackClicks(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, shouldTrackEvent = _a.shouldTrackEvent, evaluateTriggers = _a.evaluateTriggers;\n var clickObservable = allObservables.clickObservable;\n var clickObservableFiltered = clickObservable\n .filter(filterOutNonTrackableEvents)\n .filter(function (click) {\n // Only track clicks on elements that should be tracked,\n return shouldTrackEvent('click', click.closestTrackedAncestor);\n })\n .map(function (click) { return evaluateTriggers(click); });\n var clicks = clickObservableFiltered;\n return clicks.subscribe(function (click) {\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_ELEMENT_CLICKED_EVENT, click.targetElementProperties);\n });\n}\n//# sourceMappingURL=track-click.js.map","import { filterOutNonTrackableEvents, } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CHANGED_EVENT } from '../constants';\nexport function trackChange(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, getEventProperties = _a.getEventProperties, shouldTrackEvent = _a.shouldTrackEvent, evaluateTriggers = _a.evaluateTriggers;\n var changeObservable = allObservables.changeObservable;\n var filteredChangeObservable = changeObservable\n .filter(filterOutNonTrackableEvents)\n .filter(function (changeEvent) {\n // Only track change on elements that should be tracked,\n return shouldTrackEvent('change', changeEvent.closestTrackedAncestor);\n })\n .map(function (changeEvent) { return evaluateTriggers(changeEvent); });\n return filteredChangeObservable.subscribe(function (changeEvent) {\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', changeEvent.closestTrackedAncestor));\n });\n}\n//# sourceMappingURL=track-change.js.map","import { merge, asyncMap } from '@amplitude/analytics-core';\nimport { filterOutNonTrackableEvents, getClosestElement, } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\nexport function trackActionClick(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, options = _a.options, getEventProperties = _a.getEventProperties, shouldTrackEvent = _a.shouldTrackEvent, shouldTrackActionClick = _a.shouldTrackActionClick;\n var clickObservable = allObservables.clickObservable, mutationObservable = allObservables.mutationObservable, navigateObservable = allObservables.navigateObservable;\n var filteredClickObservable = clickObservable\n .filter(function (click) {\n return !shouldTrackEvent('click', click.closestTrackedAncestor);\n })\n .map(function (click) {\n // overwrite the closestTrackedAncestor with the closest element that is on the actionClickAllowlist\n var closestActionClickEl = getClosestElement(click.event.target, options.actionClickAllowlist);\n click.closestTrackedAncestor = closestActionClickEl;\n // overwrite the targetElementProperties with the properties of the closestActionClickEl\n if (click.closestTrackedAncestor !== null) {\n click.targetElementProperties = getEventProperties(click.type, click.closestTrackedAncestor);\n }\n return click;\n })\n .filter(filterOutNonTrackableEvents)\n .filter(function (clickEvent) {\n // Only track change on elements that should be tracked\n return shouldTrackActionClick('click', clickEvent.closestTrackedAncestor);\n });\n var mutationOrNavigate = navigateObservable ? merge(mutationObservable, navigateObservable) : mutationObservable;\n var clickMutationNavigateObservable = merge(filteredClickObservable, mutationOrNavigate);\n var actionClickTimer = null;\n var lastClickEvent = null;\n var actionClickObservable = asyncMap(clickMutationNavigateObservable, function (event) {\n // clear any previous timer\n if (actionClickTimer) {\n clearTimeout(actionClickTimer);\n actionClickTimer = null;\n }\n if (event.type === 'click') {\n // mark the 'last click event'\n lastClickEvent = event;\n // set a timer to clear last click event if no mutation event between now and 500ms\n actionClickTimer = setTimeout(function () {\n actionClickTimer = null;\n lastClickEvent = null;\n }, 500);\n return Promise.resolve(null);\n }\n else {\n // if mutation/navigation + last click event, then it's an action click\n if (lastClickEvent) {\n var event_1 = lastClickEvent;\n lastClickEvent = null;\n return Promise.resolve(event_1);\n }\n }\n return Promise.resolve(null);\n });\n return actionClickObservable.subscribe(function (actionClick) {\n if (!actionClick)\n return;\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_ELEMENT_CLICKED_EVENT, getEventProperties('click', actionClick.closestTrackedAncestor));\n });\n}\n//# sourceMappingURL=track-action-click.js.map","import { getGlobalScope } from '@amplitude/analytics-core';\nexport function trackScroll(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables;\n // amplitude is reserved for future periodic scroll event tracking\n void amplitude;\n var scrollObservable = allObservables.scrollObservable;\n var state = { maxX: 0, maxY: 0 };\n var scrollSubscription = scrollObservable.subscribe(function () {\n var _a, _b, _c, _d;\n var globalScope = getGlobalScope();\n /* istanbul ignore next */\n var currentX = Math.floor((_b = (_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.scrollX) !== null && _a !== void 0 ? _a : globalScope === null || globalScope === void 0 ? void 0 : globalScope.pageXOffset) !== null && _b !== void 0 ? _b : 0);\n /* istanbul ignore next */\n var currentY = Math.floor((_d = (_c = globalScope === null || globalScope === void 0 ? void 0 : globalScope.scrollY) !== null && _c !== void 0 ? _c : globalScope === null || globalScope === void 0 ? void 0 : globalScope.pageYOffset) !== null && _d !== void 0 ? _d : 0);\n // Update page-level max positions for Page View End event (never resets during page lifetime)\n state.maxX = Math.max(state.maxX, currentX);\n state.maxY = Math.max(state.maxY, currentY);\n });\n return {\n unsubscribe: function () {\n scrollSubscription.unsubscribe();\n },\n getState: function () { return state; },\n reset: function () {\n state.maxX = 0;\n state.maxY = 0;\n },\n };\n}\n//# sourceMappingURL=track-scroll.js.map","import { __assign } from \"tslib\";\nimport { Observable, consoleObserver, getGlobalScope, merge } from '@amplitude/analytics-core';\n/* eslint-disable-next-line no-restricted-globals */\nvar globalScope = getGlobalScope();\nexport var createMutationObservable = function () {\n return new Observable(function (observer) {\n var mutationObserver = new MutationObserver(function (mutations) {\n observer.next(mutations);\n });\n if (document.body) {\n mutationObserver.observe(document.body, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n });\n }\n return function () { return mutationObserver.disconnect(); };\n });\n};\n/**\n * Creates an observable that tracks click events on the document.\n * @param clickType - The type of click event to track (click or pointerdown)\n */\nexport var createClickObservable = function (clickType) {\n if (clickType === void 0) { clickType = 'click'; }\n return new Observable(function (observer) {\n var _a;\n var handler = function (event) {\n observer.next(event);\n };\n (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.addEventListener(clickType, handler, { capture: true });\n return function () {\n var _a;\n (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.removeEventListener(clickType, handler, { capture: true });\n };\n });\n};\nexport var createScrollObservable = function () {\n return new Observable(function (observer) {\n var _a;\n var handler = function (event) {\n observer.next(event);\n };\n (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.addEventListener('scroll', handler);\n return function () {\n var _a;\n (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.removeEventListener('scroll', handler);\n };\n });\n};\nvar createConsoleErrorObservable = function () {\n return new Observable(function (observer) {\n var handler = function (_) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n /* istanbul ignore next */\n var message = undefined;\n if (Array.isArray(args[0]) && typeof args[0][0] === 'string') {\n message = args[0][0];\n }\n observer.next({ kind: 'console', message: message });\n };\n consoleObserver.addListener('error', handler);\n return function () {\n consoleObserver.removeListener(handler);\n };\n });\n};\n// Tracks when a trackedelement is exposed to the viewport\nexport var createExposureObservable = function (mutationObservable, selectorAllowlist) {\n return new Observable(function (observer) {\n var _a;\n var globalScope = getGlobalScope();\n if (!(globalScope === null || globalScope === void 0 ? void 0 : globalScope.IntersectionObserver)) {\n return function () {\n return;\n };\n }\n var intersectionObserver = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n observer.next(entry);\n });\n }, {\n root: null,\n rootMargin: '0px',\n threshold: 1.0, // trigger when 100% of the element is visible\n });\n // Observe initial elements\n var selectorString = selectorAllowlist.join(',');\n /* istanbul ignore next */\n var initialElements = (_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.document.querySelectorAll(selectorString)) !== null && _a !== void 0 ? _a : [];\n initialElements.forEach(function (element) {\n intersectionObserver.observe(element);\n });\n // Use mutation observable to observe new elements that match the allowlist\n var mutationSubscription = mutationObservable.subscribe(function (_a) {\n var event = _a.event;\n return event.forEach(function (_a) {\n var addedNodes = _a.addedNodes;\n return addedNodes.forEach(function (node) {\n if (!(node instanceof Element)) {\n return;\n }\n if (node.matches(selectorString)) {\n intersectionObserver.observe(node);\n }\n node.querySelectorAll(selectorString).forEach(function (child) {\n intersectionObserver.observe(child);\n });\n });\n });\n });\n return function () {\n mutationSubscription.unsubscribe();\n intersectionObserver.disconnect();\n };\n });\n};\nvar createUnhandledErrorObservable = function () {\n return new Observable(function (observer) {\n var handler = function (event) {\n if (!(event instanceof ErrorEvent)) {\n return;\n }\n var output = {\n kind: 'error',\n };\n if (event.error instanceof Error || event.error instanceof DOMException) {\n output = __assign(__assign({}, output), { message: event.error.message, stack: event.error.stack, filename: event.filename, lineNumber: event.lineno, columnNumber: event.colno });\n }\n else if (typeof event.error === 'string') {\n output.message = event.error;\n }\n observer.next(output);\n };\n globalScope.addEventListener('error', handler);\n return function () {\n globalScope.removeEventListener('error', handler);\n };\n });\n};\nvar createUnhandledRejectionObservable = function () {\n return new Observable(function (observer) {\n var handler = function (event) {\n var output = {\n kind: 'unhandledrejection',\n };\n if (event.reason instanceof Error || event.reason instanceof DOMException) {\n output.message = event.reason.message;\n output.stack = event.reason.stack;\n }\n else if (typeof event.reason === 'string') {\n output.message = event.reason;\n }\n observer.next(output);\n };\n globalScope.addEventListener('unhandledrejection', handler);\n return function () {\n globalScope.removeEventListener('unhandledrejection', handler);\n };\n });\n};\nexport var createErrorObservable = function () {\n var unhandledErrorObservable = merge(createUnhandledErrorObservable(), createUnhandledRejectionObservable());\n return merge(unhandledErrorObservable, createConsoleErrorObservable());\n};\nexport var createMouseMoveObservable = function () {\n return new Observable(function (observer) {\n var handler = function (event) {\n observer.next(event);\n };\n var args = { capture: true };\n globalScope.document.addEventListener('mousemove', handler, args);\n return function () {\n globalScope.document.removeEventListener('mousemove', handler, args);\n };\n });\n};\n//# sourceMappingURL=observables.js.map","/**\n * Matches an event to a single filter\n * @param event - The event to match\n * @param filter - The filter to match against\n * @returns boolean indicating if the event matches the filter\n */\nexport var matchEventToFilter = function (event, filter) {\n try {\n if (filter.subprop_key === '[Amplitude] Element Text') {\n // TODO: add support for the other operators\n return (filter.subprop_op === 'is' &&\n filter.subprop_value.includes(event.targetElementProperties['[Amplitude] Element Text']));\n }\n else if (filter.subprop_key === '[Amplitude] Element Hierarchy') {\n // Check if the element ancestory matches the CSS selector, always check this last since it is the most expensive\n return (filter.subprop_op === 'autotrack css match' &&\n !!event.closestTrackedAncestor.closest(filter.subprop_value.toString()));\n }\n }\n catch (error) {\n console.error('Error matching event to filter', error);\n return false;\n }\n return false;\n};\n//# sourceMappingURL=matchEventToFilter.js.map","// Get DataSource\n/**\n * Gets the DOM element specified by the data source configuration\n * @param dataSource - Configuration for finding the target element\n * @param contextElement - The element to start searching from\n * @returns The matching DOM element or undefined if not found\n */\nexport var getDataSource = function (dataSource, contextElement) {\n // Only process DOM_ELEMENT type data sources\n try {\n if (dataSource.sourceType === 'DOM_ELEMENT') {\n // If scope is specified, find the closest ancestor matching the scope rather than using documentElement (html) as the scope\n var scopingElement = document.documentElement;\n if (dataSource.scope && contextElement) {\n scopingElement = contextElement.closest(dataSource.scope);\n }\n // If we have both a scope and selector, find the matching element\n if (scopingElement && dataSource.selector) {\n return scopingElement.querySelector(dataSource.selector);\n }\n // Return scopingElement if no selector was specified\n return scopingElement;\n }\n }\n catch (error) {\n return undefined;\n }\n // Return undefined for non-DOM_ELEMENT data sources\n return undefined;\n};\n// Execute actions for a condition and attach event properties to the event if needed\nexport var executeActions = function (actions, ev, dataExtractor) {\n actions.forEach(function (action) {\n // Skip if actions is string until action set is implemented\n if (typeof action === 'string') {\n return;\n }\n if (action.actionType === 'ATTACH_EVENT_PROPERTY') {\n var data = dataExtractor.extractDataFromDataSource(action.dataSource, ev.closestTrackedAncestor);\n // Attach data to event\n ev.targetElementProperties[action.destinationKey] = data;\n }\n });\n};\n//# sourceMappingURL=actions.js.map","import { __values } from \"tslib\";\nimport { matchEventToFilter } from './matchEventToFilter';\nimport { executeActions } from './actions';\nvar eventTypeToBrowserEventMap = {\n '[Amplitude] Element Clicked': 'click',\n '[Amplitude] Element Changed': 'change',\n};\n// groups labeled events by event type\n// skips any labeled events with malformed definitions or unexpected event_type\nexport var groupLabeledEventIdsByEventType = function (labeledEvents) {\n var e_1, _a, e_2, _b;\n // Initialize all event types with empty sets\n var groupedLabeledEvents = Object.values(eventTypeToBrowserEventMap).reduce(function (acc, browserEvent) {\n acc[browserEvent] = new Set();\n return acc;\n }, {});\n // If there are no labeled events, return the initialized groupedLabeledEvents\n if (!labeledEvents) {\n return groupedLabeledEvents;\n }\n try {\n // Group labeled events by event type\n for (var labeledEvents_1 = __values(labeledEvents), labeledEvents_1_1 = labeledEvents_1.next(); !labeledEvents_1_1.done; labeledEvents_1_1 = labeledEvents_1.next()) {\n var le = labeledEvents_1_1.value;\n try {\n try {\n for (var _c = (e_2 = void 0, __values(le.definition)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var def = _d.value;\n var browserEvent = eventTypeToBrowserEventMap[def.event_type];\n if (browserEvent) {\n groupedLabeledEvents[browserEvent].add(le.id);\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n catch (e) {\n // Skip this labeled event if there is an error\n console.warn('Skipping Labeled Event due to malformed definition', le === null || le === void 0 ? void 0 : le.id, e);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (labeledEvents_1_1 && !labeledEvents_1_1.done && (_a = labeledEvents_1.return)) _a.call(labeledEvents_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return groupedLabeledEvents;\n};\n// TODO: add tests\nexport var createLabeledEventToTriggerMap = function (triggers) {\n var e_3, _a, e_4, _b;\n var labeledEventToTriggerMap = new Map();\n try {\n for (var triggers_1 = __values(triggers), triggers_1_1 = triggers_1.next(); !triggers_1_1.done; triggers_1_1 = triggers_1.next()) {\n var trigger = triggers_1_1.value;\n try {\n for (var _c = (e_4 = void 0, __values(trigger.conditions)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var condition = _d.value;\n if (condition.type === 'LABELED_EVENT') {\n var eventId = condition.match.eventId;\n // Get existing triggers for this event ID or initialize empty array\n var existingTriggers = labeledEventToTriggerMap.get(eventId);\n if (!existingTriggers) {\n existingTriggers = [];\n labeledEventToTriggerMap.set(eventId, existingTriggers);\n }\n // Add current trigger to the list of triggers for this event ID\n existingTriggers.push(trigger);\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n }\n finally { if (e_4) throw e_4.error; }\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (triggers_1_1 && !triggers_1_1.done && (_a = triggers_1.return)) _a.call(triggers_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return labeledEventToTriggerMap;\n};\n/**\n * Matches an event to labeled events based on the event's properties.\n * The logic matches exactly what is supported by the query backend.\n * TODO: later pre-filter the labeled events based on URL first\n *\n * @param event - The event to match against labeled events\n * @param labeledEvents - Array of labeled events to match against\n * @returns Array of matching labeled events\n */\nexport var matchEventToLabeledEvents = function (event, labeledEvents) {\n return labeledEvents.filter(function (le) {\n return le.definition.some(function (def) {\n return (eventTypeToBrowserEventMap[def.event_type] === event.type &&\n def.filters.every(function (filter) { return matchEventToFilter(event, filter); }));\n });\n });\n};\nexport var matchLabeledEventsToTriggers = function (labeledEvents, leToTriggerMap) {\n var e_5, _a, e_6, _b;\n var matchingTriggers = new Set();\n try {\n for (var labeledEvents_2 = __values(labeledEvents), labeledEvents_2_1 = labeledEvents_2.next(); !labeledEvents_2_1.done; labeledEvents_2_1 = labeledEvents_2.next()) {\n var le = labeledEvents_2_1.value;\n var triggers = leToTriggerMap.get(le.id);\n if (triggers) {\n try {\n for (var triggers_2 = (e_6 = void 0, __values(triggers)), triggers_2_1 = triggers_2.next(); !triggers_2_1.done; triggers_2_1 = triggers_2.next()) {\n var trigger = triggers_2_1.value;\n matchingTriggers.add(trigger);\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (triggers_2_1 && !triggers_2_1.done && (_b = triggers_2.return)) _b.call(triggers_2);\n }\n finally { if (e_6) throw e_6.error; }\n }\n }\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (labeledEvents_2_1 && !labeledEvents_2_1.done && (_a = labeledEvents_2.return)) _a.call(labeledEvents_2);\n }\n finally { if (e_5) throw e_5.error; }\n }\n return Array.from(matchingTriggers);\n};\nvar TriggerEvaluator = /** @class */ (function () {\n function TriggerEvaluator(groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options) {\n this.groupedLabeledEvents = groupedLabeledEvents;\n this.labeledEventToTriggerMap = labeledEventToTriggerMap;\n this.dataExtractor = dataExtractor;\n this.options = options;\n }\n TriggerEvaluator.prototype.evaluate = function (event) {\n var e_7, _a;\n // If there is no pageActions, return the event as is\n var pageActions = this.options.pageActions;\n if (!pageActions) {\n return event;\n }\n // Find matching labeled events\n var matchingLabeledEvents = matchEventToLabeledEvents(event, Array.from(this.groupedLabeledEvents[event.type]).map(function (id) { return pageActions.labeledEvents[id]; }));\n // Find matching conditions\n var matchingTriggers = matchLabeledEventsToTriggers(matchingLabeledEvents, this.labeledEventToTriggerMap);\n try {\n for (var matchingTriggers_1 = __values(matchingTriggers), matchingTriggers_1_1 = matchingTriggers_1.next(); !matchingTriggers_1_1.done; matchingTriggers_1_1 = matchingTriggers_1.next()) {\n var trigger = matchingTriggers_1_1.value;\n executeActions(trigger.actions, event, this.dataExtractor);\n }\n }\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\n finally {\n try {\n if (matchingTriggers_1_1 && !matchingTriggers_1_1.done && (_a = matchingTriggers_1.return)) _a.call(matchingTriggers_1);\n }\n finally { if (e_7) throw e_7.error; }\n }\n return event;\n };\n TriggerEvaluator.prototype.update = function (groupedLabeledEvents, labeledEventToTriggerMap, options) {\n this.groupedLabeledEvents = groupedLabeledEvents;\n this.labeledEventToTriggerMap = labeledEventToTriggerMap;\n this.options = options;\n };\n return TriggerEvaluator;\n}());\nexport { TriggerEvaluator };\nexport var createTriggerEvaluator = function (groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options) {\n return new TriggerEvaluator(groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options);\n};\n//# sourceMappingURL=triggers.js.map","import { __values } from \"tslib\";\nimport { isNonSensitiveElement } from './helpers';\nimport { DATA_AMP_MASK_ATTRIBUTES } from './constants';\nimport * as constants from './constants';\nimport { MASKED_TEXT_VALUE, TEXT_MASK_ATTRIBUTE } from '@amplitude/analytics-core';\nvar BLOCKED_ATTRIBUTES = new Set([\n // Already captured elsewhere in the hierarchy object\n 'id',\n 'class',\n // non-useful and potentially large attribute\n 'style',\n // sensitive as prefilled form data may populate this attribute\n 'value',\n // DOM events\n 'onclick',\n 'onchange',\n 'oninput',\n 'onblur',\n 'onsubmit',\n 'onfocus',\n 'onkeydown',\n 'onkeyup',\n 'onkeypress',\n // React specific\n 'data-reactid',\n 'data-react-checksum',\n 'data-reactroot',\n // Amplitude specific - used for redaction but should not be included in getElementProperties\n DATA_AMP_MASK_ATTRIBUTES,\n TEXT_MASK_ATTRIBUTE,\n]);\nvar SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST = ['type'];\nvar SVG_TAGS = ['svg', 'path', 'g'];\nvar HIGHLY_SENSITIVE_INPUT_TYPES = ['password', 'hidden'];\nexport var MAX_HIERARCHY_LENGTH = 1024;\nexport function getElementProperties(element, userMaskedAttributeNames) {\n var e_1, _a;\n var _b, _c, _d, _e;\n if (element === null) {\n return null;\n }\n var tagName = String(element.tagName).toLowerCase();\n var properties = {\n tag: tagName,\n };\n var siblings = Array.from((_c = (_b = element.parentElement) === null || _b === void 0 ? void 0 : _b.children) !== null && _c !== void 0 ? _c : []);\n if (siblings.length) {\n properties.index = siblings.indexOf(element);\n properties.indexOfType = siblings.filter(function (el) { return el.tagName === element.tagName; }).indexOf(element);\n }\n var prevSiblingTag = (_e = (_d = element.previousElementSibling) === null || _d === void 0 ? void 0 : _d.tagName) === null || _e === void 0 ? void 0 : _e.toLowerCase();\n if (prevSiblingTag) {\n properties.prevSib = String(prevSiblingTag);\n }\n var id = element.getAttribute('id');\n if (id) {\n properties.id = String(id);\n }\n var classes = Array.from(element.classList);\n if (classes.length) {\n properties.classes = classes;\n }\n var attributes = {};\n var attributesArray = Array.from(element.attributes);\n var filteredAttributes = attributesArray.filter(function (attr) { return !BLOCKED_ATTRIBUTES.has(attr.name); });\n var isSensitiveElement = !isNonSensitiveElement(element);\n // if input is hidden or password or for SVGs, skip attribute collection entirely\n if (!HIGHLY_SENSITIVE_INPUT_TYPES.includes(String(element.getAttribute('type'))) && !SVG_TAGS.includes(tagName)) {\n try {\n for (var filteredAttributes_1 = __values(filteredAttributes), filteredAttributes_1_1 = filteredAttributes_1.next(); !filteredAttributes_1_1.done; filteredAttributes_1_1 = filteredAttributes_1.next()) {\n var attr = filteredAttributes_1_1.value;\n // If sensitive element, only allow certain attributes\n if (isSensitiveElement && !SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST.includes(attr.name)) {\n continue;\n }\n if (userMaskedAttributeNames.has(attr.name)) {\n attributes[attr.name] = MASKED_TEXT_VALUE;\n continue;\n }\n // Finally cast attribute value to string and limit attribute value length\n attributes[attr.name] = String(attr.value).substring(0, constants.MAX_ATTRIBUTE_LENGTH);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (filteredAttributes_1_1 && !filteredAttributes_1_1.done && (_a = filteredAttributes_1.return)) _a.call(filteredAttributes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n if (Object.keys(attributes).length) {\n properties.attrs = attributes;\n }\n return properties;\n}\nexport function getAncestors(targetEl) {\n var ancestors = [];\n if (!targetEl) {\n return ancestors;\n }\n // Add self to the list of ancestors\n ancestors.push(targetEl);\n var current = targetEl.parentElement;\n while (current && current.tagName !== 'HTML') {\n ancestors.push(current);\n current = current.parentElement;\n }\n return ancestors;\n}\n//# sourceMappingURL=hierarchy.js.map","/* istanbul ignore file */\nimport { __values } from \"tslib\";\n// Code is adapted from The Chromium Authors.\n// Source: https://github.com/ChromeDevTools/devtools-frontend/blob/main/front_end/panels/elements/DOMPath.ts#L14\n// License: BSD-style license\n//\n// Copyright 2014 The Chromium Authors\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\nvar Step = /** @class */ (function () {\n function Step(value, optimized) {\n this.value = value;\n this.optimized = optimized;\n }\n Step.prototype.toString = function () {\n return this.value;\n };\n return Step;\n}());\nexport var cssPath = function (node, optimized) {\n // `node` is already an Element; this check is defensive.\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return '';\n }\n var steps = [];\n var contextNode = node;\n while (contextNode) {\n var step = cssPathStep(contextNode, Boolean(optimized), contextNode === node);\n if (!step) {\n break;\n } // bail out early\n steps.push(step);\n if (step.optimized) {\n break;\n }\n contextNode = contextNode.parentElement;\n }\n steps.reverse();\n return steps.join(' > ');\n};\nvar cssPathStep = function (node, optimized, isTargetNode) {\n var e_1, _a;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return null;\n }\n var id = node.getAttribute('id');\n if (optimized) {\n if (id) {\n return new Step(idSelector(id), true);\n }\n var nodeNameLower = node.tagName.toLowerCase();\n if (nodeNameLower === 'body' || nodeNameLower === 'head' || nodeNameLower === 'html') {\n return new Step(nodeNameLower, true);\n }\n }\n var nodeName = node.tagName.toLowerCase();\n if (id) {\n return new Step(nodeName + idSelector(id), true);\n }\n var parent = node.parentNode;\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return new Step(nodeName, true);\n }\n function prefixedElementClassNames(el) {\n var classAttribute = el.getAttribute('class');\n if (!classAttribute) {\n return [];\n }\n return classAttribute\n .split(/\\s+/g)\n .filter(Boolean)\n .map(function (name) {\n // The prefix is required to store \"__proto__\" in a object-based map.\n return '$' + name;\n });\n }\n function idSelector(id) {\n return '#' + CSS.escape(id);\n }\n var prefixedOwnClassNamesArray = prefixedElementClassNames(node);\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n for (var i = 0; siblings && (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var sibling = siblings[i];\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n elementIndex += 1;\n if (sibling === node) {\n ownIndex = elementIndex;\n continue;\n }\n if (needsNthChild) {\n continue;\n }\n if (sibling.tagName.toLowerCase() !== nodeName) {\n continue;\n }\n needsClassNames = true;\n var ownClassNames = new Set(prefixedOwnClassNamesArray);\n if (!ownClassNames.size) {\n needsNthChild = true;\n continue;\n }\n var siblingClassNamesArray = prefixedElementClassNames(sibling);\n for (var j = 0; j < siblingClassNamesArray.length; ++j) {\n var siblingClass = siblingClassNamesArray[j];\n if (!ownClassNames.has(siblingClass)) {\n continue;\n }\n ownClassNames.delete(siblingClass);\n if (!ownClassNames.size) {\n needsNthChild = true;\n break;\n }\n }\n }\n var result = nodeName;\n if (isTargetNode &&\n nodeName.toLowerCase() === 'input' &&\n node.getAttribute('type') &&\n !node.getAttribute('id') &&\n !node.getAttribute('class')) {\n result += '[type=' + CSS.escape(node.getAttribute('type') || '') + ']';\n }\n if (needsNthChild) {\n result += ':nth-child(' + String(ownIndex + 1) + ')';\n }\n else if (needsClassNames) {\n try {\n for (var prefixedOwnClassNamesArray_1 = __values(prefixedOwnClassNamesArray), prefixedOwnClassNamesArray_1_1 = prefixedOwnClassNamesArray_1.next(); !prefixedOwnClassNamesArray_1_1.done; prefixedOwnClassNamesArray_1_1 = prefixedOwnClassNamesArray_1.next()) {\n var prefixedName = prefixedOwnClassNamesArray_1_1.value;\n result += '.' + CSS.escape(prefixedName.slice(1));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (prefixedOwnClassNamesArray_1_1 && !prefixedOwnClassNamesArray_1_1.done && (_a = prefixedOwnClassNamesArray_1.return)) _a.call(prefixedOwnClassNamesArray_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n return new Step(result, false);\n};\n//# sourceMappingURL=element-path.js.map","import { __read, __spreadArray, __values } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { getDecodeURI, MASKED_TEXT_VALUE, TEXT_MASK_ATTRIBUTE, getPageTitle, replaceSensitiveString, } from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { removeEmptyProperties, extractPrefixedAttributes, isElementPointerCursor, getClosestElement, isElementBasedEvent, parseAttributesToMask, getCurrentPageViewId, } from './helpers';\nimport { getAncestors, getElementProperties } from './hierarchy';\nimport { getDataSource } from './pageActions/actions';\nimport { cssPath } from './libs/element-path';\nvar DataExtractor = /** @class */ (function () {\n function DataExtractor(options, context) {\n var e_1, _a;\n var _this = this;\n var _b;\n /**\n * Wrapper method to replace sensitive strings using the helper function\n * @param text - The text to search for sensitive data\n * @returns The text with sensitive data replaced by masked text\n */\n this.replaceSensitiveString = function (text) {\n return replaceSensitiveString(text, _this.additionalMaskTextPatterns);\n };\n // Get the DOM hierarchy of the element, starting from the target element to the root element.\n this.getHierarchy = function (element) {\n var e_2, _a;\n var _b, _c;\n var startTime = performance.now();\n var hierarchy = [];\n if (!element) {\n return [];\n }\n // Get list of ancestors including itself and get properties at each level in the hierarchy\n var ancestors = getAncestors(element);\n // Build attributes to mask map\n var elementToAttributesToMaskMap = new Map();\n for (var i = ancestors.length - 1; i >= 0; i--) {\n var node = ancestors[i];\n if (node) {\n var attributesToMask = parseAttributesToMask(node.getAttribute(constants.DATA_AMP_MASK_ATTRIBUTES));\n var ancestorAttributesToMask = i === ancestors.length - 1 ? [] : (_b = elementToAttributesToMaskMap.get(ancestors[i + 1])) !== null && _b !== void 0 ? _b : new Set();\n var combinedAttributesToMask = new Set(__spreadArray(__spreadArray([], __read(ancestorAttributesToMask), false), __read(attributesToMask), false));\n elementToAttributesToMaskMap.set(node, combinedAttributesToMask);\n }\n }\n hierarchy = ancestors.map(function (el) { var _a; return getElementProperties(el, (_a = elementToAttributesToMaskMap.get(el)) !== null && _a !== void 0 ? _a : new Set()); });\n var _loop_1 = function (hierarchyNode) {\n if (hierarchyNode === null || hierarchyNode === void 0 ? void 0 : hierarchyNode.attrs) {\n Object.entries(hierarchyNode.attrs).forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n if (hierarchyNode.attrs) {\n hierarchyNode.attrs[key] = _this.replaceSensitiveString(value);\n }\n });\n }\n };\n try {\n // Search for and mask any sensitive attribute values\n for (var hierarchy_1 = __values(hierarchy), hierarchy_1_1 = hierarchy_1.next(); !hierarchy_1_1.done; hierarchy_1_1 = hierarchy_1.next()) {\n var hierarchyNode = hierarchy_1_1.value;\n _loop_1(hierarchyNode);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (hierarchy_1_1 && !hierarchy_1_1.done && (_a = hierarchy_1.return)) _a.call(hierarchy_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n var endTime = performance.now();\n (_c = _this.diagnosticsClient) === null || _c === void 0 ? void 0 : _c.recordHistogram('autocapturePlugin.getHierarchy', endTime - startTime);\n return hierarchy;\n };\n this.getNearestLabel = function (element) {\n var parent = element.parentElement;\n if (!parent) {\n return '';\n }\n var labelElement;\n try {\n labelElement = parent.querySelector(':scope>span,h1,h2,h3,h4,h5,h6');\n }\n catch (_a) {\n /* istanbul ignore next */\n labelElement = null;\n }\n if (labelElement) {\n /* istanbul ignore next */\n return _this.getText(labelElement);\n }\n return _this.getNearestLabel(parent);\n };\n this.getElementPath = function (element) {\n var _a;\n if (!element) {\n return '';\n }\n var startTime = performance.now();\n var elementPath = cssPath(element);\n var endTime = performance.now();\n (_a = _this.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.recordHistogram('autocapturePlugin.getElementPath', endTime - startTime);\n return elementPath;\n };\n // Returns the Amplitude event properties for the given element.\n this.getEventProperties = function (actionType, element, dataAttributePrefix) {\n var _a;\n var _b, _c, _d;\n /* istanbul ignore next */\n var tag = (_c = (_b = element === null || element === void 0 ? void 0 : element.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b);\n /* istanbul ignore next */\n var rect = typeof element.getBoundingClientRect === 'function' ? element.getBoundingClientRect() : { left: null, top: null };\n var hierarchy = _this.getHierarchy(element);\n var currentElementAttributes = (_d = hierarchy[0]) === null || _d === void 0 ? void 0 : _d.attrs;\n var nearestLabel = _this.getNearestLabel(element);\n var attributes = extractPrefixedAttributes(currentElementAttributes !== null && currentElementAttributes !== void 0 ? currentElementAttributes : {}, dataAttributePrefix);\n /* istanbul ignore next */\n var properties = (_a = {},\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY] = hierarchy,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG] = tag,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT] = _this.getText(element),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT] = rect.left == null ? null : Math.round(rect.left),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP] = rect.top == null ? null : Math.round(rect.top),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES] = attributes,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_PATH] = _this.getElementPath(element),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL] = nearestLabel,\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = getDecodeURI(window.location.href.split('?')[0]),\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE] = getPageTitle(_this.replaceSensitiveString),\n _a[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT] = window.innerHeight,\n _a[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH] = window.innerWidth,\n _a);\n var pageViewId = getCurrentPageViewId();\n /* istanbul ignore next */\n if (pageViewId) {\n /* istanbul ignore next */\n properties[constants.AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID] = pageViewId;\n }\n // id is never masked, so always include it\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID] = element.getAttribute('id') || '';\n // class is never masked, so always include it\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS] = element.getAttribute('class');\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL] = currentElementAttributes === null || currentElementAttributes === void 0 ? void 0 : currentElementAttributes['aria-label'];\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n var href = element.href.substring(0, constants.MAX_ATTRIBUTE_LENGTH);\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = _this.replaceSensitiveString(href); // we don't use hierarchy here because we don't want href value to be changed\n }\n return removeEmptyProperties(properties);\n };\n this.addTypeAndTimestamp = function (event, type) {\n return {\n event: event,\n timestamp: Date.now(),\n type: type,\n };\n };\n this.addAdditionalEventProperties = function (event, type, selectorAllowlist, dataAttributePrefix, \n // capture the event if the cursor is a \"pointer\" when this element is clicked on\n // reason: a \"pointer\" cursor indicates that an element should be interactable\n // regardless of the element's tag name\n isCapturingCursorPointer) {\n if (isCapturingCursorPointer === void 0) { isCapturingCursorPointer = false; }\n var baseEvent = _this.addTypeAndTimestamp(event, type);\n if (isElementBasedEvent(baseEvent) && baseEvent.event.target !== null) {\n if (isCapturingCursorPointer) {\n var isCursorPointer = isElementPointerCursor(baseEvent.event.target, baseEvent.type);\n if (isCursorPointer) {\n baseEvent.closestTrackedAncestor = baseEvent.event.target;\n baseEvent.targetElementProperties = _this.getEventProperties(baseEvent.type, baseEvent.closestTrackedAncestor, dataAttributePrefix);\n return baseEvent;\n }\n }\n // Retrieve additional event properties from the target element\n var closestTrackedAncestor = getClosestElement(baseEvent.event.target, selectorAllowlist);\n if (closestTrackedAncestor) {\n baseEvent.closestTrackedAncestor = closestTrackedAncestor;\n baseEvent.targetElementProperties = _this.getEventProperties(baseEvent.type, closestTrackedAncestor, dataAttributePrefix);\n }\n return baseEvent;\n }\n return baseEvent;\n };\n this.extractDataFromDataSource = function (dataSource, contextElement) {\n // Extract from DOM Element\n if (dataSource.sourceType === 'DOM_ELEMENT') {\n var sourceElement = getDataSource(dataSource, contextElement);\n if (!sourceElement) {\n return undefined;\n }\n if (dataSource.elementExtractType === 'TEXT') {\n return _this.getText(sourceElement);\n }\n else if (dataSource.elementExtractType === 'ATTRIBUTE' && dataSource.attribute) {\n return sourceElement.getAttribute(dataSource.attribute);\n }\n return undefined;\n }\n // TODO: Extract from other source types\n return undefined;\n };\n // Traverse text content without cloning DOM nodes, which avoids media/network side effects\n // from recreating nested elements such as <video>, <audio>, or <img>.\n this.getTextWithMaskedDescendants = function (element) {\n var e_3, _a;\n var maskedSelector = \"[\".concat(TEXT_MASK_ATTRIBUTE, \"], [contenteditable]\");\n // Fast path: if no masked descendants exist, rely on native text extraction.\n if (!element.querySelector(maskedSelector)) {\n return element.innerText;\n }\n var output = '';\n var childNodes = Array.from(element.childNodes);\n try {\n for (var childNodes_1 = __values(childNodes), childNodes_1_1 = childNodes_1.next(); !childNodes_1_1.done; childNodes_1_1 = childNodes_1.next()) {\n var childNode = childNodes_1_1.value;\n if (childNode.nodeType === Node.TEXT_NODE) {\n output += childNode.textContent || '';\n continue;\n }\n if (!(childNode instanceof Element)) {\n continue;\n }\n // Replace entire masked/contenteditable subtrees with the mask token.\n if (childNode.hasAttribute(TEXT_MASK_ATTRIBUTE) || childNode.hasAttribute('contenteditable')) {\n output += MASKED_TEXT_VALUE;\n continue;\n }\n output += _this.getTextWithMaskedDescendants(childNode);\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (childNodes_1_1 && !childNodes_1_1.done && (_a = childNodes_1.return)) _a.call(childNodes_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return output;\n };\n this.getText = function (element) {\n // Check if element or any parent has data-amp-mask attribute\n var hasMaskAttribute = element.closest(\"[\".concat(TEXT_MASK_ATTRIBUTE, \"]\")) !== null;\n if (hasMaskAttribute) {\n return MASKED_TEXT_VALUE;\n }\n var output = '';\n if (!element.querySelector(\"[\".concat(TEXT_MASK_ATTRIBUTE, \"], [contenteditable]\"))) {\n output = element.innerText || '';\n }\n else {\n output = _this.getTextWithMaskedDescendants(element);\n }\n return _this.replaceSensitiveString(output.substring(0, 255)).replace(/\\s+/g, ' ').trim();\n };\n // Returns the element properties for the given element in Visual Labeling.\n this.getEventTagProps = function (element) {\n var _a;\n var _b, _c;\n if (!element) {\n return {};\n }\n /* istanbul ignore next */\n var tag = (_c = (_b = element === null || element === void 0 ? void 0 : element.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b);\n var properties = (_a = {},\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG] = tag,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT] = _this.getText(element),\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = window.location.href.split('?')[0],\n _a);\n return removeEmptyProperties(properties);\n };\n this.diagnosticsClient = context === null || context === void 0 ? void 0 : context.diagnosticsClient;\n var rawPatterns = (_b = options.maskTextRegex) !== null && _b !== void 0 ? _b : [];\n var compiled = [];\n try {\n for (var rawPatterns_1 = __values(rawPatterns), rawPatterns_1_1 = rawPatterns_1.next(); !rawPatterns_1_1.done; rawPatterns_1_1 = rawPatterns_1.next()) {\n var entry = rawPatterns_1_1.value;\n if (compiled.length >= constants.MAX_MASK_TEXT_PATTERNS) {\n break;\n }\n if (entry instanceof RegExp) {\n compiled.push(entry);\n }\n else if ('pattern' in entry && typeof entry.pattern === 'string') {\n try {\n compiled.push(new RegExp(entry.pattern, 'i'));\n }\n catch (_c) {\n // ignore invalid pattern strings\n }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (rawPatterns_1_1 && !rawPatterns_1_1.done && (_a = rawPatterns_1.return)) _a.call(rawPatterns_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this.additionalMaskTextPatterns = compiled;\n }\n return DataExtractor;\n}());\nexport { DataExtractor };\n//# sourceMappingURL=data-extractor.js.map","/* eslint-disable no-restricted-globals */\nimport { DEFAULT_EXPOSURE_DURATION } from '@amplitude/analytics-core';\nexport function trackExposure(_a) {\n var allObservables = _a.allObservables, onExposure = _a.onExposure, dataExtractor = _a.dataExtractor, _b = _a.exposureDuration, exposureDuration = _b === void 0 ? DEFAULT_EXPOSURE_DURATION : _b;\n // Track which elements have been marked as exposed (per-element state)\n var exposureMap = new Map();\n // Track active timers for elements that are currently visible but not yet exposed\n var exposureTimerMap = new Map();\n var exposureObservable = allObservables.exposureObservable;\n var exposureSubscription = exposureObservable.subscribe(function (event) {\n var entry = event;\n var element = entry.target;\n if (entry.isIntersecting) {\n // Element became visible - start exposure timer if not already exposed\n if (!exposureMap.get(element)) {\n var timer = setTimeout(function () {\n // Element has been visible for exposureDuration - mark as exposed\n exposureMap.set(element, true);\n // Record the CSS selector path in the shared exposure state\n var elementPath = dataExtractor.getElementPath(element);\n onExposure(elementPath);\n // Clear the timer reference\n exposureTimerMap.set(element, null);\n }, exposureDuration);\n exposureTimerMap.set(element, timer);\n }\n }\n else if (!entry.isIntersecting && entry.intersectionRatio < 1.0) {\n // Element left viewport - cancel exposure timer if one exists\n var timer = exposureTimerMap.get(element);\n if (timer) {\n clearTimeout(timer);\n exposureTimerMap.set(element, null);\n }\n }\n });\n return {\n unsubscribe: function () {\n exposureSubscription.unsubscribe();\n },\n reset: function () {\n exposureTimerMap.forEach(function (timer) {\n if (timer) {\n clearTimeout(timer);\n }\n });\n exposureTimerMap.clear();\n exposureMap.clear();\n },\n };\n}\n//# sourceMappingURL=track-exposure.js.map","import { getGlobalScope } from '@amplitude/analytics-core';\nimport * as constants from '../constants';\nimport { getCurrentPageViewId } from '../helpers';\nexport function fireViewportContentUpdated(_a) {\n var _b;\n var _c, _d, _e;\n var amplitude = _a.amplitude, scrollTracker = _a.scrollTracker, currentElementExposed = _a.currentElementExposed, elementExposedForPage = _a.elementExposedForPage, exposureTracker = _a.exposureTracker, isPageEnd = _a.isPageEnd, lastScroll = _a.lastScroll;\n var pageScrollMaxState = scrollTracker.getState();\n var globalScope = getGlobalScope();\n /* istanbul ignore next */\n var viewportWidth = (_c = globalScope === null || globalScope === void 0 ? void 0 : globalScope.innerWidth) !== null && _c !== void 0 ? _c : 0;\n /* istanbul ignore next */\n var viewportHeight = (_d = globalScope === null || globalScope === void 0 ? void 0 : globalScope.innerHeight) !== null && _d !== void 0 ? _d : 0;\n var eventProperties = (_b = {},\n _b[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = \n /* istanbul ignore next */\n (_e = globalScope === null || globalScope === void 0 ? void 0 : globalScope.location) === null || _e === void 0 ? void 0 : _e.href,\n _b[constants.AMPLITUDE_EVENT_PROP_MAX_PAGE_X] = pageScrollMaxState.maxX + viewportWidth,\n _b[constants.AMPLITUDE_EVENT_PROP_MAX_PAGE_Y] = pageScrollMaxState.maxY + viewportHeight,\n _b[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT] = viewportHeight,\n _b[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH] = viewportWidth,\n _b['[Amplitude] Element Exposed'] = Array.from(currentElementExposed),\n _b);\n var pageViewId = getCurrentPageViewId();\n if (pageViewId) {\n eventProperties[constants.AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID] = pageViewId;\n }\n // If elements exposed is empty and max scroll is same as last event, don't track\n if (currentElementExposed.size === 0 &&\n pageScrollMaxState.maxX === lastScroll.maxX &&\n pageScrollMaxState.maxY === lastScroll.maxY) {\n if (isPageEnd) {\n scrollTracker.reset();\n elementExposedForPage.clear();\n exposureTracker === null || exposureTracker === void 0 ? void 0 : exposureTracker.reset();\n }\n return;\n }\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track('[Amplitude] Viewport Content Updated', eventProperties);\n lastScroll.maxX = pageScrollMaxState.maxX;\n lastScroll.maxY = pageScrollMaxState.maxY;\n // Clear current batch\n currentElementExposed.clear();\n if (isPageEnd) {\n // Reset state for next page view\n scrollTracker.reset();\n elementExposedForPage.clear();\n exposureTracker === null || exposureTracker === void 0 ? void 0 : exposureTracker.reset();\n }\n}\nexport function onExposure(elementPath, elementExposedForPage, currentElementExposed, fireViewportContentUpdatedCallback) {\n if (elementExposedForPage.has(elementPath)) {\n return;\n }\n elementExposedForPage.add(elementPath);\n currentElementExposed.add(elementPath);\n // Check if current set size exceeds 18k chars\n var exposedArray = Array.from(currentElementExposed);\n var exposedString = JSON.stringify(exposedArray);\n if (exposedString.length >= constants.MAX_ELEMENT_EXPOSED_STR_LENGTH) {\n fireViewportContentUpdatedCallback(false);\n }\n}\n//# sourceMappingURL=track-viewport-content-updated.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { DEFAULT_EXPOSURE_DURATION, DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_ACTION_CLICK_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, getGlobalScope, getOrCreateWindowMessenger, enableBackgroundCapture, multicast, } from '@amplitude/analytics-core';\nimport { VERSION } from './version';\nimport * as constants from './constants';\nimport { createShouldTrackEvent, } from './helpers';\nimport { enableVisualTagging } from './libs/messenger';\nimport { trackClicks } from './autocapture/track-click';\nimport { trackChange } from './autocapture/track-change';\nimport { trackActionClick } from './autocapture/track-action-click';\nimport { trackScroll } from './autocapture/track-scroll';\nimport { createClickObservable, createScrollObservable, createExposureObservable, createMutationObservable, } from './observables';\nimport { createLabeledEventToTriggerMap, createTriggerEvaluator, groupLabeledEventIdsByEventType, } from './pageActions/triggers';\nimport { DataExtractor } from './data-extractor';\nimport { Observable } from '@amplitude/analytics-core';\nimport { trackExposure } from './autocapture/track-exposure';\nimport { fireViewportContentUpdated, onExposure } from './autocapture/track-viewport-content-updated';\nexport var ObservablesEnum;\n(function (ObservablesEnum) {\n ObservablesEnum[\"ClickObservable\"] = \"clickObservable\";\n ObservablesEnum[\"ChangeObservable\"] = \"changeObservable\";\n ObservablesEnum[\"NavigateObservable\"] = \"navigateObservable\";\n ObservablesEnum[\"MutationObservable\"] = \"mutationObservable\";\n ObservablesEnum[\"ScrollObservable\"] = \"scrollObservable\";\n ObservablesEnum[\"ExposureObservable\"] = \"exposureObservable\";\n ObservablesEnum[\"BrowserErrorObservable\"] = \"browserErrorObservable\";\n ObservablesEnum[\"SelectionObservable\"] = \"selectionObservable\";\n ObservablesEnum[\"MouseMoveObservable\"] = \"mouseMoveObservable\";\n})(ObservablesEnum || (ObservablesEnum = {}));\nexport var autocapturePlugin = function (options, context) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n if (options === void 0) { options = {}; }\n // Set the plugin version tag\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n context === null || context === void 0 ? void 0 : context.diagnosticsClient.setTag('plugin.autocapture.version', VERSION);\n var _o = options.dataAttributePrefix, dataAttributePrefix = _o === void 0 ? DEFAULT_DATA_ATTRIBUTE_PREFIX : _o, _p = options.visualTaggingOptions, visualTaggingOptions = _p === void 0 ? {\n enabled: true,\n } : _p;\n options.cssSelectorAllowlist = (_a = options.cssSelectorAllowlist) !== null && _a !== void 0 ? _a : DEFAULT_CSS_SELECTOR_ALLOWLIST;\n options.actionClickAllowlist = (_b = options.actionClickAllowlist) !== null && _b !== void 0 ? _b : DEFAULT_ACTION_CLICK_ALLOWLIST;\n options.debounceTime = (_c = options.debounceTime) !== null && _c !== void 0 ? _c : 0;\n var isViewportContentUpdatedEnabled = ((_d = options.viewportContentUpdated) === null || _d === void 0 ? void 0 : _d.enabled) !== false;\n var resolvedExposureDuration = (_g = (_f = (_e = options.viewportContentUpdated) === null || _e === void 0 ? void 0 : _e.exposureDuration) !== null && _f !== void 0 ? _f : options.exposureDuration) !== null && _g !== void 0 ? _g : DEFAULT_EXPOSURE_DURATION;\n options.viewportContentUpdated = __assign(__assign({}, options.viewportContentUpdated), { exposureDuration: resolvedExposureDuration });\n options.pageUrlExcludelist = (_h = options.pageUrlExcludelist) === null || _h === void 0 ? void 0 : _h.reduce(function (acc, excludePattern) {\n if (typeof excludePattern === 'string') {\n acc.push(excludePattern);\n }\n if (excludePattern instanceof RegExp) {\n acc.push(excludePattern);\n }\n if (typeof excludePattern === 'object' && excludePattern !== null && 'pattern' in excludePattern) {\n try {\n acc.push(new RegExp(excludePattern.pattern));\n }\n catch (regexError) {\n console.warn(\"Invalid regex pattern: \".concat(excludePattern.pattern), regexError);\n return acc;\n }\n }\n return acc;\n }, []);\n var name = constants.PLUGIN_NAME;\n var type = 'enrichment';\n var subscriptions = [];\n var dataExtractor = new DataExtractor(options, context);\n // Page-level state shared across trackers, emitted in a single Page View End event on beforeunload\n // elementExposedForPage holds the total set of elements seen during the entire page view lifetime\n var elementExposedForPage = new Set();\n // currentElementExposed only holds the set of elements that will be flushed during the next [Amplitude] Viewport Content Updated event\n var currentElementExposed = new Set();\n var beforeUnloadCleanup;\n var createObservables = function () {\n var _a;\n var clickObservable = multicast(createClickObservable().map(function (click) {\n return dataExtractor.addAdditionalEventProperties(click, 'click', options.cssSelectorAllowlist, dataAttributePrefix);\n }));\n var changeObservable = multicast(new Observable(function (observer) {\n var _a;\n var handler = function (changeEvent) {\n var enrichedChangeEvent = dataExtractor.addAdditionalEventProperties(changeEvent, 'change', options.cssSelectorAllowlist, dataAttributePrefix);\n observer.next(enrichedChangeEvent);\n };\n /* istanbul ignore next */\n (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.addEventListener('change', handler, { capture: true });\n /* istanbul ignore next */\n return function () { var _a; return (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.removeEventListener('change', handler); };\n }));\n // Create observable for URL changes\n var navigateObservable;\n /* istanbul ignore next */\n if (window.navigation) {\n navigateObservable = multicast(new Observable(function (observer) {\n var handler = function (navigateEvent) {\n var enrichedNavigateEvent = dataExtractor.addAdditionalEventProperties(navigateEvent, 'navigate', options.cssSelectorAllowlist, dataAttributePrefix);\n observer.next(enrichedNavigateEvent);\n };\n window.navigation.addEventListener('navigate', handler);\n return function () {\n window.navigation.removeEventListener('navigate', handler);\n };\n }));\n }\n var mutationObservable = multicast(createMutationObservable().map(function (mutation) {\n return dataExtractor.addAdditionalEventProperties(mutation, 'mutation', options.cssSelectorAllowlist, dataAttributePrefix);\n }));\n var scrollObservable = createScrollObservable();\n var exposureObservable = createExposureObservable(mutationObservable, options.cssSelectorAllowlist);\n return _a = {},\n _a[ObservablesEnum.ChangeObservable] = changeObservable,\n // [ObservablesEnum.ErrorObservable]: errorObservable,\n _a[ObservablesEnum.ClickObservable] = clickObservable,\n _a[ObservablesEnum.MutationObservable] = mutationObservable,\n _a[ObservablesEnum.NavigateObservable] = navigateObservable,\n _a[ObservablesEnum.ScrollObservable] = scrollObservable,\n _a[ObservablesEnum.ExposureObservable] = exposureObservable,\n _a;\n };\n // Group labeled events by event type (eg. click, change)\n var groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values((_k = (_j = options.pageActions) === null || _j === void 0 ? void 0 : _j.labeledEvents) !== null && _k !== void 0 ? _k : {}));\n var labeledEventToTriggerMap = createLabeledEventToTriggerMap((_m = (_l = options.pageActions) === null || _l === void 0 ? void 0 : _l.triggers) !== null && _m !== void 0 ? _m : []);\n // Evaluate triggers for the given event by running the actions associated with the matching triggers\n var evaluateTriggers = createTriggerEvaluator(groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options);\n // Function to recalculate internal variables when remote config is updated\n var recomputePageActionsData = function (remotePageActions) {\n var _a, _b;\n if (remotePageActions) {\n // Merge remote config with local options\n options.pageActions = __assign(__assign({}, options.pageActions), remotePageActions);\n // Recalculate internal variables\n groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values((_a = options.pageActions.labeledEvents) !== null && _a !== void 0 ? _a : {}));\n labeledEventToTriggerMap = createLabeledEventToTriggerMap((_b = options.pageActions.triggers) !== null && _b !== void 0 ? _b : []);\n // Update evaluateTriggers function\n evaluateTriggers.update(groupedLabeledEvents, labeledEventToTriggerMap, options);\n }\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var pageViewEndFired, lastScroll, shouldTrackEvent, shouldTrackActionClick, allObservables, clickTrackingSubscription, changeSubscription, actionClickSubscription, scrollTracker, trackers, globalScope, handleViewportContentUpdated, handleExposure, beforeUnloadHandler_1, navigateObservable, popstateHandler_1, originalPushState_1, allowlist, actionClickAllowlist, messenger;\n var _a;\n return __generator(this, function (_b) {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return [2 /*return*/];\n }\n pageViewEndFired = false;\n lastScroll = { maxX: undefined, maxY: undefined };\n // Fetch remote config for pageActions in a non-blocking manner\n if (config.fetchRemoteConfig) {\n if (!config.remoteConfigClient) {\n // TODO(xinyi): Diagnostics.recordEvent\n config.loggerProvider.debug('Remote config client is not provided, skipping remote config fetch');\n }\n else {\n config.remoteConfigClient.subscribe('configs.analyticsSDK.pageActions', 'all', function (remoteConfig) {\n recomputePageActionsData(remoteConfig);\n });\n }\n }\n shouldTrackEvent = createShouldTrackEvent(options, options.cssSelectorAllowlist);\n shouldTrackActionClick = createShouldTrackEvent(options, options.actionClickAllowlist);\n allObservables = createObservables();\n clickTrackingSubscription = trackClicks({\n allObservables: allObservables,\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n evaluateTriggers: evaluateTriggers.evaluate.bind(evaluateTriggers),\n });\n subscriptions.push(clickTrackingSubscription);\n changeSubscription = trackChange({\n allObservables: allObservables,\n getEventProperties: function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return dataExtractor.getEventProperties.apply(dataExtractor, __spreadArray(__spreadArray([], __read(args), false), [dataAttributePrefix], false));\n },\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n evaluateTriggers: evaluateTriggers.evaluate.bind(evaluateTriggers),\n });\n subscriptions.push(changeSubscription);\n actionClickSubscription = trackActionClick({\n allObservables: allObservables,\n options: options,\n getEventProperties: function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return dataExtractor.getEventProperties.apply(dataExtractor, __spreadArray(__spreadArray([], __read(args), false), [dataAttributePrefix], false));\n },\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n shouldTrackActionClick: shouldTrackActionClick,\n });\n if (actionClickSubscription) {\n subscriptions.push(actionClickSubscription);\n }\n scrollTracker = trackScroll({\n allObservables: allObservables,\n amplitude: amplitude,\n });\n subscriptions.push(scrollTracker);\n trackers = {};\n globalScope = getGlobalScope();\n handleViewportContentUpdated = function (isPageEnd) {\n if (isPageEnd && pageViewEndFired) {\n return;\n }\n setTimeout(function () {\n pageViewEndFired = false;\n }, 100);\n pageViewEndFired = true;\n fireViewportContentUpdated({\n amplitude: amplitude,\n scrollTracker: scrollTracker,\n currentElementExposed: currentElementExposed,\n elementExposedForPage: elementExposedForPage,\n exposureTracker: trackers.exposure,\n isPageEnd: isPageEnd,\n lastScroll: lastScroll,\n });\n };\n handleExposure = function (elementPath) {\n onExposure(elementPath, elementExposedForPage, currentElementExposed, handleViewportContentUpdated);\n };\n if (isViewportContentUpdatedEnabled) {\n trackers.exposure = trackExposure({\n allObservables: allObservables,\n onExposure: handleExposure,\n dataExtractor: dataExtractor,\n exposureDuration: resolvedExposureDuration,\n });\n if (trackers.exposure) {\n subscriptions.push(trackers.exposure);\n }\n beforeUnloadHandler_1 = function () {\n handleViewportContentUpdated(true);\n };\n /* istanbul ignore next */\n globalScope === null || globalScope === void 0 ? void 0 : globalScope.addEventListener('beforeunload', beforeUnloadHandler_1);\n beforeUnloadCleanup = function () {\n /* istanbul ignore next */\n globalScope === null || globalScope === void 0 ? void 0 : globalScope.removeEventListener('beforeunload', beforeUnloadHandler_1);\n };\n // Ensure cleanup on teardown as well\n subscriptions.push({ unsubscribe: function () { return beforeUnloadCleanup(); } });\n navigateObservable = allObservables[ObservablesEnum.NavigateObservable];\n if (navigateObservable) {\n subscriptions.push(navigateObservable.subscribe(function () {\n handleViewportContentUpdated(true);\n }));\n }\n else if (globalScope) {\n popstateHandler_1 = function () {\n handleViewportContentUpdated(true);\n };\n /* istanbul ignore next */\n // Fallback for SPA tracking when Navigation API is not available\n globalScope.addEventListener('popstate', popstateHandler_1);\n originalPushState_1 = globalScope.history.pushState;\n if (globalScope.history && originalPushState_1) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(originalPushState_1, {\n apply: function (target, thisArg, _a) {\n var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];\n target.apply(thisArg, [state, unused, url]);\n handleViewportContentUpdated(true);\n },\n });\n }\n subscriptions.push({\n unsubscribe: function () {\n /* istanbul ignore next */\n globalScope.removeEventListener('popstate', popstateHandler_1);\n /* istanbul ignore next */\n if (globalScope.history && originalPushState_1) {\n globalScope.history.pushState = originalPushState_1;\n }\n },\n });\n }\n }\n /* istanbul ignore next */\n (_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log(\"\".concat(name, \" has been successfully added.\"));\n // Setup visual tagging and background capture on the shared messenger singleton.\n // Using the singleton ensures a single message listener per page, even when\n // session-replay is also loaded.\n if (window.opener && visualTaggingOptions.enabled) {\n allowlist = options.cssSelectorAllowlist;\n actionClickAllowlist = options.actionClickAllowlist;\n messenger = getOrCreateWindowMessenger();\n enableVisualTagging(messenger, {\n dataExtractor: dataExtractor,\n isElementSelectable: createShouldTrackEvent(options, __spreadArray(__spreadArray([], __read(allowlist), false), __read(actionClickAllowlist), false)),\n cssSelectorAllowlist: allowlist,\n actionClickAllowlist: actionClickAllowlist,\n });\n enableBackgroundCapture(messenger);\n /* istanbul ignore next */\n messenger.setup(__assign({ logger: config === null || config === void 0 ? void 0 : config.loggerProvider }, ((config === null || config === void 0 ? void 0 : config.serverZone) && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] })));\n }\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n var subscriptions_1, subscriptions_1_1, subscription;\n var e_1, _a;\n return __generator(this, function (_b) {\n try {\n for (subscriptions_1 = __values(subscriptions), subscriptions_1_1 = subscriptions_1.next(); !subscriptions_1_1.done; subscriptions_1_1 = subscriptions_1.next()) {\n subscription = subscriptions_1_1.value;\n subscription.unsubscribe();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (subscriptions_1_1 && !subscriptions_1_1.done && (_a = subscriptions_1.return)) _a.call(subscriptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=autocapture-plugin.js.map","import { __assign } from \"tslib\";\nimport { merge, asyncMap } from '@amplitude/analytics-core';\nimport { filterOutNonTrackableEvents, MouseButton } from '../helpers';\nimport { AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT } from '../constants';\nvar DEAD_CLICK_TIMEOUT = 3000; // 3 seconds to wait for an activity to happen\nvar CHANGE_EVENTS = ['mutation', 'navigate'];\nexport function trackDeadClick(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, getEventProperties = _a.getEventProperties, shouldTrackDeadClick = _a.shouldTrackDeadClick;\n var clickObservable = allObservables.clickObservable, mutationObservable = allObservables.mutationObservable, navigateObservable = allObservables.navigateObservable;\n var filteredClickObservable = clickObservable.filter(function (click) {\n return (filterOutNonTrackableEvents(click) &&\n shouldTrackDeadClick('click', click.closestTrackedAncestor) &&\n click.event.target instanceof Element &&\n click.event.target.closest('a[target=\"_blank\"]') === null &&\n click.event.button === MouseButton.LEFT_OR_TOUCH_CONTACT);\n });\n /* istanbul ignore next */\n var changeObservables = navigateObservable ? merge(mutationObservable, navigateObservable) : mutationObservable;\n var clicksAndChangeObservable = merge(filteredClickObservable, changeObservables);\n var deadClickTimer = null;\n var deadClickObservable = asyncMap(clicksAndChangeObservable, function (event) {\n if (deadClickTimer && CHANGE_EVENTS.includes(event.type)) {\n // a mutation or navigation means it's not a dead click, so clear the timer\n clearTimeout(deadClickTimer);\n deadClickTimer = null;\n return Promise.resolve(null);\n }\n else if (event.type === 'click') {\n // if a dead click is already on-deck, return null.\n // this throttles dead clicks events so no more than one dead click event\n // is tracked per every DEAD_CLICK_TIMEOUT ms.\n if (deadClickTimer) {\n return Promise.resolve(null);\n }\n return new Promise(function (resolve) {\n deadClickTimer = setTimeout(function () {\n resolve(event);\n deadClickTimer = null;\n }, DEAD_CLICK_TIMEOUT);\n });\n }\n // unreachable code, but needed to satisfy the type checker\n return Promise.resolve(null);\n });\n return deadClickObservable.subscribe(function (actionClick) {\n if (!actionClick)\n return;\n var deadClickEvent = {\n '[Amplitude] X': actionClick.event.clientX,\n '[Amplitude] Y': actionClick.event.clientY,\n };\n amplitude.track(AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT, __assign(__assign({}, getEventProperties('click', actionClick.closestTrackedAncestor)), deadClickEvent), { time: actionClick.timestamp });\n });\n}\n//# sourceMappingURL=track-dead-click.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { asyncMap, DEFAULT_RAGE_CLICK_THRESHOLD, DEFAULT_RAGE_CLICK_WINDOW_MS, DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD, } from '@amplitude/analytics-core';\nimport { AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT } from '../constants';\nvar RAGE_CLICK_THRESHOLD = DEFAULT_RAGE_CLICK_THRESHOLD;\nvar RAGE_CLICK_WINDOW_MS = DEFAULT_RAGE_CLICK_WINDOW_MS;\nvar RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD = DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD;\nfunction addCoordinates(regionBox, click) {\n var _a, _b, _c, _d;\n var _e = click.event, pageX = _e.pageX, pageY = _e.pageY;\n regionBox.yMin = Math.min((_a = regionBox.yMin) !== null && _a !== void 0 ? _a : pageY, pageY);\n regionBox.yMax = Math.max((_b = regionBox.yMax) !== null && _b !== void 0 ? _b : pageY, pageY);\n regionBox.xMin = Math.min((_c = regionBox.xMin) !== null && _c !== void 0 ? _c : pageX, pageX);\n regionBox.xMax = Math.max((_d = regionBox.xMax) !== null && _d !== void 0 ? _d : pageX, pageX);\n regionBox.isOutOfBounds =\n regionBox.yMax - regionBox.yMin > RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD ||\n regionBox.xMax - regionBox.xMin > RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD;\n}\nfunction getRageClickAnalyticsEvent(clickWindow) {\n /* istanbul ignore if */\n if (clickWindow.length === 0) {\n return null;\n }\n var firstClick = clickWindow[0];\n var lastClick = clickWindow[clickWindow.length - 1];\n var rageClickEvent = __assign({ '[Amplitude] Begin Time': new Date(firstClick.timestamp).toISOString(), '[Amplitude] End Time': new Date(lastClick.timestamp).toISOString(), '[Amplitude] Duration': lastClick.timestamp - firstClick.timestamp, '[Amplitude] Clicks': clickWindow.map(function (click) { return ({\n X: click.event.pageX,\n Y: click.event.pageY,\n Time: click.timestamp,\n }); }), '[Amplitude] Click Count': clickWindow.length }, firstClick.targetElementProperties);\n return { rageClickEvent: rageClickEvent, time: firstClick.timestamp };\n}\nfunction isClickOutsideRageClickWindow(clickWindow, click) {\n var firstIndex = Math.max(0, clickWindow.length - RAGE_CLICK_THRESHOLD + 1);\n var firstClick = clickWindow[firstIndex];\n return click.timestamp - firstClick.timestamp >= RAGE_CLICK_WINDOW_MS;\n}\nfunction isNewElement(clickWindow, click) {\n return (clickWindow.length > 0 &&\n clickWindow[clickWindow.length - 1].closestTrackedAncestor !== click.closestTrackedAncestor);\n}\nexport function trackRageClicks(_a) {\n var _this = this;\n var amplitude = _a.amplitude, allObservables = _a.allObservables, shouldTrackRageClick = _a.shouldTrackRageClick;\n var clickObservable = allObservables.clickObservable, selectionObservable = allObservables.selectionObservable;\n // Keep track of all clicks within the sliding window\n var clickWindow = [];\n // Keep track of the region box for all clicks, to determine when a rage click is out of bounds\n var clickBoundingBox = {};\n var pendingRageClick = null;\n // helper function to reset the click window and region box\n function resetClickWindow(click) {\n clickWindow = [];\n clickBoundingBox = {};\n if (click) {\n addCoordinates(clickBoundingBox, click);\n clickWindow.push(click);\n }\n }\n var rageClickObservable = asyncMap(clickObservable.filter(function (click) { return shouldTrackRageClick('click', click.closestTrackedAncestor); }), function (click) { return __awaiter(_this, void 0, void 0, function () {\n var resolutionValue;\n return __generator(this, function (_a) {\n // add this click's coordinates to the bounding box\n addCoordinates(clickBoundingBox, click);\n resolutionValue = null;\n // if current click is:\n // 1. first click in the window\n // 2. on a new element\n // 3. outside the rage click time window\n // 4. out of bounds\n // then start a new click window\n if (clickWindow.length === 0 ||\n isNewElement(clickWindow, click) ||\n isClickOutsideRageClickWindow(clickWindow, click) ||\n clickBoundingBox.isOutOfBounds) {\n // if there was a previous Rage Click Event on deck, then send it\n if (pendingRageClick) {\n resolutionValue = getRageClickAnalyticsEvent(clickWindow);\n }\n resetClickWindow(click);\n }\n else {\n clickWindow.push(click);\n }\n // if there was a previous Rage Click Event on deck, then resolve it\n if (pendingRageClick) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n clearTimeout(pendingRageClick.timerId);\n pendingRageClick.resolve(resolutionValue);\n pendingRageClick = null;\n }\n // if we have enough clicks to be a rage click, set a timout to trigger the rage\n // click event after the time threshold is reached.\n // This will be cancelled if a new click is tracked within the time threshold.\n if (clickWindow.length >= RAGE_CLICK_THRESHOLD) {\n return [2 /*return*/, new Promise(function (resolve) {\n pendingRageClick = {\n resolve: resolve,\n timerId: setTimeout(function () {\n resolve(getRageClickAnalyticsEvent(clickWindow));\n }, RAGE_CLICK_WINDOW_MS),\n };\n })];\n }\n return [2 /*return*/, null];\n });\n }); });\n // reset the click window when a selection change occurs\n /* istanbul ignore next */\n var selectionSubscription = selectionObservable === null || selectionObservable === void 0 ? void 0 : selectionObservable.subscribe(function () {\n resetClickWindow();\n });\n var rageClickSubscription = rageClickObservable.subscribe(function (data) {\n /* istanbul ignore if */\n if (data === null) {\n return;\n }\n amplitude.track(AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT, data.rageClickEvent, { time: data.time });\n });\n return {\n unsubscribe: function () {\n rageClickSubscription.unsubscribe();\n /* istanbul ignore next */\n selectionSubscription === null || selectionSubscription === void 0 ? void 0 : selectionSubscription.unsubscribe();\n },\n };\n}\n//# sourceMappingURL=track-rage-click.js.map","import { __assign } from \"tslib\";\nimport { filterOutNonTrackableEvents, MouseButton, } from '../helpers';\nimport { merge } from '@amplitude/analytics-core';\nimport { AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT } from '../constants';\nvar ERROR_CLICK_TIMEOUT = 2000; // 2 seconds to wait for an error to happen\nexport function trackErrorClicks(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, shouldTrackErrorClick = _a.shouldTrackErrorClick;\n var clickObservable = allObservables.clickObservable, browserErrorObservable = allObservables.browserErrorObservable;\n var filteredClickObservable = clickObservable.filter(function (click) {\n return (filterOutNonTrackableEvents(click) &&\n shouldTrackErrorClick('click', click.closestTrackedAncestor) &&\n click.event.target instanceof Element &&\n click.event.target.closest('a[target=\"_blank\"]') === null &&\n click.event.button === MouseButton.LEFT_OR_TOUCH_CONTACT);\n });\n var errorClickTimer = null;\n var latestClickEvent = null;\n var clearClickTimer = function () {\n if (errorClickTimer !== null) {\n clearTimeout(errorClickTimer);\n errorClickTimer = null;\n }\n latestClickEvent = null;\n };\n return merge(filteredClickObservable, browserErrorObservable).subscribe(function (event) {\n var _a;\n if (event.type === 'click') {\n clearClickTimer();\n latestClickEvent = event;\n errorClickTimer = setTimeout(clearClickTimer, ERROR_CLICK_TIMEOUT);\n return;\n }\n if (event.type === 'error' && latestClickEvent) {\n amplitude.track(AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT, __assign((_a = {}, _a['[Amplitude] Kind'] = event.event.kind, _a['[Amplitude] Message'] = event.event.message, _a['[Amplitude] Stack'] = event.event.stack, _a['[Amplitude] Filename'] = event.event.filename, _a['[Amplitude] Line Number'] = event.event.lineNumber, _a['[Amplitude] Column Number'] = event.event.columnNumber, _a), latestClickEvent.targetElementProperties));\n clearClickTimer();\n }\n });\n}\n//# sourceMappingURL=track-error-click.js.map","import { Observable } from '@amplitude/analytics-core';\nimport { AMPLITUDE_THRASHED_CURSOR_EVENT } from '../constants';\nimport { isUrlAllowed } from '../helpers';\nvar Direction;\n(function (Direction) {\n Direction[\"INCREASING\"] = \"increasing\";\n Direction[\"DECREASING\"] = \"decreasing\";\n})(Direction || (Direction = {}));\nvar Axis;\n(function (Axis) {\n Axis[\"X\"] = \"x\";\n Axis[\"Y\"] = \"y\";\n})(Axis || (Axis = {}));\nexport var createMouseDirectionChangeObservable = function (_a) {\n var allWindowObservables = _a.allWindowObservables;\n var mouseMoveObservable = allWindowObservables.mouseMoveObservable;\n return new Observable(function (observer) {\n var lastPosition = null;\n var xDirection = null;\n var yDirection = null;\n return mouseMoveObservable.subscribe(function (event) {\n var currentPosition = { x: event.clientX, y: event.clientY };\n if (lastPosition === null) {\n lastPosition = currentPosition;\n return;\n }\n if (currentPosition.x > lastPosition.x) {\n if (xDirection === Direction.DECREASING) {\n observer.next(Axis.X);\n }\n xDirection = Direction.INCREASING;\n }\n else if (currentPosition.x < lastPosition.x) {\n if (xDirection === Direction.INCREASING) {\n observer.next(Axis.X);\n }\n xDirection = Direction.DECREASING;\n }\n if (currentPosition.y > lastPosition.y) {\n if (yDirection === Direction.DECREASING) {\n observer.next(Axis.Y);\n }\n yDirection = Direction.INCREASING;\n }\n else if (currentPosition.y < lastPosition.y) {\n if (yDirection === Direction.INCREASING) {\n observer.next(Axis.Y);\n }\n yDirection = Direction.DECREASING;\n }\n lastPosition = currentPosition;\n });\n });\n};\nfunction addDirectionChange(directionChangeSeries) {\n var now = +Date.now();\n directionChangeSeries.startTime = directionChangeSeries.startTime || now;\n // add this direction change to the series (fixed length array to avoid memory leaks)\n var changes = directionChangeSeries.changes, changesThreshold = directionChangeSeries.changesThreshold;\n changes.push(now);\n if (changes.length > changesThreshold)\n changes.shift();\n}\n// checks if there are enough direction changes within window + threshold\n// for it to be considered a thrashed cursor\nfunction isThrashedCursor(directionChanges) {\n var changes = directionChanges.changes, changesThreshold = directionChanges.changesThreshold, thresholdMs = directionChanges.thresholdMs;\n if (changes.length < changesThreshold)\n return false;\n var delta = changes[changes.length - 1] - changes[0];\n return delta < thresholdMs;\n}\nfunction resetDirectionChangeSeries(directionChangeSeries) {\n directionChangeSeries.changes = [];\n directionChangeSeries.startTime = undefined;\n}\n// if the time between first and last change is greater than the threshold,\n// shift the window to the right until it is below the threshold\nfunction adjustWindow(directionChanges) {\n var changes = directionChanges.changes, thresholdMs = directionChanges.thresholdMs;\n // find the first change that is within the threshold\n var leftPtr = 0;\n var lastChange = changes[changes.length - 1];\n for (; leftPtr < changes.length; leftPtr++) {\n var delta = lastChange - changes[leftPtr];\n if (delta < thresholdMs) {\n break;\n }\n }\n if (leftPtr === 0)\n return;\n directionChanges.startTime = changes[leftPtr];\n directionChanges.changes.splice(0, leftPtr);\n}\nfunction getPendingThrashedCursor(directionChangesX, directionChangesY) {\n var startTime = undefined;\n if (isThrashedCursor(directionChangesX)) {\n startTime = directionChangesX.startTime;\n }\n if (isThrashedCursor(directionChangesY)) {\n var startTimeY = directionChangesY.startTime;\n if (startTimeY && (!startTime || startTimeY < startTime)) {\n startTime = startTimeY;\n }\n }\n return startTime;\n}\nvar DEFAULT_THRESHOLD = 20;\nvar DEFAULT_WINDOW_MS = 2000;\nexport var createThrashedCursorObservable = function (_a) {\n var mouseDirectionChangeObservable = _a.mouseDirectionChangeObservable, _b = _a.directionChanges, directionChanges = _b === void 0 ? DEFAULT_THRESHOLD : _b, _c = _a.thresholdMs, thresholdMs = _c === void 0 ? DEFAULT_WINDOW_MS : _c;\n return new Observable(function (observer) {\n var xDirectionChanges = { changes: [], changesThreshold: directionChanges, thresholdMs: thresholdMs };\n var yDirectionChanges = { changes: [], changesThreshold: directionChanges, thresholdMs: thresholdMs };\n var pendingThrashedCursor = undefined;\n var timer = null;\n function emitPendingThrashedCursor() {\n if (pendingThrashedCursor !== undefined) {\n observer.next(pendingThrashedCursor);\n pendingThrashedCursor = undefined;\n // reset window\n if (timer !== null)\n clearTimeout(timer);\n resetDirectionChangeSeries(xDirectionChanges);\n resetDirectionChangeSeries(yDirectionChanges);\n }\n }\n return mouseDirectionChangeObservable.subscribe(function (axis) {\n if (timer !== null)\n clearTimeout(timer);\n addDirectionChange(axis === Axis.X ? xDirectionChanges : yDirectionChanges);\n var nextPendingThrashedCursor = getPendingThrashedCursor(xDirectionChanges, yDirectionChanges);\n if (nextPendingThrashedCursor) {\n // if we're in a thrashed cursor window, debounce it for \"thresholdMs\" duration\n // this is so that we do not restart the window if more direction changes are\n // detected in this series\n pendingThrashedCursor = pendingThrashedCursor || nextPendingThrashedCursor;\n timer = setTimeout(function () {\n emitPendingThrashedCursor();\n timer = null;\n }, thresholdMs);\n }\n else {\n emitPendingThrashedCursor();\n }\n adjustWindow(xDirectionChanges);\n adjustWindow(yDirectionChanges);\n /* istanbul ignore next */\n return function () {\n /* istanbul ignore if */\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n };\n });\n });\n};\nexport var trackThrashedCursor = function (_a) {\n var amplitude = _a.amplitude, options = _a.options, allObservables = _a.allObservables, _b = _a.directionChanges, directionChanges = _b === void 0 ? DEFAULT_THRESHOLD : _b, _c = _a.thresholdMs, thresholdMs = _c === void 0 ? DEFAULT_WINDOW_MS : _c;\n var mouseDirectionChangeObservable = createMouseDirectionChangeObservable({ allWindowObservables: allObservables });\n var thrashedCursorObservable = createThrashedCursorObservable({\n mouseDirectionChangeObservable: mouseDirectionChangeObservable,\n directionChanges: directionChanges,\n thresholdMs: thresholdMs,\n });\n return thrashedCursorObservable.subscribe(function (time) {\n if (!isUrlAllowed(options)) {\n return;\n }\n amplitude.track(AMPLITUDE_THRASHED_CURSOR_EVENT, undefined, { time: time });\n });\n};\n//# sourceMappingURL=track-thrashed-cursor.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { DEFAULT_DATA_ATTRIBUTE_PREFIX, multicast, Observable, DEFAULT_RAGE_CLICK_ALLOWLIST, DEFAULT_DEAD_CLICK_ALLOWLIST, DEFAULT_ERROR_CLICK_ALLOWLIST, } from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { createShouldTrackEvent } from './helpers';\nimport { trackDeadClick } from './autocapture/track-dead-click';\nimport { trackRageClicks } from './autocapture/track-rage-click';\nimport { ObservablesEnum } from './autocapture-plugin';\nimport { createClickObservable, createErrorObservable, createMutationObservable, createMouseMoveObservable, } from './observables';\nimport { DataExtractor } from './data-extractor';\nimport { trackErrorClicks } from './autocapture/track-error-click';\nimport { trackThrashedCursor } from './autocapture/track-thrashed-cursor';\n/**\n * Helper function to extract the css selector allowlist\n * from the frustration interactions options for a specific\n * autocapture feature.\n */\nfunction getCssSelectorAllowlist(options, attribute, defaultAllowlist, enabled) {\n if (!enabled) {\n return [];\n }\n var config = options[attribute];\n if (typeof config === 'object' &&\n config !== null &&\n 'cssSelectorAllowlist' in config &&\n Array.isArray(config.cssSelectorAllowlist)) {\n return config.cssSelectorAllowlist;\n }\n return defaultAllowlist;\n}\nvar MINIMUM_THRASHED_CURSOR_DIRECTION_CHANGES = 5;\nvar MAXIMUM_THRASHED_CURSOR_THRESHOLD = 4000;\nexport var frustrationPlugin = function (options) {\n var _a;\n if (options === void 0) { options = {}; }\n var name = constants.FRUSTRATION_PLUGIN_NAME;\n var type = 'enrichment';\n var subscriptions = [];\n var isErrorClicksEnabled = options.errorClicks !== false;\n // if errorClicks is not defined, disable it\n // change this once it moves out of @experimental\n if (!options.errorClicks) {\n isErrorClicksEnabled = false;\n }\n // Check if each feature is enabled\n var deadClicksEnabled = options.deadClicks !== false && options.deadClicks !== null;\n var rageClicksEnabled = options.rageClicks !== false && options.rageClicks !== null;\n var thrashedCursorEnabled = options.thrashedCursor !== false && options.thrashedCursor !== null;\n if (!options.thrashedCursor) {\n thrashedCursorEnabled = false;\n }\n // Get CSS selectors for enabled features\n var rageCssSelectors = getCssSelectorAllowlist(options, 'rageClicks', DEFAULT_RAGE_CLICK_ALLOWLIST, rageClicksEnabled);\n var deadCssSelectors = getCssSelectorAllowlist(options, 'deadClicks', DEFAULT_DEAD_CLICK_ALLOWLIST, deadClicksEnabled);\n var errorCssSelectors = getCssSelectorAllowlist(options, 'errorClicks', DEFAULT_ERROR_CLICK_ALLOWLIST, isErrorClicksEnabled);\n var dataAttributePrefix = (_a = options.dataAttributePrefix) !== null && _a !== void 0 ? _a : DEFAULT_DATA_ATTRIBUTE_PREFIX;\n var dataExtractor = new DataExtractor(options);\n // combine the selector lists from enabled features to determine which clicked elements should be filtered\n var combinedCssSelectors = __spreadArray([], __read(new Set(__spreadArray(__spreadArray(__spreadArray([], __read(rageCssSelectors), false), __read(deadCssSelectors), false), __read(errorCssSelectors), false))), false);\n // Create observables on events on the window\n var createObservables = function () {\n var _a;\n var clickObservable = multicast(createClickObservable('pointerdown').map(function (click) {\n return dataExtractor.addAdditionalEventProperties(click, 'click', combinedCssSelectors, dataAttributePrefix, true);\n }));\n var browserErrorObservables = multicast(createErrorObservable().map(function (error) {\n return dataExtractor.addTypeAndTimestamp(error, 'error');\n }));\n var enrichedMutationObservable = multicast(createMutationObservable().map(function (mutation) {\n return dataExtractor.addAdditionalEventProperties(mutation, 'mutation', combinedCssSelectors, dataAttributePrefix);\n }));\n var enrichedNavigateObservable;\n if (window.navigation) {\n var navigateObservable = new Observable(function (observer) {\n var handler = function (event) {\n observer.next(__assign(__assign({}, event), { type: 'navigate' }));\n };\n window.navigation.addEventListener('navigate', handler);\n return function () {\n window.navigation.removeEventListener('navigate', handler);\n };\n });\n enrichedNavigateObservable = multicast(navigateObservable.map(function (navigate) {\n return dataExtractor.addAdditionalEventProperties(navigate, 'navigate', combinedCssSelectors, dataAttributePrefix);\n }));\n }\n var selectionObservable = multicast(new Observable(function (observer) {\n var handler = function () {\n var el = document.activeElement;\n // handle input and textarea\n // if the selectionStart and selectionEnd are the same, it means\n // nothing is selected (collapsed) and the cursor position is one point\n if (el && (el.tagName === 'TEXTAREA' || el.tagName === 'INPUT')) {\n var start = void 0;\n var end = void 0;\n try {\n start = el.selectionStart;\n end = el.selectionEnd;\n if (start === end)\n return; // collapsed\n }\n catch (error) {\n // input that doesn't support selectionStart/selectionEnd (like checkbox)\n // do nothing here\n return;\n }\n return observer.next();\n }\n // handle non-input elements\n // non-input elements have an attribute called \"isCollapsed\" which\n // if true, indicates there \"is currently not any text selected\"\n // (see https://developer.mozilla.org/en-US/docs/Web/API/Selection/isCollapsed)\n var selection = window.getSelection();\n if (!selection || selection.isCollapsed)\n return;\n return observer.next();\n };\n window.document.addEventListener('selectionchange', handler);\n return function () {\n window.document.removeEventListener('selectionchange', handler);\n };\n }));\n var mouseMoveObservable = multicast(createMouseMoveObservable());\n return _a = {},\n _a[ObservablesEnum.ClickObservable] = clickObservable,\n _a[ObservablesEnum.MutationObservable] = enrichedMutationObservable,\n _a[ObservablesEnum.NavigateObservable] = enrichedNavigateObservable,\n _a[ObservablesEnum.BrowserErrorObservable] = browserErrorObservables,\n _a[ObservablesEnum.SelectionObservable] = selectionObservable,\n _a[ObservablesEnum.MouseMoveObservable] = mouseMoveObservable,\n _a;\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var allObservables, shouldTrackRageClick, rageClickSubscription, shouldTrackDeadClick, deadClickSubscription, shouldTrackErrorClick, errorClickSubscription, directionChanges, thresholdMs, thrashedCursorSubscription;\n var _a;\n return __generator(this, function (_b) {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return [2 /*return*/];\n }\n allObservables = createObservables();\n // Create subscriptions only for enabled features\n if (rageClicksEnabled) {\n shouldTrackRageClick = createShouldTrackEvent(options, rageCssSelectors);\n rageClickSubscription = trackRageClicks({\n allObservables: allObservables,\n amplitude: amplitude,\n shouldTrackRageClick: shouldTrackRageClick,\n });\n subscriptions.push(rageClickSubscription);\n }\n if (deadClicksEnabled) {\n shouldTrackDeadClick = createShouldTrackEvent(options, deadCssSelectors);\n deadClickSubscription = trackDeadClick({\n amplitude: amplitude,\n allObservables: allObservables,\n getEventProperties: function (actionType, element) {\n return dataExtractor.getEventProperties(actionType, element, dataAttributePrefix);\n },\n shouldTrackDeadClick: shouldTrackDeadClick,\n });\n subscriptions.push(deadClickSubscription);\n }\n if (isErrorClicksEnabled) {\n shouldTrackErrorClick = createShouldTrackEvent(options, errorCssSelectors);\n errorClickSubscription = trackErrorClicks({\n amplitude: amplitude,\n allObservables: allObservables,\n shouldTrackErrorClick: shouldTrackErrorClick,\n });\n subscriptions.push(errorClickSubscription);\n }\n if (thrashedCursorEnabled) {\n directionChanges = void 0, thresholdMs = void 0;\n if (typeof options.thrashedCursor === 'object') {\n directionChanges = options.thrashedCursor.directionChanges;\n thresholdMs = options.thrashedCursor.threshold;\n if (directionChanges && directionChanges < MINIMUM_THRASHED_CURSOR_DIRECTION_CHANGES) {\n config.loggerProvider.warn(\"'thrashedCursor.directionChanges' of \".concat(directionChanges, \" is below the minimum of \").concat(MINIMUM_THRASHED_CURSOR_DIRECTION_CHANGES, \", setting to \").concat(MINIMUM_THRASHED_CURSOR_DIRECTION_CHANGES));\n directionChanges = MINIMUM_THRASHED_CURSOR_DIRECTION_CHANGES;\n }\n if (thresholdMs && thresholdMs > MAXIMUM_THRASHED_CURSOR_THRESHOLD) {\n config.loggerProvider.warn(\"'thrashedCursor.threshold' of \".concat(thresholdMs, \" is above the maximum of \").concat(MAXIMUM_THRASHED_CURSOR_THRESHOLD, \", setting to \").concat(MAXIMUM_THRASHED_CURSOR_THRESHOLD));\n thresholdMs = MAXIMUM_THRASHED_CURSOR_THRESHOLD;\n }\n }\n thrashedCursorSubscription = trackThrashedCursor({\n amplitude: amplitude,\n options: options,\n allObservables: allObservables,\n directionChanges: directionChanges,\n thresholdMs: thresholdMs,\n });\n subscriptions.push(thrashedCursorSubscription);\n }\n /* istanbul ignore next */\n (_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log(\"\".concat(name, \" has been successfully added.\"));\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n var subscriptions_1, subscriptions_1_1, subscription;\n var e_1, _a;\n return __generator(this, function (_b) {\n try {\n for (subscriptions_1 = __values(subscriptions), subscriptions_1_1 = subscriptions_1.next(); !subscriptions_1_1.done; subscriptions_1_1 = subscriptions_1.next()) {\n subscription = subscriptions_1_1.value;\n subscription.unsubscribe();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (subscriptions_1_1 && !subscriptions_1_1.done && (_a = subscriptions_1.return)) _a.call(subscriptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=frustration-plugin.js.map","export var PLUGIN_NAME = '@amplitude/plugin-network-capture-browser';\nexport var AMPLITUDE_NETWORK_REQUEST_EVENT = '[Amplitude] Network Request';\n// TODO: when @experimental is removed from responseHeaders and requestHeaders,\n// remove this constant or set it to false\nexport var IS_HEADER_CAPTURE_EXPERIMENTAL = true;\n//# sourceMappingURL=constants.js.map","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { getGlobalScope, isUrlMatchAllowlist, SAFE_HEADERS, } from '@amplitude/analytics-core';\nimport { AMPLITUDE_NETWORK_REQUEST_EVENT, IS_HEADER_CAPTURE_EXPERIMENTAL } from './constants';\nvar DEFAULT_STATUS_CODE_RANGE = '500-599';\nfunction wildcardMatch(str, pattern) {\n // Escape all regex special characters except for *\n var escapedPattern = pattern.replace(/[-[\\]{}()+?.,\\\\^$|#\\s]/g, '\\\\$&');\n // Replace * with .*\n var regexPattern = '^' + escapedPattern.replace(/\\*/g, '.*') + '$';\n var regex = new RegExp(regexPattern);\n return regex.test(str);\n}\nfunction isStatusCodeInRange(statusCode, range) {\n var e_1, _a;\n var ranges = range.split(',');\n try {\n for (var ranges_1 = __values(ranges), ranges_1_1 = ranges_1.next(); !ranges_1_1.done; ranges_1_1 = ranges_1.next()) {\n var r = ranges_1_1.value;\n var _b = __read(r.split('-').map(Number), 2), start = _b[0], end = _b[1];\n if (statusCode === start && end === undefined) {\n return true;\n }\n if (statusCode >= start && statusCode <= end) {\n return true;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (ranges_1_1 && !ranges_1_1.done && (_a = ranges_1.return)) _a.call(ranges_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n}\nfunction isCaptureRuleMatch(rule, hostname, status, url, method) {\n // check if the host is in the allowed hosts\n if (rule.hosts && !rule.hosts.find(function (host) { return wildcardMatch(hostname, host); })) {\n return;\n }\n // check if the URL is in the allowed URL patterns\n if (url && rule.urls && !isUrlMatchAllowlist(url, rule.urls)) {\n return;\n }\n // check if the method is in the allowed methods\n if (method &&\n rule.methods &&\n !rule.methods.find(function (allowedMethod) { return method.toLowerCase() === allowedMethod.toLowerCase() || allowedMethod === '*'; })) {\n return;\n }\n // check if the status code is in the allowed range\n if (status || status === 0) {\n var statusCodeRange = rule.statusCodeRange || DEFAULT_STATUS_CODE_RANGE;\n if (!isStatusCodeInRange(status, statusCodeRange)) {\n return false;\n }\n }\n return true;\n}\nfunction parseUrl(url) {\n var _a;\n if (!url) {\n return;\n }\n try {\n /* istanbul ignore next */\n var currentHref = (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.location.href;\n var urlObj = new URL(url, currentHref);\n var query = urlObj.searchParams.toString();\n var fragment = urlObj.hash.replace('#', '');\n var href = urlObj.href;\n var host = urlObj.host;\n urlObj.hash = '';\n urlObj.search = '';\n var hrefWithoutQueryOrHash = urlObj.href;\n return { query: query, fragment: fragment, href: href, hrefWithoutQueryOrHash: hrefWithoutQueryOrHash, host: host };\n }\n catch (e) {\n /* istanbul ignore next */\n return;\n }\n}\nfunction isAmplitudeNetworkRequestEvent(host, requestWrapper) {\n if (host.includes('amplitude.com')) {\n try {\n var body = requestWrapper.body;\n if (typeof body !== 'string') {\n return false;\n }\n var bodyObj = JSON.parse(body);\n var events = bodyObj.events;\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access */\n if (events.find(function (event) { return event.event_type === AMPLITUDE_NETWORK_REQUEST_EVENT; })) {\n return true;\n }\n }\n catch (e) {\n // do nothing\n }\n }\n return false;\n}\n/**\n * Takes a user provided header capture rule and returns a\n * HeaderCaptureRule object that sets proper default values.\n *\n * @param rule - The header capture rule to parse.\n * @returns A HeaderCaptureRule object.\n */\nexport function parseHeaderCaptureRule(rule) {\n if (typeof rule !== 'object' || rule === null) {\n // if rule is truthy or undefined, return SAFE_HEADERS\n if (rule) {\n return __spreadArray([], __read(SAFE_HEADERS), false);\n }\n else if (rule === undefined) {\n /* istanbul ignore next */\n var res = IS_HEADER_CAPTURE_EXPERIMENTAL ? undefined : __spreadArray([], __read(SAFE_HEADERS), false);\n return res;\n }\n return;\n }\n // if the rule is defined but empty, return undefined\n if (rule.length === 0) {\n return;\n }\n return rule;\n}\nfunction isBodyCaptureRuleEmpty(rule) {\n var _a, _b;\n /* istanbul ignore next */\n return !((_a = rule === null || rule === void 0 ? void 0 : rule.allowlist) === null || _a === void 0 ? void 0 : _a.length) && !((_b = rule === null || rule === void 0 ? void 0 : rule.blocklist) === null || _b === void 0 ? void 0 : _b.length);\n}\nexport function shouldTrackNetworkEvent(networkEvent, options) {\n var _a;\n if (options === void 0) { options = {}; }\n var urlObj = parseUrl(networkEvent.url);\n /* istanbul ignore if */\n if (!urlObj) {\n // if the URL failed to parse, do not track the event\n // this is a probably impossible case that would only happen if the URL is malformed\n /* istanbul ignore next */\n return false;\n }\n var host = urlObj.host;\n // false if is amplitude request and not configured to track amplitude requests\n if (options.ignoreAmplitudeRequests !== false &&\n (wildcardMatch(host, '*.amplitude.com') || wildcardMatch(host, 'amplitude.com'))) {\n return false;\n }\n // false if the host is in the ignore list\n if ((_a = options.ignoreHosts) === null || _a === void 0 ? void 0 : _a.find(function (ignoreHost) { return wildcardMatch(host, ignoreHost); })) {\n return false;\n }\n // false if the status code is not 500-599 and there are no captureRules\n if (!options.captureRules &&\n networkEvent.status !== undefined &&\n !isStatusCodeInRange(networkEvent.status, DEFAULT_STATUS_CODE_RANGE)) {\n return false;\n }\n if (options.captureRules) {\n // find the first capture rule, in reverse-order,\n // that is a match (true) or a miss (false)\n var isMatch_1;\n __spreadArray([], __read(options.captureRules), false).reverse().find(function (rule) {\n isMatch_1 = isCaptureRuleMatch(rule, host, networkEvent.status, networkEvent.url, networkEvent.method);\n if (isMatch_1) {\n var responseHeadersRule = parseHeaderCaptureRule(rule.responseHeaders);\n if (networkEvent.responseWrapper && responseHeadersRule) {\n var responseHeaders = networkEvent.responseWrapper.headers(responseHeadersRule);\n if (responseHeaders) {\n networkEvent.responseHeaders = responseHeaders;\n }\n }\n // if requestHeaders rule is specified, enrich the event with the request headers\n var requestHeadersRule = parseHeaderCaptureRule(rule.requestHeaders);\n if (networkEvent.requestWrapper && requestHeadersRule) {\n var requestHeaders = networkEvent.requestWrapper.headers(requestHeadersRule);\n if (requestHeaders) {\n networkEvent.requestHeaders = requestHeaders;\n }\n }\n // if responseBody rule is specified, enrich the event with the response body\n if (networkEvent.responseWrapper && rule.responseBody && !isBodyCaptureRuleEmpty(rule.responseBody)) {\n networkEvent.responseBodyJson = networkEvent.responseWrapper.json(rule.responseBody.allowlist, rule.responseBody.blocklist);\n }\n // if requestBody rule is specified, enrich the event with the request body\n if (networkEvent.requestWrapper && rule.requestBody && !isBodyCaptureRuleEmpty(rule.requestBody)) {\n networkEvent.requestBodyJson = networkEvent.requestWrapper.json(rule.requestBody.allowlist, rule.requestBody.blocklist);\n }\n }\n return isMatch_1 !== undefined;\n });\n // if we found a miss (false) or no match (undefined),\n // then do not track the event\n if (!isMatch_1) {\n return false;\n }\n }\n // skip Amplitude network requests to \"[Amplitude] Network Request\" to avoid infinite loop\n if (networkEvent.requestWrapper && isAmplitudeNetworkRequestEvent(host, networkEvent.requestWrapper)) {\n return false;\n }\n return true;\n}\nexport function logNetworkAnalyticsEvent(networkAnalyticsEvent, request, amplitude, loggerProvider) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, requestBody, responseBody;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(request.requestBodyJson || request.responseBodyJson)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all([request.requestBodyJson, request.responseBodyJson])];\n case 1:\n _a = __read.apply(void 0, [_b.sent(), 2]), requestBody = _a[0], responseBody = _a[1];\n if (requestBody) {\n try {\n networkAnalyticsEvent['[Amplitude] Request Body'] = JSON.stringify(requestBody);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.debug('Failed to stringify request body', e);\n }\n }\n if (responseBody) {\n try {\n networkAnalyticsEvent['[Amplitude] Response Body'] = JSON.stringify(responseBody);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.debug('Failed to stringify response body');\n }\n }\n _b.label = 2;\n case 2:\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_NETWORK_REQUEST_EVENT, networkAnalyticsEvent);\n return [2 /*return*/];\n }\n });\n });\n}\nexport function trackNetworkEvents(_a) {\n var allObservables = _a.allObservables, networkTrackingOptions = _a.networkTrackingOptions, amplitude = _a.amplitude, loggerProvider = _a.loggerProvider;\n var networkObservable = allObservables.networkObservable;\n var filteredNetworkObservable = networkObservable.filter(function (event) {\n // Only track network events that should be tracked\n return shouldTrackNetworkEvent(event.event, networkTrackingOptions);\n });\n return filteredNetworkObservable.subscribe(function (networkEvent) {\n var _a;\n var _b, _c;\n var request = networkEvent.event;\n // convert to NetworkAnalyticsEvent\n var urlObj = parseUrl(request.url);\n /* istanbul ignore if */\n if (!urlObj) {\n // if the URL failed to parse, do not track the event\n // this is a very unlikely case, because URL() shouldn't throw an exception\n // when the URL is a valid URL\n /* istanbul ignore next */\n return;\n }\n var responseBodySize = (_b = request.responseWrapper) === null || _b === void 0 ? void 0 : _b.bodySize;\n /* istanbul ignore next */\n var requestBodySize = (_c = request.requestWrapper) === null || _c === void 0 ? void 0 : _c.bodySize;\n var networkAnalyticsEvent = (_a = {},\n _a['[Amplitude] URL'] = urlObj.hrefWithoutQueryOrHash,\n _a['[Amplitude] URL Query'] = urlObj.query,\n _a['[Amplitude] URL Fragment'] = urlObj.fragment,\n _a['[Amplitude] Request Method'] = request.method,\n _a['[Amplitude] Status Code'] = request.status,\n _a['[Amplitude] Start Time'] = request.startTime,\n _a['[Amplitude] Completion Time'] = request.endTime,\n _a['[Amplitude] Duration'] = request.duration,\n _a['[Amplitude] Request Body Size'] = requestBodySize,\n _a['[Amplitude] Response Body Size'] = responseBodySize,\n _a['[Amplitude] Request Type'] = request.type,\n _a['[Amplitude] Request Headers'] = request.requestHeaders,\n _a['[Amplitude] Response Headers'] = request.responseHeaders,\n _a);\n // fire-and-forget promise that tracks the event\n void logNetworkAnalyticsEvent(networkAnalyticsEvent, request, amplitude, loggerProvider);\n });\n}\n//# sourceMappingURL=track-network-event.js.map","import { __awaiter, __generator } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { networkObserver, NetworkEventCallback, } from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { Observable } from '@amplitude/analytics-core';\nimport { trackNetworkEvents } from './track-network-event';\nexport var ObservablesEnum;\n(function (ObservablesEnum) {\n ObservablesEnum[\"NetworkObservable\"] = \"networkObservable\";\n})(ObservablesEnum || (ObservablesEnum = {}));\nvar subscription;\nexport var networkCapturePlugin = function (options) {\n if (options === void 0) { options = {}; }\n var name = constants.PLUGIN_NAME;\n var type = 'enrichment';\n var logger;\n var addAdditionalEventProperties = function (event, type) {\n var baseEvent = {\n event: event,\n timestamp: Date.now(),\n type: type,\n };\n return baseEvent;\n };\n // Create observables on events on the window\n var createObservables = function () {\n var _a;\n var networkObservable = new Observable(function (observer) {\n var callback = new NetworkEventCallback(function (event) {\n var eventWithProperties = addAdditionalEventProperties(event, 'network');\n observer.next(eventWithProperties);\n });\n networkObserver.subscribe(callback, logger);\n return function () {\n networkObserver.unsubscribe(callback);\n };\n });\n return _a = {},\n _a[ObservablesEnum.NetworkObservable] = networkObservable,\n _a;\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var allObservables;\n return __generator(this, function (_a) {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return [2 /*return*/];\n }\n allObservables = createObservables();\n /* istanbul ignore next */\n logger = config === null || config === void 0 ? void 0 : config.loggerProvider;\n subscription = trackNetworkEvents({\n allObservables: allObservables,\n networkTrackingOptions: options,\n amplitude: amplitude,\n loggerProvider: logger,\n });\n /* istanbul ignore next */\n logger === null || logger === void 0 ? void 0 : logger.log(\"\".concat(name, \" has been successfully added.\"));\n return [2 /*return*/];\n });\n }); };\n /* istanbul ignore next */\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n subscription.unsubscribe();\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=network-capture-plugin.js.map","export var PLUGIN_NAME = 'web-vitals-browser';\nexport var WEB_VITALS_EVENT_NAME = '[Amplitude] Web Vitals';\n//# sourceMappingURL=constants.js.map","let e=-1;const t=t=>{addEventListener(\"pageshow\",(n=>{n.persisted&&(e=n.timeStamp,t(n))}),!0)},n=(e,t,n,i)=>{let s,o;return r=>{t.value>=0&&(r||i)&&(o=t.value-(s??0),(o||void 0===s)&&(s=t.value,t.delta=o,t.rating=((e,t)=>e>t[1]?\"poor\":e>t[0]?\"needs-improvement\":\"good\")(t.value,n),e(t)))}},i=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},s=()=>{const e=performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},o=()=>{const e=s();return e?.activationStart??0},r=(t,n=-1)=>{const i=s();let r=\"navigate\";e>=0?r=\"back-forward-cache\":i&&(document.prerendering||o()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":i.type&&(r=i.type.replace(/_/g,\"-\")));return{name:t,value:n,rating:\"good\",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},c=new WeakMap;function a(e,t){return c.get(e)||c.set(e,new t),c.get(e)}class d{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const h=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return i.observe({type:e,buffered:!0,...n}),i}}catch{}},f=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let u=-1;const l=new Set,m=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,p=e=>{if(\"hidden\"===document.visibilityState){if(\"visibilitychange\"===e.type)for(const e of l)e();isFinite(u)||(u=\"visibilitychange\"===e.type?e.timeStamp:0,removeEventListener(\"prerenderingchange\",p,!0))}},v=()=>{if(u<0){const e=o(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").filter((t=>\"hidden\"===t.name&&t.startTime>e))[0]?.startTime;u=n??m(),addEventListener(\"visibilitychange\",p,!0),addEventListener(\"prerenderingchange\",p,!0),t((()=>{setTimeout((()=>{u=m()}))}))}return{get firstHiddenTime(){return u},onHidden(e){l.add(e)}}},g=e=>{document.prerendering?addEventListener(\"prerenderingchange\",(()=>e()),!0):e()},y=[1800,3e3],E=(e,s={})=>{g((()=>{const c=v();let a,d=r(\"FCP\");const f=h(\"paint\",(e=>{for(const t of e)\"first-contentful-paint\"===t.name&&(f.disconnect(),t.startTime<c.firstHiddenTime&&(d.value=Math.max(t.startTime-o(),0),d.entries.push(t),a(!0)))}));f&&(a=n(e,d,y,s.reportAllChanges),t((t=>{d=r(\"FCP\"),a=n(e,d,y,s.reportAllChanges),i((()=>{d.value=performance.now()-t.timeStamp,a(!0)}))})))}))},b=[.1,.25],L=(e,s={})=>{const o=v();E(f((()=>{let c,f=r(\"CLS\",0);const u=a(s,d),l=e=>{for(const t of e)u.h(t);u.i>f.value&&(f.value=u.i,f.entries=u.o,c())},m=h(\"layout-shift\",l);m&&(c=n(e,f,b,s.reportAllChanges),o.onHidden((()=>{l(m.takeRecords()),c(!0)})),t((()=>{u.i=0,f=r(\"CLS\",0),c=n(e,f,b,s.reportAllChanges),i((()=>c()))})),setTimeout(c))})))};let P=0,T=1/0,_=0;const M=e=>{for(const t of e)t.interactionId&&(T=Math.min(T,t.interactionId),_=Math.max(_,t.interactionId),P=_?(_-T)/7+1:0)};let w;const C=()=>w?P:performance.interactionCount??0,I=()=>{\"interactionCount\"in performance||w||(w=h(\"event\",M,{type:\"event\",buffered:!0,durationThreshold:0}))};let F=0;class k{u=[];l=new Map;m;p;v(){F=C(),this.u.length=0,this.l.clear()}L(){const e=Math.min(this.u.length-1,Math.floor((C()-F)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&\"first-input\"!==e.entryType)return;const t=this.u.at(-1);let n=this.l.get(e.interactionId);if(n||this.u.length<10||e.duration>t.P){if(n?e.duration>n.P?(n.entries=[e],n.P=e.duration):e.duration===n.P&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],P:e.duration},this.l.set(n.id,n),this.u.push(n)),this.u.sort(((e,t)=>t.P-e.P)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id)}this.p?.(n)}}}const A=e=>{const t=globalThis.requestIdleCallback||setTimeout;\"hidden\"===document.visibilityState?e():(e=f(e),addEventListener(\"visibilitychange\",e,{once:!0,capture:!0}),t((()=>{e(),removeEventListener(\"visibilitychange\",e,{capture:!0})})))},B=[200,500],S=(e,i={})=>{if(!globalThis.PerformanceEventTiming||!(\"interactionId\"in PerformanceEventTiming.prototype))return;const s=v();g((()=>{I();let o,c=r(\"INP\");const d=a(i,k),f=e=>{A((()=>{for(const t of e)d.h(t);const t=d.L();t&&t.P!==c.value&&(c.value=t.P,c.entries=t.entries,o())}))},u=h(\"event\",f,{durationThreshold:i.durationThreshold??40});o=n(e,c,B,i.reportAllChanges),u&&(u.observe({type:\"first-input\",buffered:!0}),s.onHidden((()=>{f(u.takeRecords()),o(!0)})),t((()=>{d.v(),c=r(\"INP\"),o=n(e,c,B,i.reportAllChanges)})))}))};class N{m;h(e){this.m?.(e)}}const q=[2500,4e3],x=(e,s={})=>{g((()=>{const c=v();let d,u=r(\"LCP\");const l=a(s,N),m=e=>{s.reportAllChanges||(e=e.slice(-1));for(const t of e)l.h(t),t.startTime<c.firstHiddenTime&&(u.value=Math.max(t.startTime-o(),0),u.entries=[t],d())},p=h(\"largest-contentful-paint\",m);if(p){d=n(e,u,q,s.reportAllChanges);const o=f((()=>{m(p.takeRecords()),p.disconnect(),d(!0)})),c=e=>{e.isTrusted&&(A(o),removeEventListener(e.type,c,{capture:!0}))};for(const e of[\"keydown\",\"click\",\"visibilitychange\"])addEventListener(e,c,{capture:!0});t((t=>{u=r(\"LCP\"),d=n(e,u,q,s.reportAllChanges),i((()=>{u.value=performance.now()-t.timeStamp,d(!0)}))}))}}))},H=[800,1800],O=e=>{document.prerendering?g((()=>O(e))):\"complete\"!==document.readyState?addEventListener(\"load\",(()=>O(e)),!0):setTimeout(e)},$=(e,i={})=>{let c=r(\"TTFB\"),a=n(e,c,H,i.reportAllChanges);O((()=>{const d=s();d&&(c.value=Math.max(d.responseStart-o(),0),c.entries=[d],a(!0),t((()=>{c=r(\"TTFB\",0),a=n(e,c,H,i.reportAllChanges),a(!0)})))}))};export{b as CLSThresholds,y as FCPThresholds,B as INPThresholds,q as LCPThresholds,H as TTFBThresholds,L as onCLS,E as onFCP,S as onINP,x as onLCP,$ as onTTFB};\n","import { __awaiter, __generator } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { getGlobalScope, getDecodeURI, } from '@amplitude/analytics-core';\nimport { PLUGIN_NAME, WEB_VITALS_EVENT_NAME } from './constants';\nimport { onLCP, onINP, onCLS, onFCP, onTTFB } from 'web-vitals';\nfunction getMetricStartTime(metric) {\n var _a;\n /* istanbul ignore next */\n var startTime = ((_a = metric.entries[0]) === null || _a === void 0 ? void 0 : _a.startTime) || 0;\n return performance.timeOrigin + startTime;\n}\nfunction processMetric(metric) {\n return {\n value: metric.value,\n rating: metric.rating,\n delta: metric.delta,\n navigationType: metric.navigationType,\n id: metric.id,\n timestamp: Math.floor(getMetricStartTime(metric)),\n navigationStart: Math.floor(performance.timeOrigin),\n };\n}\nexport var webVitalsPlugin = function () {\n var visibilityListener = null;\n var globalScope = getGlobalScope();\n var doc = globalScope === null || globalScope === void 0 ? void 0 : globalScope.document;\n var location = globalScope === null || globalScope === void 0 ? void 0 : globalScope.location;\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var locationHref, webVitalsPayload;\n return __generator(this, function (_a) {\n if (doc === undefined) {\n return [2 /*return*/];\n }\n locationHref = getDecodeURI(/* istanbul ignore next */ (location === null || location === void 0 ? void 0 : location.href) || '', config.loggerProvider);\n webVitalsPayload = {\n '[Amplitude] Page Domain': /* istanbul ignore next */ (location === null || location === void 0 ? void 0 : location.hostname) || '',\n '[Amplitude] Page Location': locationHref,\n '[Amplitude] Page Path': getDecodeURI(/* istanbul ignore next */ (location === null || location === void 0 ? void 0 : location.pathname) || '', config.loggerProvider),\n '[Amplitude] Page Title': /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',\n '[Amplitude] Page URL': getDecodeURI(locationHref.split('?')[0], config.loggerProvider),\n };\n onLCP(function (metric) {\n webVitalsPayload['[Amplitude] LCP'] = processMetric(metric);\n });\n onFCP(function (metric) {\n webVitalsPayload['[Amplitude] FCP'] = processMetric(metric);\n });\n onINP(function (metric) {\n webVitalsPayload['[Amplitude] INP'] = processMetric(metric);\n });\n onCLS(function (metric) {\n webVitalsPayload['[Amplitude] CLS'] = processMetric(metric);\n });\n onTTFB(function (metric) {\n webVitalsPayload['[Amplitude] TTFB'] = processMetric(metric);\n });\n visibilityListener = function () {\n if (doc.visibilityState === 'hidden' && visibilityListener) {\n amplitude.track(WEB_VITALS_EVENT_NAME, webVitalsPayload);\n doc.removeEventListener('visibilitychange', visibilityListener);\n visibilityListener = null;\n }\n };\n doc.addEventListener('visibilitychange', visibilityListener);\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (visibilityListener) {\n /* istanbul ignore next */\n doc === null || doc === void 0 ? void 0 : doc.removeEventListener('visibilitychange', visibilityListener);\n }\n return [2 /*return*/];\n });\n }); };\n return {\n name: PLUGIN_NAME,\n type: 'enrichment',\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=web-vitals-plugin.js.map","import { __assign, __awaiter, __generator, __read } from \"tslib\";\nimport { getStorageKey, isNewSession, BASE_CAMPAIGN, CampaignParser, } from '@amplitude/analytics-core';\nimport { getDefaultExcludedReferrers, createCampaignEvent, isNewCampaign } from './helpers';\nvar WebAttribution = /** @class */ (function () {\n function WebAttribution(options, config) {\n var _a;\n this.shouldTrackNewCampaign = false;\n this.options = __assign({ initialEmptyValue: 'EMPTY', resetSessionOnNewCampaign: false, excludeReferrers: getDefaultExcludedReferrers(((_a = config.cookieOptions) === null || _a === void 0 ? void 0 : _a.domain) || config.topLevelDomain), optOut: config.optOut }, options);\n this.storage = config.cookieStorage;\n this.storageKey = getStorageKey(config.apiKey, 'MKTG');\n this.webExpStorageKey = getStorageKey(config.apiKey, 'MKTG_ORIGINAL');\n this.currentCampaign = BASE_CAMPAIGN;\n this.sessionTimeout = config.sessionTimeout;\n this.lastEventTime = config.lastEventTime;\n this.logger = config.loggerProvider;\n this.topLevelDomain = config.topLevelDomain;\n config.loggerProvider.log('Installing web attribution tracking.');\n }\n WebAttribution.prototype.init = function () {\n return __awaiter(this, void 0, void 0, function () {\n var isEventInNewSession;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n // skip attribution if optOut is true\n if (this.options.optOut) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.fetchCampaign()];\n case 1:\n _a = __read.apply(void 0, [_b.sent(), 2]), this.currentCampaign = _a[0], this.previousCampaign = _a[1];\n isEventInNewSession = !this.lastEventTime ? true : isNewSession(this.sessionTimeout, this.lastEventTime);\n if (!isNewCampaign(this.currentCampaign, this.previousCampaign, this.options, this.logger, isEventInNewSession, this.topLevelDomain)) return [3 /*break*/, 3];\n this.shouldTrackNewCampaign = true;\n return [4 /*yield*/, this.storage.set(this.storageKey, this.currentCampaign)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n WebAttribution.prototype.fetchCampaign = function () {\n return __awaiter(this, void 0, void 0, function () {\n var originalCampaign;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.storage.get(this.webExpStorageKey)];\n case 1:\n originalCampaign = _a.sent();\n if (!originalCampaign) return [3 /*break*/, 3];\n return [4 /*yield*/, this.storage.remove(this.webExpStorageKey)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [4 /*yield*/, Promise.all([originalCampaign || new CampaignParser().parse(), this.storage.get(this.storageKey)])];\n case 4: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n /**\n * This can be called when enable web attribution and either\n * 1. set a new session\n * 2. has new campaign and enable resetSessionOnNewCampaign\n */\n WebAttribution.prototype.generateCampaignEvent = function (event_id) {\n // Mark this campaign has been tracked\n this.shouldTrackNewCampaign = false;\n var campaignEvent = createCampaignEvent(this.currentCampaign, this.options);\n if (event_id) {\n campaignEvent.event_id = event_id;\n }\n return campaignEvent;\n };\n WebAttribution.prototype.shouldSetSessionIdOnNewCampaign = function () {\n return this.shouldTrackNewCampaign && !!this.options.resetSessionOnNewCampaign;\n };\n return WebAttribution;\n}());\nexport { WebAttribution };\n//# sourceMappingURL=web-attribution.js.map","import { __assign, __awaiter, __generator, __read } from \"tslib\";\nimport { BrowserStorage, getDecodeURI, getGlobalScope, getPageTitle, replaceSensitiveString, SpecialEventType, } from '@amplitude/analytics-core';\nexport var CURRENT_PAGE_STORAGE_KEY = 'AMP_CURRENT_PAGE';\nexport var PREVIOUS_PAGE_STORAGE_KEY = 'AMP_PREVIOUS_PAGE';\nexport var URL_INFO_STORAGE_KEY = 'AMP_URL_INFO';\nvar PreviousPageType;\n(function (PreviousPageType) {\n PreviousPageType[\"Direct\"] = \"direct\";\n PreviousPageType[\"Internal\"] = \"internal\";\n PreviousPageType[\"External\"] = \"external\";\n})(PreviousPageType || (PreviousPageType = {}));\nexport var EXCLUDED_DEFAULT_EVENT_TYPES = new Set([\n SpecialEventType.IDENTIFY,\n SpecialEventType.GROUP_IDENTIFY,\n SpecialEventType.REVENUE,\n]);\nexport var isPageUrlEnrichmentEnabled = function (option) {\n if (typeof option === 'boolean') {\n return option;\n }\n if (typeof option === 'object' && option !== null && 'pageUrlEnrichment' in option) {\n return Boolean(option.pageUrlEnrichment);\n }\n return false;\n};\nexport var pageUrlEnrichmentPlugin = function (_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.internalDomains, internalDomains = _c === void 0 ? [] : _c;\n var globalScope = getGlobalScope();\n var sessionStorage = undefined;\n var isStorageEnabled = false;\n var loggerProvider = undefined;\n var isProxied = false;\n var isTracking = false;\n var getHostname = function (url) {\n var hostname;\n try {\n var decodedUrl = getDecodeURI(url, loggerProvider);\n hostname = new URL(decodedUrl).hostname;\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Could not parse URL: ', e);\n }\n return hostname;\n };\n var getPrevPageType = function (previousPage) {\n var currentDomain = (typeof location !== 'undefined' && location.hostname) || '';\n var previousPageDomain = previousPage ? getHostname(previousPage) : undefined;\n if (!previousPageDomain) {\n return PreviousPageType.Direct;\n }\n var isCurrentInternal = internalDomains.some(function (domain) { return currentDomain.indexOf(domain) !== -1; });\n var isPrevInternal = internalDomains.some(function (domain) { return previousPageDomain.indexOf(domain) !== -1; });\n if (currentDomain === previousPageDomain || (isPrevInternal && isCurrentInternal)) {\n return PreviousPageType.Internal;\n }\n return PreviousPageType.External;\n };\n var saveURLInfo = function () { return __awaiter(void 0, void 0, void 0, function () {\n var URLInfo, currentURL, storedCurrentURL, previousURL;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(sessionStorage && isStorageEnabled)) return [3 /*break*/, 3];\n return [4 /*yield*/, sessionStorage.get(URL_INFO_STORAGE_KEY)];\n case 1:\n URLInfo = _b.sent();\n currentURL = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n storedCurrentURL = (URLInfo === null || URLInfo === void 0 ? void 0 : URLInfo[CURRENT_PAGE_STORAGE_KEY]) || '';\n previousURL = void 0;\n if (currentURL === storedCurrentURL) {\n previousURL = (URLInfo === null || URLInfo === void 0 ? void 0 : URLInfo[PREVIOUS_PAGE_STORAGE_KEY]) || '';\n }\n else if (storedCurrentURL) {\n previousURL = storedCurrentURL;\n }\n else {\n previousURL = document.referrer || '';\n }\n return [4 /*yield*/, sessionStorage.set(URL_INFO_STORAGE_KEY, (_a = {},\n _a[CURRENT_PAGE_STORAGE_KEY] = currentURL,\n _a[PREVIOUS_PAGE_STORAGE_KEY] = previousURL,\n _a))];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n var saveUrlInfoWrapper = function () {\n void saveURLInfo();\n };\n var plugin = {\n name: '@amplitude/plugin-page-url-enrichment-browser',\n type: 'enrichment',\n setup: function (config, _) { return __awaiter(void 0, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-url-enrichment-browser');\n isTracking = true;\n if (!globalScope) return [3 /*break*/, 2];\n try {\n sessionStorage = new BrowserStorage(globalScope.sessionStorage);\n }\n catch (error) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.debug('sessionStorage is not available in this environment.');\n }\n return [4 /*yield*/, (sessionStorage === null || sessionStorage === void 0 ? void 0 : sessionStorage.isEnabled())];\n case 1:\n isStorageEnabled = (_a = (_b.sent())) !== null && _a !== void 0 ? _a : false;\n globalScope.addEventListener('popstate', saveUrlInfoWrapper);\n if (!isProxied) {\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState and replaceState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: function (target, thisArg, _a) {\n var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n saveUrlInfoWrapper();\n }\n },\n });\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.replaceState = new Proxy(globalScope.history.replaceState, {\n apply: function (target, thisArg, _a) {\n var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n saveUrlInfoWrapper();\n }\n },\n });\n isProxied = true;\n }\n _b.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); },\n execute: function (event) { return __awaiter(void 0, void 0, void 0, function () {\n var locationHREF, URLInfo, updatedURLInfo, previousPage;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n if (!(sessionStorage && isStorageEnabled)) return [3 /*break*/, 5];\n return [4 /*yield*/, sessionStorage.get(URL_INFO_STORAGE_KEY)];\n case 1:\n URLInfo = _b.sent();\n if (!!(URLInfo === null || URLInfo === void 0 ? void 0 : URLInfo[CURRENT_PAGE_STORAGE_KEY])) return [3 /*break*/, 3];\n return [4 /*yield*/, sessionStorage.set(URL_INFO_STORAGE_KEY, (_a = {},\n _a[CURRENT_PAGE_STORAGE_KEY] = locationHREF,\n _a[PREVIOUS_PAGE_STORAGE_KEY] = document.referrer || '',\n _a))];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3: return [4 /*yield*/, sessionStorage.get(URL_INFO_STORAGE_KEY)];\n case 4:\n updatedURLInfo = _b.sent();\n previousPage = '';\n if (updatedURLInfo) {\n previousPage = updatedURLInfo[PREVIOUS_PAGE_STORAGE_KEY] || '';\n }\n // no need to proceed to add additional properties if the event is one of the default event types to be excluded\n if (EXCLUDED_DEFAULT_EVENT_TYPES.has(event.event_type)) {\n return [2 /*return*/, event];\n }\n event.event_properties = __assign(__assign({}, (event.event_properties || {})), { '[Amplitude] Page Domain': addIfNotExist(event, '[Amplitude] Page Domain', (typeof location !== 'undefined' && location.hostname) || ''), '[Amplitude] Page Location': addIfNotExist(event, '[Amplitude] Page Location', locationHREF), '[Amplitude] Page Path': addIfNotExist(event, '[Amplitude] Page Path', (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || ''), '[Amplitude] Page Title': addIfNotExist(event, '[Amplitude] Page Title', getPageTitle(replaceSensitiveString)), '[Amplitude] Page URL': addIfNotExist(event, '[Amplitude] Page URL', locationHREF.split('?')[0]), '[Amplitude] Previous Page Location': previousPage, '[Amplitude] Previous Page Type': getPrevPageType(previousPage) });\n _b.label = 5;\n case 5: return [2 /*return*/, event];\n }\n });\n }); },\n teardown: function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (globalScope) {\n globalScope.removeEventListener('popstate', saveUrlInfoWrapper);\n isTracking = false;\n }\n if (!(sessionStorage && isStorageEnabled)) return [3 /*break*/, 2];\n return [4 /*yield*/, sessionStorage.set(URL_INFO_STORAGE_KEY, {})];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); },\n };\n return plugin;\n};\nfunction addIfNotExist(event, key, value) {\n if (!event.event_properties) {\n event.event_properties = {};\n }\n if (event.event_properties[key] === undefined) {\n return value;\n }\n return event.event_properties[key];\n}\n//# sourceMappingURL=page-url-enrichment.js.map","import { __awaiter, __generator } from \"tslib\";\nexport var customEnrichmentPlugin = function () {\n var loggerProvider;\n var unsubscribe;\n var enrichEvent;\n function isCustomEnrichmentConfig(config) {\n // 1. Check if it's an object and not null\n if (typeof config !== 'object' || config === null) {\n return false;\n }\n // 2. Validate specific properties exist and are the correct type\n return 'body' in config && typeof config.body === 'string';\n }\n function createEnrichEvent(body) {\n if (body) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-implied-eval\n var fn = new Function('return ' + body)();\n if (typeof fn === 'function') {\n return fn;\n }\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Custom enrichment body did not evaluate to a function');\n }\n catch (error) {\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Could not create custom enrichment function', error);\n }\n }\n return function (event) { return event; };\n }\n var plugin = {\n name: '@amplitude/plugin-custom-enrichment-browser',\n type: 'enrichment',\n setup: function (config, _) { return __awaiter(void 0, void 0, void 0, function () {\n var subscriptionId_1;\n var _a;\n return __generator(this, function (_b) {\n loggerProvider = config.loggerProvider;\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Installing @amplitude/plugin-custom-enrichment-browser');\n // Fetch remote config for custom enrichment in a non-blocking manner\n if ((_a = config.remoteConfig) === null || _a === void 0 ? void 0 : _a.fetchRemoteConfig) {\n if (!config.remoteConfigClient) {\n // TODO(xinyi): Diagnostics.recordEvent\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.debug('Remote config client is not provided, skipping remote config fetch');\n }\n else {\n subscriptionId_1 = config.remoteConfigClient.subscribe('configs.analyticsSDK.browserSDK.customEnrichment', 'all', function (remoteConfig) {\n if (remoteConfig && isCustomEnrichmentConfig(remoteConfig)) {\n enrichEvent = createEnrichEvent(remoteConfig.body || '');\n }\n else {\n // if there is no valid body, clear enrich event\n enrichEvent = createEnrichEvent('');\n }\n });\n unsubscribe = function () { var _a; return (_a = config.remoteConfigClient) === null || _a === void 0 ? void 0 : _a.unsubscribe(subscriptionId_1); };\n }\n }\n return [2 /*return*/];\n });\n }); },\n execute: function (event) { return __awaiter(void 0, void 0, void 0, function () {\n var _a;\n return __generator(this, function (_b) {\n if (enrichEvent) {\n try {\n return [2 /*return*/, (_a = enrichEvent(event)) !== null && _a !== void 0 ? _a : null];\n }\n catch (error) {\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Could not execute custom enrichment function', error);\n return [2 /*return*/, event];\n }\n }\n return [2 /*return*/, event];\n });\n }); },\n teardown: function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (unsubscribe) {\n unsubscribe();\n }\n return [2 /*return*/];\n });\n }); },\n };\n return plugin;\n};\n//# sourceMappingURL=custom-enrichment.js.map","import { __assign, __awaiter, __extends, __generator, __read, __rest, __values } from \"tslib\";\nimport { AmplitudeCore, Destination, Identify, returnWrapper, Revenue, UUID, getAnalyticsConnector, setConnectorDeviceId, setConnectorUserId, isNewSession, IdentityEventSender, getQueryParams, OfflineDisabled, RemoteConfigClient, DiagnosticsClient, createIdentifyEvent, Logger, safeJsonStringify, LogLevel, } from '@amplitude/analytics-core';\nimport { getAttributionTrackingConfig, getPageViewTrackingConfig, getElementInteractionsConfig, getNetworkTrackingConfig, isAttributionTrackingEnabled, isSessionTrackingEnabled, isFileDownloadTrackingEnabled, isFormInteractionTrackingEnabled, isElementInteractionsEnabled, isPageViewTrackingEnabled, isNetworkTrackingEnabled, isWebVitalsEnabled, isFrustrationInteractionsEnabled, getFrustrationInteractionsConfig, isPageUrlEnrichmentEnabled, isCustomEnrichmentEnabled, } from './default-tracking';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport, shouldFetchRemoteConfig } from './config';\nimport { pageViewTrackingPlugin } from '@amplitude/plugin-page-view-tracking-browser';\nimport { formInteractionTracking } from './plugins/form-interaction-tracking';\nimport { fileDownloadTracking } from './plugins/file-download-tracking';\nimport { DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT, DEFAULT_SERVER_ZONE } from './constants';\nimport { detNotify } from './det-notification';\nimport { networkConnectivityCheckerPlugin } from './plugins/network-connectivity-checker';\nimport { updateBrowserConfigWithRemoteConfig } from './config/joined-config';\nimport { autocapturePlugin, frustrationPlugin } from '@amplitude/plugin-autocapture-browser';\nimport { plugin as networkCapturePlugin } from '@amplitude/plugin-network-capture-browser';\nimport { webVitalsPlugin } from '@amplitude/plugin-web-vitals-browser';\nimport { WebAttribution } from './attribution/web-attribution';\nimport { LIBPREFIX } from './lib-prefix';\nimport { VERSION } from './version';\nimport { pageUrlEnrichmentPlugin } from '@amplitude/plugin-page-url-enrichment-browser';\nimport { customEnrichmentPlugin } from '@amplitude/plugin-custom-enrichment-browser';\nvar UNSPECIFIED_SESSION_ID = -1;\n/**\n * Exported for `@amplitude/unified` or integration with blade plugins.\n * If you only use `@amplitude/analytics-browser`, use `amplitude.init()` or `amplitude.createInstance()` instead.\n */\nvar AmplitudeBrowser = /** @class */ (function (_super) {\n __extends(AmplitudeBrowser, _super);\n function AmplitudeBrowser() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n // Backdoor to set diagnostics sample rate\n // by calling amplitude._setDiagnosticsSampleRate(1); before amplitude.init()\n _this._diagnosticsSampleRate = 0;\n // Backdoor to test request body compression\n // by calling amplitude._enableRequestBodyCompressionExperimental(true); before amplitude.init()\n _this._enableRequestBodyCompressionExperimentalValue = false;\n return _this;\n }\n AmplitudeBrowser.prototype.init = function (apiKey, userIdOrOptions, maybeOptions) {\n if (apiKey === void 0) { apiKey = ''; }\n var userId;\n var options;\n if (arguments.length > 2) {\n userId = userIdOrOptions;\n options = maybeOptions;\n }\n else {\n if (typeof userIdOrOptions === 'string') {\n userId = userIdOrOptions;\n options = undefined;\n }\n else {\n userId = userIdOrOptions === null || userIdOrOptions === void 0 ? void 0 : userIdOrOptions.userId;\n options = userIdOrOptions;\n }\n }\n return returnWrapper(this._init(__assign(__assign({}, options), { userId: userId, apiKey: apiKey })));\n };\n AmplitudeBrowser.prototype._init = function (options) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n return __awaiter(this, void 0, void 0, function () {\n var fetchRemoteConfig, loggerProvider, serverZone, remoteConfigClient, diagnosticsSampleRate, enableDiagnostics, diagnosticsClient, browserOptions, attributionTrackingOptions, queryParams, ampTimestamp, isWithinTimeLimit, querySessionId, deferredSessionId, connector;\n var _this = this;\n return __generator(this, function (_j) {\n switch (_j.label) {\n case 0:\n // Step 1: Block concurrent initialization\n if (this.initializing) {\n return [2 /*return*/];\n }\n this.initializing = true;\n fetchRemoteConfig = shouldFetchRemoteConfig(options);\n loggerProvider = (_a = options.loggerProvider) !== null && _a !== void 0 ? _a : new Logger();\n if (!options.loggerProvider) {\n loggerProvider.enable((_b = options.logLevel) !== null && _b !== void 0 ? _b : LogLevel.Warn);\n }\n serverZone = (_c = options.serverZone) !== null && _c !== void 0 ? _c : DEFAULT_SERVER_ZONE;\n diagnosticsSampleRate = this._diagnosticsSampleRate;\n enableDiagnostics = (_d = options.enableDiagnostics) !== null && _d !== void 0 ? _d : true;\n if (!fetchRemoteConfig) return [3 /*break*/, 2];\n remoteConfigClient = new RemoteConfigClient(options.apiKey, loggerProvider, serverZone, \n /* istanbul ignore next */ (_e = options.remoteConfig) === null || _e === void 0 ? void 0 : _e.serverUrl);\n // Fetch diagnostics config first to get sample rate\n return [4 /*yield*/, new Promise(function (resolve) {\n // Disable coverage for this line because remote config client will always be defined in this case.\n // istanbul ignore next\n remoteConfigClient === null || remoteConfigClient === void 0 ? void 0 : remoteConfigClient.subscribe('configs.diagnostics.browserSDK', 'all', function (remoteConfig, source, lastFetch) {\n loggerProvider.debug('Diagnostics remote configuration received:', JSON.stringify({\n remoteConfig: remoteConfig,\n source: source,\n lastFetch: lastFetch,\n }, null, 2));\n if (remoteConfig) {\n // Validate and set sampleRate (must be a valid number)\n var sampleRate = remoteConfig.sampleRate;\n if (typeof sampleRate === 'number' && !isNaN(sampleRate)) {\n diagnosticsSampleRate = sampleRate;\n }\n // Validate and set enabled (must be a boolean)\n var enabled = remoteConfig.enabled;\n if (typeof enabled === 'boolean') {\n enableDiagnostics = enabled;\n }\n }\n resolve();\n });\n })];\n case 1:\n // Fetch diagnostics config first to get sample rate\n _j.sent();\n _j.label = 2;\n case 2:\n diagnosticsClient = new DiagnosticsClient(options.apiKey, loggerProvider, serverZone, {\n enabled: enableDiagnostics,\n sampleRate: diagnosticsSampleRate,\n });\n diagnosticsClient.setTag('library', \"\".concat(LIBPREFIX, \"/\").concat(VERSION));\n if (typeof navigator !== 'undefined') {\n diagnosticsClient.setTag('user_agent', navigator.userAgent);\n }\n return [4 /*yield*/, useBrowserConfig(options.apiKey, options, this, diagnosticsClient, {\n loggerProvider: loggerProvider,\n serverZone: serverZone,\n enableDiagnostics: enableDiagnostics,\n diagnosticsSampleRate: diagnosticsSampleRate,\n })];\n case 3:\n browserOptions = _j.sent();\n if (!(fetchRemoteConfig && remoteConfigClient)) return [3 /*break*/, 5];\n return [4 /*yield*/, new Promise(function (resolve) {\n // Disable coverage for this line because remote config client will always be defined in this case.\n // istanbul ignore next\n remoteConfigClient === null || remoteConfigClient === void 0 ? void 0 : remoteConfigClient.subscribe('configs.analyticsSDK.browserSDK', 'all', function (remoteConfig, source, lastFetch) {\n browserOptions.loggerProvider.debug('Remote configuration received:', JSON.stringify({\n remoteConfig: remoteConfig,\n source: source,\n lastFetch: lastFetch,\n }, null, 2));\n if (remoteConfig) {\n updateBrowserConfigWithRemoteConfig(remoteConfig, browserOptions);\n }\n // Resolve the promise on first callback (initial config)\n resolve();\n });\n })];\n case 4:\n _j.sent();\n _j.label = 5;\n case 5: return [4 /*yield*/, _super.prototype._init.call(this, browserOptions)];\n case 6:\n _j.sent();\n this.logBrowserOptions(browserOptions);\n this.config.remoteConfigClient = remoteConfigClient;\n if (!isAttributionTrackingEnabled(this.config.defaultTracking)) return [3 /*break*/, 8];\n if (this.config.optOut) {\n this.timeline.addOptOutListener(function (optOut) { return __awaiter(_this, void 0, void 0, function () {\n var attributionTrackingOptions_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!optOut) return [3 /*break*/, 2];\n attributionTrackingOptions_1 = getAttributionTrackingConfig(this.config);\n this.webAttribution = new WebAttribution(attributionTrackingOptions_1, this.config);\n return [4 /*yield*/, this.webAttribution.init()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); });\n }\n attributionTrackingOptions = getAttributionTrackingConfig(this.config);\n this.webAttribution = new WebAttribution(attributionTrackingOptions, this.config);\n // Fetch the current campaign, check if need to track web attribution later\n return [4 /*yield*/, this.webAttribution.init()];\n case 7:\n // Fetch the current campaign, check if need to track web attribution later\n _j.sent();\n _j.label = 8;\n case 8:\n queryParams = getQueryParams();\n ampTimestamp = queryParams.ampTimestamp ? Number(queryParams.ampTimestamp) : undefined;\n isWithinTimeLimit = ampTimestamp ? Date.now() < ampTimestamp : true;\n querySessionId = isWithinTimeLimit && !Number.isNaN(Number(queryParams.ampSessionId))\n ? Number(queryParams.ampSessionId)\n : undefined;\n deferredSessionId = this.config.deferredSessionId;\n if (deferredSessionId === UNSPECIFIED_SESSION_ID && !this.config.optOut) {\n deferredSessionId = Date.now();\n }\n this.setSessionId((_h = (_g = (_f = options.sessionId) !== null && _f !== void 0 ? _f : querySessionId) !== null && _g !== void 0 ? _g : deferredSessionId) !== null && _h !== void 0 ? _h : this.config.sessionId);\n if (this.config.optOut) {\n this.timeline.addOptOutListener(function (optOut) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!optOut && this.config.deferredSessionId) {\n if (this.config.deferredSessionId === UNSPECIFIED_SESSION_ID) {\n this.setSessionId(undefined);\n }\n else {\n this.setSessionId(this.config.deferredSessionId);\n }\n }\n return [2 /*return*/];\n });\n }); });\n }\n connector = getAnalyticsConnector(options.instanceName);\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n if (!(this.config.offline !== OfflineDisabled)) return [3 /*break*/, 10];\n return [4 /*yield*/, this.add(networkConnectivityCheckerPlugin()).promise];\n case 9:\n _j.sent();\n _j.label = 10;\n case 10: return [4 /*yield*/, this.add(new Destination({ diagnosticsClient: diagnosticsClient })).promise];\n case 11:\n _j.sent();\n return [4 /*yield*/, this.add(new Context()).promise];\n case 12:\n _j.sent();\n return [4 /*yield*/, this.add(new IdentityEventSender()).promise];\n case 13:\n _j.sent();\n // Notify if DET is enabled\n detNotify(this.config);\n if (!isFileDownloadTrackingEnabled(this.config.defaultTracking)) return [3 /*break*/, 15];\n this.config.loggerProvider.debug('Adding file download tracking plugin');\n return [4 /*yield*/, this.add(fileDownloadTracking()).promise];\n case 14:\n _j.sent();\n _j.label = 15;\n case 15:\n if (!isFormInteractionTrackingEnabled(this.config.defaultTracking)) return [3 /*break*/, 17];\n this.config.loggerProvider.debug('Adding form interaction plugin');\n return [4 /*yield*/, this.add(formInteractionTracking()).promise];\n case 16:\n _j.sent();\n _j.label = 17;\n case 17:\n if (!isPageViewTrackingEnabled(this.config.defaultTracking)) return [3 /*break*/, 20];\n if (!!this.config.optOut) return [3 /*break*/, 19];\n this.config.loggerProvider.debug('Adding page view tracking plugin');\n return [4 /*yield*/, this.add(pageViewTrackingPlugin(getPageViewTrackingConfig(this.config))).promise];\n case 18:\n _j.sent();\n return [3 /*break*/, 20];\n case 19:\n this.timeline.addOptOutListener(function (optOut) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n /* istanbul ignore if */\n if (optOut) {\n return [2 /*return*/];\n }\n this.config.loggerProvider.debug('Adding page view tracking plugin');\n return [4 /*yield*/, this.add(pageViewTrackingPlugin(getPageViewTrackingConfig(this.config))).promise];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n }); });\n _j.label = 20;\n case 20:\n if (!isElementInteractionsEnabled(this.config.autocapture)) return [3 /*break*/, 22];\n this.config.loggerProvider.debug('Adding user interactions plugin (autocapture plugin)');\n return [4 /*yield*/, this.add(autocapturePlugin(getElementInteractionsConfig(this.config), { diagnosticsClient: diagnosticsClient })).promise];\n case 21:\n _j.sent();\n _j.label = 22;\n case 22:\n if (!isFrustrationInteractionsEnabled(this.config.autocapture)) return [3 /*break*/, 24];\n this.config.loggerProvider.debug('Adding frustration interactions plugin');\n return [4 /*yield*/, this.add(frustrationPlugin(getFrustrationInteractionsConfig(this.config))).promise];\n case 23:\n _j.sent();\n _j.label = 24;\n case 24:\n if (!isNetworkTrackingEnabled(this.config.autocapture)) return [3 /*break*/, 26];\n this.config.loggerProvider.debug('Adding network tracking plugin');\n return [4 /*yield*/, this.add(networkCapturePlugin(getNetworkTrackingConfig(this.config))).promise];\n case 25:\n _j.sent();\n _j.label = 26;\n case 26:\n if (!isWebVitalsEnabled(this.config.autocapture)) return [3 /*break*/, 28];\n this.config.loggerProvider.debug('Adding web vitals plugin');\n return [4 /*yield*/, this.add(webVitalsPlugin()).promise];\n case 27:\n _j.sent();\n _j.label = 28;\n case 28:\n if (!isPageUrlEnrichmentEnabled(this.config.autocapture)) return [3 /*break*/, 30];\n this.config.loggerProvider.debug('Adding referrer page url plugin');\n return [4 /*yield*/, this.add(pageUrlEnrichmentPlugin()).promise];\n case 29:\n _j.sent();\n _j.label = 30;\n case 30:\n if (!isCustomEnrichmentEnabled(this.config.customEnrichment)) return [3 /*break*/, 32];\n this.config.loggerProvider.debug('Adding custom enrichment plugin');\n return [4 /*yield*/, this.add(customEnrichmentPlugin()).promise];\n case 31:\n _j.sent();\n _j.label = 32;\n case 32:\n this.initializing = false;\n // Step 6: Run queued dispatch functions\n return [4 /*yield*/, this.runQueuedFunctions('dispatchQ')];\n case 33:\n // Step 6: Run queued dispatch functions\n _j.sent();\n // Step 7: Add the event receiver after running remaining queued functions.\n connector.eventBridge.setEventReceiver(function (event) {\n var _a = event.eventProperties || {}, time = _a.time, cleanEventProperties = __rest(_a, [\"time\"]);\n var eventOptions = typeof time === 'number' ? { time: time } : undefined;\n void _this.track(event.eventType, cleanEventProperties, eventOptions);\n });\n return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeBrowser.prototype.getUserId = function () {\n var _a;\n return (_a = this.config) === null || _a === void 0 ? void 0 : _a.userId;\n };\n AmplitudeBrowser.prototype.setUserId = function (userId) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n this.config.loggerProvider.debug('function setUserId: ', userId);\n if (userId !== this.config.userId || userId === undefined) {\n this.config.userId = userId;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.timeline.onIdentityChanged({ userId: userId });\n setConnectorUserId(userId, this.config.instanceName);\n }\n };\n AmplitudeBrowser.prototype.getDeviceId = function () {\n var _a;\n return (_a = this.config) === null || _a === void 0 ? void 0 : _a.deviceId;\n };\n AmplitudeBrowser.prototype.setDeviceId = function (deviceId) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.loggerProvider.debug('function setDeviceId: ', deviceId);\n if (deviceId !== this.config.deviceId) {\n this.config.deviceId = deviceId;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.timeline.onIdentityChanged({ deviceId: deviceId });\n setConnectorDeviceId(deviceId, this.config.instanceName);\n }\n };\n AmplitudeBrowser.prototype.reset = function () {\n this.setDeviceId(UUID());\n this.setUserId(undefined);\n this.timeline.onReset();\n };\n AmplitudeBrowser.prototype.getIdentity = function () {\n var _a, _b;\n return {\n deviceId: (_a = this.config) === null || _a === void 0 ? void 0 : _a.deviceId,\n userId: (_b = this.config) === null || _b === void 0 ? void 0 : _b.userId,\n userProperties: this.userProperties,\n };\n };\n AmplitudeBrowser.prototype.setIdentity = function (identity) {\n var e_1, _a;\n var _b;\n // Handle userId change\n if ('userId' in identity) {\n this.setUserId(identity.userId);\n }\n // Handle deviceId change\n if ('deviceId' in identity && identity.deviceId) {\n this.setDeviceId(identity.deviceId);\n }\n // Handle userProperties change - auto-send identify\n if ('userProperties' in identity) {\n this.userProperties = identity.userProperties;\n // Auto-send identify event with $set operations\n var identifyObj = new Identify();\n // istanbul ignore next\n var userProperties = (_b = identity.userProperties) !== null && _b !== void 0 ? _b : {};\n try {\n for (var _c = __values(Object.entries(userProperties)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var _e = __read(_d.value, 2), key = _e[0], value = _e[1];\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n identifyObj.set(key, value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // The identify event processing in core-client already calls onIdentityChanged,\n // so we don't need to call it explicitly here to avoid duplicate notifications.\n this.identify(identifyObj);\n }\n };\n AmplitudeBrowser.prototype.getOptOut = function () {\n var _a;\n return (_a = this.config) === null || _a === void 0 ? void 0 : _a.optOut;\n };\n AmplitudeBrowser.prototype.getSessionId = function () {\n var _a;\n return (_a = this.config) === null || _a === void 0 ? void 0 : _a.sessionId;\n };\n AmplitudeBrowser.prototype.setSessionId = function (sessionId) {\n var _a;\n var promises = [];\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return returnWrapper(Promise.resolve());\n }\n // do not start a new session if optOut is true\n if (this.config.optOut) {\n // save the sessionId to storage to be used when optOut is false\n this.config.deferredSessionId = sessionId !== null && sessionId !== void 0 ? sessionId : UNSPECIFIED_SESSION_ID;\n return returnWrapper(Promise.resolve());\n }\n // default sessionId to current time\n if (sessionId === undefined) {\n sessionId = Date.now();\n }\n // Prevents starting a new session with the same session ID\n if (sessionId === this.config.sessionId) {\n return returnWrapper(Promise.resolve());\n }\n this.config.loggerProvider.debug('function setSessionId: ', sessionId);\n var previousSessionId = this.getSessionId();\n if (previousSessionId !== sessionId) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.timeline.onSessionIdChanged(sessionId);\n }\n var lastEventTime = this.config.lastEventTime;\n var lastEventId = (_a = this.config.lastEventId) !== null && _a !== void 0 ? _a : -1;\n this.config.sessionId = sessionId;\n this.config.lastEventTime = undefined;\n this.config.pageCounter = 0;\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n if (previousSessionId && lastEventTime) {\n promises.push(this.track(DEFAULT_SESSION_END_EVENT, undefined, {\n device_id: this.previousSessionDeviceId,\n event_id: ++lastEventId,\n session_id: previousSessionId,\n time: lastEventTime + 1,\n user_id: this.previousSessionUserId,\n }).promise);\n }\n this.config.lastEventTime = this.config.sessionId;\n }\n // Fire web attribution event when enable webAttribution tracking\n // 1. has new campaign (call setSessionId from init function)\n // 2. or shouldTrackNewCampaign (call setSessionId from async process(event) when there has new campaign and resetSessionOnNewCampaign = true )\n var isCampaignEventTracked = this.trackCampaignEventIfNeeded(++lastEventId, promises);\n // track the identify event if an Identify object is provided in the config\n if (this.config.identify) {\n promises.push(this.track(createIdentifyEvent(this.config.identify)).promise);\n }\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n promises.push(this.track(DEFAULT_SESSION_START_EVENT, undefined, {\n event_id: isCampaignEventTracked ? ++lastEventId : lastEventId,\n session_id: this.config.sessionId,\n time: this.config.lastEventTime,\n }).promise);\n }\n this.previousSessionDeviceId = this.config.deviceId;\n this.previousSessionUserId = this.config.userId;\n return returnWrapper(Promise.all(promises));\n };\n AmplitudeBrowser.prototype.extendSession = function () {\n if (!this.config) {\n this.q.push(this.extendSession.bind(this));\n return;\n }\n this.config.lastEventTime = Date.now();\n };\n AmplitudeBrowser.prototype.setTransport = function (transport) {\n if (!this.config) {\n this.q.push(this.setTransport.bind(this, transport));\n return;\n }\n this.config.transportProvider = createTransport(transport);\n };\n AmplitudeBrowser.prototype.identify = function (identify, eventOptions) {\n if (isInstanceProxy(identify)) {\n var queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n if (eventOptions === null || eventOptions === void 0 ? void 0 : eventOptions.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions === null || eventOptions === void 0 ? void 0 : eventOptions.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return _super.prototype.identify.call(this, identify, eventOptions);\n };\n AmplitudeBrowser.prototype.groupIdentify = function (groupType, groupName, identify, eventOptions) {\n if (isInstanceProxy(identify)) {\n var queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return _super.prototype.groupIdentify.call(this, groupType, groupName, identify, eventOptions);\n };\n AmplitudeBrowser.prototype.revenue = function (revenue, eventOptions) {\n if (isInstanceProxy(revenue)) {\n var queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return _super.prototype.revenue.call(this, revenue, eventOptions);\n };\n AmplitudeBrowser.prototype.trackCampaignEventIfNeeded = function (lastEventId, promises) {\n if (!this.webAttribution || !this.webAttribution.shouldTrackNewCampaign) {\n return false;\n }\n var campaignEvent = this.webAttribution.generateCampaignEvent(lastEventId);\n if (promises) {\n promises.push(this.track(campaignEvent).promise);\n }\n else {\n this.track(campaignEvent);\n }\n this.config.loggerProvider.log('Tracking attribution.');\n return true;\n };\n AmplitudeBrowser.prototype.process = function (event) {\n return __awaiter(this, void 0, void 0, function () {\n var currentTime, isEventInNewSession, shouldSetSessionIdOnNewCampaign;\n return __generator(this, function (_a) {\n currentTime = Date.now();\n isEventInNewSession = isNewSession(this.config.sessionTimeout, this.config.lastEventTime);\n shouldSetSessionIdOnNewCampaign = this.webAttribution && this.webAttribution.shouldSetSessionIdOnNewCampaign();\n if (event.event_type !== DEFAULT_SESSION_START_EVENT &&\n event.event_type !== DEFAULT_SESSION_END_EVENT &&\n (!event.session_id || event.session_id === this.getSessionId())) {\n if (isEventInNewSession || shouldSetSessionIdOnNewCampaign) {\n this.setSessionId(currentTime);\n if (shouldSetSessionIdOnNewCampaign) {\n this.config.loggerProvider.log('Created a new session for new campaign.');\n }\n }\n else if (!isEventInNewSession) {\n // Web attribution should be tracked during the middle of a session\n // if there has been a chance in the campaign information.\n this.trackCampaignEventIfNeeded();\n }\n }\n return [2 /*return*/, _super.prototype.process.call(this, event)];\n });\n });\n };\n AmplitudeBrowser.prototype.logBrowserOptions = function (browserConfig) {\n try {\n var browserConfigCopy = __assign(__assign({}, browserConfig), { apiKey: browserConfig.apiKey.substring(0, 10) + '********' });\n this.config.loggerProvider.debug('Initialized Amplitude with BrowserConfig:', safeJsonStringify(browserConfigCopy));\n }\n catch (e) {\n /* istanbul ignore next */\n this.config.loggerProvider.error('Error logging browser config', e);\n }\n };\n /**\n * @experimental\n * WARNING: This method is for internal testing only and is not part of the public API.\n * It may be changed or removed at any time without notice.\n *\n * Sets the diagnostics sample rate before amplitude.init()\n * @param sampleRate - The sample rate to set\n */\n AmplitudeBrowser.prototype._setDiagnosticsSampleRate = function (sampleRate) {\n if (sampleRate > 1 || sampleRate < 0) {\n return;\n }\n // Set diagnostics sample rate before initializing the config\n if (!this.config) {\n this._diagnosticsSampleRate = sampleRate;\n return;\n }\n };\n /**\n * @experimental\n * WARNING: This method is for internal testing only and is not part of the public API.\n * It may be changed or removed at any time without notice.\n */\n AmplitudeBrowser.prototype._enableRequestBodyCompressionExperimental = function (enabled) {\n // Set request body compression experimental config before initializing the config\n if (!this.config) {\n this._enableRequestBodyCompressionExperimentalValue = enabled;\n return;\n }\n };\n return AmplitudeBrowser;\n}(AmplitudeCore));\nexport { AmplitudeBrowser };\n//# sourceMappingURL=browser-client.js.map","import { debugWrapper, getClientLogConfig, getClientStates } from '@amplitude/analytics-core';\nimport { AmplitudeBrowser } from './browser-client';\nexport var createInstance = function () {\n var client = new AmplitudeBrowser();\n return {\n init: debugWrapper(client.init.bind(client), 'init', getClientLogConfig(client), getClientStates(client, ['config'])),\n add: debugWrapper(client.add.bind(client), 'add', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.plugins'])),\n remove: debugWrapper(client.remove.bind(client), 'remove', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.plugins'])),\n track: debugWrapper(client.track.bind(client), 'track', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n logEvent: debugWrapper(client.logEvent.bind(client), 'logEvent', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n identify: debugWrapper(client.identify.bind(client), 'identify', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n groupIdentify: debugWrapper(client.groupIdentify.bind(client), 'groupIdentify', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n setGroup: debugWrapper(client.setGroup.bind(client), 'setGroup', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n revenue: debugWrapper(client.revenue.bind(client), 'revenue', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n flush: debugWrapper(client.flush.bind(client), 'flush', getClientLogConfig(client), getClientStates(client, ['config.apiKey', 'timeline.queue.length'])),\n getUserId: debugWrapper(client.getUserId.bind(client), 'getUserId', getClientLogConfig(client), getClientStates(client, ['config', 'config.userId'])),\n setUserId: debugWrapper(client.setUserId.bind(client), 'setUserId', getClientLogConfig(client), getClientStates(client, ['config', 'config.userId'])),\n getDeviceId: debugWrapper(client.getDeviceId.bind(client), 'getDeviceId', getClientLogConfig(client), getClientStates(client, ['config', 'config.deviceId'])),\n setDeviceId: debugWrapper(client.setDeviceId.bind(client), 'setDeviceId', getClientLogConfig(client), getClientStates(client, ['config', 'config.deviceId'])),\n reset: debugWrapper(client.reset.bind(client), 'reset', getClientLogConfig(client), getClientStates(client, ['config', 'config.userId', 'config.deviceId'])),\n getSessionId: debugWrapper(client.getSessionId.bind(client), 'getSessionId', getClientLogConfig(client), getClientStates(client, ['config'])),\n setSessionId: debugWrapper(client.setSessionId.bind(client), 'setSessionId', getClientLogConfig(client), getClientStates(client, ['config'])),\n extendSession: debugWrapper(client.extendSession.bind(client), 'extendSession', getClientLogConfig(client), getClientStates(client, ['config'])),\n setOptOut: debugWrapper(client.setOptOut.bind(client), 'setOptOut', getClientLogConfig(client), getClientStates(client, ['config'])),\n setTransport: debugWrapper(client.setTransport.bind(client), 'setTransport', getClientLogConfig(client), getClientStates(client, ['config'])),\n getIdentity: debugWrapper(client.getIdentity.bind(client), 'getIdentity', getClientLogConfig(client), getClientStates(client, ['config'])),\n setIdentity: debugWrapper(client.setIdentity.bind(client), 'setIdentity', getClientLogConfig(client), getClientStates(client, ['config', 'config.userId', 'config.deviceId'])),\n getOptOut: debugWrapper(client.getOptOut.bind(client), 'getOptOut', getClientLogConfig(client), getClientStates(client, ['config'])),\n _setDiagnosticsSampleRate: debugWrapper(client._setDiagnosticsSampleRate.bind(client), '_setDiagnosticsSampleRate', getClientLogConfig(client), getClientStates(client, ['config'])),\n _enableRequestBodyCompressionExperimental: debugWrapper(client._enableRequestBodyCompressionExperimental.bind(client), '_enableRequestBodyCompressionExperimental', getClientLogConfig(client), getClientStates(client, ['config'])),\n };\n};\nexport default createInstance();\n//# sourceMappingURL=browser-client-factory.js.map","/* eslint-disable @typescript-eslint/unbound-method */\nimport client from './browser-client-factory';\nexport { createInstance } from './browser-client-factory';\nexport var add = client.add, extendSession = client.extendSession, flush = client.flush, getDeviceId = client.getDeviceId, getIdentity = client.getIdentity, getOptOut = client.getOptOut, getSessionId = client.getSessionId, getUserId = client.getUserId, groupIdentify = client.groupIdentify, identify = client.identify, init = client.init, logEvent = client.logEvent, remove = client.remove, reset = client.reset, revenue = client.revenue, setDeviceId = client.setDeviceId, setGroup = client.setGroup, setIdentity = client.setIdentity, setOptOut = client.setOptOut, setSessionId = client.setSessionId, setTransport = client.setTransport, setUserId = client.setUserId, track = client.track, _setDiagnosticsSampleRate = client._setDiagnosticsSampleRate, _enableRequestBodyCompressionExperimental = client._enableRequestBodyCompressionExperimental;\nexport { AmplitudeBrowser } from './browser-client';\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\nexport { trackVideo } from './video-capture/video-capture';\nimport * as Types_1 from './types';\nexport { Types_1 as Types };\n//# sourceMappingURL=index.js.map","import * as amplitude from '@amplitude/analytics-browser';\nimport type { TrackingProperties, TrackingValue } from '../types';\n\n/**\n * Initialize Amplitude (fail silently)\n */\nexport function initializeAmplitude(apiKey: string): void {\n try {\n if (!apiKey) {\n console.warn('[LiveState] Amplitude API key not provided');\n return;\n }\n\n amplitude.init(apiKey, {\n defaultTracking: false,\n });\n } catch (error) {\n console.warn('[LiveState] Failed to initialize Amplitude:', error);\n }\n}\n\n/**\n * Initialize Clarity (fail silently)\n */\nexport async function initializeClarity(projectId?: string): Promise<void> {\n try {\n // Check if Clarity is already loaded by the client\n if (window.clarity) {\n console.log('[LiveState] Clarity already initialized by client');\n return;\n }\n\n // If client provided project ID, use it\n const finalProjectId = projectId || getClientClarityProjectId();\n\n if (!finalProjectId) {\n console.warn('[LiveState] Clarity project ID not provided');\n return;\n }\n\n // Initialize Clarity with project ID\n const Clarity = (await import('@microsoft/clarity')).default;\n Clarity.init(finalProjectId);\n } catch (error) {\n console.warn('[LiveState] Failed to initialize Clarity:', error);\n }\n}\n\n/**\n * Try to extract Clarity project ID from client's installation\n */\nfunction getClientClarityProjectId(): string | undefined {\n try {\n // Check if Clarity script tag exists\n const clarityScript = document.querySelector('script[src*=\"clarity.ms\"]');\n if (clarityScript) {\n const src = clarityScript.getAttribute('src');\n const match = src?.match(/\\/([a-z0-9]+)$/);\n return match?.[1];\n }\n\n // Check global clarity config: shape is clarity.q = [['init', projectId, ...]]\n const projectId = window.clarity?.q?.[0]?.[1];\n if (typeof projectId === 'string') {\n return projectId;\n }\n } catch {\n // Fail silently\n }\n\n return undefined;\n}\n\n/**\n * Track event with Amplitude (fail silently)\n */\nexport function trackAmplitudeEvent(\n eventName: string,\n properties?: TrackingProperties,\n): void {\n try {\n amplitude.track(eventName, properties);\n } catch (error) {\n console.warn('[LiveState] Failed to track Amplitude event:', error);\n }\n}\n\n/**\n * Track event with Clarity (fail silently)\n */\nexport function trackClarityEvent(\n eventName: string,\n properties?: TrackingProperties,\n): void {\n try {\n if (window.clarity) {\n window.clarity('event', eventName);\n\n // Set custom tags for properties\n if (properties) {\n Object.entries(properties).forEach(([key, value]) => {\n window.clarity?.('set', key, String(value));\n });\n }\n }\n } catch (error) {\n console.warn('[LiveState] Failed to track Clarity event:', error);\n }\n}\n\n/**\n * Builds a TrackingProperties object from a loose record, dropping entries\n * whose value is undefined so callers don't need to guard optional fields.\n */\nexport function buildTrackingProperties(\n source: Record<string, TrackingValue | undefined>,\n): TrackingProperties {\n return Object.fromEntries(\n Object.entries(source).filter(\n (entry): entry is [string, TrackingValue] => entry[1] !== undefined,\n ),\n );\n}\n\n/**\n * Track event with both Amplitude and Clarity (fail silently)\n */\nexport function trackEvent(\n eventName: string,\n properties?: TrackingProperties,\n): void {\n trackAmplitudeEvent(eventName, properties);\n trackClarityEvent(eventName, properties);\n}\n\n/**\n * Clarity command API shape as documented in the Clarity SDK\n * https://learn.microsoft.com/en-us/clarity/setup-and-installation/clarity-api\n */\ntype ClarityCommand =\n | 'init'\n | 'event'\n | 'set'\n | 'identify'\n | 'consent'\n | 'upgrade';\n\ndeclare global {\n interface Window {\n clarity?: {\n (command: ClarityCommand, ...args: string[]): void;\n q?: string[][];\n };\n }\n}\n","import React, { createContext, useContext, useEffect } from 'react';\nimport { SWRConfig } from 'swr';\nimport type { LiveStateFetcher, AnalyticsConfig } from '../types';\nimport { initializeAmplitude, initializeClarity } from '../utils/analytics';\n\ninterface LiveStateContextValue {\n fetcher: LiveStateFetcher;\n analytics?: AnalyticsConfig;\n}\n\nconst LiveStateContext = createContext<LiveStateContextValue | null>(null);\n\nexport interface LiveStateProviderProps {\n children: React.ReactNode;\n fetcher: LiveStateFetcher;\n analytics?: AnalyticsConfig;\n}\n\n/**\n * LiveStateProvider\n *\n * Root-level provider that configures fetcher function and analytics.\n * Initializes Amplitude and Clarity on mount.\n *\n * See examples/ directory for usage examples.\n */\nexport function LiveStateProvider({\n children,\n fetcher,\n analytics,\n}: LiveStateProviderProps) {\n // Initialize analytics on mount\n useEffect(() => {\n if (analytics?.amplitudeKey) {\n initializeAmplitude(analytics.amplitudeKey);\n }\n\n if (analytics?.clarityProjectId) {\n initializeClarity(analytics.clarityProjectId);\n }\n }, [analytics]);\n\n return (\n <SWRConfig value={{ provider: () => new Map() }}>\n <LiveStateContext.Provider value={{ fetcher, analytics }}>\n {children}\n </LiveStateContext.Provider>\n </SWRConfig>\n );\n}\n\n/**\n * useLiveStateContext\n *\n * Internal hook to access LiveStateContext\n */\nexport function useLiveStateContext() {\n const context = useContext(LiveStateContext);\n\n if (!context) {\n throw new Error('useLiveState must be used within LiveStateProvider');\n }\n\n return context;\n}\n","import useSWR from 'swr';\nimport { useLiveStateContext } from '../providers/LiveStateProvider';\nimport type { LiveStateResponse } from '../types';\n\ninterface UseLiveStateReturn {\n /** Live state data */\n liveState: LiveStateResponse | null;\n\n /** Loading state */\n isLoading: boolean;\n\n /** Error state */\n error: Error | null;\n\n /** Manual refresh function */\n refresh: () => Promise<void>;\n}\n\n/**\n * useLiveState hook\n *\n * Fetches and manages live state data using SWR with automatic caching,\n * deduplication, and revalidation.\n *\n * Must be used within LiveStateProvider. See examples/ directory for usage.\n */\nexport function useLiveState(): UseLiveStateReturn {\n const { fetcher } = useLiveStateContext();\n\n const { data, error, isLoading, mutate } = useSWR<LiveStateResponse | null>(\n 'live-state',\n fetcher,\n {\n revalidateOnFocus: false,\n revalidateOnReconnect: true,\n dedupingInterval: 60000, // 1 minute\n shouldRetryOnError: false, // Fail silently\n onError: err => {\n console.warn('[LiveState] Failed to fetch live state:', err);\n },\n },\n );\n\n const refresh = async () => {\n try {\n await mutate();\n } catch (err) {\n console.warn('[LiveState] Failed to refresh live state:', err);\n }\n };\n\n return {\n liveState: data ?? null,\n isLoading,\n error: error ?? null,\n refresh,\n };\n}\n","import type { CtaConfig } from '../types';\n\n/**\n * Handle CTA click based on type\n *\n * @param cta - CTA configuration from LiveStateResponse\n */\nexport function handleCtaClick(cta: CtaConfig): void {\n try {\n switch (cta.type) {\n case 'redirect':\n // Navigate in same window\n window.location.href = cta.url;\n break;\n\n case 'whatsapp': {\n // Open WhatsApp in new tab\n const whatsappUrl = cta.whatsappMessage\n ? `${cta.url}?text=${encodeURIComponent(cta.whatsappMessage)}`\n : cta.url;\n window.open(whatsappUrl, '_blank');\n break;\n }\n\n case 'external':\n // Open in new tab\n window.open(cta.url, '_blank');\n break;\n\n default:\n console.warn(`[LiveState] Unknown CTA type: ${cta.type}`);\n }\n } catch (error) {\n console.warn('[LiveState] Failed to handle CTA click:', error);\n }\n}\n","import { useEffect } from 'react';\nimport { Alert, Button } from '@nimbus-ds/components';\nimport type { LiveStateResponse, TrackingConfig } from '../types';\nimport { trackEvent, buildTrackingProperties } from '../utils/analytics';\nimport { handleCtaClick } from '../utils/cta';\n\nexport interface LiveStateAlertProps {\n data: LiveStateResponse;\n trackingConfig: TrackingConfig;\n}\n\n/**\n * LiveStateAlert\n *\n * Renders an Alert component (Nimbus) for alert/warning types.\n * Automatically tracks view, click, and close events.\n *\n * See examples/ directory for usage examples.\n */\nexport function LiveStateAlert({ data, trackingConfig }: LiveStateAlertProps) {\n const appearance = data.type === 'alert' ? 'danger' : 'warning';\n\n const buildEventProperties = () =>\n buildTrackingProperties({\n context: data.context,\n campaignId: data.campaignId,\n group: data.group,\n ...data.metadata,\n ...trackingConfig.properties,\n });\n\n const handleClick = () => {\n const eventName = `${trackingConfig.prefix}${trackingConfig.page}_${data.context}_click`;\n trackEvent(eventName, buildEventProperties());\n handleCtaClick(data.cta);\n };\n\n useEffect(() => {\n const eventName = `${trackingConfig.prefix}${trackingConfig.page}_${data.context}_view`;\n trackEvent(eventName, buildEventProperties());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Alert\n appearance={appearance}\n title={data.title}\n onRemove={() => {\n const eventName = `${trackingConfig.prefix}${trackingConfig.page}_${data.context}_close`;\n trackEvent(eventName, buildEventProperties());\n }}>\n <p dangerouslySetInnerHTML={{ __html: data.message }} />\n <Button appearance=\"neutral\" onClick={handleClick}>\n {data.cta.label}\n </Button>\n </Alert>\n );\n}\n","import { useEffect } from 'react';\nimport { Card, Button, Icon } from '@nimbus-ds/components';\nimport { ExclamationCircleIcon } from '@nimbus-ds/icons';\nimport type { LiveStateResponse, TrackingConfig } from '../types';\nimport { trackEvent, buildTrackingProperties } from '../utils/analytics';\nimport { handleCtaClick } from '../utils/cta';\n\nexport interface LiveStateInfoProps {\n data: LiveStateResponse;\n trackingConfig: TrackingConfig;\n defaultVariant?: 'blue' | 'white';\n}\n\n/**\n * LiveStateInfo\n *\n * Renders a Card component (Nimbus) for info type with a circular icon.\n * Automatically tracks view, click, and close events.\n *\n * See examples/ directory for usage examples.\n */\nexport function LiveStateInfo({\n data,\n trackingConfig,\n defaultVariant = 'blue',\n}: LiveStateInfoProps) {\n const variant = data.variant || defaultVariant;\n\n const buildEventProperties = () =>\n buildTrackingProperties({\n context: data.context,\n campaignId: data.campaignId,\n group: data.group,\n ...data.metadata,\n ...trackingConfig.properties,\n });\n\n const handleClick = () => {\n const eventName = `${trackingConfig.prefix}${trackingConfig.page}_${data.context}_click`;\n trackEvent(eventName, buildEventProperties());\n handleCtaClick(data.cta);\n };\n\n useEffect(() => {\n const eventName = `${trackingConfig.prefix}${trackingConfig.page}_${data.context}_view`;\n trackEvent(eventName, buildEventProperties());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const iconColor = variant === 'blue' ? 'currentColor' : 'primary-interactive';\n\n return (\n <Card\n backgroundColor={\n variant === 'blue' ? 'primary-surface' : 'neutral-background'\n }>\n <Card.Body>\n <div style={{ display: 'flex', gap: '16px', alignItems: 'flex-start' }}>\n <div\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}>\n <Icon source={<ExclamationCircleIcon />} color={iconColor} />\n </div>\n\n <div style={{ flex: 1 }}>\n <h3\n style={{\n fontSize: '16px',\n fontWeight: 600,\n margin: '0 0 8px 0',\n lineHeight: '24px',\n }}\n dangerouslySetInnerHTML={{ __html: data.title }}\n />\n <p\n style={{\n fontSize: '14px',\n margin: '0 0 16px 0',\n lineHeight: '20px',\n }}\n dangerouslySetInnerHTML={{ __html: data.message }}\n />\n <Button onClick={handleClick}>{data.cta.label}</Button>\n </div>\n </div>\n </Card.Body>\n </Card>\n );\n}\n","import type { LiveStateRendererProps } from '../types';\nimport { LiveStateAlert } from './LiveStateAlert';\nimport { LiveStateInfo } from './LiveStateInfo';\n\n/**\n * LiveStateRenderer\n *\n * Main component that validates payload, filters by context, and renders\n * the appropriate visual component (Alert or Info) based on type.\n *\n * See examples/ directory for usage examples.\n */\nexport function LiveStateRenderer({\n data,\n loading,\n trackingConfig,\n allowedContexts,\n defaultVariant,\n}: LiveStateRendererProps) {\n // Don't render while loading or no data\n if (loading || !data) {\n return null;\n }\n\n // Validate required fields\n if (\n !data.context ||\n !data.type ||\n !data.title ||\n !data.message ||\n !data.cta?.label ||\n !data.cta?.url ||\n !data.cta?.type\n ) {\n console.warn('[LiveState] Invalid payload, missing required fields', data);\n return null;\n }\n\n // Filter by allowed contexts\n if (allowedContexts && !allowedContexts.includes(data.context)) {\n return null;\n }\n\n // Render appropriate component based on type\n if (data.type === 'alert' || data.type === 'warning') {\n return <LiveStateAlert data={data} trackingConfig={trackingConfig} />;\n }\n\n if (data.type === 'info') {\n return (\n <LiveStateInfo\n data={data}\n trackingConfig={trackingConfig}\n defaultVariant={defaultVariant}\n />\n );\n }\n\n console.warn(`[LiveState] Unknown type: ${data.type}`);\n return null;\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123],"mappings":"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"}
|