{"version":3,"file":"rsa.min.js","sources":["../../../../../../node_modules/ramda/es/internal/_isPlaceholder.js","../../../../../../node_modules/ramda/es/internal/_curry1.js","../../../../../../node_modules/ramda/es/internal/_curry2.js","../../../../../../node_modules/ramda/es/internal/_curry3.js","../../../../../../node_modules/ramda/es/internal/_has.js","../../../../../../node_modules/ramda/es/type.js","../../../../../../node_modules/ramda/es/internal/_isObject.js","../../../../../../node_modules/ramda/es/internal/_isInteger.js","../../../../../../node_modules/ramda/es/internal/_nth.js","../../../../../../node_modules/ramda/es/internal/_isString.js","../../../../../../node_modules/ramda/es/internal/_clone.js","../../../../../../node_modules/ramda/es/internal/_cloneRegExp.js","../../../../../../node_modules/ramda/es/clone.js","../../../../../../node_modules/ramda/es/internal/_path.js","../../../../../../node_modules/ramda/es/mergeWithKey.js","../../../../../../node_modules/ramda/es/mergeDeepWithKey.js","../../../../../../node_modules/ramda/es/mergeDeepWith.js","../../../../../../node_modules/ramda/es/path.js","../../../../../../node_modules/ramda/es/pickBy.js","../../../../../analytics-js-common/src/utilities/checks.ts","../../../../../analytics-js-common/src/utilities/object.ts","../../../../../analytics-js-common/src/utilities/string.ts","../../../../../analytics-js-common/src/utilities/eventMethodOverloads.ts","../../../../../analytics-js-common/src/types/LoadOptions.ts","../../../../../analytics-js-common/src/constants/loggerContexts.ts","../../../../../../node_modules/@lukeed/uuid/secure/index.mjs","../../../../../../node_modules/@lukeed/csprng/browser/index.mjs","../../../../../../node_modules/@lukeed/uuid/dist/index.mjs","../../../../../analytics-js-common/src/utilities/crypto.ts","../../../../../analytics-js-common/src/utilities/uuId.ts","../../../../../analytics-js-common/src/utilities/timestamp.ts","../../../../../analytics-js-common/src/constants/logMessages.ts","../../../../../analytics-js-common/src/utilities/json.ts","../../../../../analytics-js-common/src/utilities/errors.ts","../../../../src/constants/app.ts","../../../../src/constants/queryParams.ts","../../../../src/constants/timeouts.ts","../../../../src/components/utilities/globals.ts","../../../../src/components/preloadBuffer/index.ts","../../../../../analytics-js-common/src/services/ExternalSrcLoader/jsFileLoader.ts","../../../../../analytics-js-common/src/constants/htmlAttributes.ts","../../../../../analytics-js-common/src/services/ExternalSrcLoader/ExternalSrcLoader.ts","../../../../../analytics-js-common/src/constants/timeouts.ts","../../../../../../node_modules/@preact/signals-core/dist/signals-core.module.js","../../../../../analytics-js-common/src/services/BufferQueue/BufferQueue.ts","../../../../src/services/Logger/Logger.ts","../../../../../analytics-js-common/src/types/ErrorHandler.ts","../../../../../analytics-js-common/src/types/Storage.ts","../../../../src/constants/logMessages.ts","../../../../../analytics-js-common/src/constants/integrationsConfig.ts","../../../../../analytics-js-common/src/constants/urls.ts","../../../../src/constants/urls.ts","../../../../src/components/configManager/constants.ts","../../../../src/state/slices/loadOptions.ts","../../../../src/components/userSessionManager/constants.ts","../../../../src/state/slices/session.ts","../../../../src/state/slices/capabilities.ts","../../../../src/state/slices/reporting.ts","../../../../src/state/slices/source.ts","../../../../src/state/slices/lifecycle.ts","../../../../src/state/slices/consents.ts","../../../../src/state/slices/metrics.ts","../../../../src/state/slices/context.ts","../../../../src/state/slices/nativeDestinations.ts","../../../../src/state/slices/eventBuffer.ts","../../../../src/state/slices/plugins.ts","../../../../src/state/slices/storage.ts","../../../../src/state/slices/serverCookies.ts","../../../../src/state/slices/dataPlaneEvents.ts","../../../../src/state/slices/autoTrack.ts","../../../../src/state/index.ts","../../../../../../node_modules/stackframe/stackframe.js","../../../../../../node_modules/error-stack-parser/error-stack-parser.js","../../../../src/services/ErrorHandler/ErrorEvent/event.ts","../../../../src/services/HttpClient/xhr/xhrResponseHandler.ts","../../../../../analytics-js-common/src/constants/errors.ts","../../../../src/services/HttpClient/xhr/xhrRequestHandler.ts","../../../../src/services/HttpClient/HttpClient.ts","../../../../src/services/ErrorHandler/constants.ts","../../../../src/services/ErrorHandler/utils.ts","../../../../../analytics-js-common/src/constants/metrics.ts","../../../../src/services/ErrorHandler/ErrorHandler.ts","../../../../src/services/PluginEngine/PluginEngine.ts","../../../../../analytics-js-common/src/utilities/destinations.ts","../../../../src/components/pluginsManager/pluginNames.ts","../../../../src/components/pluginsManager/federatedModulesBuildPluginImports.ts","../../../../src/components/pluginsManager/pluginsInventory.ts","../../../../src/components/pluginsManager/PluginsManager.ts","../../../../../analytics-js-common/src/constants/storages.ts","../../../../../analytics-js-cookies/src/constants/cookies.ts","../../../../src/constants/storage.ts","../../../../src/services/StoreManager/types.ts","../../../../../analytics-js-common/src/component-cookie/index.ts","../../../../src/components/capabilitiesManager/detection/browser.ts","../../../../src/components/capabilitiesManager/detection/dom.ts","../../../../src/components/capabilitiesManager/detection/screen.ts","../../../../src/components/capabilitiesManager/detection/storage.ts","../../../../src/services/StoreManager/top-domain/index.ts","../../../../src/services/StoreManager/storages/defaultOptions.ts","../../../../src/services/StoreManager/storages/CookieStorage.ts","../../../../src/services/StoreManager/storages/InMemoryStorage.ts","../../../../../../node_modules/storejs/dist/store.js","../../../../src/services/StoreManager/storages/LocalStorage.ts","../../../../src/services/StoreManager/storages/sessionStorage.ts","../../../../src/services/StoreManager/storages/storageEngine.ts","../../../../src/services/StoreManager/Store.ts","../../../../src/services/StoreManager/StoreManager.ts","../../../../src/services/StoreManager/utils.ts","../../../../src/components/configManager/util/validate.ts","../../../../src/components/utilities/url.ts","../../../../../analytics-js-common/src/utilities/url.ts","../../../../../analytics-js-common/src/constants/consent.ts","../../../../src/components/utilities/consent.ts","../../../../src/components/configManager/util/commonUtil.ts","../../../../src/components/utilities/statsCollection.ts","../../../../../analytics-js-common/src/utilities/detect.ts","../../../../src/components/configManager/util/cdnPaths.ts","../../../../src/components/configManager/ConfigManager.ts","../../../../src/components/utilities/destinations.ts","../../../../../analytics-js-common/src/utilities/timezone.ts","../../../../src/components/utilities/page.ts","../../../../src/components/capabilitiesManager/polyfill/index.ts","../../../../src/components/capabilitiesManager/CapabilitiesManager.ts","../../../../src/components/capabilitiesManager/detection/clientHint.ts","../../../../src/components/capabilitiesManager/detection/adBlockers.ts","../../../../src/components/eventManager/constants.ts","../../../../src/components/utilities/number.ts","../../../../src/components/userSessionManager/utils.ts","../../../../src/components/eventManager/utilities.ts","../../../../src/components/eventManager/RudderEventFactory.ts","../../../../src/components/eventManager/EventManager.ts","../../../../src/components/userSessionManager/UserSessionManager.ts","../../../../src/components/pluginsManager/defaultPluginsList.ts","../../../../src/components/eventRepository/constants.ts","../../../../src/components/eventRepository/utils.ts","../../../../src/components/utilities/callbacks.ts","../../../../src/components/eventRepository/EventRepository.ts","../../../../src/components/core/utilities.ts","../../../../src/components/core/Analytics.ts","../../../../src/components/utilities/loadOptions.ts","../../../../src/app/RudderAnalytics.ts","../../../../../analytics-js-common/src/utilities/page.ts","../../../../src/browser.ts"],"sourcesContent":["export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","import _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _curry2 from \"./_curry2.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry3(fn) {\n return function f3(a, b, c) {\n switch (arguments.length) {\n case 0:\n return f3;\n case 1:\n return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n });\n case 2:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _curry1(function (_c) {\n return fn(a, b, _c);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) {\n return fn(_a, _b, c);\n }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b, c);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b, c);\n }) : _isPlaceholder(c) ? _curry1(function (_c) {\n return fn(a, b, _c);\n }) : fn(a, b, c);\n }\n };\n}","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","import _curry1 from \"./internal/_curry1.js\";\n\n/**\n * Gives a single-word string description of the (native) type of a value,\n * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not\n * attempt to distinguish user Object types any further, reporting them all as\n * 'Object'.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Type\n * @sig * -> String\n * @param {*} val The value to test\n * @return {String}\n * @example\n *\n * R.type({}); //=> \"Object\"\n * R.type(1); //=> \"Number\"\n * R.type(false); //=> \"Boolean\"\n * R.type('s'); //=> \"String\"\n * R.type(null); //=> \"Null\"\n * R.type([]); //=> \"Array\"\n * R.type(/[A-z]/); //=> \"RegExp\"\n * R.type(() => {}); //=> \"Function\"\n * R.type(async () => {}); //=> \"AsyncFunction\"\n * R.type(undefined); //=> \"Undefined\"\n * R.type(BigInt(123)); //=> \"BigInt\"\n */\nvar type = /*#__PURE__*/_curry1(function type(val) {\n return val === null ? 'Null' : val === undefined ? 'Undefined' : Object.prototype.toString.call(val).slice(8, -1);\n});\nexport default type;","export default function _isObject(x) {\n return Object.prototype.toString.call(x) === '[object Object]';\n}","/**\n * Determine if the passed argument is an integer.\n *\n * @private\n * @param {*} n\n * @category Type\n * @return {Boolean}\n */\nexport default Number.isInteger || function _isInteger(n) {\n return n << 0 === n;\n};","import _isString from \"./_isString.js\";\nexport default function _nth(offset, list) {\n var idx = offset < 0 ? list.length + offset : offset;\n return _isString(list) ? list.charAt(idx) : list[idx];\n}","export default function _isString(x) {\n return Object.prototype.toString.call(x) === '[object String]';\n}","import _cloneRegExp from \"./_cloneRegExp.js\";\nimport type from \"../type.js\";\n\n/**\n * Copies an object.\n *\n * @private\n * @param {*} value The value to be copied\n * @param {Boolean} deep Whether or not to perform deep cloning.\n * @return {*} The copied value.\n */\nexport default function _clone(value, deep, map) {\n map || (map = new _ObjectMap());\n\n // this avoids the slower switch with a quick if decision removing some milliseconds in each run.\n if (_isPrimitive(value)) {\n return value;\n }\n var copy = function copy(copiedValue) {\n // Check for circular and same references on the object graph and return its corresponding clone.\n var cachedCopy = map.get(value);\n if (cachedCopy) {\n return cachedCopy;\n }\n map.set(value, copiedValue);\n for (var key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n copiedValue[key] = deep ? _clone(value[key], true, map) : value[key];\n }\n }\n return copiedValue;\n };\n switch (type(value)) {\n case 'Object':\n return copy(Object.create(Object.getPrototypeOf(value)));\n case 'Array':\n return copy(Array(value.length));\n case 'Date':\n return new Date(value.valueOf());\n case 'RegExp':\n return _cloneRegExp(value);\n case 'Int8Array':\n case 'Uint8Array':\n case 'Uint8ClampedArray':\n case 'Int16Array':\n case 'Uint16Array':\n case 'Int32Array':\n case 'Uint32Array':\n case 'Float32Array':\n case 'Float64Array':\n case 'BigInt64Array':\n case 'BigUint64Array':\n return value.slice();\n default:\n return value;\n }\n}\nfunction _isPrimitive(param) {\n var type = typeof param;\n return param == null || type != 'object' && type != 'function';\n}\nvar _ObjectMap = /*#__PURE__*/function () {\n function _ObjectMap() {\n this.map = {};\n this.length = 0;\n }\n _ObjectMap.prototype.set = function (key, value) {\n var hashedKey = this.hash(key);\n var bucket = this.map[hashedKey];\n if (!bucket) {\n this.map[hashedKey] = bucket = [];\n }\n bucket.push([key, value]);\n this.length += 1;\n };\n _ObjectMap.prototype.hash = function (key) {\n var hashedKey = [];\n for (var value in key) {\n hashedKey.push(Object.prototype.toString.call(key[value]));\n }\n return hashedKey.join();\n };\n _ObjectMap.prototype.get = function (key) {\n /**\n * depending on the number of objects to be cloned is faster to just iterate over the items in the map just because the hash function is so costly,\n * on my tests this number is 180, anything above that using the hash function is faster.\n */\n if (this.length <= 180) {\n for (var p in this.map) {\n var bucket = this.map[p];\n for (var i = 0; i < bucket.length; i += 1) {\n var element = bucket[i];\n if (element[0] === key) {\n return element[1];\n }\n }\n }\n return;\n }\n var hashedKey = this.hash(key);\n var bucket = this.map[hashedKey];\n if (!bucket) {\n return;\n }\n for (var i = 0; i < bucket.length; i += 1) {\n var element = bucket[i];\n if (element[0] === key) {\n return element[1];\n }\n }\n };\n return _ObjectMap;\n}();","export default function _cloneRegExp(pattern) {\n return new RegExp(pattern.source, pattern.flags ? pattern.flags : (pattern.global ? 'g' : '') + (pattern.ignoreCase ? 'i' : '') + (pattern.multiline ? 'm' : '') + (pattern.sticky ? 'y' : '') + (pattern.unicode ? 'u' : '') + (pattern.dotAll ? 's' : ''));\n}","import _clone from \"./internal/_clone.js\";\nimport _curry1 from \"./internal/_curry1.js\";\n\n/**\n * Creates a deep copy of the source that can be used in place of the source\n * object without retaining any references to it.\n * The source object may contain (nested) `Array`s and `Object`s,\n * `Number`s, `String`s, `Boolean`s and `Date`s.\n * `Function`s are assigned by reference rather than copied.\n *\n * Dispatches to a `clone` method if present.\n *\n * Note that if the source object has multiple nodes that share a reference,\n * the returned object will have the same structure, but the references will\n * be pointed to the location within the cloned value.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {*} -> {*}\n * @param {*} value The object or array to clone\n * @return {*} A deeply cloned copy of `val`\n * @example\n *\n * const objects = [{}, {}, {}];\n * const objectsClone = R.clone(objects);\n * objects === objectsClone; //=> false\n * objects[0] === objectsClone[0]; //=> false\n */\nvar clone = /*#__PURE__*/_curry1(function clone(value) {\n return value != null && typeof value.clone === 'function' ? value.clone() : _clone(value, true);\n});\nexport default clone;","import _isInteger from \"./_isInteger.js\";\nimport _nth from \"./_nth.js\";\nexport default function _path(pathAr, obj) {\n var val = obj;\n for (var i = 0; i < pathAr.length; i += 1) {\n if (val == null) {\n return undefined;\n }\n var p = pathAr[i];\n if (_isInteger(p)) {\n val = _nth(p, val);\n } else {\n val = val[p];\n }\n }\n return val;\n}","import _curry3 from \"./internal/_curry3.js\";\nimport _has from \"./internal/_has.js\";\n\n/**\n * Creates a new object with the own properties of the two provided objects. If\n * a key exists in both objects, the provided function is applied to the key\n * and the values associated with the key in each object, with the result being\n * used as the value associated with the key in the returned object.\n *\n * @func\n * @memberOf R\n * @since v0.19.0\n * @category Object\n * @sig ((String, a, a) -> a) -> {a} -> {a} -> {a}\n * @param {Function} fn\n * @param {Object} l\n * @param {Object} r\n * @return {Object}\n * @see R.mergeDeepWithKey, R.merge, R.mergeWith\n * @example\n *\n * let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r\n * R.mergeWithKey(concatValues,\n * { a: true, thing: 'foo', values: [10, 20] },\n * { b: true, thing: 'bar', values: [15, 35] });\n * //=> { a: true, b: true, thing: 'bar', values: [10, 20, 15, 35] }\n * @symb R.mergeWithKey(f, { x: 1, y: 2 }, { y: 5, z: 3 }) = { x: 1, y: f('y', 2, 5), z: 3 }\n */\nvar mergeWithKey = /*#__PURE__*/_curry3(function mergeWithKey(fn, l, r) {\n var result = {};\n var k;\n l = l || {};\n r = r || {};\n for (k in l) {\n if (_has(k, l)) {\n result[k] = _has(k, r) ? fn(k, l[k], r[k]) : l[k];\n }\n }\n for (k in r) {\n if (_has(k, r) && !_has(k, result)) {\n result[k] = r[k];\n }\n }\n return result;\n});\nexport default mergeWithKey;","import _curry3 from \"./internal/_curry3.js\";\nimport _isObject from \"./internal/_isObject.js\";\nimport mergeWithKey from \"./mergeWithKey.js\";\n\n/**\n * Creates a new object with the own properties of the two provided objects.\n * If a key exists in both objects:\n * - and both associated values are also objects then the values will be\n * recursively merged.\n * - otherwise the provided function is applied to the key and associated values\n * using the resulting value as the new value associated with the key.\n * If a key only exists in one object, the value will be associated with the key\n * of the resulting object.\n *\n * @func\n * @memberOf R\n * @since v0.24.0\n * @category Object\n * @sig ((String, a, a) -> a) -> {a} -> {a} -> {a}\n * @param {Function} fn\n * @param {Object} lObj\n * @param {Object} rObj\n * @return {Object}\n * @see R.mergeWithKey, R.mergeDeepWith\n * @example\n *\n * let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r\n * R.mergeDeepWithKey(concatValues,\n * { a: true, c: { thing: 'foo', values: [10, 20] }},\n * { b: true, c: { thing: 'bar', values: [15, 35] }});\n * //=> { a: true, b: true, c: { thing: 'bar', values: [10, 20, 15, 35] }}\n */\nvar mergeDeepWithKey = /*#__PURE__*/_curry3(function mergeDeepWithKey(fn, lObj, rObj) {\n return mergeWithKey(function (k, lVal, rVal) {\n if (_isObject(lVal) && _isObject(rVal)) {\n return mergeDeepWithKey(fn, lVal, rVal);\n } else {\n return fn(k, lVal, rVal);\n }\n }, lObj, rObj);\n});\nexport default mergeDeepWithKey;","import _curry3 from \"./internal/_curry3.js\";\nimport mergeDeepWithKey from \"./mergeDeepWithKey.js\";\n\n/**\n * Creates a new object with the own properties of the two provided objects.\n * If a key exists in both objects:\n * - and both associated values are also objects then the values will be\n * recursively merged.\n * - otherwise the provided function is applied to associated values using the\n * resulting value as the new value associated with the key.\n * If a key only exists in one object, the value will be associated with the key\n * of the resulting object.\n *\n * @func\n * @memberOf R\n * @since v0.24.0\n * @category Object\n * @sig ((a, a) -> a) -> {a} -> {a} -> {a}\n * @param {Function} fn\n * @param {Object} lObj\n * @param {Object} rObj\n * @return {Object}\n * @see R.mergeWith, R.mergeDeepWithKey\n * @example\n *\n * R.mergeDeepWith(R.concat,\n * { a: true, c: { values: [10, 20] }},\n * { b: true, c: { values: [15, 35] }});\n * //=> { a: true, b: true, c: { values: [10, 20, 15, 35] }}\n */\nvar mergeDeepWith = /*#__PURE__*/_curry3(function mergeDeepWith(fn, lObj, rObj) {\n return mergeDeepWithKey(function (k, lVal, rVal) {\n return fn(lVal, rVal);\n }, lObj, rObj);\n});\nexport default mergeDeepWith;","import _curry2 from \"./internal/_curry2.js\";\nimport _path from \"./internal/_path.js\";\n\n/**\n * Retrieves the value at a given path. The nodes of the path can be arbitrary strings or non-negative integers.\n * For anything else, the value is unspecified. Integer paths are meant to index arrays, strings are meant for objects.\n *\n * @func\n * @memberOf R\n * @since v0.2.0\n * @category Object\n * @typedefn Idx = String | Int | Symbol\n * @sig [Idx] -> {a} -> a | Undefined\n * @sig Idx = String | NonNegativeInt\n * @param {Array} path The path to use.\n * @param {Object} obj The object or array to retrieve the nested property from.\n * @return {*} The data at `path`.\n * @see R.prop, R.nth, R.assocPath, R.dissocPath\n * @example\n *\n * R.path(['a', 'b'], {a: {b: 2}}); //=> 2\n * R.path(['a', 'b'], {c: {b: 2}}); //=> undefined\n * R.path(['a', 'b', 0], {a: {b: [1, 2, 3]}}); //=> 1\n * R.path(['a', 'b', -2], {a: {b: [1, 2, 3]}}); //=> 2\n * R.path([2], {'2': 2}); //=> 2\n * R.path([-2], {'-2': 'a'}); //=> undefined\n */\n\nvar path = /*#__PURE__*/_curry2(_path);\nexport default path;","import _curry2 from \"./internal/_curry2.js\";\n\n/**\n * Returns a partial copy of an object containing only the keys that satisfy\n * the supplied predicate.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Object\n * @sig ((v, k) -> Boolean) -> {k: v} -> {k: v}\n * @param {Function} pred A predicate to determine whether or not a key\n * should be included on the output object.\n * @param {Object} obj The object to copy from\n * @return {Object} A new object with only properties that satisfy `pred`\n * on it.\n * @see R.pick, R.filter\n * @example\n *\n * const isUpperCase = (val, key) => key.toUpperCase() === key;\n * R.pickBy(isUpperCase, {a: 1, b: 2, A: 3, B: 4}); //=> {A: 3, B: 4}\n */\nvar pickBy = /*#__PURE__*/_curry2(function pickBy(test, obj) {\n var result = {};\n for (var prop in obj) {\n if (test(obj[prop], prop, obj)) {\n result[prop] = obj[prop];\n }\n }\n return result;\n});\nexport default pickBy;","/**\n * A function to check given value is a function\n * @param value input value\n * @returns boolean\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst isFunction = (value: any): value is Function =>\n typeof value === 'function' && Boolean(value.constructor && value.call && value.apply);\n\n/**\n * A function to check given value is a string\n * @param value input value\n * @returns boolean\n */\nconst isString = (value: any): value is string => typeof value === 'string';\n\n/**\n * A function to check given value is null or not\n * @param value input value\n * @returns boolean\n */\nconst isNull = (value: any): value is null => value === null;\n\n/**\n * A function to check given value is undefined\n * @param value input value\n * @returns boolean\n */\nconst isUndefined = (value: any): value is undefined => typeof value === 'undefined';\n\n/**\n * A function to check given value is null or undefined\n * @param value input value\n * @returns boolean\n */\nconst isNullOrUndefined = (value: any): boolean => isNull(value) || isUndefined(value);\n\n/**\n * Checks if the input is a BigInt\n * @param value input value\n * @returns True if the input is a BigInt\n */\nconst isBigInt = (value: any): value is bigint => typeof value === 'bigint';\n\n/**\n * A function to check given value is defined\n * @param value input value\n * @returns boolean\n */\nconst isDefined = (value: any): boolean => !isUndefined(value);\n\n/**\n * A function to check given value is defined and not null\n * @param value input value\n * @returns boolean\n */\nconst isDefinedAndNotNull = (value: any): boolean => !isNullOrUndefined(value);\n\n/**\n * A function to check given value is defined and not null\n * @param value input value\n * @returns boolean\n */\nconst isDefinedNotNullAndNotEmptyString = (value: any): boolean =>\n isDefinedAndNotNull(value) && value !== '';\n\n/**\n * Determines if the input is of type error\n * @param value input value\n * @returns true if the input is of type error else false\n */\nconst isTypeOfError = (value: any): boolean => {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n};\n\nexport {\n isFunction,\n isString,\n isNull,\n isUndefined,\n isNullOrUndefined,\n isTypeOfError,\n isDefined,\n isDefinedAndNotNull,\n isDefinedNotNullAndNotEmptyString,\n isBigInt,\n};\n","import { clone, mergeDeepWith, path, pickBy } from 'ramda';\nimport { isDefined, isDefinedAndNotNull, isNull } from './checks';\n\nconst getValueByPath = (obj: Record, keyPath: string): any => {\n const pathParts = keyPath.split('.');\n return path(pathParts, obj);\n};\n\nconst hasValueByPath = (obj: Record, path: string): boolean =>\n Boolean(getValueByPath(obj, path));\n\nconst isObject = (value: any): value is object => typeof value === 'object';\n\n/**\n * Checks if the input is an object literal or built-in object type and not null\n * @param value Input value\n * @returns true if the input is an object and not null\n */\nconst isObjectAndNotNull = (value: any): value is object =>\n !isNull(value) && isObject(value) && !Array.isArray(value);\n\n/**\n * Checks if the input is an object literal and not null\n * @param value Input value\n * @returns true if the input is an object and not null\n */\nconst isObjectLiteralAndNotNull = (value?: T): value is T =>\n !isNull(value) && Object.prototype.toString.call(value) === '[object Object]';\n\nconst mergeDeepRightObjectArrays = (\n leftValue: any | any[],\n rightValue: any | any[],\n): any | any[] => {\n if (!Array.isArray(leftValue) || !Array.isArray(rightValue)) {\n return clone(rightValue);\n }\n\n const mergedArray = clone(leftValue);\n rightValue.forEach((value, index) => {\n mergedArray[index] =\n Array.isArray(value) || isObjectAndNotNull(value)\n ? // eslint-disable-next-line @typescript-eslint/no-use-before-define\n mergeDeepRight(mergedArray[index], value)\n : value;\n });\n return mergedArray;\n};\n\nconst mergeDeepRight = >(\n leftObject: Record,\n rightObject: Record,\n): T => mergeDeepWith(mergeDeepRightObjectArrays, leftObject, rightObject);\n\n/**\n Checks if the input is a non-empty object literal type and not undefined or null\n * @param value input any\n * @returns boolean\n */\nconst isNonEmptyObject = (value?: T): value is T =>\n isObjectLiteralAndNotNull(value) && Object.keys(value as any).length > 0;\n\n/**\n * A utility to recursively remove undefined values from an object\n * @param obj input object\n * @returns a new object\n */\nconst removeUndefinedValues = >(obj: T): T => {\n const result = pickBy(isDefined, obj) as Record;\n Object.keys(result).forEach(key => {\n const value = result[key];\n if (isObjectLiteralAndNotNull(value)) {\n result[key] = removeUndefinedValues(value);\n }\n });\n\n return result as T;\n};\n\n/**\n * A utility to recursively remove undefined and null values from an object\n * @param obj input object\n * @returns a new object\n */\nconst removeUndefinedAndNullValues = >(obj: T): T => {\n const result = pickBy(isDefinedAndNotNull, obj) as Record;\n Object.keys(result).forEach(key => {\n const value = result[key];\n if (isObjectLiteralAndNotNull(value)) {\n result[key] = removeUndefinedAndNullValues(value);\n }\n });\n\n return result as T;\n};\n\n/**\n * Normalizes an object by removing undefined and null values.\n * @param val - The value to normalize\n * @returns The normalized object, or undefined if input is not a non-empty object\n * @example\n * getNormalizedObjectValue({ a: 1, b: null, c: undefined }) // returns { a: 1 }\n * getNormalizedObjectValue({}) // returns undefined\n * getNormalizedObjectValue(null) // returns undefined\n */\nconst getNormalizedObjectValue = (val: any): any => {\n if (!isNonEmptyObject(val)) {\n return undefined;\n }\n\n return removeUndefinedAndNullValues(val);\n};\n\n/**\n * Normalizes a value to a boolean, with support for a default value\n * @param val Input value\n * @param defVal Default value\n * @returns Returns the normalized boolean value\n * @example\n * getNormalizedBooleanValue(true, false) // returns true\n */\nconst getNormalizedBooleanValue = (val: any, defVal: boolean | undefined): boolean | undefined => {\n if (isDefined(defVal)) {\n return isDefined(val) ? val === true : defVal;\n }\n\n return val === true;\n};\n\nexport {\n getValueByPath,\n hasValueByPath,\n mergeDeepRightObjectArrays,\n mergeDeepRight,\n isObjectAndNotNull,\n isNonEmptyObject,\n isObjectLiteralAndNotNull,\n removeUndefinedValues,\n removeUndefinedAndNullValues,\n isObject,\n getNormalizedObjectValue,\n getNormalizedBooleanValue,\n};\n","import type { Nullable } from '../types/Nullable';\nimport { isNullOrUndefined, isString } from './checks';\n\n// TODO: see if bundle size is bumped up if we use ramda trim instead of custom\nconst trim = (value: string): string => value.replace(/^\\s+|\\s+$/gm, '');\n\nconst removeDoubleSpaces = (value: string): string => value.replace(/ {2,}/g, ' ');\n\nconst removeLeadingPeriod = (value: string): string => value.replace(/^\\.+/, '');\n\n/**\n * A function to convert values to string\n * @param val input value\n * @returns stringified value\n */\nconst tryStringify = (val?: any): Nullable | undefined => {\n let retVal = val;\n if (!isString(val) && !isNullOrUndefined(val)) {\n try {\n retVal = JSON.stringify(val);\n } catch (e) {\n retVal = null;\n }\n }\n return retVal;\n};\n\n// The following text encoding and decoding is done before base64 encoding to prevent\n// https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n\n/**\n * Converts a base64 encoded string to bytes array\n * @param base64Str base64 encoded string\n * @returns bytes array\n */\nconst base64ToBytes = (base64Str: string): Uint8Array => {\n const binString = (globalThis as typeof window).atob(base64Str);\n const bytes = binString.split('').map(char => char.charCodeAt(0));\n return new Uint8Array(bytes);\n};\n\n/**\n * Converts a bytes array to base64 encoded string\n * @param bytes bytes array to be converted to base64\n * @returns base64 encoded string\n */\nconst bytesToBase64 = (bytes: Uint8Array): string => {\n const binString = Array.from(bytes, x => String.fromCodePoint(x)).join('');\n return (globalThis as typeof window).btoa(binString);\n};\n\n/**\n * Encodes a string to base64 even with unicode characters\n * @param value input string\n * @returns base64 encoded string\n */\nconst toBase64 = (value: string): string => bytesToBase64(new TextEncoder().encode(value));\n\n/**\n * Decodes a base64 encoded string\n * @param value base64 encoded string\n * @returns decoded string\n */\nconst fromBase64 = (value: string): string => new TextDecoder().decode(base64ToBytes(value));\n\nexport { trim, removeDoubleSpaces, tryStringify, toBase64, fromBase64, removeLeadingPeriod };\n","import { clone } from 'ramda';\nimport type { ApiObject } from '../types/ApiObject';\nimport type { ApiCallback, ApiOptions } from '../types/EventApi';\nimport type { Nullable } from '../types/Nullable';\nimport { isObjectLiteralAndNotNull, mergeDeepRight } from './object';\nimport { isDefined, isDefinedAndNotNull, isFunction, isNull, isString } from './checks';\nimport { tryStringify } from './string';\nimport type { IdentifyTraits } from '../types/traits';\n\nexport type PageCallOptions = {\n category?: string;\n name?: string;\n properties?: Nullable;\n options?: Nullable;\n callback?: ApiCallback;\n};\n\nexport type TrackCallOptions = {\n name: string;\n properties?: Nullable;\n options?: Nullable;\n callback?: ApiCallback;\n};\n\nexport type IdentifyCallOptions = {\n userId?: Nullable;\n traits?: Nullable;\n options?: Nullable;\n callback?: ApiCallback;\n};\n\nexport type AliasCallOptions = {\n to: string;\n from?: string;\n options?: Nullable;\n callback?: ApiCallback;\n};\n\nexport type GroupCallOptions = {\n groupId?: Nullable;\n traits?: Nullable;\n options?: Nullable;\n callback?: ApiCallback;\n};\n\n// TODO: is there any specific reason why we set the overloaded values to null instead of undefined?\n// if yes make them null instead of omitting in overloaded cases\n\n/*\n * Normalise the overloaded arguments of the page call facade\n */\nconst pageArgumentsToCallOptions = (\n category?: string | Nullable | ApiCallback,\n name?: string | Nullable | Nullable | ApiCallback,\n properties?: Nullable | Nullable | ApiCallback,\n options?: Nullable | ApiCallback,\n callback?: ApiCallback,\n): PageCallOptions => {\n const payload: PageCallOptions = {\n category: category as string,\n name: name as string,\n properties: properties as Nullable,\n options: options as Nullable,\n callback: undefined,\n };\n\n if (isFunction(callback)) {\n payload.callback = callback;\n }\n\n if (isFunction(options)) {\n payload.category = category as string;\n payload.name = name as string;\n payload.properties = properties as Nullable;\n payload.options = undefined;\n payload.callback = options;\n }\n\n if (isFunction(properties)) {\n payload.category = category as string;\n payload.name = name as string;\n payload.properties = undefined;\n payload.options = undefined;\n payload.callback = properties;\n }\n\n if (isFunction(name)) {\n payload.category = category as string;\n payload.name = undefined;\n payload.properties = undefined;\n payload.options = undefined;\n payload.callback = name;\n }\n\n if (isFunction(category)) {\n payload.category = undefined;\n payload.name = undefined;\n payload.properties = undefined;\n payload.options = undefined;\n payload.callback = category;\n }\n\n if (isObjectLiteralAndNotNull(category)) {\n payload.name = undefined;\n payload.category = undefined;\n payload.properties = category as Nullable;\n if (!isFunction(name)) {\n payload.options = name as Nullable;\n } else {\n payload.options = undefined;\n }\n } else if (isObjectLiteralAndNotNull(name)) {\n payload.name = undefined;\n payload.properties = name as Nullable;\n if (!isFunction(properties)) {\n payload.options = properties as Nullable;\n } else {\n payload.options = undefined;\n }\n }\n\n // if the category argument alone is provided b/w category and name,\n // use it as name and set category to undefined\n if (isString(category) && !isString(name)) {\n payload.category = undefined;\n payload.name = category;\n }\n\n // Rest of the code is just to clean up undefined values\n // and set some proper defaults\n // Also, to clone the incoming object type arguments\n if (!isDefined(payload.category)) {\n payload.category = undefined;\n }\n\n if (!isDefined(payload.name)) {\n payload.name = undefined;\n }\n\n payload.properties = payload.properties ? clone(payload.properties) : {};\n\n if (isDefined(payload.options)) {\n payload.options = clone(payload.options);\n } else {\n payload.options = undefined;\n }\n\n const nameForProperties = isString(payload.name) ? payload.name : payload.properties.name;\n const categoryForProperties = isString(payload.category)\n ? payload.category\n : payload.properties.category;\n\n // add name and category to properties\n payload.properties = mergeDeepRight(\n isObjectLiteralAndNotNull(payload.properties) ? payload.properties : {},\n {\n ...(nameForProperties && { name: nameForProperties }),\n ...(categoryForProperties && { category: categoryForProperties }),\n },\n );\n\n return payload;\n};\n\n/*\n * Normalise the overloaded arguments of the track call facade\n */\nconst trackArgumentsToCallOptions = (\n event: string,\n properties?: Nullable | ApiCallback,\n options?: Nullable | ApiCallback,\n callback?: ApiCallback,\n): TrackCallOptions => {\n const payload: TrackCallOptions = {\n name: event,\n properties: properties as Nullable,\n options: options as Nullable,\n callback: undefined,\n };\n\n if (isFunction(callback)) {\n payload.callback = callback;\n }\n\n if (isFunction(options)) {\n payload.properties = properties as Nullable;\n payload.options = undefined;\n payload.callback = options;\n }\n\n if (isFunction(properties)) {\n payload.properties = undefined;\n payload.options = undefined;\n payload.callback = properties;\n }\n\n // Rest of the code is just to clean up undefined values\n // and set some proper defaults\n // Also, to clone the incoming object type arguments\n payload.properties = isDefinedAndNotNull(payload.properties) ? clone(payload.properties) : {};\n\n if (isDefined(payload.options)) {\n payload.options = clone(payload.options);\n } else {\n payload.options = undefined;\n }\n\n return payload;\n};\n\n/*\n * Normalise the overloaded arguments of the identify call facade\n */\nconst identifyArgumentsToCallOptions = (\n userId: string | number | Nullable,\n traits?: Nullable | Nullable | ApiCallback,\n options?: Nullable | ApiCallback,\n callback?: ApiCallback,\n): IdentifyCallOptions => {\n const payload: IdentifyCallOptions = {\n userId: userId as string,\n traits: traits as Nullable,\n options: options as Nullable,\n callback: undefined,\n };\n\n if (isFunction(callback)) {\n payload.callback = callback;\n }\n\n if (isFunction(options)) {\n payload.userId = userId as string;\n payload.traits = traits as Nullable;\n payload.options = undefined;\n payload.callback = options;\n }\n\n if (isFunction(traits)) {\n payload.userId = userId as string;\n payload.traits = undefined;\n payload.options = undefined;\n payload.callback = traits;\n }\n\n if (isObjectLiteralAndNotNull(userId) || isNull(userId)) {\n // Explicitly set null to prevent resetting the existing value\n // in the Analytics class\n payload.userId = null;\n payload.traits = userId as Nullable;\n if (!isFunction(traits)) {\n payload.options = traits as Nullable;\n } else {\n payload.options = undefined;\n }\n }\n\n // Rest of the code is just to clean up undefined values\n // and set some proper defaults\n // Also, to clone the incoming object type arguments\n payload.userId = tryStringify(payload.userId);\n\n if (isObjectLiteralAndNotNull(payload.traits)) {\n payload.traits = clone(payload.traits);\n } else {\n payload.traits = undefined;\n }\n\n if (isDefined(payload.options)) {\n payload.options = clone(payload.options);\n } else {\n payload.options = undefined;\n }\n\n return payload;\n};\n\n/*\n * Normalise the overloaded arguments of the alias call facade\n */\nconst aliasArgumentsToCallOptions = (\n to: string,\n from?: string | Nullable | ApiCallback,\n options?: Nullable | ApiCallback,\n callback?: ApiCallback,\n): AliasCallOptions => {\n const payload: AliasCallOptions = {\n to,\n from: from as string,\n options: options as Nullable,\n callback: undefined,\n };\n\n if (isFunction(callback)) {\n payload.callback = callback;\n }\n\n if (isFunction(options)) {\n payload.to = to;\n payload.from = from as string;\n payload.options = undefined;\n payload.callback = options;\n }\n\n if (isFunction(from)) {\n payload.to = to;\n payload.from = undefined;\n payload.options = undefined;\n payload.callback = from;\n } else if (isObjectLiteralAndNotNull(from) || isNull(from)) {\n payload.to = to;\n payload.from = undefined;\n payload.options = from as Nullable;\n }\n\n // Rest of the code is just to clean up undefined values\n // and set some proper defaults\n // Also, to clone the incoming object type arguments\n if (isDefined(payload.to)) {\n payload.to = tryStringify(payload.to) as typeof payload.to;\n }\n\n if (isDefined(payload.from)) {\n payload.from = tryStringify(payload.from) as typeof payload.from;\n } else {\n payload.from = undefined;\n }\n\n if (isDefined(payload.options)) {\n payload.options = clone(payload.options);\n } else {\n payload.options = undefined;\n }\n\n return payload;\n};\n\n/*\n * Normalise the overloaded arguments of the group call facade\n */\nconst groupArgumentsToCallOptions = (\n groupId: string | number | Nullable,\n traits?: Nullable | Nullable | ApiCallback,\n options?: Nullable | ApiCallback,\n callback?: ApiCallback,\n): GroupCallOptions => {\n const payload: GroupCallOptions = {\n groupId: groupId as string,\n traits: traits as Nullable,\n options: options as Nullable,\n callback: undefined,\n };\n\n if (isFunction(callback)) {\n payload.callback = callback;\n }\n\n if (isFunction(options)) {\n payload.groupId = groupId as string;\n payload.traits = traits as Nullable;\n payload.options = undefined;\n payload.callback = options;\n }\n\n if (isFunction(traits)) {\n payload.groupId = groupId as string;\n payload.traits = undefined;\n payload.options = undefined;\n payload.callback = traits;\n }\n\n if (isObjectLiteralAndNotNull(groupId) || isNull(groupId)) {\n // Explicitly set null to prevent resetting the existing value\n // in the Analytics class\n payload.groupId = null;\n payload.traits = groupId as Nullable;\n if (!isFunction(traits)) {\n payload.options = traits as Nullable;\n } else {\n payload.options = undefined;\n }\n }\n\n // Rest of the code is just to clean up undefined values\n // and set some proper defaults\n // Also, to clone the incoming object type arguments\n payload.groupId = tryStringify(payload.groupId);\n\n if (isObjectLiteralAndNotNull(payload.traits)) {\n payload.traits = clone(payload.traits);\n } else {\n payload.traits = undefined;\n }\n\n if (isDefined(payload.options)) {\n payload.options = clone(payload.options);\n } else {\n payload.options = undefined;\n }\n\n return payload;\n};\n\nexport {\n pageArgumentsToCallOptions,\n trackArgumentsToCallOptions,\n identifyArgumentsToCallOptions,\n aliasArgumentsToCallOptions,\n groupArgumentsToCallOptions,\n};\n","import type { LogLevel } from './Logger';\nimport type { Nullable } from './Nullable';\nimport type { PluginName } from './PluginsManager';\nimport type { IntegrationOpts } from './Integration';\nimport type { ApiOptions } from './EventApi';\nimport type { ConsentManagementOptions } from './Consent';\nimport type { ApiObject } from './ApiObject';\nimport type { StorageOpts, CookieSameSite } from './Storage';\n\nexport type UaChTrackLevel = 'none' | 'default' | 'full';\n\n/**\n * Represents the options parameter for anonymousId\n */\nexport type AnonymousIdOptions = {\n autoCapture?: {\n enabled?: boolean;\n source?: string;\n };\n};\n\nexport type SessionOpts = {\n autoTrack?: boolean; // Defaults to true\n timeout?: number; // Defaults to 30 minutes\n};\n\nexport type EventMapping = {\n from: string;\n to: string;\n};\n\nexport type Conversion = {\n conversionLabel: string;\n name: string;\n};\n\nexport type EventFilteringOption = 'disable' | 'whitelistedEvents' | 'blacklistedEvents';\n\n/**\n * Represents the beacon queue options parameter in loadOptions type\n */\nexport type BeaconQueueOpts = {\n // Maximum number of events in storage\n maxItems?: number;\n // Time in milliseconds to flush the queue automatically\n flushQueueInterval?: number;\n};\n\nexport type EventsTransportMode = 'xhr' | 'beacon';\n\nexport type BatchOpts = {\n // Whether to enable batching\n enabled: boolean;\n // Maximum number of events in a batch\n maxItems?: number;\n // Maximum size of a batch request in bytes\n maxSize?: number;\n // Time in milliseconds to flush the queue automatically\n flushInterval?: number;\n};\n\n/**\n * Represents the queue options parameter in loadOptions type\n */\nexport type QueueOpts = {\n // Upper cap on maximum delay for an event\n maxRetryDelay?: number;\n // Minimum delay before sending an event\n minRetryDelay?: number;\n // Exponential base\n backoffFactor?: number;\n // Jitter to be applied to the delay\n backoffJitter?: number;\n // Maximum number of attempts\n maxAttempts?: number;\n // Maximum number of events/events batch in storage\n maxItems?: number;\n // Options for batched requests\n batch?: BatchOpts;\n // The scale factor applied to the default timer values\n timerScaleFactor?: number;\n};\n\n/**\n * Represents the destinations queue options parameter in loadOptions type\n */\nexport type DestinationsQueueOpts = {\n maxItems?: number;\n};\n\nexport type OnLoadedCallback = (analytics: any) => void;\n\nexport type DeliveryType = 'immediate' | 'buffer';\n\nexport type StorageStrategy = 'none' | 'session' | 'anonymousId';\n\nexport type PreConsentStorageOptions = {\n strategy: StorageStrategy;\n};\n\nexport type PreConsentEventsOptions = {\n delivery: DeliveryType;\n};\n\nexport type PreConsentOptions = {\n enabled: boolean;\n storage?: PreConsentStorageOptions;\n events?: PreConsentEventsOptions;\n};\n\nexport enum PageLifecycleEvents {\n LOADED = 'Page Loaded',\n UNLOADED = 'Page Unloaded',\n}\n\nexport type PageLifecycleOptions = {\n enabled: boolean; // default false\n events?: PageLifecycleEvents[];\n options?: ApiOptions;\n};\n\nexport type AutoTrackOptions = {\n enabled?: boolean; // default false\n options?: ApiOptions;\n pageLifecycle?: PageLifecycleOptions;\n};\n\n/**\n * Represents the options parameter in the load API\n */\nexport type LoadOptions = {\n logLevel?: LogLevel; // defaults to ERROR\n integrations?: IntegrationOpts; // defaults to { All : true }\n configUrl?: string; // defaults to https://api.rudderstack.com\n queueOptions?: QueueOpts;\n loadIntegration?: boolean; // defaults to true.\n sessions?: SessionOpts;\n secureCookie?: boolean; // defaults to false.\n destSDKBaseURL?: string; // defaults to https://cdn.rudderlabs.com/latest/v3/modern/js-integrations\n pluginsSDKBaseURL?: string; // defaults to https://cdn.rudderlabs.com/latest/v3/modern/plugins\n useBeacon?: boolean; // defaults to false.\n beaconQueueOptions?: BeaconQueueOpts;\n destinationsQueueOptions?: DestinationsQueueOpts;\n anonymousIdOptions?: AnonymousIdOptions;\n setCookieDomain?: string; // defaults to current domain.\n sameSiteCookie?: CookieSameSite; // defaults to Lax.\n /**\n * @deprecated Integrations version are locked by default. We do not recommend using this option.\n */\n lockIntegrationsVersion?: boolean; // defaults to true.\n /**\n * @deprecated Plugins version are locked by default. We do not recommend using this option.\n */\n lockPluginsVersion?: boolean; // defaults to true.\n polyfillIfRequired?: boolean; // defaults to true. Controls whether the SDK should polyfill unsupported browser API's if they are detected as missing\n onLoaded?: OnLoadedCallback;\n uaChTrackLevel?: UaChTrackLevel;\n // TODO: define type for sourceConfig once the trimmed response is implemented\n getSourceConfig?: () => string | ApiObject | Promise | Promise;\n sendAdblockPage?: boolean;\n sendAdblockPageOptions?: ApiOptions;\n plugins?: Nullable;\n polyfillURL?: string;\n useGlobalIntegrationsConfigInEvents?: boolean;\n bufferDataPlaneEventsUntilReady?: boolean;\n dataPlaneEventsBufferTimeout?: number;\n storage?: StorageOpts;\n preConsent?: PreConsentOptions;\n // transport mechanism to be used for sending batched requests\n transportMode?: EventsTransportMode; // Unused for now. This will deprecate the useBeacon and beaconQueueOptions\n consentManagement?: ConsentManagementOptions;\n sameDomainCookiesOnly?: boolean;\n externalAnonymousIdCookieName?: string;\n useServerSideCookies?: boolean;\n dataServiceEndpoint?: string;\n autoTrack?: AutoTrackOptions;\n};\n\nexport type ConsentOptions = {\n storage?: StorageOpts;\n consentManagement?: ConsentManagementOptions;\n integrations?: IntegrationOpts;\n discardPreConsentEvents?: boolean;\n sendPageEvent?: boolean;\n trackConsent?: boolean;\n};\n","const API_SUFFIX = 'API';\nconst CAPABILITIES_MANAGER = 'CapabilitiesManager';\nconst CONFIG_MANAGER = 'ConfigManager';\nconst EVENT_MANAGER = 'EventManager';\nconst PLUGINS_MANAGER = 'PluginsManager';\nconst USER_SESSION_MANAGER = 'UserSessionManager';\nconst ERROR_HANDLER = 'ErrorHandler';\nconst PLUGIN_ENGINE = 'PluginEngine';\nconst STORE_MANAGER = 'StoreManager';\nconst READY_API = `Ready${API_SUFFIX}`;\nconst LOAD_API = `Load${API_SUFFIX}`;\nconst EVENT_REPOSITORY = 'EventRepository';\nconst EXTERNAL_SRC_LOADER = 'ExternalSrcLoader';\nconst HTTP_CLIENT = 'HttpClient';\nconst RSA = 'RudderStackAnalytics';\nconst ANALYTICS_CORE = 'AnalyticsCore';\nexport {\n CAPABILITIES_MANAGER,\n CONFIG_MANAGER,\n EVENT_MANAGER,\n PLUGINS_MANAGER,\n USER_SESSION_MANAGER,\n ERROR_HANDLER,\n PLUGIN_ENGINE,\n STORE_MANAGER,\n READY_API,\n LOAD_API,\n EVENT_REPOSITORY,\n EXTERNAL_SRC_LOADER,\n HTTP_CLIENT,\n RSA,\n ANALYTICS_CORE,\n API_SUFFIX,\n};\n","import { random } from '@lukeed/csprng';\n\nvar SIZE=4096, HEX=[], IDX=0, BUFFER;\n\nfor (; IDX < 256; IDX++) {\n\tHEX[IDX] = (IDX + 256).toString(16).substring(1);\n}\n\nexport function v4() {\n\tif (!BUFFER || ((IDX + 16) > SIZE)) {\n\t\tBUFFER = random(SIZE);\n\t\tIDX = 0;\n\t}\n\n\tvar i=0, tmp, out='';\n\tfor (; i < 16; i++) {\n\t\ttmp = BUFFER[IDX + i];\n\t\tif (i==6) out += HEX[tmp & 15 | 64];\n\t\telse if (i==8) out += HEX[tmp & 63 | 128];\n\t\telse out += HEX[tmp];\n\n\t\tif (i & 1 && i > 1 && i < 11) out += '-';\n\t}\n\n\tIDX += 16;\n\treturn out;\n}\n","export function random(len) {\n\treturn crypto.getRandomValues(new Uint8Array(len));\n}\n","var IDX=256, HEX=[], BUFFER;\nwhile (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);\n\nexport function v4() {\n\tvar i=0, num, out='';\n\n\tif (!BUFFER || ((IDX + 16) > 256)) {\n\t\tBUFFER = Array(i=256);\n\t\twhile (i--) BUFFER[i] = 256 * Math.random() | 0;\n\t\ti = IDX = 0;\n\t}\n\n\tfor (; i < 16; i++) {\n\t\tnum = BUFFER[IDX + i];\n\t\tif (i==6) out += HEX[num & 15 | 64];\n\t\telse if (i==8) out += HEX[num & 63 | 128];\n\t\telse out += HEX[num];\n\n\t\tif (i & 1 && i > 1 && i < 11) out += '-';\n\t}\n\n\tIDX++;\n\treturn out;\n}\n","import { isFunction, isNullOrUndefined } from './checks';\n\nconst hasCrypto = (): boolean =>\n !isNullOrUndefined(globalThis.crypto) && isFunction(globalThis.crypto.getRandomValues);\n\nexport { hasCrypto };\n","import { v4 as uuidSecure } from '@lukeed/uuid/secure';\nimport { v4 as uuid } from '@lukeed/uuid';\nimport { hasCrypto } from './crypto';\n\nconst generateUUID = (): string => {\n if (hasCrypto()) {\n return uuidSecure();\n }\n\n return uuid();\n};\n\nexport { generateUUID };\n","const getFormattedTimestamp = (date: Date): string => date.toISOString();\n\n/**\n * To get the current timestamp in ISO string format\n * @returns ISO formatted timestamp string\n */\nconst getCurrentTimeFormatted = (): string => getFormattedTimestamp(new Date());\n\nexport { getCurrentTimeFormatted, getFormattedTimestamp };\n","const LOG_CONTEXT_SEPARATOR = ':: ';\n\nconst SCRIPT_ALREADY_EXISTS_ERROR = (id: string): string =>\n `A script with the id \"${id}\" is already loaded. Skipping the loading of this script to prevent conflicts.`;\n\nconst SCRIPT_LOAD_ERROR = (id: string, url: string): string =>\n `Failed to load the script with the id \"${id}\" from URL \"${url}\".`;\n\nconst SCRIPT_LOAD_TIMEOUT_ERROR = (id: string, url: string, timeout: number): string =>\n `A timeout of ${timeout} ms occurred while trying to load the script with id \"${id}\" from URL \"${url}\".`;\n\nconst CIRCULAR_REFERENCE_WARNING = (context: string, key: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}A circular reference has been detected in the object and the property \"${key}\" has been dropped from the output.`;\n\nconst JSON_STRINGIFY_WARNING = `Failed to convert the value to a JSON string.`;\n\nconst BAD_DATA_WARNING = (context: string, key: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}A bad data (like circular reference, BigInt) has been detected in the object and the property \"${key}\" has been dropped from the output.`;\n\nconst COOKIE_DATA_ENCODING_ERROR = `Failed to encode the cookie data.`;\n\nexport {\n LOG_CONTEXT_SEPARATOR,\n SCRIPT_ALREADY_EXISTS_ERROR,\n SCRIPT_LOAD_ERROR,\n SCRIPT_LOAD_TIMEOUT_ERROR,\n CIRCULAR_REFERENCE_WARNING,\n JSON_STRINGIFY_WARNING,\n BAD_DATA_WARNING,\n COOKIE_DATA_ENCODING_ERROR,\n};\n","import type { ILogger } from '../types/Logger';\nimport type { Nullable } from '../types/Nullable';\nimport { isBigInt, isNull, isNullOrUndefined } from './checks';\nimport {\n BAD_DATA_WARNING,\n CIRCULAR_REFERENCE_WARNING,\n JSON_STRINGIFY_WARNING,\n} from '../constants/logMessages';\nimport { isObjectLiteralAndNotNull } from './object';\n\nconst JSON_STRINGIFY = 'JSONStringify';\nconst JSON_UTIL = 'JSON';\nconst BIG_INT_PLACEHOLDER = '[BigInt]';\nconst CIRCULAR_REFERENCE_PLACEHOLDER = '[Circular Reference]';\n\nconst getCircularReplacer = (\n excludeNull?: boolean,\n excludeKeys?: string[],\n logger?: ILogger,\n): ((key: string, value: any) => any) => {\n const ancestors: any[] = [];\n\n // Here we do not want to use arrow function to use \"this\" in function context\n // eslint-disable-next-line func-names\n return function (key, value): any {\n if (excludeKeys?.includes(key)) {\n return undefined;\n }\n\n if (excludeNull && isNullOrUndefined(value)) {\n return undefined;\n }\n\n if (typeof value !== 'object' || isNull(value)) {\n return value;\n }\n\n // `this` is the object that value is contained in, i.e., its direct parent.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore-next-line\n while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this) {\n ancestors.pop();\n }\n\n if (ancestors.includes(value)) {\n logger?.warn(CIRCULAR_REFERENCE_WARNING(JSON_STRINGIFY, key));\n return CIRCULAR_REFERENCE_PLACEHOLDER;\n }\n\n ancestors.push(value);\n return value;\n };\n};\n\n/**\n * Utility method for JSON stringify object excluding null values & circular references\n *\n * @param {*} value input\n * @param {boolean} excludeNull if it should exclude nul or not\n * @param {function} logger optional logger methods for warning\n * @returns string\n */\nconst stringifyWithoutCircular = | any[] | number | string>(\n value?: Nullable,\n excludeNull?: boolean,\n excludeKeys?: string[],\n logger?: ILogger,\n): Nullable => {\n try {\n return JSON.stringify(value, getCircularReplacer(excludeNull, excludeKeys, logger));\n } catch (err) {\n logger?.warn(JSON_STRINGIFY_WARNING, err);\n return null;\n }\n};\n\n/**\n * Utility method for JSON stringify object excluding null values & circular references\n *\n * @param {*} value input value\n * @param {boolean} excludeNull optional flag to exclude null values\n * @param {string[]} excludeKeys optional array of keys to exclude\n * @returns string\n */\nconst stringifyData = | any[] | number | string>(\n value?: Nullable,\n excludeNull: boolean = true,\n excludeKeys: string[] = [],\n): string =>\n JSON.stringify(value, (key: string, value: any): any => {\n if ((excludeNull && isNull(value)) || excludeKeys.includes(key)) {\n return undefined;\n }\n return value;\n });\n\nconst getReplacer = (logger?: ILogger): ((key: string, value: any) => any) => {\n const ancestors: any[] = []; // Array to track ancestor objects\n\n // Using a regular function to use `this` for the parent context\n return function replacer(key, value): any {\n if (isBigInt(value)) {\n logger?.warn(BAD_DATA_WARNING(JSON_UTIL, key));\n return BIG_INT_PLACEHOLDER; // Replace BigInt values\n }\n\n // `this` is the object that value is contained in, i.e., its direct parent.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore-next-line\n while (ancestors.length > 0 && ancestors[ancestors.length - 1] !== this) {\n ancestors.pop(); // Remove ancestors that are no longer part of the chain\n }\n\n // Check for circular references (if the value is already in the ancestors)\n if (ancestors.includes(value)) {\n logger?.warn(BAD_DATA_WARNING(JSON_UTIL, key));\n return CIRCULAR_REFERENCE_PLACEHOLDER;\n }\n\n // Add current value to ancestors\n ancestors.push(value);\n\n return value;\n };\n};\n\nconst traverseWithThis = (obj: any, replacer: (key: string, value: any) => any): any => {\n // Create a new result object or array\n const result = Array.isArray(obj) ? [] : {};\n\n // Traverse object properties or array elements\n // eslint-disable-next-line no-restricted-syntax\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n const value = obj[key];\n\n // Recursively apply the replacer and traversal\n const sanitizedValue = replacer.call(obj, key, value);\n\n // If the value is an object or array, continue traversal\n if (isObjectLiteralAndNotNull(sanitizedValue) || Array.isArray(sanitizedValue)) {\n (result as any)[key] = traverseWithThis(sanitizedValue, replacer);\n } else {\n (result as any)[key] = sanitizedValue;\n }\n }\n }\n\n return result;\n};\n\n/**\n * Recursively traverses an object similar to JSON.stringify,\n * sanitizing BigInts and circular references\n * @param value Input object\n * @param logger Logger instance\n * @returns Sanitized value\n */\nconst getSanitizedValue = (value: T, logger?: ILogger): T => {\n const replacer = getReplacer(logger);\n\n // This is needed for registering the first ancestor\n const newValue = replacer.call(value, '', value);\n\n if (isObjectLiteralAndNotNull(value) || Array.isArray(value)) {\n return traverseWithThis(value, replacer);\n }\n return newValue;\n};\n\nexport { stringifyWithoutCircular, stringifyData, getSanitizedValue };\n","import { isTypeOfError } from './checks';\nimport { stringifyWithoutCircular } from './json';\n\nconst MANUAL_ERROR_IDENTIFIER = '[SDK DISPATCHED ERROR]';\n\nconst getStacktrace = (err: any): string | undefined => {\n const { stack, stacktrace } = err;\n const operaSourceloc = err['opera#sourceloc'];\n\n const stackString = stack ?? stacktrace ?? operaSourceloc;\n\n if (!!stackString && typeof stackString === 'string') {\n return stackString;\n }\n return undefined;\n};\n\n/**\n * Get mutated error with issue prepended to error message\n * @param err Original error\n * @param issue Issue to prepend to error message\n * @returns Instance of Error with message prepended with issue\n */\nconst getMutatedError = (err: any, issue: string): Error => {\n let finalError = err;\n if (!isTypeOfError(err)) {\n finalError = new Error(`${issue}: ${stringifyWithoutCircular(err as Record)}`);\n } else {\n (finalError as Error).message = `${issue}: ${err.message}`;\n }\n return finalError;\n};\n\nconst dispatchErrorEvent = (error: any) => {\n if (isTypeOfError(error)) {\n const errStack = getStacktrace(error);\n if (errStack) {\n const { stack, stacktrace } = error;\n const operaSourceloc = error['opera#sourceloc'];\n\n switch (errStack) {\n case stack:\n // eslint-disable-next-line no-param-reassign\n error.stack = `${stack}\\n${MANUAL_ERROR_IDENTIFIER}`;\n break;\n case stacktrace:\n // eslint-disable-next-line no-param-reassign\n error.stacktrace = `${stacktrace}\\n${MANUAL_ERROR_IDENTIFIER}`;\n break;\n case operaSourceloc:\n default:\n // eslint-disable-next-line no-param-reassign\n error['opera#sourceloc'] = `${operaSourceloc}\\n${MANUAL_ERROR_IDENTIFIER}`;\n break;\n }\n }\n }\n\n (globalThis as typeof window).dispatchEvent(\n new ErrorEvent('error', { error, bubbles: true, cancelable: true, composed: true }),\n );\n};\n\nexport { getMutatedError, dispatchErrorEvent, MANUAL_ERROR_IDENTIFIER, getStacktrace };\n","const APP_NAME = 'RudderLabs JavaScript SDK';\nconst APP_VERSION = '__PACKAGE_VERSION__';\nconst APP_NAMESPACE = 'com.rudderlabs.javascript';\nconst MODULE_TYPE = '__MODULE_TYPE__';\nconst IS_LEGACY_BUILD = __IS_LEGACY_BUILD__;\nconst ADBLOCK_PAGE_CATEGORY = 'RudderJS-Initiated';\nconst ADBLOCK_PAGE_NAME = 'ad-block page request';\nconst ADBLOCK_PAGE_PATH = '/ad-blocked';\nconst GLOBAL_PRELOAD_BUFFER = 'preloadedEventsBuffer';\n\nconst CONSENT_TRACK_EVENT_NAME = 'Consent Management Interaction';\n\nexport {\n APP_NAME,\n APP_VERSION,\n APP_NAMESPACE,\n MODULE_TYPE,\n IS_LEGACY_BUILD,\n ADBLOCK_PAGE_CATEGORY,\n ADBLOCK_PAGE_NAME,\n ADBLOCK_PAGE_PATH,\n GLOBAL_PRELOAD_BUFFER,\n CONSENT_TRACK_EVENT_NAME,\n};\n","const QUERY_PARAM_TRAIT_PREFIX = 'ajs_trait_';\nconst QUERY_PARAM_PROPERTY_PREFIX = 'ajs_prop_';\nconst QUERY_PARAM_ANONYMOUS_ID_KEY = 'ajs_aid';\nconst QUERY_PARAM_USER_ID_KEY = 'ajs_uid';\nconst QUERY_PARAM_TRACK_EVENT_NAME_KEY = 'ajs_event';\n\nexport {\n QUERY_PARAM_TRAIT_PREFIX,\n QUERY_PARAM_PROPERTY_PREFIX,\n QUERY_PARAM_ANONYMOUS_ID_KEY,\n QUERY_PARAM_USER_ID_KEY,\n QUERY_PARAM_TRACK_EVENT_NAME_KEY,\n};\n","const DEFAULT_XHR_TIMEOUT_MS = 10 * 1000; // 10 seconds\nconst DEFAULT_COOKIE_MAX_AGE_MS = 31536000 * 1000; // 1 year\nconst DEFAULT_SESSION_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes\nconst MIN_SESSION_TIMEOUT_MS = 10 * 1000; // 10 seconds\nconst DEFAULT_DATA_PLANE_EVENTS_BUFFER_TIMEOUT_MS = 10 * 1000; // 10 seconds\nconst DEBOUNCED_TIMEOUT_MS = 250; // 250 milliseconds\n\nexport {\n DEFAULT_XHR_TIMEOUT_MS,\n DEFAULT_COOKIE_MAX_AGE_MS,\n DEFAULT_SESSION_TIMEOUT_MS,\n MIN_SESSION_TIMEOUT_MS,\n DEFAULT_DATA_PLANE_EVENTS_BUFFER_TIMEOUT_MS,\n DEBOUNCED_TIMEOUT_MS,\n};\n","import type { DebouncedFunction } from '@rudderstack/analytics-js-common/types/ApplicationState';\nimport { DEBOUNCED_TIMEOUT_MS } from '../../constants/timeouts';\nimport type { ExposedGlobals, IRudderStackGlobals } from '../../app/IRudderStackGlobals';\n\n/**\n * Create globally accessible RudderStackGlobals object\n */\nconst createExposedGlobals = (analyticsInstanceId = 'app') => {\n if (!(globalThis as typeof window).RudderStackGlobals) {\n (globalThis as typeof window).RudderStackGlobals = {} as IRudderStackGlobals;\n }\n\n if (!(globalThis as typeof window).RudderStackGlobals[analyticsInstanceId]) {\n (globalThis as typeof window).RudderStackGlobals[analyticsInstanceId] =\n {} as IRudderStackGlobals;\n }\n};\n\n/**\n * Add move values to globally accessible RudderStackGlobals object per analytics instance\n */\nconst setExposedGlobal = (keyName: string, value?: any, analyticsInstanceId = 'app') => {\n createExposedGlobals(analyticsInstanceId);\n ((globalThis as typeof window).RudderStackGlobals[analyticsInstanceId] as ExposedGlobals)[\n keyName\n ] = value;\n};\n\n/**\n * Get values from globally accessible RudderStackGlobals object by analytics instance\n */\nconst getExposedGlobal = (\n keyName: string,\n analyticsInstanceId = 'app',\n): Partial => {\n createExposedGlobals(analyticsInstanceId);\n return ((globalThis as typeof window).RudderStackGlobals[analyticsInstanceId] as ExposedGlobals)[\n keyName\n ];\n};\n\nfunction debounce(\n func: DebouncedFunction,\n thisArg: any,\n delay: number = DEBOUNCED_TIMEOUT_MS,\n): DebouncedFunction {\n let timeoutId: number;\n\n return (...args: any[]) => {\n (globalThis as typeof window).clearTimeout(timeoutId);\n\n timeoutId = (globalThis as typeof window).setTimeout(() => {\n func.apply(thisArg, args);\n }, delay);\n };\n}\n\nexport { createExposedGlobals, setExposedGlobal, getExposedGlobal, debounce };\n","import { isFunction } from '@rudderstack/analytics-js-common/utilities/checks';\nimport {\n aliasArgumentsToCallOptions,\n groupArgumentsToCallOptions,\n identifyArgumentsToCallOptions,\n pageArgumentsToCallOptions,\n trackArgumentsToCallOptions,\n} from '@rudderstack/analytics-js-common/utilities/eventMethodOverloads';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport { clone } from 'ramda';\nimport type { PreloadedEventCall } from './types';\nimport {\n QUERY_PARAM_ANONYMOUS_ID_KEY,\n QUERY_PARAM_PROPERTY_PREFIX,\n QUERY_PARAM_TRACK_EVENT_NAME_KEY,\n QUERY_PARAM_TRAIT_PREFIX,\n QUERY_PARAM_USER_ID_KEY,\n} from '../../constants/queryParams';\nimport type { IAnalytics } from '../core/IAnalytics';\nimport { getExposedGlobal, setExposedGlobal } from '../utilities/globals';\nimport { GLOBAL_PRELOAD_BUFFER } from '../../constants/app';\n\n/**\n * Parse query string params into object values for keys that start with a defined prefix\n */\nconst getEventDataFromQueryString = (\n params: URLSearchParams,\n dataTypeNamePrefix: string,\n): Record> => {\n const data: Record> = {};\n\n params.forEach((value, key) => {\n if (key.startsWith(dataTypeNamePrefix)) {\n // remove prefix from key name\n const dataKey = key.substring(dataTypeNamePrefix.length);\n // add new key value pair in generated object\n data[dataKey] = params.get(key);\n }\n });\n\n return data;\n};\n\n/**\n * Parse query string into preload buffer events & push into existing array before any other events\n */\nconst retrieveEventsFromQueryString = (argumentsArray: PreloadedEventCall[] = []) => {\n // Mapping for trait and properties values based on key prefix\n const eventArgumentToQueryParamMap = {\n trait: QUERY_PARAM_TRAIT_PREFIX,\n properties: QUERY_PARAM_PROPERTY_PREFIX,\n };\n\n const queryObject = new URLSearchParams(globalThis.location.search);\n\n // Add track events with name and properties\n if (queryObject.get(QUERY_PARAM_TRACK_EVENT_NAME_KEY)) {\n argumentsArray.unshift([\n 'track',\n queryObject.get(QUERY_PARAM_TRACK_EVENT_NAME_KEY),\n getEventDataFromQueryString(queryObject, eventArgumentToQueryParamMap.properties),\n ]);\n }\n\n // Set userId and user traits\n if (queryObject.get(QUERY_PARAM_USER_ID_KEY)) {\n argumentsArray.unshift([\n 'identify',\n queryObject.get(QUERY_PARAM_USER_ID_KEY),\n getEventDataFromQueryString(queryObject, eventArgumentToQueryParamMap.trait),\n ]);\n }\n\n // Set anonymousID\n if (queryObject.get(QUERY_PARAM_ANONYMOUS_ID_KEY)) {\n argumentsArray.unshift(['setAnonymousId', queryObject.get(QUERY_PARAM_ANONYMOUS_ID_KEY)]);\n }\n};\n\n/**\n * Retrieve an existing buffered load method call and remove from the existing array\n */\nconst getPreloadedLoadEvent = (preloadedEventsArray: PreloadedEventCall[]): PreloadedEventCall => {\n const loadMethodName = 'load';\n let loadEvent: PreloadedEventCall = [];\n\n /**\n * Iterate the buffered API calls until we find load call and process it separately\n */\n let i = 0;\n while (i < preloadedEventsArray.length) {\n if (\n preloadedEventsArray[i] &&\n (preloadedEventsArray[i] as PreloadedEventCall)[0] === loadMethodName\n ) {\n loadEvent = clone(preloadedEventsArray[i] as PreloadedEventCall);\n preloadedEventsArray.splice(i, 1);\n break;\n }\n i += 1;\n }\n\n return loadEvent;\n};\n\n/**\n * Promote consent events to the top of the preloaded events array\n * @param preloadedEventsArray Preloaded events array\n * @returns None\n */\nconst promotePreloadedConsentEventsToTop = (preloadedEventsArray: PreloadedEventCall[]): void => {\n const consentMethodName = 'consent';\n const consentEvents = preloadedEventsArray.filter(\n bufferedEvent => bufferedEvent[0] === consentMethodName,\n );\n\n const nonConsentEvents = preloadedEventsArray.filter(\n bufferedEvent => bufferedEvent[0] !== consentMethodName,\n );\n\n // Remove all elements and add consent events first followed by non consent events\n // eslint-disable-next-line unicorn/no-useless-spread\n preloadedEventsArray.splice(\n 0,\n preloadedEventsArray.length,\n ...consentEvents,\n ...nonConsentEvents,\n );\n};\n\n/**\n * Retrieve any existing events that were triggered before SDK load and enqueue in buffer\n */\nconst retrievePreloadBufferEvents = (instance: IAnalytics) => {\n const preloadedEventsArray = (getExposedGlobal(GLOBAL_PRELOAD_BUFFER) ||\n []) as PreloadedEventCall[];\n\n // Get events that are pre-populated via query string params\n retrieveEventsFromQueryString(preloadedEventsArray);\n\n // Enqueue the non load events in the buffer of the global rudder analytics singleton\n if (preloadedEventsArray.length > 0) {\n instance.enqueuePreloadBufferEvents(preloadedEventsArray);\n setExposedGlobal(GLOBAL_PRELOAD_BUFFER, []);\n }\n};\n\nconst consumePreloadBufferedEvent = (event: any, analyticsInstance: IAnalytics) => {\n const methodName = event.shift();\n let callOptions;\n\n if (isFunction((analyticsInstance as any)[methodName])) {\n switch (methodName) {\n case 'page':\n callOptions = pageArgumentsToCallOptions(...(event as [any]));\n break;\n case 'track':\n callOptions = trackArgumentsToCallOptions(...(event as [any]));\n break;\n case 'identify':\n callOptions = identifyArgumentsToCallOptions(...(event as [any]));\n break;\n case 'alias':\n callOptions = aliasArgumentsToCallOptions(...(event as [any]));\n break;\n case 'group':\n callOptions = groupArgumentsToCallOptions(...(event as [any]));\n break;\n default:\n (analyticsInstance as any)[methodName](...event);\n break;\n }\n\n if (callOptions) {\n (analyticsInstance as any)[methodName](callOptions);\n }\n }\n};\n\nexport {\n getEventDataFromQueryString,\n retrieveEventsFromQueryString,\n getPreloadedLoadEvent,\n retrievePreloadBufferEvents,\n consumePreloadBufferedEvent,\n promotePreloadedConsentEventsToTop,\n};\n","import { getMutatedError } from '../../utilities/errors';\nimport { EXTERNAL_SOURCE_LOAD_ORIGIN } from '../../constants/htmlAttributes';\nimport {\n SCRIPT_ALREADY_EXISTS_ERROR,\n SCRIPT_LOAD_ERROR,\n SCRIPT_LOAD_TIMEOUT_ERROR,\n} from '../../constants/logMessages';\n\n/**\n * Create the DOM element to load a script marked as RS SDK originated\n *\n * @param {*} url The URL of the script to be loaded\n * @param {*} id ID for the script tag\n * @param {*} async Whether to load the script in async mode. Defaults to `true` [optional]\n * @param {*} onload callback to invoke onload [optional]\n * @param {*} onerror callback to invoke onerror [optional]\n * @param {*} extraAttributes key/value pair with html attributes to add in html tag [optional]\n *\n * @returns HTMLScriptElement\n */\nconst createScriptElement = (\n url: string,\n id: string,\n async = true,\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null,\n onerror: OnErrorEventHandler = null,\n extraAttributes: Record = {},\n) => {\n const scriptElement = document.createElement('script');\n scriptElement.type = 'text/javascript';\n scriptElement.onload = onload;\n scriptElement.onerror = onerror;\n scriptElement.src = url;\n scriptElement.id = id;\n scriptElement.async = async;\n\n Object.keys(extraAttributes).forEach(attributeName => {\n scriptElement.setAttribute(attributeName, extraAttributes[attributeName] as string);\n });\n\n scriptElement.setAttribute('data-loader', EXTERNAL_SOURCE_LOAD_ORIGIN);\n\n return scriptElement;\n};\n\n/**\n * Add script DOM element to DOM\n *\n * @param {*} newScriptElement the script element to add\n *\n * @returns\n */\nconst insertScript = (newScriptElement: HTMLScriptElement) => {\n // First try to add it to the head\n const headElements = document.getElementsByTagName('head');\n if (headElements.length > 0) {\n headElements[0]?.insertBefore(newScriptElement, headElements[0]?.firstChild);\n return;\n }\n\n // Else wise add it before the first script tag\n const scriptElements = document.getElementsByTagName('script');\n if (scriptElements.length > 0 && scriptElements[0]?.parentNode) {\n scriptElements[0]?.parentNode.insertBefore(newScriptElement, scriptElements[0]);\n return;\n }\n\n // Create a new head element and add the script as fallback\n const headElement = document.createElement('head');\n headElement.appendChild(newScriptElement);\n\n const htmlElement = document.getElementsByTagName('html')[0];\n htmlElement?.insertBefore(headElement, htmlElement.firstChild);\n};\n\n/**\n * Loads external js file as a script html tag\n *\n * @param {*} url The URL of the script to be loaded\n * @param {*} id ID for the script tag\n * @param {*} timeout loading timeout\n * @param {*} async Whether to load the script in async mode. Defaults to `true` [optional]\n * @param {*} extraAttributes key/value pair with html attributes to add in html tag [optional]\n *\n * @returns\n */\nconst jsFileLoader = (\n url: string,\n id: string,\n timeout: number,\n async = true,\n extraAttributes?: Record,\n): Promise =>\n new Promise((resolve, reject) => {\n const scriptExists = document.getElementById(id);\n if (scriptExists) {\n reject(new Error(SCRIPT_ALREADY_EXISTS_ERROR(id)));\n }\n\n try {\n let timeoutID: number;\n\n const onload = () => {\n (globalThis as typeof window).clearTimeout(timeoutID);\n resolve(id);\n };\n\n const onerror = () => {\n (globalThis as typeof window).clearTimeout(timeoutID);\n reject(new Error(SCRIPT_LOAD_ERROR(id, url)));\n };\n\n // Create the DOM element to load the script and add it to the DOM\n insertScript(createScriptElement(url, id, async, onload, onerror, extraAttributes));\n\n // Reject on timeout\n timeoutID = (globalThis as typeof window).setTimeout(() => {\n reject(new Error(SCRIPT_LOAD_TIMEOUT_ERROR(id, url, timeout)));\n }, timeout);\n } catch (err) {\n reject(getMutatedError(err, SCRIPT_LOAD_ERROR(id, url)));\n }\n });\n\nexport { jsFileLoader, insertScript, createScriptElement };\n","const EXTERNAL_SOURCE_LOAD_ORIGIN = 'RS_JS_SDK';\n\nexport { EXTERNAL_SOURCE_LOAD_ORIGIN };\n","import { EXTERNAL_SRC_LOADER } from '../../constants/loggerContexts';\nimport { DEFAULT_EXT_SRC_LOAD_TIMEOUT_MS } from '../../constants/timeouts';\nimport { isFunction } from '../../utilities/checks';\nimport type { IErrorHandler } from '../../types/ErrorHandler';\nimport type { ILogger } from '../../types/Logger';\nimport type { IExternalSourceLoadConfig, IExternalSrcLoader } from './types';\nimport { jsFileLoader } from './jsFileLoader';\n\n/**\n * Service to load external resources/files\n */\nclass ExternalSrcLoader implements IExternalSrcLoader {\n errorHandler: IErrorHandler;\n logger: ILogger;\n timeout: number;\n\n constructor(\n errorHandler: IErrorHandler,\n logger: ILogger,\n timeout = DEFAULT_EXT_SRC_LOAD_TIMEOUT_MS,\n ) {\n this.errorHandler = errorHandler;\n this.logger = logger;\n this.timeout = timeout;\n this.onError = this.onError.bind(this);\n }\n\n /**\n * Load external resource of type javascript\n */\n loadJSFile(config: IExternalSourceLoadConfig) {\n const { url, id, timeout, async, callback, extraAttributes } = config;\n const isFireAndForget = !isFunction(callback);\n\n jsFileLoader(url, id, timeout || this.timeout, async, extraAttributes)\n .then((id?: string) => {\n if (!isFireAndForget) {\n callback(id);\n }\n })\n .catch(err => {\n this.onError(err);\n if (!isFireAndForget) {\n callback();\n }\n });\n }\n\n /**\n * Handle errors\n */\n onError(error: unknown) {\n this.errorHandler.onError(error, EXTERNAL_SRC_LOADER);\n }\n}\n\nexport { ExternalSrcLoader };\n","const DEFAULT_EXT_SRC_LOAD_TIMEOUT_MS = 10 * 1000; // 10 seconds\n\nexport { DEFAULT_EXT_SRC_LOAD_TIMEOUT_MS };\n","var i=Symbol.for(\"preact-signals\");function t(){if(!(s>1)){var i,t=!1;while(void 0!==h){var r=h;h=void 0;f++;while(void 0!==r){var o=r.o;r.o=void 0;r.f&=-3;if(!(8&r.f)&&c(r))try{r.c()}catch(r){if(!t){i=r;t=!0}}r=o}}f=0;s--;if(t)throw i}else s--}function r(i){if(s>0)return i();s++;try{return i()}finally{t()}}var o=void 0;function n(i){var t=o;o=void 0;try{return i()}finally{o=t}}var h=void 0,s=0,f=0,v=0;function e(i){if(void 0!==o){var t=i.n;if(void 0===t||t.t!==o){t={i:0,S:i,p:o.s,n:void 0,t:o,e:void 0,x:void 0,r:t};if(void 0!==o.s)o.s.n=t;o.s=t;i.n=t;if(32&o.f)i.S(t);return t}else if(-1===t.i){t.i=0;if(void 0!==t.n){t.n.p=t.p;if(void 0!==t.p)t.p.n=t.n;t.p=o.s;t.n=void 0;o.s.n=t;o.s=t}return t}}}function u(i){this.v=i;this.i=0;this.n=void 0;this.t=void 0}u.prototype.brand=i;u.prototype.h=function(){return!0};u.prototype.S=function(i){if(this.t!==i&&void 0===i.e){i.x=this.t;if(void 0!==this.t)this.t.e=i;this.t=i}};u.prototype.U=function(i){if(void 0!==this.t){var t=i.e,r=i.x;if(void 0!==t){t.x=r;i.e=void 0}if(void 0!==r){r.e=t;i.x=void 0}if(i===this.t)this.t=r}};u.prototype.subscribe=function(i){var t=this;return E(function(){var r=t.value,n=o;o=void 0;try{i(r)}finally{o=n}})};u.prototype.valueOf=function(){return this.value};u.prototype.toString=function(){return this.value+\"\"};u.prototype.toJSON=function(){return this.value};u.prototype.peek=function(){var i=o;o=void 0;try{return this.value}finally{o=i}};Object.defineProperty(u.prototype,\"value\",{get:function(){var i=e(this);if(void 0!==i)i.i=this.i;return this.v},set:function(i){if(i!==this.v){if(f>100)throw new Error(\"Cycle detected\");this.v=i;this.i++;v++;s++;try{for(var r=this.t;void 0!==r;r=r.x)r.t.N()}finally{t()}}}});function d(i){return new u(i)}function c(i){for(var t=i.s;void 0!==t;t=t.n)if(t.S.i!==t.i||!t.S.h()||t.S.i!==t.i)return!0;return!1}function a(i){for(var t=i.s;void 0!==t;t=t.n){var r=t.S.n;if(void 0!==r)t.r=r;t.S.n=t;t.i=-1;if(void 0===t.n){i.s=t;break}}}function l(i){var t=i.s,r=void 0;while(void 0!==t){var o=t.p;if(-1===t.i){t.S.U(t);if(void 0!==o)o.n=t.n;if(void 0!==t.n)t.n.p=o}else r=t;t.S.n=t.r;if(void 0!==t.r)t.r=void 0;t=o}i.s=r}function y(i){u.call(this,void 0);this.x=i;this.s=void 0;this.g=v-1;this.f=4}(y.prototype=new u).h=function(){this.f&=-3;if(1&this.f)return!1;if(32==(36&this.f))return!0;this.f&=-5;if(this.g===v)return!0;this.g=v;this.f|=1;if(this.i>0&&!c(this)){this.f&=-2;return!0}var i=o;try{a(this);o=this;var t=this.x();if(16&this.f||this.v!==t||0===this.i){this.v=t;this.f&=-17;this.i++}}catch(i){this.v=i;this.f|=16;this.i++}o=i;l(this);this.f&=-2;return!0};y.prototype.S=function(i){if(void 0===this.t){this.f|=36;for(var t=this.s;void 0!==t;t=t.n)t.S.S(t)}u.prototype.S.call(this,i)};y.prototype.U=function(i){if(void 0!==this.t){u.prototype.U.call(this,i);if(void 0===this.t){this.f&=-33;for(var t=this.s;void 0!==t;t=t.n)t.S.U(t)}}};y.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var i=this.t;void 0!==i;i=i.x)i.t.N()}};Object.defineProperty(y.prototype,\"value\",{get:function(){if(1&this.f)throw new Error(\"Cycle detected\");var i=e(this);this.h();if(void 0!==i)i.i=this.i;if(16&this.f)throw this.v;return this.v}});function w(i){return new y(i)}function _(i){var r=i.u;i.u=void 0;if(\"function\"==typeof r){s++;var n=o;o=void 0;try{r()}catch(t){i.f&=-2;i.f|=8;g(i);throw t}finally{o=n;t()}}}function g(i){for(var t=i.s;void 0!==t;t=t.n)t.S.U(t);i.x=void 0;i.s=void 0;_(i)}function p(i){if(o!==this)throw new Error(\"Out-of-order effect\");l(this);o=i;this.f&=-2;if(8&this.f)g(this);t()}function b(i){this.x=i;this.u=void 0;this.s=void 0;this.o=void 0;this.f=32}b.prototype.c=function(){var i=this.S();try{if(8&this.f)return;if(void 0===this.x)return;var t=this.x();if(\"function\"==typeof t)this.u=t}finally{i()}};b.prototype.S=function(){if(1&this.f)throw new Error(\"Cycle detected\");this.f|=1;this.f&=-9;_(this);a(this);s++;var i=o;o=this;return p.bind(this,i)};b.prototype.N=function(){if(!(2&this.f)){this.f|=2;this.o=h;h=this}};b.prototype.d=function(){this.f|=8;if(!(1&this.f))g(this)};function E(i){var t=new b(i);try{t.c()}catch(i){t.d();throw i}return t.d.bind(t)}export{u as Signal,r as batch,w as computed,E as effect,d as signal,n as untracked};//# sourceMappingURL=signals-core.module.js.map\n","import type { Nullable } from '../../types/Nullable';\n\n/**\n * A buffer queue to serve as a store for any type of data\n */\nclass BufferQueue {\n items: T[];\n\n constructor() {\n this.items = [];\n }\n\n enqueue(item: T) {\n this.items.push(item);\n }\n\n dequeue(): Nullable | undefined {\n if (this.items.length === 0) {\n return null;\n }\n return this.items.shift();\n }\n\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n size(): number {\n return this.items.length;\n }\n\n clear() {\n this.items = [];\n }\n}\n\nexport { BufferQueue };\n","import { isString, isUndefined } from '@rudderstack/analytics-js-common/utilities/checks';\nimport type { ILogger, LogLevel } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { LoggerProvider } from './types';\n\nconst LOG_LEVEL_MAP: Record = {\n LOG: 0,\n INFO: 1,\n DEBUG: 2,\n WARN: 3,\n ERROR: 4,\n NONE: 5,\n};\n\nconst DEFAULT_LOG_LEVEL = 'LOG';\nconst POST_LOAD_LOG_LEVEL = 'ERROR';\nconst LOG_MSG_PREFIX = 'RS SDK';\nconst LOG_MSG_PREFIX_STYLE = 'font-weight: bold; background: black; color: white;';\nconst LOG_MSG_STYLE = 'font-weight: normal;';\n\n/**\n * Service to log messages/data to output provider, default is console\n */\nclass Logger implements ILogger {\n minLogLevel: number;\n scope?: string;\n logProvider: LoggerProvider;\n\n constructor(minLogLevel: LogLevel = DEFAULT_LOG_LEVEL, scope = '', logProvider = console) {\n this.minLogLevel = LOG_LEVEL_MAP[minLogLevel];\n this.scope = scope;\n this.logProvider = logProvider;\n }\n\n log(...data: any[]) {\n this.outputLog('LOG', data);\n }\n\n info(...data: any[]) {\n this.outputLog('INFO', data);\n }\n\n debug(...data: any[]) {\n this.outputLog('DEBUG', data);\n }\n\n warn(...data: any[]) {\n this.outputLog('WARN', data);\n }\n\n error(...data: any[]) {\n this.outputLog('ERROR', data);\n }\n\n outputLog(logMethod: LogLevel, data: any[]) {\n if (this.minLogLevel <= LOG_LEVEL_MAP[logMethod]) {\n this.logProvider[\n logMethod.toLowerCase() as Exclude, Lowercase<'NONE'>>\n ]?.(...this.formatLogData(data));\n }\n }\n\n setScope(scopeVal: string) {\n this.scope = scopeVal || this.scope;\n }\n\n // TODO: should we allow to change the level via global variable on run time\n // to assist on the fly debugging?\n setMinLogLevel(logLevel: LogLevel) {\n this.minLogLevel = LOG_LEVEL_MAP[logLevel];\n if (isUndefined(this.minLogLevel)) {\n this.minLogLevel = LOG_LEVEL_MAP[DEFAULT_LOG_LEVEL];\n }\n }\n\n /**\n * Formats the console message using `scope` and styles\n */\n formatLogData(data: any[]) {\n if (Array.isArray(data) && data.length > 0) {\n // prefix SDK identifier\n let msg = `%c ${LOG_MSG_PREFIX}`;\n\n // format the log message using `scope`\n if (this.scope) {\n msg = `${msg} - ${this.scope}`;\n }\n\n // trim whitespaces for original message\n const originalMsg = isString(data[0]) ? data[0].trim() : '';\n\n // prepare the final message\n msg = `${msg} %c ${originalMsg}`;\n\n const styledLogArgs = [\n msg,\n LOG_MSG_PREFIX_STYLE, // add style for the prefix\n LOG_MSG_STYLE, // reset the style for the actual message\n ];\n\n // add first it if it was not a string msg\n if (!isString(data[0])) {\n styledLogArgs.push(data[0]);\n }\n\n // append rest of the original arguments\n styledLogArgs.push(...data.slice(1));\n return styledLogArgs;\n }\n\n return data;\n }\n}\n\nconst defaultLogger = new Logger();\n\nexport {\n Logger,\n DEFAULT_LOG_LEVEL,\n LOG_LEVEL_MAP,\n LOG_MSG_PREFIX,\n LOG_MSG_PREFIX_STYLE,\n LOG_MSG_STYLE,\n defaultLogger,\n POST_LOAD_LOG_LEVEL,\n};\n","import type { Event } from '@bugsnag/js';\nimport type { ILogger } from './Logger';\nimport type { IHttpClient } from './HttpClient';\n\nexport type SDKError = unknown | Error | ErrorEvent | Event | PromiseRejectionEvent;\n\nexport interface IErrorHandler {\n httpClient: IHttpClient;\n logger: ILogger;\n onError(error: SDKError, context?: string, customMessage?: string, errorType?: string): void;\n leaveBreadcrumb(breadcrumb: string): void;\n}\n\nexport type ErrorState = {\n severity: Event['severity'];\n unhandled: boolean;\n severityReason: { type: string };\n};\n\nexport interface ErrorTarget extends Element {\n dataset?: { loader?: string; isnonnativesdk?: string };\n src?: string;\n}\n\nexport type PreLoadErrorData = {\n error: SDKError;\n errorState: ErrorState;\n};\n\nexport enum ErrorType {\n HANDLEDEXCEPTION = 'handledException',\n UNHANDLEDEXCEPTION = 'unhandledException',\n UNHANDLEDREJECTION = 'unhandledPromiseRejection',\n}\n","import type { UserSessionKey } from './UserSessionStorage';\n\nexport type StorageEncryptionVersion = 'legacy' | 'v3'; // default is v3\n\nexport type StorageType =\n | 'cookieStorage'\n | 'localStorage'\n | 'memoryStorage'\n | 'sessionStorage'\n | 'none';\n\nexport const SUPPORTED_STORAGE_TYPES = [\n 'localStorage',\n 'memoryStorage',\n 'cookieStorage',\n 'sessionStorage',\n 'none',\n];\n\nexport const DEFAULT_STORAGE_TYPE = 'cookieStorage';\n\nexport type StorageEncryption = {\n version: StorageEncryptionVersion;\n};\n\nexport type LoadOptionStorageEntry = {\n type: StorageType;\n};\n\nexport type StorageOpts = {\n encryption?: StorageEncryption;\n migrate?: boolean;\n type?: StorageType;\n cookie?: CookieOptions;\n entries?: {\n [key in UserSessionKey]?: LoadOptionStorageEntry;\n };\n};\n\nexport type CookieOptions = {\n maxage?: number;\n expires?: Date;\n path?: string;\n domain?: string;\n samesite?: string;\n secure?: boolean;\n};\n\nexport type CookieSameSite = 'Strict' | 'Lax' | 'None';\n","import type { PluginName } from '@rudderstack/analytics-js-common/types/PluginsManager';\nimport {\n type StorageType,\n SUPPORTED_STORAGE_TYPES,\n} from '@rudderstack/analytics-js-common/types/Storage';\nimport { LOG_CONTEXT_SEPARATOR } from '@rudderstack/analytics-js-common/constants/logMessages';\nimport type {\n DeliveryType,\n StorageStrategy,\n} from '@rudderstack/analytics-js-common/types/LoadOptions';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\n\n// CONSTANT\nconst DATA_PLANE_URL_ERROR =\n 'Failed to load the SDK as the data plane URL could not be determined. Please check that the data plane URL is set correctly and try again.';\nconst SOURCE_CONFIG_RESOLUTION_ERROR = `Unable to process/parse source configuration response`;\nconst SOURCE_DISABLED_ERROR = `The source is disabled. Please enable the source in the dashboard to send events.`;\nconst XHR_PAYLOAD_PREP_ERROR = `Failed to prepare data for the request.`;\nconst PLUGIN_EXT_POINT_MISSING_ERROR = `Failed to invoke plugin because the extension point name is missing.`;\nconst PLUGIN_EXT_POINT_INVALID_ERROR = `Failed to invoke plugin because the extension point name is invalid.`;\n\nconst SOURCE_CONFIG_OPTION_ERROR = (context: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The \"getSourceConfig\" load API option must be a function that returns valid source configuration data.`;\n\nconst COMPONENT_BASE_URL_ERROR = (context: string, component: string, url?: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The base URL \"${url}\" for ${component} is not valid.`;\n\n// ERROR\nconst UNSUPPORTED_CONSENT_MANAGER_ERROR = (\n context: string,\n selectedConsentManager: string,\n consentManagersToPluginNameMap: Record,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The consent manager \"${selectedConsentManager}\" is not supported. Please choose one of the following supported consent managers: \"${Object.keys(\n consentManagersToPluginNameMap,\n )}\".`;\n\nconst NON_ERROR_WARNING = (context: string, errStr: Nullable): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}Ignoring a non-error: ${errStr}.`;\n\nconst BREADCRUMB_ERROR = (context: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}Failed to log breadcrumb.`;\n\nconst HANDLE_ERROR_FAILURE = (context: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}Failed to handle the error.`;\n\nconst PLUGIN_NAME_MISSING_ERROR = (context: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}Plugin name is missing.`;\n\nconst PLUGIN_ALREADY_EXISTS_ERROR = (context: string, pluginName: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}Plugin \"${pluginName}\" already exists.`;\n\nconst PLUGIN_NOT_FOUND_ERROR = (context: string, pluginName: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}Plugin \"${pluginName}\" not found.`;\n\nconst PLUGIN_ENGINE_BUG_ERROR = (context: string, pluginName: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}Plugin \"${pluginName}\" not found in plugins but found in byName. This indicates a bug in the plugin engine. Please report this issue to the development team.`;\n\nconst PLUGIN_DEPS_ERROR = (context: string, pluginName: string, notExistDeps: string[]): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}Plugin \"${pluginName}\" could not be loaded because some of its dependencies \"${notExistDeps}\" do not exist.`;\n\nconst PLUGIN_INVOCATION_ERROR = (\n context: string,\n extPoint: string | undefined,\n pluginName: string,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}Failed to invoke the \"${extPoint}\" extension point of plugin \"${pluginName}\".`;\n\nconst STORAGE_UNAVAILABILITY_ERROR_PREFIX = (context: string, storageType: StorageType): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The \"${storageType}\" storage type is `;\n\nconst SOURCE_CONFIG_FETCH_ERROR = 'Failed to fetch the source config';\n\nconst WRITE_KEY_VALIDATION_ERROR = (context: string, writeKey: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The write key \"${writeKey}\" is invalid. It must be a non-empty string. Please check that the write key is correct and try again.`;\n\nconst DATA_PLANE_URL_VALIDATION_ERROR = (context: string, dataPlaneUrl: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The data plane URL \"${dataPlaneUrl}\" is invalid. It must be a valid URL string. Please check that the data plane URL is correct and try again.`;\n\nconst INVALID_CALLBACK_FN_ERROR = (context: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The provided callback parameter is not a function.`;\n\nconst XHR_DELIVERY_ERROR = (\n prefix: string,\n status: number,\n statusText: string,\n url: string,\n): string => `${prefix} with status: ${status}, ${statusText} for URL: ${url}.`;\n\nconst XHR_REQUEST_ERROR = (prefix: string, e: ProgressEvent | undefined, url: string): string =>\n `${prefix} due to timeout or no connection (${e ? e.type : ''}) for URL: ${url}.`;\n\nconst XHR_SEND_ERROR = (prefix: string, url: string): string => `${prefix} for URL: ${url}`;\n\nconst STORE_DATA_SAVE_ERROR = (key: string): string =>\n `Failed to save the value for \"${key}\" to storage`;\n\nconst STORE_DATA_FETCH_ERROR = (key: string): string =>\n `Failed to retrieve or parse data for \"${key}\" from storage`;\n\nconst DATA_SERVER_URL_INVALID_ERROR = (url: string) =>\n `The server side cookies functionality is disabled as the provided data server URL, \"${url}\" is invalid.`;\n\nconst DATA_SERVER_REQUEST_FAIL_ERROR = (status?: number) =>\n `The server responded with status ${status} while setting the cookies. As a fallback, the cookies will be set client side.`;\nconst FAILED_SETTING_COOKIE_FROM_SERVER_ERROR = (key: string) =>\n `The server failed to set the ${key} cookie. As a fallback, the cookies will be set client side.`;\nconst FAILED_SETTING_COOKIE_FROM_SERVER_GLOBAL_ERROR = `Failed to set/remove cookies via server. As a fallback, the cookies will be managed client side.`;\n\n// WARNING\nconst STORAGE_TYPE_VALIDATION_WARNING = (\n context: string,\n storageType: any,\n defaultStorageType: StorageType,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The storage type \"${storageType}\" is not supported. Please choose one of the following supported types: \"${SUPPORTED_STORAGE_TYPES}\". The default type \"${defaultStorageType}\" will be used instead.`;\n\nconst UNSUPPORTED_ERROR_REPORTING_PROVIDER_WARNING = (\n context: string,\n selectedErrorReportingProvider: string | undefined,\n errorReportingProvidersToPluginNameMap: Record,\n defaultProvider: string,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The error reporting provider \"${selectedErrorReportingProvider}\" is not supported. Please choose one of the following supported providers: \"${Object.keys(\n errorReportingProvidersToPluginNameMap,\n )}\". The default provider \"${defaultProvider}\" will be used instead.`;\n\nconst UNSUPPORTED_STORAGE_ENCRYPTION_VERSION_WARNING = (\n context: string,\n selectedStorageEncryptionVersion: string | undefined,\n storageEncryptionVersionsToPluginNameMap: Record,\n defaultVersion: string,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The storage encryption version \"${selectedStorageEncryptionVersion}\" is not supported. Please choose one of the following supported versions: \"${Object.keys(\n storageEncryptionVersionsToPluginNameMap,\n )}\". The default version \"${defaultVersion}\" will be used instead.`;\n\nconst STORAGE_DATA_MIGRATION_OVERRIDE_WARNING = (\n context: string,\n storageEncryptionVersion: string | undefined,\n defaultVersion: string,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The storage data migration has been disabled because the configured storage encryption version (${storageEncryptionVersion}) is not the latest (${defaultVersion}). To enable storage data migration, please update the storage encryption version to the latest version.`;\n\nconst SERVER_SIDE_COOKIE_FEATURE_OVERRIDE_WARNING = (\n context: string,\n providedCookieDomain: string | undefined,\n currentCookieDomain: string,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The provided cookie domain (${providedCookieDomain}) does not match the current webpage's domain (${currentCookieDomain}). Hence, the cookies will be set client-side.`;\n\nconst RESERVED_KEYWORD_WARNING = (\n context: string,\n property: string,\n parentKeyPath: string,\n reservedElements: string[],\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The \"${property}\" property defined under \"${parentKeyPath}\" is a reserved keyword. Please choose a different property name to avoid conflicts with reserved keywords (${reservedElements}).`;\n\nconst INVALID_CONTEXT_OBJECT_WARNING = (logContext: string): string =>\n `${logContext}${LOG_CONTEXT_SEPARATOR}Please make sure that the \"context\" property in the event API's \"options\" argument is a valid object literal with key-value pairs.`;\n\nconst UNSUPPORTED_BEACON_API_WARNING = (context: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The Beacon API is not supported by your browser. The events will be sent using XHR instead.`;\n\nconst TIMEOUT_NOT_NUMBER_WARNING = (\n context: string,\n timeout: number | undefined,\n defaultValue: number,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The session timeout value \"${timeout}\" is not a number. The default timeout of ${defaultValue} ms will be used instead.`;\n\nconst TIMEOUT_ZERO_WARNING = (context: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The session timeout value is 0, which disables the automatic session tracking feature. If you want to enable session tracking, please provide a positive integer value for the timeout.`;\n\nconst TIMEOUT_NOT_RECOMMENDED_WARNING = (\n context: string,\n timeout: number,\n minTimeout: number,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The session timeout value ${timeout} ms is less than the recommended minimum of ${minTimeout} ms. Please consider increasing the timeout value to ensure optimal performance and reliability.`;\n\nconst INVALID_SESSION_ID_WARNING = (\n context: string,\n sessionId: number | undefined,\n minSessionIdLength: number,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The provided session ID (${sessionId}) is either invalid, not a positive integer, or not at least \"${minSessionIdLength}\" digits long. A new session ID will be auto-generated instead.`;\n\nconst STORAGE_QUOTA_EXCEEDED_WARNING = (context: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The storage is either full or unavailable, so the data will not be persisted. Switching to in-memory storage.`;\n\nconst STORAGE_UNAVAILABLE_WARNING = (\n context: string,\n entry: string,\n selectedStorageType: string,\n finalStorageType: string,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The storage type \"${selectedStorageType}\" is not available for entry \"${entry}\". The SDK will initialize the entry with \"${finalStorageType}\" storage type instead.`;\n\nconst CALLBACK_INVOKE_ERROR = (context: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The callback threw an exception`;\n\nconst INVALID_CONFIG_URL_WARNING = (context: string, configUrl: string | undefined): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The provided source config URL \"${configUrl}\" is invalid. Using the default source config URL instead.`;\n\nconst POLYFILL_SCRIPT_LOAD_ERROR = (scriptId: string, url: string): string =>\n `Failed to load the polyfill script with ID \"${scriptId}\" from URL ${url}.`;\n\nconst UNSUPPORTED_PRE_CONSENT_STORAGE_STRATEGY = (\n context: string,\n selectedStrategy: StorageStrategy | undefined,\n defaultStrategy: StorageStrategy,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The pre-consent storage strategy \"${selectedStrategy}\" is not supported. Please choose one of the following supported strategies: \"none, session, anonymousId\". The default strategy \"${defaultStrategy}\" will be used instead.`;\n\nconst UNSUPPORTED_PRE_CONSENT_EVENTS_DELIVERY_TYPE = (\n context: string,\n selectedDeliveryType: DeliveryType | undefined,\n defaultDeliveryType: DeliveryType,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The pre-consent events delivery type \"${selectedDeliveryType}\" is not supported. Please choose one of the following supported types: \"immediate, buffer\". The default type \"${defaultDeliveryType}\" will be used instead.`;\n\nconst DEPRECATED_PLUGIN_WARNING = (context: string, pluginName: string): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}${pluginName} plugin is deprecated. Please exclude it from the load API options.`;\nconst generateMisconfiguredPluginsWarning = (\n context: string,\n configurationStatus: string,\n missingPlugins: PluginName[],\n shouldAddMissingPlugins: boolean,\n): string => {\n const isSinglePlugin = missingPlugins.length === 1;\n const pluginsString = isSinglePlugin\n ? ` '${missingPlugins[0]}' plugin was`\n : ` ['${missingPlugins.join(\"', '\")}'] plugins were`;\n const baseWarning = `${context}${LOG_CONTEXT_SEPARATOR}${configurationStatus}, but${pluginsString} not configured to load.`;\n if (shouldAddMissingPlugins) {\n return `${baseWarning} So, ${isSinglePlugin ? 'the plugin' : 'those plugins'} will be loaded automatically.`;\n }\n return `${baseWarning} Ignore if this was intentional. Otherwise, consider adding ${isSinglePlugin ? 'it' : 'them'} to the 'plugins' load API option.`;\n};\n\nconst INVALID_POLYFILL_URL_WARNING = (\n context: string,\n customPolyfillUrl: string | undefined,\n): string =>\n `${context}${LOG_CONTEXT_SEPARATOR}The provided polyfill URL \"${customPolyfillUrl}\" is invalid. The default polyfill URL will be used instead.`;\n\nconst BAD_COOKIES_WARNING = (key: string) =>\n `The cookie data for ${key} seems to be encrypted using SDK versions < v3. The data is dropped. This can potentially stem from using SDK versions < v3 on other sites or web pages that can share cookies with this webpage. We recommend using the same SDK (v3) version everywhere or avoid disabling the storage data migration.`;\n\nconst PAGE_UNLOAD_ON_BEACON_DISABLED_WARNING = (context: string) =>\n `${context}${LOG_CONTEXT_SEPARATOR}Page Unloaded event can only be tracked when the Beacon transport is active. Please enable \"useBeacon\" load API option.`;\n\nconst UNKNOWN_PLUGINS_WARNING = (context: string, unknownPlugins: string[]) =>\n `${context}${LOG_CONTEXT_SEPARATOR}Ignoring unknown plugins: ${unknownPlugins.join(', ')}.`;\n\nexport {\n UNSUPPORTED_CONSENT_MANAGER_ERROR,\n UNSUPPORTED_ERROR_REPORTING_PROVIDER_WARNING,\n UNSUPPORTED_STORAGE_ENCRYPTION_VERSION_WARNING,\n STORAGE_DATA_MIGRATION_OVERRIDE_WARNING,\n RESERVED_KEYWORD_WARNING,\n INVALID_CONTEXT_OBJECT_WARNING,\n UNSUPPORTED_BEACON_API_WARNING,\n TIMEOUT_NOT_NUMBER_WARNING,\n TIMEOUT_ZERO_WARNING,\n TIMEOUT_NOT_RECOMMENDED_WARNING,\n INVALID_SESSION_ID_WARNING,\n DEPRECATED_PLUGIN_WARNING,\n HANDLE_ERROR_FAILURE,\n PLUGIN_NAME_MISSING_ERROR,\n PLUGIN_ALREADY_EXISTS_ERROR,\n PLUGIN_NOT_FOUND_ERROR,\n PLUGIN_ENGINE_BUG_ERROR,\n PLUGIN_DEPS_ERROR,\n PLUGIN_INVOCATION_ERROR,\n STORAGE_QUOTA_EXCEEDED_WARNING,\n STORAGE_UNAVAILABLE_WARNING,\n STORAGE_UNAVAILABILITY_ERROR_PREFIX,\n SOURCE_CONFIG_FETCH_ERROR,\n SOURCE_CONFIG_OPTION_ERROR,\n DATA_PLANE_URL_ERROR,\n WRITE_KEY_VALIDATION_ERROR,\n DATA_PLANE_URL_VALIDATION_ERROR,\n XHR_DELIVERY_ERROR,\n XHR_REQUEST_ERROR,\n XHR_SEND_ERROR,\n XHR_PAYLOAD_PREP_ERROR,\n STORE_DATA_SAVE_ERROR,\n STORE_DATA_FETCH_ERROR,\n PLUGIN_EXT_POINT_MISSING_ERROR,\n PLUGIN_EXT_POINT_INVALID_ERROR,\n STORAGE_TYPE_VALIDATION_WARNING,\n INVALID_CONFIG_URL_WARNING,\n POLYFILL_SCRIPT_LOAD_ERROR,\n UNSUPPORTED_PRE_CONSENT_STORAGE_STRATEGY,\n UNSUPPORTED_PRE_CONSENT_EVENTS_DELIVERY_TYPE,\n SOURCE_CONFIG_RESOLUTION_ERROR,\n DATA_SERVER_URL_INVALID_ERROR,\n DATA_SERVER_REQUEST_FAIL_ERROR,\n FAILED_SETTING_COOKIE_FROM_SERVER_ERROR,\n FAILED_SETTING_COOKIE_FROM_SERVER_GLOBAL_ERROR,\n generateMisconfiguredPluginsWarning,\n INVALID_POLYFILL_URL_WARNING,\n SOURCE_DISABLED_ERROR,\n COMPONENT_BASE_URL_ERROR,\n SERVER_SIDE_COOKIE_FEATURE_OVERRIDE_WARNING,\n BAD_COOKIES_WARNING,\n PAGE_UNLOAD_ON_BEACON_DISABLED_WARNING,\n BREADCRUMB_ERROR,\n NON_ERROR_WARNING,\n CALLBACK_INVOKE_ERROR,\n UNKNOWN_PLUGINS_WARNING,\n INVALID_CALLBACK_FN_ERROR,\n};\n","const DEFAULT_INTEGRATIONS_CONFIG = {\n All: true,\n};\n\nexport { DEFAULT_INTEGRATIONS_CONFIG };\n","const CDN_INT_DIR = 'js-integrations';\nconst CDN_PLUGINS_DIR = 'plugins';\nconst URL_PATTERN = new RegExp(\n '^(https?:\\\\/\\\\/)' + // protocol\n '(' +\n '((([a-zA-Z\\\\d]([a-zA-Z\\\\d-]*[a-zA-Z\\\\d])*)\\\\.)+[a-zA-Z]{2,}|' + // domain name\n 'localhost|' + // localhost\n '((25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9]?)\\\\.){3}' + // OR IP (v4) address first 3 octets\n '(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9]?))' + // last octet of IP address\n ')' +\n '(\\\\:\\\\d+)?' + // port\n '(\\\\/[-a-zA-Z\\\\d%_.~+]*)*' + // path\n '(\\\\?[;&a-zA-Z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-zA-Z\\\\d_]*)?$', // fragment locator\n);\n\nexport { CDN_INT_DIR, CDN_PLUGINS_DIR, URL_PATTERN };\n","import { CDN_INT_DIR, CDN_PLUGINS_DIR } from '@rudderstack/analytics-js-common/constants/urls';\nimport { IS_LEGACY_BUILD } from './app';\n\nconst BUILD_TYPE = IS_LEGACY_BUILD ? 'legacy' : 'modern';\nconst SDK_CDN_BASE_URL = 'https://cdn.rudderlabs.com';\nconst CDN_ARCH_VERSION_DIR = 'v3';\nconst DEFAULT_INTEGRATION_SDKS_URL = `${SDK_CDN_BASE_URL}/${CDN_ARCH_VERSION_DIR}/${BUILD_TYPE}/${CDN_INT_DIR}`;\nconst DEFAULT_PLUGINS_URL = `${SDK_CDN_BASE_URL}/${CDN_ARCH_VERSION_DIR}/${BUILD_TYPE}/${CDN_PLUGINS_DIR}`;\nconst DEFAULT_CONFIG_BE_URL = 'https://api.rudderstack.com';\n\nexport {\n BUILD_TYPE,\n SDK_CDN_BASE_URL,\n CDN_ARCH_VERSION_DIR,\n DEFAULT_INTEGRATION_SDKS_URL,\n DEFAULT_PLUGINS_URL,\n DEFAULT_CONFIG_BE_URL,\n};\n","import type { PluginName } from '@rudderstack/analytics-js-common/types/PluginsManager';\n\nconst DEFAULT_STORAGE_ENCRYPTION_VERSION = 'v3';\nconst DEFAULT_DATA_PLANE_EVENTS_TRANSPORT = 'xhr';\n\nexport const ConsentManagersToPluginNameMap: Record = {\n iubenda: 'IubendaConsentManager',\n oneTrust: 'OneTrustConsentManager',\n ketch: 'KetchConsentManager',\n custom: 'CustomConsentManager',\n};\n\nexport const StorageEncryptionVersionsToPluginNameMap: Record = {\n [DEFAULT_STORAGE_ENCRYPTION_VERSION]: 'StorageEncryption',\n legacy: 'StorageEncryptionLegacy',\n};\n\nexport const DataPlaneEventsTransportToPluginNameMap: Record = {\n [DEFAULT_DATA_PLANE_EVENTS_TRANSPORT]: 'XhrQueue',\n beacon: 'BeaconQueue',\n};\n\nconst DEFAULT_DATA_SERVICE_ENDPOINT = 'rsaRequest';\nconst METRICS_SERVICE_ENDPOINT = 'rsaMetrics';\n\nexport {\n DEFAULT_STORAGE_ENCRYPTION_VERSION,\n DEFAULT_DATA_PLANE_EVENTS_TRANSPORT,\n DEFAULT_DATA_SERVICE_ENDPOINT,\n METRICS_SERVICE_ENDPOINT,\n};\n","import { signal } from '@preact/signals-core';\nimport { clone } from 'ramda';\nimport type { LoadOptions } from '@rudderstack/analytics-js-common/types/LoadOptions';\nimport type { LoadOptionsState } from '@rudderstack/analytics-js-common/types/ApplicationState';\nimport { DEFAULT_INTEGRATIONS_CONFIG } from '@rudderstack/analytics-js-common/constants/integrationsConfig';\nimport {\n DEFAULT_DATA_PLANE_EVENTS_BUFFER_TIMEOUT_MS,\n DEFAULT_SESSION_TIMEOUT_MS,\n} from '../../constants/timeouts';\nimport { DEFAULT_CONFIG_BE_URL } from '../../constants/urls';\nimport { DEFAULT_STORAGE_ENCRYPTION_VERSION } from '../../components/configManager/constants';\n\nconst defaultLoadOptions: LoadOptions = {\n configUrl: DEFAULT_CONFIG_BE_URL,\n loadIntegration: true,\n sessions: {\n autoTrack: true,\n timeout: DEFAULT_SESSION_TIMEOUT_MS,\n },\n sameSiteCookie: 'Lax',\n polyfillIfRequired: true,\n integrations: DEFAULT_INTEGRATIONS_CONFIG,\n useBeacon: false,\n beaconQueueOptions: {},\n destinationsQueueOptions: {},\n queueOptions: {},\n lockIntegrationsVersion: __LOCK_DEPS_VERSION__,\n lockPluginsVersion: __LOCK_DEPS_VERSION__,\n uaChTrackLevel: 'none',\n plugins: [],\n useGlobalIntegrationsConfigInEvents: false,\n bufferDataPlaneEventsUntilReady: false,\n dataPlaneEventsBufferTimeout: DEFAULT_DATA_PLANE_EVENTS_BUFFER_TIMEOUT_MS,\n storage: {\n encryption: {\n version: DEFAULT_STORAGE_ENCRYPTION_VERSION,\n },\n migrate: true,\n cookie: {},\n },\n sendAdblockPage: false,\n sameDomainCookiesOnly: false,\n secureCookie: false,\n sendAdblockPageOptions: {},\n useServerSideCookies: false,\n};\n\nconst loadOptionsState: LoadOptionsState = signal(clone(defaultLoadOptions));\n\nexport { loadOptionsState };\n","import type { ApiObject } from '@rudderstack/analytics-js-common/types/ApiObject';\nimport type { SessionInfo } from '@rudderstack/analytics-js-common/types/Session';\n\nconst DEFAULT_USER_SESSION_VALUES = {\n userId: '',\n userTraits: {} as ApiObject,\n anonymousId: '',\n groupId: '',\n groupTraits: {} as ApiObject,\n initialReferrer: '',\n initialReferringDomain: '',\n sessionInfo: {} as SessionInfo,\n authToken: null,\n};\n\nconst SERVER_SIDE_COOKIES_DEBOUNCE_TIME = 10; // milliseconds\n\nexport { DEFAULT_USER_SESSION_VALUES, SERVER_SIDE_COOKIES_DEBOUNCE_TIME };\n","import { signal } from '@preact/signals-core';\nimport type { SessionState } from '@rudderstack/analytics-js-common/types/ApplicationState';\nimport type { SessionInfo } from '@rudderstack/analytics-js-common/types/Session';\nimport { DEFAULT_USER_SESSION_VALUES } from '../../components/userSessionManager/constants';\nimport { DEFAULT_SESSION_TIMEOUT_MS } from '../../constants/timeouts';\n\nconst defaultSessionConfiguration: SessionInfo = {\n autoTrack: true,\n timeout: DEFAULT_SESSION_TIMEOUT_MS,\n};\n\nconst sessionState: SessionState = {\n userId: signal(DEFAULT_USER_SESSION_VALUES.userId),\n userTraits: signal(DEFAULT_USER_SESSION_VALUES.userTraits),\n anonymousId: signal(DEFAULT_USER_SESSION_VALUES.anonymousId),\n groupId: signal(DEFAULT_USER_SESSION_VALUES.groupId),\n groupTraits: signal(DEFAULT_USER_SESSION_VALUES.groupTraits),\n initialReferrer: signal(DEFAULT_USER_SESSION_VALUES.initialReferrer),\n initialReferringDomain: signal(DEFAULT_USER_SESSION_VALUES.initialReferringDomain),\n sessionInfo: signal(DEFAULT_USER_SESSION_VALUES.sessionInfo),\n authToken: signal(DEFAULT_USER_SESSION_VALUES.authToken),\n};\n\nexport { sessionState, defaultSessionConfiguration };\n","import { signal } from '@preact/signals-core';\nimport type { CapabilitiesState } from '@rudderstack/analytics-js-common/types/ApplicationState';\n\nconst capabilitiesState: CapabilitiesState = {\n isOnline: signal(true),\n storage: {\n isLocalStorageAvailable: signal(false),\n isCookieStorageAvailable: signal(false),\n isSessionStorageAvailable: signal(false),\n },\n isBeaconAvailable: signal(false),\n isLegacyDOM: signal(false),\n isUaCHAvailable: signal(false),\n isCryptoAvailable: signal(false),\n isIE11: signal(false),\n isAdBlocked: signal(false),\n};\n\nexport { capabilitiesState };\n","import { signal } from '@preact/signals-core';\nimport type { ReportingState } from '@rudderstack/analytics-js-common/types/ApplicationState';\n\nconst reportingState: ReportingState = {\n isErrorReportingEnabled: signal(false),\n isMetricsReportingEnabled: signal(false),\n breadcrumbs: signal([]),\n};\n\nexport { reportingState };\n","import { signal } from '@preact/signals-core';\nimport type { SourceConfigState } from '@rudderstack/analytics-js-common/types/ApplicationState';\n\nconst sourceConfigState: SourceConfigState = signal(undefined);\n\nexport { sourceConfigState };\n","import { signal } from '@preact/signals-core';\nimport type { LifecycleState } from '@rudderstack/analytics-js-common/types/ApplicationState';\nimport { POST_LOAD_LOG_LEVEL } from '../../services/Logger';\nimport { DEFAULT_INTEGRATION_SDKS_URL, DEFAULT_PLUGINS_URL } from '../../constants/urls';\n\nconst lifecycleState: LifecycleState = {\n activeDataplaneUrl: signal(undefined),\n integrationsCDNPath: signal(DEFAULT_INTEGRATION_SDKS_URL),\n pluginsCDNPath: signal(DEFAULT_PLUGINS_URL),\n sourceConfigUrl: signal(undefined),\n status: signal(undefined),\n initialized: signal(false),\n logLevel: signal(POST_LOAD_LOG_LEVEL),\n loaded: signal(false),\n readyCallbacks: signal([]),\n writeKey: signal(undefined),\n dataPlaneUrl: signal(undefined),\n};\n\nexport { lifecycleState };\n","import { signal } from '@preact/signals-core';\nimport type { ConsentsState } from '@rudderstack/analytics-js-common/types/ApplicationState';\n\nconst consentsState: ConsentsState = {\n enabled: signal(false),\n initialized: signal(false),\n data: signal({}),\n activeConsentManagerPluginName: signal(undefined),\n preConsent: signal({ enabled: false }),\n postConsent: signal({}),\n resolutionStrategy: signal('and'),\n provider: signal(undefined),\n metadata: signal(undefined),\n};\n\nexport { consentsState };\n","import { signal } from '@preact/signals-core';\nimport type { MetricsState } from '@rudderstack/analytics-js-common/types/ApplicationState';\n\nconst metricsState: MetricsState = {\n retries: signal(0),\n dropped: signal(0),\n sent: signal(0),\n queued: signal(0),\n triggered: signal(0),\n metricsServiceUrl: signal(undefined),\n};\n\nexport { metricsState };\n","import { signal } from '@preact/signals-core';\nimport type { ContextState } from '@rudderstack/analytics-js-common/types/ApplicationState';\nimport { APP_NAME, APP_NAMESPACE, APP_VERSION, MODULE_TYPE } from '../../constants/app';\n\nconst contextState: ContextState = {\n app: signal({\n name: APP_NAME,\n namespace: APP_NAMESPACE,\n version: APP_VERSION,\n installType: MODULE_TYPE,\n }),\n traits: signal(null),\n library: signal({\n name: APP_NAME,\n version: APP_VERSION,\n snippetVersion: (globalThis as typeof window).RudderSnippetVersion,\n }),\n userAgent: signal(null),\n device: signal(null),\n network: signal(null),\n os: signal({\n name: '',\n version: '',\n }),\n locale: signal(null),\n screen: signal({\n density: 0,\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n }),\n 'ua-ch': signal(undefined),\n timezone: signal(undefined),\n};\n\nexport { contextState };\n","import { signal } from '@preact/signals-core';\nimport type { NativeDestinationsState } from '@rudderstack/analytics-js-common/types/ApplicationState';\n\nconst nativeDestinationsState: NativeDestinationsState = {\n configuredDestinations: signal([]),\n activeDestinations: signal([]),\n loadOnlyIntegrations: signal({}),\n failedDestinations: signal([]),\n loadIntegration: signal(true),\n initializedDestinations: signal([]),\n clientDestinationsReady: signal(false),\n integrationsConfig: signal({}),\n};\n\nexport { nativeDestinationsState };\n","import { signal } from '@preact/signals-core';\nimport type { EventBufferState } from '@rudderstack/analytics-js-common/types/ApplicationState';\n\nconst eventBufferState: EventBufferState = {\n toBeProcessedArray: signal([]),\n readyCallbacksArray: signal([]),\n};\n\nexport { eventBufferState };\n","import { signal } from '@preact/signals-core';\nimport type { PluginsState } from '@rudderstack/analytics-js-common/types/ApplicationState';\n\nconst pluginsState: PluginsState = {\n ready: signal(false),\n loadedPlugins: signal([]),\n failedPlugins: signal([]),\n pluginsToLoadFromConfig: signal([]),\n activePlugins: signal([]),\n totalPluginsToLoad: signal(0),\n};\n\nexport { pluginsState };\n","import { signal } from '@preact/signals-core';\nimport type { StorageState } from '@rudderstack/analytics-js-common/types/ApplicationState';\n\nconst storageState: StorageState = {\n encryptionPluginName: signal(undefined),\n migrate: signal(false),\n type: signal(undefined),\n cookie: signal(undefined),\n entries: signal({}),\n trulyAnonymousTracking: signal(false),\n};\n\nexport { storageState };\n","import { signal } from '@preact/signals-core';\nimport type { ServerCookiesState } from '@rudderstack/analytics-js-common/types/ApplicationState';\n\nconst serverSideCookiesState: ServerCookiesState = {\n isEnabledServerSideCookies: signal(false),\n dataServiceUrl: signal(undefined),\n};\n\nexport { serverSideCookiesState };\n","import { signal } from '@preact/signals-core';\nimport type { DataPlaneEventsState } from '@rudderstack/analytics-js-common/types/ApplicationState';\nimport type { PluginName } from '@rudderstack/analytics-js-common/types/PluginsManager';\n\nconst dataPlaneEventsState: DataPlaneEventsState = {\n eventsQueuePluginName: signal(undefined),\n deliveryEnabled: signal(true), // Delivery should always happen\n};\n\nexport { dataPlaneEventsState };\n","import { signal } from '@preact/signals-core';\nimport type { AutoTrackState } from '@rudderstack/analytics-js-common/types/ApplicationState';\n\nconst autoTrackState: AutoTrackState = {\n enabled: signal(false),\n pageLifecycle: {\n enabled: signal(false),\n visitId: signal(undefined),\n pageLoadedTimestamp: signal(undefined),\n },\n};\n\nexport { autoTrackState };\n","import { clone } from 'ramda';\nimport type { ApplicationState } from '@rudderstack/analytics-js-common/types/ApplicationState';\nimport { loadOptionsState } from './slices/loadOptions';\nimport { sessionState } from './slices/session';\nimport { capabilitiesState } from './slices/capabilities';\nimport { reportingState } from './slices/reporting';\nimport { sourceConfigState } from './slices/source';\nimport { lifecycleState } from './slices/lifecycle';\nimport { consentsState } from './slices/consents';\nimport { metricsState } from './slices/metrics';\nimport { contextState } from './slices/context';\nimport { nativeDestinationsState } from './slices/nativeDestinations';\nimport { eventBufferState } from './slices/eventBuffer';\nimport { pluginsState } from './slices/plugins';\nimport { storageState } from './slices/storage';\nimport { serverSideCookiesState } from './slices/serverCookies';\nimport { dataPlaneEventsState } from './slices/dataPlaneEvents';\nimport { autoTrackState } from './slices/autoTrack';\n\nconst defaultStateValues: ApplicationState = {\n capabilities: capabilitiesState,\n consents: consentsState,\n context: contextState,\n eventBuffer: eventBufferState,\n lifecycle: lifecycleState,\n loadOptions: loadOptionsState,\n metrics: metricsState,\n nativeDestinations: nativeDestinationsState,\n plugins: pluginsState,\n reporting: reportingState,\n session: sessionState,\n source: sourceConfigState,\n storage: storageState,\n serverCookies: serverSideCookiesState,\n dataPlaneEvents: dataPlaneEventsState,\n autoTrack: autoTrackState,\n};\n\nconst state: ApplicationState = {\n ...clone(defaultStateValues),\n};\n\nconst resetState = () => {\n state.capabilities = clone(defaultStateValues.capabilities);\n state.consents = clone(defaultStateValues.consents);\n state.context = clone(defaultStateValues.context);\n state.eventBuffer = clone(defaultStateValues.eventBuffer);\n state.lifecycle = clone(defaultStateValues.lifecycle);\n state.loadOptions = clone(defaultStateValues.loadOptions);\n state.metrics = clone(defaultStateValues.metrics);\n state.nativeDestinations = clone(defaultStateValues.nativeDestinations);\n state.plugins = clone(defaultStateValues.plugins);\n state.reporting = clone(defaultStateValues.reporting);\n state.session = clone(defaultStateValues.session);\n state.source = clone(defaultStateValues.source);\n state.storage = clone(defaultStateValues.storage);\n state.serverCookies = clone(defaultStateValues.serverCookies);\n state.dataPlaneEvents = clone(defaultStateValues.dataPlaneEvents);\n state.autoTrack = clone(defaultStateValues.autoTrack);\n};\n\nexport { state, resetState };\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function() {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function() {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n var objectProps = ['evalOrigin'];\n\n var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n\n function StackFrame(obj) {\n if (!obj) return;\n for (var i = 0; i < props.length; i++) {\n if (obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function() {\n return this.args;\n },\n setArgs: function(v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n getEvalOrigin: function() {\n return this.evalOrigin;\n },\n setEvalOrigin: function(v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n\n toString: function() {\n var fileName = this.getFileName() || '';\n var lineNumber = this.getLineNumber() || '';\n var columnNumber = this.getColumnNumber() || '';\n var functionName = this.getFunctionName() || '';\n if (this.getIsEval()) {\n if (fileName) {\n return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return '[eval]:' + lineNumber + ':' + columnNumber;\n }\n if (functionName) {\n return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return fileName + ':' + lineNumber + ':' + columnNumber;\n }\n };\n\n StackFrame.fromString = function StackFrame$$fromString(str) {\n var argsStartIndex = str.indexOf('(');\n var argsEndIndex = str.lastIndexOf(')');\n\n var functionName = str.substring(0, argsStartIndex);\n var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n var locationString = str.substring(argsEndIndex + 1);\n\n if (locationString.indexOf('@') === 0) {\n var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n var fileName = parts[1];\n var lineNumber = parts[2];\n var columnNumber = parts[3];\n }\n\n return new StackFrame({\n functionName: functionName,\n args: args || undefined,\n fileName: fileName,\n lineNumber: lineNumber || undefined,\n columnNumber: columnNumber || undefined\n });\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) {\n return function(v) {\n this[p] = Boolean(v);\n };\n })(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) {\n return function(v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n this[p] = Number(v);\n };\n })(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) {\n return function(v) {\n this[p] = String(v);\n };\n })(stringProps[k]);\n }\n\n return StackFrame;\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(,.*$)/g, '');\n }\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').replace(/^.*?\\s+/, '');\n\n // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n var location = sanitizedLine.match(/ (\\(.+\\)$)/);\n\n // remove the parenthesized location from the line, if it was matched\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n // if a location was matched, pass it to extractLocation() otherwise pass all sanitizedLine\n // because this line doesn't have function name\n var locationParts = this.extractLocation(location ? location[1] : sanitizedLine);\n var functionName = location && sanitizedLine || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n })\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return filtered.map(function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n}));\n","import type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport ErrorStackParser from 'error-stack-parser';\nimport type { Exception } from '@rudderstack/analytics-js-common/types/Metrics';\nimport { ERROR_HANDLER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport { stringifyWithoutCircular } from '@rudderstack/analytics-js-common/utilities/json';\nimport {\n isDefined,\n isString,\n isTypeOfError,\n} from '@rudderstack/analytics-js-common/utilities/checks';\nimport { getStacktrace } from '@rudderstack/analytics-js-common/utilities/errors';\nimport type { Stackframe } from '@bugsnag/js';\nimport { NON_ERROR_WARNING } from '../../../constants/logMessages';\n\nconst GLOBAL_CODE = 'global code';\n\nconst normalizeFunctionName = (name: string | undefined) => {\n if (isDefined(name)) {\n return /^global code$/i.test(name as string) ? GLOBAL_CODE : name;\n }\n\n return name;\n};\n\n/**\n * Takes a stacktrace.js style stackframe (https://github.com/stacktracejs/stackframe)\n * and returns a Bugsnag compatible stackframe (https://docs.bugsnag.com/api/error-reporting/#json-payload)\n * @param frame\n * @returns\n */\nconst formatStackframe = (frame: ErrorStackParser.StackFrame): Stackframe => {\n const f = {\n file: frame.fileName as string,\n method: normalizeFunctionName(frame.functionName),\n lineNumber: frame.lineNumber,\n columnNumber: frame.columnNumber,\n };\n // Some instances result in no file:\n // - non-error exception thrown from global code in FF\n // This adds one.\n if (f.lineNumber && f.lineNumber > -1 && !f.file && !f.method) {\n f.file = GLOBAL_CODE;\n }\n return f;\n};\n\nconst ensureString = (str: any) => (isString(str) ? str : '');\n\nfunction createException(\n errorClass: string,\n errorMessage: string,\n msgPrefix: string,\n stacktrace: ErrorStackParser.StackFrame[],\n): Exception {\n return {\n errorClass: ensureString(errorClass),\n message: `${msgPrefix}${ensureString(errorMessage)}`,\n type: 'browserjs',\n stacktrace: stacktrace.reduce((accum: Stackframe[], frame: ErrorStackParser.StackFrame) => {\n const f = formatStackframe(frame);\n // don't include a stackframe if none of its properties are defined\n try {\n if (JSON.stringify(f) === '{}') return accum;\n return accum.concat(f);\n } catch {\n return accum;\n }\n }, []),\n };\n}\n\nconst normalizeError = (maybeError: any, logger: ILogger): any => {\n let error;\n\n if (isTypeOfError(maybeError) && isString(getStacktrace(maybeError))) {\n error = maybeError;\n } else {\n logger.warn(NON_ERROR_WARNING(ERROR_HANDLER, stringifyWithoutCircular(maybeError)));\n error = undefined;\n }\n\n return error;\n};\n\nconst createBugsnagException = (error: any, msgPrefix: string): Exception => {\n try {\n const stacktrace = ErrorStackParser.parse(error);\n return createException(error.name, error.message, msgPrefix, stacktrace);\n } catch {\n return createException(error.name, error.message, msgPrefix, []);\n }\n};\n\nexport {\n normalizeError,\n createBugsnagException,\n formatStackframe, // for testing\n ensureString, // for testing\n createException, // for testing\n normalizeFunctionName, // for testing\n};\n","import { getMutatedError } from '@rudderstack/analytics-js-common/utilities/errors';\n\n/**\n * Utility to parse XHR JSON response\n */\nconst responseTextToJson = (\n responseText: string,\n onError: (message: unknown) => void,\n): T | undefined => {\n try {\n return JSON.parse(responseText || '');\n } catch (err) {\n const error = getMutatedError(err, 'Failed to parse response data');\n onError(error);\n }\n\n return undefined;\n};\n\nexport { responseTextToJson };\n","const FAILED_REQUEST_ERR_MSG_PREFIX = 'The request failed';\nconst ERROR_MESSAGES_TO_BE_FILTERED = [FAILED_REQUEST_ERR_MSG_PREFIX];\n\nexport { FAILED_REQUEST_ERR_MSG_PREFIX, ERROR_MESSAGES_TO_BE_FILTERED };\n","/* eslint-disable prefer-promise-reject-errors */\nimport { mergeDeepRight } from '@rudderstack/analytics-js-common/utilities/object';\nimport { stringifyWithoutCircular } from '@rudderstack/analytics-js-common/utilities/json';\nimport { isNull } from '@rudderstack/analytics-js-common/utilities/checks';\nimport type {\n IXHRRequestOptions,\n ResponseDetails,\n} from '@rudderstack/analytics-js-common/types/HttpClient';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport { getMutatedError } from '@rudderstack/analytics-js-common/utilities/errors';\nimport { FAILED_REQUEST_ERR_MSG_PREFIX } from '@rudderstack/analytics-js-common/constants/errors';\nimport { DEFAULT_XHR_TIMEOUT_MS } from '../../../constants/timeouts';\nimport {\n XHR_PAYLOAD_PREP_ERROR,\n XHR_DELIVERY_ERROR,\n XHR_REQUEST_ERROR,\n XHR_SEND_ERROR,\n} from '../../../constants/logMessages';\n\nconst DEFAULT_XHR_REQUEST_OPTIONS: Partial = {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json;charset=UTF-8',\n },\n method: 'GET',\n};\n\n/**\n * Utility to create request configuration based on default options\n */\nconst createXhrRequestOptions = (\n url: string,\n options?: Partial,\n basicAuthHeader?: string,\n): IXHRRequestOptions => {\n const requestOptions: IXHRRequestOptions = mergeDeepRight(\n DEFAULT_XHR_REQUEST_OPTIONS,\n options || {},\n );\n\n if (basicAuthHeader) {\n requestOptions.headers = mergeDeepRight(requestOptions.headers, {\n Authorization: basicAuthHeader,\n });\n }\n\n requestOptions.url = url;\n\n return requestOptions;\n};\n\n/**\n * Utility implementation of XHR, fetch cannot be used as it requires explicit\n * origin allowed values and not wildcard for CORS requests with credentials and\n * this is not supported by our sourceConfig API\n */\nconst xhrRequest = (\n options: IXHRRequestOptions,\n timeout = DEFAULT_XHR_TIMEOUT_MS,\n logger?: ILogger,\n): Promise =>\n new Promise((resolve, reject) => {\n let payload;\n if (options.sendRawData === true) {\n payload = options.data;\n } else {\n payload = stringifyWithoutCircular(options.data, false, [], logger);\n if (isNull(payload)) {\n reject({\n error: new Error(XHR_PAYLOAD_PREP_ERROR),\n undefined,\n options,\n });\n // return and don't process further if the payload could not be stringified\n return;\n }\n }\n\n const xhr = new XMLHttpRequest();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const xhrReject = (e?: ProgressEvent) => {\n reject({\n error: new Error(\n XHR_DELIVERY_ERROR(\n FAILED_REQUEST_ERR_MSG_PREFIX,\n xhr.status,\n xhr.statusText,\n options.url,\n ),\n ),\n xhr,\n options,\n });\n };\n const xhrError = (e?: ProgressEvent) => {\n reject({\n error: new Error(XHR_REQUEST_ERROR(FAILED_REQUEST_ERR_MSG_PREFIX, e, options.url)),\n xhr,\n options,\n });\n };\n\n xhr.ontimeout = xhrError;\n xhr.onerror = xhrError;\n\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 400) {\n resolve({\n response: xhr.responseText,\n xhr,\n options,\n });\n } else {\n xhrReject();\n }\n };\n\n xhr.open(options.method, options.url, true);\n if (options.withCredentials === true) {\n xhr.withCredentials = true;\n }\n // The timeout property may be set only in the time interval between a call to the open method\n // and the first call to the send method in legacy browsers\n xhr.timeout = timeout;\n\n Object.keys(options.headers).forEach(headerName => {\n if (options.headers[headerName]) {\n xhr.setRequestHeader(headerName, options.headers[headerName] as string);\n }\n });\n\n try {\n xhr.send(payload);\n } catch (err) {\n reject({\n error: getMutatedError(err, XHR_SEND_ERROR(FAILED_REQUEST_ERR_MSG_PREFIX, options.url)),\n xhr,\n options,\n });\n }\n });\n\nexport { createXhrRequestOptions, xhrRequest, DEFAULT_XHR_REQUEST_OPTIONS };\n","import { isFunction } from '@rudderstack/analytics-js-common/utilities/checks';\nimport type {\n IAsyncRequestConfig,\n IHttpClient,\n IRequestConfig,\n ResponseDetails,\n} from '@rudderstack/analytics-js-common/types/HttpClient';\nimport type { IErrorHandler } from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport { toBase64 } from '@rudderstack/analytics-js-common/utilities/string';\nimport { HTTP_CLIENT } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport { defaultLogger } from '../Logger';\nimport { responseTextToJson } from './xhr/xhrResponseHandler';\nimport { createXhrRequestOptions, xhrRequest } from './xhr/xhrRequestHandler';\n\n// TODO: should we add any debug level loggers?\n\n/**\n * Service to handle data communication with APIs\n */\nclass HttpClient implements IHttpClient {\n errorHandler?: IErrorHandler;\n logger: ILogger;\n basicAuthHeader?: string;\n\n constructor(logger: ILogger) {\n this.logger = logger;\n this.onError = this.onError.bind(this);\n }\n\n init(errorHandler: IErrorHandler) {\n this.errorHandler = errorHandler;\n }\n\n /**\n * Implement requests in a blocking way\n */\n async getData(\n config: IRequestConfig,\n ): Promise<{ data: T | string | undefined; details?: ResponseDetails }> {\n const { url, options, timeout, isRawResponse } = config;\n\n try {\n const data = await xhrRequest(\n createXhrRequestOptions(url, options, this.basicAuthHeader),\n timeout,\n this.logger,\n );\n return {\n data: isRawResponse ? data.response : responseTextToJson(data.response, this.onError),\n details: data,\n };\n } catch (reason) {\n return { data: undefined, details: reason as ResponseDetails };\n }\n }\n\n /**\n * Implement requests in a non-blocking way\n */\n getAsyncData(config: IAsyncRequestConfig) {\n const { callback, url, options, timeout, isRawResponse } = config;\n const isFireAndForget = !isFunction(callback);\n\n xhrRequest(createXhrRequestOptions(url, options, this.basicAuthHeader), timeout, this.logger)\n .then((data: ResponseDetails) => {\n if (!isFireAndForget) {\n callback(\n isRawResponse ? data.response : responseTextToJson(data.response, this.onError),\n data,\n );\n }\n })\n .catch((data: ResponseDetails) => {\n if (!isFireAndForget) {\n callback(undefined, data);\n }\n });\n }\n\n /**\n * Handle errors\n */\n onError(error: unknown) {\n this.errorHandler?.onError(error, HTTP_CLIENT);\n }\n\n /**\n * Set basic authentication header (eg writekey)\n */\n setAuthHeader(value: string, noBtoa = false) {\n const authVal = noBtoa ? value : toBase64(`${value}:`);\n this.basicAuthHeader = `Basic ${authVal}`;\n }\n\n /**\n * Clear basic authentication header\n */\n resetAuthHeader() {\n this.basicAuthHeader = undefined;\n }\n}\n\nconst defaultHttpClient = new HttpClient(defaultLogger);\n\nexport { HttpClient, defaultHttpClient };\n","// Errors from the below scripts are NOT allowed to reach Bugsnag\nconst SDK_FILE_NAME_PREFIXES = (): string[] => [\n 'rsa', // Prefix for all the SDK scripts including plugins and module federated chunks\n];\n\nconst DEV_HOSTS = ['www.test-host.com', 'localhost', '127.0.0.1', '[::1]'];\n\n// List of keys to exclude from the metadata\n// Potential PII or sensitive data\nconst APP_STATE_EXCLUDE_KEYS = [\n 'userId',\n 'userTraits',\n 'groupId',\n 'groupTraits',\n 'anonymousId',\n 'config',\n 'instance', // destination instance objects\n 'eventBuffer', // pre-load event buffer (may contain PII)\n 'traits',\n 'authToken',\n];\nconst REQUEST_TIMEOUT_MS = 10 * 1000; // 10 seconds\nconst NOTIFIER_NAME = 'RudderStack JavaScript SDK';\nconst SDK_GITHUB_URL = '__REPOSITORY_URL__';\nconst SOURCE_NAME = 'js';\n\nexport {\n SDK_FILE_NAME_PREFIXES,\n DEV_HOSTS,\n APP_STATE_EXCLUDE_KEYS,\n REQUEST_TIMEOUT_MS,\n NOTIFIER_NAME,\n SDK_GITHUB_URL,\n SOURCE_NAME,\n};\n","import type {\n ApplicationState,\n Breadcrumb,\n} from '@rudderstack/analytics-js-common/types/ApplicationState';\nimport {\n ErrorType,\n type ErrorState,\n type SDKError,\n} from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport { clone } from 'ramda';\nimport type {\n ErrorEventPayload,\n Exception,\n MetricServicePayload,\n} from '@rudderstack/analytics-js-common/types/Metrics';\nimport { stringifyWithoutCircular } from '@rudderstack/analytics-js-common/utilities/json';\nimport { CDN_INT_DIR } from '@rudderstack/analytics-js-common/constants/urls';\nimport { generateUUID } from '@rudderstack/analytics-js-common/utilities/uuId';\nimport { METRICS_PAYLOAD_VERSION } from '@rudderstack/analytics-js-common/constants/metrics';\nimport { ERROR_MESSAGES_TO_BE_FILTERED } from '@rudderstack/analytics-js-common/constants/errors';\nimport {\n APP_STATE_EXCLUDE_KEYS,\n DEV_HOSTS,\n NOTIFIER_NAME,\n SDK_FILE_NAME_PREFIXES,\n SDK_GITHUB_URL,\n SOURCE_NAME,\n} from './constants';\n\nconst getErrInstance = (err: SDKError, errorType: string) => {\n switch (errorType) {\n case ErrorType.UNHANDLEDEXCEPTION: {\n const { error } = err as ErrorEvent;\n return error || err;\n }\n case ErrorType.UNHANDLEDREJECTION: {\n return (err as PromiseRejectionEvent).reason;\n }\n case ErrorType.HANDLEDEXCEPTION:\n default:\n return err;\n }\n};\n\nconst createNewBreadcrumb = (message: string): Breadcrumb => ({\n type: 'manual',\n name: message,\n timestamp: new Date(),\n metaData: {},\n});\n\nconst getReleaseStage = () => {\n const host = globalThis.location.hostname;\n return host && DEV_HOSTS.includes(host) ? 'development' : '__RS_BUGSNAG_RELEASE_STAGE__';\n};\n\nconst getAppStateForMetadata = (state: ApplicationState): Record => {\n const stateStr = stringifyWithoutCircular(state, false, APP_STATE_EXCLUDE_KEYS);\n return stateStr !== null ? JSON.parse(stateStr) : {};\n};\n\nconst getURLWithoutQueryString = () => {\n const url = globalThis.location.href.split('?');\n return url[0];\n};\n\nconst getUserDetails = (\n source: ApplicationState['source'],\n session: ApplicationState['session'],\n lifecycle: ApplicationState['lifecycle'],\n autoTrack: ApplicationState['autoTrack'],\n) => ({\n id: `${source.value?.id ?? (lifecycle.writeKey.value as string)}..${session.sessionInfo.value.id ?? 'NA'}..${autoTrack.pageLifecycle.visitId.value ?? 'NA'}`,\n name: source.value?.name ?? 'NA',\n});\n\nconst getDeviceDetails = (\n locale: ApplicationState['context']['locale'],\n userAgent: ApplicationState['context']['userAgent'],\n) => ({\n locale: locale.value ?? 'NA',\n userAgent: userAgent.value ?? 'NA',\n time: new Date(),\n});\n\nconst getBugsnagErrorEvent = (\n exception: Exception,\n errorState: ErrorState,\n state: ApplicationState,\n): ErrorEventPayload => {\n const { context, lifecycle, session, source, reporting, autoTrack } = state;\n const { app, locale, userAgent, timezone, screen, library } = context;\n\n return {\n payloadVersion: '5',\n notifier: {\n name: NOTIFIER_NAME,\n version: app.value.version,\n url: SDK_GITHUB_URL,\n },\n events: [\n {\n exceptions: [clone(exception)],\n severity: errorState.severity,\n unhandled: errorState.unhandled,\n severityReason: errorState.severityReason,\n app: {\n version: app.value.version,\n releaseStage: getReleaseStage(),\n type: app.value.installType,\n },\n device: getDeviceDetails(locale, userAgent),\n request: {\n url: getURLWithoutQueryString() as string,\n clientIp: '[NOT COLLECTED]',\n },\n breadcrumbs: clone(reporting.breadcrumbs.value),\n context: exception.message,\n metaData: {\n app: {\n snippetVersion: library.value.snippetVersion,\n },\n device: { ...screen.value, timezone: timezone.value },\n // Add rest of the state groups as metadata\n // so that they show up as separate tabs in the dashboard\n ...getAppStateForMetadata(state),\n },\n user: getUserDetails(source, session, lifecycle, autoTrack),\n },\n ],\n };\n};\n\n/**\n * A function to determine whether the error should be promoted to notify or not\n * @param {Error} exception\n * @returns\n */\nconst isAllowedToBeNotified = (exception: Exception) =>\n !ERROR_MESSAGES_TO_BE_FILTERED.some(e => exception.message.includes(e));\n\n/**\n * A function to determine if the error is from Rudder SDK\n * @param {Error} exception\n * @returns\n */\nconst isSDKError = (exception: Exception) => {\n const errorOrigin = exception.stacktrace[0]?.file;\n\n if (!errorOrigin || typeof errorOrigin !== 'string') {\n return false;\n }\n\n const srcFileName = errorOrigin.substring(errorOrigin.lastIndexOf('/') + 1);\n const paths = errorOrigin.split('/');\n // extract the parent folder name from the error origin file path\n // Ex: parentFolderName will be 'sample' for url: https://example.com/sample/file.min.js\n const parentFolderName = paths[paths.length - 2];\n\n return (\n parentFolderName === CDN_INT_DIR ||\n SDK_FILE_NAME_PREFIXES().some(\n prefix => srcFileName.startsWith(prefix) && srcFileName.endsWith('.js'),\n )\n );\n};\n\nconst getErrorDeliveryPayload = (payload: ErrorEventPayload, state: ApplicationState): string => {\n const data = {\n version: METRICS_PAYLOAD_VERSION,\n message_id: generateUUID(),\n source: {\n name: SOURCE_NAME,\n sdk_version: state.context.app.value.version,\n write_key: state.lifecycle.writeKey.value as string,\n install_type: state.context.app.value.installType,\n },\n errors: payload,\n };\n return stringifyWithoutCircular(data) as string;\n};\n\nexport {\n getErrInstance,\n createNewBreadcrumb,\n getReleaseStage,\n getAppStateForMetadata,\n getBugsnagErrorEvent,\n getURLWithoutQueryString,\n isSDKError,\n getErrorDeliveryPayload,\n isAllowedToBeNotified,\n getUserDetails, // for testing\n getDeviceDetails, // for testing\n};\n","const METRICS_PAYLOAD_VERSION = '1';\n\nexport { METRICS_PAYLOAD_VERSION };\n","import { isUndefined } from '@rudderstack/analytics-js-common/utilities/checks';\nimport {\n ErrorType,\n type ErrorState,\n type IErrorHandler,\n type SDKError,\n} from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport { ERROR_HANDLER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport { LOG_CONTEXT_SEPARATOR } from '@rudderstack/analytics-js-common/constants/logMessages';\nimport type { IHttpClient } from '@rudderstack/analytics-js-common/types/HttpClient';\nimport {\n getStacktrace,\n MANUAL_ERROR_IDENTIFIER,\n} from '@rudderstack/analytics-js-common/utilities/errors';\nimport { BREADCRUMB_ERROR, HANDLE_ERROR_FAILURE } from '../../constants/logMessages';\nimport { state } from '../../state';\nimport { defaultLogger } from '../Logger';\nimport { createBugsnagException, normalizeError } from './ErrorEvent/event';\nimport { defaultHttpClient } from '../HttpClient';\nimport {\n createNewBreadcrumb,\n getBugsnagErrorEvent,\n getErrInstance,\n getErrorDeliveryPayload,\n isAllowedToBeNotified,\n isSDKError,\n} from './utils';\n\n/**\n * A service to handle errors\n */\nclass ErrorHandler implements IErrorHandler {\n httpClient: IHttpClient;\n logger: ILogger;\n\n // If no logger is passed errors will be thrown as unhandled error\n constructor(httpClient: IHttpClient, logger: ILogger) {\n this.httpClient = httpClient;\n this.logger = logger;\n this.attachErrorListeners();\n }\n\n attachErrorListeners() {\n (globalThis as typeof window).addEventListener('error', (event: ErrorEvent | Event) => {\n this.onError(event, ERROR_HANDLER, undefined, ErrorType.UNHANDLEDEXCEPTION);\n });\n\n (globalThis as typeof window).addEventListener(\n 'unhandledrejection',\n (event: PromiseRejectionEvent) => {\n this.onError(event, ERROR_HANDLER, undefined, ErrorType.UNHANDLEDREJECTION);\n },\n );\n }\n\n onError(\n error: SDKError,\n context = '',\n customMessage = '',\n errorType = ErrorType.HANDLEDEXCEPTION,\n ) {\n try {\n const errInstance = getErrInstance(error, errorType);\n const normalizedError = normalizeError(errInstance, this.logger);\n if (isUndefined(normalizedError)) {\n return;\n }\n\n const customMsgVal = customMessage ? `${customMessage} - ` : '';\n const errorMsgPrefix = `${context}${LOG_CONTEXT_SEPARATOR}${customMsgVal}`;\n const bsException = createBugsnagException(normalizedError, errorMsgPrefix);\n\n const stacktrace = getStacktrace(normalizedError) as string;\n const isSdkDispatched = stacktrace.includes(MANUAL_ERROR_IDENTIFIER);\n\n // Filter unhandled errors that are not originated in the SDK.\n // However, in case of NPM installations, since we cannot differentiate between SDK and application errors, we should report all errors.\n if (\n !isSDKError(bsException) &&\n state.context.app.value.installType !== 'npm' &&\n !isSdkDispatched &&\n errorType !== ErrorType.HANDLEDEXCEPTION\n ) {\n return;\n }\n\n if (state.reporting.isErrorReportingEnabled.value && isAllowedToBeNotified(bsException)) {\n const errorState: ErrorState = {\n severity: 'error',\n unhandled: errorType !== ErrorType.HANDLEDEXCEPTION,\n severityReason: { type: errorType },\n };\n\n // enrich error payload\n const bugsnagPayload = getBugsnagErrorEvent(bsException, errorState, state);\n\n // send it to metrics service\n this.httpClient.getAsyncData({\n url: state.metrics.metricsServiceUrl.value as string,\n options: {\n method: 'POST',\n data: getErrorDeliveryPayload(bugsnagPayload, state),\n sendRawData: true,\n },\n isRawResponse: true,\n });\n }\n\n // Log handled errors and errors dispatched by the SDK\n if (errorType === ErrorType.HANDLEDEXCEPTION || isSdkDispatched) {\n this.logger.error(bsException.message);\n }\n } catch (err) {\n // If an error occurs while handling an error, log it\n this.logger.error(HANDLE_ERROR_FAILURE(ERROR_HANDLER), err);\n }\n }\n\n /**\n * Add breadcrumbs to add insight of a user's journey before an error\n * occurred and send to external error monitoring service via a plugin\n *\n * @param {string} breadcrumb breadcrumbs message\n */\n leaveBreadcrumb(breadcrumb: string) {\n try {\n state.reporting.breadcrumbs.value = [\n ...state.reporting.breadcrumbs.value,\n createNewBreadcrumb(breadcrumb),\n ];\n } catch (err) {\n this.onError(err, BREADCRUMB_ERROR(ERROR_HANDLER));\n }\n }\n}\n\nconst defaultErrorHandler = new ErrorHandler(defaultHttpClient, defaultLogger);\n\nexport { ErrorHandler, defaultErrorHandler };\n","import { isFunction } from '@rudderstack/analytics-js-common/utilities/checks';\nimport { getValueByPath, hasValueByPath } from '@rudderstack/analytics-js-common/utilities/object';\nimport type {\n ExtensionPlugin,\n IPluginEngine,\n PluginEngineConfig,\n} from '@rudderstack/analytics-js-common/types/PluginEngine';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport { PLUGIN_ENGINE } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport { defaultLogger } from '../Logger';\nimport {\n PLUGIN_ALREADY_EXISTS_ERROR,\n PLUGIN_DEPS_ERROR,\n PLUGIN_ENGINE_BUG_ERROR,\n PLUGIN_EXT_POINT_INVALID_ERROR,\n PLUGIN_EXT_POINT_MISSING_ERROR,\n PLUGIN_INVOCATION_ERROR,\n PLUGIN_NAME_MISSING_ERROR,\n PLUGIN_NOT_FOUND_ERROR,\n} from '../../constants/logMessages';\n\n// TODO: create chained invoke to take the output frm first plugin and pass\n// to next or return the value if it is the last one instead of an array per\n// plugin that is the normal invoke\n// TODO: add invoke method for extension point that we know only one plugin can be used. add invokeMultiple and invokeSingle methods\nclass PluginEngine implements IPluginEngine {\n plugins: ExtensionPlugin[] = [];\n byName: Record = {};\n cache: Record = {};\n config: PluginEngineConfig = { throws: true };\n logger: ILogger;\n\n constructor(logger: ILogger, options: PluginEngineConfig = {}) {\n this.config = {\n throws: true,\n ...options,\n };\n\n this.logger = logger;\n }\n\n register(plugin: ExtensionPlugin, state?: Record) {\n if (!plugin.name) {\n const errorMessage = PLUGIN_NAME_MISSING_ERROR(PLUGIN_ENGINE);\n if (this.config.throws) {\n throw new Error(errorMessage);\n } else {\n this.logger.error(errorMessage, plugin);\n return;\n }\n }\n\n if (this.byName[plugin.name]) {\n const errorMessage = PLUGIN_ALREADY_EXISTS_ERROR(PLUGIN_ENGINE, plugin.name);\n if (this.config.throws) {\n throw new Error(errorMessage);\n } else {\n this.logger.error(errorMessage);\n return;\n }\n }\n\n this.cache = {};\n this.plugins = this.plugins.slice();\n let pos = this.plugins.length;\n\n this.plugins.forEach((pluginItem: ExtensionPlugin, index: number) => {\n if (pluginItem.deps?.includes(plugin.name)) {\n pos = Math.min(pos, index);\n }\n });\n\n this.plugins.splice(pos, 0, plugin);\n\n this.byName[plugin.name] = plugin;\n\n if (isFunction(plugin.initialize)) {\n plugin.initialize(state);\n }\n }\n\n unregister(name: string) {\n const plugin = this.byName[name];\n\n if (!plugin) {\n const errorMessage = PLUGIN_NOT_FOUND_ERROR(PLUGIN_ENGINE, name);\n if (this.config.throws) {\n throw new Error(errorMessage);\n } else {\n this.logger.error(errorMessage);\n return;\n }\n }\n\n const index = this.plugins.indexOf(plugin as ExtensionPlugin);\n\n if (index === -1) {\n const errorMessage = PLUGIN_ENGINE_BUG_ERROR(PLUGIN_ENGINE, name);\n if (this.config.throws) {\n throw new Error(errorMessage);\n } else {\n this.logger.error(errorMessage);\n return;\n }\n }\n\n this.cache = {};\n delete this.byName[name];\n this.plugins = this.plugins.slice();\n this.plugins.splice(index, 1);\n }\n\n getPlugin(name: string): ExtensionPlugin | undefined {\n return this.byName[name];\n }\n\n getPlugins(extPoint?: string): ExtensionPlugin[] {\n const lifeCycleName = extPoint ?? '.';\n\n if (!this.cache[lifeCycleName]) {\n this.cache[lifeCycleName] = this.plugins.filter(plugin => {\n if (plugin.deps?.some(dependency => !this.byName[dependency])) {\n // If deps not exist, then not load it.\n const notExistDeps = plugin.deps.filter(dependency => !this.byName[dependency]);\n this.logger.error(PLUGIN_DEPS_ERROR(PLUGIN_ENGINE, plugin.name, notExistDeps));\n return false;\n }\n return lifeCycleName === '.' ? true : hasValueByPath(plugin, lifeCycleName);\n });\n }\n\n return this.cache[lifeCycleName] as ExtensionPlugin[];\n }\n\n // This method allows to process this.plugins so that it could\n // do some unified pre-process before application starts.\n processRawPlugins(callback: (plugins: ExtensionPlugin[]) => any) {\n callback(this.plugins);\n this.cache = {};\n }\n\n invoke(extPoint?: string, allowMultiple = true, ...args: any[]): Nullable[] {\n let extensionPointName = extPoint;\n\n if (!extensionPointName) {\n throw new Error(PLUGIN_EXT_POINT_MISSING_ERROR);\n }\n\n const noCall = extensionPointName.startsWith('!');\n const throws = this.config.throws ?? extensionPointName.endsWith('!');\n\n // eslint-disable-next-line unicorn/better-regex\n extensionPointName = extensionPointName.replace(/(^!|!$)/g, '');\n\n if (!extensionPointName) {\n throw new Error(PLUGIN_EXT_POINT_INVALID_ERROR);\n }\n\n const extensionPointNameParts = extensionPointName.split('.');\n extensionPointNameParts.pop();\n\n const pluginMethodPath = extensionPointNameParts.join('.');\n const pluginsToInvoke = allowMultiple\n ? this.getPlugins(extensionPointName)\n : [this.getPlugins(extensionPointName)[0] as ExtensionPlugin];\n\n return pluginsToInvoke.map(plugin => {\n const method = getValueByPath(plugin, extensionPointName as string);\n\n if (!isFunction(method) || noCall) {\n return method;\n }\n\n try {\n return method.apply(getValueByPath(plugin, pluginMethodPath), args);\n } catch (err) {\n // When a plugin failed, doesn't break the app\n if (throws) {\n throw err;\n } else {\n this.logger.error(\n PLUGIN_INVOCATION_ERROR(PLUGIN_ENGINE, extensionPointName, plugin.name),\n err,\n );\n }\n }\n\n return null;\n });\n }\n\n invokeSingle(extPoint?: string, ...args: any[]): Nullable {\n return this.invoke(extPoint, false, ...args)[0];\n }\n\n invokeMultiple(extPoint?: string, ...args: any[]): Nullable[] {\n return this.invoke(extPoint, true, ...args);\n }\n}\n\nconst defaultPluginEngine = new PluginEngine(defaultLogger, { throws: true });\n\nexport { PluginEngine, defaultPluginEngine };\n","import type { Destination } from '../types/Destination';\n\n/**\n * A function to filter and return non cloud mode destinations\n * @param destination\n *\n * @returns boolean\n */\nconst isNonCloudDestination = (destination: Destination): boolean =>\n Boolean(\n destination.config.connectionMode !== 'cloud' ||\n destination.config.useNativeSDKToSend === true || // this is the older flag for hybrid mode destinations\n destination.config.useNativeSDK === true,\n );\n\nconst isHybridModeDestination = (destination: Destination): boolean =>\n Boolean(\n destination.config.connectionMode === 'hybrid' ||\n destination.config.useNativeSDKToSend === true,\n );\n\n/**\n * A function to filter and return non cloud mode destinations\n * @param destinations\n *\n * @returns destinations\n */\nconst getNonCloudDestinations = (destinations: Destination[]): Destination[] | [] =>\n destinations.filter(isNonCloudDestination);\n\nexport { isNonCloudDestination, getNonCloudDestinations, isHybridModeDestination };\n","import type { PluginName } from '@rudderstack/analytics-js-common/types/PluginsManager';\n\n/**\n * List of plugin names that are loaded as direct imports in all builds\n */\nconst localPluginNames: PluginName[] = [];\n\n/**\n * List of plugin names that are loaded as dynamic imports in modern builds\n */\nconst pluginNamesList: PluginName[] = [\n 'BeaconQueue',\n 'CustomConsentManager',\n 'DeviceModeDestinations',\n 'DeviceModeTransformation',\n 'ExternalAnonymousId',\n 'GoogleLinker',\n 'IubendaConsentManager',\n 'KetchConsentManager',\n 'NativeDestinationQueue',\n 'OneTrustConsentManager',\n 'StorageEncryption',\n 'StorageEncryptionLegacy',\n 'StorageMigrator',\n 'XhrQueue',\n];\n\nconst deprecatedPluginsList = ['Bugsnag', 'ErrorReporting'];\n\nexport { localPluginNames, pluginNamesList, deprecatedPluginsList };\n","import type { ExtensionPlugin } from '@rudderstack/analytics-js-common/types/PluginEngine';\nimport type { PluginName } from '@rudderstack/analytics-js-common/types/PluginsManager';\nimport type { PluginMap } from './types';\nimport { pluginNamesList } from './pluginNames';\n\n/**\n * Get the lazy loaded dynamic import for a plugin name\n */\nconst getFederatedModuleImport = (\n pluginName: PluginName,\n): (() => Promise) | undefined => {\n switch (pluginName) {\n case 'BeaconQueue':\n return () => import('rudderAnalyticsRemotePlugins/BeaconQueue');\n case 'CustomConsentManager':\n return () => import('rudderAnalyticsRemotePlugins/CustomConsentManager');\n case 'DeviceModeDestinations':\n return () => import('rudderAnalyticsRemotePlugins/DeviceModeDestinations');\n case 'DeviceModeTransformation':\n return () => import('rudderAnalyticsRemotePlugins/DeviceModeTransformation');\n case 'ExternalAnonymousId':\n return () => import('rudderAnalyticsRemotePlugins/ExternalAnonymousId');\n case 'GoogleLinker':\n return () => import('rudderAnalyticsRemotePlugins/GoogleLinker');\n case 'KetchConsentManager':\n return () => import('rudderAnalyticsRemotePlugins/KetchConsentManager');\n case 'IubendaConsentManager':\n return () => import('rudderAnalyticsRemotePlugins/IubendaConsentManager');\n case 'NativeDestinationQueue':\n return () => import('rudderAnalyticsRemotePlugins/NativeDestinationQueue');\n case 'OneTrustConsentManager':\n return () => import('rudderAnalyticsRemotePlugins/OneTrustConsentManager');\n case 'StorageEncryption':\n return () => import('rudderAnalyticsRemotePlugins/StorageEncryption');\n case 'StorageEncryptionLegacy':\n return () => import('rudderAnalyticsRemotePlugins/StorageEncryptionLegacy');\n case 'StorageMigrator':\n return () => import('rudderAnalyticsRemotePlugins/StorageMigrator');\n case 'XhrQueue':\n return () => import('rudderAnalyticsRemotePlugins/XhrQueue');\n default:\n return undefined;\n }\n};\n\n/**\n * Map of active plugin names to their dynamic import\n */\nconst federatedModulesBuildPluginImports = (\n activePluginNames: PluginName[],\n): PluginMap> => {\n const remotePlugins = {} as PluginMap>;\n\n activePluginNames.forEach(pluginName => {\n if (pluginNamesList.includes(pluginName)) {\n const lazyLoadImport = getFederatedModuleImport(pluginName);\n if (lazyLoadImport) {\n remotePlugins[pluginName] = lazyLoadImport;\n }\n }\n });\n\n return remotePlugins;\n};\n\nexport { federatedModulesBuildPluginImports };\n","import type { ExtensionPlugin } from '@rudderstack/analytics-js-common/types/PluginEngine';\nimport type { PluginName } from '@rudderstack/analytics-js-common/types/PluginsManager';\nimport type { PluginMap } from './types';\nimport { getBundledBuildPluginImports } from './bundledBuildPluginImports';\nimport { federatedModulesBuildPluginImports } from './federatedModulesBuildPluginImports';\n\n/**\n * Map of mandatory plugin names and direct imports\n */\nconst getMandatoryPluginsMap = (): PluginMap => ({}) as PluginMap;\n\n/**\n * Map of optional plugin names and direct imports for legacy builds\n */\nconst getOptionalPluginsMap = (): PluginMap => {\n if (!__BUNDLE_ALL_PLUGINS__) {\n return {} as PluginMap;\n }\n\n return getBundledBuildPluginImports();\n};\n\n/**\n * Map of optional plugin names and dynamic imports for modern builds\n */\nconst getRemotePluginsMap = (\n activePluginNames: PluginName[],\n): PluginMap> => {\n if (__BUNDLE_ALL_PLUGINS__) {\n return {} as PluginMap>;\n }\n\n return federatedModulesBuildPluginImports?.(activePluginNames) || {};\n};\n\nconst pluginsInventory: PluginMap = {\n ...getMandatoryPluginsMap(),\n ...getOptionalPluginsMap(),\n};\n\nconst remotePluginsInventory = (\n activePluginNames: PluginName[],\n): PluginMap> => ({\n ...getRemotePluginsMap(activePluginNames),\n});\n\nexport { pluginsInventory, remotePluginsInventory, getMandatoryPluginsMap };\n","import { batch, effect } from '@preact/signals-core';\nimport type {\n ExtensionPlugin,\n IPluginEngine,\n} from '@rudderstack/analytics-js-common/types/PluginEngine';\nimport { getNonCloudDestinations } from '@rudderstack/analytics-js-common/utilities/destinations';\nimport type {\n IPluginsManager,\n PluginName,\n} from '@rudderstack/analytics-js-common/types/PluginsManager';\nimport type { IErrorHandler } from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport { PLUGINS_MANAGER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport { isDefined, isFunction } from '@rudderstack/analytics-js-common/utilities/checks';\nimport {\n DEPRECATED_PLUGIN_WARNING,\n generateMisconfiguredPluginsWarning,\n UNKNOWN_PLUGINS_WARNING,\n} from '../../constants/logMessages';\nimport { setExposedGlobal } from '../utilities/globals';\nimport { state } from '../../state';\nimport {\n ConsentManagersToPluginNameMap,\n StorageEncryptionVersionsToPluginNameMap,\n DataPlaneEventsTransportToPluginNameMap,\n} from '../configManager/constants';\nimport { deprecatedPluginsList, pluginNamesList } from './pluginNames';\nimport {\n getMandatoryPluginsMap,\n pluginsInventory,\n remotePluginsInventory,\n} from './pluginsInventory';\nimport type { PluginsGroup } from './types';\n\n// TODO: we may want to add chained plugins that pass their value to the next one\n// TODO: add retry mechanism for getting remote plugins\n// TODO: add timeout error mechanism for marking remote plugins that failed to load as failed in state\nclass PluginsManager implements IPluginsManager {\n engine: IPluginEngine;\n errorHandler: IErrorHandler;\n logger: ILogger;\n\n constructor(engine: IPluginEngine, errorHandler: IErrorHandler, logger: ILogger) {\n this.engine = engine;\n\n this.errorHandler = errorHandler;\n this.logger = logger;\n this.onError = this.onError.bind(this);\n }\n\n /**\n * Orchestrate the plugin loading and registering\n */\n init() {\n state.lifecycle.status.value = 'pluginsLoading';\n // Expose pluginsCDNPath to global object, so it can be used in the promise that determines\n // remote plugin cdn path to support proxied plugin remotes\n if (!__BUNDLE_ALL_PLUGINS__) {\n setExposedGlobal('pluginsCDNPath', state.lifecycle.pluginsCDNPath.value);\n }\n this.setActivePlugins();\n this.registerLocalPlugins();\n this.registerRemotePlugins();\n this.attachEffects();\n }\n\n /**\n * Update state based on plugin loaded status\n */\n // eslint-disable-next-line class-methods-use-this\n attachEffects() {\n effect(() => {\n const isAllPluginsReady =\n state.plugins.activePlugins.value.length === 0 ||\n state.plugins.loadedPlugins.value.length + state.plugins.failedPlugins.value.length ===\n state.plugins.totalPluginsToLoad.value;\n\n if (isAllPluginsReady) {\n batch(() => {\n state.plugins.ready.value = true;\n // TODO: decide what to do if a plugin fails to load for any reason.\n // Should we stop here or should we progress?\n state.lifecycle.status.value = 'pluginsReady';\n });\n }\n });\n }\n\n /**\n * Determine the list of plugins that should be loaded based on sourceConfig & load options\n */\n // eslint-disable-next-line class-methods-use-this\n getPluginsToLoadBasedOnConfig(): PluginName[] {\n // This contains the default plugins if load option has been omitted by user\n let pluginsToLoadFromConfig = state.plugins.pluginsToLoadFromConfig.value as PluginName[];\n\n if (!pluginsToLoadFromConfig) {\n return [];\n }\n\n // Filter deprecated plugins\n pluginsToLoadFromConfig = pluginsToLoadFromConfig.filter(pluginName => {\n if (deprecatedPluginsList.includes(pluginName)) {\n this.logger.warn(DEPRECATED_PLUGIN_WARNING(PLUGINS_MANAGER, pluginName));\n return false;\n }\n return true;\n });\n\n const pluginGroupsToProcess: PluginsGroup[] = [\n {\n configurationStatus: () => isDefined(state.dataPlaneEvents.eventsQueuePluginName.value),\n configurationStatusStr: 'Data plane events delivery is enabled',\n activePluginName: state.dataPlaneEvents.eventsQueuePluginName.value,\n supportedPlugins: Object.values(DataPlaneEventsTransportToPluginNameMap),\n shouldAddMissingPlugins: true,\n },\n {\n configurationStatus: () =>\n getNonCloudDestinations(state.nativeDestinations.configuredDestinations.value).length > 0,\n configurationStatusStr: 'Device mode destinations are connected to the source',\n supportedPlugins: ['DeviceModeDestinations', 'NativeDestinationQueue'] as PluginName[],\n },\n {\n configurationStatus: () =>\n getNonCloudDestinations(state.nativeDestinations.configuredDestinations.value).some(\n destination => destination.shouldApplyDeviceModeTransformation,\n ),\n configurationStatusStr:\n 'Device mode transformations are enabled for at least one destination',\n supportedPlugins: ['DeviceModeTransformation'] as PluginName[],\n },\n {\n configurationStatus: () => isDefined(state.consents.activeConsentManagerPluginName.value),\n configurationStatusStr: 'Consent management is enabled',\n activePluginName: state.consents.activeConsentManagerPluginName.value,\n supportedPlugins: Object.values(ConsentManagersToPluginNameMap),\n },\n {\n configurationStatus: () => isDefined(state.storage.encryptionPluginName.value),\n configurationStatusStr: 'Storage encryption is enabled',\n activePluginName: state.storage.encryptionPluginName.value,\n supportedPlugins: Object.values(StorageEncryptionVersionsToPluginNameMap),\n },\n {\n configurationStatus: () => state.storage.migrate.value,\n configurationStatusStr: 'Storage migration is enabled',\n supportedPlugins: ['StorageMigrator'],\n },\n ];\n\n const addMissingPlugins = false;\n pluginGroupsToProcess.forEach(group => {\n if (group.configurationStatus()) {\n pluginsToLoadFromConfig = pluginsToLoadFromConfig.filter(\n group.activePluginName\n ? pluginName =>\n !(\n pluginName !== group.activePluginName &&\n group.supportedPlugins.includes(pluginName)\n )\n : pluginName => isDefined(pluginName), // pass through\n );\n\n this.addMissingPlugins(group, addMissingPlugins, pluginsToLoadFromConfig);\n } else {\n pluginsToLoadFromConfig = pluginsToLoadFromConfig.filter(\n group.basePlugins !== undefined\n ? pluginName =>\n !(\n (group.basePlugins as PluginName[]).includes(pluginName) ||\n group.supportedPlugins.includes(pluginName)\n )\n : pluginName => !group.supportedPlugins.includes(pluginName),\n );\n }\n });\n\n return [...(Object.keys(getMandatoryPluginsMap()) as PluginName[]), ...pluginsToLoadFromConfig];\n }\n\n private addMissingPlugins(\n group: PluginsGroup,\n addMissingPlugins: boolean,\n pluginsToLoadFromConfig: PluginName[],\n ) {\n const shouldAddMissingPlugins = group.shouldAddMissingPlugins || addMissingPlugins;\n let pluginsToConfigure;\n if (group.activePluginName) {\n pluginsToConfigure = [...(group.basePlugins || []), group.activePluginName] as PluginName[];\n } else {\n pluginsToConfigure = [...group.supportedPlugins];\n }\n\n const missingPlugins = pluginsToConfigure.filter(\n pluginName => !pluginsToLoadFromConfig.includes(pluginName),\n );\n if (missingPlugins.length > 0) {\n if (shouldAddMissingPlugins) {\n pluginsToLoadFromConfig.push(...missingPlugins);\n }\n\n this.logger.warn(\n generateMisconfiguredPluginsWarning(\n PLUGINS_MANAGER,\n group.configurationStatusStr,\n missingPlugins,\n shouldAddMissingPlugins,\n ),\n );\n }\n }\n\n /**\n * Determine the list of plugins that should be activated\n */\n setActivePlugins() {\n const pluginsToLoad = this.getPluginsToLoadBasedOnConfig();\n // Merging available mandatory and optional plugin name list\n const availablePlugins = [...Object.keys(pluginsInventory), ...pluginNamesList];\n const activePlugins: PluginName[] = [];\n const failedPlugins: string[] = [];\n\n pluginsToLoad.forEach(pluginName => {\n if (availablePlugins.includes(pluginName)) {\n activePlugins.push(pluginName);\n } else {\n failedPlugins.push(pluginName);\n }\n });\n\n if (failedPlugins.length > 0) {\n this.logger.warn(UNKNOWN_PLUGINS_WARNING(PLUGINS_MANAGER, failedPlugins));\n }\n\n batch(() => {\n state.plugins.totalPluginsToLoad.value = pluginsToLoad.length;\n state.plugins.activePlugins.value = activePlugins;\n state.plugins.failedPlugins.value = failedPlugins;\n });\n }\n\n /**\n * Register plugins that are direct imports to PluginEngine\n */\n registerLocalPlugins() {\n Object.values(pluginsInventory).forEach(localPlugin => {\n if (\n isFunction(localPlugin) &&\n state.plugins.activePlugins.value.includes(localPlugin().name)\n ) {\n this.register([localPlugin()]);\n }\n });\n }\n\n /**\n * Register plugins that are dynamic imports to PluginEngine\n */\n registerRemotePlugins() {\n const remotePluginsList = remotePluginsInventory(\n state.plugins.activePlugins.value as PluginName[],\n );\n\n Promise.all(\n Object.keys(remotePluginsList).map(async remotePluginKey => {\n await remotePluginsList[remotePluginKey as PluginName]()\n .then((remotePluginModule: any) => this.register([remotePluginModule.default()]))\n .catch(err => {\n // TODO: add retry here if dynamic import fails\n state.plugins.failedPlugins.value = [\n ...state.plugins.failedPlugins.value,\n remotePluginKey,\n ];\n this.onError(err, remotePluginKey);\n });\n }),\n ).catch(err => {\n this.onError(err);\n });\n }\n\n /**\n * Extension point invoke that allows multiple plugins to be registered to it with error handling\n */\n invokeMultiple(extPoint?: string, ...args: any[]): Nullable[] {\n try {\n return this.engine.invokeMultiple(extPoint, ...args);\n } catch (e) {\n this.onError(e, extPoint);\n return [];\n }\n }\n\n /**\n * Extension point invoke that allows a single plugin to be registered to it with error handling\n */\n invokeSingle(extPoint?: string, ...args: any[]): Nullable {\n try {\n return this.engine.invokeSingle(extPoint, ...args);\n } catch (e) {\n this.onError(e, extPoint);\n return null;\n }\n }\n\n /**\n * Plugin engine register with error handling\n */\n register(plugins: ExtensionPlugin[]) {\n plugins.forEach(plugin => {\n try {\n this.engine.register(plugin, state);\n } catch (e) {\n state.plugins.failedPlugins.value = [...state.plugins.failedPlugins.value, plugin.name];\n this.onError(e);\n }\n });\n }\n\n // TODO: Implement reset API instead\n unregisterLocalPlugins() {\n Object.values(pluginsInventory).forEach(localPlugin => {\n try {\n this.engine.unregister(localPlugin().name);\n } catch (e) {\n this.onError(e);\n }\n });\n }\n\n /**\n * Handle errors\n */\n onError(error: unknown, customMessage?: string): void {\n this.errorHandler.onError(error, PLUGINS_MANAGER, customMessage);\n }\n}\n\nexport { PluginsManager };\n","import type { StorageType } from '../types/Storage';\n\nconst COOKIE_STORAGE: StorageType = 'cookieStorage';\nconst LOCAL_STORAGE: StorageType = 'localStorage';\nconst SESSION_STORAGE: StorageType = 'sessionStorage';\nconst MEMORY_STORAGE: StorageType = 'memoryStorage';\nconst NO_STORAGE: StorageType = 'none';\n\nexport { COOKIE_STORAGE, LOCAL_STORAGE, SESSION_STORAGE, MEMORY_STORAGE, NO_STORAGE };\n","const userIdKey = 'rl_user_id';\nconst userTraitsKey = 'rl_trait';\nconst anonymousUserIdKey = 'rl_anonymous_id';\nconst groupIdKey = 'rl_group_id';\nconst groupTraitsKey = 'rl_group_trait';\nconst pageInitialReferrerKey = 'rl_page_init_referrer';\nconst pageInitialReferringDomainKey = 'rl_page_init_referring_domain';\nconst sessionInfoKey = 'rl_session';\nconst authTokenKey = 'rl_auth_token';\n\nconst COOKIE_KEYS = {\n userId: userIdKey,\n userTraits: userTraitsKey,\n anonymousId: anonymousUserIdKey,\n groupId: groupIdKey,\n groupTraits: groupTraitsKey,\n initialReferrer: pageInitialReferrerKey,\n initialReferringDomain: pageInitialReferringDomainKey,\n sessionInfo: sessionInfoKey,\n authToken: authTokenKey,\n};\n\nconst ENCRYPTION_PREFIX_V3 = 'RS_ENC_v3_';\n\nexport {\n COOKIE_KEYS,\n ENCRYPTION_PREFIX_V3,\n userIdKey,\n userTraitsKey,\n anonymousUserIdKey,\n groupIdKey,\n groupTraitsKey,\n pageInitialReferrerKey,\n pageInitialReferringDomainKey,\n sessionInfoKey,\n authTokenKey,\n};\n","import type { UserSessionKey } from '@rudderstack/analytics-js-common/types/UserSessionStorage';\n\nconst STORAGE_TEST_COOKIE = 'test_rudder_cookie';\nconst STORAGE_TEST_LOCAL_STORAGE = 'test_rudder_ls';\nconst STORAGE_TEST_SESSION_STORAGE = 'test_rudder_ss';\nconst STORAGE_TEST_TOP_LEVEL_DOMAIN = '__tld__';\nconst STOREJS_IS_INCOGNITO = '_Is_Incognit';\n\nconst CLIENT_DATA_STORE_NAME = 'clientData';\n\nconst CLIENT_DATA_STORE_COOKIE = 'clientDataInCookie';\nconst CLIENT_DATA_STORE_LS = 'clientDataInLocalStorage';\nconst CLIENT_DATA_STORE_MEMORY = 'clientDataInMemory';\nconst CLIENT_DATA_STORE_SESSION = 'clientDataInSessionStorage';\n\nconst USER_SESSION_KEYS: UserSessionKey[] = [\n 'userId',\n 'userTraits',\n 'anonymousId',\n 'groupId',\n 'groupTraits',\n 'initialReferrer',\n 'initialReferringDomain',\n 'sessionInfo',\n 'authToken',\n];\n\nexport {\n STORAGE_TEST_COOKIE,\n STORAGE_TEST_LOCAL_STORAGE,\n STORAGE_TEST_SESSION_STORAGE,\n STORAGE_TEST_TOP_LEVEL_DOMAIN,\n STOREJS_IS_INCOGNITO,\n CLIENT_DATA_STORE_NAME,\n CLIENT_DATA_STORE_COOKIE,\n CLIENT_DATA_STORE_LS,\n CLIENT_DATA_STORE_MEMORY,\n CLIENT_DATA_STORE_SESSION,\n USER_SESSION_KEYS,\n};\n","import {\n COOKIE_STORAGE,\n LOCAL_STORAGE,\n MEMORY_STORAGE,\n SESSION_STORAGE,\n} from '@rudderstack/analytics-js-common/constants/storages';\nimport type {\n ICookieStorageOptions,\n IInMemoryStorageOptions,\n ILocalStorageOptions,\n ISessionStorageOptions,\n} from '@rudderstack/analytics-js-common/types/Store';\nimport {\n CLIENT_DATA_STORE_COOKIE,\n CLIENT_DATA_STORE_LS,\n CLIENT_DATA_STORE_MEMORY,\n CLIENT_DATA_STORE_SESSION,\n} from '../../constants/storage';\n\nexport type StoreManagerOptions = {\n cookieStorageOptions?: Partial;\n localStorageOptions?: Partial;\n inMemoryStorageOptions?: Partial;\n sessionStorageOptions?: Partial;\n};\n\nexport const storageClientDataStoreNameMap: Record = {\n [COOKIE_STORAGE]: CLIENT_DATA_STORE_COOKIE,\n [LOCAL_STORAGE]: CLIENT_DATA_STORE_LS,\n [MEMORY_STORAGE]: CLIENT_DATA_STORE_MEMORY,\n [SESSION_STORAGE]: CLIENT_DATA_STORE_SESSION,\n};\n","import { isNull } from '../utilities/checks';\nimport type { Nullable } from '../types/Nullable';\nimport type { CookieOptions } from '../types/Storage';\nimport type { ILogger } from '../types/Logger';\nimport { COOKIE_DATA_ENCODING_ERROR } from '../constants/logMessages';\n\n/**\n * Encode.\n */\nconst encode = (value: any, logger?: ILogger): string | undefined => {\n try {\n return encodeURIComponent(value);\n } catch (err) {\n logger?.error(COOKIE_DATA_ENCODING_ERROR, err);\n return undefined;\n }\n};\n\n/**\n * Decode\n */\nconst decode = (value: string): string | undefined => {\n try {\n return decodeURIComponent(value);\n } catch (err) {\n // Do nothing as non-RS SDK cookies may not be URI encoded\n return undefined;\n }\n};\n\n/**\n * Parse cookie `str`\n */\nconst parse = (str: string): Record => {\n const obj: Record = {};\n const pairs = str.split(/\\s*;\\s*/);\n let pair;\n\n if (!pairs[0]) {\n return obj;\n }\n\n // TODO: Decode only the cookies that are needed by the SDK\n pairs.forEach(pairItem => {\n pair = pairItem.split('=');\n const keyName = pair[0] ? decode(pair[0]) : undefined;\n\n if (keyName) {\n obj[keyName] = pair[1] ? decode(pair[1]) : undefined;\n }\n });\n\n return obj;\n};\n\n/**\n * Set cookie `name` to `value`\n */\nconst set = (\n name?: string,\n value?: Nullable,\n optionsConfig?: CookieOptions,\n logger?: ILogger,\n) => {\n const options: CookieOptions = { ...(optionsConfig || {}) };\n let cookieString = `${encode(name, logger)}=${encode(value, logger)}`;\n\n if (isNull(value)) {\n options.maxage = -1;\n }\n\n if (options.maxage) {\n options.expires = new Date(+new Date() + options.maxage);\n }\n\n if (options.path) {\n cookieString += `; path=${options.path}`;\n }\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.expires) {\n cookieString += `; expires=${options.expires.toUTCString()}`;\n }\n\n if (options.samesite) {\n cookieString += `; samesite=${options.samesite}`;\n }\n\n if (options.secure) {\n cookieString += `; secure`;\n }\n\n globalThis.document.cookie = cookieString;\n};\n\n/**\n * Return all cookies\n */\nconst all = (): Record => {\n const cookieStringValue = globalThis.document.cookie;\n return parse(cookieStringValue);\n};\n\n/**\n * Get cookie `name`\n */\n\nconst get = (name: string): string => (all() as any)[name];\n\n/**\n * Set or get cookie `name` with `value` and `options` object\n */\n// eslint-disable-next-line func-names\nconst cookie = function (\n name?: string,\n value?: Nullable,\n options?: CookieOptions,\n logger?: ILogger,\n): any {\n switch (arguments.length) {\n case 4:\n case 3:\n case 2:\n return set(name, value, options, logger);\n case 1:\n if (name) {\n return get(name);\n }\n return all();\n default:\n return all();\n }\n};\n\nexport { cookie };\n","import {\n isUndefined,\n isNull,\n isNullOrUndefined,\n isFunction,\n} from '@rudderstack/analytics-js-common/utilities/checks';\n\nconst isBrowser = (): boolean => !isUndefined(globalThis) && !isUndefined(globalThis.document);\n\nconst isNode = (): boolean =>\n !isUndefined(process) && !isNull(process.versions) && !isNull(process.versions.node);\n\nconst hasCrypto = (): boolean =>\n !isNullOrUndefined(globalThis.crypto) && isFunction(globalThis.crypto.getRandomValues);\n\n// eslint-disable-next-line compat/compat -- We are checking for the existence of navigator.userAgentData\nconst hasUAClientHints = (): boolean => !isNullOrUndefined(globalThis.navigator.userAgentData);\n\nconst hasBeacon = (): boolean =>\n !isNullOrUndefined(globalThis.navigator.sendBeacon) &&\n isFunction(globalThis.navigator.sendBeacon);\n\nconst isIE11 = (): boolean => Boolean(globalThis.navigator.userAgent.match(/Trident.*rv:11\\./));\n\nexport { isBrowser, isNode, hasCrypto, hasUAClientHints, hasBeacon, isIE11 };\n","import { isFunction } from '@rudderstack/analytics-js-common/utilities/checks';\n\nconst isDatasetAvailable = (): boolean => {\n const testElement = globalThis.document.createElement('div');\n testElement.setAttribute('data-a-b', 'c');\n return testElement.dataset ? testElement.dataset.aB === 'c' : false;\n};\n\nconst legacyJSEngineRequiredPolyfills: Record boolean> = {\n // Ideally, we should separate the checks for URL and URLSearchParams but\n // the polyfill service serves them under the same feature name, \"URL\".\n URL: () => !isFunction(globalThis.URL) || !isFunction(globalThis.URLSearchParams),\n Promise: () => !isFunction(globalThis.Promise),\n 'Number.isNaN': () => !isFunction(globalThis.Number.isNaN),\n 'Number.isInteger': () => !isFunction(globalThis.Number.isInteger),\n 'Array.from': () => !isFunction(globalThis.Array.from),\n 'Array.prototype.find': () => !isFunction(globalThis.Array.prototype.find),\n 'Array.prototype.includes': () => !isFunction(globalThis.Array.prototype.includes),\n 'String.prototype.endsWith': () => !isFunction(globalThis.String.prototype.endsWith),\n 'String.prototype.startsWith': () => !isFunction(globalThis.String.prototype.startsWith),\n 'String.prototype.includes': () => !isFunction(globalThis.String.prototype.includes),\n 'String.prototype.replaceAll': () => !isFunction(globalThis.String.prototype.replaceAll),\n 'String.fromCodePoint': () => !isFunction(globalThis.String.fromCodePoint),\n 'Object.entries': () => !isFunction(globalThis.Object.entries),\n 'Object.values': () => !isFunction(globalThis.Object.values),\n 'Object.assign': () => !isFunction(globalThis.Object.assign),\n 'Object.fromEntries': () => !isFunction(globalThis.Object.fromEntries),\n 'Element.prototype.dataset': () => !isDatasetAvailable(),\n // Ideally, we should separate the checks for TextEncoder and TextDecoder but\n // the polyfill service serves them under the same feature name, \"TextEncoder\".\n TextEncoder: () => !isFunction(globalThis.TextEncoder) || !isFunction(globalThis.TextDecoder),\n requestAnimationFrame: () =>\n !isFunction(globalThis.requestAnimationFrame) || !isFunction(globalThis.cancelAnimationFrame),\n CustomEvent: () => !isFunction(globalThis.CustomEvent),\n 'navigator.sendBeacon': () => !isFunction(globalThis.navigator.sendBeacon),\n // Note, the polyfill service serves both ArrayBuffer and Uint8Array under the same feature name, \"ArrayBuffer\".\n ArrayBuffer: () => !isFunction(globalThis.Uint8Array),\n Set: () => !isFunction(globalThis.Set),\n atob: () => !isFunction(globalThis.atob),\n};\n\nconst isLegacyJSEngine = (): boolean => {\n const requiredCapabilitiesList = Object.keys(legacyJSEngineRequiredPolyfills);\n let needsPolyfill = false;\n\n /* eslint-disable-next-line unicorn/no-for-loop */\n for (let i = 0; i < requiredCapabilitiesList.length; i++) {\n const isCapabilityMissing =\n legacyJSEngineRequiredPolyfills[requiredCapabilitiesList[i] as string];\n\n if (isFunction(isCapabilityMissing) && isCapabilityMissing()) {\n needsPolyfill = true;\n break;\n }\n }\n\n return needsPolyfill;\n};\n\nexport { isDatasetAvailable, legacyJSEngineRequiredPolyfills, isLegacyJSEngine };\n","import type { ScreenInfo } from '@rudderstack/analytics-js-common/types/EventContext';\n\nconst getScreenDetails = (): ScreenInfo => {\n let screenDetails: ScreenInfo = {\n density: 0,\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n };\n\n screenDetails = {\n width: globalThis.screen.width,\n height: globalThis.screen.height,\n density: globalThis.devicePixelRatio,\n innerWidth: globalThis.innerWidth,\n innerHeight: globalThis.innerHeight,\n };\n\n return screenDetails;\n};\n\nexport { getScreenDetails };\n","import { CAPABILITIES_MANAGER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport type { IStorage } from '@rudderstack/analytics-js-common/types/Store';\nimport type { StorageType } from '@rudderstack/analytics-js-common/types/Storage';\nimport {\n COOKIE_STORAGE,\n LOCAL_STORAGE,\n MEMORY_STORAGE,\n SESSION_STORAGE,\n} from '@rudderstack/analytics-js-common/constants/storages';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport {\n STORAGE_TEST_COOKIE,\n STORAGE_TEST_LOCAL_STORAGE,\n STORAGE_TEST_SESSION_STORAGE,\n} from '../../../constants/storage';\nimport { STORAGE_UNAVAILABILITY_ERROR_PREFIX } from '../../../constants/logMessages';\n\nconst isStorageQuotaExceeded = (e: DOMException | any): boolean => {\n const matchingNames = ['QuotaExceededError', 'NS_ERROR_DOM_QUOTA_REACHED']; // [everything except Firefox, Firefox]\n const matchingCodes = [22, 1014]; // [everything except Firefox, Firefox]\n const isQuotaExceededError = matchingNames.includes(e.name) || matchingCodes.includes(e.code);\n\n return e instanceof DOMException && isQuotaExceededError;\n};\n\n// TODO: also check for SecurityErrors\n// https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage#exceptions\nconst isStorageAvailable = (\n type: StorageType = LOCAL_STORAGE,\n storageInstance?: IStorage,\n logger?: ILogger,\n) => {\n let storage;\n let testData;\n\n const msgPrefix = STORAGE_UNAVAILABILITY_ERROR_PREFIX(CAPABILITIES_MANAGER, type);\n let reason = 'unavailable';\n let isAccessible = true;\n let errObj;\n\n try {\n switch (type) {\n case MEMORY_STORAGE:\n return true;\n case COOKIE_STORAGE:\n storage = storageInstance;\n testData = STORAGE_TEST_COOKIE;\n break;\n case LOCAL_STORAGE:\n storage = storageInstance ?? globalThis.localStorage;\n testData = STORAGE_TEST_LOCAL_STORAGE; // was STORAGE_TEST_LOCAL_STORAGE in ours and generateUUID() in segment retry one\n break;\n case SESSION_STORAGE:\n storage = storageInstance ?? globalThis.sessionStorage;\n testData = STORAGE_TEST_SESSION_STORAGE;\n break;\n default:\n return false;\n }\n\n if (storage) {\n storage.setItem(testData, 'true');\n if (storage.getItem(testData)) {\n storage.removeItem(testData);\n return true;\n }\n }\n\n isAccessible = false;\n } catch (err) {\n isAccessible = false;\n errObj = err;\n if (isStorageQuotaExceeded(err)) {\n reason = 'full';\n }\n }\n\n if (!isAccessible) {\n logger?.warn(`${msgPrefix}${reason}.`, errObj);\n }\n\n // if we've have reached here, it means the storage is not available\n return false;\n};\n\nexport { isStorageQuotaExceeded, isStorageAvailable };\n","import { cookie } from '@rudderstack/analytics-js-common/component-cookie';\nimport { STORAGE_TEST_TOP_LEVEL_DOMAIN } from '../../../constants/storage';\n\nconst legacyGetHostname = (href: string): string => {\n const l = document.createElement('a');\n l.href = href;\n return l.hostname;\n};\n\n/**\n * Levels returns all levels of the given url\n *\n * The method returns an empty array when the hostname is an ip.\n */\nconst levelsFunc = (url: string): string[] => {\n // This is called before the polyfills load thus new URL cannot be used\n const host =\n typeof globalThis.URL !== 'function' ? legacyGetHostname(url) : new URL(url).hostname;\n const parts = host?.split('.') ?? [];\n const last = parts[parts.length - 1];\n const levels: string[] = [];\n\n // Ip address.\n if (parts.length === 4 && last && last === parseInt(last, 10).toString()) {\n return levels;\n }\n\n // Localhost.\n if (parts.length <= 1) {\n // Fix to support localhost\n if (parts[0] && parts[0].indexOf('localhost') !== -1) {\n return ['localhost'];\n }\n return levels;\n }\n\n // Create levels.\n for (let i = parts.length - 2; i >= 0; i -= 1) {\n levels.push(parts.slice(i).join('.'));\n }\n\n return levels;\n};\n\n/**\n * Get the top domain.\n *\n * The function constructs the levels of domain and attempts to set a global\n * cookie on each one when it succeeds it returns the top level domain.\n *\n * The method returns an empty string when the hostname is an ip.\n */\nconst domain = (url: string): string => {\n const levels = levelsFunc(url);\n\n // Lookup the real top level one.\n // eslint-disable-next-line unicorn/no-for-loop\n for (let i = 0; i < levels.length; i += 1) {\n const domain = levels[i] as string;\n const cname = STORAGE_TEST_TOP_LEVEL_DOMAIN;\n const opts = {\n domain: `${domain.indexOf('localhost') !== -1 ? '' : '.'}${domain}`,\n };\n\n // Set cookie on domain\n cookie(cname, 1, opts);\n\n // If successful\n if (cookie(cname)) {\n // Remove cookie from domain\n cookie(cname, null, opts);\n return domain;\n }\n }\n\n return '';\n};\n\n/*\n * Exports.\n */\n\nexport { domain };\n","import type {\n ICookieStorageOptions,\n IInMemoryStorageOptions,\n ILocalStorageOptions,\n ISessionStorageOptions,\n} from '@rudderstack/analytics-js-common/types/Store';\nimport { DEFAULT_COOKIE_MAX_AGE_MS } from '../../../constants/timeouts';\nimport { domain } from '../top-domain';\n\nconst getDefaultCookieOptions = (): ICookieStorageOptions => {\n const topDomain = `.${domain(globalThis.location.href)}`;\n\n return {\n maxage: DEFAULT_COOKIE_MAX_AGE_MS,\n path: '/',\n domain: !topDomain || topDomain === '.' ? undefined : topDomain,\n samesite: 'Lax',\n enabled: true,\n };\n};\n\nconst getDefaultLocalStorageOptions = (): ILocalStorageOptions => ({\n enabled: true,\n});\n\nconst getDefaultSessionStorageOptions = (): ISessionStorageOptions => ({\n enabled: true,\n});\n\nconst getDefaultInMemoryStorageOptions = (): IInMemoryStorageOptions => ({\n enabled: true,\n});\n\nexport {\n getDefaultCookieOptions,\n getDefaultLocalStorageOptions,\n getDefaultInMemoryStorageOptions,\n getDefaultSessionStorageOptions,\n};\n","import { isUndefined } from '@rudderstack/analytics-js-common/utilities/checks';\nimport type { ICookieStorageOptions, IStorage } from '@rudderstack/analytics-js-common/types/Store';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport { COOKIE_STORAGE } from '@rudderstack/analytics-js-common/constants/storages';\nimport { mergeDeepRight } from '@rudderstack/analytics-js-common/utilities/object';\nimport { cookie } from '@rudderstack/analytics-js-common/component-cookie';\nimport { isStorageAvailable } from '../../../components/capabilitiesManager/detection';\nimport { getDefaultCookieOptions } from './defaultOptions';\n\n/**\n * A storage utility to persist values in cookies via Storage interface\n */\nclass CookieStorage implements IStorage {\n static globalSingleton: Nullable = null;\n logger?: ILogger;\n options?: ICookieStorageOptions;\n isSupportAvailable = true;\n isEnabled = true;\n length = 0;\n\n constructor(options: Partial = {}, logger?: ILogger) {\n if (CookieStorage.globalSingleton) {\n // eslint-disable-next-line no-constructor-return\n return CookieStorage.globalSingleton;\n }\n\n this.options = getDefaultCookieOptions();\n this.logger = logger;\n this.configure(options);\n\n CookieStorage.globalSingleton = this;\n }\n\n configure(options: Partial): ICookieStorageOptions {\n this.options = mergeDeepRight(this.options ?? {}, options);\n if (options.sameDomainCookiesOnly) {\n delete this.options.domain;\n }\n this.isSupportAvailable = isStorageAvailable(COOKIE_STORAGE, this);\n this.isEnabled = Boolean(this.options.enabled && this.isSupportAvailable);\n return this.options;\n }\n\n setItem(key: string, value: Nullable): boolean {\n cookie(key, value, this.options, this.logger);\n this.length = Object.keys(cookie()).length;\n return true;\n }\n\n // eslint-disable-next-line class-methods-use-this\n getItem(key: string): Nullable {\n const value = cookie(key);\n return isUndefined(value) ? null : value;\n }\n\n removeItem(key: string): boolean {\n const result = this.setItem(key, null);\n this.length = Object.keys(cookie()).length;\n return result;\n }\n\n // eslint-disable-next-line class-methods-use-this\n clear() {\n // Not implemented\n // getting a list of all cookie storage keys and remove all values\n // sounds risky to do as it will take on all top domain cookies\n // better to explicitly clear specific ones if needed\n }\n\n key(index: number): Nullable {\n const curKeys = this.keys();\n return curKeys[index] ?? null;\n }\n\n // eslint-disable-next-line class-methods-use-this\n keys(): string[] {\n return Object.keys(cookie());\n }\n}\n\nexport { CookieStorage };\n","import type {\n IInMemoryStorageOptions,\n IStorage,\n} from '@rudderstack/analytics-js-common/types/Store';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport { mergeDeepRight } from '@rudderstack/analytics-js-common/utilities/object';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport { defaultLogger } from '../../Logger';\nimport { getDefaultInMemoryStorageOptions } from './defaultOptions';\n\n/**\n * A storage utility to retain values in memory via Storage interface\n */\nclass InMemoryStorage implements IStorage {\n logger?: ILogger;\n options: IInMemoryStorageOptions;\n isEnabled = true;\n length = 0;\n data: Record = {};\n\n constructor(options?: IInMemoryStorageOptions, logger?: ILogger) {\n this.options = getDefaultInMemoryStorageOptions();\n this.logger = logger;\n this.configure(options ?? {});\n }\n\n configure(options: Partial): IInMemoryStorageOptions {\n this.options = mergeDeepRight(this.options, options);\n this.isEnabled = Boolean(this.options.enabled);\n return this.options;\n }\n\n setItem(key: string, value: any): any {\n this.data[key] = value;\n this.length = Object.keys(this.data).length;\n return value;\n }\n\n getItem(key: string): any {\n if (key in this.data) {\n return this.data[key];\n }\n return null;\n }\n\n removeItem(key: string) {\n if (key in this.data) {\n delete this.data[key];\n }\n this.length = Object.keys(this.data).length;\n return null;\n }\n\n clear() {\n this.data = {};\n this.length = 0;\n }\n\n key(index: number): Nullable {\n const curKeys = this.keys();\n return curKeys[index] ?? null;\n }\n\n keys(): string[] {\n return Object.keys(this.data);\n }\n}\n\nconst defaultInMemoryStorage = new InMemoryStorage({}, defaultLogger);\n\nexport { InMemoryStorage, defaultInMemoryStorage };\n","/**!\n * storejs v2.1.0\n * Local storage localstorage package provides a simple API\n * \n * Copyright (c) 2024 kenny wang \n * https://jaywcjlove.github.io/store.js/\n * \n * Licensed under the MIT license.\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.store = factory());\n})(this, (function () { 'use strict';\n\n function isJSON(obj) {\n obj = JSON.stringify(obj);\n if (!/^\\{[\\s\\S]*\\}$/.test(obj)) {\n return false;\n }\n return true;\n }\n function stringify(val) {\n return val === undefined || typeof val === \"function\" ? val + '' : JSON.stringify(val);\n }\n function deserialize(value) {\n if (typeof value !== 'string') {\n return undefined;\n }\n try {\n return JSON.parse(value);\n } catch (e) {\n return value;\n }\n }\n function isFunction(value) {\n return {}.toString.call(value) === \"[object Function]\";\n }\n function isArray(value) {\n return Object.prototype.toString.call(value) === \"[object Array]\";\n }\n // https://github.com/jaywcjlove/store.js/pull/8\n // Error: QuotaExceededError\n function dealIncognito(storage) {\n var _KEY = '_Is_Incognit',\n _VALUE = 'yes';\n try {\n // NOTE: set default storage when not passed in\n if (!storage) {\n storage = window.localStorage;\n }\n storage.setItem(_KEY, _VALUE);\n storage.removeItem(_KEY);\n } catch (e) {\n var inMemoryStorage = {};\n inMemoryStorage._data = {};\n inMemoryStorage.setItem = function (id, val) {\n return inMemoryStorage._data[id] = String(val);\n };\n inMemoryStorage.getItem = function (id) {\n return inMemoryStorage._data.hasOwnProperty(id) ? inMemoryStorage._data[id] : undefined;\n };\n inMemoryStorage.removeItem = function (id) {\n return delete inMemoryStorage._data[id];\n };\n inMemoryStorage.clear = function () {\n return inMemoryStorage._data = {};\n };\n storage = inMemoryStorage;\n } finally {\n if (storage.getItem(_KEY) === _VALUE) storage.removeItem(_KEY);\n }\n return storage;\n }\n\n // deal QuotaExceededError if user use incognito mode in browser\n var storage = dealIncognito();\n function Store() {\n if (!(this instanceof Store)) {\n return new Store();\n }\n }\n Store.prototype = {\n set: function set(key, val) {\n if (key && !isJSON(key)) {\n storage.setItem(key, stringify(val));\n } else if (isJSON(key)) {\n for (var a in key) this.set(a, key[a]);\n }\n return this;\n },\n get: function get(key) {\n // Return all entries if no key\n if (key === undefined) {\n var ret = {};\n this.forEach(function (key, val) {\n return ret[key] = val;\n });\n return ret;\n }\n if (key.charAt(0) === '?') {\n return this.has(key.substr(1));\n }\n var args = arguments;\n if (args.length > 1) {\n var dt = {};\n for (var i = 0, len = args.length; i < len; i++) {\n var value = deserialize(storage.getItem(args[i]));\n if (this.has(args[i])) {\n dt[args[i]] = value;\n }\n }\n return dt;\n }\n return deserialize(storage.getItem(key));\n },\n clear: function clear() {\n storage.clear();\n return this;\n },\n remove: function remove(key) {\n var val = this.get(key);\n storage.removeItem(key);\n return val;\n },\n has: function has(key) {\n return {}.hasOwnProperty.call(this.get(), key);\n },\n keys: function keys() {\n var d = [];\n this.forEach(function (k) {\n d.push(k);\n });\n return d;\n },\n forEach: function forEach(callback) {\n for (var i = 0, len = storage.length; i < len; i++) {\n var key = storage.key(i);\n callback(key, this.get(key));\n }\n return this;\n },\n search: function search(str) {\n var arr = this.keys(),\n dt = {};\n for (var i = 0, len = arr.length; i < len; i++) {\n if (arr[i].indexOf(str) > -1) dt[arr[i]] = this.get(arr[i]);\n }\n return dt;\n },\n len: function len() {\n return storage.length;\n }\n };\n var _Store = null;\n function store(key, data) {\n var argm = arguments;\n var dt = null;\n if (!_Store) _Store = Store();\n if (argm.length === 0) return _Store.get();\n if (argm.length === 1) {\n if (typeof key === \"string\") return _Store.get(key);\n if (isJSON(key)) return _Store.set(key);\n }\n if (argm.length === 2 && typeof key === \"string\") {\n if (!data) return _Store.remove(key);\n if (data && typeof data === \"string\") return _Store.set(key, data);\n if (data && isFunction(data)) {\n dt = null;\n dt = data(key, _Store.get(key));\n store.set(key, dt);\n }\n }\n if (argm.length === 2 && isArray(key) && isFunction(data)) {\n for (var i = 0, len = key.length; i < len; i++) {\n dt = data(key[i], _Store.get(key[i]));\n store.set(key[i], dt);\n }\n }\n return store;\n }\n for (var a in Store.prototype) store[a] = Store.prototype[a];\n\n return store;\n\n}));\n","import store from 'storejs';\nimport type { ILocalStorageOptions, IStorage } from '@rudderstack/analytics-js-common/types/Store';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport { mergeDeepRight } from '@rudderstack/analytics-js-common/utilities/object';\nimport { isUndefined } from '@rudderstack/analytics-js-common/utilities/checks';\nimport { LOCAL_STORAGE } from '@rudderstack/analytics-js-common/constants/storages';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport { isStorageAvailable } from '../../../components/capabilitiesManager/detection';\nimport { defaultLogger } from '../../Logger';\nimport { getDefaultLocalStorageOptions } from './defaultOptions';\n\n// TODO: can we remove the storejs dependency to save bundle size?\n// check if the get, set overloads and search methods are used at all\n// if we do, ensure we provide types to support overloads as per storejs docs\n// https://www.npmjs.com/package/storejs\n/**\n * A storage utility to persist values in localstorage via Storage interface\n */\nclass LocalStorage implements IStorage {\n logger?: ILogger;\n options: ILocalStorageOptions;\n isSupportAvailable = true;\n isEnabled = true;\n length = 0;\n\n constructor(options: ILocalStorageOptions = {}, logger?: ILogger) {\n this.options = getDefaultLocalStorageOptions();\n this.logger = logger;\n this.configure(options);\n }\n\n configure(options: Partial): ILocalStorageOptions {\n this.options = mergeDeepRight(this.options, options);\n this.isSupportAvailable = isStorageAvailable(LOCAL_STORAGE);\n this.isEnabled = Boolean(this.options.enabled && this.isSupportAvailable);\n return this.options;\n }\n\n setItem(key: string, value: any) {\n store.set(key, value);\n this.length = store.len();\n }\n\n // eslint-disable-next-line class-methods-use-this\n getItem(key: string): any {\n const value = store.get(key);\n return isUndefined(value) ? null : value;\n }\n\n removeItem(key: string) {\n store.remove(key);\n this.length = store.len();\n }\n\n clear() {\n store.clear();\n this.length = 0;\n }\n\n key(index: number): Nullable {\n const curKeys = this.keys();\n return curKeys[index] ?? null;\n }\n\n // eslint-disable-next-line class-methods-use-this\n keys(): string[] {\n return store.keys();\n }\n}\n\nconst defaultLocalStorage = new LocalStorage({}, defaultLogger);\n\nexport { LocalStorage, defaultLocalStorage };\n","import type {\n ISessionStorageOptions,\n IStorage,\n} from '@rudderstack/analytics-js-common/types/Store';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport { mergeDeepRight } from '@rudderstack/analytics-js-common/utilities/object';\nimport { isUndefined } from '@rudderstack/analytics-js-common/utilities/checks';\nimport { SESSION_STORAGE } from '@rudderstack/analytics-js-common/constants/storages';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport { isStorageAvailable } from '../../../components/capabilitiesManager/detection';\nimport { defaultLogger } from '../../Logger';\nimport { getDefaultSessionStorageOptions } from './defaultOptions';\n\n/**\n * A storage utility to persist values in SessionStorage via Storage interface\n */\nclass SessionStorage implements IStorage {\n logger?: ILogger;\n options: ISessionStorageOptions;\n isSupportAvailable = true;\n isEnabled = true;\n length = 0;\n store?: Storage;\n\n constructor(options: ISessionStorageOptions = {}, logger?: ILogger) {\n this.options = getDefaultSessionStorageOptions();\n this.logger = logger;\n this.configure(options);\n }\n\n configure(options: Partial): ISessionStorageOptions {\n this.options = mergeDeepRight(this.options, options);\n this.isSupportAvailable = isStorageAvailable(SESSION_STORAGE);\n // when storage is blocked by the user, even accessing the property throws an error\n if (this.isSupportAvailable) {\n this.store = globalThis.sessionStorage;\n }\n this.isEnabled = Boolean(this.options.enabled && this.isSupportAvailable);\n return this.options;\n }\n\n setItem(key: string, value: any) {\n if (!this.store) {\n return;\n }\n this.store.setItem(key, value);\n this.length = this.store.length;\n }\n\n getItem(key: string): any {\n if (!this.store) {\n return null;\n }\n const value = this.store.getItem(key);\n return isUndefined(value) ? null : value;\n }\n\n removeItem(key: string) {\n if (!this.store) {\n return;\n }\n this.store.removeItem(key);\n this.length = this.store.length;\n }\n\n clear() {\n this.store?.clear();\n this.length = 0;\n }\n\n key(index: number): Nullable {\n return this.store?.key(index) ?? null;\n }\n\n keys(): string[] {\n const keys: string[] = [];\n if (!this.store) {\n return keys;\n }\n\n for (let i = 0; i < this.store.length; i += 1) {\n const key = this.store.key(i);\n if (key !== null) {\n keys.push(key);\n }\n }\n return keys;\n }\n}\n\nconst defaultSessionStorage = new SessionStorage({}, defaultLogger);\n\nexport { SessionStorage, defaultSessionStorage };\n","import type {\n ICookieStorageOptions,\n IInMemoryStorageOptions,\n ILocalStorageOptions,\n ISessionStorageOptions,\n IStorage,\n} from '@rudderstack/analytics-js-common/types/Store';\nimport {\n COOKIE_STORAGE,\n LOCAL_STORAGE,\n MEMORY_STORAGE,\n SESSION_STORAGE,\n} from '@rudderstack/analytics-js-common/constants/storages';\nimport type { StorageType } from '@rudderstack/analytics-js-common/types/Storage';\nimport { state } from '../../../state';\nimport { defaultLogger } from '../../Logger';\nimport { CookieStorage } from './CookieStorage';\nimport { defaultInMemoryStorage } from './InMemoryStorage';\nimport { defaultLocalStorage } from './LocalStorage';\nimport { defaultSessionStorage } from './sessionStorage';\n\n/**\n * A utility to retrieve the storage singleton instance by type\n */\nconst getStorageEngine = (type?: StorageType): IStorage => {\n switch (type) {\n case LOCAL_STORAGE:\n return defaultLocalStorage;\n case SESSION_STORAGE:\n return defaultSessionStorage;\n case MEMORY_STORAGE:\n return defaultInMemoryStorage;\n case COOKIE_STORAGE:\n return new CookieStorage({}, defaultLogger);\n default:\n return defaultInMemoryStorage;\n }\n};\n\n/**\n * Configure cookie storage singleton\n */\nconst configureCookieStorageEngine = (options: Partial) => {\n const cookieStorageOptions = new CookieStorage({}, defaultLogger).configure(options);\n state.storage.cookie.value = {\n maxage: cookieStorageOptions.maxage,\n path: cookieStorageOptions.path,\n domain: cookieStorageOptions.domain,\n samesite: cookieStorageOptions.samesite,\n expires: cookieStorageOptions.expires,\n secure: cookieStorageOptions.secure,\n };\n};\n\n/**\n * Configure local storage singleton\n */\nconst configureLocalStorageEngine = (options: Partial) => {\n defaultLocalStorage.configure(options);\n};\n\n/**\n * Configure in memory storage singleton\n */\nconst configureInMemoryStorageEngine = (options: Partial) => {\n defaultInMemoryStorage.configure(options);\n};\n\n/**\n * Configure session storage singleton\n */\nconst configureSessionStorageEngine = (options: Partial) => {\n defaultSessionStorage.configure(options);\n};\n\n/**\n * Configure all storage singleton instances\n */\nconst configureStorageEngines = (\n cookieStorageOptions: Partial = {},\n localStorageOptions: Partial = {},\n inMemoryStorageOptions: Partial = {},\n sessionStorageOptions: Partial = {},\n) => {\n configureCookieStorageEngine(cookieStorageOptions);\n configureLocalStorageEngine(localStorageOptions);\n configureInMemoryStorageEngine(inMemoryStorageOptions);\n configureSessionStorageEngine(sessionStorageOptions);\n};\n\nexport {\n getStorageEngine,\n configureCookieStorageEngine,\n configureLocalStorageEngine,\n configureInMemoryStorageEngine,\n configureSessionStorageEngine,\n configureStorageEngines,\n};\n","import { trim } from '@rudderstack/analytics-js-common/utilities/string';\nimport { isNullOrUndefined, isString } from '@rudderstack/analytics-js-common/utilities/checks';\nimport { stringifyWithoutCircular } from '@rudderstack/analytics-js-common/utilities/json';\nimport type { IStorage, IStore, IStoreConfig } from '@rudderstack/analytics-js-common/types/Store';\nimport type { IErrorHandler } from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { IPluginsManager } from '@rudderstack/analytics-js-common/types/PluginsManager';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport { LOCAL_STORAGE, MEMORY_STORAGE } from '@rudderstack/analytics-js-common/constants/storages';\nimport { getMutatedError } from '@rudderstack/analytics-js-common/utilities/errors';\nimport { isStorageQuotaExceeded } from '../../components/capabilitiesManager/detection';\nimport {\n BAD_COOKIES_WARNING,\n STORAGE_QUOTA_EXCEEDED_WARNING,\n STORE_DATA_FETCH_ERROR,\n STORE_DATA_SAVE_ERROR,\n} from '../../constants/logMessages';\nimport { getStorageEngine } from './storages/storageEngine';\n\n/**\n * Store Implementation with dedicated storage\n */\nclass Store implements IStore {\n id: string;\n name: string;\n isEncrypted: boolean;\n validKeys: Record;\n engine: IStorage;\n originalEngine: IStorage;\n noKeyValidation?: boolean;\n noCompoundKey?: boolean;\n errorHandler: IErrorHandler;\n logger: ILogger;\n pluginsManager: IPluginsManager;\n\n constructor(config: IStoreConfig, engine: IStorage, pluginsManager: IPluginsManager) {\n this.id = config.id;\n this.name = config.name;\n this.isEncrypted = config.isEncrypted ?? false;\n this.validKeys = config.validKeys ?? {};\n this.engine = engine ?? getStorageEngine(LOCAL_STORAGE);\n this.noKeyValidation = Object.keys(this.validKeys).length === 0;\n this.noCompoundKey = config.noCompoundKey;\n this.originalEngine = this.engine;\n this.errorHandler = config.errorHandler;\n this.logger = config.logger;\n this.pluginsManager = pluginsManager;\n }\n\n /**\n * Ensure the key is valid and with correct format\n */\n createValidKey(key: string): string | undefined {\n const { name, id, validKeys, noKeyValidation, noCompoundKey } = this;\n\n if (noKeyValidation) {\n return noCompoundKey ? key : [name, id, key].join('.');\n }\n\n // validate and return undefined if invalid key\n let compoundKey;\n Object.values(validKeys).forEach(validKeyName => {\n if (validKeyName === key) {\n compoundKey = noCompoundKey ? key : [name, id, key].join('.');\n }\n });\n\n return compoundKey;\n }\n\n /**\n * Switch to inMemoryEngine, bringing any existing data with.\n */\n swapQueueStoreToInMemoryEngine() {\n const { name, id, validKeys, noCompoundKey } = this;\n const inMemoryStorage = getStorageEngine(MEMORY_STORAGE);\n\n // grab existing data, but only for this page's queue instance, not all\n // better to keep other queues in localstorage to be flushed later\n // than to pull them into memory and remove them from durable storage\n Object.keys(validKeys).forEach(key => {\n const value = this.get(validKeys[key] as string);\n const validKey = noCompoundKey ? key : [name, id, key].join('.');\n\n inMemoryStorage.setItem(validKey, value);\n // TODO: are we sure we want to drop clientData\n // if cookies are not available and localstorage is full?\n this.remove(key);\n });\n\n this.engine = inMemoryStorage;\n }\n\n /**\n * Set value by key.\n */\n set(key: string, value: any) {\n const validKey = this.createValidKey(key);\n\n if (!validKey) {\n return;\n }\n\n try {\n // storejs that is used in localstorage engine already stringifies json\n this.engine.setItem(\n validKey,\n this.encrypt(stringifyWithoutCircular(value, false, [], this.logger)),\n );\n } catch (err) {\n if (isStorageQuotaExceeded(err)) {\n this.logger.warn(STORAGE_QUOTA_EXCEEDED_WARNING(`Store ${this.id}`));\n // switch to inMemory engine\n this.swapQueueStoreToInMemoryEngine();\n // and save it there\n this.set(key, value);\n } else {\n this.onError(getMutatedError(err, STORE_DATA_SAVE_ERROR(key)));\n }\n }\n }\n\n /**\n * Get by Key.\n */\n get(key: string): Nullable {\n const validKey = this.createValidKey(key);\n let decryptedValue;\n\n try {\n if (!validKey) {\n return null;\n }\n\n decryptedValue = this.decrypt(this.engine.getItem(validKey));\n\n if (isNullOrUndefined(decryptedValue)) {\n return null;\n }\n\n // storejs that is used in localstorage engine already deserializes json strings but swallows errors\n return JSON.parse(decryptedValue as string);\n } catch (err) {\n this.onError(new Error(`${STORE_DATA_FETCH_ERROR(key)}: ${(err as Error).message}`));\n\n // A hack for warning the users of potential partial SDK version migrations\n if (isString(decryptedValue) && decryptedValue.startsWith('RudderEncrypt:')) {\n this.logger.warn(BAD_COOKIES_WARNING(key));\n }\n\n return null;\n }\n }\n\n /**\n * Remove by Key.\n */\n remove(key: string) {\n const validKey = this.createValidKey(key);\n\n if (validKey) {\n this.engine.removeItem(validKey);\n }\n }\n\n /**\n * Get original engine\n */\n getOriginalEngine(): IStorage {\n return this.originalEngine;\n }\n\n /**\n * Decrypt values\n */\n decrypt(value?: Nullable): Nullable {\n if (isNullOrUndefined(value)) {\n return null;\n }\n\n return this.crypto(value as string, 'decrypt');\n }\n\n /**\n * Encrypt value\n */\n encrypt(value: Nullable): string {\n return this.crypto(value, 'encrypt');\n }\n\n /**\n * Extension point to use with encryption plugins\n */\n crypto(value: Nullable, mode: 'encrypt' | 'decrypt'): string {\n const noEncryption =\n !this.isEncrypted || !value || typeof value !== 'string' || trim(value) === '';\n\n if (noEncryption) {\n return value;\n }\n\n const extensionPointName = `storage.${mode}`;\n const formattedValue = this.pluginsManager\n ? this.pluginsManager.invokeSingle(extensionPointName, value)\n : value;\n\n return typeof formattedValue === 'undefined' ? value : (formattedValue ?? '');\n }\n\n /**\n * Handle errors\n */\n onError(error: unknown) {\n this.errorHandler.onError(error, `Store ${this.id}`);\n }\n}\n\nexport { Store };\n","import type {\n IStoreConfig,\n IStoreManager,\n StoreId,\n} from '@rudderstack/analytics-js-common/types/Store';\nimport type { IErrorHandler } from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { IPluginsManager } from '@rudderstack/analytics-js-common/types/PluginsManager';\nimport { STORE_MANAGER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport {\n COOKIE_STORAGE,\n LOCAL_STORAGE,\n MEMORY_STORAGE,\n NO_STORAGE,\n SESSION_STORAGE,\n} from '@rudderstack/analytics-js-common/constants/storages';\nimport {\n mergeDeepRight,\n removeUndefinedValues,\n} from '@rudderstack/analytics-js-common/utilities/object';\nimport {\n DEFAULT_STORAGE_TYPE,\n type StorageType,\n} from '@rudderstack/analytics-js-common/types/Storage';\nimport type { UserSessionKey } from '@rudderstack/analytics-js-common/types/UserSessionStorage';\nimport { batch } from '@preact/signals-core';\nimport { isDefined } from '@rudderstack/analytics-js-common/utilities/checks';\nimport { COOKIE_KEYS } from '@rudderstack/analytics-js-cookies/constants/cookies';\nimport { USER_SESSION_KEYS } from '../../constants/storage';\nimport { STORAGE_UNAVAILABLE_WARNING } from '../../constants/logMessages';\nimport { type StoreManagerOptions, storageClientDataStoreNameMap } from './types';\nimport { state } from '../../state';\nimport { configureStorageEngines, getStorageEngine } from './storages/storageEngine';\nimport { Store } from './Store';\nimport { getStorageTypeFromPreConsentIfApplicable } from './utils';\n\n/**\n * A service to manage stores & available storage client configurations\n */\nclass StoreManager implements IStoreManager {\n stores: Record = {};\n isInitialized = false;\n errorHandler: IErrorHandler;\n logger: ILogger;\n pluginsManager: IPluginsManager;\n\n constructor(pluginsManager: IPluginsManager, errorHandler: IErrorHandler, logger: ILogger) {\n this.errorHandler = errorHandler;\n this.logger = logger;\n this.pluginsManager = pluginsManager;\n }\n\n /**\n * Configure available storage client instances\n */\n init() {\n if (this.isInitialized) {\n return;\n }\n\n const loadOptions = state.loadOptions.value;\n const config: StoreManagerOptions = {\n cookieStorageOptions: {\n samesite: loadOptions.sameSiteCookie,\n secure: loadOptions.secureCookie,\n domain: loadOptions.setCookieDomain,\n sameDomainCookiesOnly: loadOptions.sameDomainCookiesOnly,\n enabled: true,\n },\n localStorageOptions: { enabled: true },\n inMemoryStorageOptions: { enabled: true },\n sessionStorageOptions: { enabled: true },\n };\n\n configureStorageEngines(\n removeUndefinedValues(\n mergeDeepRight(config.cookieStorageOptions ?? {}, state.storage.cookie?.value ?? {}),\n ),\n removeUndefinedValues(config.localStorageOptions),\n removeUndefinedValues(config.inMemoryStorageOptions),\n removeUndefinedValues(config.sessionStorageOptions),\n );\n\n this.initClientDataStores();\n this.isInitialized = true;\n }\n\n /**\n * Create store to persist data used by the SDK like session, used details etc\n */\n initClientDataStores() {\n this.initializeStorageState();\n\n // TODO: fill in extra config values and bring them in from StoreManagerOptions if needed\n // TODO: should we pass the keys for all in order to validate or leave free as v1.1?\n\n // Initializing all the enabled store because previous user data might be in different storage\n // that needs auto migration\n const storageTypes = [MEMORY_STORAGE, LOCAL_STORAGE, COOKIE_STORAGE, SESSION_STORAGE];\n\n storageTypes.forEach(storageType => {\n if (getStorageEngine(storageType)?.isEnabled) {\n this.setStore({\n id: storageClientDataStoreNameMap[storageType] as string,\n name: storageClientDataStoreNameMap[storageType] as string,\n isEncrypted: true,\n noCompoundKey: true,\n type: storageType,\n errorHandler: this.errorHandler,\n logger: this.logger,\n });\n }\n });\n }\n\n initializeStorageState() {\n let globalStorageType = state.storage.type.value;\n let entriesOptions = state.loadOptions.value.storage?.entries;\n\n // Use the storage options from post consent if anything is defined\n const postConsentStorageOpts = state.consents.postConsent.value.storage;\n if (isDefined(postConsentStorageOpts?.type) || isDefined(postConsentStorageOpts?.entries)) {\n globalStorageType = postConsentStorageOpts?.type;\n entriesOptions = postConsentStorageOpts?.entries;\n }\n\n let trulyAnonymousTracking = true;\n let storageEntries = {};\n USER_SESSION_KEYS.forEach(sessionKey => {\n const key = sessionKey;\n const storageKey = sessionKey;\n const configuredStorageType = entriesOptions?.[key]?.type;\n\n const preConsentStorageType = getStorageTypeFromPreConsentIfApplicable(state, sessionKey);\n\n // Storage type precedence order: pre-consent strategy > entry type > global type > default\n const storageType =\n preConsentStorageType ?? configuredStorageType ?? globalStorageType ?? DEFAULT_STORAGE_TYPE;\n\n const finalStorageType = this.getResolvedStorageTypeForEntry(storageType, sessionKey);\n\n if (finalStorageType !== NO_STORAGE) {\n trulyAnonymousTracking = false;\n }\n\n storageEntries = {\n ...storageEntries,\n [sessionKey]: {\n type: finalStorageType,\n key: COOKIE_KEYS[storageKey],\n },\n };\n });\n\n batch(() => {\n state.storage.type.value = globalStorageType;\n state.storage.entries.value = storageEntries;\n state.storage.trulyAnonymousTracking.value = trulyAnonymousTracking;\n });\n }\n\n private getResolvedStorageTypeForEntry(storageType: StorageType, sessionKey: UserSessionKey) {\n let finalStorageType = storageType;\n switch (storageType) {\n case LOCAL_STORAGE:\n if (!getStorageEngine(LOCAL_STORAGE)?.isEnabled) {\n finalStorageType = MEMORY_STORAGE;\n }\n break;\n case SESSION_STORAGE:\n if (!getStorageEngine(SESSION_STORAGE)?.isEnabled) {\n finalStorageType = MEMORY_STORAGE;\n }\n break;\n case MEMORY_STORAGE:\n case NO_STORAGE:\n break;\n case COOKIE_STORAGE:\n default:\n // First try setting the storage to cookie else to local storage\n if (getStorageEngine(COOKIE_STORAGE)?.isEnabled) {\n finalStorageType = COOKIE_STORAGE;\n } else if (getStorageEngine(LOCAL_STORAGE)?.isEnabled) {\n finalStorageType = LOCAL_STORAGE;\n } else if (getStorageEngine(SESSION_STORAGE)?.isEnabled) {\n finalStorageType = SESSION_STORAGE;\n } else {\n finalStorageType = MEMORY_STORAGE;\n }\n break;\n }\n\n if (finalStorageType !== storageType) {\n this.logger.warn(\n STORAGE_UNAVAILABLE_WARNING(STORE_MANAGER, sessionKey, storageType, finalStorageType),\n );\n }\n\n return finalStorageType;\n }\n\n /**\n * Create a new store\n */\n setStore(storeConfig: IStoreConfig): Store {\n const storageEngine = getStorageEngine(storeConfig.type);\n this.stores[storeConfig.id] = new Store(storeConfig, storageEngine, this.pluginsManager);\n return this.stores[storeConfig.id] as Store;\n }\n\n /**\n * Retrieve a store\n */\n getStore(id: StoreId): Store | undefined {\n return this.stores[id];\n }\n}\n\nexport { StoreManager };\n","import { NO_STORAGE } from '@rudderstack/analytics-js-common/constants/storages';\nimport type { ApplicationState } from '@rudderstack/analytics-js-common/types/ApplicationState';\nimport type { StorageType } from '@rudderstack/analytics-js-common/types/Storage';\nimport type { UserSessionKey } from '@rudderstack/analytics-js-common/types/UserSessionStorage';\n\nconst getStorageTypeFromPreConsentIfApplicable = (\n state: ApplicationState,\n sessionKey: UserSessionKey,\n) => {\n let overriddenStorageType: StorageType | undefined;\n if (state.consents.preConsent.value.enabled) {\n switch (state.consents.preConsent.value.storage?.strategy) {\n case 'none':\n overriddenStorageType = NO_STORAGE;\n break;\n case 'session':\n if (sessionKey !== 'sessionInfo') {\n overriddenStorageType = NO_STORAGE;\n }\n break;\n case 'anonymousId':\n if (sessionKey !== 'anonymousId') {\n overriddenStorageType = NO_STORAGE;\n }\n break;\n default:\n break;\n }\n }\n return overriddenStorageType;\n};\n\nexport { getStorageTypeFromPreConsentIfApplicable };\n","import { isObjectLiteralAndNotNull } from '@rudderstack/analytics-js-common/utilities/object';\nimport { isNullOrUndefined } from '@rudderstack/analytics-js-common/utilities/checks';\nimport {\n SUPPORTED_STORAGE_TYPES,\n type StorageType,\n} from '@rudderstack/analytics-js-common/types/Storage';\n\nconst isValidSourceConfig = (res: any): boolean =>\n isObjectLiteralAndNotNull(res) &&\n isObjectLiteralAndNotNull(res.source) &&\n !isNullOrUndefined(res.source.id) &&\n isObjectLiteralAndNotNull(res.source.config) &&\n Array.isArray(res.source.destinations);\n\nconst isValidStorageType = (storageType?: StorageType): boolean =>\n typeof storageType === 'string' && SUPPORTED_STORAGE_TYPES.includes(storageType);\n\nconst getTopDomain = (url: string) => {\n // Create a URL object\n const urlObj = new URL(url);\n\n // Extract the host and protocol\n const { host, protocol } = urlObj;\n\n // Split the host into parts\n const parts: string[] = host.split('.');\n let topDomain;\n // Handle different cases, especially for co.uk or similar TLDs\n if (parts.length > 2) {\n // Join the last two parts for the top-level domain\n topDomain = `${parts[parts.length - 2]}.${parts[parts.length - 1]}`;\n } else {\n // If only two parts or less, return as it is\n topDomain = host;\n }\n return { topDomain, protocol };\n};\n\nconst getTopDomainUrl = (url: string) => {\n const { topDomain, protocol } = getTopDomain(url);\n return `${protocol}//${topDomain}`;\n};\n\nconst getDataServiceUrl = (endpoint: string, useExactDomain: boolean) => {\n const url = useExactDomain ? window.location.origin : getTopDomainUrl(window.location.href);\n const formattedEndpoint = endpoint.startsWith('/') ? endpoint.substring(1) : endpoint;\n return `${url}/${formattedEndpoint}`;\n};\n\nconst isWebpageTopLevelDomain = (providedDomain: string): boolean => {\n const { topDomain } = getTopDomain(window.location.href);\n return topDomain === providedDomain;\n};\n\nexport {\n isValidSourceConfig,\n isValidStorageType,\n getTopDomainUrl,\n getDataServiceUrl,\n isWebpageTopLevelDomain,\n};\n","import type { UTMParameters } from '@rudderstack/analytics-js-common/types/EventContext';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\n\n/**\n * Removes trailing slash from url\n * @param url\n * @returns url\n */\nconst removeTrailingSlashes = (url: Nullable | undefined): Nullable | undefined =>\n url?.endsWith('/') ? removeTrailingSlashes(url.substring(0, url.length - 1)) : url;\n\nconst getDomain = (url: string): Nullable => {\n try {\n const urlObj = new URL(url);\n return urlObj.host;\n } catch (error) {\n return null;\n }\n};\n\n/**\n * Get the referring domain from the referrer URL\n * @param referrer Page referrer\n * @returns Page referring domain\n */\nconst getReferringDomain = (referrer: string): string => getDomain(referrer) ?? '';\n\n/**\n * Extracts UTM parameters from the URL\n * @param url Page URL\n * @returns UTM parameters\n */\nconst extractUTMParameters = (url: string): UTMParameters => {\n const result: UTMParameters = {};\n try {\n const urlObj = new URL(url);\n const UTM_PREFIX = 'utm_';\n urlObj.searchParams.forEach((value, sParam) => {\n if (sParam.startsWith(UTM_PREFIX)) {\n let utmParam = sParam.substring(UTM_PREFIX.length);\n // Not sure why we're doing this\n if (utmParam === 'campaign') {\n utmParam = 'name';\n }\n result[utmParam] = value;\n }\n });\n } catch (error) {\n // Do nothing\n }\n return result;\n};\n\n/**\n * To get the URL until the hash\n * @param url The input URL\n * @returns URL until the hash\n */\nconst getUrlWithoutHash = (url: string): string => {\n let urlWithoutHash = url;\n try {\n const urlObj = new URL(url);\n urlWithoutHash = urlObj.origin + urlObj.pathname + urlObj.search;\n } catch (error) {\n // Do nothing\n }\n return urlWithoutHash;\n};\n\nexport {\n removeTrailingSlashes,\n getReferringDomain,\n extractUTMParameters,\n getUrlWithoutHash,\n getDomain,\n};\n","import { URL_PATTERN } from '../constants/urls';\nimport { isFunction, isString } from './checks';\n\nconst removeDuplicateSlashes = (str: string): string => str.replace(/\\/{2,}/g, '/');\n\n/**\n * Checks if provided url is valid or not\n * @param url\n * @returns true if `url` is valid and false otherwise\n */\nconst isValidURL = (url: string | undefined): url is string => {\n if (!isString(url)) {\n return false;\n }\n\n try {\n // If URL is supported by the browser, we can use it to validate the URL\n // Otherwise, we can at least check if the URL matches the pattern\n if (isFunction(globalThis.URL)) {\n // eslint-disable-next-line no-new\n new URL(url);\n }\n return URL_PATTERN.test(url);\n } catch (e) {\n return false;\n }\n};\n\nexport { removeDuplicateSlashes, isValidURL };\n","import type { DeliveryType, StorageStrategy } from '../types/LoadOptions';\n\nconst DEFAULT_PRE_CONSENT_STORAGE_STRATEGY: StorageStrategy = 'none';\nconst DEFAULT_PRE_CONSENT_EVENTS_DELIVERY_TYPE: DeliveryType = 'immediate';\n\nexport { DEFAULT_PRE_CONSENT_STORAGE_STRATEGY, DEFAULT_PRE_CONSENT_EVENTS_DELIVERY_TYPE };\n","import { CONFIG_MANAGER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport type {\n ConsentManagementOptions,\n ConsentManagementProvider,\n Consents,\n CookieConsentOptions,\n} from '@rudderstack/analytics-js-common/types/Consent';\nimport type { ConsentOptions } from '@rudderstack/analytics-js-common/types/LoadOptions';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { PluginName } from '@rudderstack/analytics-js-common/types/PluginsManager';\nimport {\n isNonEmptyObject,\n isObjectLiteralAndNotNull,\n mergeDeepRight,\n} from '@rudderstack/analytics-js-common/utilities/object';\nimport { clone } from 'ramda';\nimport { state } from '../../state';\nimport { UNSUPPORTED_CONSENT_MANAGER_ERROR } from '../../constants/logMessages';\nimport { ConsentManagersToPluginNameMap } from '../configManager/constants';\n\n/**\n * A function to get the name of the consent manager with enabled true set in the load options\n * @param cookieConsentOptions Input provided as load option\n * @returns string|undefined\n *\n * Example input: {\n * oneTrust:{\n * enabled: true\n * }\n * }\n *\n * Output: 'oneTrust'\n */\nconst getUserSelectedConsentManager = (\n cookieConsentOptions?: CookieConsentOptions,\n): string | undefined => {\n if (!isNonEmptyObject(cookieConsentOptions)) {\n return undefined;\n }\n\n const validCookieConsentOptions = cookieConsentOptions as CookieConsentOptions;\n return Object.keys(validCookieConsentOptions).find(\n e =>\n e && validCookieConsentOptions[e] && (validCookieConsentOptions[e] as any).enabled === true,\n );\n};\n\n/**\n * Validates and normalizes the consent options provided by the user\n * @param options Consent options provided by the user\n * @returns Validated and normalized consent options\n */\nconst getValidPostConsentOptions = (options?: ConsentOptions) => {\n const validOptions: ConsentOptions = {\n sendPageEvent: false,\n trackConsent: false,\n discardPreConsentEvents: false,\n };\n if (isObjectLiteralAndNotNull(options)) {\n const clonedOptions = clone(options);\n\n validOptions.storage = clonedOptions.storage;\n if (isNonEmptyObject(clonedOptions.integrations)) {\n validOptions.integrations = clonedOptions.integrations;\n }\n validOptions.discardPreConsentEvents = clonedOptions.discardPreConsentEvents === true;\n validOptions.sendPageEvent = clonedOptions.sendPageEvent === true;\n validOptions.trackConsent = clonedOptions.trackConsent === true;\n if (isNonEmptyObject(clonedOptions.consentManagement)) {\n // Override enabled value with the current state value\n validOptions.consentManagement = mergeDeepRight(clonedOptions.consentManagement, {\n enabled: state.consents.enabled.value,\n });\n }\n }\n return validOptions;\n};\n\n/**\n * Validates if the input is a valid consents data\n * @param value Input consents data\n * @returns true if the input is a valid consents data else false\n */\nconst isValidConsentsData = (value: Consents | undefined): value is Consents =>\n isNonEmptyObject(value) || Array.isArray(value);\n\n/**\n * Retrieves the corresponding provider and plugin name of the selected consent manager from the supported consent managers\n * @param consentManagementOpts consent management options\n * @param logger logger instance\n * @returns Corresponding provider and plugin name of the selected consent manager from the supported consent managers\n */\nconst getConsentManagerInfo = (\n consentManagementOpts: ConsentManagementOptions,\n logger: ILogger,\n) => {\n let { provider }: { provider?: ConsentManagementProvider } = consentManagementOpts;\n const consentManagerPluginName = provider ? ConsentManagersToPluginNameMap[provider] : undefined;\n if (provider && !consentManagerPluginName) {\n logger.error(\n UNSUPPORTED_CONSENT_MANAGER_ERROR(CONFIG_MANAGER, provider, ConsentManagersToPluginNameMap),\n );\n\n // Reset the provider value\n provider = undefined;\n }\n return { provider, consentManagerPluginName };\n};\n\n/**\n * Validates and converts the consent management options into a normalized format\n * @param consentManagementOpts Consent management options provided by the user\n * @param logger logger instance\n * @returns An object containing the consent manager plugin name, initialized, enabled and consents data\n */\nconst getConsentManagementData = (\n consentManagementOpts: ConsentManagementOptions | undefined,\n logger: ILogger,\n) => {\n let consentManagerPluginName: PluginName | undefined;\n let allowedConsentIds: Consents = [];\n let deniedConsentIds: Consents = [];\n let initialized = false;\n let provider: ConsentManagementProvider | undefined;\n\n let enabled = consentManagementOpts?.enabled === true;\n if (isNonEmptyObject(consentManagementOpts) && enabled) {\n // Get the corresponding plugin name of the selected consent manager from the supported consent managers\n ({ provider, consentManagerPluginName } = getConsentManagerInfo(consentManagementOpts, logger));\n\n if (isValidConsentsData(consentManagementOpts.allowedConsentIds)) {\n allowedConsentIds = consentManagementOpts.allowedConsentIds;\n initialized = true;\n }\n\n if (isValidConsentsData(consentManagementOpts.deniedConsentIds)) {\n deniedConsentIds = consentManagementOpts.deniedConsentIds;\n initialized = true;\n }\n }\n\n const consentsData = {\n allowedConsentIds,\n deniedConsentIds,\n };\n\n // Enable consent management only if consent manager is supported\n enabled = enabled && Boolean(consentManagerPluginName);\n\n return {\n provider,\n consentManagerPluginName,\n initialized,\n enabled,\n consentsData,\n };\n};\n\nexport { getUserSelectedConsentManager, getValidPostConsentOptions, getConsentManagementData };\n","import type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport { CONFIG_MANAGER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport { batch } from '@preact/signals-core';\nimport { isDefined, isUndefined } from '@rudderstack/analytics-js-common/utilities/checks';\nimport { isSDKRunningInChromeExtension } from '@rudderstack/analytics-js-common/utilities/detect';\nimport {\n DEFAULT_STORAGE_TYPE,\n type CookieOptions,\n} from '@rudderstack/analytics-js-common/types/Storage';\nimport type {\n DeliveryType,\n StorageStrategy,\n} from '@rudderstack/analytics-js-common/types/LoadOptions';\nimport {\n DEFAULT_PRE_CONSENT_EVENTS_DELIVERY_TYPE,\n DEFAULT_PRE_CONSENT_STORAGE_STRATEGY,\n} from '@rudderstack/analytics-js-common/constants/consent';\nimport { isObjectLiteralAndNotNull } from '@rudderstack/analytics-js-common/utilities/object';\nimport type {\n ConsentManagementMetadata,\n ConsentResolutionStrategy,\n} from '@rudderstack/analytics-js-common/types/Consent';\nimport { clone } from 'ramda';\nimport type { PluginName } from '@rudderstack/analytics-js-common/types/PluginsManager';\nimport { isValidURL, removeDuplicateSlashes } from '@rudderstack/analytics-js-common/utilities/url';\nimport { removeLeadingPeriod } from '@rudderstack/analytics-js-common/utilities/string';\nimport { MODULE_TYPE, APP_VERSION } from '../../../constants/app';\nimport { BUILD_TYPE, DEFAULT_CONFIG_BE_URL } from '../../../constants/urls';\nimport { state } from '../../../state';\nimport {\n INVALID_CONFIG_URL_WARNING,\n STORAGE_DATA_MIGRATION_OVERRIDE_WARNING,\n STORAGE_TYPE_VALIDATION_WARNING,\n UNSUPPORTED_BEACON_API_WARNING,\n UNSUPPORTED_PRE_CONSENT_EVENTS_DELIVERY_TYPE,\n UNSUPPORTED_PRE_CONSENT_STORAGE_STRATEGY,\n UNSUPPORTED_STORAGE_ENCRYPTION_VERSION_WARNING,\n SERVER_SIDE_COOKIE_FEATURE_OVERRIDE_WARNING,\n} from '../../../constants/logMessages';\nimport {\n isErrorReportingEnabled,\n isMetricsReportingEnabled,\n} from '../../utilities/statsCollection';\nimport { getDomain, removeTrailingSlashes } from '../../utilities/url';\nimport type { SourceConfigResponse } from '../types';\nimport {\n DEFAULT_DATA_SERVICE_ENDPOINT,\n DEFAULT_STORAGE_ENCRYPTION_VERSION,\n StorageEncryptionVersionsToPluginNameMap,\n} from '../constants';\nimport { getDataServiceUrl, isValidStorageType, isWebpageTopLevelDomain } from './validate';\nimport { getConsentManagementData } from '../../utilities/consent';\n\n/**\n * Determines the SDK URL\n * @returns sdkURL\n */\nconst getSDKUrl = (): string | undefined => {\n // First try the new method of getting the SDK URL\n // from the script tag\n const scriptTag = document.querySelector('script[data-rsa-write-key]');\n if (scriptTag && scriptTag.dataset.rsaWriteKey === state.lifecycle.writeKey.value) {\n return scriptTag.src;\n }\n\n // If the new method fails, try the old method\n // TODO: We need to remove this once all the customers upgrade to the\n // latest SDK loading snippet\n const scripts = document.getElementsByTagName('script');\n const sdkFileNameRegex = /(?:^|\\/)rsa(\\.min)?\\.js$/;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const script of scripts) {\n const src = script.getAttribute('src');\n if (src && sdkFileNameRegex.test(src)) {\n return src;\n }\n }\n\n return undefined;\n};\n\n/**\n * Updates the reporting state variables from the source config data\n * @param res Source config\n * @param logger Logger instance\n */\nconst updateReportingState = (res: SourceConfigResponse): void => {\n state.reporting.isErrorReportingEnabled.value =\n isErrorReportingEnabled(res.source.config) && !isSDKRunningInChromeExtension();\n state.reporting.isMetricsReportingEnabled.value = isMetricsReportingEnabled(res.source.config);\n};\n\nconst getServerSideCookiesStateData = (logger: ILogger) => {\n const {\n useServerSideCookies,\n dataServiceEndpoint,\n storage: storageOptsFromLoad,\n setCookieDomain,\n sameDomainCookiesOnly,\n } = state.loadOptions.value;\n\n let cookieOptions = storageOptsFromLoad?.cookie as CookieOptions;\n let sscEnabled = false;\n let finalDataServiceUrl: string | undefined;\n if (useServerSideCookies) {\n sscEnabled = useServerSideCookies;\n const providedCookieDomain = cookieOptions.domain ?? setCookieDomain;\n /**\n * Based on the following conditions, we decide whether to use the exact domain or not to determine the data service URL:\n * 1. If the cookie domain is provided and it is not a top-level domain, then use the exact domain\n * 2. If the sameDomainCookiesOnly flag is set to true, then use the exact domain\n */\n const useExactDomain =\n (isDefined(providedCookieDomain) &&\n !isWebpageTopLevelDomain(removeLeadingPeriod(providedCookieDomain as string))) ||\n (sameDomainCookiesOnly as boolean);\n\n const dataServiceUrl = getDataServiceUrl(\n dataServiceEndpoint ?? DEFAULT_DATA_SERVICE_ENDPOINT,\n useExactDomain,\n );\n\n if (isValidURL(dataServiceUrl)) {\n finalDataServiceUrl = removeTrailingSlashes(dataServiceUrl) as string;\n\n const curHost = getDomain(window.location.href);\n const dataServiceHost = getDomain(dataServiceUrl);\n\n // If the current host is different from the data service host, then it is a cross-site request\n // For server-side cookies to work, we need to set the SameSite=None and Secure attributes\n // One round of cookie options manipulation is taking place here\n // Based on these(setCookieDomain/storage.cookie or sameDomainCookiesOnly) two load-options, final cookie options are set in the storage module\n // TODO: Refactor the cookie options manipulation logic in one place\n if (curHost !== dataServiceHost) {\n cookieOptions = {\n ...cookieOptions,\n samesite: 'None',\n secure: true,\n };\n }\n /**\n * If the sameDomainCookiesOnly flag is not set and the cookie domain is provided(not top level domain),\n * and the data service host is different from the provided cookie domain, then we disable server-side cookies\n * ex: provided cookie domain: 'random.com', data service host: 'sub.example.com'\n */\n if (\n !sameDomainCookiesOnly &&\n useExactDomain &&\n dataServiceHost !== removeLeadingPeriod(providedCookieDomain as string)\n ) {\n sscEnabled = false;\n logger.warn(\n SERVER_SIDE_COOKIE_FEATURE_OVERRIDE_WARNING(\n CONFIG_MANAGER,\n providedCookieDomain,\n dataServiceHost as string,\n ),\n );\n }\n } else {\n sscEnabled = false;\n }\n }\n\n return {\n sscEnabled,\n cookieOptions,\n finalDataServiceUrl,\n };\n};\n\nconst updateStorageStateFromLoadOptions = (logger: ILogger): void => {\n const { storage: storageOptsFromLoad } = state.loadOptions.value;\n let storageType = storageOptsFromLoad?.type;\n if (isDefined(storageType) && !isValidStorageType(storageType)) {\n logger.warn(STORAGE_TYPE_VALIDATION_WARNING(CONFIG_MANAGER, storageType, DEFAULT_STORAGE_TYPE));\n storageType = DEFAULT_STORAGE_TYPE;\n }\n\n let storageEncryptionVersion = storageOptsFromLoad?.encryption?.version;\n const encryptionPluginName =\n storageEncryptionVersion && StorageEncryptionVersionsToPluginNameMap[storageEncryptionVersion];\n\n if (!isUndefined(storageEncryptionVersion) && isUndefined(encryptionPluginName)) {\n // set the default encryption plugin\n logger.warn(\n UNSUPPORTED_STORAGE_ENCRYPTION_VERSION_WARNING(\n CONFIG_MANAGER,\n storageEncryptionVersion,\n StorageEncryptionVersionsToPluginNameMap,\n DEFAULT_STORAGE_ENCRYPTION_VERSION,\n ),\n );\n storageEncryptionVersion = DEFAULT_STORAGE_ENCRYPTION_VERSION;\n } else if (isUndefined(storageEncryptionVersion)) {\n storageEncryptionVersion = DEFAULT_STORAGE_ENCRYPTION_VERSION;\n }\n\n // Allow migration only if the configured encryption version is the default encryption version\n const configuredMigrationValue = storageOptsFromLoad?.migrate;\n const finalMigrationVal =\n (configuredMigrationValue as boolean) &&\n storageEncryptionVersion === DEFAULT_STORAGE_ENCRYPTION_VERSION;\n\n if (configuredMigrationValue === true && finalMigrationVal !== configuredMigrationValue) {\n logger.warn(\n STORAGE_DATA_MIGRATION_OVERRIDE_WARNING(\n CONFIG_MANAGER,\n storageEncryptionVersion,\n DEFAULT_STORAGE_ENCRYPTION_VERSION,\n ),\n );\n }\n\n const { sscEnabled, finalDataServiceUrl, cookieOptions } = getServerSideCookiesStateData(logger);\n\n batch(() => {\n state.storage.type.value = storageType;\n\n state.storage.cookie.value = cookieOptions;\n\n state.serverCookies.isEnabledServerSideCookies.value = sscEnabled;\n state.serverCookies.dataServiceUrl.value = finalDataServiceUrl;\n\n state.storage.encryptionPluginName.value =\n StorageEncryptionVersionsToPluginNameMap[storageEncryptionVersion as string];\n\n state.storage.migrate.value = finalMigrationVal;\n });\n};\n\nconst updateConsentsStateFromLoadOptions = (logger: ILogger): void => {\n const { provider, consentManagerPluginName, initialized, enabled, consentsData } =\n getConsentManagementData(state.loadOptions.value.consentManagement, logger);\n\n // Pre-consent\n const preConsentOpts = state.loadOptions.value.preConsent;\n\n let storageStrategy: StorageStrategy =\n preConsentOpts?.storage?.strategy ?? DEFAULT_PRE_CONSENT_STORAGE_STRATEGY;\n const StorageStrategies = ['none', 'session', 'anonymousId'];\n if (isDefined(storageStrategy) && !StorageStrategies.includes(storageStrategy)) {\n storageStrategy = DEFAULT_PRE_CONSENT_STORAGE_STRATEGY;\n\n logger.warn(\n UNSUPPORTED_PRE_CONSENT_STORAGE_STRATEGY(\n CONFIG_MANAGER,\n preConsentOpts?.storage?.strategy,\n DEFAULT_PRE_CONSENT_STORAGE_STRATEGY,\n ),\n );\n }\n\n let eventsDeliveryType: DeliveryType =\n preConsentOpts?.events?.delivery ?? DEFAULT_PRE_CONSENT_EVENTS_DELIVERY_TYPE;\n const deliveryTypes = ['immediate', 'buffer'];\n if (isDefined(eventsDeliveryType) && !deliveryTypes.includes(eventsDeliveryType)) {\n eventsDeliveryType = DEFAULT_PRE_CONSENT_EVENTS_DELIVERY_TYPE;\n\n logger.warn(\n UNSUPPORTED_PRE_CONSENT_EVENTS_DELIVERY_TYPE(\n CONFIG_MANAGER,\n preConsentOpts?.events?.delivery,\n DEFAULT_PRE_CONSENT_EVENTS_DELIVERY_TYPE,\n ),\n );\n }\n\n batch(() => {\n state.consents.activeConsentManagerPluginName.value = consentManagerPluginName;\n state.consents.initialized.value = initialized;\n state.consents.enabled.value = enabled;\n state.consents.data.value = consentsData;\n state.consents.provider.value = provider;\n\n state.consents.preConsent.value = {\n // Only enable pre-consent if it is explicitly enabled and\n // if it is not already initialized and\n // if consent management is enabled\n enabled:\n state.loadOptions.value.preConsent?.enabled === true &&\n initialized === false &&\n enabled === true,\n storage: {\n strategy: storageStrategy,\n },\n events: {\n delivery: eventsDeliveryType,\n },\n };\n });\n};\n\n/**\n * Determines the consent management state variables from the source config data\n * @param resp Source config response\n * @param logger Logger instance\n */\nconst updateConsentsState = (resp: SourceConfigResponse): void => {\n let resolutionStrategy: ConsentResolutionStrategy | undefined =\n state.consents.resolutionStrategy.value;\n\n let cmpMetadata: ConsentManagementMetadata | undefined;\n if (isObjectLiteralAndNotNull(resp.consentManagementMetadata)) {\n if (state.consents.provider.value) {\n resolutionStrategy =\n resp.consentManagementMetadata.providers.find(\n p => p.provider === state.consents.provider.value,\n )?.resolutionStrategy ?? state.consents.resolutionStrategy.value;\n }\n\n cmpMetadata = resp.consentManagementMetadata;\n }\n\n // If the provider is custom, then the resolution strategy is not applicable\n if (state.consents.provider.value === 'custom') {\n resolutionStrategy = undefined;\n }\n\n batch(() => {\n state.consents.metadata.value = clone(cmpMetadata);\n state.consents.resolutionStrategy.value = resolutionStrategy;\n });\n};\n\nconst updateDataPlaneEventsStateFromLoadOptions = (logger: ILogger) => {\n if (state.dataPlaneEvents.deliveryEnabled.value) {\n const defaultEventsQueuePluginName: PluginName = 'XhrQueue';\n let eventsQueuePluginName: PluginName = defaultEventsQueuePluginName;\n\n if (state.loadOptions.value.useBeacon) {\n if (state.capabilities.isBeaconAvailable.value) {\n eventsQueuePluginName = 'BeaconQueue';\n } else {\n eventsQueuePluginName = defaultEventsQueuePluginName;\n\n logger.warn(UNSUPPORTED_BEACON_API_WARNING(CONFIG_MANAGER));\n }\n }\n\n batch(() => {\n state.dataPlaneEvents.eventsQueuePluginName.value = eventsQueuePluginName;\n });\n }\n};\n\nconst getSourceConfigURL = (\n configUrl: string | undefined,\n writeKey: string,\n lockIntegrationsVersion: boolean,\n lockPluginsVersion: boolean,\n logger: ILogger,\n): string => {\n const defSearchParams = new URLSearchParams({\n p: MODULE_TYPE,\n v: APP_VERSION,\n build: BUILD_TYPE,\n writeKey,\n lockIntegrationsVersion: lockIntegrationsVersion.toString(),\n lockPluginsVersion: lockPluginsVersion.toString(),\n });\n\n let origin = DEFAULT_CONFIG_BE_URL;\n let searchParams = defSearchParams;\n let pathname = '/sourceConfig/';\n let hash = '';\n if (isValidURL(configUrl)) {\n const configUrlInstance = new URL(configUrl);\n if (!(removeTrailingSlashes(configUrlInstance.pathname) as string).endsWith('/sourceConfig')) {\n configUrlInstance.pathname = `${\n removeTrailingSlashes(configUrlInstance.pathname) as string\n }/sourceConfig/`;\n }\n configUrlInstance.pathname = removeDuplicateSlashes(configUrlInstance.pathname);\n\n defSearchParams.forEach((value, key) => {\n if (configUrlInstance.searchParams.get(key) === null) {\n configUrlInstance.searchParams.set(key, value);\n }\n });\n\n origin = configUrlInstance.origin;\n pathname = configUrlInstance.pathname;\n searchParams = configUrlInstance.searchParams;\n hash = configUrlInstance.hash;\n } else {\n logger.warn(INVALID_CONFIG_URL_WARNING(CONFIG_MANAGER, configUrl));\n }\n\n return `${origin}${pathname}?${searchParams}${hash}`;\n};\n\nexport {\n getSDKUrl,\n updateReportingState,\n updateStorageStateFromLoadOptions,\n updateConsentsStateFromLoadOptions,\n updateConsentsState,\n updateDataPlaneEventsStateFromLoadOptions,\n getSourceConfigURL,\n};\n","import type { SourceConfig } from '@rudderstack/analytics-js-common/types/Source';\n\nconst isErrorReportingEnabled = (sourceConfig?: SourceConfig): boolean =>\n sourceConfig?.statsCollection?.errors?.enabled === true;\n\nconst isMetricsReportingEnabled = (sourceConfig?: SourceConfig): boolean =>\n sourceConfig?.statsCollection?.metrics?.enabled === true;\n\nexport { isErrorReportingEnabled, isMetricsReportingEnabled };\n","/**\n * Determines if the SDK is running inside a chrome extension\n * @returns boolean\n */\nconst isSDKRunningInChromeExtension = (): boolean => !!(window as any).chrome?.runtime?.id;\n\nexport { isSDKRunningInChromeExtension };\n","import { CDN_INT_DIR, CDN_PLUGINS_DIR } from '@rudderstack/analytics-js-common/constants/urls';\nimport { isValidURL } from '@rudderstack/analytics-js-common/utilities/url';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport { CONFIG_MANAGER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport {\n BUILD_TYPE,\n CDN_ARCH_VERSION_DIR,\n DEFAULT_INTEGRATION_SDKS_URL,\n DEFAULT_PLUGINS_URL,\n} from '../../../constants/urls';\nimport { COMPONENT_BASE_URL_ERROR } from '../../../constants/logMessages';\nimport { removeTrailingSlashes } from '../../utilities/url';\nimport { getSDKUrl } from './commonUtil';\nimport { state } from '../../../state';\n\n/**\n * A function that determines the base URL for the integrations or plugins SDK\n * @param componentType The type of the component (integrations or plugins)\n * @param pathSuffix The path suffix to be appended to the base URL (js-integrations or plugins)\n * @param defaultComponentUrl The default URL to be used if the user has not provided a custom URL\n * @param currentSdkVersion The current version of the SDK\n * @param lockVersion Flag to lock the version of the component\n * @param urlFromLoadOptions The URL provided by the user in the load options\n * @param logger Logger instance\n * @returns The base URL for the integrations or plugins SDK\n */\nconst getSDKComponentBaseURL = (\n componentType: string,\n pathSuffix: string,\n defaultComponentUrl: string,\n currentSdkVersion: string,\n lockVersion: boolean,\n urlFromLoadOptions: string | undefined,\n logger: ILogger,\n): Nullable => {\n let sdkComponentBaseURL;\n // If the user has provided a custom URL, then validate, clean up and use it\n if (urlFromLoadOptions) {\n if (!isValidURL(urlFromLoadOptions)) {\n logger.error(COMPONENT_BASE_URL_ERROR(CONFIG_MANAGER, componentType, urlFromLoadOptions));\n return null;\n }\n\n sdkComponentBaseURL = removeTrailingSlashes(urlFromLoadOptions) as string;\n } else {\n sdkComponentBaseURL = defaultComponentUrl;\n\n // We can automatically determine the base URL only for CDN installations\n if (state.context.app.value.installType === 'cdn') {\n const sdkURL = getSDKUrl();\n\n if (sdkURL) {\n // Extract the base URL from the core SDK file URL\n // and append the path suffix to it\n sdkComponentBaseURL = sdkURL.split('/').slice(0, -1).concat(pathSuffix).join('/');\n }\n }\n }\n\n // If the version needs to be locked, then replace the major version in the URL\n // with the current version of the SDK\n if (lockVersion) {\n sdkComponentBaseURL = sdkComponentBaseURL.replace(\n new RegExp(`/${CDN_ARCH_VERSION_DIR}/${BUILD_TYPE}/${pathSuffix}$`),\n `/${currentSdkVersion}/${BUILD_TYPE}/${pathSuffix}`,\n );\n }\n\n return sdkComponentBaseURL;\n};\n\n/**\n * A function that determines integration SDK loading path\n * @param currentSdkVersion Current SDK version\n * @param lockIntegrationsVersion Flag to lock the integrations version\n * @param integrationsUrlFromLoadOptions URL to load the integrations from as provided by the user\n * @param logger Logger instance\n * @returns\n */\nconst getIntegrationsCDNPath = (\n currentSdkVersion: string,\n lockIntegrationsVersion: boolean,\n integrationsUrlFromLoadOptions: string | undefined,\n logger: ILogger,\n): Nullable =>\n getSDKComponentBaseURL(\n 'integrations',\n CDN_INT_DIR,\n DEFAULT_INTEGRATION_SDKS_URL,\n currentSdkVersion,\n lockIntegrationsVersion,\n integrationsUrlFromLoadOptions,\n logger,\n );\n\n/**\n * A function that determines plugins SDK loading path\n * @param currentSdkVersion Current SDK version\n * @param lockPluginsVersion Flag to lock the plugins version\n * @param pluginsUrlFromLoadOptions URL to load the plugins from as provided by the user\n * @param logger Logger instance\n * @returns Final plugins CDN path\n */\nconst getPluginsCDNPath = (\n currentSdkVersion: string,\n lockPluginsVersion: boolean,\n pluginsUrlFromLoadOptions: string | undefined,\n logger: ILogger,\n): Nullable =>\n getSDKComponentBaseURL(\n 'plugins',\n CDN_PLUGINS_DIR,\n DEFAULT_PLUGINS_URL,\n currentSdkVersion,\n lockPluginsVersion,\n pluginsUrlFromLoadOptions,\n logger,\n );\n\nexport { getIntegrationsCDNPath, getPluginsCDNPath };\n","/* eslint-disable sonarjs/deprecation */\n/* eslint-disable class-methods-use-this */\nimport type {\n IHttpClient,\n ResponseDetails,\n} from '@rudderstack/analytics-js-common/types/HttpClient';\nimport { batch, effect } from '@preact/signals-core';\nimport {\n isDefined,\n isFunction,\n isNull,\n isString,\n} from '@rudderstack/analytics-js-common/utilities/checks';\nimport type { IErrorHandler } from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport type { Destination } from '@rudderstack/analytics-js-common/types/Destination';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport { CONFIG_MANAGER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport type { IntegrationOpts } from '@rudderstack/analytics-js-common/types/Integration';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport { isValidSourceConfig } from './util/validate';\nimport {\n SOURCE_CONFIG_FETCH_ERROR,\n SOURCE_CONFIG_OPTION_ERROR,\n SOURCE_CONFIG_RESOLUTION_ERROR,\n SOURCE_DISABLED_ERROR,\n} from '../../constants/logMessages';\nimport { filterEnabledDestination } from '../utilities/destinations';\nimport { removeTrailingSlashes } from '../utilities/url';\nimport { APP_VERSION } from '../../constants/app';\nimport { state } from '../../state';\nimport { getIntegrationsCDNPath, getPluginsCDNPath } from './util/cdnPaths';\nimport type { IConfigManager, SourceConfigResponse } from './types';\nimport {\n getSourceConfigURL,\n updateConsentsState,\n updateConsentsStateFromLoadOptions,\n updateDataPlaneEventsStateFromLoadOptions,\n updateReportingState,\n updateStorageStateFromLoadOptions,\n} from './util/commonUtil';\nimport { METRICS_SERVICE_ENDPOINT } from './constants';\n\nclass ConfigManager implements IConfigManager {\n httpClient: IHttpClient;\n errorHandler: IErrorHandler;\n logger: ILogger;\n\n constructor(httpClient: IHttpClient, errorHandler: IErrorHandler, logger: ILogger) {\n this.errorHandler = errorHandler;\n this.logger = logger;\n this.httpClient = httpClient;\n\n this.onError = this.onError.bind(this);\n this.processConfig = this.processConfig.bind(this);\n }\n\n attachEffects() {\n effect(() => {\n this.logger.setMinLogLevel(state.lifecycle.logLevel.value);\n });\n }\n\n /**\n * A function to validate, construct and store loadOption, lifecycle, source and destination\n * config related information in global state\n */\n init() {\n const {\n logLevel,\n configUrl,\n lockIntegrationsVersion,\n lockPluginsVersion,\n destSDKBaseURL,\n pluginsSDKBaseURL,\n integrations,\n } = state.loadOptions.value;\n\n // determine the path to fetch integration SDK from\n const intgCdnUrl = getIntegrationsCDNPath(\n APP_VERSION,\n lockIntegrationsVersion as boolean,\n destSDKBaseURL,\n this.logger,\n );\n\n if (isNull(intgCdnUrl)) {\n return;\n }\n\n let pluginsCDNPath: Nullable | undefined;\n if (!__BUNDLE_ALL_PLUGINS__) {\n // determine the path to fetch remote plugins from\n pluginsCDNPath = getPluginsCDNPath(\n APP_VERSION,\n lockPluginsVersion as boolean,\n pluginsSDKBaseURL,\n this.logger,\n );\n }\n\n if (pluginsCDNPath === null) {\n return;\n }\n\n this.attachEffects();\n\n state.lifecycle.activeDataplaneUrl.value = removeTrailingSlashes(\n state.lifecycle.dataPlaneUrl.value,\n ) as string;\n\n updateStorageStateFromLoadOptions(this.logger);\n updateConsentsStateFromLoadOptions(this.logger);\n updateDataPlaneEventsStateFromLoadOptions(this.logger);\n\n // set application lifecycle state in global state\n batch(() => {\n state.lifecycle.integrationsCDNPath.value = intgCdnUrl;\n state.lifecycle.pluginsCDNPath.value = pluginsCDNPath;\n\n if (logLevel) {\n state.lifecycle.logLevel.value = logLevel;\n }\n\n state.lifecycle.sourceConfigUrl.value = getSourceConfigURL(\n configUrl,\n state.lifecycle.writeKey.value as string,\n lockIntegrationsVersion as boolean,\n lockPluginsVersion as boolean,\n this.logger,\n );\n state.metrics.metricsServiceUrl.value = `${state.lifecycle.activeDataplaneUrl.value}/${METRICS_SERVICE_ENDPOINT}`;\n // Data in the loadOptions state is already normalized\n state.nativeDestinations.loadOnlyIntegrations.value = integrations as IntegrationOpts;\n });\n\n this.getConfig();\n }\n\n /**\n * Handle errors\n */\n onError(error: unknown, customMessage?: string) {\n this.errorHandler.onError(error, CONFIG_MANAGER, customMessage);\n }\n\n /**\n * A callback function that is executed once we fetch the source config response.\n * Use to construct and store information that are dependent on the sourceConfig.\n */\n processConfig(response: SourceConfigResponse | string | undefined, details?: ResponseDetails) {\n // TODO: add retry logic with backoff based on rejectionDetails.xhr.status\n // We can use isErrRetryable utility method\n if (!isDefined(response)) {\n if (isDefined(details)) {\n this.onError((details as ResponseDetails).error, SOURCE_CONFIG_FETCH_ERROR);\n } else {\n this.onError(new Error(SOURCE_CONFIG_FETCH_ERROR));\n }\n return;\n }\n\n let res: SourceConfigResponse;\n try {\n if (isString(response)) {\n res = JSON.parse(response);\n } else {\n res = response as SourceConfigResponse;\n }\n } catch (err) {\n this.onError(err, SOURCE_CONFIG_RESOLUTION_ERROR);\n return;\n }\n\n if (!isValidSourceConfig(res)) {\n this.onError(new Error(SOURCE_CONFIG_RESOLUTION_ERROR));\n return;\n }\n\n // Log error and abort if source is disabled\n if (res.source.enabled === false) {\n this.logger.error(SOURCE_DISABLED_ERROR);\n return;\n }\n\n // set the values in state for reporting slice\n updateReportingState(res);\n\n const nativeDestinations: Destination[] =\n res.source.destinations.length > 0 ? filterEnabledDestination(res.source.destinations) : [];\n\n // set in the state --> source, destination, lifecycle, reporting\n batch(() => {\n // set source related information in state\n state.source.value = {\n config: res.source.config,\n name: res.source.name,\n id: res.source.id,\n workspaceId: res.source.workspaceId,\n };\n\n // set device mode destination related information in state\n state.nativeDestinations.configuredDestinations.value = nativeDestinations;\n\n // set the desired optional plugins\n state.plugins.pluginsToLoadFromConfig.value = state.loadOptions.value.plugins ?? [];\n\n updateConsentsState(res);\n\n // set application lifecycle state\n state.lifecycle.status.value = 'configured';\n });\n }\n\n /**\n * A function to fetch source config either from /sourceConfig endpoint\n * or from getSourceConfig load option\n * @returns\n */\n getConfig() {\n const sourceConfigFunc = state.loadOptions.value.getSourceConfig;\n if (sourceConfigFunc) {\n if (!isFunction(sourceConfigFunc)) {\n this.logger.error(SOURCE_CONFIG_OPTION_ERROR(CONFIG_MANAGER));\n return;\n }\n\n // Fetch source config from the function\n const res = sourceConfigFunc();\n\n if (res instanceof Promise) {\n res\n .then(pRes => this.processConfig(pRes as SourceConfigResponse))\n .catch(err => {\n this.onError(err, 'SourceConfig');\n });\n } else {\n this.processConfig(res as SourceConfigResponse);\n }\n } else {\n // Fetch source configuration from the configured URL\n this.httpClient.getAsyncData({\n url: state.lifecycle.sourceConfigUrl.value as string,\n options: {\n headers: {\n 'Content-Type': undefined,\n },\n },\n callback: this.processConfig,\n });\n }\n }\n}\n\nexport { ConfigManager };\n","import type { Destination } from '@rudderstack/analytics-js-common/types/Destination';\nimport type { ConfigResponseDestinationItem } from '../configManager/types';\n\n/**\n * A function to filter enabled destinations and map to required properties only\n * @param destinations\n *\n * @returns Destination[]\n */\nconst filterEnabledDestination = (destinations: ConfigResponseDestinationItem[]): Destination[] => {\n const nativeDestinations: Destination[] = [];\n destinations.forEach((destination: ConfigResponseDestinationItem) => {\n if (destination.enabled && !destination.deleted) {\n nativeDestinations.push({\n id: destination.id,\n displayName: destination.destinationDefinition.displayName,\n config: destination.config,\n shouldApplyDeviceModeTransformation:\n destination.shouldApplyDeviceModeTransformation || false,\n propagateEventsUntransformedOnError:\n destination.propagateEventsUntransformedOnError || false,\n userFriendlyId: `${destination.destinationDefinition.displayName.replaceAll(' ', '-')}___${\n destination.id\n }`,\n });\n }\n });\n return nativeDestinations;\n};\n\nexport { filterEnabledDestination };\n","/**\n * To get the timezone of the user\n *\n * @returns string\n */\nconst getTimezone = (): string => {\n // Not susceptible to super-linear backtracking\n // eslint-disable-next-line sonarjs/slow-regex\n const timezone = /([A-Z]+[+-]\\d+)/.exec(new Date().toString());\n return timezone?.[1] ? timezone[1] : 'NA';\n};\n\nexport { getTimezone };\n","import { isUndefined } from '@rudderstack/analytics-js-common/utilities/checks';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport { getReferringDomain, getUrlWithoutHash } from './url';\n\n/**\n * Get the referrer URL\n * @returns The referrer URL\n */\nconst getReferrer = (): string => document?.referrer || '$direct';\n\n/**\n * To get the canonical URL of the page\n * @returns canonical URL\n */\nconst getCanonicalUrl = (): string => {\n const tags = document.getElementsByTagName('link');\n let canonicalUrl = '';\n\n for (let i = 0; tags[i]; i += 1) {\n const tag = tags[i] as HTMLLinkElement;\n if (tag.getAttribute('rel') === 'canonical' && !canonicalUrl) {\n canonicalUrl = tag.getAttribute('href') ?? '';\n break;\n }\n }\n\n return canonicalUrl;\n};\n\nconst getUserAgent = (): Nullable => {\n if (isUndefined(globalThis.navigator)) {\n return null;\n }\n\n let { userAgent } = globalThis.navigator;\n const { brave } = globalThis.navigator as any;\n\n // For supporting Brave browser detection,\n // add \"Brave/\" to the user agent with the version value from the Chrome component\n if (brave && Object.getPrototypeOf(brave).isBrave) {\n // Example:\n // Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36\n const matchedArr = userAgent.match(/(chrome)\\/([\\w.]+)/i);\n\n if (matchedArr) {\n userAgent = `${userAgent} Brave/${matchedArr[2]}`;\n }\n }\n\n return userAgent;\n};\n\nconst getLanguage = (): Nullable => {\n if (isUndefined(globalThis.navigator)) {\n return null;\n }\n\n return globalThis.navigator.language ?? (globalThis.navigator as any).browserLanguage;\n};\n\n/**\n * Default page properties\n * @returns Default page properties\n */\nconst getDefaultPageProperties = (): Record => {\n const canonicalUrl = getCanonicalUrl();\n let path = globalThis.location.pathname;\n const { href: tabUrl } = globalThis.location;\n let pageUrl = tabUrl;\n const { search } = globalThis.location;\n\n // If valid canonical URL is provided use this as page URL.\n if (canonicalUrl) {\n try {\n const urlObj = new URL(canonicalUrl);\n // If existing, query params of canonical URL will be used instead of the location.search ones\n if (urlObj.search === '') {\n pageUrl = canonicalUrl + search;\n } else {\n pageUrl = canonicalUrl;\n }\n\n path = urlObj.pathname;\n } catch (err) {\n // Do nothing\n }\n }\n\n const url = getUrlWithoutHash(pageUrl);\n const { title } = document;\n const referrer = getReferrer();\n return {\n path,\n referrer,\n referring_domain: getReferringDomain(referrer),\n search,\n title,\n url,\n tab_url: tabUrl,\n };\n};\n\nexport { getCanonicalUrl, getReferrer, getUserAgent, getLanguage, getDefaultPageProperties };\n","import { legacyJSEngineRequiredPolyfills } from '../detection/dom';\n\n// eslint-disable-next-line no-constant-condition\n// @ts-expect-error we're dynamically filling this value during build\n// eslint-disable-next-line no-constant-condition\nconst POLYFILL_URL = '__RS_POLYFILLIO_SDK_URL__'\n ? `__RS_POLYFILLIO_SDK_URL__?version=3.111.0&features=${Object.keys(\n legacyJSEngineRequiredPolyfills,\n ).join('%2C')}`\n : '';\n\nconst POLYFILL_LOAD_TIMEOUT = 10 * 1000; // 10 seconds\n\nconst POLYFILL_SCRIPT_ID = 'rudderstackPolyfill';\n\nexport { POLYFILL_URL, POLYFILL_LOAD_TIMEOUT, POLYFILL_SCRIPT_ID };\n","import type { IErrorHandler } from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { IExternalSrcLoader } from '@rudderstack/analytics-js-common/services/ExternalSrcLoader/types';\nimport { ExternalSrcLoader } from '@rudderstack/analytics-js-common/services/ExternalSrcLoader';\nimport { batch, effect } from '@preact/signals-core';\nimport {\n COOKIE_STORAGE,\n LOCAL_STORAGE,\n SESSION_STORAGE,\n} from '@rudderstack/analytics-js-common/constants/storages';\nimport { CAPABILITIES_MANAGER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport { getTimezone } from '@rudderstack/analytics-js-common/utilities/timezone';\nimport { isValidURL } from '@rudderstack/analytics-js-common/utilities/url';\nimport { isDefinedAndNotNull } from '@rudderstack/analytics-js-common/utilities/checks';\nimport type { IHttpClient } from '@rudderstack/analytics-js-common/types/HttpClient';\nimport {\n INVALID_POLYFILL_URL_WARNING,\n POLYFILL_SCRIPT_LOAD_ERROR,\n} from '../../constants/logMessages';\nimport { getLanguage, getUserAgent } from '../utilities/page';\nimport { getStorageEngine } from '../../services/StoreManager/storages';\nimport { state } from '../../state';\nimport { getUserAgentClientHint } from './detection/clientHint';\nimport type { ICapabilitiesManager } from './types';\nimport { POLYFILL_LOAD_TIMEOUT, POLYFILL_SCRIPT_ID, POLYFILL_URL } from './polyfill';\nimport {\n getScreenDetails,\n hasBeacon,\n hasCrypto,\n hasUAClientHints,\n isIE11,\n isLegacyJSEngine,\n isStorageAvailable,\n} from './detection';\nimport { detectAdBlockers } from './detection/adBlockers';\nimport { debounce } from '../utilities/globals';\n\n// TODO: replace direct calls to detection methods with state values when possible\nclass CapabilitiesManager implements ICapabilitiesManager {\n httpClient: IHttpClient;\n errorHandler: IErrorHandler;\n logger: ILogger;\n externalSrcLoader: IExternalSrcLoader;\n\n constructor(httpClient: IHttpClient, errorHandler: IErrorHandler, logger: ILogger) {\n this.httpClient = httpClient;\n this.errorHandler = errorHandler;\n this.logger = logger;\n this.externalSrcLoader = new ExternalSrcLoader(this.errorHandler, this.logger);\n this.onError = this.onError.bind(this);\n this.onReady = this.onReady.bind(this);\n }\n\n init() {\n this.prepareBrowserCapabilities();\n this.attachWindowListeners();\n }\n\n /**\n * Detect supported capabilities and set values in state\n */\n // eslint-disable-next-line class-methods-use-this\n detectBrowserCapabilities() {\n batch(() => {\n // Storage related details\n state.capabilities.storage.isCookieStorageAvailable.value = isStorageAvailable(\n COOKIE_STORAGE,\n getStorageEngine(COOKIE_STORAGE),\n this.logger,\n );\n state.capabilities.storage.isLocalStorageAvailable.value = isStorageAvailable(\n LOCAL_STORAGE,\n undefined,\n this.logger,\n );\n state.capabilities.storage.isSessionStorageAvailable.value = isStorageAvailable(\n SESSION_STORAGE,\n undefined,\n this.logger,\n );\n\n // Browser feature detection details\n state.capabilities.isBeaconAvailable.value = hasBeacon();\n state.capabilities.isUaCHAvailable.value = hasUAClientHints();\n state.capabilities.isCryptoAvailable.value = hasCrypto();\n state.capabilities.isIE11.value = isIE11();\n state.capabilities.isOnline.value = globalThis.navigator.onLine;\n\n // Get page context details\n state.context.userAgent.value = getUserAgent();\n state.context.locale.value = getLanguage();\n state.context.screen.value = getScreenDetails();\n state.context.timezone.value = getTimezone();\n\n if (hasUAClientHints()) {\n getUserAgentClientHint((uach?: UADataValues) => {\n state.context['ua-ch'].value = uach;\n }, state.loadOptions.value.uaChTrackLevel);\n }\n });\n\n // Ad blocker detection\n effect(() => {\n if (\n state.loadOptions.value.sendAdblockPage === true &&\n state.lifecycle.sourceConfigUrl.value !== undefined\n ) {\n detectAdBlockers(this.httpClient);\n }\n });\n }\n\n /**\n * Detect if polyfills are required and then load script from polyfill URL\n */\n prepareBrowserCapabilities() {\n state.capabilities.isLegacyDOM.value = isLegacyJSEngine();\n const customPolyfillUrl = state.loadOptions.value.polyfillURL;\n let polyfillUrl = POLYFILL_URL;\n if (isDefinedAndNotNull(customPolyfillUrl)) {\n if (isValidURL(customPolyfillUrl)) {\n polyfillUrl = customPolyfillUrl;\n } else {\n this.logger.warn(INVALID_POLYFILL_URL_WARNING(CAPABILITIES_MANAGER, customPolyfillUrl));\n }\n }\n\n const shouldLoadPolyfill =\n state.loadOptions.value.polyfillIfRequired &&\n state.capabilities.isLegacyDOM.value &&\n isValidURL(polyfillUrl);\n\n if (shouldLoadPolyfill) {\n const isDefaultPolyfillService = polyfillUrl !== state.loadOptions.value.polyfillURL;\n if (isDefaultPolyfillService) {\n // write key specific callback\n // NOTE: we're not putting this into RudderStackGlobals as providing the property path to the callback function in the polyfill URL is not possible\n const polyfillCallbackName = `RS_polyfillCallback_${state.lifecycle.writeKey.value}`;\n\n const polyfillCallback = (): void => {\n this.onReady();\n\n // Remove the entry from window so we don't leave room for calling it again\n delete (globalThis as any)[polyfillCallbackName];\n };\n\n (globalThis as any)[polyfillCallbackName] = polyfillCallback;\n\n polyfillUrl = `${polyfillUrl}&callback=${polyfillCallbackName}`;\n }\n\n this.externalSrcLoader.loadJSFile({\n url: polyfillUrl,\n id: POLYFILL_SCRIPT_ID,\n async: true,\n timeout: POLYFILL_LOAD_TIMEOUT,\n callback: (scriptId?: string) => {\n if (!scriptId) {\n this.onError(new Error(POLYFILL_SCRIPT_LOAD_ERROR(POLYFILL_SCRIPT_ID, polyfillUrl)));\n } else if (!isDefaultPolyfillService) {\n this.onReady();\n }\n },\n });\n } else {\n this.onReady();\n }\n }\n\n /**\n * Attach listeners to window to observe event that update capabilities state values\n */\n attachWindowListeners() {\n globalThis.addEventListener('offline', () => {\n state.capabilities.isOnline.value = false;\n });\n\n globalThis.addEventListener('online', () => {\n state.capabilities.isOnline.value = true;\n });\n\n globalThis.addEventListener(\n 'resize',\n debounce(() => {\n state.context.screen.value = getScreenDetails();\n }, this),\n );\n }\n\n /**\n * Set the lifecycle status to next phase\n */\n // eslint-disable-next-line class-methods-use-this\n onReady() {\n this.detectBrowserCapabilities();\n state.lifecycle.status.value = 'browserCapabilitiesReady';\n }\n\n /**\n * Handles error\n * @param error The error object\n */\n onError(error: unknown): void {\n this.errorHandler.onError(error, CAPABILITIES_MANAGER);\n }\n}\n\nexport { CapabilitiesManager };\n","const getUserAgentClientHint = (callback: (uaCH?: UADataValues) => void, level = 'none') => {\n if (level === 'none') {\n callback(undefined);\n }\n if (level === 'default') {\n callback(navigator.userAgentData);\n }\n if (level === 'full') {\n navigator.userAgentData\n ?.getHighEntropyValues([\n 'architecture',\n 'bitness',\n 'brands',\n 'mobile',\n 'model',\n 'platform',\n 'platformVersion',\n 'uaFullVersion',\n 'fullVersionList',\n 'wow64',\n ])\n .then((ua: any) => {\n callback(ua);\n })\n .catch(() => {\n callback();\n });\n }\n};\n\nexport { getUserAgentClientHint };\n","import type { IHttpClient } from '@rudderstack/analytics-js-common/types/HttpClient';\nimport { state } from '../../../state';\n\nconst detectAdBlockers = (httpClient: IHttpClient): void => {\n // Apparently, '?view=ad' is a query param that is blocked by majority of adblockers\n\n // Use source config URL here as it is very unlikely to be blocked by adblockers\n // Only the extra query param should make it vulnerable to adblockers\n // This will work even if the users proxies it.\n // The edge case where this doesn't work is when HEAD method is not allowed by the server (user's)\n const baseUrl = new URL(state.lifecycle.sourceConfigUrl.value as string);\n const url = `${baseUrl.origin}${baseUrl.pathname}?view=ad`;\n\n httpClient.getAsyncData({\n url,\n options: {\n // We actually don't need the response from the request, so we are using HEAD\n method: 'HEAD',\n headers: {\n 'Content-Type': undefined,\n },\n },\n isRawResponse: true,\n callback: (result, details) => {\n // not ad blocked if the request is successful or it is not internally redirected on the client side\n // Often adblockers instead of blocking the request, they redirect it to an internal URL\n state.capabilities.isAdBlocked.value =\n details?.error !== undefined || details?.xhr?.responseURL !== url;\n },\n });\n};\n\nexport { detectAdBlockers };\n","const CHANNEL = 'web';\n\n// These are the top-level elements in the standard RudderStack event spec\nconst TOP_LEVEL_ELEMENTS = ['integrations', 'anonymousId', 'originalTimestamp'];\n\n// Reserved elements in the context of standard RudderStack event spec\n// Typically, these elements are not allowed to be overridden by the user\nconst CONTEXT_RESERVED_ELEMENTS = ['library', 'consentManagement', 'userAgent', 'ua-ch', 'screen'];\n\n// Reserved elements in the standard RudderStack event spec\nconst RESERVED_ELEMENTS = [\n 'id',\n 'anonymous_id',\n 'user_id',\n 'sent_at',\n 'timestamp',\n 'received_at',\n 'original_timestamp',\n 'event',\n 'event_text',\n 'channel',\n 'context_ip',\n 'context_request_ip',\n 'context_passed_ip',\n 'group_id',\n 'previous_id',\n];\n\nexport { CHANNEL, TOP_LEVEL_ELEMENTS, CONTEXT_RESERVED_ELEMENTS, RESERVED_ELEMENTS };\n","/**\n * A function to check given value is a number or not\n * @param num input value\n * @returns boolean\n */\nconst isNumber = (num: any): boolean => typeof num === 'number' && !Number.isNaN(num);\n\n/**\n * A function to check given number has minimum length or not\n * @param minimumLength minimum length\n * @param num input number\n * @returns boolean\n */\nconst hasMinLength = (minimumLength: number, num: number) => num.toString().length >= minimumLength;\n\n/**\n * A function to check given value is a positive integer or not\n * @param num input value\n * @returns boolean\n */\nconst isPositiveInteger = (num: any) => isNumber(num) && num >= 0 && Number.isInteger(num);\n\nexport { isNumber, hasMinLength, isPositiveInteger };\n","import type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { SessionInfo } from '@rudderstack/analytics-js-common/types/Session';\nimport { USER_SESSION_MANAGER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport type { StorageType } from '@rudderstack/analytics-js-common/types/Storage';\nimport {\n COOKIE_STORAGE,\n LOCAL_STORAGE,\n MEMORY_STORAGE,\n SESSION_STORAGE,\n} from '@rudderstack/analytics-js-common/constants/storages';\nimport { generateUUID } from '@rudderstack/analytics-js-common/utilities/uuId';\nimport { DEFAULT_SESSION_TIMEOUT_MS } from '../../constants/timeouts';\nimport { INVALID_SESSION_ID_WARNING } from '../../constants/logMessages';\nimport { hasMinLength, isPositiveInteger } from '../utilities/number';\n\nconst MIN_SESSION_ID_LENGTH = 10;\n\n/**\n * A function to validate current session and return true/false depending on that\n * @returns boolean\n */\nconst hasSessionExpired = (expiresAt?: number): boolean => {\n const timestamp = Date.now();\n return Boolean(!expiresAt || timestamp > expiresAt);\n};\n\n/**\n * A function to generate session id\n * @returns number\n */\nconst generateSessionId = (): number => Date.now();\n\n/**\n * Function to validate user provided sessionId\n * @param {number} sessionId\n * @param logger logger\n * @returns\n */\nconst isManualSessionIdValid = (sessionId: number | undefined, logger: ILogger): boolean => {\n if (\n !sessionId ||\n !isPositiveInteger(sessionId) ||\n !hasMinLength(MIN_SESSION_ID_LENGTH, sessionId)\n ) {\n logger.warn(INVALID_SESSION_ID_WARNING(USER_SESSION_MANAGER, sessionId, MIN_SESSION_ID_LENGTH));\n return false;\n }\n return true;\n};\n\n/**\n * A function to generate new auto tracking session\n * @param sessionTimeout current timestamp\n * @returns SessionInfo\n */\nconst generateAutoTrackingSession = (sessionTimeout?: number): SessionInfo => {\n const timestamp = Date.now();\n const timeout: number = sessionTimeout || DEFAULT_SESSION_TIMEOUT_MS;\n return {\n id: timestamp, // set the current timestamp\n expiresAt: timestamp + timeout, // set the expiry time of the session\n timeout,\n sessionStart: undefined,\n autoTrack: true,\n };\n};\n\n/**\n * A function to generate new manual tracking session\n * @param id Provided sessionId\n * @param logger Logger module\n * @returns SessionInfo\n */\nconst generateManualTrackingSession = (id: number | undefined, logger: ILogger): SessionInfo => {\n const sessionId: number = isManualSessionIdValid(id, logger)\n ? (id as number)\n : generateSessionId();\n return {\n id: sessionId,\n sessionStart: undefined,\n manualTrack: true,\n };\n};\n\nconst isStorageTypeValidForStoringData = (storageType: StorageType): boolean =>\n Boolean(\n storageType === COOKIE_STORAGE ||\n storageType === LOCAL_STORAGE ||\n storageType === SESSION_STORAGE ||\n storageType === MEMORY_STORAGE,\n );\n\n/**\n * Generate a new anonymousId\n * @returns string anonymousID\n */\nconst generateAnonymousId = (): string => generateUUID();\n\nexport {\n hasSessionExpired,\n generateSessionId,\n generateAutoTrackingSession,\n generateManualTrackingSession,\n MIN_SESSION_ID_LENGTH,\n isStorageTypeValidForStoringData,\n generateAnonymousId,\n};\n","import { clone } from 'ramda';\nimport { isString, isUndefined } from '@rudderstack/analytics-js-common/utilities/checks';\nimport type { ApiObject } from '@rudderstack/analytics-js-common/types/ApiObject';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport type { ApiOptions } from '@rudderstack/analytics-js-common/types/EventApi';\nimport type { RudderContext, RudderEvent } from '@rudderstack/analytics-js-common/types/Event';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { IntegrationOpts } from '@rudderstack/analytics-js-common/types/Integration';\nimport {\n isNonEmptyObject,\n isObjectLiteralAndNotNull,\n mergeDeepRight,\n} from '@rudderstack/analytics-js-common/utilities/object';\nimport { EVENT_MANAGER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport { generateUUID } from '@rudderstack/analytics-js-common/utilities/uuId';\nimport { getCurrentTimeFormatted } from '@rudderstack/analytics-js-common/utilities/timestamp';\nimport { NO_STORAGE } from '@rudderstack/analytics-js-common/constants/storages';\nimport { DEFAULT_INTEGRATIONS_CONFIG } from '@rudderstack/analytics-js-common/constants/integrationsConfig';\nimport type { StorageType } from '@rudderstack/analytics-js-common/types/Storage';\nimport { state } from '../../state';\nimport {\n INVALID_CONTEXT_OBJECT_WARNING,\n RESERVED_KEYWORD_WARNING,\n} from '../../constants/logMessages';\nimport {\n CHANNEL,\n CONTEXT_RESERVED_ELEMENTS,\n RESERVED_ELEMENTS,\n TOP_LEVEL_ELEMENTS,\n} from './constants';\nimport { getDefaultPageProperties } from '../utilities/page';\nimport { extractUTMParameters } from '../utilities/url';\nimport { generateAnonymousId, isStorageTypeValidForStoringData } from '../userSessionManager/utils';\n\n/**\n * To get the page properties for context object\n * @param pageProps Page properties\n * @returns page properties object for context\n */\nconst getContextPageProperties = (pageProps?: ApiObject): ApiObject => {\n // Need to get updated page details on each event as an event to notify on SPA URL changes does not seem to exist\n const curPageProps = getDefaultPageProperties();\n\n const ctxPageProps: ApiObject = {};\n Object.keys(curPageProps).forEach((key: string) => {\n ctxPageProps[key] = pageProps?.[key] || curPageProps[key];\n });\n\n ctxPageProps.initial_referrer =\n pageProps?.initial_referrer || state.session.initialReferrer.value;\n\n ctxPageProps.initial_referring_domain =\n pageProps?.initial_referring_domain || state.session.initialReferringDomain.value;\n return ctxPageProps;\n};\n\n/**\n * Add any missing default page properties using values from options and defaults\n * @param properties Input page properties\n * @param options API options\n */\nconst getUpdatedPageProperties = (\n properties: ApiObject,\n options?: Nullable,\n): ApiObject => {\n const optionsPageProps = ((options as ApiOptions)?.page as ApiObject) || {};\n const pageProps = properties;\n\n // Need to get updated page details on each event as an event to notify on SPA URL changes does not seem to exist\n const curPageProps = getDefaultPageProperties();\n\n Object.keys(curPageProps).forEach((key: string) => {\n if (isUndefined(pageProps[key])) {\n pageProps[key] = optionsPageProps[key] || curPageProps[key];\n }\n });\n\n if (isUndefined(pageProps.initial_referrer)) {\n pageProps.initial_referrer =\n optionsPageProps.initial_referrer || state.session.initialReferrer.value;\n }\n\n if (isUndefined(pageProps.initial_referring_domain)) {\n pageProps.initial_referring_domain =\n optionsPageProps.initial_referring_domain || state.session.initialReferringDomain.value;\n }\n\n return pageProps;\n};\n\n/**\n * Utility to check for reserved keys in the input object\n * @param obj Generic object\n * @param parentKeyPath Object's parent key path\n * @param logger Logger instance\n */\nconst checkForReservedElementsInObject = (\n obj: Nullable | RudderContext | undefined,\n parentKeyPath: string,\n logger: ILogger,\n): void => {\n if (isObjectLiteralAndNotNull(obj)) {\n Object.keys(obj as object).forEach(property => {\n if (\n RESERVED_ELEMENTS.includes(property) ||\n RESERVED_ELEMENTS.includes(property.toLowerCase())\n ) {\n logger.warn(\n RESERVED_KEYWORD_WARNING(EVENT_MANAGER, property, parentKeyPath, RESERVED_ELEMENTS),\n );\n }\n });\n }\n};\n\n/**\n * Checks for reserved keys in traits, properties, and contextual traits\n * @param rudderEvent Generated rudder event\n * @param logger Logger instance\n */\nconst checkForReservedElements = (rudderEvent: RudderEvent, logger: ILogger): void => {\n // properties, traits, contextualTraits are either undefined or object\n const { properties, traits, context } = rudderEvent;\n const { traits: contextualTraits } = context;\n\n checkForReservedElementsInObject(properties, 'properties', logger);\n checkForReservedElementsInObject(traits, 'traits', logger);\n checkForReservedElementsInObject(contextualTraits, 'context.traits', logger);\n};\n\n/**\n * Overrides the top-level event properties with data from API options\n * @param rudderEvent Generated rudder event\n * @param options API options\n */\nconst updateTopLevelEventElements = (rudderEvent: RudderEvent, options: ApiOptions): void => {\n if (options.anonymousId && isString(options.anonymousId)) {\n // eslint-disable-next-line no-param-reassign\n rudderEvent.anonymousId = options.anonymousId;\n }\n\n if (isNonEmptyObject(options.integrations)) {\n // eslint-disable-next-line no-param-reassign\n rudderEvent.integrations = options.integrations;\n }\n\n if (options.originalTimestamp && isString(options.originalTimestamp)) {\n // eslint-disable-next-line no-param-reassign\n rudderEvent.originalTimestamp = options.originalTimestamp;\n }\n};\n\n/**\n * To merge the contextual information in API options with existing data\n * @param rudderContext Generated rudder event\n * @param options API options\n * @param logger Logger instance\n */\nconst getMergedContext = (\n rudderContext: RudderContext,\n options: ApiOptions,\n logger: ILogger,\n): RudderContext => {\n let context = rudderContext;\n Object.keys(options).forEach(key => {\n if (!TOP_LEVEL_ELEMENTS.includes(key) && !CONTEXT_RESERVED_ELEMENTS.includes(key)) {\n if (key !== 'context') {\n context = mergeDeepRight(context, {\n [key]: options[key],\n });\n } else if (!isUndefined(options[key]) && isObjectLiteralAndNotNull(options[key])) {\n const tempContext: Record = {};\n Object.keys(options[key] as Record).forEach(e => {\n if (!CONTEXT_RESERVED_ELEMENTS.includes(e)) {\n tempContext[e] = (options[key] as Record)[e];\n }\n });\n context = mergeDeepRight(context, {\n ...tempContext,\n });\n } else {\n logger.warn(INVALID_CONTEXT_OBJECT_WARNING(EVENT_MANAGER));\n }\n }\n });\n return context;\n};\n\n/**\n * Updates rudder event object with data from the API options\n * @param rudderEvent Generated rudder event\n * @param options API options\n */\nconst processOptions = (\n rudderEvent: RudderEvent,\n options: Nullable | undefined,\n logger: ILogger,\n): void => {\n // Only allow object type for options\n if (isObjectLiteralAndNotNull(options)) {\n updateTopLevelEventElements(rudderEvent, options as ApiOptions);\n // eslint-disable-next-line no-param-reassign\n rudderEvent.context = getMergedContext(rudderEvent.context, options as ApiOptions, logger);\n }\n};\n\n/**\n * Returns the final integrations config for the event based on the global config and event's config\n * @param integrationsConfig Event's integrations config\n * @returns Final integrations config\n */\nconst getEventIntegrationsConfig = (integrationsConfig?: IntegrationOpts) => {\n let finalIntgConfig: IntegrationOpts;\n if (state.loadOptions.value.useGlobalIntegrationsConfigInEvents) {\n // Prefer the integrations object from the consent API response over the load API integrations object\n finalIntgConfig =\n state.consents.postConsent.value.integrations ??\n state.nativeDestinations.loadOnlyIntegrations.value;\n } else if (integrationsConfig) {\n finalIntgConfig = integrationsConfig;\n } else {\n finalIntgConfig = DEFAULT_INTEGRATIONS_CONFIG;\n }\n return clone(finalIntgConfig);\n};\n\n/**\n * Enrich the base event object with data from state and the API options\n * @param rudderEvent RudderEvent object\n * @param options API options\n * @param pageProps Page properties\n * @param logger logger\n * @returns Enriched RudderEvent object\n */\nconst getEnrichedEvent = (\n rudderEvent: Partial,\n options: Nullable | undefined,\n pageProps: ApiObject | undefined,\n logger: ILogger,\n): RudderEvent => {\n const commonEventData = {\n channel: CHANNEL,\n context: {\n traits: clone(state.session.userTraits.value),\n sessionId: state.session.sessionInfo.value.id || undefined,\n sessionStart: state.session.sessionInfo.value.sessionStart || undefined,\n // Add 'consentManagement' only if consent management is enabled\n ...(state.consents.enabled.value && {\n consentManagement: {\n deniedConsentIds: clone(state.consents.data.value.deniedConsentIds),\n allowedConsentIds: clone(state.consents.data.value.allowedConsentIds),\n provider: state.consents.provider.value,\n resolutionStrategy: state.consents.resolutionStrategy.value,\n },\n }),\n 'ua-ch': state.context['ua-ch'].value,\n app: state.context.app.value,\n library: state.context.library.value,\n userAgent: state.context.userAgent.value,\n os: state.context.os.value,\n locale: state.context.locale.value,\n screen: state.context.screen.value,\n campaign: extractUTMParameters(globalThis.location.href),\n page: getContextPageProperties(pageProps),\n timezone: state.context.timezone.value,\n // Add auto tracking information\n ...(state.autoTrack.enabled.value && {\n autoTrack: {\n ...(state.autoTrack.pageLifecycle.enabled.value && {\n page: {\n visitId: state.autoTrack.pageLifecycle.visitId.value,\n },\n }),\n },\n }),\n },\n originalTimestamp: getCurrentTimeFormatted(),\n messageId: generateUUID(),\n userId: rudderEvent.userId || state.session.userId.value,\n } as Partial;\n\n if (\n !isStorageTypeValidForStoringData(state.storage.entries.value.anonymousId?.type as StorageType)\n ) {\n // Generate new anonymous id for each request\n commonEventData.anonymousId = generateAnonymousId();\n } else {\n // Type casting to string as the user session manager will take care of initializing the value\n commonEventData.anonymousId = state.session.anonymousId.value as string;\n }\n\n // set truly anonymous tracking flag\n if (state.storage.trulyAnonymousTracking.value) {\n (commonEventData.context as RudderContext).trulyAnonymousTracking = true;\n }\n\n if (rudderEvent.type === 'identify') {\n (commonEventData.context as RudderContext).traits =\n state.storage.entries.value.userTraits?.type !== NO_STORAGE\n ? clone(state.session.userTraits.value)\n : (rudderEvent.context as RudderContext).traits;\n }\n\n if (rudderEvent.type === 'group') {\n if (rudderEvent.groupId || state.session.groupId.value) {\n commonEventData.groupId = rudderEvent.groupId || state.session.groupId.value;\n }\n\n if (rudderEvent.traits || state.session.groupTraits.value) {\n commonEventData.traits =\n state.storage.entries.value.groupTraits?.type !== NO_STORAGE\n ? clone(state.session.groupTraits.value)\n : rudderEvent.traits;\n }\n }\n\n const processedEvent = mergeDeepRight(rudderEvent, commonEventData) as RudderEvent;\n // Set the default values for the event properties\n // matching with v1.1 payload\n if (processedEvent.event === undefined) {\n processedEvent.event = null;\n }\n\n if (processedEvent.properties === undefined) {\n processedEvent.properties = null;\n }\n\n processOptions(processedEvent, options, logger);\n checkForReservedElements(processedEvent, logger);\n\n // Update the integrations config for the event\n processedEvent.integrations = getEventIntegrationsConfig(processedEvent.integrations);\n\n return processedEvent;\n};\n\nexport {\n getUpdatedPageProperties,\n getEnrichedEvent,\n checkForReservedElements,\n checkForReservedElementsInObject,\n updateTopLevelEventElements,\n getContextPageProperties,\n getMergedContext,\n processOptions,\n getEventIntegrationsConfig, // For testing\n};\n","import type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport type { ApiObject } from '@rudderstack/analytics-js-common/types/ApiObject';\nimport type { APIEvent, ApiOptions } from '@rudderstack/analytics-js-common/types/EventApi';\nimport type { RudderContext, RudderEvent } from '@rudderstack/analytics-js-common/types/Event';\nimport { getEnrichedEvent, getUpdatedPageProperties } from './utilities';\n\nclass RudderEventFactory {\n logger: ILogger;\n\n constructor(logger: ILogger) {\n this.logger = logger;\n }\n\n /**\n * Generate a 'page' event based on the user-input fields\n * @param category Page's category\n * @param name Page name\n * @param properties Page properties\n * @param options API options\n */\n generatePageEvent(\n category?: string,\n name?: string,\n properties?: Nullable,\n options?: Nullable,\n ): RudderEvent {\n let props = properties ?? {};\n props = getUpdatedPageProperties(props, options);\n\n const pageEvent: Partial = {\n properties: props,\n name,\n category,\n type: 'page',\n };\n\n return getEnrichedEvent(pageEvent, options, props, this.logger);\n }\n\n /**\n * Generate a 'track' event based on the user-input fields\n * @param event The event name\n * @param properties Event properties\n * @param options API options\n */\n generateTrackEvent(\n event: string,\n properties?: Nullable,\n options?: Nullable,\n ): RudderEvent {\n const trackEvent: Partial = {\n properties,\n event,\n type: 'track',\n };\n\n return getEnrichedEvent(trackEvent, options, undefined, this.logger);\n }\n\n /**\n * Generate an 'identify' event based on the user-input fields\n * @param userId New user ID\n * @param traits new traits\n * @param options API options\n */\n generateIdentifyEvent(\n userId?: Nullable,\n traits?: Nullable,\n options?: Nullable,\n ): RudderEvent {\n const identifyEvent: Partial = {\n userId,\n type: 'identify',\n context: {\n traits,\n } as RudderContext,\n };\n\n return getEnrichedEvent(identifyEvent, options, undefined, this.logger);\n }\n\n /**\n * Generate an 'alias' event based on the user-input fields\n * @param to New user ID\n * @param from Old user ID\n * @param options API options\n */\n generateAliasEvent(to: string, from?: string, options?: Nullable): RudderEvent {\n const aliasEvent: Partial = {\n previousId: from,\n type: 'alias',\n };\n\n const enrichedEvent = getEnrichedEvent(aliasEvent, options, undefined, this.logger);\n // override the User ID from the API inputs\n enrichedEvent.userId = to ?? enrichedEvent.userId;\n return enrichedEvent;\n }\n\n /**\n * Generate a 'group' event based on the user-input fields\n * @param groupId New group ID\n * @param traits new group traits\n * @param options API options\n */\n generateGroupEvent(\n groupId?: Nullable,\n traits?: Nullable,\n options?: Nullable,\n ): RudderEvent {\n const groupEvent: Partial = {\n type: 'group',\n };\n\n if (groupId) {\n groupEvent.groupId = groupId;\n }\n\n if (traits) {\n groupEvent.traits = traits;\n }\n\n return getEnrichedEvent(groupEvent, options, undefined, this.logger);\n }\n\n /**\n * Generates a new RudderEvent object based on the user-input fields\n * @param event API event parameters object\n * @returns A RudderEvent object\n */\n create(event: APIEvent): RudderEvent {\n let eventObj: RudderEvent | undefined;\n switch (event.type) {\n case 'page':\n eventObj = this.generatePageEvent(\n event.category,\n event.name,\n event.properties,\n event.options,\n );\n break;\n case 'track':\n eventObj = this.generateTrackEvent(event.name as string, event.properties, event.options);\n break;\n case 'identify':\n eventObj = this.generateIdentifyEvent(event.userId, event.traits, event.options);\n break;\n case 'alias':\n eventObj = this.generateAliasEvent(event.to as string, event.from, event.options);\n break;\n case 'group':\n default:\n eventObj = this.generateGroupEvent(event.groupId, event.traits, event.options);\n break;\n }\n return eventObj;\n }\n}\n\nexport { RudderEventFactory };\n","import type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { IErrorHandler } from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport type { APIEvent } from '@rudderstack/analytics-js-common/types/EventApi';\nimport type { IEventManager } from './types';\nimport { RudderEventFactory } from './RudderEventFactory';\nimport type { IEventRepository } from '../eventRepository/types';\nimport type { IUserSessionManager } from '../userSessionManager/types';\n\n/**\n * A service to generate valid event payloads and queue them for processing\n */\nclass EventManager implements IEventManager {\n eventRepository: IEventRepository;\n userSessionManager: IUserSessionManager;\n errorHandler: IErrorHandler;\n logger: ILogger;\n eventFactory: RudderEventFactory;\n\n /**\n *\n * @param eventRepository Event repository instance\n * @param userSessionManager UserSession Manager instance\n * @param errorHandler Error handler object\n * @param logger Logger object\n */\n constructor(\n eventRepository: IEventRepository,\n userSessionManager: IUserSessionManager,\n errorHandler: IErrorHandler,\n logger: ILogger,\n ) {\n this.eventRepository = eventRepository;\n this.userSessionManager = userSessionManager;\n this.errorHandler = errorHandler;\n this.logger = logger;\n this.eventFactory = new RudderEventFactory(this.logger);\n }\n\n /**\n * Initializes the event manager\n */\n init() {\n this.eventRepository.init();\n }\n\n resume() {\n this.eventRepository.resume();\n }\n\n /**\n * Consumes a new incoming event\n * @param event Incoming event data\n */\n addEvent(event: APIEvent) {\n this.userSessionManager.refreshSession();\n const rudderEvent = this.eventFactory.create(event);\n this.eventRepository.enqueue(rudderEvent, event.callback);\n }\n}\n\nexport { EventManager };\n","/* eslint-disable class-methods-use-this */\nimport { batch, effect } from '@preact/signals-core';\nimport {\n isNonEmptyObject,\n isObjectLiteralAndNotNull,\n mergeDeepRight,\n} from '@rudderstack/analytics-js-common/utilities/object';\nimport {\n isDefinedAndNotNull,\n isDefinedNotNullAndNotEmptyString,\n isNullOrUndefined,\n isString,\n} from '@rudderstack/analytics-js-common/utilities/checks';\nimport type { IPluginsManager } from '@rudderstack/analytics-js-common/types/PluginsManager';\nimport type { IStore, IStoreManager } from '@rudderstack/analytics-js-common/types/Store';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { IErrorHandler } from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport type { SessionInfo } from '@rudderstack/analytics-js-common/types/Session';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport type { ApiObject } from '@rudderstack/analytics-js-common/types/ApiObject';\nimport type { AnonymousIdOptions } from '@rudderstack/analytics-js-common/types/LoadOptions';\nimport { USER_SESSION_MANAGER } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport type { StorageType } from '@rudderstack/analytics-js-common/types/Storage';\nimport {\n COOKIE_STORAGE,\n LOCAL_STORAGE,\n SESSION_STORAGE,\n} from '@rudderstack/analytics-js-common/constants/storages';\nimport type { UserSessionKey } from '@rudderstack/analytics-js-common/types/UserSessionStorage';\nimport type { StorageEntries } from '@rudderstack/analytics-js-common/types/ApplicationState';\nimport type {\n AsyncRequestCallback,\n IHttpClient,\n} from '@rudderstack/analytics-js-common/types/HttpClient';\nimport { stringifyWithoutCircular } from '@rudderstack/analytics-js-common/utilities/json';\nimport { COOKIE_KEYS } from '@rudderstack/analytics-js-cookies/constants/cookies';\nimport {\n CLIENT_DATA_STORE_COOKIE,\n CLIENT_DATA_STORE_LS,\n CLIENT_DATA_STORE_SESSION,\n USER_SESSION_KEYS,\n} from '../../constants/storage';\nimport { storageClientDataStoreNameMap } from '../../services/StoreManager/types';\nimport { DEFAULT_SESSION_TIMEOUT_MS, MIN_SESSION_TIMEOUT_MS } from '../../constants/timeouts';\nimport { defaultSessionConfiguration } from '../../state/slices/session';\nimport { state } from '../../state';\nimport { getStorageEngine } from '../../services/StoreManager/storages';\nimport {\n DATA_SERVER_REQUEST_FAIL_ERROR,\n FAILED_SETTING_COOKIE_FROM_SERVER_ERROR,\n FAILED_SETTING_COOKIE_FROM_SERVER_GLOBAL_ERROR,\n TIMEOUT_NOT_NUMBER_WARNING,\n TIMEOUT_NOT_RECOMMENDED_WARNING,\n TIMEOUT_ZERO_WARNING,\n} from '../../constants/logMessages';\nimport {\n generateAnonymousId,\n generateAutoTrackingSession,\n generateManualTrackingSession,\n hasSessionExpired,\n isStorageTypeValidForStoringData,\n} from './utils';\nimport { getReferringDomain } from '../utilities/url';\nimport { getReferrer } from '../utilities/page';\nimport { DEFAULT_USER_SESSION_VALUES, SERVER_SIDE_COOKIES_DEBOUNCE_TIME } from './constants';\nimport type {\n CallbackFunction,\n CookieData,\n EncryptedCookieData,\n IUserSessionManager,\n UserSessionStorageKeysType,\n} from './types';\nimport { isPositiveInteger } from '../utilities/number';\n\nclass UserSessionManager implements IUserSessionManager {\n storeManager: IStoreManager;\n pluginsManager: IPluginsManager;\n errorHandler: IErrorHandler;\n httpClient: IHttpClient;\n logger: ILogger;\n serverSideCookieDebounceFuncs: Record;\n\n constructor(\n pluginsManager: IPluginsManager,\n storeManager: IStoreManager,\n httpClient: IHttpClient,\n errorHandler: IErrorHandler,\n logger: ILogger,\n ) {\n this.storeManager = storeManager;\n this.pluginsManager = pluginsManager;\n this.logger = logger;\n this.errorHandler = errorHandler;\n this.httpClient = httpClient;\n this.onError = this.onError.bind(this);\n this.serverSideCookieDebounceFuncs = {} as Record;\n }\n\n /**\n * Initialize User session with values from storage\n */\n init() {\n this.syncStorageDataToState();\n\n // Register the effect to sync with storage\n this.registerEffects();\n }\n\n syncStorageDataToState() {\n this.migrateStorageIfNeeded();\n this.migrateDataFromPreviousStorage();\n\n // get the values from storage and set it again\n this.setUserId(this.getUserId());\n this.setUserTraits(this.getUserTraits());\n this.setGroupId(this.getGroupId());\n this.setGroupTraits(this.getGroupTraits());\n const { externalAnonymousIdCookieName, anonymousIdOptions } = state.loadOptions.value;\n let externalAnonymousId;\n if (\n isDefinedAndNotNull(externalAnonymousIdCookieName) &&\n typeof externalAnonymousIdCookieName === 'string'\n ) {\n externalAnonymousId = this.getExternalAnonymousIdByCookieName(externalAnonymousIdCookieName);\n }\n this.setAnonymousId(externalAnonymousId ?? this.getAnonymousId(anonymousIdOptions));\n this.setAuthToken(this.getAuthToken());\n this.setInitialReferrerInfo();\n this.configureSessionTracking();\n }\n\n configureSessionTracking() {\n let sessionInfo = this.getSessionInfo();\n if (this.isPersistenceEnabledForStorageEntry('sessionInfo')) {\n const configuredSessionTrackingInfo = this.getConfiguredSessionTrackingInfo();\n const initialSessionInfo = sessionInfo ?? defaultSessionConfiguration;\n sessionInfo = {\n ...initialSessionInfo,\n ...configuredSessionTrackingInfo,\n // If manualTrack is set to true in the storage, then autoTrack should be false\n autoTrack:\n configuredSessionTrackingInfo.autoTrack && initialSessionInfo.manualTrack !== true,\n };\n // If both autoTrack and manualTrack are disabled, reset the session info to default values\n if (!sessionInfo.autoTrack && sessionInfo.manualTrack !== true) {\n sessionInfo = DEFAULT_USER_SESSION_VALUES.sessionInfo;\n }\n } else {\n sessionInfo = DEFAULT_USER_SESSION_VALUES.sessionInfo;\n }\n\n state.session.sessionInfo.value = sessionInfo as SessionInfo;\n\n // If auto session tracking is enabled start the session tracking\n if (state.session.sessionInfo.value.autoTrack) {\n this.startOrRenewAutoTracking(state.session.sessionInfo.value);\n }\n }\n\n setInitialReferrerInfo() {\n const persistedInitialReferrer = this.getInitialReferrer();\n const persistedInitialReferringDomain = this.getInitialReferringDomain();\n\n if (persistedInitialReferrer && persistedInitialReferringDomain) {\n this.setInitialReferrer(persistedInitialReferrer);\n this.setInitialReferringDomain(persistedInitialReferringDomain);\n } else {\n const initialReferrer = persistedInitialReferrer || getReferrer();\n this.setInitialReferrer(initialReferrer);\n this.setInitialReferringDomain(getReferringDomain(initialReferrer));\n }\n }\n\n isPersistenceEnabledForStorageEntry(entryName: UserSessionKey): boolean {\n return isStorageTypeValidForStoringData(\n state.storage.entries.value[entryName]?.type as StorageType,\n );\n }\n\n migrateDataFromPreviousStorage() {\n const entries = state.storage.entries.value as StorageEntries;\n const storageTypesForMigration = [COOKIE_STORAGE, LOCAL_STORAGE, SESSION_STORAGE];\n Object.keys(entries).forEach(entry => {\n const key = entry as UserSessionStorageKeysType;\n const currentStorage = entries[key]?.type as StorageType;\n const curStore = this.storeManager?.getStore(\n storageClientDataStoreNameMap[currentStorage] as string,\n );\n if (curStore) {\n storageTypesForMigration.forEach(storage => {\n const store = this.storeManager?.getStore(\n storageClientDataStoreNameMap[storage] as string,\n );\n if (store && storage !== currentStorage) {\n const value = store.get(COOKIE_KEYS[key]);\n if (isDefinedNotNullAndNotEmptyString(value)) {\n curStore.set(COOKIE_KEYS[key], value);\n }\n\n store.remove(COOKIE_KEYS[key]);\n }\n });\n }\n });\n }\n\n migrateStorageIfNeeded() {\n if (!state.storage.migrate.value) {\n return;\n }\n\n const persistentStoreNames = [\n CLIENT_DATA_STORE_COOKIE,\n CLIENT_DATA_STORE_LS,\n CLIENT_DATA_STORE_SESSION,\n ];\n\n const stores: IStore[] = [];\n persistentStoreNames.forEach(storeName => {\n const store = this.storeManager?.getStore(storeName);\n if (store) {\n stores.push(store);\n }\n });\n\n Object.keys(COOKIE_KEYS).forEach(storageKey => {\n const storageEntry = COOKIE_KEYS[storageKey as UserSessionStorageKeysType];\n stores.forEach(store => {\n const migratedVal = this.pluginsManager?.invokeSingle(\n 'storage.migrate',\n storageEntry,\n store.engine,\n this.errorHandler,\n this.logger,\n );\n\n // Skip setting the value if it is null or undefined\n // as those values indicate there is no need for migration or\n // migration failed\n if (!isNullOrUndefined(migratedVal)) {\n store.set(storageEntry, migratedVal);\n }\n });\n });\n }\n\n getConfiguredSessionTrackingInfo(): SessionInfo {\n let autoTrack = state.loadOptions.value.sessions?.autoTrack !== false;\n\n // Do not validate any further if autoTrack is disabled\n if (!autoTrack) {\n return {\n autoTrack,\n };\n }\n\n let timeout: number;\n const configuredSessionTimeout = state.loadOptions.value.sessions?.timeout;\n if (!isPositiveInteger(configuredSessionTimeout)) {\n this.logger.warn(\n TIMEOUT_NOT_NUMBER_WARNING(\n USER_SESSION_MANAGER,\n configuredSessionTimeout,\n DEFAULT_SESSION_TIMEOUT_MS,\n ),\n );\n timeout = DEFAULT_SESSION_TIMEOUT_MS;\n } else {\n timeout = configuredSessionTimeout as number;\n }\n\n if (timeout === 0) {\n this.logger.warn(TIMEOUT_ZERO_WARNING(USER_SESSION_MANAGER));\n autoTrack = false;\n }\n // In case user provides a timeout value greater than 0 but less than 10 seconds SDK will show a warning\n // and will proceed with it\n if (timeout > 0 && timeout < MIN_SESSION_TIMEOUT_MS) {\n this.logger.warn(\n TIMEOUT_NOT_RECOMMENDED_WARNING(USER_SESSION_MANAGER, timeout, MIN_SESSION_TIMEOUT_MS),\n );\n }\n return { timeout, autoTrack };\n }\n\n /**\n * Handles error\n * @param error The error object\n */\n onError(error: unknown, customMessage?: string): void {\n this.errorHandler.onError(error, USER_SESSION_MANAGER, customMessage);\n }\n\n /**\n * A function to encrypt the cookie value and return the encrypted data\n * @param cookiesData\n * @param store\n * @returns\n */\n getEncryptedCookieData(cookiesData: CookieData[], store?: IStore): EncryptedCookieData[] {\n const encryptedCookieData: EncryptedCookieData[] = [];\n cookiesData.forEach(cData => {\n const encryptedValue = store?.encrypt(\n stringifyWithoutCircular(cData.value, false, [], this.logger),\n );\n if (isDefinedAndNotNull(encryptedValue)) {\n encryptedCookieData.push({\n name: cData.name,\n value: encryptedValue,\n });\n }\n });\n return encryptedCookieData;\n }\n\n /**\n * A function that makes request to data service to set the cookie\n * @param encryptedCookieData\n * @param callback\n */\n makeRequestToSetCookie(\n encryptedCookieData: EncryptedCookieData[],\n callback: AsyncRequestCallback,\n ) {\n this.httpClient?.getAsyncData({\n url: state.serverCookies.dataServiceUrl.value as string,\n options: {\n method: 'POST',\n data: stringifyWithoutCircular({\n reqType: 'setCookies',\n workspaceId: state.source.value?.workspaceId,\n data: {\n options: {\n maxAge: state.storage.cookie.value?.maxage,\n path: state.storage.cookie.value?.path,\n domain: state.storage.cookie.value?.domain,\n sameSite: state.storage.cookie.value?.samesite,\n secure: state.storage.cookie.value?.secure,\n expires: state.storage.cookie.value?.expires,\n },\n cookies: encryptedCookieData,\n },\n }) as string,\n sendRawData: true,\n withCredentials: true,\n },\n isRawResponse: true,\n callback,\n });\n }\n\n /**\n * A function to make an external request to set the cookie from server side\n * @param key cookie name\n * @param value encrypted cookie value\n */\n setServerSideCookies(cookiesData: CookieData[], cb?: CallbackFunction, store?: IStore): void {\n try {\n // encrypt cookies values\n const encryptedCookieData = this.getEncryptedCookieData(cookiesData, store);\n if (encryptedCookieData.length > 0) {\n // make request to data service to set the cookie from server side\n this.makeRequestToSetCookie(encryptedCookieData, (res, details) => {\n if (details?.xhr?.status === 200) {\n cookiesData.forEach(cData => {\n const cookieValue = store?.get(cData.name);\n const before = stringifyWithoutCircular(cData.value, false, []);\n const after = stringifyWithoutCircular(cookieValue, false, []);\n if (after !== before) {\n this.logger.error(FAILED_SETTING_COOKIE_FROM_SERVER_ERROR(cData.name));\n if (cb) {\n cb(cData.name, cData.value);\n }\n }\n });\n } else {\n this.logger.error(DATA_SERVER_REQUEST_FAIL_ERROR(details?.xhr?.status));\n cookiesData.forEach(each => {\n if (cb) {\n cb(each.name, each.value);\n }\n });\n }\n });\n }\n } catch (e) {\n this.onError(e, FAILED_SETTING_COOKIE_FROM_SERVER_GLOBAL_ERROR);\n cookiesData.forEach(each => {\n if (cb) {\n cb(each.name, each.value);\n }\n });\n }\n }\n\n /**\n * A function to sync values in storage\n * @param sessionKey\n * @param value\n */\n syncValueToStorage(\n sessionKey: UserSessionKey,\n value: Nullable | Nullable | undefined,\n ) {\n const entries = state.storage.entries.value;\n const storageType = entries[sessionKey]?.type as StorageType;\n if (isStorageTypeValidForStoringData(storageType)) {\n const curStore = this.storeManager?.getStore(\n storageClientDataStoreNameMap[storageType] as string,\n );\n const key = entries[sessionKey]?.key as string;\n if (value && (isString(value) || isNonEmptyObject(value))) {\n // if useServerSideCookies load option is set to true\n // set the cookie from server side\n if (\n state.serverCookies.isEnabledServerSideCookies.value &&\n storageType === COOKIE_STORAGE\n ) {\n if (this.serverSideCookieDebounceFuncs[sessionKey]) {\n (globalThis as typeof window).clearTimeout(\n this.serverSideCookieDebounceFuncs[sessionKey],\n );\n }\n\n this.serverSideCookieDebounceFuncs[sessionKey] = (globalThis as typeof window).setTimeout(\n () => {\n this.setServerSideCookies(\n [{ name: key, value }],\n (cookieName, cookieValue) => {\n curStore?.set(cookieName, cookieValue);\n },\n curStore,\n );\n },\n SERVER_SIDE_COOKIES_DEBOUNCE_TIME,\n );\n } else {\n curStore?.set(key, value);\n }\n } else {\n curStore?.remove(key);\n }\n }\n }\n\n /**\n * Function to update storage whenever state value changes\n */\n registerEffects() {\n // This will work as long as the user session entry key names are same as the state keys\n USER_SESSION_KEYS.forEach(sessionKey => {\n effect(() => {\n this.syncValueToStorage(sessionKey, state.session[sessionKey].value);\n });\n });\n }\n\n /**\n * Sets anonymous id in the following precedence:\n *\n * 1. anonymousId: Id directly provided to the function.\n * 2. rudderAmpLinkerParam: value generated from linker query parm (rudderstack)\n * using parseLinker util.\n * 3. generateUUID: A new unique id is generated and assigned.\n */\n setAnonymousId(anonymousId?: string, rudderAmpLinkerParam?: string) {\n let finalAnonymousId: string | undefined = anonymousId;\n if (!isString(anonymousId) || !finalAnonymousId) {\n finalAnonymousId = undefined;\n }\n\n if (this.isPersistenceEnabledForStorageEntry('anonymousId')) {\n if (!finalAnonymousId && rudderAmpLinkerParam) {\n const linkerPluginsResult = this.pluginsManager?.invokeSingle(\n 'userSession.anonymousIdGoogleLinker',\n rudderAmpLinkerParam,\n );\n finalAnonymousId = linkerPluginsResult;\n }\n finalAnonymousId = finalAnonymousId || generateAnonymousId();\n } else {\n finalAnonymousId = DEFAULT_USER_SESSION_VALUES.anonymousId;\n }\n\n state.session.anonymousId.value = finalAnonymousId;\n }\n\n /**\n * Fetches anonymousId\n * @param options option to fetch it from external source\n * @returns anonymousId\n */\n getAnonymousId(options?: AnonymousIdOptions): string {\n const storage: StorageType = state.storage.entries.value.anonymousId?.type as StorageType;\n // fetch the anonymousId from storage\n if (isStorageTypeValidForStoringData(storage)) {\n let persistedAnonymousId = this.getEntryValue('anonymousId');\n if (!persistedAnonymousId && options) {\n // fetch anonymousId from external source\n const autoCapturedAnonymousId = this.pluginsManager?.invokeSingle(\n 'storage.getAnonymousId',\n getStorageEngine,\n options,\n );\n persistedAnonymousId = autoCapturedAnonymousId;\n }\n state.session.anonymousId.value = persistedAnonymousId || generateAnonymousId();\n }\n return state.session.anonymousId.value as string;\n }\n\n getEntryValue(sessionKey: UserSessionKey) {\n const entries = state.storage.entries.value;\n const storageType = entries[sessionKey]?.type as StorageType;\n if (isStorageTypeValidForStoringData(storageType)) {\n const store = this.storeManager?.getStore(\n storageClientDataStoreNameMap[storageType] as string,\n );\n const storageKey = entries[sessionKey]?.key as string;\n return store?.get(storageKey) ?? null;\n }\n return null;\n }\n\n getExternalAnonymousIdByCookieName(key: string) {\n const storageEngine = getStorageEngine(COOKIE_STORAGE);\n if (storageEngine?.isEnabled) {\n return storageEngine.getItem(key) ?? null;\n }\n return null;\n }\n\n /**\n * Fetches User Id\n * @returns\n */\n getUserId(): Nullable {\n return this.getEntryValue('userId');\n }\n\n /**\n * Fetches User Traits\n * @returns\n */\n getUserTraits(): Nullable {\n return this.getEntryValue('userTraits');\n }\n\n /**\n * Fetches Group Id\n * @returns\n */\n getGroupId(): Nullable {\n return this.getEntryValue('groupId');\n }\n\n /**\n * Fetches Group Traits\n * @returns\n */\n getGroupTraits(): Nullable {\n return this.getEntryValue('groupTraits');\n }\n\n /**\n * Fetches Initial Referrer\n * @returns\n */\n getInitialReferrer(): Nullable {\n return this.getEntryValue('initialReferrer');\n }\n\n /**\n * Fetches Initial Referring domain\n * @returns\n */\n getInitialReferringDomain(): Nullable {\n return this.getEntryValue('initialReferringDomain');\n }\n\n /**\n * Fetches session tracking information from storage\n * @returns\n */\n getSessionInfo(): Nullable {\n return this.getEntryValue('sessionInfo');\n }\n\n /**\n * Fetches auth token from storage\n * @returns\n */\n getAuthToken(): Nullable {\n return this.getEntryValue('authToken');\n }\n\n /**\n * If session is active it returns the sessionId\n * @returns\n */\n getSessionId(): Nullable {\n const sessionInfo = this.getSessionInfo() ?? DEFAULT_USER_SESSION_VALUES.sessionInfo;\n if (\n (sessionInfo.autoTrack && !hasSessionExpired(sessionInfo.expiresAt)) ||\n sessionInfo.manualTrack\n ) {\n return sessionInfo.id ?? null;\n }\n return null;\n }\n\n /**\n * A function to keep the session information up to date in the state\n * before using it for building event payloads.\n */\n refreshSession(): void {\n let sessionInfo = this.getSessionInfo() ?? DEFAULT_USER_SESSION_VALUES.sessionInfo;\n if (sessionInfo.autoTrack || sessionInfo.manualTrack) {\n if (sessionInfo.autoTrack) {\n this.startOrRenewAutoTracking(sessionInfo);\n sessionInfo = state.session.sessionInfo.value;\n }\n\n // Note that if sessionStart is false, then it's an active session.\n // So, we needn't update the session info.\n //\n // For other scenarios,\n // 1. If sessionStart is undefined, then it's a new session.\n // Mark it as sessionStart.\n // 2. If sessionStart is true, then need to flip it for the future events.\n if (sessionInfo.sessionStart === undefined) {\n sessionInfo = {\n ...sessionInfo,\n sessionStart: true,\n };\n } else if (sessionInfo.sessionStart) {\n sessionInfo = {\n ...sessionInfo,\n sessionStart: false,\n };\n }\n }\n\n // Always write to state (in-turn to storage) to keep the session info up to date.\n state.session.sessionInfo.value = sessionInfo;\n\n if (state.lifecycle.status.value !== 'readyExecuted') {\n // Force update the storage as the 'effect' blocks are not getting triggered\n // when processing preload buffered requests\n this.syncValueToStorage('sessionInfo', sessionInfo);\n }\n }\n\n /**\n * Reset state values\n * @param resetAnonymousId\n * @param noNewSessionStart\n * @returns\n */\n reset(resetAnonymousId?: boolean, noNewSessionStart?: boolean) {\n const { session } = state;\n const { manualTrack, autoTrack } = session.sessionInfo.value;\n\n batch(() => {\n session.userId.value = DEFAULT_USER_SESSION_VALUES.userId;\n session.userTraits.value = DEFAULT_USER_SESSION_VALUES.userTraits;\n session.groupId.value = DEFAULT_USER_SESSION_VALUES.groupId;\n session.groupTraits.value = DEFAULT_USER_SESSION_VALUES.groupTraits;\n session.authToken.value = DEFAULT_USER_SESSION_VALUES.authToken;\n\n if (resetAnonymousId === true) {\n // This will generate a new anonymous ID\n this.setAnonymousId();\n }\n\n if (noNewSessionStart) {\n return;\n }\n\n if (autoTrack) {\n session.sessionInfo.value = DEFAULT_USER_SESSION_VALUES.sessionInfo;\n this.startOrRenewAutoTracking(session.sessionInfo.value);\n } else if (manualTrack) {\n this.startManualTrackingInternal();\n }\n });\n }\n\n /**\n * Set user Id\n * @param userId\n */\n setUserId(userId?: Nullable) {\n state.session.userId.value =\n this.isPersistenceEnabledForStorageEntry('userId') && userId\n ? userId\n : DEFAULT_USER_SESSION_VALUES.userId;\n }\n\n /**\n * Set user traits\n * @param traits\n */\n setUserTraits(traits?: Nullable) {\n state.session.userTraits.value =\n this.isPersistenceEnabledForStorageEntry('userTraits') && isObjectLiteralAndNotNull(traits)\n ? mergeDeepRight(\n state.session.userTraits.value ?? DEFAULT_USER_SESSION_VALUES.userTraits,\n traits as ApiObject,\n )\n : DEFAULT_USER_SESSION_VALUES.userTraits;\n }\n\n /**\n * Set group Id\n * @param groupId\n */\n setGroupId(groupId?: Nullable) {\n state.session.groupId.value =\n this.isPersistenceEnabledForStorageEntry('groupId') && groupId\n ? groupId\n : DEFAULT_USER_SESSION_VALUES.groupId;\n }\n\n /**\n * Set group traits\n * @param traits\n */\n setGroupTraits(traits?: Nullable) {\n state.session.groupTraits.value =\n this.isPersistenceEnabledForStorageEntry('groupTraits') && isObjectLiteralAndNotNull(traits)\n ? mergeDeepRight(\n state.session.groupTraits.value ?? DEFAULT_USER_SESSION_VALUES.groupTraits,\n traits as ApiObject,\n )\n : DEFAULT_USER_SESSION_VALUES.groupTraits;\n }\n\n /**\n * Set initial referrer\n * @param referrer\n */\n setInitialReferrer(referrer?: string) {\n state.session.initialReferrer.value =\n this.isPersistenceEnabledForStorageEntry('initialReferrer') && referrer\n ? referrer\n : DEFAULT_USER_SESSION_VALUES.initialReferrer;\n }\n\n /**\n * Set initial referring domain\n * @param {String} referringDomain\n */\n setInitialReferringDomain(referringDomain?: string) {\n state.session.initialReferringDomain.value =\n this.isPersistenceEnabledForStorageEntry('initialReferringDomain') && referringDomain\n ? referringDomain\n : DEFAULT_USER_SESSION_VALUES.initialReferringDomain;\n }\n\n /**\n * A function to check for existing session details and depending on that create a new session\n */\n startOrRenewAutoTracking(sessionInfo: SessionInfo) {\n if (hasSessionExpired(sessionInfo.expiresAt)) {\n state.session.sessionInfo.value = generateAutoTrackingSession(sessionInfo.timeout);\n } else {\n const timestamp = Date.now();\n const timeout = sessionInfo.timeout as number;\n state.session.sessionInfo.value = mergeDeepRight(sessionInfo, {\n expiresAt: timestamp + timeout, // set the expiry time of the session\n });\n }\n }\n\n /**\n * A function method to start a manual session\n * @param {number} id session identifier\n * @returns\n */\n start(id?: number) {\n state.session.sessionInfo.value = generateManualTrackingSession(id, this.logger);\n }\n\n /**\n * An internal function to start manual session\n */\n startManualTrackingInternal() {\n this.start(Date.now());\n }\n\n /**\n * A public method to end an ongoing session.\n */\n end() {\n state.session.sessionInfo.value = DEFAULT_USER_SESSION_VALUES.sessionInfo;\n }\n\n /**\n * Set auth token\n * @param userId\n */\n setAuthToken(token: Nullable) {\n state.session.authToken.value =\n this.isPersistenceEnabledForStorageEntry('authToken') && token\n ? token\n : DEFAULT_USER_SESSION_VALUES.authToken;\n }\n}\n\nexport { UserSessionManager };\n","import type { PluginName } from '@rudderstack/analytics-js-common/types/PluginsManager';\n\n/**\n * Plugins to be loaded in the plugins loadOption is not defined\n */\nconst defaultOptionalPluginsList: PluginName[] = [\n 'BeaconQueue',\n 'CustomConsentManager',\n 'DeviceModeDestinations',\n 'DeviceModeTransformation',\n 'ExternalAnonymousId',\n 'GoogleLinker',\n 'IubendaConsentManager',\n 'KetchConsentManager',\n 'NativeDestinationQueue',\n 'OneTrustConsentManager',\n 'StorageEncryption',\n 'StorageEncryptionLegacy',\n 'StorageMigrator',\n 'XhrQueue',\n];\n\nexport { defaultOptionalPluginsList };\n","const DATA_PLANE_QUEUE_EXT_POINT_PREFIX = 'dataplaneEventsQueue';\nconst DESTINATIONS_QUEUE_EXT_POINT_PREFIX = 'destinationsEventsQueue';\nconst DMT_EXT_POINT_PREFIX = 'transformEvent';\n\nexport {\n DATA_PLANE_QUEUE_EXT_POINT_PREFIX,\n DESTINATIONS_QUEUE_EXT_POINT_PREFIX,\n DMT_EXT_POINT_PREFIX,\n};\n","import type { IntegrationOpts } from '@rudderstack/analytics-js-common/types/Integration';\nimport { clone } from 'ramda';\nimport { mergeDeepRight } from '@rudderstack/analytics-js-common/utilities/object';\nimport type { ApplicationState } from '@rudderstack/analytics-js-common/types/ApplicationState';\nimport type { RudderEvent } from '@rudderstack/analytics-js-common/types/Event';\n\n/**\n * Filters and returns the user supplied integrations config that should take preference over the destination specific integrations config\n * @param eventIntgConfig User supplied integrations config at event level\n * @param destinationsIntgConfig Cumulative integrations config from all destinations\n * @returns Filtered user supplied integrations config\n */\nconst getOverriddenIntegrationOptions = (\n eventIntgConfig: IntegrationOpts,\n destinationsIntgConfig: IntegrationOpts,\n): IntegrationOpts =>\n Object.keys(eventIntgConfig)\n .filter(intgName => eventIntgConfig[intgName] !== true || !destinationsIntgConfig[intgName])\n .reduce((obj: IntegrationOpts, key: string) => {\n const retVal = clone(obj);\n retVal[key] = eventIntgConfig[key];\n return retVal;\n }, {});\n\n/**\n * Returns the event object with final integrations config\n * @param event RudderEvent object\n * @param state Application state\n * @returns Mutated event with final integrations config\n */\nconst getFinalEvent = (event: RudderEvent, state: ApplicationState) => {\n const finalEvent = clone(event);\n // Merge the destination specific integrations config with the event's integrations config\n // In general, the preference is given to the event's integrations config\n const destinationsIntgConfig = state.nativeDestinations.integrationsConfig.value;\n const overriddenIntgOpts = getOverriddenIntegrationOptions(\n event.integrations,\n destinationsIntgConfig,\n );\n\n finalEvent.integrations = mergeDeepRight(destinationsIntgConfig, overriddenIntgOpts);\n return finalEvent;\n};\n\nconst shouldBufferEventsForPreConsent = (state: ApplicationState): boolean =>\n state.consents.preConsent.value.enabled &&\n state.consents.preConsent.value.events?.delivery === 'buffer' &&\n (state.consents.preConsent.value.storage?.strategy === 'session' ||\n state.consents.preConsent.value.storage?.strategy === 'none');\n\nexport { getOverriddenIntegrationOptions, getFinalEvent, shouldBufferEventsForPreConsent };\n","import type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport { isDefined, isFunction } from '@rudderstack/analytics-js-common/utilities/checks';\nimport { CALLBACK_INVOKE_ERROR, INVALID_CALLBACK_FN_ERROR } from '../../constants/logMessages';\n\nconst safelyInvokeCallback = (\n callback: unknown,\n args: unknown[],\n apiName: string,\n logger: ILogger,\n): void => {\n if (!isDefined(callback)) {\n return;\n }\n\n if (isFunction(callback)) {\n try {\n callback(...args);\n } catch (error) {\n logger.error(CALLBACK_INVOKE_ERROR(apiName), error);\n }\n } else {\n logger.error(INVALID_CALLBACK_FN_ERROR(apiName));\n }\n};\n\nexport { safelyInvokeCallback };\n","import { clone } from 'ramda';\nimport { effect } from '@preact/signals-core';\nimport type { IHttpClient } from '@rudderstack/analytics-js-common/types/HttpClient';\nimport type { IStoreManager } from '@rudderstack/analytics-js-common/types/Store';\nimport type { IPluginsManager } from '@rudderstack/analytics-js-common/types/PluginsManager';\nimport type { IErrorHandler } from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { RudderEvent } from '@rudderstack/analytics-js-common/types/Event';\nimport type { ApiCallback } from '@rudderstack/analytics-js-common/types/EventApi';\nimport { isHybridModeDestination } from '@rudderstack/analytics-js-common/utilities/destinations';\nimport { API_SUFFIX } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport type { Destination } from '@rudderstack/analytics-js-common/types/Destination';\nimport { state } from '../../state';\nimport type { IEventRepository } from './types';\nimport {\n DATA_PLANE_QUEUE_EXT_POINT_PREFIX,\n DESTINATIONS_QUEUE_EXT_POINT_PREFIX,\n DMT_EXT_POINT_PREFIX,\n} from './constants';\nimport { getFinalEvent, shouldBufferEventsForPreConsent } from './utils';\nimport { safelyInvokeCallback } from '../utilities/callbacks';\n\n/**\n * Event repository class responsible for queuing events for further processing and delivery\n */\nclass EventRepository implements IEventRepository {\n errorHandler: IErrorHandler;\n logger: ILogger;\n pluginsManager: IPluginsManager;\n httpClient: IHttpClient;\n storeManager: IStoreManager;\n dataplaneEventsQueue: any;\n destinationsEventsQueue: any;\n dmtEventsQueue: any;\n\n /**\n *\n * @param pluginsManager Plugins manager instance\n * @param storeManager Store Manager instance\n * @param errorHandler Error handler object\n * @param logger Logger object\n */\n constructor(\n pluginsManager: IPluginsManager,\n storeManager: IStoreManager,\n httpClient: IHttpClient,\n errorHandler: IErrorHandler,\n logger: ILogger,\n ) {\n this.pluginsManager = pluginsManager;\n this.errorHandler = errorHandler;\n this.httpClient = httpClient;\n this.logger = logger;\n this.storeManager = storeManager;\n }\n\n /**\n * Initializes the event repository\n */\n init(): void {\n this.dataplaneEventsQueue = this.pluginsManager.invokeSingle(\n `${DATA_PLANE_QUEUE_EXT_POINT_PREFIX}.init`,\n state,\n this.httpClient,\n this.storeManager,\n this.errorHandler,\n this.logger,\n );\n\n this.dmtEventsQueue = this.pluginsManager.invokeSingle(\n `${DMT_EXT_POINT_PREFIX}.init`,\n state,\n this.pluginsManager,\n this.httpClient,\n this.storeManager,\n this.errorHandler,\n this.logger,\n );\n\n this.destinationsEventsQueue = this.pluginsManager.invokeSingle(\n `${DESTINATIONS_QUEUE_EXT_POINT_PREFIX}.init`,\n state,\n this.pluginsManager,\n this.storeManager,\n this.dmtEventsQueue,\n this.errorHandler,\n this.logger,\n );\n\n // Start the queue once the client destinations are ready\n effect(() => {\n if (state.nativeDestinations.clientDestinationsReady.value === true) {\n this.destinationsEventsQueue?.start();\n this.dmtEventsQueue?.start();\n }\n });\n\n const bufferEventsBeforeConsent = shouldBufferEventsForPreConsent(state);\n\n // Start the queue processing only when the destinations are ready or hybrid mode destinations exist\n // However, events will be enqueued for now.\n // At the time of processing the events, the integrations config data from destinations\n // is merged into the event object\n let timeoutId: number;\n effect(() => {\n const shouldBufferDpEvents =\n state.loadOptions.value.bufferDataPlaneEventsUntilReady === true &&\n state.nativeDestinations.clientDestinationsReady.value === false;\n\n const hybridDestExist = state.nativeDestinations.activeDestinations.value.some(\n (dest: Destination) => isHybridModeDestination(dest),\n );\n\n if (\n (hybridDestExist === false || shouldBufferDpEvents === false) &&\n !bufferEventsBeforeConsent &&\n this.dataplaneEventsQueue?.scheduleTimeoutActive !== true\n ) {\n (globalThis as typeof window).clearTimeout(timeoutId);\n this.dataplaneEventsQueue?.start();\n }\n });\n\n // Force start the data plane events queue processing after a timeout\n if (state.loadOptions.value.bufferDataPlaneEventsUntilReady === true) {\n timeoutId = (globalThis as typeof window).setTimeout(() => {\n if (this.dataplaneEventsQueue?.scheduleTimeoutActive !== true) {\n this.dataplaneEventsQueue?.start();\n }\n }, state.loadOptions.value.dataPlaneEventsBufferTimeout);\n }\n }\n\n resume() {\n if (this.dataplaneEventsQueue?.scheduleTimeoutActive !== true) {\n if (state.consents.postConsent.value.discardPreConsentEvents) {\n this.dataplaneEventsQueue?.clear();\n this.destinationsEventsQueue?.clear();\n }\n\n this.dataplaneEventsQueue?.start();\n }\n }\n\n /**\n * Enqueues the event for processing\n * @param event RudderEvent object\n * @param callback API callback function\n */\n enqueue(event: RudderEvent, callback?: ApiCallback): void {\n const dpQEvent = getFinalEvent(event, state);\n this.pluginsManager.invokeSingle(\n `${DATA_PLANE_QUEUE_EXT_POINT_PREFIX}.enqueue`,\n state,\n this.dataplaneEventsQueue,\n dpQEvent,\n this.errorHandler,\n this.logger,\n );\n\n const dQEvent = clone(event);\n this.pluginsManager.invokeSingle(\n `${DESTINATIONS_QUEUE_EXT_POINT_PREFIX}.enqueue`,\n state,\n this.destinationsEventsQueue,\n dQEvent,\n this.errorHandler,\n this.logger,\n );\n\n // Invoke the callback if it exists\n const apiName = `${event.type.charAt(0).toUpperCase()}${event.type.slice(1)}${API_SUFFIX}`;\n safelyInvokeCallback(callback, [dpQEvent], apiName, this.logger);\n }\n}\n\nexport { EventRepository };\n","import { isString } from '@rudderstack/analytics-js-common/utilities/checks';\nimport { isValidURL } from '@rudderstack/analytics-js-common/utilities/url';\n\nconst dispatchSDKEvent = (event: string): void => {\n const customEvent = new CustomEvent(event, {\n detail: { analyticsInstance: (globalThis as typeof window).rudderanalytics },\n bubbles: true,\n cancelable: true,\n composed: true,\n });\n\n (globalThis as typeof window).document.dispatchEvent(customEvent);\n};\n\nconst isWriteKeyValid = (writeKey: string) => isString(writeKey) && writeKey.trim().length > 0;\n\nconst isDataPlaneUrlValid = (dataPlaneUrl: string) => isValidURL(dataPlaneUrl);\n\nexport { dispatchSDKEvent, isWriteKeyValid, isDataPlaneUrlValid };\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { ExternalSrcLoader } from '@rudderstack/analytics-js-common/services/ExternalSrcLoader';\nimport { batch, effect } from '@preact/signals-core';\nimport { isFunction, isNull } from '@rudderstack/analytics-js-common/utilities/checks';\nimport type { IHttpClient } from '@rudderstack/analytics-js-common/types/HttpClient';\nimport { clone } from 'ramda';\nimport type { ILogger } from '@rudderstack/analytics-js-common/types/Logger';\nimport type { IErrorHandler } from '@rudderstack/analytics-js-common/types/ErrorHandler';\nimport type { IExternalSrcLoader } from '@rudderstack/analytics-js-common/services/ExternalSrcLoader/types';\nimport type { IStoreManager } from '@rudderstack/analytics-js-common/types/Store';\nimport type { IPluginsManager } from '@rudderstack/analytics-js-common/types/PluginsManager';\nimport { getMutatedError } from '@rudderstack/analytics-js-common/utilities/errors';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport type { ApiObject } from '@rudderstack/analytics-js-common/types/ApiObject';\nimport type {\n AnonymousIdOptions,\n ConsentOptions,\n LoadOptions,\n} from '@rudderstack/analytics-js-common/types/LoadOptions';\nimport type { ApiCallback } from '@rudderstack/analytics-js-common/types/EventApi';\nimport {\n ANALYTICS_CORE,\n LOAD_API,\n READY_API,\n} from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport {\n pageArgumentsToCallOptions,\n type AliasCallOptions,\n type GroupCallOptions,\n type IdentifyCallOptions,\n type PageCallOptions,\n type TrackCallOptions,\n trackArgumentsToCallOptions,\n} from '@rudderstack/analytics-js-common/utilities/eventMethodOverloads';\nimport { BufferQueue } from '@rudderstack/analytics-js-common/services/BufferQueue/BufferQueue';\nimport { POST_LOAD_LOG_LEVEL, defaultLogger } from '../../services/Logger';\nimport { defaultErrorHandler } from '../../services/ErrorHandler';\nimport { defaultPluginEngine } from '../../services/PluginEngine';\nimport { PluginsManager } from '../pluginsManager';\nimport { defaultHttpClient } from '../../services/HttpClient';\nimport { type Store, StoreManager } from '../../services/StoreManager';\nimport { state } from '../../state';\nimport { ConfigManager } from '../configManager/ConfigManager';\nimport type { ICapabilitiesManager } from '../capabilitiesManager/types';\nimport { CapabilitiesManager } from '../capabilitiesManager';\nimport type { IEventManager } from '../eventManager/types';\nimport { EventManager } from '../eventManager';\nimport { UserSessionManager } from '../userSessionManager/UserSessionManager';\nimport type { IUserSessionManager } from '../userSessionManager/types';\nimport type { IConfigManager } from '../configManager/types';\nimport { setExposedGlobal } from '../utilities/globals';\nimport { normalizeLoadOptions } from '../utilities/loadOptions';\nimport { consumePreloadBufferedEvent, retrievePreloadBufferEvents } from '../preloadBuffer';\nimport type { PreloadedEventCall } from '../preloadBuffer/types';\nimport { EventRepository } from '../eventRepository';\nimport type { IEventRepository } from '../eventRepository/types';\nimport {\n ADBLOCK_PAGE_CATEGORY,\n ADBLOCK_PAGE_NAME,\n ADBLOCK_PAGE_PATH,\n CONSENT_TRACK_EVENT_NAME,\n} from '../../constants/app';\nimport {\n DATA_PLANE_URL_VALIDATION_ERROR,\n INVALID_CALLBACK_FN_ERROR,\n WRITE_KEY_VALIDATION_ERROR,\n} from '../../constants/logMessages';\nimport type { IAnalytics } from './IAnalytics';\nimport { getConsentManagementData, getValidPostConsentOptions } from '../utilities/consent';\nimport { dispatchSDKEvent, isDataPlaneUrlValid, isWriteKeyValid } from './utilities';\nimport { safelyInvokeCallback } from '../utilities/callbacks';\n\n/*\n * Analytics class with lifecycle based on state ad user triggered events\n */\nclass Analytics implements IAnalytics {\n preloadBuffer: BufferQueue;\n initialized: boolean;\n logger: ILogger;\n errorHandler: IErrorHandler;\n httpClient: IHttpClient;\n externalSrcLoader: IExternalSrcLoader;\n capabilitiesManager: ICapabilitiesManager;\n pluginsManager?: IPluginsManager;\n storeManager?: IStoreManager;\n configManager?: IConfigManager;\n eventRepository?: IEventRepository;\n eventManager?: IEventManager;\n userSessionManager?: IUserSessionManager;\n clientDataStore?: Store;\n\n /**\n * Initialize services and components or use default ones if singletons\n */\n constructor() {\n this.preloadBuffer = new BufferQueue();\n this.initialized = false;\n this.errorHandler = defaultErrorHandler;\n this.logger = defaultLogger;\n this.externalSrcLoader = new ExternalSrcLoader(this.errorHandler, this.logger);\n this.httpClient = defaultHttpClient;\n this.httpClient.init(this.errorHandler);\n this.capabilitiesManager = new CapabilitiesManager(\n this.httpClient,\n this.errorHandler,\n this.logger,\n );\n }\n\n /**\n * Start application lifecycle if not already started\n */\n load(writeKey: string, dataPlaneUrl: string, loadOptions: Partial = {}) {\n if (state.lifecycle.status.value) {\n return;\n }\n\n if (!isWriteKeyValid(writeKey)) {\n this.logger.error(WRITE_KEY_VALIDATION_ERROR(ANALYTICS_CORE, writeKey));\n return;\n }\n\n if (!isDataPlaneUrlValid(dataPlaneUrl)) {\n this.logger.error(DATA_PLANE_URL_VALIDATION_ERROR(ANALYTICS_CORE, dataPlaneUrl));\n return;\n }\n\n // Set initial state values\n batch(() => {\n state.lifecycle.writeKey.value = clone(writeKey);\n state.lifecycle.dataPlaneUrl.value = clone(dataPlaneUrl);\n state.loadOptions.value = normalizeLoadOptions(state.loadOptions.value, loadOptions);\n state.lifecycle.status.value = 'mounted';\n });\n\n // set log level as early as possible\n this.logger.setMinLogLevel(state.loadOptions.value.logLevel ?? POST_LOAD_LOG_LEVEL);\n\n // Expose state to global objects\n setExposedGlobal('state', state, writeKey);\n\n // Configure initial config of any services or components here\n\n // State application lifecycle\n this.startLifecycle();\n }\n\n // Start lifecycle methods\n /**\n * Orchestrate the lifecycle of the application phases/status\n */\n startLifecycle() {\n effect(() => {\n try {\n switch (state.lifecycle.status.value) {\n case 'mounted':\n this.onMounted();\n break;\n case 'browserCapabilitiesReady':\n this.onBrowserCapabilitiesReady();\n break;\n case 'configured':\n this.onConfigured();\n break;\n case 'pluginsLoading':\n break;\n case 'pluginsReady':\n this.onPluginsReady();\n break;\n case 'initialized':\n this.onInitialized();\n break;\n case 'loaded':\n this.onLoaded();\n break;\n case 'destinationsLoading':\n break;\n case 'destinationsReady':\n this.onDestinationsReady();\n break;\n case 'ready':\n this.onReady();\n break;\n case 'readyExecuted':\n default:\n break;\n }\n } catch (err) {\n const issue = 'Failed to load the SDK';\n this.errorHandler.onError(getMutatedError(err, issue), ANALYTICS_CORE);\n }\n });\n }\n\n onBrowserCapabilitiesReady() {\n // initialize the preloaded events enqueuing\n retrievePreloadBufferEvents(this);\n this.prepareInternalServices();\n this.loadConfig();\n }\n\n onLoaded() {\n this.processBufferedEvents();\n // Short-circuit the life cycle and move to the ready state if pre-consent behavior is enabled\n if (state.consents.preConsent.value.enabled === true) {\n state.lifecycle.status.value = 'ready';\n } else {\n this.loadDestinations();\n }\n }\n\n /**\n * Load browser polyfill if required\n */\n onMounted() {\n this.capabilitiesManager.init();\n }\n\n /**\n * Enqueue in SDK preload buffer events, used from preloadBuffer component\n */\n enqueuePreloadBufferEvents(bufferedEvents: PreloadedEventCall[]) {\n if (Array.isArray(bufferedEvents)) {\n bufferedEvents.forEach(bufferedEvent => this.preloadBuffer.enqueue(clone(bufferedEvent)));\n }\n }\n\n /**\n * Process the buffer preloaded events by passing their arguments to the respective facade methods\n */\n processDataInPreloadBuffer() {\n while (this.preloadBuffer.size() > 0) {\n const eventToProcess = this.preloadBuffer.dequeue();\n\n if (eventToProcess) {\n consumePreloadBufferedEvent([...eventToProcess], this);\n }\n }\n }\n\n prepareInternalServices() {\n this.pluginsManager = new PluginsManager(defaultPluginEngine, this.errorHandler, this.logger);\n this.storeManager = new StoreManager(this.pluginsManager, this.errorHandler, this.logger);\n this.configManager = new ConfigManager(this.httpClient, this.errorHandler, this.logger);\n this.userSessionManager = new UserSessionManager(\n this.pluginsManager,\n this.storeManager,\n this.httpClient,\n this.errorHandler,\n this.logger,\n );\n this.eventRepository = new EventRepository(\n this.pluginsManager,\n this.storeManager,\n this.httpClient,\n this.errorHandler,\n this.logger,\n );\n this.eventManager = new EventManager(\n this.eventRepository,\n this.userSessionManager,\n this.errorHandler,\n this.logger,\n );\n }\n\n /**\n * Load configuration\n */\n loadConfig() {\n if (state.lifecycle.writeKey.value) {\n this.httpClient.setAuthHeader(state.lifecycle.writeKey.value);\n }\n\n this.configManager?.init();\n }\n\n /**\n * Initialize the storage and event queue\n */\n onPluginsReady() {\n // Initialize storage\n this.storeManager?.init();\n this.userSessionManager?.init();\n\n // Initialize the appropriate consent manager plugin\n if (state.consents.enabled.value && !state.consents.initialized.value) {\n this.pluginsManager?.invokeSingle(`consentManager.init`, state, this.logger);\n\n if (state.consents.preConsent.value.enabled === false) {\n this.pluginsManager?.invokeSingle(\n `consentManager.updateConsentsInfo`,\n state,\n this.storeManager,\n this.logger,\n );\n }\n }\n\n // Initialize event manager\n this.eventManager?.init();\n\n // Mark the SDK as initialized\n state.lifecycle.status.value = 'initialized';\n }\n\n /**\n * Load plugins\n */\n onConfigured() {\n this.pluginsManager?.init();\n // TODO: are we going to enable custom plugins to be passed as load options?\n // registerCustomPlugins(state.loadOptions.value.customPlugins);\n }\n\n /**\n * Trigger onLoaded callback if any is provided in config & emit initialised event\n */\n onInitialized() {\n // Process any preloaded events\n this.processDataInPreloadBuffer();\n\n // Execute onLoaded callback if provided in load options\n const onLoadedCallbackFn = state.loadOptions.value.onLoaded;\n // TODO: we need to avoid passing the window object to the callback function\n // as this will prevent us from supporting multiple SDK instances in the same page\n safelyInvokeCallback(\n onLoadedCallbackFn,\n [(globalThis as typeof window).rudderanalytics],\n LOAD_API,\n this.logger,\n );\n\n // Set lifecycle state\n batch(() => {\n state.lifecycle.loaded.value = true;\n state.lifecycle.status.value = 'loaded';\n });\n\n this.initialized = true;\n\n // Emit an event to use as substitute to the onLoaded callback\n dispatchSDKEvent('RSA_Initialised');\n }\n\n /**\n * Emit ready event\n */\n // eslint-disable-next-line class-methods-use-this\n onReady() {\n state.lifecycle.status.value = 'readyExecuted';\n state.eventBuffer.readyCallbacksArray.value.forEach((callback: ApiCallback) => {\n safelyInvokeCallback(callback, [], READY_API, this.logger);\n });\n\n // Emit an event to use as substitute to the ready callback\n dispatchSDKEvent('RSA_Ready');\n }\n\n /**\n * Consume preloaded events buffer\n */\n processBufferedEvents() {\n // This logic has been intentionally implemented without a simple\n // for-loop as the individual events that are processed may\n // add more events to the buffer (this is needed for the consent API)\n let bufferedEvents = state.eventBuffer.toBeProcessedArray.value;\n while (bufferedEvents.length > 0) {\n const bufferedEvent = bufferedEvents.shift();\n state.eventBuffer.toBeProcessedArray.value = bufferedEvents;\n\n if (bufferedEvent) {\n const methodName = bufferedEvent[0];\n if (isFunction((this as any)[methodName])) {\n // Send additional arg 'true' to indicate that this is a buffered invocation\n (this as any)[methodName](...bufferedEvent.slice(1), true);\n }\n }\n\n bufferedEvents = state.eventBuffer.toBeProcessedArray.value;\n }\n }\n\n /**\n * Load device mode destinations\n */\n loadDestinations() {\n if (state.nativeDestinations.clientDestinationsReady.value) {\n return;\n }\n\n // Set in state the desired activeDestinations to inject in DOM\n this.pluginsManager?.invokeSingle(\n 'nativeDestinations.setActiveDestinations',\n state,\n this.pluginsManager,\n this.errorHandler,\n this.logger,\n );\n\n const totalDestinationsToLoad = state.nativeDestinations.activeDestinations.value.length;\n if (totalDestinationsToLoad === 0) {\n state.lifecycle.status.value = 'destinationsReady';\n return;\n }\n\n // Start loading native integration scripts and create instances\n state.lifecycle.status.value = 'destinationsLoading';\n this.pluginsManager?.invokeSingle(\n 'nativeDestinations.load',\n state,\n this.externalSrcLoader,\n this.errorHandler,\n this.logger,\n );\n\n // Progress to next lifecycle phase if all native destinations are initialized or failed\n effect(() => {\n const areAllDestinationsReady =\n totalDestinationsToLoad === 0 ||\n state.nativeDestinations.initializedDestinations.value.length +\n state.nativeDestinations.failedDestinations.value.length ===\n totalDestinationsToLoad;\n\n if (areAllDestinationsReady) {\n batch(() => {\n state.lifecycle.status.value = 'destinationsReady';\n state.nativeDestinations.clientDestinationsReady.value = true;\n });\n }\n });\n }\n\n /**\n * Move to the ready state\n */\n // eslint-disable-next-line class-methods-use-this\n onDestinationsReady() {\n // May be do any destination specific actions here\n\n // Mark the ready status if not already done\n if (state.lifecycle.status.value !== 'ready') {\n state.lifecycle.status.value = 'ready';\n }\n }\n // End lifecycle methods\n\n // Start consumer exposed methods\n ready(callback: ApiCallback, isBufferedInvocation = false) {\n const type = 'ready';\n\n if (!state.lifecycle.loaded.value) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n [type, callback],\n ];\n return;\n }\n\n this.errorHandler.leaveBreadcrumb(`New ${type} invocation`);\n\n if (!isFunction(callback)) {\n this.logger.error(INVALID_CALLBACK_FN_ERROR(READY_API));\n return;\n }\n\n /**\n * If destinations are loaded or no integration is available for loading\n * execute the callback immediately else push the callbacks to a queue that\n * will be executed after loading completes\n */\n if (state.lifecycle.status.value === 'readyExecuted') {\n safelyInvokeCallback(callback, [], READY_API, this.logger);\n } else {\n state.eventBuffer.readyCallbacksArray.value = [\n ...state.eventBuffer.readyCallbacksArray.value,\n callback,\n ];\n }\n }\n\n page(payload: PageCallOptions, isBufferedInvocation = false) {\n const type = 'page';\n\n if (!state.lifecycle.loaded.value) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n [type, payload],\n ];\n return;\n }\n\n this.errorHandler.leaveBreadcrumb(`New ${type} event`);\n state.metrics.triggered.value += 1;\n\n this.eventManager?.addEvent({\n type: 'page',\n category: payload.category,\n name: payload.name,\n properties: payload.properties,\n options: payload.options,\n callback: payload.callback,\n });\n\n // TODO: Maybe we should alter the behavior to send the ad-block page event even if the SDK is still loaded. It'll be pushed into the to be processed queue.\n\n // Send automatic ad blocked page event if ad-blockers are detected on the page\n // Check page category to avoid infinite loop\n if (\n state.capabilities.isAdBlocked.value === true &&\n payload.category !== ADBLOCK_PAGE_CATEGORY\n ) {\n this.page(\n pageArgumentsToCallOptions(\n ADBLOCK_PAGE_CATEGORY,\n ADBLOCK_PAGE_NAME,\n {\n // 'title' is intentionally omitted as it does not make sense\n // in v3 implementation\n path: ADBLOCK_PAGE_PATH,\n },\n state.loadOptions.value.sendAdblockPageOptions,\n ),\n );\n }\n }\n\n track(payload: TrackCallOptions, isBufferedInvocation = false) {\n const type = 'track';\n\n if (!state.lifecycle.loaded.value) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n [type, payload],\n ];\n return;\n }\n\n this.errorHandler.leaveBreadcrumb(`New ${type} event - ${payload.name}`);\n state.metrics.triggered.value += 1;\n\n this.eventManager?.addEvent({\n type,\n name: payload.name || undefined,\n properties: payload.properties,\n options: payload.options,\n callback: payload.callback,\n });\n }\n\n identify(payload: IdentifyCallOptions, isBufferedInvocation = false) {\n const type = 'identify';\n\n if (!state.lifecycle.loaded.value) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n [type, payload],\n ];\n return;\n }\n\n this.errorHandler.leaveBreadcrumb(`New ${type} event`);\n state.metrics.triggered.value += 1;\n\n const shouldResetSession = Boolean(\n payload.userId && state.session.userId.value && payload.userId !== state.session.userId.value,\n );\n\n if (shouldResetSession) {\n this.reset();\n }\n\n // `null` value indicates that previous user ID needs to be retained\n if (!isNull(payload.userId)) {\n this.userSessionManager?.setUserId(payload.userId);\n }\n this.userSessionManager?.setUserTraits(payload.traits);\n\n this.eventManager?.addEvent({\n type,\n userId: payload.userId,\n traits: payload.traits,\n options: payload.options,\n callback: payload.callback,\n });\n }\n\n alias(payload: AliasCallOptions, isBufferedInvocation = false) {\n const type = 'alias';\n\n if (!state.lifecycle.loaded.value) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n [type, payload],\n ];\n return;\n }\n\n this.errorHandler.leaveBreadcrumb(`New ${type} event`);\n state.metrics.triggered.value += 1;\n\n const previousId =\n payload.from ??\n this.userSessionManager?.getUserId() ??\n this.userSessionManager?.getAnonymousId();\n\n this.eventManager?.addEvent({\n type,\n to: payload.to,\n from: previousId,\n options: payload.options,\n callback: payload.callback,\n });\n }\n\n group(payload: GroupCallOptions, isBufferedInvocation = false) {\n const type = 'group';\n\n if (!state.lifecycle.loaded.value) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n [type, payload],\n ];\n return;\n }\n\n this.errorHandler.leaveBreadcrumb(`New ${type} event`);\n state.metrics.triggered.value += 1;\n\n // `null` value indicates that previous group ID needs to be retained\n if (!isNull(payload.groupId)) {\n this.userSessionManager?.setGroupId(payload.groupId);\n }\n\n this.userSessionManager?.setGroupTraits(payload.traits);\n\n this.eventManager?.addEvent({\n type,\n groupId: payload.groupId,\n traits: payload.traits,\n options: payload.options,\n callback: payload.callback,\n });\n }\n\n reset(resetAnonymousId?: boolean, isBufferedInvocation = false) {\n const type = 'reset';\n\n if (!state.lifecycle.loaded.value) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n [type, resetAnonymousId],\n ];\n return;\n }\n\n this.errorHandler.leaveBreadcrumb(\n `New ${type} invocation, resetAnonymousId: ${resetAnonymousId}`,\n );\n this.userSessionManager?.reset(resetAnonymousId);\n }\n\n getAnonymousId(options?: AnonymousIdOptions): string | undefined {\n return this.userSessionManager?.getAnonymousId(options);\n }\n\n setAnonymousId(\n anonymousId?: string,\n rudderAmpLinkerParam?: string,\n isBufferedInvocation = false,\n ): void {\n const type = 'setAnonymousId';\n // Buffering is needed as setting the anonymous ID may require invoking the GoogleLinker plugin\n if (!state.lifecycle.loaded.value) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n [type, anonymousId, rudderAmpLinkerParam],\n ];\n return;\n }\n\n this.errorHandler.leaveBreadcrumb(`New ${type} invocation`);\n this.userSessionManager?.setAnonymousId(anonymousId, rudderAmpLinkerParam);\n }\n\n // eslint-disable-next-line class-methods-use-this\n getUserId(): Nullable | undefined {\n return state.session.userId.value;\n }\n\n // eslint-disable-next-line class-methods-use-this\n getUserTraits(): Nullable | undefined {\n return state.session.userTraits.value;\n }\n\n // eslint-disable-next-line class-methods-use-this\n getGroupId(): Nullable | undefined {\n return state.session.groupId.value;\n }\n\n // eslint-disable-next-line class-methods-use-this\n getGroupTraits(): Nullable | undefined {\n return state.session.groupTraits.value;\n }\n\n startSession(sessionId?: number, isBufferedInvocation = false): void {\n const type = 'startSession';\n\n if (!state.lifecycle.loaded.value) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n [type, sessionId],\n ];\n return;\n }\n\n this.errorHandler.leaveBreadcrumb(`New ${type} invocation`);\n this.userSessionManager?.start(sessionId);\n }\n\n endSession(isBufferedInvocation = false): void {\n const type = 'endSession';\n\n if (!state.lifecycle.loaded.value) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n [type],\n ];\n return;\n }\n\n this.errorHandler.leaveBreadcrumb(`New ${type} invocation`);\n this.userSessionManager?.end();\n }\n\n // eslint-disable-next-line class-methods-use-this\n getSessionId(): Nullable {\n const sessionId = this.userSessionManager?.getSessionId();\n return sessionId ?? null;\n }\n\n consent(options?: ConsentOptions, isBufferedInvocation = false) {\n const type = 'consent';\n\n if (!state.lifecycle.loaded.value) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n [type, options],\n ];\n return;\n }\n\n this.errorHandler.leaveBreadcrumb(`New consent invocation`);\n\n batch(() => {\n state.consents.preConsent.value = { ...state.consents.preConsent.value, enabled: false };\n state.consents.postConsent.value = getValidPostConsentOptions(options);\n\n const { initialized, consentsData } = getConsentManagementData(\n state.consents.postConsent.value.consentManagement,\n this.logger,\n );\n\n state.consents.initialized.value = initialized || state.consents.initialized.value;\n state.consents.data.value = consentsData;\n });\n\n // Update consents data in state\n if (state.consents.enabled.value && !state.consents.initialized.value) {\n this.pluginsManager?.invokeSingle(\n `consentManager.updateConsentsInfo`,\n state,\n this.storeManager,\n this.logger,\n );\n }\n\n // Re-init store manager\n this.storeManager?.initializeStorageState();\n\n // Re-init user session manager\n this.userSessionManager?.syncStorageDataToState();\n\n // Resume event manager to process the events to destinations\n this.eventManager?.resume();\n\n this.loadDestinations();\n\n this.sendTrackingEvents(isBufferedInvocation);\n }\n\n sendTrackingEvents(isBufferedInvocation: boolean) {\n // If isBufferedInvocation is true, then the tracking events will be added to the end of the\n // events buffer array so that any other preload events (mainly from query string API) will be processed first.\n if (state.consents.postConsent.value.trackConsent) {\n const trackOptions = trackArgumentsToCallOptions(CONSENT_TRACK_EVENT_NAME);\n if (isBufferedInvocation) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n ['track', trackOptions],\n ];\n } else {\n this.track(trackOptions);\n }\n }\n\n if (state.consents.postConsent.value.sendPageEvent) {\n const pageOptions = pageArgumentsToCallOptions();\n if (isBufferedInvocation) {\n state.eventBuffer.toBeProcessedArray.value = [\n ...state.eventBuffer.toBeProcessedArray.value,\n ['page', pageOptions],\n ];\n } else {\n this.page(pageOptions);\n }\n }\n }\n\n setAuthToken(token: string): void {\n this.userSessionManager?.setAuthToken(token);\n }\n // End consumer exposed methods\n}\n\nexport { Analytics };\n","/* eslint-disable sonarjs/deprecation */\nimport { clone } from 'ramda';\nimport {\n getNormalizedBooleanValue,\n getNormalizedObjectValue,\n isNonEmptyObject,\n mergeDeepRight,\n removeUndefinedAndNullValues,\n} from '@rudderstack/analytics-js-common/utilities/object';\nimport type {\n LoadOptions,\n UaChTrackLevel,\n} from '@rudderstack/analytics-js-common/types/LoadOptions';\nimport type { CookieSameSite } from '@rudderstack/analytics-js-common/types/Storage';\nimport { isString } from '@rudderstack/analytics-js-common/utilities/checks';\nimport { defaultOptionalPluginsList } from '../pluginsManager/defaultPluginsList';\nimport { isNumber } from './number';\n\nconst normalizeLoadOptions = (\n loadOptionsFromState: LoadOptions,\n loadOptions: Partial,\n): LoadOptions => {\n // TODO: Maybe add warnings for invalid values\n const normalizedLoadOpts = clone(loadOptions);\n\n if (!isString(normalizedLoadOpts.setCookieDomain)) {\n normalizedLoadOpts.setCookieDomain = undefined;\n }\n\n const cookieSameSiteValues = ['Strict', 'Lax', 'None'];\n if (!cookieSameSiteValues.includes(normalizedLoadOpts.sameSiteCookie as CookieSameSite)) {\n normalizedLoadOpts.sameSiteCookie = undefined;\n }\n\n normalizedLoadOpts.secureCookie = getNormalizedBooleanValue(\n normalizedLoadOpts.secureCookie,\n loadOptionsFromState.secureCookie,\n );\n\n normalizedLoadOpts.sameDomainCookiesOnly = getNormalizedBooleanValue(\n normalizedLoadOpts.sameDomainCookiesOnly,\n loadOptionsFromState.sameDomainCookiesOnly,\n );\n\n const uaChTrackLevels = ['none', 'default', 'full'];\n if (!uaChTrackLevels.includes(normalizedLoadOpts.uaChTrackLevel as UaChTrackLevel)) {\n normalizedLoadOpts.uaChTrackLevel = undefined;\n }\n\n normalizedLoadOpts.integrations = getNormalizedObjectValue(normalizedLoadOpts.integrations);\n\n if (!Array.isArray(normalizedLoadOpts.plugins)) {\n normalizedLoadOpts.plugins = defaultOptionalPluginsList;\n }\n\n normalizedLoadOpts.useGlobalIntegrationsConfigInEvents = getNormalizedBooleanValue(\n normalizedLoadOpts.useGlobalIntegrationsConfigInEvents,\n loadOptionsFromState.useGlobalIntegrationsConfigInEvents,\n );\n\n normalizedLoadOpts.bufferDataPlaneEventsUntilReady = getNormalizedBooleanValue(\n normalizedLoadOpts.bufferDataPlaneEventsUntilReady,\n loadOptionsFromState.bufferDataPlaneEventsUntilReady,\n );\n\n normalizedLoadOpts.sendAdblockPage = getNormalizedBooleanValue(\n normalizedLoadOpts.sendAdblockPage,\n loadOptionsFromState.sendAdblockPage,\n );\n\n normalizedLoadOpts.useServerSideCookies = getNormalizedBooleanValue(\n normalizedLoadOpts.useServerSideCookies,\n loadOptionsFromState.useServerSideCookies,\n );\n\n if (!isString(normalizedLoadOpts.dataServiceEndpoint)) {\n normalizedLoadOpts.dataServiceEndpoint = undefined;\n }\n\n normalizedLoadOpts.sendAdblockPageOptions = getNormalizedObjectValue(\n normalizedLoadOpts.sendAdblockPageOptions,\n );\n\n normalizedLoadOpts.loadIntegration = getNormalizedBooleanValue(\n normalizedLoadOpts.loadIntegration,\n loadOptionsFromState.loadIntegration,\n );\n\n if (!isNonEmptyObject(normalizedLoadOpts.storage)) {\n normalizedLoadOpts.storage = undefined;\n } else {\n normalizedLoadOpts.storage.migrate = getNormalizedBooleanValue(\n normalizedLoadOpts.storage.migrate,\n loadOptionsFromState.storage?.migrate,\n );\n\n normalizedLoadOpts.storage.cookie = getNormalizedObjectValue(normalizedLoadOpts.storage.cookie);\n normalizedLoadOpts.storage.encryption = getNormalizedObjectValue(\n normalizedLoadOpts.storage.encryption,\n );\n normalizedLoadOpts.storage = removeUndefinedAndNullValues(normalizedLoadOpts.storage);\n }\n\n normalizedLoadOpts.destinationsQueueOptions = getNormalizedObjectValue(\n normalizedLoadOpts.destinationsQueueOptions,\n );\n\n normalizedLoadOpts.queueOptions = getNormalizedObjectValue(normalizedLoadOpts.queueOptions);\n\n normalizedLoadOpts.lockIntegrationsVersion = getNormalizedBooleanValue(\n normalizedLoadOpts.lockIntegrationsVersion,\n loadOptionsFromState.lockIntegrationsVersion,\n );\n\n normalizedLoadOpts.lockPluginsVersion = getNormalizedBooleanValue(\n normalizedLoadOpts.lockPluginsVersion,\n loadOptionsFromState.lockPluginsVersion,\n );\n\n if (!isNumber(normalizedLoadOpts.dataPlaneEventsBufferTimeout)) {\n normalizedLoadOpts.dataPlaneEventsBufferTimeout = undefined;\n }\n\n normalizedLoadOpts.beaconQueueOptions = getNormalizedObjectValue(\n normalizedLoadOpts.beaconQueueOptions,\n );\n\n normalizedLoadOpts.preConsent = getNormalizedObjectValue(normalizedLoadOpts.preConsent);\n\n const mergedLoadOptions: LoadOptions = mergeDeepRight(\n loadOptionsFromState,\n removeUndefinedAndNullValues(normalizedLoadOpts),\n );\n\n return mergedLoadOptions;\n};\n\nexport { normalizeLoadOptions };\n","/* eslint-disable unicorn/prefer-export-from */\nimport { clone } from 'ramda';\nimport {\n aliasArgumentsToCallOptions,\n groupArgumentsToCallOptions,\n identifyArgumentsToCallOptions,\n pageArgumentsToCallOptions,\n trackArgumentsToCallOptions,\n} from '@rudderstack/analytics-js-common/utilities/eventMethodOverloads';\nimport type { IRudderAnalytics } from '@rudderstack/analytics-js-common/types/IRudderAnalytics';\nimport type { Nullable } from '@rudderstack/analytics-js-common/types/Nullable';\nimport {\n PageLifecycleEvents,\n type AnonymousIdOptions,\n type ConsentOptions,\n type LoadOptions,\n} from '@rudderstack/analytics-js-common/types/LoadOptions';\nimport type { ApiCallback, ApiOptions } from '@rudderstack/analytics-js-common/types/EventApi';\nimport type { ApiObject } from '@rudderstack/analytics-js-common/types/ApiObject';\nimport { RSA } from '@rudderstack/analytics-js-common/constants/loggerContexts';\nimport type { IdentifyTraits } from '@rudderstack/analytics-js-common/types/traits';\nimport { generateUUID } from '@rudderstack/analytics-js-common/utilities/uuId';\nimport { onPageLeave } from '@rudderstack/analytics-js-common/utilities/page';\nimport { isString } from '@rudderstack/analytics-js-common/utilities/checks';\nimport { getFormattedTimestamp } from '@rudderstack/analytics-js-common/utilities/timestamp';\nimport { dispatchErrorEvent } from '@rudderstack/analytics-js-common/utilities/errors';\nimport { getSanitizedValue } from '@rudderstack/analytics-js-common/utilities/json';\nimport { GLOBAL_PRELOAD_BUFFER } from '../constants/app';\nimport {\n getPreloadedLoadEvent,\n promotePreloadedConsentEventsToTop,\n} from '../components/preloadBuffer';\nimport type { PreloadedEventCall } from '../components/preloadBuffer/types';\nimport { getExposedGlobal, setExposedGlobal } from '../components/utilities/globals';\nimport type { IAnalytics } from '../components/core/IAnalytics';\nimport { Analytics } from '../components/core/Analytics';\nimport { defaultLogger } from '../services/Logger/Logger';\nimport { PAGE_UNLOAD_ON_BEACON_DISABLED_WARNING } from '../constants/logMessages';\nimport { state } from '../state';\n\n// TODO: add analytics restart/reset mechanism\n\n/*\n * RudderAnalytics facade singleton that is exposed as global object and will:\n * expose overloaded methods\n * handle multiple Analytics instances\n * consume SDK preload event buffer\n */\nclass RudderAnalytics implements IRudderAnalytics {\n // START-NO-SONAR-SCAN\n // eslint-disable-next-line sonarjs/public-static-readonly\n static globalSingleton: Nullable = null;\n // END-NO-SONAR-SCAN\n analyticsInstances: Record = {};\n defaultAnalyticsKey = '';\n logger = defaultLogger;\n\n // Singleton with constructor bind methods\n constructor() {\n try {\n if (RudderAnalytics.globalSingleton) {\n // START-NO-SONAR-SCAN\n // eslint-disable-next-line no-constructor-return\n return RudderAnalytics.globalSingleton;\n // END-NO-SONAR-SCAN\n }\n\n this.setDefaultInstanceKey = this.setDefaultInstanceKey.bind(this);\n this.getAnalyticsInstance = this.getAnalyticsInstance.bind(this);\n this.load = this.load.bind(this);\n this.ready = this.ready.bind(this);\n this.triggerBufferedLoadEvent = this.triggerBufferedLoadEvent.bind(this);\n this.page = this.page.bind(this);\n this.track = this.track.bind(this);\n this.identify = this.identify.bind(this);\n this.alias = this.alias.bind(this);\n this.group = this.group.bind(this);\n this.reset = this.reset.bind(this);\n this.getAnonymousId = this.getAnonymousId.bind(this);\n this.setAnonymousId = this.setAnonymousId.bind(this);\n this.getUserId = this.getUserId.bind(this);\n this.getUserTraits = this.getUserTraits.bind(this);\n this.getGroupId = this.getGroupId.bind(this);\n this.getGroupTraits = this.getGroupTraits.bind(this);\n this.startSession = this.startSession.bind(this);\n this.endSession = this.endSession.bind(this);\n this.getSessionId = this.getSessionId.bind(this);\n this.setAuthToken = this.setAuthToken.bind(this);\n this.consent = this.consent.bind(this);\n\n RudderAnalytics.globalSingleton = this;\n\n state.autoTrack.pageLifecycle.visitId.value = generateUUID();\n state.autoTrack.pageLifecycle.pageLoadedTimestamp.value = Date.now();\n\n // start loading if a load event was buffered or wait for explicit load call\n this.triggerBufferedLoadEvent();\n\n // Assign to global \"rudderanalytics\" object after processing the preload buffer (if any exists)\n // for CDN bundling IIFE exports covers this but for npm ESM and CJS bundling has to be done explicitly\n (globalThis as typeof window).rudderanalytics = this;\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n /**\n * Set instance to use if no specific writeKey is provided in methods\n * automatically for the first created instance\n * TODO: to support multiple analytics instances in the near future\n */\n setDefaultInstanceKey(writeKey: string) {\n // IMP: Add try-catch block to handle any unhandled errors\n // similar to other public methods\n // if the implementation of this method goes beyond\n // this simple implementation\n if (isString(writeKey) && writeKey) {\n this.defaultAnalyticsKey = writeKey;\n }\n }\n\n /**\n * Retrieve an existing analytics instance\n */\n getAnalyticsInstance(writeKey?: string): IAnalytics | undefined {\n try {\n let instanceId = writeKey;\n if (!isString(instanceId) || !instanceId) {\n instanceId = this.defaultAnalyticsKey;\n }\n\n const analyticsInstanceExists = Boolean(this.analyticsInstances[instanceId]);\n\n if (!analyticsInstanceExists) {\n this.analyticsInstances[instanceId] = new Analytics();\n }\n\n return this.analyticsInstances[instanceId] as IAnalytics;\n } catch (error: any) {\n dispatchErrorEvent(error);\n return undefined;\n }\n }\n\n /**\n * Loads the SDK\n * @param writeKey Source write key\n * @param dataPlaneUrl Data plane URL\n * @param loadOptions Additional options for loading the SDK\n * @returns none\n */\n load(writeKey: string, dataPlaneUrl: string, loadOptions?: Partial): void {\n try {\n if (this.analyticsInstances[writeKey]) {\n return;\n }\n\n this.setDefaultInstanceKey(writeKey);\n // Get the preloaded events array from global buffer instead of window.rudderanalytics\n // as the constructor must have already pushed the events to the global buffer\n const preloadedEventsArray = getExposedGlobal(GLOBAL_PRELOAD_BUFFER) as PreloadedEventCall[];\n\n // Track page loaded lifecycle event if enabled\n this.trackPageLifecycleEvents(preloadedEventsArray, loadOptions);\n\n // The array will be mutated in the below method\n promotePreloadedConsentEventsToTop(preloadedEventsArray);\n\n setExposedGlobal(GLOBAL_PRELOAD_BUFFER, clone(preloadedEventsArray));\n\n this.analyticsInstances[writeKey] = new Analytics();\n this.getAnalyticsInstance(writeKey)?.load(\n writeKey,\n dataPlaneUrl,\n getSanitizedValue(loadOptions),\n );\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n /**\n * A function to track page lifecycle events like page loaded and page unloaded\n * @param preloadedEventsArray\n * @param loadOptions\n * @returns\n */\n trackPageLifecycleEvents(\n preloadedEventsArray: PreloadedEventCall[],\n loadOptions?: Partial,\n ) {\n const { autoTrack, useBeacon } = loadOptions ?? {};\n const {\n enabled: autoTrackEnabled = false,\n options: autoTrackOptions = {},\n pageLifecycle,\n } = autoTrack ?? {};\n\n const {\n events = [PageLifecycleEvents.LOADED, PageLifecycleEvents.UNLOADED],\n enabled: pageLifecycleEnabled = autoTrackEnabled,\n options = autoTrackOptions,\n } = pageLifecycle ?? {};\n\n state.autoTrack.pageLifecycle.enabled.value = pageLifecycleEnabled;\n\n // Set the autoTrack enabled state\n // if at least one of the autoTrack options is enabled\n // IMPORTANT: make sure this is done at the end as it depends on the above states\n state.autoTrack.enabled.value = autoTrackEnabled || pageLifecycleEnabled;\n\n if (!pageLifecycleEnabled) {\n return;\n }\n this.trackPageLoadedEvent(events, options, preloadedEventsArray);\n this.setupPageUnloadTracking(events, useBeacon, options);\n }\n\n /**\n * Buffer the page loaded event in the preloaded events array\n * @param events\n * @param options\n * @param preloadedEventsArray\n */\n // eslint-disable-next-line class-methods-use-this\n trackPageLoadedEvent(\n events: PageLifecycleEvents[],\n options: ApiOptions,\n preloadedEventsArray: PreloadedEventCall[],\n ) {\n if (events.length === 0 || events.includes(PageLifecycleEvents.LOADED)) {\n preloadedEventsArray.unshift([\n 'track',\n PageLifecycleEvents.LOADED,\n {},\n {\n ...options,\n originalTimestamp: getFormattedTimestamp(\n new Date(state.autoTrack.pageLifecycle.pageLoadedTimestamp.value as number),\n ),\n },\n ]);\n }\n }\n\n /**\n * Setup page unload tracking if enabled\n * @param events\n * @param useBeacon\n * @param options\n */\n setupPageUnloadTracking(\n events: PageLifecycleEvents[],\n useBeacon: boolean | undefined,\n options: ApiOptions,\n ) {\n if (events.length === 0 || events.includes(PageLifecycleEvents.UNLOADED)) {\n if (useBeacon === true) {\n onPageLeave((isAccessible: boolean) => {\n if (isAccessible === false && state.lifecycle.loaded.value) {\n const pageUnloadedTimestamp = Date.now();\n const visitDuration =\n pageUnloadedTimestamp -\n (state.autoTrack.pageLifecycle.pageLoadedTimestamp.value as number);\n\n this.track(\n PageLifecycleEvents.UNLOADED,\n {\n visitDuration,\n },\n {\n ...options,\n originalTimestamp: getFormattedTimestamp(new Date(pageUnloadedTimestamp)),\n },\n );\n }\n });\n } else {\n // log warning if beacon is disabled\n this.logger.warn(PAGE_UNLOAD_ON_BEACON_DISABLED_WARNING(RSA));\n }\n }\n }\n\n /**\n * Trigger load event in buffer queue if exists and stores the\n * remaining preloaded events array in global object\n */\n triggerBufferedLoadEvent() {\n const preloadedEventsArray = Array.isArray((globalThis as typeof window).rudderanalytics)\n ? ((globalThis as typeof window).rudderanalytics as unknown as PreloadedEventCall[])\n : ([] as PreloadedEventCall[]);\n\n // Get any load method call that is buffered if any\n // BTW, load method is also removed from the array\n // So, the Analytics object can directly consume the remaining events\n const loadEvent: PreloadedEventCall = getPreloadedLoadEvent(preloadedEventsArray);\n\n // Set the final preloaded events array in global object\n setExposedGlobal(GLOBAL_PRELOAD_BUFFER, clone([...preloadedEventsArray]));\n\n // Process load method if present in the buffered requests\n if (loadEvent.length > 0) {\n // Remove the event name from the Buffered Event array and keep only arguments\n loadEvent.shift();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.load.apply(null, loadEvent);\n }\n }\n\n /**\n * Get ready callback arguments and forward to ready call\n */\n ready(callback: ApiCallback) {\n try {\n this.getAnalyticsInstance()?.ready(getSanitizedValue(callback));\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n /**\n * Process page arguments and forward to page call\n */\n // These overloads should be same as AnalyticsPageMethod in @rudderstack/analytics-js-common/types/IRudderAnalytics\n page(\n category: string,\n name: string,\n properties?: Nullable,\n options?: Nullable,\n callback?: ApiCallback,\n ): void;\n page(\n category: string,\n name: string,\n properties?: Nullable,\n callback?: ApiCallback,\n ): void;\n page(category: string, name: string, callback?: ApiCallback): void;\n page(\n name: string,\n properties?: Nullable,\n options?: Nullable,\n callback?: ApiCallback,\n ): void;\n page(name: string, properties?: Nullable, callback?: ApiCallback): void;\n page(name: string, callback?: ApiCallback): void;\n page(\n properties: Nullable,\n options?: Nullable,\n callback?: ApiCallback,\n ): void;\n page(properties: Nullable, callback?: ApiCallback): void;\n page(callback?: ApiCallback): void;\n page(\n category?: string | Nullable | ApiCallback,\n name?: string | Nullable | Nullable | ApiCallback,\n properties?: Nullable | Nullable | ApiCallback,\n options?: Nullable | ApiCallback,\n callback?: ApiCallback,\n ) {\n try {\n this.getAnalyticsInstance()?.page(\n pageArgumentsToCallOptions(\n getSanitizedValue(category),\n getSanitizedValue(name),\n getSanitizedValue(properties),\n getSanitizedValue(options),\n getSanitizedValue(callback),\n ),\n );\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n /**\n * Process track arguments and forward to page call\n */\n // These overloads should be same as AnalyticsTrackMethod in @rudderstack/analytics-js-common/types/IRudderAnalytics\n track(\n event: string,\n properties?: Nullable,\n options?: Nullable,\n callback?: ApiCallback,\n ): void;\n track(event: string, properties?: Nullable, callback?: ApiCallback): void;\n track(event: string, callback?: ApiCallback): void;\n track(\n event: string,\n properties?: Nullable | ApiCallback,\n options?: Nullable | ApiCallback,\n callback?: ApiCallback,\n ) {\n try {\n this.getAnalyticsInstance()?.track(\n trackArgumentsToCallOptions(\n getSanitizedValue(event),\n getSanitizedValue(properties),\n getSanitizedValue(options),\n getSanitizedValue(callback),\n ),\n );\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n /**\n * Process identify arguments and forward to page call\n */\n // These overloads should be same as AnalyticsIdentifyMethod in @rudderstack/analytics-js-common/types/IRudderAnalytics\n identify(\n userId: string,\n traits?: Nullable,\n options?: Nullable,\n callback?: ApiCallback,\n ): void;\n identify(userId: string, traits?: Nullable, callback?: ApiCallback): void;\n identify(userId: string, callback?: ApiCallback): void;\n identify(\n traits: Nullable,\n options?: Nullable,\n callback?: ApiCallback,\n ): void;\n identify(traits: Nullable, callback?: ApiCallback): void;\n identify(\n userId: string | number | Nullable,\n traits?: Nullable | Nullable | ApiCallback,\n options?: Nullable | ApiCallback,\n callback?: ApiCallback,\n ) {\n try {\n this.getAnalyticsInstance()?.identify(\n identifyArgumentsToCallOptions(\n getSanitizedValue(userId),\n getSanitizedValue(traits),\n getSanitizedValue(options),\n getSanitizedValue(callback),\n ),\n );\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n /**\n * Process alias arguments and forward to page call\n */\n // These overloads should be same as AnalyticsAliasMethod in @rudderstack/analytics-js-common/types/IRudderAnalytics\n alias(to: string, from?: string, options?: Nullable, callback?: ApiCallback): void;\n alias(to: string, from?: string, callback?: ApiCallback): void;\n alias(to: string, options?: Nullable, callback?: ApiCallback): void;\n alias(to: string, callback?: ApiCallback): void;\n alias(\n to: string,\n from?: string | Nullable | ApiCallback,\n options?: Nullable | ApiCallback,\n callback?: ApiCallback,\n ) {\n try {\n this.getAnalyticsInstance()?.alias(\n aliasArgumentsToCallOptions(\n getSanitizedValue(to),\n getSanitizedValue(from),\n getSanitizedValue(options),\n getSanitizedValue(callback),\n ),\n );\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n /**\n * Process group arguments and forward to page call\n */\n // These overloads should be same as AnalyticsGroupMethod in @rudderstack/analytics-js-common/types/IRudderAnalytics\n group(\n groupId: string,\n traits?: Nullable,\n options?: Nullable,\n callback?: ApiCallback,\n ): void;\n group(groupId: string, traits?: Nullable, callback?: ApiCallback): void;\n group(groupId: string, callback?: ApiCallback): void;\n group(\n traits: Nullable,\n options?: Nullable,\n callback?: ApiCallback,\n ): void;\n group(traits: Nullable, callback?: ApiCallback): void;\n group(\n groupId: string | number | Nullable,\n traits?: Nullable | Nullable | ApiCallback,\n options?: Nullable | ApiCallback,\n callback?: ApiCallback,\n ) {\n try {\n this.getAnalyticsInstance()?.group(\n groupArgumentsToCallOptions(\n getSanitizedValue(groupId),\n getSanitizedValue(traits),\n getSanitizedValue(options),\n getSanitizedValue(callback),\n ),\n );\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n reset(resetAnonymousId?: boolean) {\n try {\n this.getAnalyticsInstance()?.reset(getSanitizedValue(resetAnonymousId));\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n getAnonymousId(options?: AnonymousIdOptions): string | undefined {\n try {\n return this.getAnalyticsInstance()?.getAnonymousId(getSanitizedValue(options));\n } catch (error: any) {\n dispatchErrorEvent(error);\n return undefined;\n }\n }\n\n setAnonymousId(anonymousId?: string, rudderAmpLinkerParam?: string): void {\n try {\n this.getAnalyticsInstance()?.setAnonymousId(\n getSanitizedValue(anonymousId),\n getSanitizedValue(rudderAmpLinkerParam),\n );\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n getUserId() {\n try {\n return this.getAnalyticsInstance()?.getUserId();\n } catch (error: any) {\n dispatchErrorEvent(error);\n return undefined;\n }\n }\n\n getUserTraits() {\n try {\n return this.getAnalyticsInstance()?.getUserTraits();\n } catch (error: any) {\n dispatchErrorEvent(error);\n return undefined;\n }\n }\n\n getGroupId() {\n try {\n return this.getAnalyticsInstance()?.getGroupId();\n } catch (error: any) {\n dispatchErrorEvent(error);\n return undefined;\n }\n }\n\n getGroupTraits() {\n try {\n return this.getAnalyticsInstance()?.getGroupTraits();\n } catch (error: any) {\n dispatchErrorEvent(error);\n return undefined;\n }\n }\n\n startSession(sessionId?: number): void {\n try {\n this.getAnalyticsInstance()?.startSession(getSanitizedValue(sessionId));\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n endSession(): void {\n try {\n this.getAnalyticsInstance()?.endSession();\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n getSessionId() {\n try {\n return this.getAnalyticsInstance()?.getSessionId();\n } catch (error: any) {\n dispatchErrorEvent(error);\n return undefined;\n }\n }\n\n setAuthToken(token: string): void {\n try {\n this.getAnalyticsInstance()?.setAuthToken(getSanitizedValue(token));\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n\n consent(options?: ConsentOptions): void {\n try {\n this.getAnalyticsInstance()?.consent(getSanitizedValue(options));\n } catch (error: any) {\n dispatchErrorEvent(error);\n }\n }\n}\n\nexport { RudderAnalytics };\n","const onPageLeave = (callback: (isAccessible: boolean) => void) => {\n // To ensure the callback is only called once even if more than one events\n // are fired at once.\n let pageLeft = false;\n let isAccessible = false;\n\n function handleOnLeave() {\n if (pageLeft) {\n return;\n }\n\n pageLeft = true;\n\n callback(isAccessible);\n\n // Reset pageLeft on the next tick\n // to ensure callback executes for other listeners\n // when closing an inactive browser tab.\n setTimeout(() => {\n pageLeft = false;\n }, 0);\n }\n\n // Catches the unloading of the page (e.g., closing the tab or navigating away).\n // Includes user actions like clicking a link, entering a new URL,\n // refreshing the page, or closing the browser tab\n // Note that 'pagehide' is not supported in IE.\n // So, this is a fallback.\n (globalThis as typeof window).addEventListener('beforeunload', () => {\n isAccessible = false;\n handleOnLeave();\n });\n\n (globalThis as typeof window).addEventListener('blur', () => {\n isAccessible = true;\n handleOnLeave();\n });\n\n (globalThis as typeof window).addEventListener('focus', () => {\n pageLeft = false;\n });\n\n // Catches the page being hidden, including scenarios like closing the tab.\n document.addEventListener('pagehide', () => {\n isAccessible = document.visibilityState === 'hidden';\n handleOnLeave();\n });\n\n // Catches visibility changes, such as switching tabs or minimizing the browser.\n document.addEventListener('visibilitychange', () => {\n isAccessible = true;\n if (document.visibilityState === 'hidden') {\n handleOnLeave();\n } else {\n pageLeft = false;\n }\n });\n};\n\nexport { onPageLeave };\n","import { RudderAnalytics } from './app/RudderAnalytics';\n\n/*\n * Create new RudderAnalytics facade singleton\n */\nconst {\n setDefaultInstanceKey,\n getAnalyticsInstance,\n load,\n ready,\n page,\n track,\n identify,\n alias,\n group,\n reset,\n getAnonymousId,\n setAnonymousId,\n getUserId,\n getUserTraits,\n getGroupId,\n getGroupTraits,\n startSession,\n endSession,\n getSessionId,\n consent,\n setAuthToken,\n} = new RudderAnalytics();\n\n/*\n * Export as global object the RudderAnalytics facade singleton methods\n */\nexport {\n setDefaultInstanceKey,\n getAnalyticsInstance,\n load,\n ready,\n page,\n track,\n identify,\n alias,\n group,\n reset,\n getAnonymousId,\n setAnonymousId,\n getUserId,\n getUserTraits,\n getGroupId,\n getGroupTraits,\n startSession,\n endSession,\n getSessionId,\n consent,\n setAuthToken,\n};\n"],"names":["_isPlaceholder","a","_curry1","fn","f1","arguments","length","apply","this","_curry2","f2","b","_b","_a","_curry3","f3","c","_c","_has","prop","obj","Object","prototype","hasOwnProperty","call","type","val","undefined","toString","slice","_isObject","x","Number","isInteger","n","_nth","offset","list","idx","charAt","_clone","value","deep","map","_ObjectMap","param","_isPrimitive","pattern","copy","copiedValue","cachedCopy","get","key","set","create","getPrototypeOf","Array","Date","valueOf","RegExp","source","flags","global","ignoreCase","multiline","sticky","unicode","dotAll","hashedKey","hash","bucket","push","join","p","i","element","clone","_path","pathAr","_isInteger","mergeWithKey","l","r","k","result","mergeDeepWithKey","lObj","rObj","lVal","rVal","mergeDeepWith","path","pickBy","test","isFunction","Boolean","constructor","isString","isNull","isUndefined","isNullOrUndefined","isDefined","isDefinedAndNotNull","isTypeOfError","Error","getValueByPath","keyPath","pathParts","split","isObjectLiteralAndNotNull","mergeDeepRightObjectArrays","leftValue","rightValue","isArray","mergedArray","forEach","index","isObject","isObjectAndNotNull","mergeDeepRight","leftObject","rightObject","isNonEmptyObject","keys","removeUndefinedValues","removeUndefinedAndNullValues","getNormalizedObjectValue","getNormalizedBooleanValue","defVal","removeLeadingPeriod","replace","tryStringify","retVal","JSON","stringify","e","toBase64","bytes","binString","from","String","fromCodePoint","globalThis","btoa","bytesToBase64","TextEncoder","encode","pageArgumentsToCallOptions","category","name","properties","options","callback","payload","nameForProperties","categoryForProperties","trackArgumentsToCallOptions","event","identifyArgumentsToCallOptions","userId","traits","aliasArgumentsToCallOptions","to","groupArgumentsToCallOptions","groupId","PageLifecycleEvents","API_SUFFIX","CAPABILITIES_MANAGER","CONFIG_MANAGER","EVENT_MANAGER","PLUGINS_MANAGER","USER_SESSION_MANAGER","ERROR_HANDLER","PLUGIN_ENGINE","READY_API","LOAD_API","ANALYTICS_CORE","BUFFER","HEX","IDX","substring","v4","len","crypto","getRandomValues","Uint8Array","tmp","out","generateUUID","uuidSecure","num","Math","random","uuid","getFormattedTimestamp","date","toISOString","LOG_CONTEXT_SEPARATOR","SCRIPT_LOAD_ERROR","id","url","CIRCULAR_REFERENCE_PLACEHOLDER","getCircularReplacer","excludeNull","excludeKeys","logger","ancestors","includes","pop","warn","CIRCULAR_REFERENCE_WARNING","context","stringifyWithoutCircular","err","getReplacer","isBigInt","traverseWithThis","replacer","sanitizedValue","getSanitizedValue","newValue","MANUAL_ERROR_IDENTIFIER","getStacktrace","stack","stacktrace","operaSourceloc","stackString","getMutatedError","issue","finalError","message","dispatchErrorEvent","error","errStack","dispatchEvent","ErrorEvent","bubbles","cancelable","composed","APP_NAME","APP_VERSION","ADBLOCK_PAGE_CATEGORY","GLOBAL_PRELOAD_BUFFER","QUERY_PARAM_ANONYMOUS_ID_KEY","QUERY_PARAM_USER_ID_KEY","QUERY_PARAM_TRACK_EVENT_NAME_KEY","DEFAULT_SESSION_TIMEOUT_MS","createExposedGlobals","analyticsInstanceId","RudderStackGlobals","setExposedGlobal","keyName","getExposedGlobal","getEventDataFromQueryString","params","dataTypeNamePrefix","data","startsWith","dataKey","retrievePreloadBufferEvents","instance","preloadedEventsArray","retrieveEventsFromQueryString","argumentsArray","eventArgumentToQueryParamMap","queryObject","URLSearchParams","location","search","unshift","enqueuePreloadBufferEvents","consumePreloadBufferedEvent","analyticsInstance","methodName","shift","callOptions","jsFileLoader","timeout","async","extraAttributes","Promise","resolve","reject","document","getElementById","SCRIPT_ALREADY_EXISTS_ERROR","timeoutID","newScriptElement","headElements","getElementsByTagName","insertBefore","firstChild","scriptElements","parentNode","headElement","createElement","appendChild","htmlElement","insertScript","createScriptElement","onload","onerror","scriptElement","src","attributeName","setAttribute","clearTimeout","setTimeout","SCRIPT_LOAD_TIMEOUT_ERROR","ExternalSrcLoader","errorHandler","onError","bind","loadJSFile","config","isFireAndForget","then","catch","Symbol","for","t","s","h","f","o","v","S","u","d","U","y","g","_","E","brand","subscribe","toJSON","peek","defineProperty","N","BufferQueue","items","enqueue","item","dequeue","isEmpty","size","clear","LOG_LEVEL_MAP","LOG","INFO","DEBUG","WARN","ERROR","NONE","POST_LOAD_LOG_LEVEL","defaultLogger","minLogLevel","scope","logProvider","console","log","outputLog","info","debug","logMethod","toLowerCase","formatLogData","setScope","scopeVal","setMinLogLevel","logLevel","msg","trim","styledLogArgs","ErrorType","SUPPORTED_STORAGE_TYPES","DEFAULT_STORAGE_TYPE","SOURCE_CONFIG_RESOLUTION_ERROR","SOURCE_CONFIG_FETCH_ERROR","INVALID_CALLBACK_FN_ERROR","XHR_REQUEST_ERROR","prefix","DEFAULT_INTEGRATIONS_CONFIG","All","CDN_INT_DIR","CDN_PLUGINS_DIR","URL_PATTERN","BUILD_TYPE","SDK_CDN_BASE_URL","CDN_ARCH_VERSION_DIR","DEFAULT_INTEGRATION_SDKS_URL","DEFAULT_PLUGINS_URL","DEFAULT_CONFIG_BE_URL","DEFAULT_STORAGE_ENCRYPTION_VERSION","DEFAULT_DATA_PLANE_EVENTS_TRANSPORT","ConsentManagersToPluginNameMap","iubenda","oneTrust","ketch","custom","StorageEncryptionVersionsToPluginNameMap","legacy","DataPlaneEventsTransportToPluginNameMap","beacon","loadOptionsState","signal","configUrl","loadIntegration","sessions","autoTrack","sameSiteCookie","polyfillIfRequired","integrations","useBeacon","beaconQueueOptions","destinationsQueueOptions","queueOptions","lockIntegrationsVersion","lockPluginsVersion","uaChTrackLevel","plugins","useGlobalIntegrationsConfigInEvents","bufferDataPlaneEventsUntilReady","dataPlaneEventsBufferTimeout","storage","encryption","version","migrate","cookie","sendAdblockPage","sameDomainCookiesOnly","secureCookie","sendAdblockPageOptions","useServerSideCookies","DEFAULT_USER_SESSION_VALUES","userTraits","anonymousId","groupTraits","initialReferrer","initialReferringDomain","sessionInfo","authToken","defaultSessionConfiguration","sessionState","capabilitiesState","isOnline","isLocalStorageAvailable","isCookieStorageAvailable","isSessionStorageAvailable","isBeaconAvailable","isLegacyDOM","isUaCHAvailable","isCryptoAvailable","isIE11","isAdBlocked","reportingState","isErrorReportingEnabled","isMetricsReportingEnabled","breadcrumbs","sourceConfigState","lifecycleState","activeDataplaneUrl","integrationsCDNPath","pluginsCDNPath","sourceConfigUrl","status","initialized","loaded","readyCallbacks","writeKey","dataPlaneUrl","consentsState","enabled","activeConsentManagerPluginName","preConsent","postConsent","resolutionStrategy","provider","metadata","metricsState","retries","dropped","sent","queued","triggered","metricsServiceUrl","contextState","app","namespace","installType","library","snippetVersion","RudderSnippetVersion","userAgent","device","network","os","locale","screen","density","width","height","innerWidth","innerHeight","timezone","nativeDestinationsState","configuredDestinations","activeDestinations","loadOnlyIntegrations","failedDestinations","initializedDestinations","clientDestinationsReady","integrationsConfig","eventBufferState","toBeProcessedArray","readyCallbacksArray","pluginsState","ready","loadedPlugins","failedPlugins","pluginsToLoadFromConfig","activePlugins","totalPluginsToLoad","storageState","encryptionPluginName","entries","trulyAnonymousTracking","serverSideCookiesState","isEnabledServerSideCookies","dataServiceUrl","dataPlaneEventsState","eventsQueuePluginName","deliveryEnabled","autoTrackState","pageLifecycle","visitId","pageLoadedTimestamp","state","capabilities","consents","eventBuffer","lifecycle","loadOptions","metrics","nativeDestinations","reporting","session","serverCookies","dataPlaneEvents","exports","_isNumber","isNaN","parseFloat","isFinite","_capitalize","str","toUpperCase","_getter","booleanProps","numericProps","stringProps","arrayProps","objectProps","props","concat","StackFrame","getArgs","args","setArgs","TypeError","getEvalOrigin","evalOrigin","setEvalOrigin","fileName","getFileName","lineNumber","getLineNumber","columnNumber","getColumnNumber","functionName","getFunctionName","getIsEval","fromString","argsStartIndex","indexOf","argsEndIndex","lastIndexOf","locationString","parts","exec","j","factory","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","require$$0","parse","parseOpera","match","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","filter","line","sanitizedLine","locationParts","functionNameRegex","matches","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","tokens","functionCall","GLOBAL_CODE","ensureString","createException","errorClass","errorMessage","msgPrefix","reduce","accum","frame","file","method","formatStackframe","normalizeError","maybeError","NON_ERROR_WARNING","errStr","responseTextToJson","responseText","FAILED_REQUEST_ERR_MSG_PREFIX","ERROR_MESSAGES_TO_BE_FILTERED","DEFAULT_XHR_REQUEST_OPTIONS","headers","Accept","createXhrRequestOptions","basicAuthHeader","requestOptions","Authorization","xhrRequest","sendRawData","xhr","XMLHttpRequest","xhrError","ontimeout","statusText","response","open","withCredentials","headerName","setRequestHeader","send","XHR_SEND_ERROR","defaultHttpClient","init","getData","isRawResponse","details","reason","getAsyncData","setAuthHeader","noBtoa","authVal","resetAuthHeader","DEV_HOSTS","APP_STATE_EXCLUDE_KEYS","getReleaseStage","host","hostname","getAppStateForMetadata","stateStr","getUserDetails","getDeviceDetails","time","getErrorDeliveryPayload","message_id","sdk_version","write_key","install_type","errors","defaultErrorHandler","httpClient","attachErrorListeners","addEventListener","UNHANDLEDEXCEPTION","UNHANDLEDREJECTION","customMessage","errorType","HANDLEDEXCEPTION","errInstance","getErrInstance","normalizedError","customMsgVal","bsException","createBugsnagException","ErrorStackParser","isSdkDispatched","exception","errorOrigin","srcFileName","paths","some","endsWith","isSDKError","bugsnagPayload","getBugsnagErrorEvent","errorState","payloadVersion","notifier","events","exceptions","severity","unhandled","severityReason","releaseStage","request","href","clientIp","metaData","user","HANDLE_ERROR_FAILURE","leaveBreadcrumb","breadcrumb","timestamp","defaultPluginEngine","byName","cache","throws","register","plugin","PLUGIN_ALREADY_EXISTS_ERROR","pluginName","pos","pluginItem","deps","min","splice","initialize","unregister","PLUGIN_ENGINE_BUG_ERROR","getPlugin","getPlugins","extPoint","lifeCycleName","dependency","notExistDeps","PLUGIN_DEPS_ERROR","hasValueByPath","processRawPlugins","invoke","allowMultiple","extensionPointName","noCall","extensionPointNameParts","pluginMethodPath","PLUGIN_INVOCATION_ERROR","invokeSingle","invokeMultiple","isNonCloudDestination","destination","connectionMode","useNativeSDKToSend","useNativeSDK","getNonCloudDestinations","destinations","pluginNamesList","deprecatedPluginsList","federatedModulesBuildPluginImports","activePluginNames","remotePlugins","lazyLoadImport","__federation_method_getRemote","module","__federation_method_wrapDefault","getFederatedModuleImport","getRemotePluginsMap","pluginsInventory","PluginsManager","engine","setActivePlugins","registerLocalPlugins","registerRemotePlugins","attachEffects","effect","batch","getPluginsToLoadBasedOnConfig","DEPRECATED_PLUGIN_WARNING","pluginGroupsToProcess","configurationStatus","configurationStatusStr","activePluginName","supportedPlugins","values","shouldAddMissingPlugins","shouldApplyDeviceModeTransformation","group","addMissingPlugins","basePlugins","pluginsToConfigure","missingPlugins","generateMisconfiguredPluginsWarning","isSinglePlugin","pluginsString","baseWarning","pluginsToLoad","availablePlugins","localPlugin","remotePluginsList","all","remotePluginKey","remotePluginModule","default","unregisterLocalPlugins","COOKIE_STORAGE","LOCAL_STORAGE","SESSION_STORAGE","MEMORY_STORAGE","NO_STORAGE","COOKIE_KEYS","CLIENT_DATA_STORE_COOKIE","CLIENT_DATA_STORE_LS","CLIENT_DATA_STORE_SESSION","USER_SESSION_KEYS","storageClientDataStoreNameMap","encodeURIComponent","decode","decodeURIComponent","pairs","pair","pairItem","optionsConfig","cookieString","maxage","expires","domain","toUTCString","samesite","secure","hasUAClientHints","navigator","userAgentData","legacyJSEngineRequiredPolyfills","URL","Number.isNaN","Number.isInteger","Array.from","Array.prototype.find","find","Array.prototype.includes","String.prototype.endsWith","String.prototype.startsWith","String.prototype.includes","String.prototype.replaceAll","replaceAll","String.fromCodePoint","Object.entries","Object.values","Object.assign","assign","Object.fromEntries","fromEntries","Element.prototype.dataset","isDatasetAvailable","testElement","dataset","aB","TextDecoder","requestAnimationFrame","cancelAnimationFrame","CustomEvent","navigator.sendBeacon","sendBeacon","ArrayBuffer","Set","atob","getScreenDetails","screenDetails","devicePixelRatio","isStorageQuotaExceeded","isQuotaExceededError","code","DOMException","isStorageAvailable","storageInstance","testData","errObj","isAccessible","localStorage","sessionStorage","setItem","getItem","removeItem","levelsFunc","legacyGetHostname","last","levels","parseInt","getDefaultCookieOptions","topDomain","cname","opts","CookieStorage","static","isSupportAvailable","isEnabled","globalSingleton","configure","defaultInMemoryStorage","isJSON","deserialize","dealIncognito","_KEY","_VALUE","window","inMemoryStorage","_data","Store","ret","has","substr","dt","remove","arr","_Store","store","argm","defaultLocalStorage","getDefaultLocalStorageOptions","defaultSessionStorage","getDefaultSessionStorageOptions","getStorageEngine","configureStorageEngines","cookieStorageOptions","localStorageOptions","inMemoryStorageOptions","sessionStorageOptions","configureCookieStorageEngine","configureInMemoryStorageEngine","configureSessionStorageEngine","pluginsManager","isEncrypted","validKeys","noKeyValidation","noCompoundKey","originalEngine","createValidKey","compoundKey","validKeyName","swapQueueStoreToInMemoryEngine","validKey","encrypt","STORE_DATA_SAVE_ERROR","decryptedValue","decrypt","STORE_DATA_FETCH_ERROR","BAD_COOKIES_WARNING","getOriginalEngine","mode","noEncryption","formattedValue","StoreManager","stores","isInitialized","setCookieDomain","initClientDataStores","initializeStorageState","storageType","setStore","globalStorageType","entriesOptions","postConsentStorageOpts","storageEntries","sessionKey","storageKey","configuredStorageType","preConsentStorageType","getStorageTypeFromPreConsentIfApplicable","overriddenStorageType","strategy","finalStorageType","getResolvedStorageTypeForEntry","STORAGE_UNAVAILABLE_WARNING","entry","selectedStorageType","storeConfig","storageEngine","getStore","getTopDomain","urlObj","protocol","getDataServiceUrl","endpoint","useExactDomain","origin","getTopDomainUrl","removeTrailingSlashes","getDomain","getReferringDomain","referrer","extractUTMParameters","UTM_PREFIX","searchParams","sParam","utmParam","isValidURL","DEFAULT_PRE_CONSENT_STORAGE_STRATEGY","DEFAULT_PRE_CONSENT_EVENTS_DELIVERY_TYPE","isValidConsentsData","getConsentManagerInfo","consentManagementOpts","consentManagerPluginName","UNSUPPORTED_CONSENT_MANAGER_ERROR","consentManagersToPluginNameMap","getConsentManagementData","allowedConsentIds","deniedConsentIds","consentsData","updateReportingState","res","sourceConfig","statsCollection","chrome","runtime","getServerSideCookiesStateData","dataServiceEndpoint","storageOptsFromLoad","finalDataServiceUrl","cookieOptions","sscEnabled","providedCookieDomain","providedDomain","isWebpageTopLevelDomain","curHost","dataServiceHost","SERVER_SIDE_COOKIE_FEATURE_OVERRIDE_WARNING","currentCookieDomain","updateStorageStateFromLoadOptions","isValidStorageType","STORAGE_TYPE_VALIDATION_WARNING","defaultStorageType","storageEncryptionVersion","UNSUPPORTED_STORAGE_ENCRYPTION_VERSION_WARNING","storageEncryptionVersionsToPluginNameMap","defaultVersion","configuredMigrationValue","finalMigrationVal","STORAGE_DATA_MIGRATION_OVERRIDE_WARNING","updateConsentsStateFromLoadOptions","consentManagement","preConsentOpts","storageStrategy","UNSUPPORTED_PRE_CONSENT_STORAGE_STRATEGY","selectedStrategy","eventsDeliveryType","delivery","UNSUPPORTED_PRE_CONSENT_EVENTS_DELIVERY_TYPE","selectedDeliveryType","defaultDeliveryType","updateDataPlaneEventsStateFromLoadOptions","defaultEventsQueuePluginName","getSourceConfigURL","defSearchParams","build","pathname","configUrlInstance","INVALID_CONFIG_URL_WARNING","getSDKComponentBaseURL","componentType","pathSuffix","defaultComponentUrl","currentSdkVersion","lockVersion","urlFromLoadOptions","sdkComponentBaseURL","sdkURL","getSDKUrl","scriptTag","querySelector","rsaWriteKey","scripts","sdkFileNameRegex","script","getAttribute","ConfigManager","processConfig","destSDKBaseURL","pluginsSDKBaseURL","intgCdnUrl","getIntegrationsCDNPath","integrationsUrlFromLoadOptions","getPluginsCDNPath","pluginsUrlFromLoadOptions","getConfig","isValidSourceConfig","deleted","displayName","destinationDefinition","propagateEventsUntransformedOnError","userFriendlyId","filterEnabledDestination","workspaceId","resp","cmpMetadata","consentManagementMetadata","providers","updateConsentsState","sourceConfigFunc","getSourceConfig","pRes","getReferrer","getDefaultPageProperties","canonicalUrl","getCanonicalUrl","tags","tag","tabUrl","pageUrl","urlWithoutHash","getUrlWithoutHash","title","referring_domain","tab_url","POLYFILL_URL","POLYFILL_SCRIPT_ID","CapabilitiesManager","externalSrcLoader","onReady","prepareBrowserCapabilities","attachWindowListeners","detectBrowserCapabilities","onLine","getUserAgent","brave","isBrave","matchedArr","language","browserLanguage","getTimezone","getUserAgentClientHint","level","getHighEntropyValues","ua","uach","baseUrl","responseURL","detectAdBlockers","isLegacyJSEngine","requiredCapabilitiesList","needsPolyfill","isCapabilityMissing","customPolyfillUrl","polyfillURL","polyfillUrl","INVALID_POLYFILL_URL_WARNING","isDefaultPolyfillService","polyfillCallbackName","polyfillCallback","scriptId","POLYFILL_SCRIPT_LOAD_ERROR","func","thisArg","delay","timeoutId","debounce","TOP_LEVEL_ELEMENTS","CONTEXT_RESERVED_ELEMENTS","RESERVED_ELEMENTS","isNumber","isPositiveInteger","hasSessionExpired","expiresAt","now","isManualSessionIdValid","sessionId","minimumLength","INVALID_SESSION_ID_WARNING","minSessionIdLength","hasMinLength","generateManualTrackingSession","sessionStart","manualTrack","isStorageTypeValidForStoringData","generateAnonymousId","getContextPageProperties","pageProps","curPageProps","ctxPageProps","initial_referrer","initial_referring_domain","checkForReservedElementsInObject","parentKeyPath","property","RESERVED_KEYWORD_WARNING","reservedElements","getMergedContext","rudderContext","tempContext","processOptions","rudderEvent","updateTopLevelEventElements","originalTimestamp","getEnrichedEvent","commonEventData","channel","campaign","page","messageId","processedEvent","checkForReservedElements","contextualTraits","finalIntgConfig","getEventIntegrationsConfig","RudderEventFactory","generatePageEvent","getUpdatedPageProperties","optionsPageProps","generateTrackEvent","generateIdentifyEvent","generateAliasEvent","enrichedEvent","previousId","generateGroupEvent","groupEvent","eventObj","EventManager","eventRepository","userSessionManager","eventFactory","resume","addEvent","refreshSession","UserSessionManager","storeManager","serverSideCookieDebounceFuncs","syncStorageDataToState","registerEffects","migrateStorageIfNeeded","migrateDataFromPreviousStorage","setUserId","getUserId","setUserTraits","getUserTraits","setGroupId","getGroupId","setGroupTraits","getGroupTraits","externalAnonymousIdCookieName","anonymousIdOptions","externalAnonymousId","getExternalAnonymousIdByCookieName","setAnonymousId","getAnonymousId","setAuthToken","getAuthToken","setInitialReferrerInfo","configureSessionTracking","getSessionInfo","isPersistenceEnabledForStorageEntry","configuredSessionTrackingInfo","getConfiguredSessionTrackingInfo","initialSessionInfo","startOrRenewAutoTracking","persistedInitialReferrer","getInitialReferrer","persistedInitialReferringDomain","getInitialReferringDomain","setInitialReferrer","setInitialReferringDomain","entryName","storageTypesForMigration","currentStorage","curStore","isDefinedNotNullAndNotEmptyString","storeName","storageEntry","migratedVal","configuredSessionTimeout","TIMEOUT_NOT_NUMBER_WARNING","defaultValue","TIMEOUT_NOT_RECOMMENDED_WARNING","minTimeout","getEncryptedCookieData","cookiesData","encryptedCookieData","cData","encryptedValue","makeRequestToSetCookie","reqType","maxAge","sameSite","cookies","setServerSideCookies","cb","cookieValue","before","each","syncValueToStorage","cookieName","rudderAmpLinkerParam","finalAnonymousId","linkerPluginsResult","persistedAnonymousId","getEntryValue","autoCapturedAnonymousId","getSessionId","reset","resetAnonymousId","noNewSessionStart","startManualTrackingInternal","referringDomain","sessionTimeout","generateAutoTrackingSession","start","end","token","defaultOptionalPluginsList","DATA_PLANE_QUEUE_EXT_POINT_PREFIX","DESTINATIONS_QUEUE_EXT_POINT_PREFIX","getFinalEvent","finalEvent","destinationsIntgConfig","overriddenIntgOpts","getOverriddenIntegrationOptions","eventIntgConfig","intgName","safelyInvokeCallback","apiName","EventRepository","dataplaneEventsQueue","dmtEventsQueue","destinationsEventsQueue","bufferEventsBeforeConsent","shouldBufferEventsForPreConsent","shouldBufferDpEvents","dest","isHybridModeDestination","scheduleTimeoutActive","discardPreConsentEvents","dpQEvent","dQEvent","dispatchSDKEvent","customEvent","detail","rudderanalytics","Analytics","preloadBuffer","capabilitiesManager","load","isWriteKeyValid","isDataPlaneUrlValid","normalizeLoadOptions","loadOptionsFromState","normalizedLoadOpts","startLifecycle","DATA_PLANE_URL_VALIDATION_ERROR","WRITE_KEY_VALIDATION_ERROR","onMounted","onBrowserCapabilitiesReady","onConfigured","onPluginsReady","onInitialized","onLoaded","onDestinationsReady","prepareInternalServices","loadConfig","processBufferedEvents","loadDestinations","bufferedEvents","bufferedEvent","processDataInPreloadBuffer","eventToProcess","configManager","eventManager","onLoadedCallbackFn","totalDestinationsToLoad","isBufferedInvocation","track","identify","alias","startSession","endSession","consent","validOptions","sendPageEvent","trackConsent","clonedOptions","getValidPostConsentOptions","sendTrackingEvents","trackOptions","pageOptions","RudderAnalytics","analyticsInstances","defaultAnalyticsKey","setDefaultInstanceKey","getAnalyticsInstance","triggerBufferedLoadEvent","instanceId","trackPageLifecycleEvents","consentMethodName","consentEvents","nonConsentEvents","promotePreloadedConsentEventsToTop","autoTrackEnabled","autoTrackOptions","LOADED","UNLOADED","pageLifecycleEnabled","trackPageLoadedEvent","setupPageUnloadTracking","pageLeft","handleOnLeave","visibilityState","onPageLeave","pageUnloadedTimestamp","visitDuration","loadEvent","getPreloadedLoadEvent"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,25,26,27,43,71,72,101]}