{"version":3,"file":"rudder-analytics.min.js","sources":["../../node_modules/component-emitter/index.js","../../node_modules/trim/index.js","../../node_modules/component-querystring/index.js","../../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/_clone.js","../../node_modules/ramda/es/internal/_cloneRegExp.js","../../node_modules/ramda/es/clone.js","../../node_modules/ramda/es/internal/_isObject.js","../../node_modules/ramda/es/mergeWithKey.js","../../node_modules/ramda/es/mergeDeepWithKey.js","../../node_modules/ramda/es/mergeDeepWith.js","../../node_modules/component-url/index.js","../../node_modules/isobject/index.js","../../node_modules/get-value/index.js","../../node_modules/@lukeed/uuid/dist/index.mjs","../../node_modules/@lukeed/uuid/secure/index.mjs","../../node_modules/@lukeed/csprng/browser/index.mjs","../../src/utils/logUtil.js","../../src/integrations/AdobeAnalytics/constants.js","../../src/integrations/BingAds/constants.js","../../src/integrations/Bugsnag/constants.js","../../src/integrations/Clevertap/constants.js","../../src/integrations/Comscore/constants.js","../../src/integrations/Criteo/constants.js","../../src/integrations/CustomerIO/constants.js","../../src/integrations/Drip/constants.js","../../src/integrations/Fullstory/constants.js","../../src/integrations/GA/constants.js","../../src/integrations/GA4/constants.js","../../src/integrations/GoogleAds/constants.js","../../src/integrations/GoogleOptimize/constants.js","../../src/integrations/GoogleTagManager/constants.js","../../src/integrations/HubSpot/constants.js","../../src/integrations/INTERCOM/constants.js","../../src/integrations/Kissmetrics/constants.js","../../src/integrations/Klaviyo/constants.js","../../src/integrations/LaunchDarkly/constants.js","../../src/integrations/LinkedInInsightTag/constants.js","../../src/integrations/Lotame/constants.js","../../src/integrations/Lytics/constants.js","../../src/integrations/Mixpanel/constants.js","../../src/integrations/MoEngage/constants.js","../../src/integrations/Optimizely/constants.js","../../src/integrations/Pendo/constants.js","../../src/integrations/PostAffiliatePro/constants.js","../../src/integrations/Posthog/constants.js","../../src/integrations/ProfitWell/constants.js","../../src/integrations/Qualtrics/constants.js","../../src/integrations/QuantumMetric/constants.js","../../src/integrations/RedditPixel/constants.js","../../src/integrations/Sentry/constants.js","../../src/integrations/SnapPixel/constants.js","../../src/integrations/TVSquared/constants.js","../../src/integrations/VWO/constants.js","../../src/integrations/Matomo/constants.js","../../src/integrations/Vero/constants.js","../../src/integrations/Mouseflow/constants.js","../../src/integrations/Rockerbox/constants.js","../../src/integrations/ConvertFlow/constants.js","../../src/integrations/SnapEngage/constants.js","../../src/integrations/LiveChat/constants.js","../../src/integrations/Shynet/constants.js","../../src/integrations/Woopra/constants.js","../../src/integrations/RollBar/constants.js","../../src/integrations/QuoraPixel/constants.js","../../src/integrations/June/constants.js","../../src/integrations/Engage/constants.js","../../src/integrations/Iterable/constants.js","../../src/integrations/Refiner/constants.js","../../src/integrations/Qualaroo/constants.js","../../src/integrations/Podsights/constants.js","../../src/integrations/Axeptio/constants.js","../../src/integrations/MicrosoftClarity/constants.js","../../src/integrations/Sendinblue/constants.js","../../src/integrations/Olark/constants.js","../../src/integrations/Lemnisk/constants.js","../../src/integrations/Amplitude/constants.js","../../src/integrations/Appcues/constants.js","../../src/integrations/Braze/constants.js","../../src/integrations/Chartbeat/constants.js","../../src/integrations/FacebookPixel/constants.js","../../src/integrations/Heap/constants.js","../../src/integrations/Hotjar/constants.js","../../src/integrations/Keen/constants.js","../../src/integrations/PinterestTag/constants.js","../../src/integrations/GA360/constants.js","../../src/integrations/Adroll/constants.js","../../src/integrations/DCMFloodlight/constants.js","../../src/integrations/YandexMetrica/constants.js","../../src/integrations/Satismeter/constants.js","../../src/utils/integration_cname.js","../../src/utils/client_server_name.js","../../src/utils/constants.js","../../node_modules/crypto-js/core.js","../../node_modules/crypto-js/enc-base64.js","../../node_modules/crypto-js/md5.js","../../node_modules/crypto-js/sha1.js","../../node_modules/crypto-js/evpkdf.js","../../node_modules/crypto-js/hmac.js","../../node_modules/crypto-js/cipher-core.js","../../node_modules/crypto-js/aes.js","../../node_modules/crypto-js/enc-utf8.js","../../node_modules/debug/node_modules/ms/index.js","../../node_modules/debug/src/common.js","../../node_modules/debug/src/browser.js","../../node_modules/rudder-component-cookie/index.js","../../node_modules/@ndhoule/drop/index.js","../../node_modules/@ndhoule/rest/index.js","../../node_modules/@ndhoule/defaults/index.js","../../node_modules/component-cookie/index.js","../../node_modules/@segment/top-domain/lib/index.js","../../src/utils/storage/cookie.js","../../node_modules/storejs/dist/store.js","../../src/utils/storage/store.js","../../src/utils/storage/storage.js","../../src/utils/storage/index.js","../../src/utils/ScriptLoader.js","../../src/utils/errorHandler.js","../../src/utils/utils.js","../../node_modules/@lukeed/uuid/dist/index.js","../../src/utils/RudderApp.js","../../src/utils/RudderInfo.js","../../src/utils/RudderContext.js","../../src/utils/screenDetails.js","../../src/utils/navigator.js","../../src/utils/RudderMessage.js","../../src/utils/RudderElement.js","../../src/utils/RudderElementBuilder.js","../../node_modules/uuid/dist/esm-browser/rng.js","../../node_modules/@ndhoule/keys/index.js","../../node_modules/uuid/dist/esm-browser/regex.js","../../node_modules/uuid/dist/esm-browser/validate.js","../../node_modules/uuid/dist/esm-browser/stringify.js","../../node_modules/uuid/dist/esm-browser/v1.js","../../node_modules/uuid/dist/esm-browser/parse.js","../../node_modules/uuid/dist/esm-browser/v35.js","../../node_modules/uuid/dist/esm-browser/md5.js","../../node_modules/uuid/dist/esm-browser/v3.js","../../node_modules/uuid/dist/esm-browser/sha1.js","../../node_modules/uuid/dist/esm-browser/v5.js","../../node_modules/uuid/dist/esm-browser/v4.js","../../node_modules/uuid/dist/esm-browser/nil.js","../../node_modules/uuid/dist/esm-browser/version.js","../../node_modules/@segment/localstorage-retry/lib/engine.js","../../node_modules/@ndhoule/each/index.js","../../node_modules/@segment/localstorage-retry/lib/store.js","../../node_modules/@segment/localstorage-retry/lib/schedule.js","../../node_modules/@segment/localstorage-retry/lib/index.js","../../src/utils/xhrModule.js","../../src/utils/beaconQueue.js","../../src/utils/EventRepository.js","../../src/utils/linker/userLib.js","../../src/utils/linker/base64decoder.js","../../src/utils/linker/index.js","../../src/utils/linker/crc32.js","../../src/utils/config_to_integration_names.js","../../src/features/core/cookieConsent/OneTrust/browser.js","../../src/features/core/cookieConsent/CookieConsentFactory.js","../../src/features/core/metrics/error-report/Bugsnag.js","../../src/features/core/session/index.js","../../src/utils/ObjectUtils.js","../../src/utils/eventProcessorUtils.js","../../src/core/analytics.js","../../src/utils/IntegrationsData.js","../../src/utils/cdnPaths.js"],"sourcesContent":["\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n // Remove event specific arrays for event types that no\r\n // one is subscribed for to avoid memory leak.\r\n if (callbacks.length === 0) {\r\n delete this._callbacks['$' + event];\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n\r\n var args = new Array(arguments.length - 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n args[i - 1] = arguments[i];\r\n }\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","exports = module.exports = trim;\n\nfunction trim(str){\n if (str.trim) return str.trim();\n return exports.right(exports.left(str));\n}\n\nexports.left = function(str){\n if (str.trimLeft) return str.trimLeft();\n\n return str.replace(/^\\s\\s*/, '');\n};\n\nexports.right = function(str){\n if (str.trimRight) return str.trimRight();\n\n var whitespace_pattern = /\\s/,\n i = str.length;\n while (whitespace_pattern.test(str.charAt(--i)));\n\n return str.slice(0, i + 1);\n};\n","\n/**\n * Module dependencies.\n */\n\nvar trim = require('trim');\nvar type = require('type');\n\nvar pattern = /(\\w+)\\[(\\d+)\\]/;\n\n/**\n * Safely encode the given string\n * \n * @param {String} str\n * @return {String}\n * @api private\n */\n\nvar encode = function(str) {\n try {\n return encodeURIComponent(str);\n } catch (e) {\n return str;\n }\n};\n\n/**\n * Safely decode the string\n * \n * @param {String} str\n * @return {String}\n * @api private\n */\n\nvar decode = function(str) {\n try {\n return decodeURIComponent(str.replace(/\\+/g, ' '));\n } catch (e) {\n return str;\n }\n}\n\n/**\n * Parse the given query `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api public\n */\n\nexports.parse = function(str){\n if ('string' != typeof str) return {};\n\n str = trim(str);\n if ('' == str) return {};\n if ('?' == str.charAt(0)) str = str.slice(1);\n\n var obj = {};\n var pairs = str.split('&');\n for (var i = 0; i < pairs.length; i++) {\n var parts = pairs[i].split('=');\n var key = decode(parts[0]);\n var m;\n\n if (m = pattern.exec(key)) {\n obj[m[1]] = obj[m[1]] || [];\n obj[m[1]][m[2]] = decode(parts[1]);\n continue;\n }\n\n obj[parts[0]] = null == parts[1]\n ? ''\n : decode(parts[1]);\n }\n\n return obj;\n};\n\n/**\n * Stringify the given `obj`.\n *\n * @param {Object} obj\n * @return {String}\n * @api public\n */\n\nexports.stringify = function(obj){\n if (!obj) return '';\n var pairs = [];\n\n for (var key in obj) {\n var value = obj[key];\n\n if ('array' == type(value)) {\n for (var i = 0; i < value.length; ++i) {\n pairs.push(encode(key + '[' + i + ']') + '=' + encode(value[i]));\n }\n continue;\n }\n\n pairs.push(encode(key) + '=' + encode(obj[key]));\n }\n\n return pairs.join('&');\n};\n","export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","import _isPlaceholder from \"./_isPlaceholder.js\";\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 */\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 * 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 */\n\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\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 * 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 */\n\nexport default function _curry3(fn) {\n return function f3(a, b, c) {\n switch (arguments.length) {\n case 0:\n return f3;\n\n case 1:\n return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n });\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\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 * 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(undefined); //=> \"Undefined\"\n */\n\nvar type =\n/*#__PURE__*/\n_curry1(function type(val) {\n return val === null ? 'Null' : val === undefined ? 'Undefined' : Object.prototype.toString.call(val).slice(8, -1);\n});\n\nexport default type;","import _cloneRegExp from \"./_cloneRegExp.js\";\nimport type from \"../type.js\";\n/**\n * Copies an object.\n *\n * @private\n * @param {*} value The value to be copied\n * @param {Array} refFrom Array containing the source references\n * @param {Array} refTo Array containing the copied source references\n * @param {Boolean} deep Whether or not to perform deep cloning.\n * @return {*} The copied value.\n */\n\nexport default function _clone(value, refFrom, refTo, deep) {\n var copy = function copy(copiedValue) {\n var len = refFrom.length;\n var idx = 0;\n\n while (idx < len) {\n if (value === refFrom[idx]) {\n return refTo[idx];\n }\n\n idx += 1;\n }\n\n refFrom[idx] = value;\n refTo[idx] = copiedValue;\n\n for (var key in value) {\n if (value.hasOwnProperty(key)) {\n copiedValue[key] = deep ? _clone(value[key], refFrom, refTo, true) : value[key];\n }\n }\n\n return copiedValue;\n };\n\n switch (type(value)) {\n case 'Object':\n return copy(Object.create(Object.getPrototypeOf(value)));\n\n case 'Array':\n return copy([]);\n\n case 'Date':\n return new Date(value.valueOf());\n\n case 'RegExp':\n return _cloneRegExp(value);\n\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\n default:\n return value;\n }\n}","export default function _cloneRegExp(pattern) {\n return new RegExp(pattern.source, (pattern.global ? 'g' : '') + (pattern.ignoreCase ? 'i' : '') + (pattern.multiline ? 'm' : '') + (pattern.sticky ? 'y' : '') + (pattern.unicode ? 'u' : ''));\n}","import _clone from \"./internal/_clone.js\";\nimport _curry1 from \"./internal/_curry1.js\";\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 */\n\nvar clone =\n/*#__PURE__*/\n_curry1(function clone(value) {\n return value != null && typeof value.clone === 'function' ? value.clone() : _clone(value, [], [], true);\n});\n\nexport default clone;","export default function _isObject(x) {\n return Object.prototype.toString.call(x) === '[object Object]';\n}","import _curry3 from \"./internal/_curry3.js\";\nimport _has from \"./internal/_has.js\";\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 */\n\nvar mergeWithKey =\n/*#__PURE__*/\n_curry3(function mergeWithKey(fn, l, r) {\n var result = {};\n var k;\n\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\n for (k in r) {\n if (_has(k, r) && !_has(k, result)) {\n result[k] = r[k];\n }\n }\n\n return result;\n});\n\nexport default mergeWithKey;","import _curry3 from \"./internal/_curry3.js\";\nimport _isObject from \"./internal/_isObject.js\";\nimport mergeWithKey from \"./mergeWithKey.js\";\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 */\n\nvar mergeDeepWithKey =\n/*#__PURE__*/\n_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});\n\nexport default mergeDeepWithKey;","import _curry3 from \"./internal/_curry3.js\";\nimport mergeDeepWithKey from \"./mergeDeepWithKey.js\";\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 */\n\nvar mergeDeepWith =\n/*#__PURE__*/\n_curry3(function mergeDeepWith(fn, lObj, rObj) {\n return mergeDeepWithKey(function (k, lVal, rVal) {\n return fn(lVal, rVal);\n }, lObj, rObj);\n});\n\nexport default mergeDeepWith;","\n/**\n * Parse the given `url`.\n *\n * @param {String} str\n * @return {Object}\n * @api public\n */\n\nexports.parse = function(url){\n var a = document.createElement('a');\n a.href = url;\n return {\n href: a.href,\n host: a.host || location.host,\n port: ('0' === a.port || '' === a.port) ? port(a.protocol) : a.port,\n hash: a.hash,\n hostname: a.hostname || location.hostname,\n pathname: a.pathname.charAt(0) != '/' ? '/' + a.pathname : a.pathname,\n protocol: !a.protocol || ':' == a.protocol ? location.protocol : a.protocol,\n search: a.search,\n query: a.search.slice(1)\n };\n};\n\n/**\n * Check if `url` is absolute.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isAbsolute = function(url){\n return 0 == url.indexOf('//') || !!~url.indexOf('://');\n};\n\n/**\n * Check if `url` is relative.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isRelative = function(url){\n return !exports.isAbsolute(url);\n};\n\n/**\n * Check if `url` is cross domain.\n *\n * @param {String} url\n * @return {Boolean}\n * @api public\n */\n\nexports.isCrossDomain = function(url){\n url = exports.parse(url);\n var location = exports.parse(window.location.href);\n return url.hostname !== location.hostname\n || url.port !== location.port\n || url.protocol !== location.protocol;\n};\n\n/**\n * Return default port for `protocol`.\n *\n * @param {String} protocol\n * @return {String}\n * @api private\n */\nfunction port (protocol){\n switch (protocol) {\n case 'http:':\n return 80;\n case 'https:':\n return 443;\n default:\n return location.port;\n }\n}\n","/*!\n * isobject \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isObject(val) {\n return val != null && typeof val === 'object' && Array.isArray(val) === false;\n};\n","/*!\n * get-value \n *\n * Copyright (c) 2014-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nconst isObject = require('isobject');\n\nmodule.exports = function(target, path, options) {\n if (!isObject(options)) {\n options = { default: options };\n }\n\n if (!isValidObject(target)) {\n return typeof options.default !== 'undefined' ? options.default : target;\n }\n\n if (typeof path === 'number') {\n path = String(path);\n }\n\n const isArray = Array.isArray(path);\n const isString = typeof path === 'string';\n const splitChar = options.separator || '.';\n const joinChar = options.joinChar || (typeof splitChar === 'string' ? splitChar : '.');\n\n if (!isString && !isArray) {\n return target;\n }\n\n if (isString && path in target) {\n return isValid(path, target, options) ? target[path] : options.default;\n }\n\n let segs = isArray ? path : split(path, splitChar, options);\n let len = segs.length;\n let idx = 0;\n\n do {\n let prop = segs[idx];\n if (typeof prop === 'number') {\n prop = String(prop);\n }\n\n while (prop && prop.slice(-1) === '\\\\') {\n prop = join([prop.slice(0, -1), segs[++idx] || ''], joinChar, options);\n }\n\n if (prop in target) {\n if (!isValid(prop, target, options)) {\n return options.default;\n }\n\n target = target[prop];\n } else {\n let hasProp = false;\n let n = idx + 1;\n\n while (n < len) {\n prop = join([prop, segs[n++]], joinChar, options);\n\n if ((hasProp = prop in target)) {\n if (!isValid(prop, target, options)) {\n return options.default;\n }\n\n target = target[prop];\n idx = n - 1;\n break;\n }\n }\n\n if (!hasProp) {\n return options.default;\n }\n }\n } while (++idx < len && isValidObject(target));\n\n if (idx === len) {\n return target;\n }\n\n return options.default;\n};\n\nfunction join(segs, joinChar, options) {\n if (typeof options.join === 'function') {\n return options.join(segs);\n }\n return segs[0] + joinChar + segs[1];\n}\n\nfunction split(path, splitChar, options) {\n if (typeof options.split === 'function') {\n return options.split(path);\n }\n return path.split(splitChar);\n}\n\nfunction isValid(key, target, options) {\n if (typeof options.isValid === 'function') {\n return options.isValid(key, target);\n }\n return true;\n}\n\nfunction isValidObject(val) {\n return isObject(val) || Array.isArray(val) || typeof val === 'function';\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 { 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","const LOG_LEVEL_INFO = 1;\nconst LOG_LEVEL_DEBUG = 2;\nconst LOG_LEVEL_WARN = 3;\nconst LOG_LEVEL_ERROR = 4;\nconst DEF_LOG_LEVEL = LOG_LEVEL_ERROR;\nlet LOG_LEVEL = DEF_LOG_LEVEL;\n\nconst logger = {\n setLogLevel(logLevel) {\n switch (logLevel.toUpperCase()) {\n case 'INFO':\n LOG_LEVEL = LOG_LEVEL_INFO;\n break;\n case 'DEBUG':\n LOG_LEVEL = LOG_LEVEL_DEBUG;\n break;\n case 'WARN':\n LOG_LEVEL = LOG_LEVEL_WARN;\n break;\n default:\n LOG_LEVEL = DEF_LOG_LEVEL;\n break;\n }\n },\n\n info(...args) {\n if (LOG_LEVEL <= LOG_LEVEL_INFO) {\n console.info(...args);\n }\n },\n\n debug(...args) {\n if (LOG_LEVEL <= LOG_LEVEL_DEBUG) {\n console.log(...args);\n }\n },\n\n warn(...args) {\n if (LOG_LEVEL <= LOG_LEVEL_WARN) {\n console.warn(...args);\n }\n },\n\n error(...args) {\n if (LOG_LEVEL <= LOG_LEVEL_ERROR) {\n console.error(...args);\n }\n },\n};\n\nexport default logger;\n","const NAME = 'ADOBE_ANALYTICS';\nconst CNameMapping = {\n 'Adobe Analytics': NAME,\n ADOBEANALYTICS: NAME,\n 'ADOBE ANALYTICS': NAME,\n [NAME]: NAME,\n AdobeAnalytics: NAME,\n adobeanalytics: NAME,\n 'adobe analytics': NAME,\n 'Adobe analytics': NAME,\n 'adobe Analytics': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'BINGADS';\nconst CNameMapping = {\n [NAME]: NAME,\n BingAds: NAME,\n bingads: NAME,\n 'Bing Ads': NAME,\n 'Bing ads': NAME,\n 'bing Ads': NAME,\n 'bing ads': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'BUGSNAG';\nconst CNameMapping = {\n [NAME]: NAME,\n bugsnag: NAME,\n Bugsnag: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'CLEVERTAP';\nconst CNameMapping = {\n [NAME]: NAME,\n Clevertap: NAME,\n clevertap: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'COMSCORE';\nconst CNameMapping = {\n [NAME]: NAME,\n Comscore: NAME,\n 'Com Score': NAME,\n 'com Score': NAME,\n 'com score': NAME,\n 'Com score': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'CRITEO';\n\nconst CNameMapping = {\n [NAME]: NAME,\n Criteo: NAME,\n criteo: NAME,\n};\n\nconst supportedEvents = ['product viewed', 'cart viewed', 'order completed', 'product list viewed'];\n\nexport { NAME, CNameMapping, supportedEvents };\n","const NAME = 'CUSTOMERIO';\nconst CNameMapping = {\n [NAME]: NAME,\n Customerio: NAME,\n 'Customer.io': NAME,\n 'CUSTOMER.IO': NAME,\n 'customer.io': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'DRIP';\nconst CNameMapping = {\n [NAME]: NAME,\n Drip: NAME,\n drip: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'FULLSTORY';\nconst CNameMapping = {\n [NAME]: NAME,\n Fullstory: NAME,\n FullStory: NAME,\n 'full Story': NAME,\n 'Full Story': NAME,\n 'Full story': NAME,\n 'full story': NAME,\n fullstory: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'GA';\nconst CNameMapping = {\n [NAME]: NAME,\n 'Google Analytics': NAME,\n GoogleAnalytics: NAME,\n 'GOOGLE ANALYTICS': NAME,\n 'google analytics': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'GA4';\nconst CNameMapping = {\n [NAME]: NAME,\n 'Google Analytics 4': NAME,\n 'Google analytics 4': NAME,\n 'google analytics 4': NAME,\n 'Google Analytics4': NAME,\n 'Google analytics4': NAME,\n 'google analytics4': NAME,\n GoogleAnalytics4: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'GOOGLEADS';\nconst CNameMapping = {\n [NAME]: NAME,\n 'Google Ads': NAME,\n GoogleAds: NAME,\n 'GOOGLE ADS': NAME,\n 'google ads': NAME,\n googleads: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'GOOGLE_OPTIMIZE';\nconst CNameMapping = {\n [NAME]: NAME,\n 'Google Optimize': NAME,\n GoogleOptimize: NAME,\n Googleoptimize: NAME,\n GOOGLEOPTIMIZE: NAME,\n 'google optimize': NAME,\n 'Google optimize': NAME,\n 'GOOGLE OPTIMIZE': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'GTM';\nconst CNameMapping = {\n [NAME]: NAME,\n 'Google Tag Manager': NAME,\n 'google tag manager': NAME,\n 'googletag manager': NAME,\n googletagmanager: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'HS';\nconst CNameMapping = {\n [NAME]: NAME,\n Hubspot: NAME,\n HUBSPOT: NAME,\n 'hub spot': NAME,\n 'Hub Spot': NAME,\n 'Hub spot': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'INTERCOM';\nconst CNameMapping = {\n [NAME]: NAME,\n Intercom: NAME,\n intercom: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'KISSMETRICS';\nconst CNameMapping = {\n [NAME]: NAME,\n Kissmetrics: NAME,\n kissmetrics: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'KLAVIYO';\nconst CNameMapping = {\n [NAME]: NAME,\n Klaviyo: NAME,\n klaviyo: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'LAUNCHDARKLY';\nconst CNameMapping = {\n [NAME]: NAME,\n LaunchDarkly: NAME,\n Launch_Darkly: NAME,\n 'Launch Darkly': NAME,\n launchDarkly: NAME,\n 'launch darkly': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'LINKEDIN_INSIGHT_TAG';\nconst CNameMapping = {\n [NAME]: NAME,\n 'LinkedIn Insight Tag': NAME,\n 'LinkedIn insight tag': NAME,\n 'linkedIn insight tag': NAME,\n Linkedin_insight_tag: NAME,\n LinkedinInsighttag: NAME,\n LinkedinInsightTag: NAME,\n LinkedInInsightTag: NAME,\n Linkedininsighttag: NAME,\n LINKEDININSIGHTTAG: NAME,\n linkedininsighttag: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'LOTAME';\nconst CNameMapping = {\n [NAME]: NAME,\n Lotame: NAME,\n lotame: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'LYTICS';\nconst CNameMapping = {\n [NAME]: NAME,\n Lytics: NAME,\n lytics: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'MP';\nconst CNameMapping = {\n [NAME]: NAME,\n MIXPANEL: NAME,\n Mixpanel: NAME,\n 'MIX PANEL': NAME,\n 'Mix panel': NAME,\n 'Mix Panel': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'MOENGAGE';\nconst CNameMapping = {\n [NAME]: NAME,\n MoEngage: NAME,\n moengage: NAME,\n Moengage: NAME,\n 'Mo Engage': NAME,\n 'mo engage': NAME,\n 'Mo engage': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'OPTIMIZELY';\nconst CNameMapping = {\n [NAME]: NAME,\n Optimizely: NAME,\n optimizely: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'PENDO';\nconst CNameMapping = {\n [NAME]: NAME,\n Pendo: NAME,\n pendo: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'POST_AFFILIATE_PRO';\nconst CNameMapping = {\n [NAME]: NAME,\n PostAffiliatePro: NAME,\n Post_affiliate_pro: NAME,\n 'Post Affiliate Pro': NAME,\n 'Post affiliate pro': NAME,\n 'post affiliate pro': NAME,\n postaffiliatepro: NAME,\n POSTAFFILIATEPRO: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'POSTHOG';\nconst CNameMapping = {\n [NAME]: NAME,\n PostHog: NAME,\n Posthog: NAME,\n posthog: NAME,\n 'Post Hog': NAME,\n 'Post hog': NAME,\n 'post hog': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'PROFITWELL';\nconst CNameMapping = {\n [NAME]: NAME,\n ProfitWell: NAME,\n profitwell: NAME,\n Profitwell: NAME,\n 'Profit Well': NAME,\n 'profit well': NAME,\n 'Profit well': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'QUALTRICS';\nconst CNameMapping = {\n [NAME]: NAME,\n Qualtrics: NAME,\n qualtrics: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'QUANTUMMETRIC';\nconst CNameMapping = {\n [NAME]: NAME,\n 'Quantum Metric': NAME,\n 'quantum Metric': NAME,\n 'quantum metric': NAME,\n QuantumMetric: NAME,\n quantumMetric: NAME,\n quantummetric: NAME,\n Quantum_Metric: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'REDDIT_PIXEL';\nconst CNameMapping = {\n [NAME]: NAME,\n Reddit_Pixel: NAME,\n RedditPixel: NAME,\n REDDITPIXEL: NAME,\n redditpixel: NAME,\n 'Reddit Pixel': NAME,\n 'REDDIT PIXEL': NAME,\n 'reddit pixel': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'SENTRY';\nconst CNameMapping = {\n [NAME]: NAME,\n sentry: NAME,\n Sentry: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'SNAP_PIXEL';\nconst CNameMapping = {\n [NAME]: NAME,\n Snap_Pixel: NAME,\n SnapPixel: NAME,\n SNAPPIXEL: NAME,\n snappixel: NAME,\n 'Snap Pixel': NAME,\n 'SNAP PIXEL': NAME,\n 'snap pixel': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'TVSQUARED';\nconst CNameMapping = {\n [NAME]: NAME,\n TVSquared: NAME,\n tvsquared: NAME,\n tvSquared: NAME,\n TvSquared: NAME,\n Tvsquared: NAME,\n 'TV Squared': NAME,\n 'tv squared': NAME,\n 'tv Squared': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'VWO';\nconst CNameMapping = {\n [NAME]: NAME,\n VisualWebsiteOptimizer: NAME,\n Visualwebsiteoptimizer: NAME,\n visualwebsiteoptimizer: NAME,\n vwo: NAME,\n 'Visual Website Optimizer': NAME,\n 'Visual website optimizer': NAME,\n 'visual website optimizer': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'MATOMO';\nconst CNameMapping = {\n [NAME]: NAME,\n Matomo: NAME,\n matomo: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'VERO';\nconst CNameMapping = {\n [NAME]: NAME,\n Vero: NAME,\n vero: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'MOUSEFLOW';\nconst CNameMapping = {\n [NAME]: NAME,\n Mouseflow: NAME,\n mouseflow: NAME,\n mouseFlow: NAME,\n MouseFlow: NAME,\n 'Mouse flow': NAME,\n 'mouse flow': NAME,\n 'mouse Flow': NAME,\n 'Mouse Flow': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'ROCKERBOX';\nconst CNameMapping = {\n [NAME]: NAME,\n Rockerbox: NAME,\n rockerbox: NAME,\n RockerBox: NAME,\n 'Rocker box': NAME,\n 'rocker box': NAME,\n 'Rocker Box': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'CONVERTFLOW';\nconst CNameMapping = {\n [NAME]: NAME,\n Convertflow: NAME,\n convertflow: NAME,\n convertFlow: NAME,\n ConvertFlow: NAME,\n 'Convert flow': NAME,\n 'convert flow': NAME,\n 'convert Flow': NAME,\n 'Convert Flow': NAME,\n 'CONVERT FLOW': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'SNAPENGAGE';\nconst CNameMapping = {\n [NAME]: NAME,\n SnapEngage: NAME,\n Snap_Engage: NAME,\n snapengage: NAME,\n 'SNAP ENGAGE': NAME,\n 'Snap Engage': NAME,\n 'snap engage': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'LIVECHAT';\nconst CNameMapping = {\n [NAME]: NAME,\n LiveChat: NAME,\n Live_Chat: NAME,\n livechat: NAME,\n 'LIVE CHAT': NAME,\n 'Live Chat': NAME,\n 'live chat': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'SHYNET';\n\nconst CNameMapping = {\n [NAME]: NAME,\n shynet: NAME,\n ShyNet: NAME,\n shyNet: NAME,\n Shynet: NAME,\n 'shy net': NAME,\n 'Shy Net': NAME,\n 'shy Net': NAME,\n 'Shy net': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'WOOPRA';\nconst CNameMapping = {\n [NAME]: NAME,\n Woopra: NAME,\n woopra: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'ROLLBAR';\nconst CNameMapping = {\n [NAME]: NAME,\n RollBar: NAME,\n Roll_Bar: NAME,\n rollbar: NAME,\n Rollbar: NAME,\n 'ROLL BAR': NAME,\n 'Roll Bar': NAME,\n 'roll bar': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'QUORA_PIXEL';\nconst CNameMapping = {\n [NAME]: NAME,\n 'Quora Pixel': NAME,\n 'Quora pixel': NAME,\n 'QUORA PIXEL': NAME,\n QuoraPixel: NAME,\n Quorapixel: NAME,\n QUORAPIXEL: NAME,\n Quora_Pixel: NAME,\n quora_pixel: NAME,\n Quora: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'JUNE';\nconst CNameMapping = {\n [NAME]: NAME,\n June: NAME,\n june: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'ENGAGE';\nconst CNameMapping = {\n [NAME]: NAME,\n Engage: NAME,\n engage: NAME,\n};\nconst identifyExcludeFields = [\n 'firstName',\n 'firstname',\n 'first_name',\n 'lastName',\n 'lastname',\n 'last_name',\n 'phone',\n];\nexport { NAME, CNameMapping, identifyExcludeFields };\n","const NAME = 'ITERABLE';\nconst CNameMapping = {\n [NAME]: NAME,\n Iterable: NAME,\n iterable: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'REFINER';\nconst CNameMapping = {\n [NAME]: NAME,\n Refiner: NAME,\n refiner: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'QUALAROO';\nconst CNameMapping = {\n [NAME]: NAME,\n Qualaroo: NAME,\n qualaroo: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'PODSIGHTS';\nconst CNameMapping = {\n [NAME]: NAME,\n Podsights: NAME,\n PodSights: NAME,\n 'pod Sights': NAME,\n 'Pod Sights': NAME,\n 'pod sights': NAME,\n 'POD SIGHTS': NAME,\n 'Pod sights': NAME,\n};\n\n// default mapping for the events\nconst standardEventsListMapping = [\n { to: 'lead', from: 'Signed Up' },\n { to: 'product', from: 'Product Viewed' },\n { to: 'addtocart', from: 'Product Added' },\n { to: 'checkout', from: 'Checkout Started' },\n { to: 'purchase', from: 'Order Completed' },\n];\n\nconst LEAD_EVENT = [\n {\n destKey: 'value',\n sourceKeys: 'value',\n },\n {\n destKey: 'currency',\n sourceKeys: 'currency',\n },\n {\n destKey: 'type',\n sourceKeys: 'type',\n },\n {\n destKey: 'category',\n sourceKeys: 'category',\n },\n];\n\nconst PRODUCT_EVENT = [\n {\n destKey: 'value',\n sourceKeys: 'value',\n },\n {\n destKey: 'currency',\n sourceKeys: 'currency',\n },\n {\n destKey: 'product_id',\n sourceKeys: 'productId',\n },\n {\n destKey: 'product_name',\n sourceKeys: 'productName',\n },\n {\n destKey: 'product_type',\n sourceKeys: 'productType',\n },\n {\n destKey: 'product_vendor',\n sourceKeys: 'productVendor',\n },\n];\n\nconst ADD_TO_CART_EVENT = [\n {\n destKey: 'value',\n sourceKeys: 'value',\n },\n {\n destKey: 'currency',\n sourceKeys: 'currency',\n },\n {\n destKey: 'product_id',\n sourceKeys: 'productId',\n },\n {\n destKey: 'product_name',\n sourceKeys: 'productName',\n },\n {\n destKey: 'product_type',\n sourceKeys: 'productType',\n },\n {\n destKey: 'product_vendor',\n sourceKeys: 'productVendor',\n },\n {\n destKey: 'quantity',\n sourceKeys: 'quantity',\n },\n {\n destKey: 'variant_id',\n sourceKeys: 'variantId',\n },\n {\n destKey: 'variant_name',\n sourceKeys: 'variantName',\n },\n];\n\nconst CHECK_OUT_EVENT = [\n {\n destKey: 'value',\n sourceKeys: 'value',\n },\n {\n destKey: 'currency',\n sourceKeys: 'currency',\n },\n {\n destKey: 'discount_code',\n sourceKeys: 'discountCode',\n },\n {\n destKey: 'quantity',\n sourceKeys: 'quantity',\n },\n {\n destKey: 'line_items',\n sourceKeys: 'lineItems',\n },\n];\n\nconst PURCHASE_EVENT = [\n {\n destKey: 'value',\n sourceKeys: 'value',\n },\n {\n destKey: 'currency',\n sourceKeys: 'currency',\n },\n {\n destKey: 'discount_code',\n sourceKeys: 'discountCode',\n },\n {\n destKey: 'line_items',\n sourceKeys: 'lineItems',\n },\n {\n destKey: 'order_id',\n sourceKeys: 'orderId',\n },\n {\n destKey: 'is_new_customer',\n sourceKeys: 'isNewCustomer',\n },\n {\n destKey: 'quantity',\n sourceKeys: 'quantity',\n },\n];\n\nconst LINE_ITEMS_CONFIG = [\n {\n destKey: 'product_id',\n sourceKeys: 'productId',\n },\n {\n destKey: 'product_name',\n sourceKeys: 'productName',\n },\n {\n destKey: 'product_type',\n sourceKeys: 'productType',\n },\n {\n destKey: 'product_vendor',\n sourceKeys: 'productVendor',\n },\n {\n destKey: 'variant_id',\n sourceKeys: 'variantId',\n },\n {\n destKey: 'variant_name',\n sourceKeys: 'variantName',\n },\n {\n destKey: 'value',\n sourceKeys: 'value',\n },\n {\n destKey: 'quantity',\n sourceKeys: 'quantity',\n },\n];\n\nexport {\n NAME,\n CNameMapping,\n standardEventsListMapping,\n LEAD_EVENT,\n PRODUCT_EVENT,\n ADD_TO_CART_EVENT,\n CHECK_OUT_EVENT,\n PURCHASE_EVENT,\n LINE_ITEMS_CONFIG,\n};\n","const NAME = 'AXEPTIO';\nconst CNameMapping = {\n [NAME]: NAME,\n Axeptio: NAME,\n axeptio: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'MICROSOFT_CLARITY';\nconst CNameMapping = {\n [NAME]: NAME,\n 'Microsoft Clarity': NAME,\n 'Microsoft clarity': NAME,\n 'microsoft clarity': NAME,\n Microsoft_clarity: NAME,\n MicrosoftClarity: NAME,\n MICROSOFTCLARITY: NAME,\n microsoftclarity: NAME,\n microsoftClarity: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = \"SENDINBLUE\";\nconst CNameMapping = {\n [NAME]: NAME,\n Sendinblue: NAME,\n sendinblue: NAME,\n SendinBlue: NAME\n};\n\nconst excludeReservedTraits = [\n \"firstName\",\n \"firstname\",\n \"first_name\",\n \"lastName\",\n \"lastname\",\n \"last_name\",\n \"phone\",\n \"Phone\",\n \"email\",\n \"Email\",\n \"E-mail\",\n];\n\nconst excludePageProperties = [\"url\", \"title\", \"path\", \"referrer\"];\n\nexport { NAME, CNameMapping, excludeReservedTraits, excludePageProperties };\n","const NAME = 'OLARK';\nconst CNameMapping = {\n [NAME]: NAME,\n Olark: NAME,\n olark: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'LEMNISK';\nconst CNameMapping = {\n [NAME]: NAME,\n 'LEMNISK_MARKETING_AUTOMATION': NAME,\n 'Lemnisk Marketing Automation': NAME,\n 'LemniskMarketingAutomation': NAME,\n 'lemniskmarketingautomation': NAME,\n 'lemniskMarketingAutomation': NAME,\n 'lemnisk': NAME,\n 'Lemnisk': NAME,\n};\n\nexport { NAME, CNameMapping };","const NAME = 'AM';\nconst CNameMapping = {\n [NAME]: NAME,\n AMPLITUDE: NAME,\n Amplitude: NAME,\n am: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'APPCUES';\nconst CNameMapping = {\n [NAME]: NAME,\n Appcues: NAME,\n 'App Cues': NAME,\n appcues: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'BRAZE';\nconst CNameMapping = {\n [NAME]: NAME,\n Braze: NAME,\n braze: NAME,\n};\n\nconst BrazeOperationString =\n 'BrazeSdkMetadata DeviceProperties Card Card.prototype.dismissCard Card.prototype.removeAllSubscriptions Card.prototype.removeSubscription Card.prototype.subscribeToClickedEvent Card.prototype.subscribeToDismissedEvent Card.fromContentCardsJson Banner CaptionedImage ClassicCard ControlCard ContentCards ContentCards.prototype.getUnviewedCardCount Feed Feed.prototype.getUnreadCardCount ControlMessage InAppMessage InAppMessage.SlideFrom InAppMessage.ClickAction InAppMessage.DismissType InAppMessage.OpenTarget InAppMessage.ImageStyle InAppMessage.Orientation InAppMessage.TextAlignment InAppMessage.CropType InAppMessage.prototype.closeMessage InAppMessage.prototype.removeAllSubscriptions InAppMessage.prototype.removeSubscription InAppMessage.prototype.subscribeToClickedEvent InAppMessage.prototype.subscribeToDismissedEvent InAppMessage.fromJson FullScreenMessage ModalMessage HtmlMessage SlideUpMessage User User.Genders User.NotificationSubscriptionTypes User.prototype.addAlias User.prototype.addToCustomAttributeArray User.prototype.addToSubscriptionGroup User.prototype.getUserId User.prototype.incrementCustomUserAttribute User.prototype.removeFromCustomAttributeArray User.prototype.removeFromSubscriptionGroup User.prototype.setCountry User.prototype.setCustomLocationAttribute User.prototype.setCustomUserAttribute User.prototype.setDateOfBirth User.prototype.setEmail User.prototype.setEmailNotificationSubscriptionType User.prototype.setFirstName User.prototype.setGender User.prototype.setHomeCity User.prototype.setLanguage User.prototype.setLastKnownLocation User.prototype.setLastName User.prototype.setPhoneNumber User.prototype.setPushNotificationSubscriptionType InAppMessageButton InAppMessageButton.prototype.removeAllSubscriptions InAppMessageButton.prototype.removeSubscription InAppMessageButton.prototype.subscribeToClickedEvent automaticallyShowInAppMessages destroyFeed hideContentCards showContentCards showFeed showInAppMessage toggleContentCards toggleFeed changeUser destroy getDeviceId initialize isPushBlocked isPushPermissionGranted isPushSupported logCardClick logCardDismissal logCardImpressions logContentCardImpressions logContentCardsDisplayed logCustomEvent logFeedDisplayed logInAppMessageButtonClick logInAppMessageClick logInAppMessageHtmlClick logInAppMessageImpression logPurchase openSession requestPushPermission removeAllSubscriptions removeSubscription requestContentCardsRefresh requestFeedRefresh requestImmediateDataFlush enableSDK isDisabled setLogger setSdkAuthenticationSignature addSdkMetadata disableSDK subscribeToContentCardsUpdates subscribeToFeedUpdates subscribeToInAppMessage subscribeToSdkAuthenticationFailures toggleLogging unregisterPush wipeData handleBrazeAction';\n\nexport { NAME, CNameMapping, BrazeOperationString };\n","const NAME = 'CHARTBEAT';\nconst CNameMapping = {\n [NAME]: NAME,\n Chartbeat: NAME,\n chartbeat: NAME,\n 'Chart Beat': NAME,\n 'chart beat': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'FACEBOOK_PIXEL';\nconst CNameMapping = {\n [NAME]: NAME,\n 'FB Pixel': NAME,\n 'Facebook Pixel': NAME,\n 'facebook pixel': NAME,\n fbpixel: NAME,\n FBPIXEL: NAME,\n FB_PIXEL: NAME,\n};\n\nconst traitsMapper = [\n {\n destKey: 'external_id',\n sourceKeys: ['userId', 'context.traits.userId', 'context.traits.id', 'anonymousId'],\n },\n {\n destKey: 'em',\n sourceKeys: 'context.traits.email',\n },\n {\n destKey: 'ph',\n sourceKeys: 'context.traits.phone',\n },\n {\n destKey: 'ge',\n sourceKeys: 'context.traits.gender',\n },\n {\n destKey: 'db',\n sourceKeys: 'context.traits.birthday',\n },\n {\n destKey: 'ln',\n sourceKeys: ['context.traits.lastname', 'context.traits.lastName', 'context.traits.last_name'],\n },\n {\n destKey: 'fn',\n sourceKeys: [\n 'context.traits.firstname',\n 'context.traits.firstName',\n 'context.traits.first_name',\n ],\n },\n {\n destKey: 'ct',\n sourceKeys: ['context.traits.address.city', 'context.traits.city'],\n },\n {\n destKey: 'st',\n sourceKeys: ['context.traits.address.state', 'context.traits.state'],\n },\n {\n destKey: 'zp',\n sourceKeys: ['context.traits.address.zip', 'context.traits.zip'],\n },\n {\n destKey: 'country',\n sourceKeys: ['context.traits.address.country', 'context.traits.country'],\n },\n];\n\nconst reserveTraits = [\n 'email',\n 'lastName',\n 'firstName',\n 'phone',\n 'external_id',\n 'city',\n 'birthday',\n 'gender',\n 'street',\n 'zip',\n 'country',\n];\n\nexport { traitsMapper, CNameMapping, NAME, reserveTraits };\n","const NAME = 'HEAP';\nconst CNameMapping = {\n [NAME]: NAME,\n Heap: NAME,\n heap: NAME,\n 'Heap.io': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'HOTJAR';\nconst CNameMapping = {\n [NAME]: NAME,\n Hotjar: NAME,\n hotjar: NAME,\n 'Hot Jar': NAME,\n 'hot jar': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'KEEN';\nconst CNameMapping = {\n [NAME]: NAME,\n Keen: NAME,\n 'Keen.io': NAME,\n keen: NAME,\n 'keen.io': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'PINTEREST_TAG';\nconst CNameMapping = {\n [NAME]: NAME,\n PinterestTag: NAME,\n Pinterest_Tag: NAME,\n PINTERESTTAG: NAME,\n pinterest: NAME,\n PinterestAds: NAME,\n Pinterest_Ads: NAME,\n Pinterest: NAME,\n 'Pinterest Tag': NAME,\n 'Pinterest tag': NAME,\n 'PINTEREST TAG': NAME,\n 'pinterest tag': NAME,\n 'Pinterest Ads': NAME,\n 'Pinterest ads': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'GA360';\nconst CNameMapping = {\n [NAME]: NAME,\n 'Google Analytics 360': NAME,\n 'Google analytics 360': NAME,\n 'google analytics 360': NAME,\n 'Google Analytics360': NAME,\n 'Google analytics360': NAME,\n 'google analytics360': NAME,\n GoogleAnalytics360: NAME,\n 'GA 360': NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'ADROLL';\nconst CNameMapping = {\n [NAME]: NAME,\n Adroll: NAME,\n 'Ad roll': NAME,\n 'ad roll': NAME,\n adroll: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = 'DCM_FLOODLIGHT';\nconst CNameMapping = {\n [NAME]: NAME,\n 'DCM Floodlight': NAME,\n 'dcm floodlight': NAME,\n 'Dcm Floodlight': NAME,\n DCMFloodlight: NAME,\n dcmfloodlight: NAME,\n DcmFloodlight: NAME,\n dcm_floodlight: NAME,\n DCM_Floodlight: NAME,\n};\nconst GTAG = 'globalSiteTag';\n\nexport { NAME, CNameMapping, GTAG };\n","const NAME = 'YANDEX_METRICA';\nconst CNameMapping = {\n [NAME]: NAME,\n Yandexmetrica: NAME,\n yandexmetrica: NAME,\n yandexMetrica: NAME,\n YandexMetrica: NAME,\n};\n\nexport { NAME, CNameMapping };\n","const NAME = \"SATISMETER\";\nconst CNameMapping = {\n [NAME]: NAME,\n Satismeter: NAME,\n SatisMeter: NAME,\n SATISMETER: NAME,\n};\n\nexport { NAME, CNameMapping };\n","import { CNameMapping as AdobeAnalytics } from '../integrations/AdobeAnalytics/constants';\nimport { CNameMapping as Amplitude } from '../integrations/Amplitude/constants';\nimport { CNameMapping as Appcues } from '../integrations/Appcues/constants';\nimport { CNameMapping as BingAds } from '../integrations/BingAds/constants';\nimport { CNameMapping as Braze } from '../integrations/Braze/constants';\nimport { CNameMapping as Bugsnag } from '../integrations/Bugsnag/constants';\nimport { CNameMapping as Chartbeat } from '../integrations/Chartbeat/constants';\nimport { CNameMapping as Clevertap } from '../integrations/Clevertap/constants';\nimport { CNameMapping as Comscore } from '../integrations/Comscore/constants';\nimport { CNameMapping as Criteo } from '../integrations/Criteo/constants';\nimport { CNameMapping as CustomerIO } from '../integrations/CustomerIO/constants';\nimport { CNameMapping as Drip } from '../integrations/Drip/constants';\nimport { CNameMapping as FacebookPixel } from '../integrations/FacebookPixel/constants';\nimport { CNameMapping as Fullstory } from '../integrations/Fullstory/constants';\nimport { CNameMapping as GA } from '../integrations/GA/constants';\nimport { CNameMapping as GA4 } from '../integrations/GA4/constants';\nimport { CNameMapping as GoogleAds } from '../integrations/GoogleAds/constants';\nimport { CNameMapping as GoogleOptimize } from '../integrations/GoogleOptimize/constants';\nimport { CNameMapping as GoogleTagManager } from '../integrations/GoogleTagManager/constants';\nimport { CNameMapping as Heap } from '../integrations/Heap/constants';\nimport { CNameMapping as Hotjar } from '../integrations/Hotjar/constants';\nimport { CNameMapping as HubSpot } from '../integrations/HubSpot/constants';\nimport { CNameMapping as INTERCOM } from '../integrations/INTERCOM/constants';\nimport { CNameMapping as Keen } from '../integrations/Keen/constants';\nimport { CNameMapping as Kissmetrics } from '../integrations/Kissmetrics/constants';\nimport { CNameMapping as Klaviyo } from '../integrations/Klaviyo/constants';\nimport { CNameMapping as LaunchDarkly } from '../integrations/LaunchDarkly/constants';\nimport { CNameMapping as LinkedInInsightTag } from '../integrations/LinkedInInsightTag/constants';\nimport { CNameMapping as Lotame } from '../integrations/Lotame/constants';\nimport { CNameMapping as Lytics } from '../integrations/Lytics/constants';\nimport { CNameMapping as Mixpanel } from '../integrations/Mixpanel/constants';\nimport { CNameMapping as MoEngage } from '../integrations/MoEngage/constants';\nimport { CNameMapping as Optimizely } from '../integrations/Optimizely/constants';\nimport { CNameMapping as Pendo } from '../integrations/Pendo/constants';\nimport { CNameMapping as PinterestTag } from '../integrations/PinterestTag/constants';\nimport { CNameMapping as PostAffiliatePro } from '../integrations/PostAffiliatePro/constants';\nimport { CNameMapping as Posthog } from '../integrations/Posthog/constants';\nimport { CNameMapping as ProfitWell } from '../integrations/ProfitWell/constants';\nimport { CNameMapping as Qualtrics } from '../integrations/Qualtrics/constants';\nimport { CNameMapping as QuantumMetric } from '../integrations/QuantumMetric/constants';\nimport { CNameMapping as RedditPixel } from '../integrations/RedditPixel/constants';\nimport { CNameMapping as Sentry } from '../integrations/Sentry/constants';\nimport { CNameMapping as SnapPixel } from '../integrations/SnapPixel/constants';\nimport { CNameMapping as TVSquared } from '../integrations/TVSquared/constants';\nimport { CNameMapping as VWO } from '../integrations/VWO/constants';\nimport { CNameMapping as GA360 } from '../integrations/GA360/constants';\nimport { CNameMapping as Adroll } from '../integrations/Adroll/constants';\nimport { CNameMapping as DCMFloodlight } from '../integrations/DCMFloodlight/constants';\nimport { CNameMapping as Matomo } from '../integrations/Matomo/constants';\nimport { CNameMapping as Vero } from '../integrations/Vero/constants';\nimport { CNameMapping as Mouseflow } from '../integrations/Mouseflow/constants';\nimport { CNameMapping as Rockerbox } from '../integrations/Rockerbox/constants';\nimport { CNameMapping as ConvertFlow } from '../integrations/ConvertFlow/constants';\nimport { CNameMapping as SnapEngage } from '../integrations/SnapEngage/constants';\nimport { CNameMapping as LiveChat } from '../integrations/LiveChat/constants';\nimport { CNameMapping as Shynet } from '../integrations/Shynet/constants';\nimport { CNameMapping as Woopra } from '../integrations/Woopra/constants';\nimport { CNameMapping as RollBar } from '../integrations/RollBar/constants';\nimport { CNameMapping as QuoraPixel } from '../integrations/QuoraPixel/constants';\nimport { CNameMapping as June } from '../integrations/June/constants';\nimport { CNameMapping as Engage } from '../integrations/Engage/constants';\nimport { CNameMapping as Iterable } from '../integrations/Iterable/constants';\nimport { CNameMapping as YandexMetrica } from '../integrations/YandexMetrica/constants';\nimport { CNameMapping as Refiner } from '../integrations/Refiner/constants';\nimport { CNameMapping as Qualaroo } from '../integrations/Qualaroo/constants';\nimport { CNameMapping as Podsights } from '../integrations/Podsights/constants';\nimport { CNameMapping as Axeptio } from '../integrations/Axeptio/constants';\nimport { CNameMapping as SatisMeter } from '../integrations/Satismeter/constants';\nimport { CNameMapping as MicrosoftClarity } from '../integrations/MicrosoftClarity/constants';\nimport { CNameMapping as Sendinblue } from '../integrations/Sendinblue/constants';\nimport { CNameMapping as Olark } from '../integrations/Olark/constants';\nimport { CNameMapping as Lemnisk } from '../integrations/Lemnisk/constants';\n\n// for sdk side native integration identification\n// add a mapping from common names to index.js exported key names as identified by Rudder\nconst commonNames = {\n All: 'All',\n ...AdobeAnalytics,\n ...Amplitude,\n ...Appcues,\n ...BingAds,\n ...Braze,\n ...Bugsnag,\n ...Chartbeat,\n ...Clevertap,\n ...Comscore,\n ...Criteo,\n ...CustomerIO,\n ...Drip,\n ...FacebookPixel,\n ...Fullstory,\n ...GA,\n ...GA4,\n ...GA360,\n ...GoogleAds,\n ...GoogleOptimize,\n ...GoogleTagManager,\n ...Heap,\n ...Hotjar,\n ...HubSpot,\n ...INTERCOM,\n ...Keen,\n ...Kissmetrics,\n ...Klaviyo,\n ...LaunchDarkly,\n ...LinkedInInsightTag,\n ...Lotame,\n ...Lytics,\n ...Mixpanel,\n ...MoEngage,\n ...Optimizely,\n ...Pendo,\n ...PinterestTag,\n ...PostAffiliatePro,\n ...Posthog,\n ...ProfitWell,\n ...Qualtrics,\n ...QuantumMetric,\n ...RedditPixel,\n ...Sentry,\n ...SnapPixel,\n ...TVSquared,\n ...VWO,\n ...Adroll,\n ...DCMFloodlight,\n ...Matomo,\n ...Vero,\n ...Mouseflow,\n ...ConvertFlow,\n ...SnapEngage,\n ...LiveChat,\n ...Shynet,\n ...Woopra,\n ...RollBar,\n ...QuoraPixel,\n ...June,\n ...Engage,\n ...Iterable,\n ...Rockerbox,\n ...YandexMetrica,\n ...Refiner,\n ...Qualaroo,\n ...Podsights,\n ...Axeptio,\n ...SatisMeter,\n ...MicrosoftClarity,\n ...Sendinblue,\n ...Olark,\n ...Lemnisk,\n};\n\nexport { commonNames };\n","// from client native integration name to server identified display name\n// add a mapping from Rudder identified key names to Rudder server recognizable names\nconst clientToServerNames = {\n All: 'All',\n GA: 'Google Analytics',\n GOOGLEADS: 'Google Ads',\n BRAZE: 'Braze',\n CHARTBEAT: 'Chartbeat',\n COMSCORE: 'Comscore',\n CUSTOMERIO: 'Customer IO',\n DCM_Floodlight: 'DCM Floodlight',\n FACEBOOK_PIXEL: 'Facebook Pixel',\n GTM: 'Google Tag Manager',\n HOTJAR: 'Hotjar',\n HS: 'HubSpot',\n INTERCOM: 'Intercom',\n KEEN: 'Keen',\n KISSMETRICS: 'Kiss Metrics',\n LOTAME: 'Lotame',\n VWO: 'VWO',\n OPTIMIZELY: 'Optimizely Web',\n FULLSTORY: 'Fullstory',\n TVSQUARED: 'TVSquared',\n GA4: 'Google Analytics 4',\n MOENGAGE: 'MoEngage',\n AM: 'Amplitude',\n PENDO: 'Pendo',\n LYTICS: 'Lytics',\n APPCUES: 'Appcues',\n POSTHOG: 'PostHog',\n PROFITWELL: 'ProfitWell',\n KLAVIYO: 'Klaviyo',\n CLEVERTAP: 'CleverTap',\n BINGADS: 'Bing Ads',\n PINTEREST_TAG: 'Pinterest Tag',\n SNAP_PIXEL: 'Snap Pixel',\n LINKEDIN_INSIGHT_TAG: 'Linkedin Insight Tag',\n REDDIT_PIXEL: 'Reddit Pixel',\n DRIP: 'Drip',\n HEAP: 'Heap.io',\n CRITEO: 'Criteo',\n MP: 'Mixpanel',\n QUALTRICS: 'Qualtrics',\n SENTRY: 'Sentry',\n GOOGLE_OPTIMIZE: 'Google Optimize',\n POST_AFFILIATE_PRO: 'Post Affiliate Pro',\n LAUNCHDARKLY: 'LaunchDarkly',\n GA360: 'Google Analytics 360',\n ADROLL: 'Adroll',\n VERO: 'Vero',\n MATOMO: 'Matomo',\n MOUSEFLOW: 'Mouseflow',\n ROCKERBOX: 'Rockerbox',\n CONVERTFLOW: 'ConvertFlow',\n SNAPENGAGE: 'SnapEngage',\n LIVECHAT: 'LiveChat',\n SHYNET: 'Shynet',\n WOOPRA: 'Woopra',\n ROLLBAR: 'RollBar',\n QUORA_PIXEL: 'Quora Pixel',\n JUNE: 'June',\n ENGAGE: 'Engage',\n ITERABLE: 'Iterable',\n YANDEX_METRICA: 'Yandex.Metrica',\n REFINER: 'Refiner',\n QUALAROO: 'Qualaroo',\n PODSIGHTS: 'Podsights',\n AXEPTIO: 'Axeptio',\n SATISMETER: 'Satismeter',\n MICROSOFT_CLARITY: 'Microsoft Clarity',\n SENDINBLUE: 'Sendinblue',\n OLARK: 'Olark',\n LEMNISK: \"Lemnisk\",\n};\n\nexport { clientToServerNames };\n","// Reserved Keywords for properties/traits\nconst RESERVED_KEYS = [\n 'anonymous_id',\n 'id',\n 'sent_at',\n 'received_at',\n 'timestamp',\n 'original_timestamp',\n 'event_text',\n 'event',\n];\n\nconst CONFIG_URL =\n 'https://api.rudderlabs.com/sourceConfig/?p=process.module_type&v=process.package_version';\nconst SDK_CDN_BASE_URL = 'https://cdn.rudderlabs.com';\nconst CDN_ARCH_VERSION_DIR = 'v1.1';\nconst CDN_INT_DIR = 'js-integrations';\nconst DEST_SDK_BASE_URL = `${SDK_CDN_BASE_URL}/${CDN_ARCH_VERSION_DIR}/${CDN_INT_DIR}`;\n\nconst MAX_WAIT_FOR_INTEGRATION_LOAD = 10000;\nconst INTEGRATION_LOAD_CHECK_INTERVAL = 1000;\nconst INTG_SUFFIX = '_RS';\nconst POLYFILL_URL =\n 'https://polyfill.io/v3/polyfill.min.js?features=Array.prototype.find%2CArray.prototype.includes%2CPromise%2CString.prototype.endsWith%2CString.prototype.includes%2CString.prototype.startsWith%2CObject.entries%2CObject.values%2CElement.prototype.dataset%2CString.prototype.replaceAll';\n\nconst DEFAULT_ERROR_REPORT_PROVIDER = 'bugsnag';\nconst ERROR_REPORT_PROVIDERS = [DEFAULT_ERROR_REPORT_PROVIDER];\n\nconst GENERIC_TRUE_VALUES = ['true', 'True', 'TRUE', 't', 'T', '1'];\nconst GENERIC_FALSE_VALUES = ['false', 'False', 'FALSE', 'f', 'F', '0'];\n\nconst SAMESITE_COOKIE_OPTS = ['Lax', 'None', 'Strict'];\n\nconst DEFAULT_SESSION_TIMEOUT = 30 * 60 * 1000; // 30 min in milliseconds\nconst MIN_SESSION_TIMEOUT = 10 * 1000; // 10 sec in milliseconds\nconst MIN_SESSION_ID_LENGTH = 10;\n\nconst DEFAULT_REGION = 'US';\nconst DEFAULT_DATAPLANE_URL = 'https://hosted.rudderlabs.com';\n\nconst RESIDENCY_SERVERS = [DEFAULT_REGION, 'EU'];\n\nexport {\n RESERVED_KEYS,\n CONFIG_URL,\n SDK_CDN_BASE_URL,\n CDN_ARCH_VERSION_DIR,\n CDN_INT_DIR,\n DEST_SDK_BASE_URL,\n MAX_WAIT_FOR_INTEGRATION_LOAD,\n INTEGRATION_LOAD_CHECK_INTERVAL,\n INTG_SUFFIX,\n POLYFILL_URL,\n DEFAULT_ERROR_REPORT_PROVIDER,\n ERROR_REPORT_PROVIDERS,\n GENERIC_TRUE_VALUES,\n GENERIC_FALSE_VALUES,\n SAMESITE_COOKIE_OPTS,\n DEFAULT_SESSION_TIMEOUT,\n MIN_SESSION_TIMEOUT,\n MIN_SESSION_ID_LENGTH,\n DEFAULT_REGION,\n DEFAULT_DATAPLANE_URL,\n RESIDENCY_SERVERS,\n};\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t /*\n\t * Local polyfil of Object.create\n\t */\n\t var create = Object.create || (function () {\n\t function F() {};\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }())\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t var r = (function (m_w) {\n\t var m_w = m_w;\n\t var m_z = 0x3ade68b1;\n\t var mask = 0xffffffff;\n\n\t return function () {\n\t m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t var result = ((m_z << 0x10) + m_w) & mask;\n\t result /= 0x100000000;\n\t result += 0.5;\n\t return result * (Math.random() > .5 ? 1 : -1);\n\t }\n\t });\n\n\t for (var i = 0, rcache; i < nBytes; i += 4) {\n\t var _r = r((rcache || Math.random()) * 0x100000000);\n\n\t rcache = _r() * 0x3ade67b7;\n\t words.push((_r() * 0x100000000) | 0);\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t var processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t var block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t var block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t var block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t var modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t var modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t var wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS.enc.Utf8;\n\n}));","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('cookie');\n\n/**\n * Set or get cookie `name` with `value` and `options` object.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {Mixed}\n * @api public\n */\n\nmodule.exports = function(name, value, options){\n switch (arguments.length) {\n case 3:\n case 2:\n return set(name, value, options);\n case 1:\n return get(name);\n default:\n return all();\n }\n};\n\n/**\n * Set cookie `name` to `value`.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @api private\n */\n\nfunction set(name, value, options) {\n options = options || {};\n var str = encode(name) + '=' + encode(value);\n\n if (null == value) options.maxage = -1;\n\n if (options.maxage) {\n options.expires = new Date(+new Date + options.maxage);\n }\n\n if (options.path) str += '; path=' + options.path;\n if (options.domain) str += '; domain=' + options.domain;\n if (options.expires) str += '; expires=' + options.expires.toUTCString();\n if (options.samesite) str += '; samesite=' + options.samesite;\n if (options.secure) str += '; secure';\n\n document.cookie = str;\n}\n\n/**\n * Return all cookies.\n *\n * @return {Object}\n * @api private\n */\n\nfunction all() {\n var str;\n try {\n str = document.cookie;\n } catch (err) {\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(err.stack || err);\n }\n return {};\n }\n return parse(str);\n}\n\n/**\n * Get cookie `name`.\n *\n * @param {String} name\n * @return {String}\n * @api private\n */\n\nfunction get(name) {\n return all()[name];\n}\n\n/**\n * Parse cookie `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parse(str) {\n var obj = {};\n var pairs = str.split(/ *; */);\n var pair;\n if ('' == pairs[0]) return obj;\n for (var i = 0; i < pairs.length; ++i) {\n pair = pairs[i].split('=');\n obj[decode(pair[0])] = decode(pair[1]);\n }\n return obj;\n}\n\n/**\n * Encode.\n */\n\nfunction encode(value){\n try {\n return encodeURIComponent(value);\n } catch (e) {\n debug('error `encode(%o)` - %o', value, e)\n }\n}\n\n/**\n * Decode.\n */\n\nfunction decode(value) {\n try {\n return decodeURIComponent(value);\n } catch (e) {\n debug('error `decode(%o)` - %o', value, e)\n }\n}\n","'use strict';\n\nvar max = Math.max;\n\n/**\n * Produce a new array composed of all but the first `n` elements of an input `collection`.\n *\n * @name drop\n * @api public\n * @param {number} count The number of elements to drop.\n * @param {Array} collection The collection to iterate over.\n * @return {Array} A new array containing all but the first element from `collection`.\n * @example\n * drop(0, [1, 2, 3]); // => [1, 2, 3]\n * drop(1, [1, 2, 3]); // => [2, 3]\n * drop(2, [1, 2, 3]); // => [3]\n * drop(3, [1, 2, 3]); // => []\n * drop(4, [1, 2, 3]); // => []\n */\nvar drop = function drop(count, collection) {\n var length = collection ? collection.length : 0;\n\n if (!length) {\n return [];\n }\n\n // Preallocating an array *significantly* boosts performance when dealing with\n // `arguments` objects on v8. For a summary, see:\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var toDrop = max(Number(count) || 0, 0);\n var resultsLength = max(length - toDrop, 0);\n var results = new Array(resultsLength);\n\n for (var i = 0; i < resultsLength; i += 1) {\n results[i] = collection[i + toDrop];\n }\n\n return results;\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = drop;\n","'use strict';\n\nvar max = Math.max;\n\n/**\n * Produce a new array by passing each value in the input `collection` through a transformative\n * `iterator` function. The `iterator` function is passed three arguments:\n * `(value, index, collection)`.\n *\n * @name rest\n * @api public\n * @param {Array} collection The collection to iterate over.\n * @return {Array} A new array containing all but the first element from `collection`.\n * @example\n * rest([1, 2, 3]); // => [2, 3]\n */\nvar rest = function rest(collection) {\n if (collection == null || !collection.length) {\n return [];\n }\n\n // Preallocating an array *significantly* boosts performance when dealing with\n // `arguments` objects on v8. For a summary, see:\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var results = new Array(max(collection.length - 2, 0));\n\n for (var i = 1; i < collection.length; i += 1) {\n results[i - 1] = collection[i];\n }\n\n return results;\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = rest;\n","'use strict';\n\n/*\n * Module dependencies.\n */\n\nvar drop = require('@ndhoule/drop');\nvar rest = require('@ndhoule/rest');\n\nvar has = Object.prototype.hasOwnProperty;\nvar objToString = Object.prototype.toString;\n\n/**\n * Returns `true` if a value is an object, otherwise `false`.\n *\n * @name isObject\n * @api private\n * @param {*} val The value to test.\n * @return {boolean}\n */\n// TODO: Move to a library\nvar isObject = function isObject(value) {\n return Boolean(value) && typeof value === 'object';\n};\n\n/**\n * Returns `true` if a value is a plain object, otherwise `false`.\n *\n * @name isPlainObject\n * @api private\n * @param {*} val The value to test.\n * @return {boolean}\n */\n// TODO: Move to a library\nvar isPlainObject = function isPlainObject(value) {\n return Boolean(value) && objToString.call(value) === '[object Object]';\n};\n\n/**\n * Assigns a key-value pair to a target object when the value assigned is owned,\n * and where target[key] is undefined.\n *\n * @name shallowCombiner\n * @api private\n * @param {Object} target\n * @param {Object} source\n * @param {*} value\n * @param {string} key\n */\nvar shallowCombiner = function shallowCombiner(target, source, value, key) {\n if (has.call(source, key) && target[key] === undefined) {\n target[key] = value;\n }\n return source;\n};\n\n/**\n * Assigns a key-value pair to a target object when the value assigned is owned,\n * and where target[key] is undefined; also merges objects recursively.\n *\n * @name deepCombiner\n * @api private\n * @param {Object} target\n * @param {Object} source\n * @param {*} value\n * @param {string} key\n * @return {Object}\n */\nvar deepCombiner = function(target, source, value, key) {\n if (has.call(source, key)) {\n if (isPlainObject(target[key]) && isPlainObject(value)) {\n target[key] = defaultsDeep(target[key], value);\n } else if (target[key] === undefined) {\n target[key] = value;\n }\n }\n\n return source;\n};\n\n/**\n * TODO: Document\n *\n * @name defaultsWith\n * @api private\n * @param {Function} combiner\n * @param {Object} target\n * @param {...Object} sources\n * @return {Object} Return the input `target`.\n */\nvar defaultsWith = function(combiner, target /*, ...sources */) {\n if (!isObject(target)) {\n return target;\n }\n\n combiner = combiner || shallowCombiner;\n var sources = drop(2, arguments);\n\n for (var i = 0; i < sources.length; i += 1) {\n for (var key in sources[i]) {\n combiner(target, sources[i], sources[i][key], key);\n }\n }\n\n return target;\n};\n\n/**\n * Copies owned, enumerable properties from a source object(s) to a target\n * object when the value of that property on the source object is `undefined`.\n * Recurses on objects.\n *\n * @name defaultsDeep\n * @api public\n * @param {Object} target\n * @param {...Object} sources\n * @return {Object} The input `target`.\n */\nvar defaultsDeep = function defaultsDeep(target /*, sources */) {\n // TODO: Replace with `partial` call?\n return defaultsWith.apply(null, [deepCombiner, target].concat(rest(arguments)));\n};\n\n/**\n * Copies owned, enumerable properties from a source object(s) to a target\n * object when the value of that property on the source object is `undefined`.\n *\n * @name defaults\n * @api public\n * @param {Object} target\n * @param {...Object} sources\n * @return {Object}\n * @example\n * var a = { a: 1 };\n * var b = { a: 2, b: 2 };\n *\n * defaults(a, b);\n * console.log(a); //=> { a: 1, b: 2 }\n */\nvar defaults = function(target /*, ...sources */) {\n // TODO: Replace with `partial` call?\n return defaultsWith.apply(null, [null, target].concat(rest(arguments)));\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = defaults;\nmodule.exports.deep = defaultsDeep;\n","\n/**\n * Module dependencies.\n */\n\nvar debug = require('debug')('cookie');\n\n/**\n * Set or get cookie `name` with `value` and `options` object.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {Mixed}\n * @api public\n */\n\nmodule.exports = function(name, value, options){\n switch (arguments.length) {\n case 3:\n case 2:\n return set(name, value, options);\n case 1:\n return get(name);\n default:\n return all();\n }\n};\n\n/**\n * Set cookie `name` to `value`.\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @api private\n */\n\nfunction set(name, value, options) {\n options = options || {};\n var str = encode(name) + '=' + encode(value);\n\n if (null == value) options.maxage = -1;\n\n if (options.maxage) {\n options.expires = new Date(+new Date + options.maxage);\n }\n\n if (options.path) str += '; path=' + options.path;\n if (options.domain) str += '; domain=' + options.domain;\n if (options.expires) str += '; expires=' + options.expires.toUTCString();\n if (options.secure) str += '; secure';\n\n document.cookie = str;\n}\n\n/**\n * Return all cookies.\n *\n * @return {Object}\n * @api private\n */\n\nfunction all() {\n var str;\n try {\n str = document.cookie;\n } catch (err) {\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(err.stack || err);\n }\n return {};\n }\n return parse(str);\n}\n\n/**\n * Get cookie `name`.\n *\n * @param {String} name\n * @return {String}\n * @api private\n */\n\nfunction get(name) {\n return all()[name];\n}\n\n/**\n * Parse cookie `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction parse(str) {\n var obj = {};\n var pairs = str.split(/ *; */);\n var pair;\n if ('' == pairs[0]) return obj;\n for (var i = 0; i < pairs.length; ++i) {\n pair = pairs[i].split('=');\n obj[decode(pair[0])] = decode(pair[1]);\n }\n return obj;\n}\n\n/**\n * Encode.\n */\n\nfunction encode(value){\n try {\n return encodeURIComponent(value);\n } catch (e) {\n debug('error `encode(%o)` - %o', value, e)\n }\n}\n\n/**\n * Decode.\n */\n\nfunction decode(value) {\n try {\n return decodeURIComponent(value);\n } catch (e) {\n debug('error `decode(%o)` - %o', value, e)\n }\n}\n","'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar parse = require('component-url').parse;\nvar cookie = require('component-cookie');\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 or `localhost`.\n *\n * Example levels:\n *\n * domain.levels('http://www.google.co.uk');\n * // => [\"co.uk\", \"google.co.uk\", \"www.google.co.uk\"]\n *\n * Example:\n *\n * domain('http://localhost:3000/baz');\n * // => ''\n * domain('http://dev:3000/baz');\n * // => ''\n * domain('http://127.0.0.1:3000/baz');\n * // => ''\n * domain('http://segment.io/baz');\n * // => 'segment.io'\n *\n * @param {string} url\n * @return {string}\n * @api public\n */\nfunction domain(url) {\n var cookie = exports.cookie;\n var levels = exports.levels(url);\n\n // Lookup the real top level one.\n for (var i = 0; i < levels.length; ++i) {\n var cname = '__tld__';\n var domain = levels[i];\n var opts = { domain: '.' + domain };\n\n cookie(cname, 1, opts);\n if (cookie(cname)) {\n cookie(cname, null, opts);\n return domain;\n }\n }\n\n return '';\n}\n\n/**\n * Levels returns all levels of the given url.\n *\n * @param {string} url\n * @return {Array}\n * @api public\n */\ndomain.levels = function(url) {\n var host = parse(url).hostname;\n var parts = host.split('.');\n var last = parts[parts.length - 1];\n var levels = [];\n\n // Ip address.\n if (parts.length === 4 && last === parseInt(last, 10)) {\n return levels;\n }\n\n // Localhost.\n if (parts.length <= 1) {\n return levels;\n }\n\n // Create levels.\n for (var i = parts.length - 2; i >= 0; --i) {\n levels.push(parts.slice(i).join('.'));\n }\n\n return levels;\n};\n\n/**\n * Expose cookie on domain.\n */\ndomain.cookie = cookie;\n\n/*\n * Exports.\n */\n\nexports = module.exports = domain;\n","import cookie from 'rudder-component-cookie';\nimport defaults from '@ndhoule/defaults';\nimport topDomain from '@segment/top-domain';\nimport * as R from 'ramda';\nimport logger from '../logUtil';\n\n/**\n * An object utility to persist values in cookies\n */\nclass CookieLocal {\n constructor(options) {\n this.cOpts = {};\n this.options(options);\n this.isSupportAvailable = this.checkSupportAvailability();\n }\n\n /**\n *\n * @param {*} inOpts\n */\n options(inOpts = {}) {\n if (arguments.length === 0) return this.cOpts;\n\n let domain = `.${topDomain(window.location.href)}`;\n if (domain === '.') domain = null;\n\n // the default maxage and path\n this.cOpts = defaults(inOpts, {\n maxage: 31536000000,\n path: '/',\n domain,\n samesite: 'Lax',\n });\n\n return this.cOpts;\n }\n\n /**\n *\n * @param {*} key\n * @param {*} value\n */\n set(key, value) {\n try {\n cookie(key, value, R.clone(this.cOpts));\n return true;\n } catch (e) {\n logger.error(e);\n return false;\n }\n }\n\n /**\n *\n * @param {*} key\n */\n get(key) {\n return cookie(key);\n }\n\n /**\n *\n * @param {*} key\n */\n remove(key) {\n try {\n cookie(key, null, R.clone(this.cOpts));\n return true;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Function to check cookie support exists or not\n * @returns boolean\n */\n checkSupportAvailability() {\n const name = 'test_rudder_cookie';\n this.set(name, true);\n\n if (this.get(name)) {\n this.remove(name);\n return true;\n }\n return false;\n }\n}\n\n// Exporting only the instance\nconst Cookie = new CookieLocal({});\n\nexport { Cookie };\n","/**!\n * storejs v2.0.1\n * Local storage localstorage package provides a simple API\n * \n * Copyright (c) 2021 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 var storage = window.localStorage;\n\n function isJSON(obj) {\n obj = JSON.stringify(obj);\n\n if (!/^\\{[\\s\\S]*\\}$/.test(obj)) {\n return false;\n }\n\n return true;\n }\n\n function stringify(val) {\n return val === undefined || typeof val === \"function\" ? val + '' : JSON.stringify(val);\n }\n\n function deserialize(value) {\n if (typeof value !== 'string') {\n return undefined;\n }\n\n try {\n return JSON.parse(value);\n } catch (e) {\n return value;\n }\n }\n\n function isFunction(value) {\n return {}.toString.call(value) === \"[object Function]\";\n }\n\n function isArray(value) {\n return Object.prototype.toString.call(value) === \"[object Array]\";\n } // https://github.com/jaywcjlove/store.js/pull/8\n // Error: QuotaExceededError\n\n\n function dealIncognito(storage) {\n var _KEY = '_Is_Incognit',\n _VALUE = 'yes';\n\n try {\n storage.setItem(_KEY, _VALUE);\n } catch (e) {\n if (e.name === 'QuotaExceededError') {\n var _nothing = function _nothing() {};\n\n storage.__proto__ = {\n setItem: _nothing,\n getItem: _nothing,\n removeItem: _nothing,\n clear: _nothing\n };\n }\n } finally {\n if (storage.getItem(_KEY) === _VALUE) storage.removeItem(_KEY);\n }\n\n return storage;\n } // deal QuotaExceededError if user use incognito mode in browser\n\n\n storage = dealIncognito(storage);\n\n function Store() {\n if (!(this instanceof Store)) {\n return new Store();\n }\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) {\n this.set(a, key[a]);\n }\n }\n\n return this;\n },\n get: function get(key) {\n if (!key) {\n var ret = {};\n this.forEach(function (key, val) {\n return ret[key] = val;\n });\n return ret;\n }\n\n if (key.charAt(0) === '?') {\n return this.has(key.substr(1));\n }\n\n var args = arguments;\n\n if (args.length > 1) {\n var dt = {};\n\n for (var i = 0, len = args.length; i < len; i++) {\n var value = deserialize(storage.getItem(args[i]));\n\n if (this.has(args[i])) {\n dt[args[i]] = value;\n }\n }\n\n return dt;\n }\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\n return this;\n },\n search: function search(str) {\n var arr = this.keys(),\n dt = {};\n\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\n return dt;\n }\n };\n var _Store = null;\n\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\n if (argm.length === 1) {\n if (typeof key === \"string\") return _Store.get(key);\n if (isJSON(key)) return _Store.set(key);\n }\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\n if (data && isFunction(data)) {\n dt = null;\n dt = data(key, _Store.get(key));\n store.set(key, dt);\n }\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\n return store;\n }\n\n for (var a in Store.prototype) {\n store[a] = Store.prototype[a];\n }\n\n return store;\n\n})));\n","import defaults from '@ndhoule/defaults';\nimport store from 'storejs';\n\n/**\n * An object utility to persist user and other values in localstorage\n */\nclass StoreLocal {\n constructor(options) {\n this.sOpts = {};\n this.enabled = this.checkSupportAvailability();\n this.options(options);\n }\n\n /**\n *\n * @param {*} options\n */\n options(options = {}) {\n if (arguments.length === 0) return this.sOpts;\n\n defaults(options, { enabled: true });\n\n this.enabled = options.enabled && this.enabled;\n this.sOpts = options;\n return this.sOpts;\n }\n\n /**\n *\n * @param {*} key\n * @param {*} value\n */\n set(key, value) {\n return store.set(key, value);\n }\n\n /**\n *\n * @param {*} key\n */\n get(key) {\n return store.get(key);\n }\n\n /**\n *\n * @param {*} key\n */\n remove(key) {\n return store.remove(key);\n }\n\n /**\n * Function to check local storage is accessible or not\n * @returns boolean\n */\n checkSupportAvailability() {\n const name = 'test_rudder_ls';\n this.set(name, true);\n\n if (this.get(name)) {\n this.remove(name);\n return true;\n }\n return false;\n }\n}\n\n// Exporting only the instance\nconst Store = new StoreLocal({});\n\nexport { Store };\n","/* eslint-disable class-methods-use-this */\nimport AES from 'crypto-js/aes';\nimport Utf8 from 'crypto-js/enc-utf8';\nimport get from 'get-value';\nimport logger from '../logUtil';\nimport { Cookie } from './cookie';\nimport { Store } from './store';\n\nconst defaults = {\n user_storage_key: 'rl_user_id',\n user_storage_trait: 'rl_trait',\n user_storage_anonymousId: 'rl_anonymous_id',\n group_storage_key: 'rl_group_id',\n group_storage_trait: 'rl_group_trait',\n page_storage_init_referrer: 'rl_page_init_referrer',\n page_storage_init_referring_domain: 'rl_page_init_referring_domain',\n session_info: 'rl_session',\n prefix: 'RudderEncrypt:',\n key: 'Rudder',\n};\n\nconst anonymousIdKeyMap = {\n segment: 'ajs_anonymous_id',\n};\n\n/**\n * Json stringify the given value\n * @param {*} value\n */\nfunction stringify(value) {\n return JSON.stringify(value);\n}\n\n/**\n * JSON parse the value\n * @param {*} value\n */\nfunction parse(value) {\n // if not parsable, return as is without json parse\n try {\n return value ? JSON.parse(value) : null;\n } catch (e) {\n logger.error(e);\n return value || null;\n }\n}\n\n/**\n * trim using regex for browser polyfill\n * @param {*} value\n */\nfunction trim(value) {\n return value.replace(/^\\s+|\\s+$/gm, '');\n}\n\n/**\n * decrypt value\n * @param {*} value\n */\nfunction decryptValue(value) {\n if (!value || (typeof value === 'string' && trim(value) === '')) {\n return value;\n }\n if (value.substring(0, defaults.prefix.length) === defaults.prefix) {\n return AES.decrypt(value.substring(defaults.prefix.length), defaults.key).toString(Utf8);\n }\n return value;\n}\n\n/**\n * AES encrypt value with constant prefix\n * @param {*} value\n */\nfunction encryptValue(value) {\n if (trim(value) === '') {\n return value;\n }\n const prefixedVal = `${defaults.prefix}${AES.encrypt(value, defaults.key).toString()}`;\n\n return prefixedVal;\n}\n\n/**\n * An object that handles persisting key-val from Analytics\n */\nclass Storage {\n constructor() {\n // First try setting the storage to cookie else to localstorage\n\n if (Cookie.isSupportAvailable) {\n this.storage = Cookie;\n return;\n }\n\n // localStorage is enabled.\n if (Store.enabled) {\n this.storage = Store;\n }\n\n if (!this.storage) {\n logger.error('No storage is available :: initializing the SDK without storage');\n }\n }\n\n options(options = {}) {\n this.storage.options(options);\n }\n\n /**\n *\n * @param {*} key\n * @param {*} value\n */\n setItem(key, value) {\n this.storage.set(key, encryptValue(stringify(value)));\n }\n\n /**\n *\n * @param {*} key\n * @param {*} value\n */\n setStringItem(key, value) {\n if (typeof value !== 'string') {\n logger.error(`[Storage] ${key} should be string`);\n return;\n }\n this.setItem(key, value);\n }\n\n /**\n *\n * @param {*} value\n */\n setUserId(value) {\n this.setStringItem(defaults.user_storage_key, value);\n }\n\n /**\n *\n * @param {*} value\n */\n setUserTraits(value) {\n this.setItem(defaults.user_storage_trait, value);\n }\n\n /**\n *\n * @param {*} value\n */\n setGroupId(value) {\n this.setStringItem(defaults.group_storage_key, value);\n }\n\n /**\n *\n * @param {*} value\n */\n setGroupTraits(value) {\n this.setItem(defaults.group_storage_trait, value);\n }\n\n /**\n *\n * @param {*} value\n */\n setAnonymousId(value) {\n this.setStringItem(defaults.user_storage_anonymousId, value);\n }\n\n /**\n * @param {*} value\n */\n setInitialReferrer(value) {\n this.setItem(defaults.page_storage_init_referrer, value);\n }\n\n /**\n * @param {*} value\n */\n setInitialReferringDomain(value) {\n this.setItem(defaults.page_storage_init_referring_domain, value);\n }\n\n /**\n * Set session information\n * @param {*} value\n */\n setSessionInfo(value) {\n this.setItem(defaults.session_info, value);\n }\n\n /**\n *\n * @param {*} key\n */\n getItem(key) {\n return parse(decryptValue(this.storage.get(key)));\n }\n\n /**\n * get the stored userId\n */\n getUserId() {\n return this.getItem(defaults.user_storage_key);\n }\n\n /**\n * get the stored user traits\n */\n getUserTraits() {\n return this.getItem(defaults.user_storage_trait);\n }\n\n /**\n * get the stored userId\n */\n getGroupId() {\n return this.getItem(defaults.group_storage_key);\n }\n\n /**\n * get the stored user traits\n */\n getGroupTraits() {\n return this.getItem(defaults.group_storage_trait);\n }\n\n /**\n * Function to fetch anonymousId from external source\n * @param {string} key source of the anonymousId\n * @returns string\n */\n fetchExternalAnonymousId(source) {\n let anonId;\n const key = source.toLowerCase();\n if (!Object.keys(anonymousIdKeyMap).includes(key)) {\n return anonId;\n }\n switch (key) {\n case 'segment':\n /**\n * First check the local storage for anonymousId\n * Ref: https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/#identify\n */\n if (Store.enabled) {\n anonId = Store.get(anonymousIdKeyMap[key]);\n }\n // If anonymousId is not present in local storage and check cookie support exists\n // fetch it from cookie\n if (!anonId && Cookie.isSupportAvailable) {\n anonId = Cookie.get(anonymousIdKeyMap[key]);\n }\n return anonId;\n\n default:\n return anonId;\n }\n }\n\n /**\n * get stored anonymous id\n *\n * Use cases:\n * 1. getAnonymousId() -> anonymousIdOptions is undefined this function will return rl_anonymous_id\n * if present otherwise undefined\n *\n * 2. getAnonymousId(anonymousIdOptions) -> In case anonymousIdOptions is present this function will check\n * if rl_anonymous_id is present then it will return that\n *\n * otherwise it will validate the anonymousIdOptions and try to fetch the anonymous Id from the provided source.\n * Finally if no anonymous Id is present in the source it will return undefined.\n *\n * anonymousIdOptions example:\n * {\n autoCapture: {\n enabled: true,\n source: \"segment\",\n },\n }\n *\n */\n getAnonymousId(anonymousIdOptions) {\n // fetch the rl_anonymous_id from storage\n const rlAnonymousId = parse(decryptValue(this.storage.get(defaults.user_storage_anonymousId)));\n /**\n * If RS's anonymous ID is available, return from here.\n *\n * The user, while migrating from a different analytics SDK,\n * will only need to auto-capture the anonymous ID when the RS SDK\n * loads for the first time.\n *\n * The captured anonymous ID would be available in RS's persistent storage\n * for all the subsequent SDK runs.\n * So, instead of always grabbing the ID from the migration source when\n * the options are specified, it is first checked in the RS's persistent storage.\n *\n * Moreover, the user can also clear the anonymous ID from the storage via\n * the 'reset' API, which renders the migration source's data useless.\n */\n if (rlAnonymousId) {\n return rlAnonymousId;\n }\n // validate the provided anonymousIdOptions argument\n const source = get(anonymousIdOptions, 'autoCapture.source');\n if (get(anonymousIdOptions, 'autoCapture.enabled') === true && typeof source === 'string') {\n // fetch the anonymousId from the external source\n // ex - segment\n const anonId = this.fetchExternalAnonymousId(source);\n if (anonId) return anonId; // return anonymousId if present\n }\n\n return rlAnonymousId; // return undefined\n }\n\n /**\n * get stored initial referrer\n */\n getInitialReferrer() {\n return this.getItem(defaults.page_storage_init_referrer);\n }\n\n /**\n * get stored initial referring domain\n */\n getInitialReferringDomain() {\n return this.getItem(defaults.page_storage_init_referring_domain);\n }\n\n /**\n * get the stored session info\n */\n getSessionInfo() {\n return this.getItem(defaults.session_info);\n }\n\n /**\n *\n * @param {*} key\n */\n removeItem(key) {\n return this.storage.remove(key);\n }\n\n removeSessionInfo() {\n this.removeItem(defaults.session_info);\n }\n\n /**\n * remove stored keys\n */\n clear(flag) {\n this.storage.remove(defaults.user_storage_key);\n this.storage.remove(defaults.user_storage_trait);\n this.storage.remove(defaults.group_storage_key);\n this.storage.remove(defaults.group_storage_trait);\n if (flag) {\n this.storage.remove(defaults.user_storage_anonymousId);\n }\n }\n}\n\nexport { Storage };\n","import { Storage } from './storage';\n\nexport default new Storage();\n","/* eslint-disable no-use-before-define */\n// import logger from \"../utils/logUtil\";\n\nconst defaultAsyncState = true;\n\nexport const LOAD_ORIGIN = 'RS_JS_SDK';\n/**\n * Script loader\n * @param {String} id Id of the script\n * @param {String} src URL of the script\n * @param {Object} options Object containing different configuration\n * @param {Boolean} options.async Determines script will be loaded asynchronously or not\n * @param {Boolean} options.isNonNativeSDK Determines whether the script that will be loaded is one of RS's own\n * @param {Boolean} options.skipDatasetAttributes Determines whether to add or skip dataset attribute\n */\nconst ScriptLoader = (id, src, options = {}) => {\n const exists = document.getElementById(id);\n if (exists) {\n // logger.debug(\"script already loaded\");\n return;\n }\n\n const js = document.createElement('script');\n js.src = src;\n js.async = options.async === undefined ? defaultAsyncState : options.async;\n js.type = 'text/javascript';\n js.id = id;\n // This checking is in place to skip the dataset attribute for some cases(while loading polyfill)\n if (options.skipDatasetAttributes !== true) {\n js.setAttribute('data-loader', LOAD_ORIGIN);\n if (options.isNonNativeSDK !== undefined) {\n js.setAttribute('data-isNonNativeSDK', options.isNonNativeSDK);\n }\n }\n const headElmColl = document.getElementsByTagName('head');\n if (headElmColl.length !== 0) {\n // logger.debug(\"==adding script==\", js);\n headElmColl[0].insertBefore(js, headElmColl[0].firstChild);\n } else {\n const e = document.getElementsByTagName('script')[0];\n // logger.debug(\"==parent script==\", e);\n // logger.debug(\"==adding script==\", js);\n e.parentNode.insertBefore(js, e);\n }\n};\n\nexport default ScriptLoader;\n","import logger from './logUtil';\nimport { LOAD_ORIGIN } from './ScriptLoader';\n\n/**\n * This function is to add breadcrumbs\n * @param {string} breadcrumb Message to add insight of an user's journey before the error occurred\n */\nfunction leaveBreadcrumb(breadcrumb) {\n if (window.rsBugsnagClient) {\n window.rsBugsnagClient.leaveBreadcrumb(breadcrumb);\n }\n}\n\n/**\n * This function is to send handled errors to Bugsnag if Bugsnag client is available\n * @param {Error} error Error instance from handled error\n */\nfunction notifyError(error) {\n if (window.rsBugsnagClient) {\n window.rsBugsnagClient.notify(error);\n }\n}\n\nfunction normaliseError(error, customMessage, analyticsInstance) {\n let errorMessage;\n try {\n if (typeof error === 'string') {\n errorMessage = error;\n } else if (error instanceof Error) {\n errorMessage = error.message;\n } else {\n errorMessage = error.message ? error.message : JSON.stringify(error);\n }\n } catch (e) {\n errorMessage = '';\n }\n\n if (error instanceof Event) {\n // Discard all the non-script loading errors\n if (error.target && error.target.localName !== 'script') {\n return '';\n }\n\n // Discard script errors that are not originated at SDK or from native SDKs\n if (\n error.target.dataset &&\n (error.target.dataset.loader !== LOAD_ORIGIN ||\n error.target.dataset.isNonNativeSDK !== 'true')\n )\n return '';\n\n errorMessage = `error in script loading:: src:: ${error.target.src} id:: ${error.target.id}`;\n\n // SDK triggered ad-blocker script\n if (error.target.id === 'ad-block') {\n analyticsInstance.page(\n 'RudderJS-Initiated',\n 'ad-block page request',\n { path: '/ad-blocked', title: errorMessage },\n analyticsInstance.sendAdblockPageOptions,\n );\n // No need to proceed further for Ad-block errors\n return '';\n }\n }\n\n const customeErrMessagePrefix = customMessage || '';\n return `[handleError]::${customeErrMessagePrefix} \"${errorMessage}\"`;\n}\n\nfunction handleError(error, customMessage, analyticsInstance) {\n let errorMessage;\n try {\n errorMessage = normaliseError(error, customMessage, analyticsInstance);\n } catch (err) {\n logger.error('[handleError] Exception:: ', err);\n logger.error('[handleError] Original error:: ', JSON.stringify(error));\n notifyError(err);\n }\n if (!errorMessage) {\n return;\n }\n logger.error(errorMessage);\n let errorObj = error;\n if (!(error instanceof Error)) errorObj = new Error(errorMessage);\n notifyError(errorObj);\n}\n\nexport { leaveBreadcrumb, notifyError, handleError, normaliseError };\n","// import * as XMLHttpRequestNode from \"Xmlhttprequest\";\nimport { parse } from 'component-url';\nimport get from 'get-value';\nimport { v4 as uuid } from '@lukeed/uuid';\nimport { v4 as uuidSecure } from \"@lukeed/uuid/secure\";\nimport logger from './logUtil';\nimport { commonNames } from './integration_cname';\nimport { clientToServerNames } from './client_server_name';\nimport {\n CONFIG_URL,\n RESERVED_KEYS,\n DEFAULT_REGION,\n RESIDENCY_SERVERS,\n} from './constants';\nimport Storage from './storage';\nimport { handleError } from './errorHandler';\n\n/**\n *\n * Utility method for excluding null and empty values in JSON\n * @param {*} key\n * @param {*} value\n * @returns\n */\nfunction replacer(key, value) {\n if (value === null || value === undefined) {\n return undefined;\n }\n return value;\n}\n\n/**\n * Utility method to remove '/' at the end of URL\n * @param {*} inURL\n */\nfunction removeTrailingSlashes(inURL) {\n return inURL && inURL.endsWith('/') ? inURL.replace(/\\/+$/, '') : inURL;\n}\n\n/**\n *\n * Utility function for UUID generation\n * @returns\n */\nfunction generateUUID() {\n if(window.crypto && typeof window.crypto.getRandomValues === 'function') {\n return uuidSecure();\n }\n\n return uuid();\n}\n\n/**\n *\n * Utility function to get current time (formatted) for including in sent_at field\n * @returns\n */\nfunction getCurrentTimeFormatted() {\n const curDateTime = new Date().toISOString();\n // Keeping same as iso string\n /* let curDate = curDateTime.split(\"T\")[0];\n let curTimeExceptMillis = curDateTime\n .split(\"T\")[1]\n .split(\"Z\")[0]\n .split(\".\")[0];\n let curTimeMillis = curDateTime.split(\"Z\")[0].split(\".\")[1];\n return curDate + \" \" + curTimeExceptMillis + \"+\" + curTimeMillis; */\n return curDateTime;\n}\n\n/**\n *\n * Utility function to retrieve configuration JSON from server\n * @param {*} url\n * @param {*} wrappers\n * @param {*} isLoaded\n * @param {*} callback\n */\nfunction getJSON(url, wrappers, isLoaded, callback) {\n // server-side integration, XHR is node module\n\n const xhr = new XMLHttpRequest();\n\n xhr.open('GET', url, false);\n xhr.onload = function () {\n const { status } = xhr;\n if (status == 200) {\n // logger.debug(\"status 200\");\n callback(null, xhr.responseText, wrappers, isLoaded);\n } else {\n callback(status);\n }\n };\n xhr.send();\n}\n\n/**\n *\n * Utility function to retrieve configuration JSON from server\n * @param {*} context\n * @param {*} url\n * @param {*} callback\n */\nfunction getJSONTrimmed(context, url, writeKey, callback) {\n // server-side integration, XHR is node module\n const cb_ = callback.bind(context);\n\n const xhr = new XMLHttpRequest();\n\n xhr.open('GET', url, true);\n xhr.setRequestHeader(\n 'Authorization',\n `Basic ${btoa(`${writeKey}:`)}`,\n // `Basic ${Buffer.from(`${writeKey}:`).toString(\"base64\")}`\n );\n\n xhr.onload = function () {\n const { status } = xhr;\n if (status == 200) {\n // logger.debug(\"status 200 \" + \"calling callback\");\n cb_(200, xhr.responseText);\n } else {\n handleError(new Error(`request failed with status: ${xhr.status} for url: ${url}`));\n cb_(status);\n }\n };\n xhr.send();\n}\n\nfunction getDefaultPageProperties() {\n const canonicalUrl = getCanonicalUrl();\n const path = canonicalUrl ? parse(canonicalUrl).pathname : window.location.pathname;\n // const { referrer } = document;\n const { search } = window.location;\n const { title } = document;\n const url = getUrl(search);\n const tab_url = window.location.href;\n\n const referrer = getReferrer();\n const referring_domain = getReferringDomain(referrer);\n const initial_referrer = Storage.getInitialReferrer();\n const initial_referring_domain = Storage.getInitialReferringDomain();\n return {\n path,\n referrer,\n referring_domain,\n search,\n title,\n url,\n tab_url,\n initial_referrer,\n initial_referring_domain,\n };\n}\n\nfunction getReferrer() {\n return document.referrer || '$direct';\n}\n\nfunction getReferringDomain(referrer) {\n const split = referrer.split('/');\n if (split.length >= 3) {\n return split[2];\n }\n return '';\n}\n\nfunction getUrl(search) {\n const canonicalUrl = getCanonicalUrl();\n const url = canonicalUrl\n ? canonicalUrl.indexOf('?') > -1\n ? canonicalUrl\n : canonicalUrl + search\n : window.location.href;\n const hashIndex = url.indexOf('#');\n return hashIndex > -1 ? url.slice(0, hashIndex) : url;\n}\n\nfunction getCanonicalUrl() {\n const tags = document.getElementsByTagName('link');\n for (var i = 0, tag; (tag = tags[i]); i++) {\n if (tag.getAttribute('rel') === 'canonical') {\n return tag.getAttribute('href');\n }\n }\n}\n\nfunction getCurrency(val) {\n if (!val) return;\n if (typeof val === 'number') {\n return val;\n }\n if (typeof val !== 'string') {\n return;\n }\n\n val = val.replace(/\\$/g, '');\n val = parseFloat(val);\n\n if (!isNaN(val)) {\n return val;\n }\n}\n\nfunction getRevenue(properties, eventName) {\n let { revenue } = properties;\n const orderCompletedRegExp = /^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i;\n\n // it's always revenue, unless it's called during an order completion.\n if (!revenue && eventName && eventName.match(orderCompletedRegExp)) {\n revenue = properties.total;\n }\n\n return getCurrency(revenue);\n}\n\nfunction transformNamesCore(integrationObject, namesObj) {\n Object.keys(integrationObject).forEach((key) => {\n if (integrationObject.hasOwnProperty(key)) {\n if (namesObj[key]) {\n integrationObject[namesObj[key]] = integrationObject[key];\n }\n if (key != 'All') {\n // delete user supplied keys except All and if except those where oldkeys are not present or oldkeys are same as transformed keys\n if (namesObj[key] != undefined && namesObj[key] != key) {\n delete integrationObject[key];\n }\n }\n }\n });\n}\n\n/**\n *\n *\n * @param {*} integrationObject\n */\nfunction transformToRudderNames(integrationObject) {\n transformNamesCore(integrationObject, commonNames);\n}\n\nfunction transformToServerNames(integrationObject) {\n transformNamesCore(integrationObject, clientToServerNames);\n}\n\n/**\n *\n * @param {*} sdkSuppliedIntegrations\n * @param {*} configPlaneEnabledIntegrations\n */\nfunction findAllEnabledDestinations(sdkSuppliedIntegrations, configPlaneEnabledIntegrations) {\n const enabledList = [];\n if (!configPlaneEnabledIntegrations || configPlaneEnabledIntegrations.length === 0) {\n return enabledList;\n }\n let allValue = true;\n if (sdkSuppliedIntegrations.All !== undefined) {\n allValue = sdkSuppliedIntegrations.All;\n }\n const intgData = [];\n if (typeof configPlaneEnabledIntegrations[0] === 'string') {\n configPlaneEnabledIntegrations.forEach((intg) => {\n intgData.push({\n intgName: intg,\n intObj: intg,\n });\n });\n } else if (typeof configPlaneEnabledIntegrations[0] === 'object') {\n configPlaneEnabledIntegrations.forEach((intg) => {\n intgData.push({\n intgName: intg.name,\n intObj: intg,\n });\n });\n }\n\n intgData.forEach(({ intgName, intObj }) => {\n if (!allValue) {\n // All false ==> check if intg true supplied\n if (\n sdkSuppliedIntegrations[intgName] != undefined &&\n sdkSuppliedIntegrations[intgName] == true\n ) {\n enabledList.push(intObj);\n }\n } else {\n // All true ==> intg true by default\n let intgValue = true;\n // check if intg false supplied\n if (\n sdkSuppliedIntegrations[intgName] != undefined &&\n sdkSuppliedIntegrations[intgName] == false\n ) {\n intgValue = false;\n }\n if (intgValue) {\n enabledList.push(intObj);\n }\n }\n });\n\n return enabledList;\n}\n\n/**\n * reject all null values from array/object\n * @param {} obj\n * @param {} fn\n */\nfunction rejectArr(obj, fn) {\n fn = fn || compact;\n return type(obj) == 'array' ? rejectarray(obj, fn) : rejectobject(obj, fn);\n}\n\n/**\n * particular case when rejecting an array\n * @param {} arr\n * @param {} fn\n */\nvar rejectarray = function (arr, fn) {\n const ret = [];\n\n for (let i = 0; i < arr.length; ++i) {\n if (!fn(arr[i], i)) ret[ret.length] = arr[i];\n }\n\n return ret;\n};\n\n/**\n * Rejecting null from any object other than arrays\n * @param {} obj\n * @param {} fn\n *\n */\nvar rejectobject = function (obj, fn) {\n const ret = {};\n\n for (const k in obj) {\n if (obj.hasOwnProperty(k) && !fn(obj[k], k)) {\n ret[k] = obj[k];\n }\n }\n\n return ret;\n};\n\nfunction compact(value) {\n return value == null;\n}\n\n/**\n * check type of object incoming in the rejectArr function\n * @param {} val\n */\nfunction type(val) {\n switch (Object.prototype.toString.call(val)) {\n case '[object Function]':\n return 'function';\n case '[object Date]':\n return 'date';\n case '[object RegExp]':\n return 'regexp';\n case '[object Arguments]':\n return 'arguments';\n case '[object Array]':\n return 'array';\n }\n\n if (val === null) return 'null';\n if (val === undefined) return 'undefined';\n if (val === Object(val)) return 'object';\n\n return typeof val;\n}\n\nfunction getUserProvidedConfigUrl(configUrl, defConfigUrl) {\n let url = configUrl;\n if (url.indexOf('sourceConfig') === -1) {\n url = `${removeTrailingSlashes(url)}/sourceConfig/`;\n }\n url = url.slice(-1) === '/' ? url : `${url}/`;\n const defQueryParams = defConfigUrl.split('?')[1];\n const urlSplitItems = url.split('?');\n if (urlSplitItems.length > 1 && urlSplitItems[1] !== defQueryParams) {\n url = `${urlSplitItems[0]}?${defQueryParams}`;\n } else {\n url = `${url}?${defQueryParams}`;\n }\n return url;\n}\n/**\n * Check if a reserved keyword is present in properties/traits\n * @param {*} properties\n * @param {*} reservedKeywords\n * @param {*} type\n */\nfunction checkReservedKeywords(message, messageType) {\n // properties, traits, contextualTraits are either undefined or object\n const { properties, traits } = message;\n if (properties) {\n Object.keys(properties).forEach((property) => {\n if (RESERVED_KEYS.indexOf(property.toLowerCase()) >= 0) {\n logger.error(\n `Warning! : Reserved keyword used in properties--> ${property} with ${messageType} call`,\n );\n }\n });\n }\n if (traits) {\n Object.keys(traits).forEach((trait) => {\n if (RESERVED_KEYS.indexOf(trait.toLowerCase()) >= 0) {\n logger.error(\n `Warning! : Reserved keyword used in traits--> ${trait} with ${messageType} call`,\n );\n }\n });\n }\n const contextualTraits = message.context.traits;\n if (contextualTraits) {\n Object.keys(contextualTraits).forEach((contextTrait) => {\n if (RESERVED_KEYS.indexOf(contextTrait.toLowerCase()) >= 0) {\n logger.error(\n `Warning! : Reserved keyword used in traits --> ${contextTrait} with ${messageType} call`,\n );\n }\n });\n }\n}\n\n/* ------- Start FlattenJson -----------\n * This function flatten given json object to single level.\n * So if there is nested object or array, all will appear in first level properties of an object.\n * Following is case we are handling in this function ::\n * condition 1: String\n * condition 2: Array\n * condition 3: Nested object\n */\nfunction recurse(cur, prop, result) {\n const res = result;\n if (Object(cur) !== cur) {\n res[prop] = cur;\n } else if (Array.isArray(cur)) {\n const l = cur.length;\n for (let i = 0; i < l; i += 1) recurse(cur[i], prop ? `${prop}.${i}` : `${i}`, res);\n if (l === 0) res[prop] = [];\n } else {\n let isEmpty = true;\n Object.keys(cur).forEach((key) => {\n isEmpty = false;\n recurse(cur[key], prop ? `${prop}.${key}` : key, res);\n });\n if (isEmpty) res[prop] = {};\n }\n return res;\n}\n\nfunction flattenJsonPayload(data, property = '') {\n return recurse(data, property, {});\n}\n/* ------- End FlattenJson ----------- */\n/**\n *\n * @param {*} message\n * @param {*} destination\n * @param {*} keys\n * @param {*} exclusionFields\n * Extract fields from message with exclusions\n * Pass the keys of message for extraction and\n * exclusion fields to exclude and the payload to map into\n * -----------------Example-------------------\n * extractCustomFields(message,payload,[\"traits\", \"context.traits\", \"properties\"], \"email\",\n * [\"firstName\",\n * \"lastName\",\n * \"phone\",\n * \"title\",\n * \"organization\",\n * \"city\",\n * \"region\",\n * \"country\",\n * \"zip\",\n * \"image\",\n * \"timezone\"])\n * -------------------------------------------\n * The above call will map the fields other than the\n * exclusion list from the given keys to the destination payload\n *\n */\n\nfunction extractCustomFields(message, destination, keys, exclusionFields) {\n keys.map((key) => {\n const messageContext = get(message, key);\n if (messageContext) {\n const objKeys = [];\n Object.keys(messageContext).map((k) => {\n if (exclusionFields.indexOf(k) < 0) {\n objKeys.push(k);\n }\n });\n objKeys.map((k) => {\n if (!(typeof messageContext[k] === 'undefined')) {\n if (destination) {\n destination[k] = get(messageContext, k);\n } else {\n destination = {\n k: get(messageContext, k),\n };\n }\n }\n });\n }\n });\n return destination;\n}\n/**\n *\n * @param {*} message\n *\n * Use get-value to retrieve defined traits from message traits\n */\nfunction getDefinedTraits(message) {\n const traitsValue = {\n userId:\n get(message, 'userId') ||\n get(message, 'context.traits.userId') ||\n get(message, 'anonymousId'),\n userIdOnly: get(message, 'userId') || get(message, 'context.traits.userId'),\n email:\n get(message, 'context.traits.email') ||\n get(message, 'context.traits.Email') ||\n get(message, 'context.traits.E-mail'),\n phone: get(message, 'context.traits.phone') || get(message, 'context.traits.Phone'),\n firstName:\n get(message, 'context.traits.firstName') ||\n get(message, 'context.traits.firstname') ||\n get(message, 'context.traits.first_name'),\n lastName:\n get(message, 'context.traits.lastName') ||\n get(message, 'context.traits.lastname') ||\n get(message, 'context.traits.last_name'),\n name: get(message, 'context.traits.name') || get(message, 'context.traits.Name'),\n state:\n get(message, 'context.traits.state') ||\n get(message, 'context.traits.State') ||\n get(message, 'context.traits.address.state') ||\n get(message, 'context.traits.address.State'),\n city:\n get(message, 'context.traits.city') ||\n get(message, 'context.traits.City') ||\n get(message, 'context.traits.address.city') ||\n get(message, 'context.traits.address.City'),\n country:\n get(message, 'context.traits.country') ||\n get(message, 'context.traits.Country') ||\n get(message, 'context.traits.address.country') ||\n get(message, 'context.traits.address.Country'),\n };\n\n if (!get(traitsValue, 'name') && get(traitsValue, 'firstName') && get(traitsValue, 'lastName')) {\n traitsValue.name = `${get(traitsValue, 'firstName')} ${get(traitsValue, 'lastName')}`;\n }\n return traitsValue;\n}\n\n/**\n * To check if a variable is storing object or not\n */\nconst isObject = (obj) => {\n return type(obj) === 'object';\n};\n\n/**\n * To check if a variable is storing array or not\n */\nconst isArray = (obj) => {\n return type(obj) === 'array';\n};\n\nconst isDefined = (x) => x !== undefined;\nconst isNotNull = (x) => x !== null;\nconst isDefinedAndNotNull = (x) => isDefined(x) && isNotNull(x);\n\nconst getDataFromSource = (src, dest, properties) => {\n const data = {};\n if (isArray(src)) {\n for (let index = 0; index < src.length; index += 1) {\n if (properties[src[index]]) {\n data[dest] = properties[src[index]];\n if (data) {\n // return only if the value is valid.\n // else look for next possible source in precedence\n return data;\n }\n }\n }\n } else if (typeof src === 'string') {\n if (properties[src]) {\n data[dest] = properties[src];\n }\n }\n return data;\n};\n\nconst getConfigUrl = (writeKey) => {\n return CONFIG_URL.concat(CONFIG_URL.includes('?') ? '&' : '?').concat(\n writeKey ? `writeKey=${writeKey}` : '',\n );\n};\n\nconst getSDKUrlInfo = () => {\n const scripts = document.getElementsByTagName('script');\n let sdkURL;\n let isStaging = false;\n for (let i = 0; i < scripts.length; i += 1) {\n const curScriptSrc = removeTrailingSlashes(scripts[i].getAttribute('src'));\n if (curScriptSrc) {\n const urlMatches = curScriptSrc.match(/^.*rudder-analytics(-staging)?(\\.min)?\\.js$/);\n if (urlMatches) {\n sdkURL = curScriptSrc;\n isStaging = urlMatches[1] !== undefined;\n break;\n }\n }\n }\n return { sdkURL, isStaging };\n};\n\n/**\n * Using this function we can create a payload from a mapping object.\n * @param {*} object = {\n traits:{\n name: \"abcd efgh\",\n address: {\n city: \"xyz\"\n }\n }\n }\n * @param {*} mapper = [\n {\n destKey: \"userName\",\n sourceKeys: \"traits.name\",\n },\n {\n destKey: \"city\",\n sourceKeys: \"traits.address.city\",\n },\n]\n * @returns {\n userName : \"abcd efgh\",\n city : \"xyz\"\n }\n\n*/\nconst constructPayload = (object, mapper) => {\n const payload = {};\n if (object)\n mapper.forEach((element) => {\n if (!Array.isArray(element.sourceKeys)) {\n payload[element.destKey] = get(object, element.sourceKeys);\n } else {\n for (let i = 0; i < element.sourceKeys.length; i += 1) {\n if (get(object, element.sourceKeys[i])) {\n payload[element.destKey] = get(object, element.sourceKeys[i]);\n break;\n }\n }\n }\n });\n return payload;\n};\n\nconst countDigits = (number) => {\n return number ? number.toString().length : 0;\n};\n\n/**\n * A function to convert non-string IDs to string format\n * @param {any} id\n * @returns\n */\nconst getStringId = (id) => {\n return typeof id === 'string' || typeof id === 'undefined' || id === null\n ? id\n : JSON.stringify(id);\n};\n\n/**\n * A function to validate and return Residency server input\n * @returns string/undefined\n */\nconst getResidencyServer = (options) => {\n const region = options ? options.residencyServer : undefined;\n if (region) {\n if (typeof region !== 'string' || !RESIDENCY_SERVERS.includes(region.toUpperCase())) {\n logger.error('Invalid residencyServer input');\n return undefined;\n }\n return region.toUpperCase();\n }\n return undefined;\n};\n\nconst isValidServerUrl = (serverUrl) => {\n if (!serverUrl || typeof serverUrl !== 'string' || serverUrl.trim().length === 0) {\n return false;\n }\n return true;\n};\n\n/**\n * A function to get url from source config response\n * @param {array} urls An array of objects containing urls\n * @returns\n */\nconst getDefaultUrlofRegion = (urls) => {\n let url;\n if (Array.isArray(urls) && urls.length) {\n const obj = urls.find((elem) => elem.default === true);\n if (obj && isValidServerUrl(obj.url)) {\n return obj.url;\n }\n }\n return url;\n};\n\n/**\n * A function to determine the dataPlaneUrl\n * @param {Object} dataPlaneUrls An object containing dataPlaneUrl for different region\n * @returns string\n */\nconst resolveDataPlaneUrl = (response, serverUrl, options) => {\n try {\n const dataPlanes = response.source.dataplanes || {};\n // Check if dataPlanes object is present in source config\n if (Object.keys(dataPlanes).length) {\n const inputRegion = getResidencyServer(options);\n const regionUrlArr = dataPlanes[inputRegion] || dataPlanes[DEFAULT_REGION];\n\n if (regionUrlArr) {\n const defaultUrl = getDefaultUrlofRegion(regionUrlArr);\n if (defaultUrl) {\n return defaultUrl;\n }\n }\n }\n // return the dataPlaneUrl provided in load API(if available)\n if (isValidServerUrl(serverUrl)) {\n return serverUrl;\n }\n // return the default dataPlaneUrl\n // return DEFAULT_DATAPLANE_URL; // we do not want to divert the events to hosted data plane url\n\n // Throw error if correct data plane url is not provided\n throw Error('Unable to load the SDK due to invalid data plane url');\n } catch (e) {\n throw Error(e);\n }\n};\n\nexport {\n replacer,\n generateUUID,\n getCurrentTimeFormatted,\n getJSONTrimmed,\n getJSON,\n getRevenue,\n getDefaultPageProperties,\n getUserProvidedConfigUrl,\n findAllEnabledDestinations,\n transformToRudderNames,\n transformToServerNames,\n rejectArr,\n type,\n flattenJsonPayload,\n checkReservedKeywords,\n getReferrer,\n getReferringDomain,\n extractCustomFields,\n getDefinedTraits,\n isObject,\n isArray,\n isDefinedAndNotNull,\n getDataFromSource,\n commonNames,\n removeTrailingSlashes,\n constructPayload,\n getConfigUrl,\n getSDKUrlInfo,\n get,\n countDigits,\n getStringId,\n resolveDataPlaneUrl,\n};\n","var IDX=256, HEX=[], BUFFER;\nwhile (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);\n\nfunction 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\nexports.v4 = v4;","// Application class\nclass RudderApp {\n constructor() {\n this.name = 'RudderLabs JavaScript SDK';\n this.namespace = 'com.rudderlabs.javascript';\n this.version = 'process.package_version';\n }\n}\nexport default RudderApp;\n","/* eslint-disable max-classes-per-file */\n// Library information class\nclass RudderLibraryInfo {\n constructor() {\n this.name = 'RudderLabs JavaScript SDK';\n this.version = 'process.package_version';\n }\n}\n// Operating System information class\nclass RudderOSInfo {\n constructor() {\n this.name = '';\n this.version = '';\n }\n}\n// Screen information class\nclass RudderScreenInfo {\n constructor() {\n this.density = 0;\n this.width = 0;\n this.height = 0;\n this.innerWidth = 0;\n this.innerHeight = 0;\n }\n}\n// Device information class\nclass RudderDeviceInfo {\n constructor() {\n this.id = '';\n this.manufacturer = '';\n this.model = '';\n this.name = '';\n }\n}\n// Carrier information\nclass RudderNetwork {\n constructor() {\n this.carrier = '';\n }\n}\nexport { RudderLibraryInfo, RudderOSInfo, RudderScreenInfo, RudderDeviceInfo, RudderNetwork };\n","// Context class\nimport RudderApp from './RudderApp';\nimport { RudderLibraryInfo, RudderOSInfo } from './RudderInfo';\nimport { getUserAgent, getLanguage } from './navigator';\nimport { getScreenDetails } from './screenDetails';\n\nclass RudderContext {\n constructor() {\n this.app = new RudderApp();\n this.traits = null;\n this.library = new RudderLibraryInfo();\n this.userAgent = getUserAgent();\n this.device = null;\n this.network = null;\n this.os = new RudderOSInfo();\n this.locale = getLanguage();\n this.screen = getScreenDetails();\n }\n}\n\nexport default RudderContext;\n","import { RudderScreenInfo } from './RudderInfo';\n\nconst getScreenDetails = () => {\n const screenDetails = new RudderScreenInfo();\n\n // Depending on environment within which the code is executing, screen\n // dimensions can be set\n // User agent and locale can be retrieved only for browser\n // When execution is in SSR window will be undefined\n if (typeof window === 'undefined') {\n return screenDetails;\n }\n\n screenDetails.width = window.screen.width;\n screenDetails.height = window.screen.height;\n screenDetails.density = window.devicePixelRatio;\n screenDetails.innerWidth = window.innerWidth;\n screenDetails.innerHeight = window.innerHeight;\n\n return screenDetails;\n};\n\nexport { getScreenDetails };\n","const getUserAgent = () => {\n if (typeof navigator === 'undefined') {\n return null;\n }\n\n let { userAgent } = navigator;\n const { brave } = navigator;\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 = () => {\n if (typeof navigator === 'undefined') {\n return null;\n }\n\n return navigator.language || navigator.browserLanguage;\n};\n\nexport { getUserAgent, getLanguage };\n","// Core message class with default values\nimport { generateUUID } from './utils';\nimport RudderContext from './RudderContext';\n\nclass RudderMessage {\n constructor() {\n this.channel = 'web';\n this.context = new RudderContext();\n this.type = null;\n this.messageId = generateUUID();\n this.originalTimestamp = new Date().toISOString();\n this.anonymousId = null;\n this.userId = null;\n this.event = null;\n this.properties = {};\n this.integrations = {};\n // By default, all integrations will be set as enabled from client\n // Decision to route to specific destinations will be taken at server end\n this.integrations.All = true;\n }\n\n // Get property\n getProperty(key) {\n return this.properties[key];\n }\n\n // Add property\n addProperty(key, value) {\n this.properties[key] = value;\n }\n}\nexport default RudderMessage;\n","import RudderMessage from './RudderMessage';\n// Individual element class containing Rudder Message\nclass RudderElement {\n constructor() {\n this.message = new RudderMessage();\n }\n\n // Setters that in turn set the field values for the contained object\n setType(type) {\n this.message.type = type;\n }\n\n setProperty(rudderProperty) {\n this.message.properties = rudderProperty;\n }\n\n setUserProperty(rudderUserProperty) {\n this.message.user_properties = rudderUserProperty;\n }\n\n setUserId(userId) {\n this.message.userId = userId;\n }\n\n setEventName(eventName) {\n this.message.event = eventName;\n }\n\n getElementContent() {\n return this.message;\n }\n}\nexport default RudderElement;\n","// Class responsible for building up the individual elements in a batch\n// that is transmitted by the SDK\nimport RudderElement from './RudderElement';\n\nclass RudderElementBuilder {\n constructor() {\n this.rudderProperty = null;\n this.rudderUserProperty = null;\n this.event = null;\n this.userId = null;\n this.type = null;\n }\n\n setType(eventType) {\n this.type = eventType;\n return this;\n }\n\n build() {\n const element = new RudderElement();\n element.setUserId(this.userId);\n element.setType(this.type);\n element.setEventName(this.event);\n element.setProperty(this.rudderProperty);\n element.setUserProperty(this.rudderUserProperty);\n return element;\n }\n}\nexport default RudderElementBuilder;\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","'use strict';\n\nvar hop = Object.prototype.hasOwnProperty;\nvar strCharAt = String.prototype.charAt;\nvar toStr = Object.prototype.toString;\n\n/**\n * Returns the character at a given index.\n *\n * @param {string} str\n * @param {number} index\n * @return {string|undefined}\n */\n// TODO: Move to a library\nvar charAt = function(str, index) {\n return strCharAt.call(str, index);\n};\n\n/**\n * hasOwnProperty, wrapped as a function.\n *\n * @name has\n * @api private\n * @param {*} context\n * @param {string|number} prop\n * @return {boolean}\n */\n\n// TODO: Move to a library\nvar has = function has(context, prop) {\n return hop.call(context, prop);\n};\n\n/**\n * Returns true if a value is a string, otherwise false.\n *\n * @name isString\n * @api private\n * @param {*} val\n * @return {boolean}\n */\n\n// TODO: Move to a library\nvar isString = function isString(val) {\n return toStr.call(val) === '[object String]';\n};\n\n/**\n * Returns true if a value is array-like, otherwise false. Array-like means a\n * value is not null, undefined, or a function, and has a numeric `length`\n * property.\n *\n * @name isArrayLike\n * @api private\n * @param {*} val\n * @return {boolean}\n */\n// TODO: Move to a library\nvar isArrayLike = function isArrayLike(val) {\n return val != null && (typeof val !== 'function' && typeof val.length === 'number');\n};\n\n\n/**\n * indexKeys\n *\n * @name indexKeys\n * @api private\n * @param {} target\n * @param {Function} pred\n * @return {Array}\n */\nvar indexKeys = function indexKeys(target, pred) {\n pred = pred || has;\n\n var results = [];\n\n for (var i = 0, len = target.length; i < len; i += 1) {\n if (pred(target, i)) {\n results.push(String(i));\n }\n }\n\n return results;\n};\n\n/**\n * Returns an array of an object's owned keys.\n *\n * @name objectKeys\n * @api private\n * @param {*} target\n * @param {Function} pred Predicate function used to include/exclude values from\n * the resulting array.\n * @return {Array}\n */\nvar objectKeys = function objectKeys(target, pred) {\n pred = pred || has;\n\n var results = [];\n\n for (var key in target) {\n if (pred(target, key)) {\n results.push(String(key));\n }\n }\n\n return results;\n};\n\n/**\n * Creates an array composed of all keys on the input object. Ignores any non-enumerable properties.\n * More permissive than the native `Object.keys` function (non-objects will not throw errors).\n *\n * @name keys\n * @api public\n * @category Object\n * @param {Object} source The value to retrieve keys from.\n * @return {Array} An array containing all the input `source`'s keys.\n * @example\n * keys({ likes: 'avocado', hates: 'pineapple' });\n * //=> ['likes', 'pineapple'];\n *\n * // Ignores non-enumerable properties\n * var hasHiddenKey = { name: 'Tim' };\n * Object.defineProperty(hasHiddenKey, 'hidden', {\n * value: 'i am not enumerable!',\n * enumerable: false\n * })\n * keys(hasHiddenKey);\n * //=> ['name'];\n *\n * // Works on arrays\n * keys(['a', 'b', 'c']);\n * //=> ['0', '1', '2']\n *\n * // Skips unpopulated indices in sparse arrays\n * var arr = [1];\n * arr[4] = 4;\n * keys(arr);\n * //=> ['0', '4']\n */\nvar keys = function keys(source) {\n if (source == null) {\n return [];\n }\n\n // IE6-8 compatibility (string)\n if (isString(source)) {\n return indexKeys(source, charAt);\n }\n\n // IE6-8 compatibility (arguments)\n if (isArrayLike(source)) {\n return indexKeys(source, has);\n }\n\n return objectKeys(source);\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = keys;\n","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","'use strict';\n\nvar keys = require('@ndhoule/keys');\nvar uuid = require('uuid').v4;\n\nvar inMemoryStore = {\n _data: {},\n length: 0,\n setItem: function(key, value) {\n this._data[key] = value;\n this.length = keys(this._data).length;\n return value;\n },\n getItem: function(key) {\n if (key in this._data) {\n return this._data[key];\n }\n return null;\n },\n removeItem: function(key) {\n if (key in this._data) {\n delete this._data[key];\n }\n this.length = keys(this._data).length;\n return null;\n },\n clear: function() {\n this._data = {};\n this.length = 0;\n },\n key: function(index) {\n return keys(this._data)[index];\n }\n};\n\nfunction isSupportedNatively() {\n try {\n if (!window.localStorage) return false;\n var key = uuid();\n window.localStorage.setItem(key, 'test_value');\n var value = window.localStorage.getItem(key);\n window.localStorage.removeItem(key);\n\n // handle localStorage silently failing\n return value === 'test_value';\n } catch (e) {\n // Can throw if localStorage is disabled\n return false;\n }\n}\n\nfunction pickStorage() {\n if (isSupportedNatively()) {\n return window.localStorage;\n }\n // fall back to in-memory\n return inMemoryStore;\n}\n\n// Return a shared instance\nmodule.exports.defaultEngine = pickStorage();\n// Expose the in-memory store explicitly for testing\nmodule.exports.inMemoryEngine = inMemoryStore;\n","'use strict';\n\n/*\n * Module dependencies.\n */\n\nvar keys = require('@ndhoule/keys');\n\nvar objToString = Object.prototype.toString;\n\n/**\n * Tests if a value is a number.\n *\n * @name isNumber\n * @api private\n * @param {*} val The value to test.\n * @return {boolean} Returns `true` if `val` is a number, otherwise `false`.\n */\n// TODO: Move to library\nvar isNumber = function isNumber(val) {\n var type = typeof val;\n return type === 'number' || (type === 'object' && objToString.call(val) === '[object Number]');\n};\n\n/**\n * Tests if a value is an array.\n *\n * @name isArray\n * @api private\n * @param {*} val The value to test.\n * @return {boolean} Returns `true` if the value is an array, otherwise `false`.\n */\n// TODO: Move to library\nvar isArray = typeof Array.isArray === 'function' ? Array.isArray : function isArray(val) {\n return objToString.call(val) === '[object Array]';\n};\n\n/**\n * Tests if a value is array-like. Array-like means the value is not a function and has a numeric\n * `.length` property.\n *\n * @name isArrayLike\n * @api private\n * @param {*} val\n * @return {boolean}\n */\n// TODO: Move to library\nvar isArrayLike = function isArrayLike(val) {\n return val != null && (isArray(val) || (val !== 'function' && isNumber(val.length)));\n};\n\n/**\n * Internal implementation of `each`. Works on arrays and array-like data structures.\n *\n * @name arrayEach\n * @api private\n * @param {Function(value, key, collection)} iterator The function to invoke per iteration.\n * @param {Array} array The array(-like) structure to iterate over.\n * @return {undefined}\n */\nvar arrayEach = function arrayEach(iterator, array) {\n for (var i = 0; i < array.length; i += 1) {\n // Break iteration early if `iterator` returns `false`\n if (iterator(array[i], i, array) === false) {\n break;\n }\n }\n};\n\n/**\n * Internal implementation of `each`. Works on objects.\n *\n * @name baseEach\n * @api private\n * @param {Function(value, key, collection)} iterator The function to invoke per iteration.\n * @param {Object} object The object to iterate over.\n * @return {undefined}\n */\nvar baseEach = function baseEach(iterator, object) {\n var ks = keys(object);\n\n for (var i = 0; i < ks.length; i += 1) {\n // Break iteration early if `iterator` returns `false`\n if (iterator(object[ks[i]], ks[i], object) === false) {\n break;\n }\n }\n};\n\n/**\n * Iterate over an input collection, invoking an `iterator` function for each element in the\n * collection and passing to it three arguments: `(value, index, collection)`. The `iterator`\n * function can end iteration early by returning `false`.\n *\n * @name each\n * @api public\n * @param {Function(value, key, collection)} iterator The function to invoke per iteration.\n * @param {Array|Object|string} collection The collection to iterate over.\n * @return {undefined} Because `each` is run only for side effects, always returns `undefined`.\n * @example\n * var log = console.log.bind(console);\n *\n * each(log, ['a', 'b', 'c']);\n * //-> 'a', 0, ['a', 'b', 'c']\n * //-> 'b', 1, ['a', 'b', 'c']\n * //-> 'c', 2, ['a', 'b', 'c']\n * //=> undefined\n *\n * each(log, 'tim');\n * //-> 't', 2, 'tim'\n * //-> 'i', 1, 'tim'\n * //-> 'm', 0, 'tim'\n * //=> undefined\n *\n * // Note: Iteration order not guaranteed across environments\n * each(log, { name: 'tim', occupation: 'enchanter' });\n * //-> 'tim', 'name', { name: 'tim', occupation: 'enchanter' }\n * //-> 'enchanter', 'occupation', { name: 'tim', occupation: 'enchanter' }\n * //=> undefined\n */\nvar each = function each(iterator, collection) {\n return (isArrayLike(collection) ? arrayEach : baseEach).call(this, iterator, collection);\n};\n\n/*\n * Exports.\n */\n\nmodule.exports = each;\n","'use strict';\n\nvar defaultEngine = require('./engine').defaultEngine;\nvar inMemoryEngine = require('./engine').inMemoryEngine;\nvar each = require('@ndhoule/each');\nvar keys = require('@ndhoule/keys');\nvar json = JSON;\n\n/**\n* Store Implementation with dedicated\n*/\n\nfunction Store(name, id, keys, optionalEngine) {\n this.id = id;\n this.name = name;\n this.keys = keys || {};\n this.engine = optionalEngine || defaultEngine;\n this.originalEngine = this.engine;\n}\n\n/**\n* Set value by key.\n*/\n\nStore.prototype.set = function(key, value) {\n var compoundKey = this._createValidKey(key);\n if (!compoundKey) return;\n try {\n this.engine.setItem(compoundKey, json.stringify(value));\n } catch (err) {\n if (isQuotaExceeded(err)) {\n // switch to inMemory engine\n this._swapEngine();\n // and save it there\n this.set(key, value);\n }\n }\n};\n\n/**\n* Get by Key.\n*/\n\nStore.prototype.get = function(key) {\n try {\n var str = this.engine.getItem(this._createValidKey(key));\n if (str === null) {\n return null;\n }\n return json.parse(str);\n } catch (err) {\n return null;\n }\n};\n\n/**\n * Get original engine\n */\n\nStore.prototype.getOriginalEngine = function() {\n return this.originalEngine;\n};\n\n/**\n* Remove by Key.\n*/\n\nStore.prototype.remove = function(key) {\n this.engine.removeItem(this._createValidKey(key));\n};\n\n/**\n* Ensure the key is valid\n*/\n\nStore.prototype._createValidKey = function(key) {\n var name = this.name;\n var id = this.id;\n\n if (!keys(this.keys).length) return [name, id, key].join('.');\n\n // validate and return undefined if invalid key\n var compoundKey;\n each(function(value) {\n if (value === key) {\n compoundKey = [name, id, key].join('.');\n }\n }, this.keys);\n return compoundKey;\n};\n\n/**\n* Switch to inMemoryEngine, bringing any existing data with.\n*/\n\nStore.prototype._swapEngine = function() {\n var self = this;\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 each(function(key) {\n var value = self.get(key);\n inMemoryEngine.setItem([self.name, self.id, key].join('.'), value);\n self.remove(key);\n }, this.keys);\n\n this.engine = inMemoryEngine;\n};\n\nmodule.exports = Store;\n\nfunction isQuotaExceeded(e) {\n var quotaExceeded = false;\n if (e.code) {\n switch (e.code) {\n case 22:\n quotaExceeded = true;\n break;\n case 1014:\n // Firefox\n if (e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n quotaExceeded = true;\n }\n break;\n default:\n break;\n }\n } else if (e.number === -2147024882) {\n // Internet Explorer 8\n quotaExceeded = true;\n }\n return quotaExceeded;\n}\n","'use strict';\n\nvar each = require('@ndhoule/each');\n\nvar CLOCK_LATE_FACTOR = 2;\n\nvar defaultClock = {\n setTimeout: function(fn, ms) {\n return window.setTimeout(fn, ms);\n },\n clearTimeout: function(id) {\n return window.clearTimeout(id);\n },\n Date: window.Date\n};\n\nvar clock = defaultClock;\n\nvar modes = {\n ASAP: 1,\n RESCHEDULE: 2,\n ABANDON: 3\n};\n\nfunction Schedule() {\n this.tasks = {};\n this.nextId = 1;\n}\n\nSchedule.prototype.now = function() {\n return +new clock.Date();\n};\n\nSchedule.prototype.run = function(task, timeout, mode) {\n var id = this.nextId++;\n\n this.tasks[id] = clock.setTimeout(this._handle(id, task, timeout, mode || modes.ASAP), timeout);\n return id;\n};\n\nSchedule.prototype.cancel = function(id) {\n if (this.tasks[id]) {\n clock.clearTimeout(this.tasks[id]);\n delete this.tasks[id];\n }\n};\n\nSchedule.prototype.cancelAll = function() {\n each(clock.clearTimeout, this.tasks);\n this.tasks = {};\n};\n\nSchedule.prototype._handle = function(id, callback, timeout, mode) {\n var self = this;\n var start = self.now();\n return function() {\n delete self.tasks[id];\n if (mode >= modes.RESCHEDULE && start + timeout * CLOCK_LATE_FACTOR < self.now()) {\n if (mode === modes.RESCHEDULE) {\n self.run(callback, timeout, mode);\n }\n return;\n }\n return callback();\n };\n};\n\nSchedule.setClock = function(newClock) {\n clock = newClock;\n};\n\nSchedule.resetClock = function() {\n clock = defaultClock;\n};\n\nSchedule.Modes = modes;\n\nmodule.exports = Schedule;\n","'use strict';\n\nvar uuid = require('@lukeed/uuid').v4;\nvar Store = require('./store');\nvar each = require('@ndhoule/each');\nvar Schedule = require('./schedule');\nvar debug = require('debug')('localstorage-retry');\nvar Emitter = require('component-emitter');\n\n// Some browsers don't support Function.prototype.bind, so just including a simplified version here\nfunction bind(func, obj) {\n return function() {\n return func.apply(obj, arguments);\n };\n}\n\n/**\n * @callback processFunc\n * @param {Mixed} item The item added to the queue to process\n * @param {Function} done A function to call when processing is completed.\n * @param {Error} Optional error parameter if the processing failed\n * @param {Response} Optional response parameter to emit for async handling\n */\n\n/**\n * Constructs a Queue backed by localStorage\n *\n * @constructor\n * @param {String} name The name of the queue. Will be used to find abandoned queues and retry their items\n * @param {Object} [opts] Optional argument to override `maxItems`, `maxAttempts`, `minRetryDelay, `maxRetryDelay`, `backoffFactor` and `backoffJitter`.\n * @param {processFunc} fn The function to call in order to process an item added to the queue\n */\nfunction Queue(name, opts, fn) {\n if (typeof opts === 'function') fn = opts;\n this.name = name;\n this.id = uuid();\n this.fn = fn;\n this.maxItems = opts.maxItems || Infinity;\n this.maxAttempts = opts.maxAttempts || Infinity;\n\n this.backoff = {\n MIN_RETRY_DELAY: opts.minRetryDelay || 1000,\n MAX_RETRY_DELAY: opts.maxRetryDelay || 30000,\n FACTOR: opts.backoffFactor || 2,\n JITTER: opts.backoffJitter || 0\n };\n\n // painstakingly tuned. that's why they're not \"easily\" configurable\n this.timeouts = {\n ACK_TIMER: 1000,\n RECLAIM_TIMER: 3000,\n RECLAIM_TIMEOUT: 10000,\n RECLAIM_WAIT: 500\n };\n\n this.keys = {\n IN_PROGRESS: 'inProgress',\n QUEUE: 'queue',\n RECLAIM_START: 'reclaimStart',\n RECLAIM_END: 'reclaimEnd',\n ACK: 'ack'\n };\n\n this._schedule = new Schedule();\n this._processId = 0;\n\n // Set up our empty queues\n this._store = new Store(this.name, this.id, this.keys);\n this._store.set(this.keys.IN_PROGRESS, {});\n this._store.set(this.keys.QUEUE, []);\n\n // bind recurring tasks for ease of use\n this._ack = bind(this._ack, this);\n this._checkReclaim = bind(this._checkReclaim, this);\n this._processHead = bind(this._processHead, this);\n\n this._running = false;\n}\n\n/**\n * Mix in event emitter\n */\n\nEmitter(Queue.prototype);\n\n/**\n * Starts processing the queue\n */\nQueue.prototype.start = function() {\n if (this._running) {\n this.stop();\n }\n this._running = true;\n this._ack();\n this._checkReclaim();\n this._processHead();\n};\n\n/**\n * Stops processing the queue\n */\nQueue.prototype.stop = function() {\n this._schedule.cancelAll();\n this._running = false;\n};\n\n/**\n * Decides whether to retry. Overridable.\n *\n * @param {Object} item The item being processed\n * @param {Number} attemptNumber The attemptNumber (1 for first retry)\n * @param {Error} error The error from previous attempt, if there was one\n * @return {Boolean} Whether to requeue the message\n */\nQueue.prototype.shouldRetry = function(_, attemptNumber) {\n if (attemptNumber > this.maxAttempts) return false;\n return true;\n};\n\n/**\n * Calculates the delay (in ms) for a retry attempt\n *\n * @param {Number} attemptNumber The attemptNumber (1 for first retry)\n * @return {Number} The delay in milliseconds to wait before attempting a retry\n */\nQueue.prototype.getDelay = function(attemptNumber) {\n var ms = this.backoff.MIN_RETRY_DELAY * Math.pow(this.backoff.FACTOR, attemptNumber);\n if (this.backoff.JITTER) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.backoff.JITTER * ms);\n if (Math.floor(rand * 10) < 5) {\n ms -= deviation;\n } else {\n ms += deviation;\n }\n }\n return Number(Math.min(ms, this.backoff.MAX_RETRY_DELAY).toPrecision(1));\n};\n\n/**\n * Adds an item to the queue\n *\n * @param {Mixed} item The item to process\n */\nQueue.prototype.addItem = function(item) {\n this._enqueue({\n item: item,\n attemptNumber: 0,\n time: this._schedule.now(),\n id: uuid()\n });\n};\n\n/**\n * Adds an item to the retry queue\n *\n * @param {Mixed} item The item to retry\n * @param {Number} attemptNumber The attempt number (1 for first retry)\n * @param {Error} [error] The error from previous attempt, if there was one\n * @param {String} [id] The id of the queued message used for tracking duplicate entries\n */\nQueue.prototype.requeue = function(item, attemptNumber, error, id) {\n if (this.shouldRetry(item, attemptNumber, error)) {\n this._enqueue({\n item: item,\n attemptNumber: attemptNumber,\n time: this._schedule.now() + this.getDelay(attemptNumber),\n id: id || uuid()\n });\n } else {\n this.emit('discard', item, attemptNumber);\n }\n};\n\nQueue.prototype._enqueue = function(entry) {\n var queue = this._store.get(this.keys.QUEUE) || [];\n queue = queue.slice(-(this.maxItems - 1));\n queue.push(entry);\n queue = queue.sort(function(a,b) {\n return a.time - b.time;\n });\n\n this._store.set(this.keys.QUEUE, queue);\n\n if (this._running) {\n this._processHead();\n }\n};\n\nQueue.prototype._processHead = function() {\n var self = this;\n var store = this._store;\n\n // cancel the scheduled task if it exists\n this._schedule.cancel(this._processId);\n\n // Pop the head off the queue\n var queue = store.get(this.keys.QUEUE) || [];\n var inProgress = store.get(this.keys.IN_PROGRESS) || {};\n var now = this._schedule.now();\n var toRun = [];\n\n function enqueue(el, id) {\n toRun.push({\n item: el.item,\n done: function handle(err, res) {\n var inProgress = store.get(self.keys.IN_PROGRESS) || {};\n delete inProgress[id];\n store.set(self.keys.IN_PROGRESS, inProgress);\n self.emit('processed', err, res, el.item);\n if (err) {\n self.requeue(el.item, el.attemptNumber + 1, err, el.id);\n }\n }\n });\n }\n\n var inProgressSize = Object.keys(inProgress).length;\n\n while (queue.length && queue[0].time <= now && inProgressSize++ < self.maxItems) {\n var el = queue.shift();\n var id = uuid();\n\n // Save this to the in progress map\n inProgress[id] = {\n item: el.item,\n attemptNumber: el.attemptNumber,\n time: self._schedule.now()\n };\n\n enqueue(el, id);\n }\n\n store.set(this.keys.QUEUE, queue);\n store.set(this.keys.IN_PROGRESS, inProgress);\n\n each(function(el) {\n // TODO: handle fn timeout\n try {\n self.fn(el.item, el.done);\n } catch (err) {\n debug('Process function threw error: ' + err);\n }\n }, toRun);\n\n // re-read the queue in case the process function finished immediately or added another item\n queue = store.get(this.keys.QUEUE) || [];\n this._schedule.cancel(this._processId);\n if (queue.length > 0) {\n this._processId = this._schedule.run(this._processHead, queue[0].time - now, Schedule.Modes.ASAP);\n }\n};\n\n// Ack continuously to prevent other tabs from claiming our queue\nQueue.prototype._ack = function() {\n this._store.set(this.keys.ACK, this._schedule.now());\n this._store.set(this.keys.RECLAIM_START, null);\n this._store.set(this.keys.RECLAIM_END, null);\n this._schedule.run(this._ack, this.timeouts.ACK_TIMER, Schedule.Modes.ASAP);\n};\n\nQueue.prototype._checkReclaim = function() {\n var self = this;\n\n function tryReclaim(store) {\n store.set(self.keys.RECLAIM_START, self.id);\n store.set(self.keys.ACK, self._schedule.now());\n\n self._schedule.run(function() {\n if (store.get(self.keys.RECLAIM_START) !== self.id) return;\n store.set(self.keys.RECLAIM_END, self.id);\n\n self._schedule.run(function() {\n if (store.get(self.keys.RECLAIM_END) !== self.id) return;\n if (store.get(self.keys.RECLAIM_START) !== self.id) return;\n self._reclaim(store.id);\n }, self.timeouts.RECLAIM_WAIT, Schedule.Modes.ABANDON);\n }, self.timeouts.RECLAIM_WAIT, Schedule.Modes.ABANDON);\n }\n\n function findOtherQueues(name) {\n var res = [];\n var storage = self._store.getOriginalEngine();\n for (var i = 0; i < storage.length; i++) {\n var k = storage.key(i);\n var parts = k.split('.');\n if (parts.length !== 3) continue;\n if (parts[0] !== name) continue;\n if (parts[2] !== 'ack') continue;\n res.push(new Store(name, parts[1], self.keys));\n }\n return res;\n }\n\n each(function(store) {\n if (store.id === self.id) return;\n if (self._schedule.now() - store.get(self.keys.ACK) < self.timeouts.RECLAIM_TIMEOUT) return;\n tryReclaim(store);\n }, findOtherQueues(this.name));\n\n this._schedule.run(this._checkReclaim, this.timeouts.RECLAIM_TIMER, Schedule.Modes.RESCHEDULE);\n};\n\nQueue.prototype._reclaim = function(id) {\n var self = this;\n var other = new Store(this.name, id, this.keys);\n\n var our = {\n queue: this._store.get(this.keys.QUEUE) || []\n };\n\n var their = {\n inProgress: other.get(this.keys.IN_PROGRESS) || {},\n queue: other.get(this.keys.QUEUE) || []\n };\n\n var trackMessageIds = [];\n\n var addConcatQueue = function(queue, incrementAttemptNumberBy) {\n each(function(el) {\n var id = el.id || uuid();\n if (trackMessageIds.indexOf(id) >= 0) {\n self.emit('duplication', el.item, el.attemptNumber);\n } else {\n our.queue.push({\n item: el.item,\n attemptNumber: el.attemptNumber + incrementAttemptNumberBy,\n time: self._schedule.now(),\n id: id\n });\n trackMessageIds.push(id);\n }\n }, queue);\n };\n\n // add their queue to ours, resetting run-time to immediate and copying the attempt#\n addConcatQueue(their.queue, 0);\n\n // if the queue is abandoned, all the in-progress are failed. retry them immediately and increment the attempt#\n addConcatQueue(their.inProgress, 1);\n\n our.queue = our.queue.sort(function(a,b) {\n return a.time - b.time;\n });\n\n this._store.set(this.keys.QUEUE, our.queue);\n\n // remove all keys\n other.remove(this.keys.IN_PROGRESS);\n other.remove(this.keys.QUEUE);\n other.remove(this.keys.RECLAIM_START);\n other.remove(this.keys.RECLAIM_END);\n other.remove(this.keys.ACK);\n\n // process the new items we claimed\n this._processHead();\n};\n\nmodule.exports = Queue;\n","/* eslint-disable no-param-reassign */\n/* eslint-disable func-names */\n/* eslint-disable import/no-unresolved */\n/* eslint-disable global-require */\n/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\n/* eslint-disable class-methods-use-this */\nimport Queue from '@segment/localstorage-retry';\nimport { getCurrentTimeFormatted, replacer } from './utils';\nimport { handleError } from './errorHandler';\n\nconst queueOptions = {\n maxRetryDelay: 360000,\n minRetryDelay: 1000,\n backoffFactor: 2,\n maxAttempts: 10,\n maxItems: 100,\n};\n\nclass XHRQueue {\n constructor() {\n this.url = '';\n this.writeKey = '';\n }\n\n init(writeKey, url, options) {\n this.url = url;\n this.writeKey = writeKey;\n if (options) {\n // TODO: add checks for value - has to be +ve?\n Object.assign(queueOptions, options);\n }\n this.payloadQueue = new Queue(\n 'rudder',\n queueOptions,\n function (item, done) {\n // apply sentAt at flush time and reset on each retry\n item.message.sentAt = getCurrentTimeFormatted();\n // send this item for processing, with a callback to enable queue to get the done status\n // eslint-disable-next-line no-use-before-define\n this.processQueueElement(\n item.url,\n item.headers,\n item.message,\n 10 * 1000,\n // eslint-disable-next-line consistent-return\n function (err, res) {\n if (err) {\n return done(err);\n }\n done(null, res);\n },\n );\n }.bind(this),\n );\n\n // start queue\n this.payloadQueue.start();\n }\n\n /**\n * the queue item proceesor\n * @param {*} url to send requests to\n * @param {*} headers\n * @param {*} message\n * @param {*} timeout\n * @param {*} queueFn the function to call after request completion\n */\n processQueueElement(url, headers, message, timeout, queueFn) {\n try {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', url, true);\n for (const k in headers) {\n xhr.setRequestHeader(k, headers[k]);\n }\n xhr.timeout = timeout;\n xhr.ontimeout = queueFn;\n xhr.onerror = queueFn;\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 429 || (xhr.status >= 500 && xhr.status < 600)) {\n handleError(\n new Error(\n `request failed with status: ${xhr.status}${xhr.statusText} for url: ${url}`,\n ),\n );\n queueFn(\n new Error(\n `request failed with status: ${xhr.status}${xhr.statusText} for url: ${url}`,\n ),\n );\n } else {\n queueFn(null, xhr.status);\n }\n }\n };\n\n xhr.send(JSON.stringify(message, replacer));\n } catch (error) {\n queueFn(error);\n }\n }\n\n enqueue(message, type) {\n const headers = {\n 'Content-Type': 'application/json',\n Authorization: `Basic ${btoa(`${this.writeKey}:`)}`,\n AnonymousId: btoa(message.anonymousId),\n };\n // add items to the queue\n this.payloadQueue.addItem({\n url: `${this.url}/v1/${type}`,\n headers,\n message,\n });\n }\n}\n\nexport default XHRQueue;\n","/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport { Store } from './storage/store';\nimport { replacer } from './utils';\nimport { handleError } from './errorHandler';\n\nconst defaults = {\n queue: 'queue',\n maxPayloadSize: 64 * 1000,\n};\n\nclass BeaconQueue {\n constructor() {\n this.storage = Store;\n this.maxItems = 10;\n this.flushQueueTimeOut = undefined;\n this.timeOutActive = false;\n this.flushQueueTimeOutInterval = 1000 * 60 * 10; // 10 mins\n this.url = '';\n this.writekey = '';\n this.queueName = `${defaults.queue}.${Date.now()}`;\n this.send = navigator.sendBeacon && navigator.sendBeacon.bind(navigator);\n }\n\n sendQueueDataForBeacon() {\n this.sendDataFromQueueAndDestroyQueue();\n }\n\n init(writekey, url, options) {\n this.url = url;\n this.writekey = writekey;\n if (options.maxItems) this.maxItems = options.maxItems;\n if (options.flushQueueInterval) this.flushQueueTimeOutInterval = options.flushQueueInterval;\n const sendQueueData = this.sendQueueDataForBeacon.bind(this);\n window.addEventListener('unload', sendQueueData);\n }\n\n getQueue() {\n return this.storage.get(this.queueName);\n }\n\n setQueue(value) {\n this.storage.set(this.queueName, value);\n }\n\n enqueue(message) {\n let queue = this.getQueue() || [];\n queue = queue.slice(-(this.maxItems - 1));\n queue.push(message);\n let batch = queue.slice(0);\n const data = { batch };\n const dataToSend = JSON.stringify(data, replacer);\n if (dataToSend.length > defaults.maxPayloadSize) {\n batch = queue.slice(0, queue.length - 1);\n this.flushQueue(batch);\n queue = this.getQueue();\n queue.push(message);\n }\n this.setQueue(queue);\n this.setTimer();\n\n if (queue.length === this.maxItems) {\n this.flushQueue(batch);\n }\n }\n\n sendDataFromQueueAndDestroyQueue() {\n this.sendDataFromQueue();\n this.storage.remove(this.queueName);\n }\n\n sendDataFromQueue() {\n const queue = this.getQueue();\n if (queue && queue.length > 0) {\n const batch = queue.slice(0, queue.length);\n this.flushQueue(batch);\n }\n }\n\n flushQueue(batch) {\n batch.forEach((event) => {\n event.sentAt = new Date().toISOString();\n });\n const data = { batch };\n const payload = JSON.stringify(data, replacer);\n const blob = new Blob([payload], { type: 'text/plain' });\n try {\n const isPushed = this.send(`${this.url}?writeKey=${this.writekey}`, blob);\n if (!isPushed) {\n handleError(new Error(\"Unable to queue data to browser's beacon queue\"));\n }\n } catch (e) {\n handleError(e);\n }\n this.setQueue([]);\n this.clearTimer();\n }\n\n setTimer() {\n if (!this.timeOutActive) {\n this.flushQueueTimeOut = setTimeout(\n this.sendDataFromQueue.bind(this),\n this.flushQueueTimeOutInterval,\n );\n this.timeOutActive = true;\n }\n }\n\n clearTimer() {\n if (this.timeOutActive) {\n clearTimeout(this.flushQueueTimeOut);\n this.timeOutActive = false;\n }\n }\n}\nexport default BeaconQueue;\n","/* eslint-disable no-lonely-if */\n/* eslint-disable class-methods-use-this */\nimport logger from './logUtil';\nimport XHRQueue from './xhrModule';\nimport BeaconQueue from './beaconQueue';\nimport { getCurrentTimeFormatted, removeTrailingSlashes, replacer } from './utils';\n\nconst MESSAGE_LENGTH = 32 * 1000; // ~32 Kb\n\n/**\n *\n * @class EventRepository responsible for adding events into\n * flush queue and sending data to rudder backend\n * in batch and maintains order of the event.\n */\nclass EventRepository {\n /**\n *Creates an instance of EventRepository.\n * @memberof EventRepository\n */\n constructor() {\n this.queue = undefined;\n }\n\n initialize(writeKey, url, options) {\n let queueOptions = {};\n let targetUrl = removeTrailingSlashes(url);\n if (options && options.useBeacon && navigator.sendBeacon) {\n if (\n options &&\n options.beaconQueueOptions &&\n options.beaconQueueOptions != null &&\n typeof options.beaconQueueOptions === 'object'\n ) {\n queueOptions = options.beaconQueueOptions;\n }\n targetUrl = `${targetUrl}/beacon/v1/batch`;\n this.queue = new BeaconQueue();\n } else {\n if (options && options.useBeacon) {\n logger.info(\n '[EventRepository] sendBeacon feature not available in this browser :: fallback to XHR',\n );\n }\n if (\n options &&\n options.queueOptions &&\n options.queueOptions != null &&\n typeof options.queueOptions === 'object'\n ) {\n queueOptions = options.queueOptions;\n }\n this.queue = new XHRQueue();\n }\n this.queue.init(writeKey, targetUrl, queueOptions);\n }\n\n /**\n *\n *\n * @param {RudderElement} rudderElement\n * @memberof EventRepository\n */\n enqueue(rudderElement, type) {\n const message = rudderElement.getElementContent();\n message.originalTimestamp = message.originalTimestamp || getCurrentTimeFormatted();\n message.sentAt = getCurrentTimeFormatted(); // add this, will get modified when actually being sent\n\n // check message size, if greater log an error\n if (JSON.stringify(message, replacer).length > MESSAGE_LENGTH) {\n logger.error('[EventRepository] enqueue:: message length greater 32 Kb ', message);\n }\n\n this.queue.enqueue(message, type);\n }\n}\nconst eventRepository = new EventRepository();\nexport { eventRepository as EventRepository };\n","/**\n * @description An interface to fetch user device details.\n * @version v1.0.0\n */\n\nconst USER_INTERFACE = {\n /**\n * @param {*} req\n * @returns {string} user language\n */\n getUserLanguage: () => navigator && navigator.language,\n\n /**\n * @param {*} req\n * @returns {string} userAgent\n */\n getUserAgent: () => navigator && navigator.userAgent,\n};\n\nexport default USER_INTERFACE;\n","/**\n * @description This is utility function for decoding from base 64 to utf8\n * @version v1.0.0\n */\n\n/**\n * @param {string} str base64\n * @returns {string} utf8\n */\nfunction b64DecodeUnicode(str) {\n // Going backwards: from bytestream, to percent-encoding, to original string.\n return decodeURIComponent(\n atob(str)\n .split('')\n .map(function (c) {\n return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`;\n })\n .join(''),\n );\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nfunction decode(data = '') {\n data = data.endsWith('..') ? data.substr(0, data.length - 2) : data;\n return b64DecodeUnicode(data);\n}\n\nexport default decode;\n","/**\n * @description AMP Linker Parser (works for Rudder, GA or any other linker created by following Google's linker standard.)\n * @version v1.0.0\n * @author Parth Mahajan, Ayush Mehra\n */\n\nimport crc32 from './crc32';\nimport USER_INTERFACE from './userLib';\nimport decode from './base64decoder';\n\nconst KEY_VALIDATOR = /^[a-zA-Z0-9\\-_.]+$/;\nconst CHECKSUM_OFFSET_MAX_MIN = 1;\nconst VALID_VERSION = 1;\nconst DELIMITER = '*';\n\n/**\n * Parse the linker param value to version checksum and serializedParams\n * @param {string} value\n * @return {?Object}\n */\nfunction parseLinkerParamValue(value) {\n const parts = value.split(DELIMITER);\n const isEven = parts.length % 2 === 0;\n\n if (parts.length < 4 || !isEven) {\n // Format ***\n // Note: linker makes sure there's at least one pair of non empty key value\n // Make sure there is at least three delimiters.\n return null;\n }\n\n const version = Number(parts.shift());\n if (version !== VALID_VERSION) {\n return null;\n }\n\n const checksum = parts.shift();\n const serializedIds = parts.join(DELIMITER);\n return {\n checksum,\n serializedIds,\n };\n}\n\n/**\n * Deserialize the serializedIds and return keyValue pairs.\n * @param {string} serializedIds\n * @return {!Object}\n */\nfunction deserialize(serializedIds) {\n const keyValuePairs = {};\n const params = serializedIds.split(DELIMITER);\n for (let i = 0; i < params.length; i += 2) {\n const key = params[i];\n const valid = KEY_VALIDATOR.test(key);\n if (valid) {\n const value = decode(params[i + 1]);\n // const value = params[i + 1];\n keyValuePairs[key] = value;\n }\n }\n return keyValuePairs;\n}\n\n/**\n * Generates a semi-unique value for page visitor.\n * @return {string}\n */\nfunction getFingerprint(userAgent, language) {\n const date = new Date();\n const timezone = date.getTimezoneOffset();\n return [userAgent, timezone, language].join(DELIMITER);\n}\n\n/**\n * Rounded time used to check if t2 - t1 is within our time tolerance.\n * @return {number}\n */\nfunction getMinSinceEpoch() {\n // Timestamp in minutes, floored.\n return Math.floor(Date.now() / 60000);\n}\n\n/**\n * Create a unique checksum hashing the fingerprint and a few other values.\n * @param {string} serializedIds\n * @param {number=} optOffsetMin\n * @return {string}\n */\nfunction getCheckSum(serializedIds, optOffsetMin, userAgent, language) {\n const fingerprint = getFingerprint(userAgent, language);\n const offset = optOffsetMin || 0;\n const timestamp = getMinSinceEpoch() - offset;\n const crc = crc32([fingerprint, timestamp, serializedIds].join(DELIMITER));\n // Encoded to base36 for less bytes.\n return crc.toString(36);\n}\n\n/**\n * Check if the checksum is valid with time offset tolerance.\n * @param {string} serializedIds\n * @param {string} checksum\n * @return {boolean}\n */\nfunction isCheckSumValid(serializedIds, checksum) {\n const userAgent = USER_INTERFACE.getUserAgent();\n const language = USER_INTERFACE.getUserLanguage();\n for (let i = 0; i <= CHECKSUM_OFFSET_MAX_MIN; i += 1) {\n const calculateCheckSum = getCheckSum(serializedIds, i, userAgent, language);\n if (calculateCheckSum === checksum) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Return the key value pairs\n * @param {string} value\n * @return {?Object}\n */\nfunction parseLinker(value) {\n const linkerObj = parseLinkerParamValue(value);\n if (!linkerObj) {\n return null;\n }\n const { checksum, serializedIds } = linkerObj;\n if (!isCheckSumValid(serializedIds, checksum)) {\n return null;\n }\n return deserialize(serializedIds);\n}\n\nexport default parseLinker;\n","/* eslint-disable no-bitwise */\n/**\n * @description This is utility function for crc32 algorithm\n * @version v1.0.0\n */\n\n/**\n * @description generate crc table\n * @params none\n * @returns array of CRC table\n */\n\nconst makeCRCTable = function () {\n const crcTable = [];\n let c;\n for (let n = 0; n < 256; n++) {\n c = n;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n crcTable[n] = c;\n }\n return crcTable;\n};\n\n/**\n *\n * @param {string} str\n * @returns {Bytestream} crc32\n */\nconst crc32 = function (str) {\n const crcTable = makeCRCTable();\n let crc = 0 ^ -1;\n\n for (let i = 0; i < str.length; i++) {\n crc = (crc >>> 8) ^ crcTable[(crc ^ str.charCodeAt(i)) & 0xff];\n }\n\n return (crc ^ -1) >>> 0;\n};\n\nexport default crc32;\n","// map b/w the names of integrations coming from config plane to\n// integration module names\nconst configToIntNames = {\n HS: 'HubSpot',\n GA: 'GA',\n HOTJAR: 'Hotjar',\n GOOGLEADS: 'GoogleAds',\n VWO: 'VWO',\n GTM: 'GoogleTagManager',\n BRAZE: 'Braze',\n INTERCOM: 'INTERCOM',\n KEEN: 'Keen',\n KISSMETRICS: 'Kissmetrics',\n CUSTOMERIO: 'CustomerIO',\n CHARTBEAT: 'Chartbeat',\n COMSCORE: 'Comscore',\n FACEBOOK_PIXEL: 'FacebookPixel',\n LOTAME: 'Lotame',\n OPTIMIZELY: 'Optimizely',\n BUGSNAG: 'Bugsnag',\n FULLSTORY: 'Fullstory',\n TVSQUARED: 'TVSquared',\n GA4: 'GA4',\n MOENGAGE: 'MoEngage',\n AM: 'Amplitude',\n PENDO: 'Pendo',\n LYTICS: 'Lytics',\n APPCUES: 'Appcues',\n POSTHOG: 'Posthog',\n KLAVIYO: 'Klaviyo',\n CLEVERTAP: 'Clevertap',\n BINGADS: 'BingAds',\n PINTEREST_TAG: 'PinterestTag',\n ADOBE_ANALYTICS: 'AdobeAnalytics',\n LINKEDIN_INSIGHT_TAG: 'LinkedInInsightTag',\n REDDIT_PIXEL: 'RedditPixel',\n DRIP: 'Drip',\n HEAP: 'Heap',\n CRITEO: 'Criteo',\n MP: 'Mixpanel',\n QUALTRICS: 'Qualtrics',\n PROFITWELL: 'ProfitWell',\n SENTRY: 'Sentry',\n QUANTUMMETRIC: 'QuantumMetric',\n SNAP_PIXEL: 'SnapPixel',\n POST_AFFILIATE_PRO: 'PostAffiliatePro',\n GOOGLE_OPTIMIZE: 'GoogleOptimize',\n LAUNCHDARKLY: 'LaunchDarkly',\n GA360: 'GA360',\n ADROLL: 'Adroll',\n DCM_FLOODLIGHT: 'DCMFloodlight',\n MATOMO: 'Matomo',\n VERO: 'Vero',\n MOUSEFLOW: 'Mouseflow',\n ROCKERBOX: 'Rockerbox',\n CONVERTFLOW: 'ConvertFlow',\n SNAPENGAGE: 'SnapEngage',\n LIVECHAT: 'LiveChat',\n SHYNET: 'Shynet',\n WOOPRA: 'Woopra',\n ROLLBAR: 'RollBar',\n QUORA_PIXEL: 'QuoraPixel',\n JUNE: 'June',\n ENGAGE: 'Engage',\n ITERABLE: 'Iterable',\n YANDEX_METRICA: 'YandexMetrica',\n REFINER: 'Refiner',\n QUALAROO: 'Qualaroo',\n PODSIGHTS: 'Podsights',\n AXEPTIO: 'Axeptio',\n SATISMETER: 'Satismeter',\n MICROSOFT_CLARITY: 'MicrosoftClarity',\n SENDINBLUE: 'Sendinblue',\n OLARK: 'Olark',\n LEMNISK: \"Lemnisk\",\n};\n\nexport { configToIntNames };\n","import logger from '../../../../utils/logUtil';\n\n/* eslint-disable class-methods-use-this */\nclass OneTrust {\n constructor() {\n // If user does not load onetrust sdk before loading rudderstack sdk\n // we will not be filtering any of the destinations.\n if (!window.OneTrust || !window.OnetrustActiveGroups) {\n throw new Error(\n 'OneTrust resources are not accessible. Thus all the destinations will be loaded',\n );\n }\n // OneTrust Cookie Compliance populates a data layer object OnetrustActiveGroups with\n // the cookie categories that the user has consented to.\n // Eg: ',C0001,C0003,'\n // We split it and save it as an array.\n\n this.userSetConsentGroupIds = window.OnetrustActiveGroups.split(',').filter((n) => n); // Ids user has consented\n\n // Get information about the cookie script - data includes, consent models, cookies in preference centre, etc.\n // We get the groups(cookie categorization), user has created in one trust account.\n\n const oneTrustAllGroupsInfo = window.OneTrust.GetDomainData().Groups;\n this.userSetConsentGroupNames = [];\n\n // Get the names of the cookies consented by the user in the browser.\n\n oneTrustAllGroupsInfo.forEach((group) => {\n const { CustomGroupId, GroupName } = group;\n if (this.userSetConsentGroupIds.includes(CustomGroupId)) {\n this.userSetConsentGroupNames.push(GroupName.toUpperCase().trim());\n }\n });\n\n this.userSetConsentGroupIds = this.userSetConsentGroupIds.map((e) => e.toUpperCase());\n }\n\n isEnabled(destConfig) {\n try {\n /**\n * Structure of onetrust consent group destination config.\n * \n * \"oneTrustConsentGroup\": [\n {\n \"oneTrustConsentGroup\": \"Performance Cookies\"\n },\n {\n \"oneTrustConsentGroup\": \"Functional Cookies\"\n },\n {\n \"oneTrustConsentGroup\": \"\"\n }\n ]\n *\n */\n\n const { oneTrustCookieCategories } = destConfig; // mapping of the destination with the consent group name\n\n // If the destination do not have this mapping events will be sent.\n\n if (!oneTrustCookieCategories) {\n return true;\n }\n\n // Change the structure of oneTrustConsentGroup as an array and filter values if empty string\n // Eg:\n // [\"Performance Cookies\", \"Functional Cookies\"]\n\n const oneTrustConsentGroupArr = oneTrustCookieCategories\n .map((c) => c.oneTrustCookieCategory)\n .filter((n) => n);\n let containsAllConsent = true;\n // Check if all the destination's mapped cookie categories are consented by the user in the browser.\n containsAllConsent = oneTrustConsentGroupArr.every(\n (element) =>\n this.userSetConsentGroupIds.includes(element.toUpperCase().trim()) ||\n this.userSetConsentGroupNames.includes(element.toUpperCase().trim()),\n );\n return containsAllConsent;\n } catch (e) {\n logger.error(`Error during onetrust cookie consent management ${e}`);\n return true;\n }\n }\n}\n\nexport default OneTrust;\n","import { OneTrust } from './OneTrust';\n\nclass CookieConsentFactory {\n static initialize(cookieConsentOptions) {\n /**\n *\n * check which type of cookie consent manager needs to be called if enabled\n * for now we have only OneTrust.\n * But if new cookie consent manager options are implemented,\n * we need to make sure only one of them is enabled by the user in the\n * load options\n *\n */\n if (cookieConsentOptions?.oneTrust?.enabled) {\n // This is P1. When we have an ui in source side to turn on/off of cookie consent\n // if (sourceConfig &&\n // sourceConfig.cookieConsentManager &&\n // sourceConfig.cookieConsentManager.oneTrust &&\n // sourceConfig.cookieConsentManager.oneTrustenabled) {\n\n return new OneTrust();\n\n // }\n }\n return null;\n }\n}\n\nexport default CookieConsentFactory;\n","/* eslint-disable no-param-reassign */\n/* eslint-disable import/prefer-default-export */\n/* eslint-disable no-prototype-builtins */\nimport ScriptLoader from '../../../../utils/ScriptLoader';\nimport { configToIntNames } from '../../../../utils/config_to_integration_names';\nimport { MAX_WAIT_FOR_INTEGRATION_LOAD } from '../../../../utils/constants';\nimport { get } from '../../../../utils/utils';\n\n// This SDK meta data will be send along with the error for more insight\nconst META_DATA = {\n SDK: {\n name: 'JS',\n installType: 'process.module_type',\n },\n};\n\n// This API key token is parsed in the CI pipeline\nconst API_KEY = '{{RS_BUGSNAG_API_KEY}}';\n\n// Errors only from Below SDKs are allowed to reach Bugsnag\nconst SDK_FILE_NAMES = [\n 'rudder-analytics.min.js',\n ...Object.keys(configToIntNames).map((intgName) => `${configToIntNames[intgName]}.min.js`),\n];\n\n/**\n * This function will load the Bugsnag native SDK through CDN\n * Once loaded it will be available in window.Bugsnag\n */\nconst load = () => {\n const pluginName = 'bugsnag';\n if (!window.hasOwnProperty(pluginName)) {\n ScriptLoader(pluginName, 'https://d2wy8f7a9ursnm.cloudfront.net/v7/bugsnag.min.js', {\n isNonNativeSDK: 'true',\n });\n }\n};\n\n/**\n * This function is to initialize the bugsnag with apiKey, SDK meta data\n * and custom configuration for onError method.\n * After initialization Bugsnag instance will be available in window.rsBugsnagClient\n * @param {string} sourceId\n */\nfunction initClient(sourceId) {\n if (window.Bugsnag === undefined) return;\n\n // If the API key token is not parsed yet, don't proceed to initialize the client\n // This also prevents unnecessary errors sent to Bugsnag during development phase.\n const apiKeyRegex = /{{.+}}/;\n if (API_KEY.match(apiKeyRegex) !== null) return;\n const host = window.location.hostname;\n const devHosts = ['localhost', '127.0.0.1', '[::1]'];\n\n window.rsBugsnagClient = window.Bugsnag.start({\n apiKey: API_KEY,\n appVersion: 'process.package_version', // Set SDK version as the app version\n metadata: META_DATA,\n onError: (event) => {\n try {\n const errorOrigin = get(event, 'errors.0.stacktrace.0.file');\n // Skip errors that do not have a valid stack trace\n if (!errorOrigin || typeof errorOrigin !== 'string') return false;\n\n const srcFileName = errorOrigin.substring(errorOrigin.lastIndexOf('/') + 1);\n if (!SDK_FILE_NAMES.includes(srcFileName))\n // Discard the event if it's not originated at the SDK\n return false;\n\n event.addMetadata('source', {\n sourceId,\n });\n\n const errMsg = event.errors[0].errorMessage;\n event.context = errMsg;\n // Hack for easily grouping the script load errors\n // on the dashboard\n if (errMsg.includes('error in script loading')) event.context = 'Script load failures';\n\n event.severity = 'error';\n return true;\n } catch {\n // Drop the error event if it couldn't be filtered as\n // it is most likely a non-SDK error\n return false;\n }\n },\n autoTrackSessions: false, // auto tracking sessions is disabled\n collectUserIp: false, // collecting user's IP is disabled\n enabledBreadcrumbTypes: ['error', 'log', 'user'],\n maxEvents: 100,\n releaseStage: host && devHosts.includes(host) ? 'development' : 'production', // set the release stage\n });\n}\n\n/**\n * The responsibility of this function is to check Bugsnag native SDK\n * has been loaded or not in a certain interval.\n * If already loaded initialize the SDK.\n * @param {*} sourceId\n */\nconst init = (sourceId) => {\n if (window.hasOwnProperty('rsBugsnagClient')) return; // return if already initialized\n\n if (window.Bugsnag !== undefined) {\n initClient(sourceId);\n } else {\n // Check if Bugsnag is loaded every '100'ms\n const interval = setInterval(() => {\n if (window.Bugsnag !== undefined) {\n clearInterval(interval);\n\n initClient(sourceId);\n }\n }, 100);\n setTimeout(() => {\n clearInterval(interval);\n }, MAX_WAIT_FOR_INTEGRATION_LOAD);\n }\n};\n\nexport { load, init };\n","/* eslint-disable consistent-return */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable import/prefer-default-export */\nimport Storage from '../../../utils/storage';\nimport logger from '../../../utils/logUtil';\nimport {\n DEFAULT_SESSION_TIMEOUT,\n MIN_SESSION_TIMEOUT,\n MIN_SESSION_ID_LENGTH,\n} from '../../../utils/constants';\nimport { countDigits } from '../../../utils/utils';\nimport { handleError } from '../../../utils/errorHandler';\n\nclass UserSession {\n constructor() {\n this.storage = Storage;\n this.timeout = DEFAULT_SESSION_TIMEOUT;\n // Fetch session information from storage if any or enable auto track\n this.sessionInfo = this.storage.getSessionInfo() || { autoTrack: true };\n }\n\n /**\n * A function to initialize session information\n * @param {object} options load call options\n */\n initialize(options) {\n try {\n /**\n * By default this.autoTrack will be true\n * Cases where this.autoTrack will be false:\n * 1. User explicitly set autoTrack load option to false\n * 2. When user is manually tracking the session\n *\n * Depending on the use case, this.autoTrack is set to true/false.\n */\n this.sessionInfo.autoTrack = !(\n options?.sessions?.autoTrack === false || this.sessionInfo.manualTrack\n );\n /**\n * Validate \"timeout\" input. Should be provided in milliseconds.\n * Session timeout: By default, a session lasts until there's 30 minutes of inactivity,\n * but you can configure this limit using \"timeout\" load option\n */\n if (options?.sessions && !isNaN(options.sessions.timeout)) {\n const { timeout } = options.sessions;\n // In case user provides 0 as the timeout, auto session tracking will be disabled\n if (timeout === 0) {\n logger.warn(\n '[Session]:: Provided timeout value 0 will disable the auto session tracking feature.',\n );\n this.sessionInfo.autoTrack = false;\n }\n // In case user provides a setTimeout 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) {\n logger.warn('[Session]:: It is not advised to set \"timeout\" less than 10 seconds');\n }\n this.timeout = timeout;\n }\n // If auto session tracking is enabled start the session tracking\n if (this.sessionInfo.autoTrack) {\n this.startAutoTracking();\n } else if (this.sessionInfo.autoTrack === false && !this.sessionInfo.manualTrack) {\n /**\n * Use case:\n * By default user session is enabled which means storage will have session data.\n * In case user wanted to opt out and set auto track to false through load option,\n * clear stored session info.\n */\n this.end();\n }\n } catch (e) {\n handleError(e);\n }\n }\n\n /**\n * A function to validate current session and return true/false depending on that\n * @param {number} timestamp\n * @returns boolean\n */\n isValidSession(timestamp) {\n return timestamp <= this.sessionInfo.expiresAt;\n }\n\n /**\n * A function to generate session id\n * @returns number\n */\n generateSessionId() {\n return Date.now();\n }\n\n /**\n * A function to check for existing session details and depending on that create a new session.\n */\n startAutoTracking() {\n const timestamp = Date.now();\n if (!this.isValidSession(timestamp)) {\n this.sessionInfo = {};\n this.sessionInfo.id = timestamp; // set the current timestamp\n this.sessionInfo.expiresAt = timestamp + this.timeout; // set the expiry time of the session\n this.sessionInfo.sessionStart = true;\n this.sessionInfo.autoTrack = true;\n }\n this.storage.setSessionInfo(this.sessionInfo);\n }\n\n /**\n * Function to validate user provided sessionId\n * @param {number} sessionId\n * @returns\n */\n validateSessionId(sessionId) {\n if (typeof sessionId !== 'number' || sessionId % 1 !== 0) {\n logger.error(`[Session]:: \"sessionId\" should only be a positive integer`);\n return;\n }\n if (countDigits(sessionId) < MIN_SESSION_ID_LENGTH) {\n logger.error(\n `[Session]:: \"sessionId\" should at least be \"${MIN_SESSION_ID_LENGTH}\" digits long`,\n );\n return;\n }\n return sessionId;\n }\n\n /**\n * A public method to start a session\n * @param {number} sessionId session identifier\n * @returns\n */\n start(id) {\n const sessionId = id ? this.validateSessionId(id) : this.generateSessionId();\n\n this.sessionInfo = {\n id: sessionId || this.generateSessionId(),\n sessionStart: true,\n manualTrack: true,\n };\n this.storage.setSessionInfo(this.sessionInfo);\n }\n\n /**\n * A function to return current session id\n * @returns string sessionId\n */\n getSessionId() {\n if (\n (this.sessionInfo.autoTrack && this.isValidSession(Date.now())) ||\n this.sessionInfo.manualTrack\n ) {\n return this.sessionInfo.id;\n }\n return null;\n }\n\n /**\n * A public method to end an ongoing session.\n */\n end() {\n this.sessionInfo = {};\n this.storage.removeSessionInfo();\n }\n\n /**\n * A function get ongoing sessionId.\n */\n getSessionInfo() {\n const session = {};\n if (this.sessionInfo.autoTrack || this.sessionInfo.manualTrack) {\n // renew or create a new auto-tracking session\n if (this.sessionInfo.autoTrack) {\n const timestamp = Date.now();\n if (!this.isValidSession(timestamp)) {\n this.startAutoTracking();\n } else {\n this.sessionInfo.expiresAt = timestamp + this.timeout; // set the expiry time of the session\n }\n }\n\n if (this.sessionInfo.sessionStart) {\n session.sessionStart = true;\n this.sessionInfo.sessionStart = false;\n }\n session.sessionId = this.sessionInfo.id;\n this.storage.setSessionInfo(this.sessionInfo);\n }\n return session;\n }\n\n /**\n * Refresh session info on reset API call\n */\n reset() {\n const { manualTrack, autoTrack } = this.sessionInfo;\n if (autoTrack) {\n this.sessionInfo = {};\n this.startAutoTracking();\n } else if (manualTrack) {\n this.start();\n }\n }\n}\n\nconst userSession = new UserSession();\nexport { userSession as UserSession };\n","import * as R from 'ramda';\n\nconst mergeDeepRightObjectArrays = (leftValue, rightValue) => {\n if (!Array.isArray(leftValue) || !Array.isArray(rightValue)) {\n return R.clone(rightValue);\n }\n\n const mergedArray = R.clone(leftValue);\n rightValue.forEach((value, index) => {\n // eslint-disable-next-line no-use-before-define\n mergedArray[index] = mergeDeepRight(mergedArray[index], value);\n });\n\n return mergedArray;\n};\n\nconst mergeDeepRight = (leftObject, rightObject) =>\n R.mergeDeepWith(mergeDeepRightObjectArrays, leftObject, rightObject);\n\nexport { mergeDeepRightObjectArrays, mergeDeepRight };\n","import logger from './logUtil';\nimport { mergeDeepRight } from './ObjectUtils';\n\nconst defaultTopLevelElements = ['integrations', 'anonymousId', 'originalTimestamp'];\n\nconst mergeTopLevelElementsMutator = (rudderElementMessage, options = {}) => {\n if (typeof options !== 'object' || options === null) {\n return;\n }\n\n Object.keys(options).forEach((key) => {\n if (defaultTopLevelElements.includes(key)) {\n // eslint-disable-next-line no-param-reassign\n rudderElementMessage[key] = options[key];\n }\n });\n};\n\nconst mergeContext = (rudderElementMessage, options = {}) => {\n let { context } = rudderElementMessage;\n\n if (typeof options !== 'object' || options === null) {\n return context;\n }\n\n Object.keys(options).forEach((key) => {\n if (!defaultTopLevelElements.includes(key)) {\n if (key !== 'context') {\n if (key !== \"library\") {\n context = mergeDeepRight(context, {\n [key]: options[key],\n });\n }\n } else if (typeof options[key] === 'object' && options[key] !== null) {\n const tempContext = {};\n Object.keys(options[key]).forEach((e) => {\n if (e !== \"library\") {\n tempContext[e] = options[key][e];\n }\n });\n context = mergeDeepRight(context, {\n ...tempContext,\n });\n } else {\n logger.error(\n `[Analytics: processOptionsParam] context passed in options ${key} is not object.`,\n );\n }\n }\n });\n return context;\n};\n\nexport { mergeContext, mergeTopLevelElementsMutator };\n","/* eslint-disable prefer-rest-params */\n/* eslint-disable no-use-before-define */\n/* eslint-disable new-cap */\n/* eslint-disable func-names */\n/* eslint-disable eqeqeq */\n/* eslint-disable no-prototype-builtins */\n/* eslint-disable class-methods-use-this */\n/* eslint-disable no-restricted-syntax */\n/* eslint-disable guard-for-in */\n/* eslint-disable no-sequences */\n/* eslint-disable no-multi-assign */\n/* eslint-disable no-unused-expressions */\n/* eslint-disable import/extensions */\n/* eslint-disable no-param-reassign */\n/* eslint-disable sonarjs/cognitive-complexity */\nimport Emitter from 'component-emitter';\nimport { parse } from 'component-querystring';\nimport * as R from 'ramda';\nimport {\n getJSONTrimmed,\n generateUUID,\n getDefaultPageProperties,\n getUserProvidedConfigUrl,\n findAllEnabledDestinations,\n transformToRudderNames,\n transformToServerNames,\n checkReservedKeywords,\n getReferrer,\n getReferringDomain,\n getConfigUrl,\n getSDKUrlInfo,\n commonNames,\n get,\n getStringId,\n resolveDataPlaneUrl,\n} from '../utils/utils';\nimport { handleError, leaveBreadcrumb } from '../utils/errorHandler';\nimport {\n MAX_WAIT_FOR_INTEGRATION_LOAD,\n INTEGRATION_LOAD_CHECK_INTERVAL,\n DEST_SDK_BASE_URL,\n INTG_SUFFIX,\n POLYFILL_URL,\n DEFAULT_ERROR_REPORT_PROVIDER,\n ERROR_REPORT_PROVIDERS,\n SAMESITE_COOKIE_OPTS,\n} from '../utils/constants';\nimport RudderElementBuilder from '../utils/RudderElementBuilder';\nimport Storage from '../utils/storage';\nimport { EventRepository } from '../utils/EventRepository';\nimport logger from '../utils/logUtil';\nimport ScriptLoader from '../utils/ScriptLoader';\nimport parseLinker from '../utils/linker';\nimport { configToIntNames } from '../utils/config_to_integration_names';\nimport CookieConsentFactory from '../features/core/cookieConsent/CookieConsentFactory';\nimport * as BugsnagLib from '../features/core/metrics/error-report/Bugsnag';\nimport { UserSession } from '../features/core/session';\nimport { mergeContext, mergeTopLevelElementsMutator } from '../utils/eventProcessorUtils';\nimport {\n getMergedClientSuppliedIntegrations,\n constructMessageIntegrationsObj,\n} from '../utils/IntegrationsData';\nimport { getIntegrationsCDNPath } from '../utils/cdnPaths';\n\n/**\n * class responsible for handling core\n * event tracking functionalities\n */\nclass Analytics {\n /**\n * Creates an instance of Analytics.\n * @memberof Analytics\n */\n constructor() {\n this.initialized = false;\n this.clientIntegrations = [];\n this.loadOnlyIntegrations = {};\n this.clientIntegrationObjects = undefined;\n this.successfullyLoadedIntegration = [];\n this.failedToBeLoadedIntegration = [];\n this.toBeProcessedArray = [];\n this.toBeProcessedByIntegrationArray = [];\n this.storage = Storage;\n this.eventRepository = EventRepository;\n this.sendAdblockPage = false;\n this.sendAdblockPageOptions = {};\n this.clientSuppliedCallbacks = {};\n // Array to store the callback functions registered in the ready API\n this.readyCallbacks = [];\n this.methodToCallbackMapping = {\n syncPixel: 'syncPixelCallback',\n };\n this.loaded = false;\n this.loadIntegration = true;\n this.integrationsData = {};\n this.dynamicallyLoadedIntegrations = {};\n this.destSDKBaseURL = DEST_SDK_BASE_URL;\n this.cookieConsentOptions = {};\n this.logLevel = undefined;\n // flag to indicate client integrations` ready status\n this.clientIntegrationsReady = false;\n this.uSession = UserSession;\n this.version = 'process.package_version';\n this.lockIntegrationsVersion = false;\n }\n\n /**\n * initialize the user after load config\n */\n initializeUser(anonymousIdOptions) {\n // save once for storing older values to encrypted\n this.userId = this.storage.getUserId() || '';\n this.storage.setUserId(this.userId);\n\n this.userTraits = this.storage.getUserTraits() || {};\n this.storage.setUserTraits(this.userTraits);\n\n this.groupId = this.storage.getGroupId() || '';\n this.storage.setGroupId(this.groupId);\n\n this.groupTraits = this.storage.getGroupTraits() || {};\n this.storage.setGroupTraits(this.groupTraits);\n\n this.anonymousId = this.getAnonymousId(anonymousIdOptions);\n this.storage.setAnonymousId(this.anonymousId);\n }\n\n setInitialPageProperties() {\n if (\n this.storage.getInitialReferrer() == null &&\n this.storage.getInitialReferringDomain() == null\n ) {\n const initialReferrer = getReferrer();\n this.storage.setInitialReferrer(initialReferrer);\n this.storage.setInitialReferringDomain(getReferringDomain(initialReferrer));\n }\n }\n\n allModulesInitialized(time = 0) {\n return new Promise((resolve) => {\n if (\n this.clientIntegrations.every(\n (intg) =>\n this.dynamicallyLoadedIntegrations[`${configToIntNames[intg.name]}${INTG_SUFFIX}`] !=\n undefined,\n )\n ) {\n // logger.debug(\n // \"All integrations loaded dynamically\",\n // this.dynamicallyLoadedIntegrations\n // );\n resolve(this);\n } else if (time >= 2 * MAX_WAIT_FOR_INTEGRATION_LOAD) {\n // logger.debug(\"Max wait for dynamically loaded integrations over\")\n resolve(this);\n } else {\n this.pause(INTEGRATION_LOAD_CHECK_INTERVAL).then(() =>\n // logger.debug(\"Check if all integration SDKs are loaded after pause\")\n this.allModulesInitialized(time + INTEGRATION_LOAD_CHECK_INTERVAL).then(resolve),\n );\n }\n });\n }\n\n /**\n * Function to execute the ready method callbacks\n * @param {Analytics} self\n */\n executeReadyCallback() {\n this.readyCallbacks.forEach((callback) => callback());\n }\n\n /**\n * A function to validate integration SDK is available in window\n * and integration constructor is not undefined\n * @param {string} pluginName\n * @param {string} modName\n * @returns boolean\n */\n integrationSDKLoaded(pluginName, modName) {\n try {\n return (\n window.hasOwnProperty(pluginName) &&\n window[pluginName][modName] &&\n typeof window[pluginName][modName].prototype.constructor !== 'undefined'\n );\n } catch (e) {\n handleError(e);\n return false;\n }\n }\n\n /**\n * Process the response from control plane and\n * call initialize for integrations\n *\n * @param {*} status\n * @param {*} response\n * @memberof Analytics\n */\n processResponse(status, responseVal) {\n try {\n // logger.debug(`===in process response=== ${status}`);\n\n let response = responseVal;\n try {\n if (typeof responseVal === 'string') {\n response = JSON.parse(responseVal);\n }\n\n // Do not proceed if the ultimate response value is not an object\n if (!response || typeof response !== 'object' || Array.isArray(response)) {\n throw new Error('Invalid source configuration');\n }\n } catch (err) {\n handleError(err);\n return;\n }\n\n // Fetch Error reporting enable option from sourceConfig\n const isErrorReportEnabled = get(\n response.source.config,\n 'statsCollection.errorReports.enabled',\n );\n\n // Load Bugsnag only if it is enabled in the source config\n if (isErrorReportEnabled === true) {\n // Fetch the name of the Error reporter from sourceConfig\n const provider =\n get(response.source.config, 'statsCollection.errorReports.provider') ||\n DEFAULT_ERROR_REPORT_PROVIDER;\n if (!ERROR_REPORT_PROVIDERS.includes(provider)) {\n logger.error('Invalid error reporting provider value');\n }\n\n if (provider === 'bugsnag') {\n // Load Bugsnag client SDK\n BugsnagLib.load();\n BugsnagLib.init(response.source.id);\n }\n }\n\n // determine the dataPlaneUrl\n this.serverUrl = resolveDataPlaneUrl(response, this.serverUrl, this.options);\n\n // Initialize event repository\n this.eventRepository.initialize(this.writeKey, this.serverUrl, this.options);\n this.loaded = true;\n // Execute any pending buffered requests\n // (needed if the load call was not previously buffered)\n processDataInAnalyticsArray(this);\n\n response.source.destinations.forEach(function (destination) {\n // logger.debug(\n // `Destination ${index} Enabled? ${destination.enabled} Type: ${destination.destinationDefinition.name} Use Native SDK? true`\n // );\n if (destination.enabled) {\n this.clientIntegrations.push({\n name: destination.destinationDefinition.name,\n config: destination.config,\n });\n }\n }, this);\n\n // intersection of config-plane native sdk destinations with sdk load time destination list\n this.clientIntegrations = findAllEnabledDestinations(\n this.loadOnlyIntegrations,\n this.clientIntegrations,\n );\n // Check if cookie consent manager is being set through load options\n if (Object.keys(this.cookieConsentOptions).length > 0) {\n // Call the cookie consent factory to initialise and return the type of cookie\n // consent being set. For now we only support OneTrust.\n try {\n const cookieConsent = CookieConsentFactory.initialize(this.cookieConsentOptions);\n // If cookie consent object is return we filter according to consents given by user\n // else we do not consider any filtering for cookie consent.\n this.clientIntegrations = this.clientIntegrations.filter(\n (intg) =>\n !cookieConsent || // check if cookieconsent object is present and then do filtering\n (cookieConsent && cookieConsent.isEnabled(intg.config)),\n );\n } catch (e) {\n handleError(e);\n }\n }\n\n let suffix = ''; // default suffix\n\n // Get the CDN base URL is rudder staging url\n const { isStaging } = getSDKUrlInfo();\n if (isStaging) {\n suffix = '-staging'; // stagging suffix\n }\n\n leaveBreadcrumb('Starting device-mode initialization');\n // logger.debug(\"this.clientIntegrations: \", this.clientIntegrations)\n // Load all the client integrations dynamically\n this.clientIntegrations.forEach((intg) => {\n const modName = configToIntNames[intg.name]; // script URL can be constructed from this\n const pluginName = `${modName}${INTG_SUFFIX}`; // this is the name of the object loaded on the window\n const modURL = `${this.destSDKBaseURL}/${modName}${suffix}.min.js`;\n\n if (!window.hasOwnProperty(pluginName)) {\n ScriptLoader(pluginName, modURL, { isNonNativeSDK: true });\n }\n\n const self = this;\n const interval = setInterval(() => {\n if (self.integrationSDKLoaded(pluginName, modName)) {\n const intMod = window[pluginName];\n clearInterval(interval);\n\n // logger.debug(pluginName, \" dynamically loaded integration SDK\");\n\n let intgInstance;\n try {\n const msg = `[Analytics] processResponse :: trying to initialize integration name:: ${pluginName}`;\n // logger.debug(msg);\n leaveBreadcrumb(msg);\n intgInstance = new intMod[modName](intg.config, self);\n intgInstance.init();\n\n // logger.debug(pluginName, \" initializing destination\");\n\n self.isInitialized(intgInstance).then(() => {\n // logger.debug(pluginName, \" module init sequence complete\");\n self.dynamicallyLoadedIntegrations[pluginName] = intMod[modName];\n });\n } catch (e) {\n const message = `[Analytics] 'integration.init()' failed :: ${pluginName} :: ${e.message}`;\n handleError(e, message);\n self.failedToBeLoadedIntegration.push(intgInstance);\n }\n }\n }, 100);\n\n setTimeout(() => {\n clearInterval(interval);\n }, MAX_WAIT_FOR_INTEGRATION_LOAD);\n });\n\n const self = this;\n this.allModulesInitialized().then(() => {\n if (!self.clientIntegrations || self.clientIntegrations.length === 0) {\n // If no integrations are there to be loaded\n // set clientIntegrationsReady to be true\n this.clientIntegrationsReady = true;\n // Execute the callbacks if any\n this.executeReadyCallback();\n this.toBeProcessedByIntegrationArray = [];\n return;\n }\n\n self.replayEvents(self);\n });\n } catch (error) {\n handleError(error);\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n replayEvents(object) {\n // logger.debug(\n // \"===replay events called====\",\n // \" successfully loaded count: \",\n // object.successfullyLoadedIntegration.length,\n // \" failed loaded count: \",\n // object.failedToBeLoadedIntegration.length\n // );\n leaveBreadcrumb(`Started replaying buffered events`);\n // eslint-disable-next-line no-param-reassign\n object.clientIntegrationObjects = [];\n // eslint-disable-next-line no-param-reassign\n object.clientIntegrationObjects = object.successfullyLoadedIntegration;\n\n // logger.debug(\n // \"==registering after callback===\",\n // \" after to be called after count : \",\n // object.clientIntegrationObjects.length\n // );\n\n if (object.clientIntegrationObjects.every((intg) => !intg.isReady || intg.isReady())) {\n // Integrations are ready\n // set clientIntegrationsReady to be true\n this.integrationsData = constructMessageIntegrationsObj(\n this.integrationsData,\n object.clientIntegrationObjects,\n );\n object.clientIntegrationsReady = true;\n // Execute the callbacks if any\n object.executeReadyCallback();\n }\n\n // send the queued events to the fetched integration\n object.toBeProcessedByIntegrationArray.forEach((event) => {\n const methodName = event[0];\n event.shift();\n\n // convert common names to sdk identified name\n if (Object.keys(event[0].message.integrations).length > 0) {\n transformToRudderNames(event[0].message.integrations);\n }\n\n // if not specified at event level, All: true is default\n const clientSuppliedIntegrations = event[0].message.integrations;\n\n // get intersection between config plane native enabled destinations\n // (which were able to successfully load on the page) vs user supplied integrations\n const successfulLoadedIntersectClientSuppliedIntegrations = findAllEnabledDestinations(\n clientSuppliedIntegrations,\n object.clientIntegrationObjects,\n );\n\n // send to all integrations now from the 'toBeProcessedByIntegrationArray' replay queue\n for (const successfulLoadedIntersectClientSuppliedIntegration of successfulLoadedIntersectClientSuppliedIntegrations) {\n try {\n if (\n (!successfulLoadedIntersectClientSuppliedIntegration.isFailed ||\n !successfulLoadedIntersectClientSuppliedIntegration.isFailed()) &&\n successfulLoadedIntersectClientSuppliedIntegration[methodName]\n ) {\n const sendEvent = !object.IsEventBlackListed(\n event[0].message.event,\n successfulLoadedIntersectClientSuppliedIntegration.name,\n );\n\n // Block the event if it is blacklisted for the device-mode destination\n if (sendEvent) {\n const clonedBufferEvent = R.clone(event);\n successfulLoadedIntersectClientSuppliedIntegration[methodName](...clonedBufferEvent);\n }\n }\n } catch (error) {\n handleError(error);\n }\n }\n });\n object.toBeProcessedByIntegrationArray = [];\n }\n\n pause(time) {\n return new Promise((resolve) => {\n setTimeout(resolve, time);\n });\n }\n\n isInitialized(instance, time = 0) {\n return new Promise((resolve) => {\n if (instance.isLoaded()) {\n // logger.debug(\"===integration loaded successfully====\", instance.name)\n this.successfullyLoadedIntegration.push(instance);\n resolve(this);\n } else if (time >= MAX_WAIT_FOR_INTEGRATION_LOAD) {\n // logger.debug(\"====max wait over====\")\n this.failedToBeLoadedIntegration.push(instance);\n resolve(this);\n } else {\n this.pause(INTEGRATION_LOAD_CHECK_INTERVAL).then(() =>\n // logger.debug(\"====after pause, again checking====\")\n this.isInitialized(instance, time + INTEGRATION_LOAD_CHECK_INTERVAL).then(resolve),\n );\n }\n });\n }\n\n /**\n * Process page params and forward to page call\n *\n * @param {*} category\n * @param {*} name\n * @param {*} properties\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n page(category, name, properties, options, callback) {\n leaveBreadcrumb(`Page event`);\n if (!this.loaded) {\n this.toBeProcessedArray.push(['page', ...arguments]);\n return;\n }\n if (typeof options === 'function') (callback = options), (options = null);\n if (typeof properties === 'function') (callback = properties), (options = properties = null);\n if (typeof name === 'function') (callback = name), (options = properties = name = null);\n if (typeof category === 'function')\n (callback = category), (options = properties = name = category = null);\n if (typeof category === 'object' && category != null && category != undefined)\n (options = name), (properties = category), (name = category = null);\n if (typeof name === 'object' && name != null && name != undefined)\n (options = properties), (properties = name), (name = null);\n if (typeof category === 'string' && typeof name !== 'string')\n (name = category), (category = null);\n if (this.sendAdblockPage && category != 'RudderJS-Initiated') {\n this.sendSampleRequest();\n }\n\n const rudderElement = new RudderElementBuilder().setType('page').build();\n if (!properties) {\n properties = {};\n }\n if (name) {\n rudderElement.message.name = properties.name = name;\n }\n if (category) {\n rudderElement.message.category = properties.category = category;\n }\n rudderElement.message.properties = this.getPageProperties(properties);\n\n this.processAndSendDataToDestinations('page', rudderElement, options, callback);\n }\n\n /**\n * Process track params and forward to track call\n *\n * @param {*} event\n * @param {*} properties\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n track(event, properties, options, callback) {\n leaveBreadcrumb(`Track event`);\n if (!this.loaded) {\n this.toBeProcessedArray.push(['track', ...arguments]);\n return;\n }\n if (typeof options === 'function') (callback = options), (options = null);\n if (typeof properties === 'function')\n (callback = properties), (options = null), (properties = null);\n\n const rudderElement = new RudderElementBuilder().setType('track').build();\n if (event) {\n rudderElement.setEventName(event);\n }\n rudderElement.setProperty(properties || {});\n\n this.processAndSendDataToDestinations('track', rudderElement, options, callback);\n }\n\n /**\n * Process identify params and forward to identify call\n *\n * @param {*} userId\n * @param {*} traits\n * @param {*} options\n * @param {*} callback\n * @memberof Analytics\n */\n identify(userId, traits, options, callback) {\n leaveBreadcrumb(`Identify event`);\n if (!this.loaded) {\n this.toBeProcessedArray.push(['identify', ...arguments]);\n return;\n }\n if (typeof options === 'function') (callback = options), (options = null);\n if (typeof traits === 'function') (callback = traits), (options = null), (traits = null);\n if (typeof userId === 'object') (options = traits), (traits = userId), (userId = this.userId);\n\n if (userId && this.userId && userId !== this.userId) {\n this.reset();\n }\n this.userId = getStringId(userId);\n this.storage.setUserId(this.userId);\n\n if (traits) {\n for (const key in traits) {\n this.userTraits[key] = traits[key];\n }\n this.storage.setUserTraits(this.userTraits);\n }\n const rudderElement = new RudderElementBuilder().setType('identify').build();\n\n this.processAndSendDataToDestinations('identify', rudderElement, options, callback);\n }\n\n /**\n *\n * @param {*} to\n * @param {*} from\n * @param {*} options\n * @param {*} callback\n */\n alias(to, from, options, callback) {\n leaveBreadcrumb(`Alias event`);\n if (!this.loaded) {\n this.toBeProcessedArray.push(['alias', ...arguments]);\n return;\n }\n if (typeof options === 'function') (callback = options), (options = null);\n if (typeof from === 'function') (callback = from), (options = null), (from = null);\n if (typeof to === 'function') (callback = to), (options = null), (from = null), (to = null);\n if (typeof from === 'object') (options = from), (from = null);\n if (typeof to === 'object') (options = to), (from = null), (to = null);\n\n const rudderElement = new RudderElementBuilder().setType('alias').build();\n\n rudderElement.message.previousId =\n getStringId(from) || (this.userId ? this.userId : this.getAnonymousId());\n rudderElement.message.userId = getStringId(to);\n\n this.processAndSendDataToDestinations('alias', rudderElement, options, callback);\n }\n\n /**\n *\n * @param {*} to\n * @param {*} from\n * @param {*} options\n * @param {*} callback\n */\n group(groupId, traits, options, callback) {\n leaveBreadcrumb(`Group event`);\n if (!this.loaded) {\n this.toBeProcessedArray.push(['group', ...arguments]);\n return;\n }\n if (arguments.length === 0) return;\n\n if (typeof options === 'function') (callback = options), (options = null);\n if (typeof traits === 'function') (callback = traits), (options = null), (traits = null);\n if (typeof groupId === 'object')\n (options = traits), (traits = groupId), (groupId = this.groupId);\n if (typeof groupId === 'function')\n (callback = groupId), (options = null), (traits = null), (groupId = this.groupId);\n\n this.groupId = getStringId(groupId);\n this.storage.setGroupId(this.groupId);\n\n const rudderElement = new RudderElementBuilder().setType('group').build();\n if (traits) {\n for (const key in traits) {\n this.groupTraits[key] = traits[key];\n }\n } else {\n this.groupTraits = {};\n }\n this.storage.setGroupTraits(this.groupTraits);\n\n this.processAndSendDataToDestinations('group', rudderElement, options, callback);\n }\n\n IsEventBlackListed(eventName, intgName) {\n if (!eventName || !(typeof eventName === 'string')) {\n return false;\n }\n const sdkIntgName = commonNames[intgName];\n const intg = this.clientIntegrations.find(\n (clientIntegration) => clientIntegration.name === sdkIntgName,\n );\n\n const { blacklistedEvents, whitelistedEvents, eventFilteringOption } = intg.config;\n\n if (!eventFilteringOption) {\n return false;\n }\n\n const formattedEventName = eventName.trim().toUpperCase();\n switch (eventFilteringOption) {\n // disabled filtering\n case 'disable':\n return false;\n // Blacklist is chosen for filtering events\n case 'blacklistedEvents':\n if (Array.isArray(blacklistedEvents)) {\n return blacklistedEvents.some(\n (eventObj) => eventObj.eventName.trim().toUpperCase() === formattedEventName,\n );\n }\n return false;\n\n // Whitelist is chosen for filtering events\n case 'whitelistedEvents':\n if (Array.isArray(whitelistedEvents)) {\n return !whitelistedEvents.some(\n (eventObj) => eventObj.eventName.trim().toUpperCase() === formattedEventName,\n );\n }\n return true;\n\n default:\n return false;\n }\n }\n\n /**\n * Process and send data to destinations along with rudder BE\n *\n * @param {*} type\n * @param {*} rudderElement\n * @param {*} callback\n * @memberof Analytics\n */\n processAndSendDataToDestinations(type, rudderElement, options, callback) {\n try {\n if (!this.anonymousId) {\n this.setAnonymousId();\n }\n\n // assign page properties to context\n // rudderElement.message.context.page = getDefaultPageProperties();\n leaveBreadcrumb('Started sending data to destinations');\n rudderElement.message.context.traits = {\n ...this.userTraits,\n };\n\n // logger.debug(\"anonymousId: \", this.anonymousId)\n rudderElement.message.anonymousId = this.anonymousId;\n rudderElement.message.userId = rudderElement.message.userId\n ? rudderElement.message.userId\n : this.userId;\n\n if (type == 'group') {\n if (this.groupId) {\n rudderElement.message.groupId = this.groupId;\n }\n if (this.groupTraits) {\n rudderElement.message.traits = {\n ...this.groupTraits,\n };\n }\n }\n // If auto/manual session tracking is enabled sessionId will be sent in the context\n try {\n const { sessionId, sessionStart } = this.uSession.getSessionInfo();\n rudderElement.message.context.sessionId = sessionId;\n if (sessionStart) rudderElement.message.context.sessionStart = true;\n } catch (e) {\n handleError(e);\n }\n\n this.processOptionsParam(rudderElement, options);\n // logger.debug(JSON.stringify(rudderElement))\n\n // check for reserved keys and log\n checkReservedKeywords(rudderElement.message, type);\n\n // if not specified at event level, All: true is default\n const clientSuppliedIntegrations = rudderElement.message.integrations || { All: true };\n\n // structure user supplied integrations object to rudder format\n transformToRudderNames(clientSuppliedIntegrations);\n rudderElement.message.integrations = clientSuppliedIntegrations;\n\n // config plane native enabled destinations, still not completely loaded\n // in the page, add the events to a queue and process later\n if (!this.clientIntegrationObjects) {\n // logger.debug(\"pushing in replay queue\")\n // new event processing after analytics initialized but integrations not fetched from BE\n this.toBeProcessedByIntegrationArray.push([type, rudderElement]);\n } else {\n // get intersection between config plane native enabled destinations\n // (which were able to successfully load on the page) vs user supplied integrations\n const successfulLoadedIntersectClientSuppliedIntegrations = findAllEnabledDestinations(\n clientSuppliedIntegrations,\n this.clientIntegrationObjects,\n );\n\n // try to first send to all integrations, if list populated from BE\n successfulLoadedIntersectClientSuppliedIntegrations.forEach((obj) => {\n try {\n if ((!obj.isFailed || !obj.isFailed()) && obj[type]) {\n const sendEvent = !this.IsEventBlackListed(rudderElement.message.event, obj.name);\n\n // Block the event if it is blacklisted for the device-mode destination\n if (sendEvent) {\n const clonedRudderElement = R.clone(rudderElement);\n obj[type](clonedRudderElement);\n }\n }\n } catch (err) {\n const message = `[sendToNative]:: [Destination: ${obj.name}]:: `;\n handleError(err, message);\n }\n });\n }\n\n // convert integrations object to server identified names, kind of hack now!\n transformToServerNames(rudderElement.message.integrations);\n rudderElement.message.integrations = getMergedClientSuppliedIntegrations(\n this.integrationsData,\n clientSuppliedIntegrations,\n );\n\n // self analytics process, send to rudder\n this.eventRepository.enqueue(rudderElement, type);\n\n // logger.debug(`${type} is called `)\n if (callback) {\n callback(rudderElement);\n }\n } catch (error) {\n handleError(error);\n }\n }\n\n utm(query) {\n // Remove leading ? if present\n if (query.charAt(0) === '?') {\n query = query.substring(1);\n }\n\n query = query.replace(/\\?/g, '&');\n\n let param;\n const params = parse(query);\n const results = {};\n\n for (const key in params) {\n if (Object.prototype.hasOwnProperty.call(params, key) && key.substr(0, 4) === 'utm_') {\n param = key.substr(4);\n if (param === 'campaign') param = 'name';\n results[param] = params[key];\n }\n }\n\n return results;\n }\n\n /**\n * add campaign parsed details under context\n * @param {*} rudderElement\n */\n addCampaignInfo(rudderElement) {\n const msgContext = rudderElement.message.context;\n if (msgContext && typeof msgContext === 'object') {\n const { search } = getDefaultPageProperties();\n rudderElement.message.context.campaign = this.utm(search);\n }\n }\n\n /**\n * process options parameter\n * Apart from top level keys merge everything under context\n * context.page's default properties are overridden by same keys of\n * provided properties in case of page call\n *\n * @param {*} rudderElement\n * @param {*} options\n * @memberof Analytics\n */\n processOptionsParam(rudderElement, options) {\n const { type, properties } = rudderElement.message;\n\n this.addCampaignInfo(rudderElement);\n\n // assign page properties to context.page\n // eslint-disable-next-line unicorn/consistent-destructuring\n rudderElement.message.context.page = this.getContextPageProperties(\n type === 'page' ? properties : undefined,\n );\n mergeTopLevelElementsMutator(rudderElement.message, options);\n rudderElement.message.context = mergeContext(rudderElement.message, options);\n }\n\n getPageProperties(properties, options) {\n const defaultPageProperties = getDefaultPageProperties();\n const optionPageProperties = (options && options.page) || {};\n for (const key in defaultPageProperties) {\n if (properties[key] === undefined) {\n properties[key] = optionPageProperties[key] || defaultPageProperties[key];\n }\n }\n return properties;\n }\n\n // Assign page properties to context.page if the same property is not provided under context.page\n getContextPageProperties(properties) {\n const defaultPageProperties = getDefaultPageProperties();\n const contextPageProperties = {};\n for (const key in defaultPageProperties) {\n contextPageProperties[key] =\n properties && properties[key] ? properties[key] : defaultPageProperties[key];\n }\n return contextPageProperties;\n }\n\n /**\n * Clear user information\n *\n * @memberof Analytics\n */\n reset(flag) {\n leaveBreadcrumb(`reset API :: flag: ${flag}`);\n\n if (!this.loaded) {\n this.toBeProcessedArray.push(['reset', flag]);\n return;\n }\n if (flag) {\n this.anonymousId = '';\n }\n this.userId = '';\n this.userTraits = {};\n this.groupId = '';\n this.groupTraits = {};\n this.uSession.reset();\n this.storage.clear(flag);\n }\n\n getAnonymousId(anonymousIdOptions) {\n // if (!this.loaded) return;\n this.anonymousId = this.storage.getAnonymousId(anonymousIdOptions);\n if (!this.anonymousId) {\n this.setAnonymousId();\n }\n return this.anonymousId;\n }\n\n getUserId() {\n return this.userId;\n }\n\n getSessionId() {\n return this.uSession.getSessionId();\n }\n\n getUserTraits() {\n return this.userTraits;\n }\n\n getGroupId() {\n return this.groupId;\n }\n\n getGroupTraits() {\n return this.groupTraits;\n }\n\n /**\n * Sets anonymous id in the following precedence:\n * 1. anonymousId: Id directly provided to the function.\n * 2. rudderAmpLinkerParm: value generated from linker query parm (rudderstack)\n * using praseLinker util.\n * 3. generateUUID: A new unique id is generated and assigned.\n *\n * @param {string} anonymousId\n * @param {string} rudderAmpLinkerParm\n */\n setAnonymousId(anonymousId, rudderAmpLinkerParm) {\n // if (!this.loaded) return;\n const parsedAnonymousIdObj = rudderAmpLinkerParm ? parseLinker(rudderAmpLinkerParm) : null;\n const parsedAnonymousId = parsedAnonymousIdObj ? parsedAnonymousIdObj.rs_amp_id : null;\n this.anonymousId = anonymousId || parsedAnonymousId || generateUUID();\n this.storage.setAnonymousId(this.anonymousId);\n }\n\n isValidWriteKey(writeKey) {\n return writeKey && typeof writeKey === 'string' && writeKey.trim().length > 0;\n }\n\n isValidServerUrl(serverUrl) {\n return serverUrl && typeof serverUrl === 'string' && serverUrl.trim().length > 0;\n }\n\n isDatasetAvailable() {\n const t = document.createElement('div');\n return t.setAttribute('data-a-b', 'c'), t.dataset ? t.dataset.aB === 'c' : false;\n }\n\n /**\n * Load after polyfills are loaded\n * @param {*} writeKey\n * @param {*} serverUrl\n * @param {*} options\n * @returns\n */\n loadAfterPolyfill(writeKey, serverUrl, options) {\n if (typeof serverUrl === 'object' && serverUrl !== null) {\n options = serverUrl;\n serverUrl = null;\n }\n if (options && options.logLevel) {\n this.logLevel = options.logLevel;\n logger.setLogLevel(options.logLevel);\n }\n if (!this.isValidWriteKey(writeKey)) {\n throw Error('Unable to load the SDK due to invalid writeKey');\n }\n if (!this.storage || Object.keys(this.storage).length === 0) {\n throw Error('Cannot proceed as no storage is available');\n }\n if (options && options.cookieConsentManager)\n this.cookieConsentOptions = R.clone(options.cookieConsentManager);\n\n this.writeKey = writeKey;\n this.serverUrl = serverUrl;\n this.options = options;\n\n let storageOptions = {};\n\n if (options && options.setCookieDomain) {\n storageOptions = { ...storageOptions, domain: options.setCookieDomain };\n }\n\n if (options && typeof options.secureCookie === 'boolean') {\n storageOptions = { ...storageOptions, secure: options.secureCookie };\n }\n\n if (options && SAMESITE_COOKIE_OPTS.includes(options.sameSiteCookie)) {\n storageOptions = { ...storageOptions, samesite: options.sameSiteCookie };\n }\n this.storage.options(storageOptions);\n\n if (options && options.integrations) {\n Object.assign(this.loadOnlyIntegrations, options.integrations);\n transformToRudderNames(this.loadOnlyIntegrations);\n }\n\n if (options && options.sendAdblockPage) {\n this.sendAdblockPage = true;\n }\n if (\n options &&\n options.sendAdblockPageOptions &&\n typeof options.sendAdblockPageOptions === 'object'\n ) {\n this.sendAdblockPageOptions = options.sendAdblockPageOptions;\n }\n // Session initialization\n this.uSession.initialize(options);\n\n if (options && options.clientSuppliedCallbacks) {\n // convert to rudder recognized method names\n const transformedCallbackMapping = {};\n Object.keys(this.methodToCallbackMapping).forEach((methodName) => {\n if (\n this.methodToCallbackMapping.hasOwnProperty(methodName) &&\n options.clientSuppliedCallbacks[this.methodToCallbackMapping[methodName]]\n ) {\n transformedCallbackMapping[methodName] =\n options.clientSuppliedCallbacks[this.methodToCallbackMapping[methodName]];\n }\n });\n Object.assign(this.clientSuppliedCallbacks, transformedCallbackMapping);\n this.registerCallbacks(true);\n }\n\n if (options && options.loadIntegration != undefined) {\n this.loadIntegration = !!options.loadIntegration;\n }\n\n if (options && options.lockIntegrationsVersion !== undefined) {\n this.lockIntegrationsVersion = options.lockIntegrationsVersion === true;\n }\n\n this.eventRepository.initialize(writeKey, serverUrl, options);\n this.initializeUser(options ? options.anonymousIdOptions : undefined);\n this.setInitialPageProperties();\n\n this.destSDKBaseURL = getIntegrationsCDNPath(\n this.version,\n this.lockIntegrationsVersion,\n options && options.destSDKBaseURL,\n );\n\n if (options && options.getSourceConfig) {\n if (typeof options.getSourceConfig !== 'function') {\n handleError(new Error('option \"getSourceConfig\" must be a function'));\n } else {\n const res = options.getSourceConfig();\n\n if (res instanceof Promise) {\n res.then((pRes) => this.processResponse(200, pRes)).catch(handleError);\n } else {\n this.processResponse(200, res);\n }\n }\n return;\n }\n\n let configUrl = getConfigUrl(writeKey);\n if (options && options.configUrl) {\n configUrl = getUserProvidedConfigUrl(options.configUrl, configUrl);\n }\n\n try {\n getJSONTrimmed(this, configUrl, writeKey, this.processResponse);\n } catch (error) {\n handleError(error);\n }\n }\n\n /**\n * Call control pane to get client configs\n *\n * @param {*} writeKey\n * @memberof Analytics\n */\n load(writeKey, serverUrl, options) {\n // logger.debug(\"inside load \");\n if (this.loaded) return;\n\n // check if the below features are available in the browser or not\n // If not present dynamically load from the polyfill cdn, unless\n // the options are configured not to.\n const polyfillIfRequired =\n options && typeof options.polyfillIfRequired === 'boolean'\n ? options.polyfillIfRequired\n : true;\n if (\n polyfillIfRequired &&\n (!String.prototype.endsWith ||\n !String.prototype.startsWith ||\n !String.prototype.includes ||\n !Array.prototype.find ||\n !Array.prototype.includes ||\n !Promise ||\n !Object.entries ||\n !Object.values ||\n !String.prototype.replaceAll ||\n !this.isDatasetAvailable())\n ) {\n const id = 'polyfill';\n ScriptLoader(id, POLYFILL_URL, { skipDatasetAttributes: true });\n const self = this;\n const interval = setInterval(() => {\n // check if the polyfill is loaded\n // In chrome 83 and below versions ID of a script is not part of window's scope\n // even though it is loaded and returns false for this.\n // So, added another checking to fulfill that purpose.\n if (window.hasOwnProperty(id) || document.getElementById(id) !== null) {\n clearInterval(interval);\n self.loadAfterPolyfill(writeKey, serverUrl, options);\n }\n }, 100);\n\n setTimeout(() => {\n clearInterval(interval);\n }, MAX_WAIT_FOR_INTEGRATION_LOAD);\n } else {\n this.loadAfterPolyfill(writeKey, serverUrl, options);\n }\n }\n\n ready(callback) {\n if (!this.loaded) {\n this.toBeProcessedArray.push(['ready', callback]);\n return;\n }\n if (typeof callback === 'function') {\n /**\n * If integrations are loaded or no integration is available for loading\n * execute the callback immediately\n * else push the callbacks to a queue that will be executed after loading completes\n */\n if (this.clientIntegrationsReady) {\n callback();\n } else {\n this.readyCallbacks.push(callback);\n }\n return;\n }\n logger.error('ready callback is not a function');\n }\n\n initializeCallbacks() {\n Object.keys(this.methodToCallbackMapping).forEach((methodName) => {\n if (this.methodToCallbackMapping.hasOwnProperty(methodName)) {\n this.on(methodName, () => {});\n }\n });\n }\n\n registerCallbacks(calledFromLoad) {\n if (!calledFromLoad) {\n Object.keys(this.methodToCallbackMapping).forEach((methodName) => {\n if (\n this.methodToCallbackMapping.hasOwnProperty(methodName) &&\n window.rudderanalytics &&\n typeof window.rudderanalytics[this.methodToCallbackMapping[methodName]] === 'function'\n ) {\n this.clientSuppliedCallbacks[methodName] =\n window.rudderanalytics[this.methodToCallbackMapping[methodName]];\n }\n // let callback =\n // ? typeof window.rudderanalytics[\n // this.methodToCallbackMapping[methodName]\n // ] == \"function\"\n // ? window.rudderanalytics[this.methodToCallbackMapping[methodName]]\n // : () => {}\n // : () => {};\n\n // logger.debug(\"registerCallbacks\", methodName, callback);\n\n // this.on(methodName, callback);\n });\n }\n\n Object.keys(this.clientSuppliedCallbacks).forEach((methodName) => {\n if (this.clientSuppliedCallbacks.hasOwnProperty(methodName)) {\n // logger.debug(\n // \"registerCallbacks\",\n // methodName,\n // this.clientSuppliedCallbacks[methodName]\n // );\n this.on(methodName, this.clientSuppliedCallbacks[methodName]);\n }\n });\n }\n\n sendSampleRequest() {\n ScriptLoader('ad-block', '//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js');\n }\n\n /**\n * A public method to start a session\n * @param {string} sessionId session identifier\n * @returns\n */\n startSession(sessionId) {\n this.uSession.start(sessionId);\n }\n\n /**\n * A public method to end an ongoing session.\n */\n endSession() {\n this.uSession.end();\n }\n}\n\nconst instance = new Analytics();\n\nfunction processDataInAnalyticsArray(analytics) {\n if (analytics.toBeProcessedArray.length > 0) {\n while (analytics.toBeProcessedArray.length > 0) {\n const event = [...analytics.toBeProcessedArray[0]];\n\n // remove the element from the queue\n analytics.toBeProcessedArray.shift();\n\n const method = event[0];\n event.shift();\n // logger.debug(\"=====from analytics array, calling method:: \", method)\n analytics[method](...event);\n }\n }\n}\n\n/**\n * parse the given query string into usable Rudder object\n * @param {*} query\n */\nfunction parseQueryString(query) {\n const queryDefaults = {\n trait: 'ajs_trait_',\n prop: 'ajs_prop_',\n };\n\n function getDataFromQueryObj(qObj, dataType) {\n const data = {};\n Object.keys(qObj).forEach((key) => {\n if (key.startsWith(dataType)) {\n data[key.substr(dataType.length)] = qObj[key];\n }\n });\n return data;\n }\n\n const queryObject = parse(query);\n if (queryObject.ajs_aid) {\n instance.toBeProcessedArray.push(['setAnonymousId', queryObject.ajs_aid]);\n }\n\n if (queryObject.ajs_uid) {\n instance.toBeProcessedArray.push([\n 'identify',\n queryObject.ajs_uid,\n getDataFromQueryObj(queryObject, queryDefaults.trait),\n ]);\n }\n\n if (queryObject.ajs_event) {\n instance.toBeProcessedArray.push([\n 'track',\n queryObject.ajs_event,\n getDataFromQueryObj(queryObject, queryDefaults.prop),\n ]);\n }\n}\n\nEmitter(instance);\n\nwindow.addEventListener(\n 'error',\n (e) => {\n handleError(e, undefined, instance);\n },\n true,\n);\n\n// initialize supported callbacks\ninstance.initializeCallbacks();\n\n// register supported callbacks\ninstance.registerCallbacks(false);\n\nconst defaultMethod = 'load';\nconst argumentsArray = window.rudderanalytics;\nconst isValidArgsArray = Array.isArray(argumentsArray);\nlet defaultEvent;\nif (isValidArgsArray) {\n /**\n * Iterate the buffered API calls until we find load call and\n * queue it first for processing\n */\n let i = 0;\n while (i < argumentsArray.length) {\n if (argumentsArray[i] && argumentsArray[i][0] === defaultMethod) {\n defaultEvent = argumentsArray[i];\n argumentsArray.splice(i, 1);\n break;\n }\n i += 1;\n }\n}\n\n// parse querystring of the page url to send events\nparseQueryString(window.location.search);\n\nif (isValidArgsArray) argumentsArray.forEach((x) => instance.toBeProcessedArray.push(x));\n\n// Process load method if present in the buffered requests\nif (defaultEvent && defaultEvent.length > 0) {\n defaultEvent.shift();\n instance[defaultMethod](...defaultEvent);\n}\n\nconst ready = instance.ready.bind(instance);\nconst identify = instance.identify.bind(instance);\nconst page = instance.page.bind(instance);\nconst track = instance.track.bind(instance);\nconst alias = instance.alias.bind(instance);\nconst group = instance.group.bind(instance);\nconst reset = instance.reset.bind(instance);\nconst load = instance.load.bind(instance);\nconst initialized = (instance.initialized = true);\nconst getUserId = instance.getUserId.bind(instance);\nconst getSessionId = instance.getSessionId.bind(instance);\nconst getUserTraits = instance.getUserTraits.bind(instance);\nconst getAnonymousId = instance.getAnonymousId.bind(instance);\nconst setAnonymousId = instance.setAnonymousId.bind(instance);\nconst getGroupId = instance.getGroupId.bind(instance);\nconst getGroupTraits = instance.getGroupTraits.bind(instance);\nconst startSession = instance.startSession.bind(instance);\nconst endSession = instance.endSession.bind(instance);\n\nexport {\n initialized,\n ready,\n page,\n track,\n load,\n identify,\n reset,\n alias,\n group,\n getUserId,\n getSessionId,\n getUserTraits,\n getAnonymousId,\n setAnonymousId,\n getGroupId,\n getGroupTraits,\n startSession,\n endSession,\n};\n","import * as R from 'ramda';\nimport logger from \"./logUtil\";\nimport {mergeDeepRight} from \"./ObjectUtils\";\n\n/**\n * Prepares the data for integrationsObj\n *\n * @param {*} integrationsData\n * @param {*} integrationInstances\n *\n */\nconst constructMessageIntegrationsObj = (integrationsData, integrationInstances) => {\n let enhancedIntegrationsData = R.clone(integrationsData);\n\n integrationInstances.forEach((integrationInstance) => {\n if (integrationInstance.getDataForIntegrationsObject) {\n try {\n enhancedIntegrationsData = mergeDeepRight(\n enhancedIntegrationsData,\n integrationInstance.getDataForIntegrationsObject()\n );\n } catch (error) {\n logger.debug('[Analytics: prepareDataForIntegrationsObj]', error);\n }\n }\n });\n\n return enhancedIntegrationsData;\n};\n\n/**\n * Prepares the data for integrationsObj\n *\n * @param {*} integrationsData\n * @param {*} clientSuppliedIntegrations\n *\n */\nconst getMergedClientSuppliedIntegrations = (integrationsData, clientSuppliedIntegrations) => {\n const clonedIntegrationsData = R.clone(integrationsData);\n\n // Filtering the integrations which are not a part of integrationsData object or value set to false\n const activeClientSuppliedIntegrations = Object.keys(clientSuppliedIntegrations)\n .filter((integration) => !(\n clientSuppliedIntegrations[integration] === true && clonedIntegrationsData[integration]\n ))\n .reduce((obj, key) => {\n // eslint-disable-next-line no-param-reassign\n obj[key] = clientSuppliedIntegrations[key];\n return obj;\n }, {});\n\n return mergeDeepRight(\n clonedIntegrationsData,\n activeClientSuppliedIntegrations,\n );\n};\n\nexport {\n constructMessageIntegrationsObj,\n getMergedClientSuppliedIntegrations\n}","import { getSDKUrlInfo, removeTrailingSlashes } from './utils';\nimport { handleError } from './errorHandler';\nimport { CDN_ARCH_VERSION_DIR, CDN_INT_DIR, DEST_SDK_BASE_URL } from './constants';\n\nconst getIntegrationsCDNPath = (\n currentVersion,\n lockIntegrationsVersion,\n customIntegrationsCDNPath,\n) => {\n let integrationsCDNPath = '';\n\n // Get the CDN base URL from the user provided URL if any\n if (customIntegrationsCDNPath) {\n integrationsCDNPath = removeTrailingSlashes(customIntegrationsCDNPath);\n\n // TODO: add proper url validation\n if (!integrationsCDNPath) {\n const errorMsg = 'CDN base URL for integrations is not valid';\n\n handleError({\n message: `[Analytics] load:: ${errorMsg}`,\n });\n throw Error(`Failed to load Rudder SDK: ${errorMsg}`);\n }\n\n return integrationsCDNPath;\n }\n\n // Get the base path from the SDK script tag src attribute or use the default path\n const { sdkURL } = getSDKUrlInfo();\n integrationsCDNPath = sdkURL\n ? sdkURL.split('/').slice(0, -1).concat(CDN_INT_DIR).join('/')\n : DEST_SDK_BASE_URL;\n\n // If version is not locked it will always get the latest version of the integrations\n if (lockIntegrationsVersion) {\n integrationsCDNPath = integrationsCDNPath.replace(CDN_ARCH_VERSION_DIR, currentVersion);\n }\n\n return integrationsCDNPath;\n};\n\nexport { getIntegrationsCDNPath };\n"],"names":["Emitter","obj","key","prototype","module","exports","on","addEventListener","event","fn","this","_callbacks","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","length","cb","callbacks","i","splice","emit","args","Array","len","slice","listeners","hasListeners","str","trim","right","left","trimLeft","replace","trimRight","whitespace_pattern","test","charAt","require$$0","pattern","decode","decodeURIComponent","e","split","pairs","m","parts","exec","a","_typeof","_curry1","f1","_isPlaceholder","_curry2","f2","b","_b","_a","_curry3","f3","c","_c","prop","Object","hasOwnProperty","call","val","undefined","toString","_clone","value","refFrom","refTo","deep","copy","copiedValue","idx","type","create","getPrototypeOf","Date","valueOf","RegExp","source","global","ignoreCase","multiline","sticky","unicode","clone","_isObject","x","mergeWithKey","l","r","k","result","_has","mergeDeepWithKey","lObj","rObj","lVal","rVal","mergeDeepWith$1","port","protocol","location","parse","url","document","createElement","href","host","hash","hostname","pathname","search","query","isAbsolute","indexOf","isRelative","isCrossDomain","window","isArray","getValue","target","path","options","isObject","default","isValidObject","String","isString","splitChar","separator","joinChar","isValid","segs","join","hasProp","n","BUFFER","HEX","IDX","substring","v4","crypto","getRandomValues","Uint8Array","tmp","out","_CNameMapping","LOG_LEVEL","logger","logLevel","toUpperCase","_console","console","info","_console2","log","_console3","warn","_console4","error","CNameMapping","NAME","ADOBEANALYTICS","_defineProperty","commonNames","_objectSpread","All","AdobeAnalytics","Amplitude","Appcues","BingAds","Braze","Bugsnag","Chartbeat","Clevertap","Comscore","Criteo","CustomerIO","Drip","FacebookPixel","Fullstory","GA","GA4","GA360","GoogleAds","GoogleOptimize","GoogleTagManager","Heap","Hotjar","HubSpot","INTERCOM","Keen","Kissmetrics","Klaviyo","LaunchDarkly","LinkedInInsightTag","Lotame","Lytics","Mixpanel","MoEngage","Optimizely","Pendo","PinterestTag","PostAffiliatePro","Posthog","ProfitWell","Qualtrics","QuantumMetric","RedditPixel","Sentry","SnapPixel","TVSquared","VWO","Adroll","DCMFloodlight","Matomo","Vero","Mouseflow","ConvertFlow","SnapEngage","LiveChat","Shynet","Woopra","RollBar","QuoraPixel","June","Engage","Iterable","Rockerbox","YandexMetrica","Refiner","Qualaroo","Podsights","Axeptio","SatisMeter","MicrosoftClarity","Sendinblue","Olark","Lemnisk","clientToServerNames","GOOGLEADS","BRAZE","CHARTBEAT","COMSCORE","CUSTOMERIO","DCM_Floodlight","FACEBOOK_PIXEL","GTM","HOTJAR","HS","KEEN","KISSMETRICS","LOTAME","OPTIMIZELY","FULLSTORY","TVSQUARED","MOENGAGE","AM","PENDO","LYTICS","APPCUES","POSTHOG","PROFITWELL","KLAVIYO","CLEVERTAP","BINGADS","PINTEREST_TAG","SNAP_PIXEL","LINKEDIN_INSIGHT_TAG","REDDIT_PIXEL","DRIP","HEAP","CRITEO","MP","QUALTRICS","SENTRY","GOOGLE_OPTIMIZE","POST_AFFILIATE_PRO","LAUNCHDARKLY","ADROLL","VERO","MATOMO","MOUSEFLOW","ROCKERBOX","CONVERTFLOW","SNAPENGAGE","LIVECHAT","SHYNET","WOOPRA","ROLLBAR","QUORA_PIXEL","JUNE","ENGAGE","ITERABLE","YANDEX_METRICA","REFINER","QUALAROO","PODSIGHTS","AXEPTIO","SATISMETER","MICROSOFT_CLARITY","SENDINBLUE","OLARK","LEMNISK","RESERVED_KEYS","CONFIG_URL","CDN_ARCH_VERSION_DIR","CDN_INT_DIR","DEST_SDK_BASE_URL","SDK_CDN_BASE_URL","MAX_WAIT_FOR_INTEGRATION_LOAD","INTEGRATION_LOAD_CHECK_INTERVAL","INTG_SUFFIX","DEFAULT_ERROR_REPORT_PROVIDER","ERROR_REPORT_PROVIDERS","SAMESITE_COOKIE_OPTS","RESIDENCY_SERVERS","CryptoJS","Math","F","subtype","C","lib","Base","C_lib","extend","overrides","mixIn","init","$super","instance","properties","propertyName","WordArray","words","sigBytes","encoder","Hex","stringify","concat","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","ceil","random","nBytes","rcache","m_w","m_z","mask","_r","enc","C_enc","bite","hexChars","hexStr","hexStrLength","parseInt","substr","Latin1","latin1Chars","fromCharCode","latin1Str","latin1StrLength","charCodeAt","Utf8","escape","Error","utf8Str","unescape","encodeURIComponent","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","data","_process","doFlush","dataWords","dataSigBytes","blockSize","nBlocksReady","nWordsReady","max","_minBufferSize","nBytesReady","min","offset","_doProcessBlock","processedWords","Hasher","cfg","_doReset","update","messageUpdate","finalize","_doFinalize","_createHelper","hasher","message","_createHmacHelper","HMAC","C_algo","algo","parseLoop","base64Str","base64StrLength","reverseMap","bits1","bits2","Base64","map","_map","base64Chars","triplet","j","paddingChar","_reverseMap","paddingIndex","T","abs","sin","MD5","_hash","M","M_offset_i","offset_i","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_7","M_offset_8","M_offset_9","M_offset_11","M_offset_12","M_offset_13","M_offset_15","H","d","FF","M_offset_6","M_offset_10","M_offset_14","GG","HH","II","nBitsTotal","nBitsLeft","nBitsTotalH","floor","nBitsTotalL","H_i","s","t","HmacMD5","W","SHA1","HmacSHA1","EvpKDF","keySize","iterations","compute","password","salt","derivedKey","derivedKeyWords","block","factory","require$$1","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","BlockCipher","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_1","INV_SUB_MIX_3","xi","sx","x2","x4","x8","INV_SUB_MIX_0","INV_SUB_MIX_2","RCON","AES","_nRounds","_keyPriorReset","_key","keyWords","ksRows","keySchedule","_keySchedule","ksRow","_invKeySchedule","invKsRow","invKeySchedule","encryptBlock","_doCryptBlock","decryptBlock","nRounds","s0","round","s1","s2","s3","t2","t3","t0","t1","require$$2","require$$3","Cipher","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","xformMode","_xformMode","process","dataUpdate","ivSize","selectCipherStrategy","PasswordBasedCipher","cipher","encrypt","decrypt","ciphertext","StreamCipher","mode","BlockCipherMode","iv","Encryptor","Decryptor","_cipher","_iv","C_mode","CBC","xorBlock","_prevBlock","processBlock","thisBlock","Pkcs7","pad","blockSizeBytes","nPaddingBytes","paddingWord","paddingWords","padding","unpad","modeCreator","_mode","__creator","finalProcessedBlocks","CipherParams","cipherParams","formatter","OpenSSLFormatter","format","OpenSSL","openSSLStr","ciphertextWords","SerializableCipher","encryptor","cipherCfg","algorithm","_parse","OpenSSLKdf","kdf","execute","derivedParams","h","w","y","ms","msAbs","name","isPlural","match","parseFloat","toLowerCase","isFinite","long","plural","fmtLong","fmtShort","JSON","common","env","createDebug","namespace","prevTime","namespacesCache","enabledCache","enableOverride","debug","enabled","self","curr","Number","diff","prev","coerce","unshift","index","formatters","formatArgs","logFn","useColors","color","selectColor","destroy","defineProperty","enumerable","configurable","get","namespaces","set","v","delimiter","newDebug","toNamespace","regexp","stack","disable","names","skips","enable","save","humanize","keys","forEach","colors","load","warned","lastC","storage","setItem","removeItem","getItem","DEBUG","__nwjs","navigator","userAgent","documentElement","style","WebkitAppearance","firebug","exception","table","$1","localstorage","encode","maxage","expires","domain","toUTCString","samesite","secure","cookie","all","err","pair","drop_1","count","collection","toDrop","resultsLength","results","rest_1","drop","rest","has","objToString","Boolean","isPlainObject","deepCombiner","defaultsDeep","combiner","shallowCombiner","sources","defaultsWith","defaultsModule","defaults_1","levels","cname","opts","last","CookieLocal","_classCallCheck","cOpts","isSupportAvailable","checkSupportAvailability","_createClass","topDomain","defaults","inOpts","R","remove","Cookie","localStorage","isJSON","deserialize","isFunction","dealIncognito","_KEY","_VALUE","_nothing","__proto__","clear","Store","ret","dt","callback","arr","store","argm","_Store","StoreLocal","sOpts","_options","segment","decryptValue","Storage","encryptValue","setStringItem","anonymousIdKeyMap","includes","anonId","anonymousIdOptions","rlAnonymousId","fetchExternalAnonymousId","flag","LOAD_ORIGIN","ScriptLoader","id","src","exists","getElementById","js","async","skipDatasetAttributes","setAttribute","isNonNativeSDK","headElmColl","getElementsByTagName","insertBefore","firstChild","parentNode","breadcrumb","rsBugsnagClient","leaveBreadcrumb","notify","handleError","customMessage","analyticsInstance","errorMessage","Event","localName","dataset","loader","page","title","sendAdblockPageOptions","normaliseError","notifyError","errorObj","replacer","removeTrailingSlashes","inURL","endsWith","generateUUID","uuidSecure","num","uuid","getCurrentTimeFormatted","toISOString","getDefaultPageProperties","canonicalUrl","getCanonicalUrl","hashIndex","getUrl","tab_url","getReferrer","referrer","referring_domain","getReferringDomain","initial_referrer","getInitialReferrer","initial_referring_domain","getInitialReferringDomain","tag","tags","getAttribute","transformNamesCore","integrationObject","namesObj","transformToRudderNames","findAllEnabledDestinations","sdkSuppliedIntegrations","configPlaneEnabledIntegrations","enabledList","allValue","intgData","intg","intgName","intObj","_ref","intgValue","getSDKUrlInfo","sdkURL","scripts","isStaging","curScriptSrc","urlMatches","getStringId","serverUrl","resolveDataPlaneUrl","response","dataPlanes","dataplanes","inputRegion","region","residencyServer","getResidencyServer","regionUrlArr","defaultUrl","urls","find","elem","isValidServerUrl","getDefaultUrlofRegion","RudderApp","version","RudderLibraryInfo","RudderOSInfo","RudderScreenInfo","density","width","height","innerWidth","innerHeight","RudderContext","screenDetails","app","traits","library","brave","isBrave","matchedArr","getUserAgent","device","network","os","locale","language","browserLanguage","screen","devicePixelRatio","RudderMessage","channel","context","messageId","originalTimestamp","anonymousId","userId","integrations","RudderElement","rudderProperty","rudderUserProperty","user_properties","eventName","RudderElementBuilder","eventType","element","setUserId","setType","setEventName","setProperty","setUserProperty","dist","hop","strCharAt","toStr","indexKeys","pred","keys_1","isArrayLike","objectKeys","rnds8","rng","bind","msCrypto","REGEX","_nodeId","_clockseq","byteToHex","validate","TypeError","_lastMSecs","_lastNSecs","v35","hashfunc","buf","bytes","stringToBytes","DNS","URL","inputLength8","lsw","q","safeAdd","cnt","md5ff","md5gg","md5cmn","md5hh","md5ii","v3","msg","input","length32","hexTab","hex","output","md5ToHexEncodedArray","getOutputLength","olda","oldb","oldd","oldc","wordsToMd5","length8","Uint32Array","bytesToWords","v3$1","f","z","ROTL","v5","K","N","_i","pow","_i2","_t","_t2","v5$1","node","clockseq","seedBytes","msecs","now","nsecs","tl","tmh","rnds","inMemoryStore","engine","defaultEngine","isSupportedNatively","inMemoryEngine","isNumber","arrayEach","iterator","array","baseEach","object","ks","each_1","each","json","optionalEngine","originalEngine","_createValidKey","compoundKey","quotaExceeded","code","number","isQuotaExceeded","_swapEngine","getOriginalEngine","each$2","defaultClock","setTimeout","clearTimeout","modes","ASAP","RESCHEDULE","ABANDON","Schedule","tasks","nextId","clock","run","task","timeout","_handle","cancel","cancelAll","start","setClock","newClock","resetClock","Modes","schedule","require$$4","func","maxItems","Infinity","maxAttempts","backoff","MIN_RETRY_DELAY","minRetryDelay","MAX_RETRY_DELAY","maxRetryDelay","FACTOR","backoffFactor","JITTER","backoffJitter","timeouts","ACK_TIMER","RECLAIM_TIMER","RECLAIM_TIMEOUT","RECLAIM_WAIT","IN_PROGRESS","QUEUE","RECLAIM_START","RECLAIM_END","ACK","_schedule","_processId","_store","_ack","_checkReclaim","_processHead","_running","require$$5","Queue","stop","shouldRetry","_","attemptNumber","getDelay","rand","deviation","toPrecision","addItem","item","_enqueue","time","requeue","entry","queue","sort","inProgress","enqueue","el","toRun","done","res","inProgressSize","shift","_reclaim","tryReclaim","findOtherQueues","our","their","other","trackMessageIds","addConcatQueue","incrementAttemptNumberBy","XHRQueue","writeKey","_extends","queueOptions","payloadQueue","sentAt","processQueueElement","headers","queueFn","xhr","XMLHttpRequest","open","setRequestHeader","ontimeout","onerror","onreadystatechange","readyState","status","statusText","send","Authorization","btoa","AnonymousId","BeaconQueue","flushQueueTimeOut","timeOutActive","flushQueueTimeOutInterval","writekey","queueName","sendBeacon","sendDataFromQueueAndDestroyQueue","flushQueueInterval","sendQueueData","sendQueueDataForBeacon","getQueue","batch","flushQueue","setQueue","setTimer","sendDataFromQueue","payload","blob","Blob","clearTimer","EventRepository","targetUrl","useBeacon","beaconQueueOptions","rudderElement","getElementContent","eventRepository","USER_INTERFACE","b64DecodeUnicode","atob","KEY_VALIDATOR","DELIMITER","getCheckSum","serializedIds","optOffsetMin","fingerprint","getTimezoneOffset","getFingerprint","crc","crcTable","makeCRCTable","crc32","parseLinker","linkerObj","isEven","checksum","parseLinkerParamValue","isCheckSumValid","keyValuePairs","params","configToIntNames","BUGSNAG","ADOBE_ANALYTICS","QUANTUMMETRIC","DCM_FLOODLIGHT","OneTrust","_this","OnetrustActiveGroups","userSetConsentGroupIds","filter","GetDomainData","Groups","userSetConsentGroupNames","oneTrustAllGroupsInfo","group","CustomGroupId","GroupName","destConfig","_this2","oneTrustCookieCategories","oneTrustConsentGroupArr","oneTrustCookieCategory","every","CookieConsentFactory","cookieConsentOptions","_cookieConsentOptions","oneTrust","META_DATA","SDK","installType","API_KEY","SDK_FILE_NAMES","_toConsumableArray","initClient","sourceId","apiKey","appVersion","metadata","onError","errorOrigin","srcFileName","lastIndexOf","addMetadata","errMsg","errors","severity","_unused","autoTrackSessions","collectUserIp","enabledBreadcrumbTypes","maxEvents","releaseStage","userSession","UserSession","sessionInfo","getSessionInfo","autoTrack","_options$sessions","sessions","manualTrack","isNaN","startAutoTracking","end","timestamp","expiresAt","isValidSession","sessionStart","setSessionInfo","sessionId","validateSessionId","generateSessionId","removeSessionInfo","session","_this$sessionInfo","mergeDeepRightObjectArrays","leftValue","rightValue","R.clone","mergedArray","mergeDeepRight","leftObject","rightObject","defaultTopLevelElements","Analytics","initialized","clientIntegrations","loadOnlyIntegrations","clientIntegrationObjects","successfullyLoadedIntegration","failedToBeLoadedIntegration","toBeProcessedArray","toBeProcessedByIntegrationArray","sendAdblockPage","clientSuppliedCallbacks","readyCallbacks","methodToCallbackMapping","syncPixel","loaded","loadIntegration","integrationsData","dynamicallyLoadedIntegrations","destSDKBaseURL","clientIntegrationsReady","uSession","lockIntegrationsVersion","getUserId","userTraits","getUserTraits","setUserTraits","groupId","getGroupId","setGroupId","groupTraits","getGroupTraits","setGroupTraits","getAnonymousId","setAnonymousId","initialReferrer","setInitialReferrer","setInitialReferringDomain","resolve","pause","then","allModulesInitialized","pluginName","modName","constructor","responseVal","config","provider","interval","setInterval","clearInterval","BugsnagLib","initialize","analytics","method","processDataInAnalyticsArray","destinations","destination","destinationDefinition","cookieConsent","isEnabled","suffix","modURL","integrationSDKLoaded","intgInstance","intMod","isInitialized","executeReadyCallback","replayEvents","integrationInstances","enhancedIntegrationsData","isReady","integrationInstance","getDataForIntegrationsObject","successfulLoadedIntersectClientSuppliedIntegrations","_iterator","_step","successfulLoadedIntersectClientSuppliedIntegration","isFailed","methodName","IsEventBlackListed","clonedBufferEvent","Promise","isLoaded","_this3","category","sendSampleRequest","build","getPageProperties","processAndSendDataToDestinations","to","from","previousId","sdkIntgName","clientIntegration","blacklistedEvents","whitelistedEvents","_intg$config","eventFilteringOption","formattedEventName","some","eventObj","_this4","_this$uSession$getSes","processOptionsParam","messageType","property","trait","contextualTraits","contextTrait","checkReservedKeywords","clientSuppliedIntegrations","clonedRudderElement","clonedIntegrationsData","integration","reduce","activeClientSuppliedIntegrations","getMergedClientSuppliedIntegrations","param","msgContext","campaign","utm","_rudderElement$messag","addCampaignInfo","getContextPageProperties","rudderElementMessage","mergeTopLevelElementsMutator","tempContext","mergeContext","defaultPageProperties","optionPageProperties","contextPageProperties","getSessionId","rudderAmpLinkerParm","parsedAnonymousIdObj","parsedAnonymousId","rs_amp_id","aB","_this5","isValidWriteKey","cookieConsentManager","storageOptions","setCookieDomain","secureCookie","sameSiteCookie","transformedCallbackMapping","registerCallbacks","initializeUser","setInitialPageProperties","currentVersion","customIntegrationsCDNPath","integrationsCDNPath","errorMsg","getIntegrationsCDNPath","getSourceConfig","pRes","processResponse","catch","configUrl","getConfigUrl","defConfigUrl","urlSplitItems","defQueryParams","getUserProvidedConfigUrl","onload","cb_","responseText","getJSONTrimmed","polyfillIfRequired","startsWith","entries","values","replaceAll","isDatasetAvailable","loadAfterPolyfill","_this6","calledFromLoad","_this7","rudderanalytics","initializeCallbacks","defaultEvent","defaultMethod","argumentsArray","isValidArgsArray","getDataFromQueryObj","qObj","dataType","queryObject","ajs_aid","ajs_uid","queryDefaults","ajs_event","parseQueryString","ready","identify","track","alias","startSession","endSession"],"mappings":"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EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAA,CACfC,IAAK,OACFC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IClJoBC,GAAG,CAC1BzE,IAAK,MACLe,GAAI,mBACJ2D,UAAW,aACXC,MAAO,QACPC,UAAW,YACXC,SAAU,WACVC,WAAY,cACZC,eAAgB,iBAChBC,eAAgB,iBAChBC,IAAK,qBACLC,OAAQ,SACRC,GAAI,UACJ3D,SAAU,WACV4D,KAAM,OACNC,YAAa,eACbC,OAAQ,SACRxC,IAAK,MACLyC,WAAY,iBACZC,UAAW,YACXC,UAAW,YACXzE,IAAK,qBACL0E,SAAU,WACVC,GAAI,YACJC,MAAO,QACPC,OAAQ,SACRC,QAAS,UACTC,QAAS,UACTC,WAAY,aACZC,QAAS,UACTC,UAAW,YACXC,QAAS,WACTC,cAAe,gBACfC,WAAY,aACZC,qBAAsB,uBACtBC,aAAc,eACdC,KAAM,OACNC,KAAM,UACNC,OAAQ,SACRC,GAAI,WACJC,UAAW,YACXC,OAAQ,SACRC,gBAAiB,kBACjBC,mBAAoB,qBACpBC,aAAc,eACd/F,MAAO,uBACPgG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"}