{"version":3,"sources":["node_modules/uuid/lib/rng-browser.js","node_modules/uuid/lib/bytesToUuid.js","node_modules/uuid/v1.js","node_modules/uuid/v4.js","node_modules/uuid/index.js","node_modules/crypt/crypt.js","node_modules/charenc/charenc.js","node_modules/sha1/sha1.js","node_modules/@angular/common/locales/global/nb.js","node_modules/@ngrx/store-devtools/fesm2022/ngrx-store-devtools.mjs","src/app/maintenance/maintenance.component.ts","src/app/maintenance/maintenance.component.html","src/app/app-routing.module.ts","src/devextreme.license.ts","src/app/common/enums/one-trust-consent-group.enum.ts","node_modules/@snowplow/tracker-core/dist/index.module.js","node_modules/@snowplow/browser-tracker-core/dist/index.module.js","node_modules/@snowplow/browser-tracker/dist/index.module.js","node_modules/@snowplow/browser-plugin-performance-timing/dist/index.module.js","node_modules/@snowplow/browser-plugin-form-tracking/dist/index.module.js","src/app/core/models/snowplow.models.ts","src/app/core/services/snowplow.service.ts","src/app/common/utils/array.utils.ts","src/app/common/services/one-trust.service.ts","src/app/common/components/one-trust/one-trust.component.ts","src/app/app.component.ts","src/app/app.component.html","src/app/core/core.module.ts","src/app/core/services/app-config-service.ts","src/app/localization.ts","src/app/app.module.ts","src/main.ts"],"sourcesContent":["// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = typeof crypto != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto);\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n return rnds;\n };\n}","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return [bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]]].join('');\n}\nmodule.exports = bytesToUuid;","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`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;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // 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 if (node == null || clockseq == null) {\n var seedBytes = rng();\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 if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\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 var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\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;\n\n // `time_mid`\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n return buf ? buf : bytesToUuid(b);\n}\nmodule.exports = v1;","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n if (typeof options == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n return buf || bytesToUuid(rnds);\n}\nmodule.exports = v4;","var v1 = require('./v1');\nvar v4 = require('./v4');\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\nmodule.exports = uuid;","(function () {\n var base64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n crypt = {\n // Bit-wise rotation left\n rotl: function (n, b) {\n return n << b | n >>> 32 - b;\n },\n // Bit-wise rotation right\n rotr: function (n, b) {\n return n << 32 - b | n >>> b;\n },\n // Swap big-endian to little-endian and vice versa\n endian: function (n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++) n[i] = crypt.endian(n[i]);\n return n;\n },\n // Generate an array of any length of random bytes\n randomBytes: function (n) {\n for (var bytes = []; n > 0; n--) bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function (bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8) words[b >>> 5] |= bytes[i] << 24 - b % 32;\n return words;\n },\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function (words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8) bytes.push(words[b >>> 5] >>> 24 - b % 32 & 0xFF);\n return bytes;\n },\n // Convert a byte array to a hex string\n bytesToHex: function (bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n // Convert a hex string to a byte array\n hexToBytes: function (hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2) bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n // Convert a byte array to a base-64 string\n bytesToBase64: function (bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];\n for (var j = 0; j < 4; j++) if (i * 8 + j * 6 <= bytes.length * 8) base64.push(base64map.charAt(triplet >>> 6 * (3 - j) & 0x3F));else base64.push('=');\n }\n return base64.join('');\n },\n // Convert a base-64 string to a byte array\n base64ToBytes: function (base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push((base64map.indexOf(base64.charAt(i - 1)) & Math.pow(2, -2 * imod4 + 8) - 1) << imod4 * 2 | base64map.indexOf(base64.charAt(i)) >>> 6 - imod4 * 2);\n }\n return bytes;\n }\n };\n module.exports = crypt;\n})();","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function (str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n // Convert a byte array to a string\n bytesToString: function (bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function (str) {\n for (var bytes = [], i = 0; i < str.length; i++) bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n // Convert a byte array to a string\n bytesToString: function (bytes) {\n for (var str = [], i = 0; i < bytes.length; i++) str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\nmodule.exports = charenc;","(function () {\n var crypt = require('crypt'),\n utf8 = require('charenc').utf8,\n bin = require('charenc').bin,\n // The core\n sha1 = function (message) {\n // Convert to byte array\n if (message.constructor == String) message = utf8.stringToBytes(message);else if (typeof Buffer !== 'undefined' && typeof Buffer.isBuffer == 'function' && Buffer.isBuffer(message)) message = Array.prototype.slice.call(message, 0);else if (!Array.isArray(message)) message = message.toString();\n\n // otherwise assume byte array\n\n var m = crypt.bytesToWords(message),\n l = message.length * 8,\n w = [],\n H0 = 1732584193,\n H1 = -271733879,\n H2 = -1732584194,\n H3 = 271733878,\n H4 = -1009589776;\n\n // Padding\n m[l >> 5] |= 0x80 << 24 - l % 32;\n m[(l + 64 >>> 9 << 4) + 15] = l;\n for (var i = 0; i < m.length; i += 16) {\n var a = H0,\n b = H1,\n c = H2,\n d = H3,\n e = H4;\n for (var j = 0; j < 80; j++) {\n if (j < 16) w[j] = m[i + j];else {\n var n = w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16];\n w[j] = n << 1 | n >>> 31;\n }\n var t = (H0 << 5 | H0 >>> 27) + H4 + (w[j] >>> 0) + (j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 : j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 : j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 : (H1 ^ H2 ^ H3) - 899497514);\n H4 = H3;\n H3 = H2;\n H2 = H1 << 30 | H1 >>> 2;\n H1 = H0;\n H0 = t;\n }\n H0 += a;\n H1 += b;\n H2 += c;\n H3 += d;\n H4 += e;\n }\n return [H0, H1, H2, H3, H4];\n },\n // Public API\n api = function (message, options) {\n var digestbytes = crypt.wordsToBytes(sha1(message));\n return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes);\n };\n api._blocksize = 16;\n api._digestsize = 20;\n module.exports = api;\n})();","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n// THIS CODE IS GENERATED - DO NOT MODIFY.\n(function (global) {\n global.ng ??= {};\n global.ng.common ??= {};\n global.ng.common.locales ??= {};\n const u = undefined;\n function plural(val) {\n const n = val;\n if (n === 1) return 1;\n return 5;\n }\n global.ng.common.locales['nb'] = [\"nb\", [[\"a\", \"p\"], [\"a.m.\", \"p.m.\"], u], [[\"a.m.\", \"p.m.\"], u, u], [[\"S\", \"M\", \"T\", \"O\", \"T\", \"F\", \"L\"], [\"søn.\", \"man.\", \"tir.\", \"ons.\", \"tor.\", \"fre.\", \"lør.\"], [\"søndag\", \"mandag\", \"tirsdag\", \"onsdag\", \"torsdag\", \"fredag\", \"lørdag\"], [\"sø.\", \"ma.\", \"ti.\", \"on.\", \"to.\", \"fr.\", \"lø.\"]], u, [[\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"], [\"jan.\", \"feb.\", \"mar.\", \"apr.\", \"mai\", \"jun.\", \"jul.\", \"aug.\", \"sep.\", \"okt.\", \"nov.\", \"des.\"], [\"januar\", \"februar\", \"mars\", \"april\", \"mai\", \"juni\", \"juli\", \"august\", \"september\", \"oktober\", \"november\", \"desember\"]], [[\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"], [\"jan\", \"feb\", \"mar\", \"apr\", \"mai\", \"jun\", \"jul\", \"aug\", \"sep\", \"okt\", \"nov\", \"des\"], [\"januar\", \"februar\", \"mars\", \"april\", \"mai\", \"juni\", \"juli\", \"august\", \"september\", \"oktober\", \"november\", \"desember\"]], [[\"f.Kr.\", \"e.Kr.\"], u, [\"før Kristus\", \"etter Kristus\"]], 1, [6, 0], [\"dd.MM.y\", \"d. MMM y\", \"d. MMMM y\", \"EEEE d. MMMM y\"], [\"HH:mm\", \"HH:mm:ss\", \"HH:mm:ss z\", \"HH:mm:ss zzzz\"], [\"{1}, {0}\", u, \"{1} 'kl'. {0}\", u], [\",\", \" \", \";\", \"%\", \"+\", \"−\", \"E\", \"×\", \"‰\", \"∞\", \"NaN\", \":\"], [\"#,##0.###\", \"#,##0 %\", \"¤ #,##0.00;¤ -#,##0.00\", \"#E0\"], \"NOK\", \"kr\", \"norske kroner\", {\n \"AUD\": [u, \"$\"],\n \"BRL\": [u, \"R$\"],\n \"BYN\": [u, \"р.\"],\n \"CAD\": [u, \"$\"],\n \"CNY\": [u, \"¥\"],\n \"HKD\": [u, \"$\"],\n \"ILS\": [u, \"₪\"],\n \"INR\": [u, \"₹\"],\n \"JPY\": [u, \"¥\"],\n \"KRW\": [u, \"₩\"],\n \"MXN\": [u, \"$\"],\n \"NOK\": [\"kr\"],\n \"NZD\": [u, \"$\"],\n \"PHP\": [u, \"₱\"],\n \"RON\": [u, \"L\"],\n \"TWD\": [u, \"NT$\"],\n \"USD\": [u, \"$\"],\n \"VND\": [u, \"₫\"],\n \"XAF\": [],\n \"XCD\": [u, \"$\"],\n \"XPF\": [],\n \"XXX\": []\n }, \"ltr\", plural, [[[\"mn.\", \"mg.\", \"fm.\", \"em.\", \"kv.\", \"nt.\"], [\"midn.\", \"morg.\", \"form.\", \"etterm.\", \"kveld\", \"natt\"], [\"midnatt\", \"på morgenen\", \"på formiddagen\", \"på ettermiddagen\", \"på kvelden\", \"på natten\"]], [[\"mn.\", \"mg.\", \"fm.\", \"em.\", \"kv.\", \"nt.\"], [\"midn.\", \"morg.\", \"form.\", \"etterm.\", \"kveld\", \"natt\"], [\"midnatt\", \"morgen\", \"formiddag\", \"ettermiddag\", \"kveld\", \"natt\"]], [\"00:00\", [\"06:00\", \"10:00\"], [\"10:00\", \"12:00\"], [\"12:00\", \"18:00\"], [\"18:00\", \"24:00\"], [\"00:00\", \"06:00\"]]]];\n})(globalThis);","import * as i0 from '@angular/core';\nimport { InjectionToken, inject, NgZone, Injectable, Inject, makeEnvironmentProviders, NgModule } from '@angular/core';\nimport * as i2 from '@ngrx/store';\nimport { ActionsSubject, UPDATE, INIT, INITIAL_STATE, StateObservable, ReducerManagerDispatcher } from '@ngrx/store';\nimport { EMPTY, Observable, of, merge, queueScheduler, ReplaySubject } from 'rxjs';\nimport { share, filter, map, concatMap, timeout, debounceTime, catchError, take, takeUntil, switchMap, skip, observeOn, withLatestFrom, scan } from 'rxjs/operators';\nimport { toSignal } from '@angular/core/rxjs-interop';\nconst PERFORM_ACTION = 'PERFORM_ACTION';\nconst REFRESH = 'REFRESH';\nconst RESET = 'RESET';\nconst ROLLBACK = 'ROLLBACK';\nconst COMMIT = 'COMMIT';\nconst SWEEP = 'SWEEP';\nconst TOGGLE_ACTION = 'TOGGLE_ACTION';\nconst SET_ACTIONS_ACTIVE = 'SET_ACTIONS_ACTIVE';\nconst JUMP_TO_STATE = 'JUMP_TO_STATE';\nconst JUMP_TO_ACTION = 'JUMP_TO_ACTION';\nconst IMPORT_STATE = 'IMPORT_STATE';\nconst LOCK_CHANGES = 'LOCK_CHANGES';\nconst PAUSE_RECORDING = 'PAUSE_RECORDING';\nclass PerformAction {\n constructor(action, timestamp) {\n this.action = action;\n this.timestamp = timestamp;\n this.type = PERFORM_ACTION;\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n }\n}\nclass Refresh {\n constructor() {\n this.type = REFRESH;\n }\n}\nclass Reset {\n constructor(timestamp) {\n this.timestamp = timestamp;\n this.type = RESET;\n }\n}\nclass Rollback {\n constructor(timestamp) {\n this.timestamp = timestamp;\n this.type = ROLLBACK;\n }\n}\nclass Commit {\n constructor(timestamp) {\n this.timestamp = timestamp;\n this.type = COMMIT;\n }\n}\nclass Sweep {\n constructor() {\n this.type = SWEEP;\n }\n}\nclass ToggleAction {\n constructor(id) {\n this.id = id;\n this.type = TOGGLE_ACTION;\n }\n}\nclass SetActionsActive {\n constructor(start, end, active = true) {\n this.start = start;\n this.end = end;\n this.active = active;\n this.type = SET_ACTIONS_ACTIVE;\n }\n}\nclass JumpToState {\n constructor(index) {\n this.index = index;\n this.type = JUMP_TO_STATE;\n }\n}\nclass JumpToAction {\n constructor(actionId) {\n this.actionId = actionId;\n this.type = JUMP_TO_ACTION;\n }\n}\nclass ImportState {\n constructor(nextLiftedState) {\n this.nextLiftedState = nextLiftedState;\n this.type = IMPORT_STATE;\n }\n}\nclass LockChanges {\n constructor(status) {\n this.status = status;\n this.type = LOCK_CHANGES;\n }\n}\nclass PauseRecording {\n constructor(status) {\n this.status = status;\n this.type = PAUSE_RECORDING;\n }\n}\n\n/**\n * Chrome extension documentation\n * @see https://github.com/reduxjs/redux-devtools/blob/main/extension/docs/API/Arguments.md\n * Firefox extension documentation\n * @see https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md\n */\nclass StoreDevtoolsConfig {\n constructor() {\n /**\n * Maximum allowed actions to be stored in the history tree (default: `false`)\n */\n this.maxAge = false;\n }\n}\nconst STORE_DEVTOOLS_CONFIG = new InjectionToken('@ngrx/store-devtools Options');\n/**\n * Used to provide a `StoreDevtoolsConfig` for the store-devtools.\n */\nconst INITIAL_OPTIONS = new InjectionToken('@ngrx/store-devtools Initial Config');\nfunction noMonitor() {\n return null;\n}\nconst DEFAULT_NAME = 'NgRx Store DevTools';\nfunction createConfig(optionsInput) {\n const DEFAULT_OPTIONS = {\n maxAge: false,\n monitor: noMonitor,\n actionSanitizer: undefined,\n stateSanitizer: undefined,\n name: DEFAULT_NAME,\n serialize: false,\n logOnly: false,\n autoPause: false,\n trace: false,\n traceLimit: 75,\n // Add all features explicitly. This prevent buggy behavior for\n // options like \"lock\" which might otherwise not show up.\n features: {\n pause: true,\n // Start/pause recording of dispatched actions\n lock: true,\n // Lock/unlock dispatching actions and side effects\n persist: true,\n // Persist states on page reloading\n export: true,\n // Export history of actions in a file\n import: 'custom',\n // Import history of actions from a file\n jump: true,\n // Jump back and forth (time travelling)\n skip: true,\n // Skip (cancel) actions\n reorder: true,\n // Drag and drop actions in the history list\n dispatch: true,\n // Dispatch custom actions or action creators\n test: true // Generate tests for the selected actions\n },\n connectInZone: false\n };\n const options = typeof optionsInput === 'function' ? optionsInput() : optionsInput;\n const logOnly = options.logOnly ? {\n pause: true,\n export: true,\n test: true\n } : false;\n const features = options.features || logOnly || DEFAULT_OPTIONS.features;\n if (features.import === true) {\n features.import = 'custom';\n }\n const config = Object.assign({}, DEFAULT_OPTIONS, {\n features\n }, options);\n if (config.maxAge && config.maxAge < 2) {\n throw new Error(`Devtools 'maxAge' cannot be less than 2, got ${config.maxAge}`);\n }\n return config;\n}\nfunction difference(first, second) {\n return first.filter(item => second.indexOf(item) < 0);\n}\n/**\n * Provides an app's view into the state of the lifted store.\n */\nfunction unliftState(liftedState) {\n const {\n computedStates,\n currentStateIndex\n } = liftedState;\n // At start up NgRx dispatches init actions,\n // When these init actions are being filtered out by the predicate or safe/block list options\n // we don't have a complete computed states yet.\n // At this point it could happen that we're out of bounds, when this happens we fall back to the last known state\n if (currentStateIndex >= computedStates.length) {\n const {\n state\n } = computedStates[computedStates.length - 1];\n return state;\n }\n const {\n state\n } = computedStates[currentStateIndex];\n return state;\n}\nfunction unliftAction(liftedState) {\n return liftedState.actionsById[liftedState.nextActionId - 1];\n}\n/**\n * Lifts an app's action into an action on the lifted store.\n */\nfunction liftAction(action) {\n return new PerformAction(action, +Date.now());\n}\n/**\n * Sanitizes given actions with given function.\n */\nfunction sanitizeActions(actionSanitizer, actions) {\n return Object.keys(actions).reduce((sanitizedActions, actionIdx) => {\n const idx = Number(actionIdx);\n sanitizedActions[idx] = sanitizeAction(actionSanitizer, actions[idx], idx);\n return sanitizedActions;\n }, {});\n}\n/**\n * Sanitizes given action with given function.\n */\nfunction sanitizeAction(actionSanitizer, action, actionIdx) {\n return {\n ...action,\n action: actionSanitizer(action.action, actionIdx)\n };\n}\n/**\n * Sanitizes given states with given function.\n */\nfunction sanitizeStates(stateSanitizer, states) {\n return states.map((computedState, idx) => ({\n state: sanitizeState(stateSanitizer, computedState.state, idx),\n error: computedState.error\n }));\n}\n/**\n * Sanitizes given state with given function.\n */\nfunction sanitizeState(stateSanitizer, state, stateIdx) {\n return stateSanitizer(state, stateIdx);\n}\n/**\n * Read the config and tell if actions should be filtered\n */\nfunction shouldFilterActions(config) {\n return config.predicate || config.actionsSafelist || config.actionsBlocklist;\n}\n/**\n * Return a full filtered lifted state\n */\nfunction filterLiftedState(liftedState, predicate, safelist, blocklist) {\n const filteredStagedActionIds = [];\n const filteredActionsById = {};\n const filteredComputedStates = [];\n liftedState.stagedActionIds.forEach((id, idx) => {\n const liftedAction = liftedState.actionsById[id];\n if (!liftedAction) return;\n if (idx && isActionFiltered(liftedState.computedStates[idx], liftedAction, predicate, safelist, blocklist)) {\n return;\n }\n filteredActionsById[id] = liftedAction;\n filteredStagedActionIds.push(id);\n filteredComputedStates.push(liftedState.computedStates[idx]);\n });\n return {\n ...liftedState,\n stagedActionIds: filteredStagedActionIds,\n actionsById: filteredActionsById,\n computedStates: filteredComputedStates\n };\n}\n/**\n * Return true is the action should be ignored\n */\nfunction isActionFiltered(state, action, predicate, safelist, blockedlist) {\n const predicateMatch = predicate && !predicate(state, action.action);\n const safelistMatch = safelist && !action.action.type.match(safelist.map(s => escapeRegExp(s)).join('|'));\n const blocklistMatch = blockedlist && action.action.type.match(blockedlist.map(s => escapeRegExp(s)).join('|'));\n return predicateMatch || safelistMatch || blocklistMatch;\n}\n/**\n * Return string with escaped RegExp special characters\n * https://stackoverflow.com/a/6969486/1337347\n */\nfunction escapeRegExp(s) {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\nfunction injectZoneConfig(connectInZone) {\n const ngZone = connectInZone ? inject(NgZone) : null;\n return {\n ngZone,\n connectInZone\n };\n}\nclass DevtoolsDispatcher extends ActionsSubject {\n /** @nocollapse */static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵDevtoolsDispatcher_BaseFactory;\n return function DevtoolsDispatcher_Factory(__ngFactoryType__) {\n return (ɵDevtoolsDispatcher_BaseFactory || (ɵDevtoolsDispatcher_BaseFactory = i0.ɵɵgetInheritedFactory(DevtoolsDispatcher)))(__ngFactoryType__ || DevtoolsDispatcher);\n };\n })();\n }\n /** @nocollapse */\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DevtoolsDispatcher,\n factory: DevtoolsDispatcher.ɵfac\n });\n }\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DevtoolsDispatcher, [{\n type: Injectable\n }], null, null);\n})();\nconst ExtensionActionTypes = {\n START: 'START',\n DISPATCH: 'DISPATCH',\n STOP: 'STOP',\n ACTION: 'ACTION'\n};\nconst REDUX_DEVTOOLS_EXTENSION = new InjectionToken('@ngrx/store-devtools Redux Devtools Extension');\nclass DevtoolsExtension {\n constructor(devtoolsExtension, config, dispatcher) {\n this.config = config;\n this.dispatcher = dispatcher;\n this.zoneConfig = injectZoneConfig(this.config.connectInZone);\n this.devtoolsExtension = devtoolsExtension;\n this.createActionStreams();\n }\n notify(action, state) {\n if (!this.devtoolsExtension) {\n return;\n }\n // Check to see if the action requires a full update of the liftedState.\n // If it is a simple action generated by the user's app and the recording\n // is not locked/paused, only send the action and the current state (fast).\n //\n // A full liftedState update (slow: serializes the entire liftedState) is\n // only required when:\n // a) redux-devtools-extension fires the @@Init action (ignored by\n // @ngrx/store-devtools)\n // b) an action is generated by an @ngrx module (e.g. @ngrx/effects/init\n // or @ngrx/store/update-reducers)\n // c) the state has been recomputed due to time-traveling\n // d) any action that is not a PerformAction to err on the side of\n // caution.\n if (action.type === PERFORM_ACTION) {\n if (state.isLocked || state.isPaused) {\n return;\n }\n const currentState = unliftState(state);\n if (shouldFilterActions(this.config) && isActionFiltered(currentState, action, this.config.predicate, this.config.actionsSafelist, this.config.actionsBlocklist)) {\n return;\n }\n const sanitizedState = this.config.stateSanitizer ? sanitizeState(this.config.stateSanitizer, currentState, state.currentStateIndex) : currentState;\n const sanitizedAction = this.config.actionSanitizer ? sanitizeAction(this.config.actionSanitizer, action, state.nextActionId) : action;\n this.sendToReduxDevtools(() => this.extensionConnection.send(sanitizedAction, sanitizedState));\n } else {\n // Requires full state update\n const sanitizedLiftedState = {\n ...state,\n stagedActionIds: state.stagedActionIds,\n actionsById: this.config.actionSanitizer ? sanitizeActions(this.config.actionSanitizer, state.actionsById) : state.actionsById,\n computedStates: this.config.stateSanitizer ? sanitizeStates(this.config.stateSanitizer, state.computedStates) : state.computedStates\n };\n this.sendToReduxDevtools(() => this.devtoolsExtension.send(null, sanitizedLiftedState, this.getExtensionConfig(this.config)));\n }\n }\n createChangesObservable() {\n if (!this.devtoolsExtension) {\n return EMPTY;\n }\n return new Observable(subscriber => {\n const connection = this.zoneConfig.connectInZone ?\n // To reduce change detection cycles, we need to run the `connect` method\n // outside of the Angular zone. The `connect` method adds a `message`\n // event listener to communicate with an extension using `window.postMessage`\n // and handle message events.\n this.zoneConfig.ngZone.runOutsideAngular(() => this.devtoolsExtension.connect(this.getExtensionConfig(this.config))) : this.devtoolsExtension.connect(this.getExtensionConfig(this.config));\n this.extensionConnection = connection;\n connection.init();\n connection.subscribe(change => subscriber.next(change));\n return connection.unsubscribe;\n });\n }\n createActionStreams() {\n // Listens to all changes\n const changes$ = this.createChangesObservable().pipe(share());\n // Listen for the start action\n const start$ = changes$.pipe(filter(change => change.type === ExtensionActionTypes.START));\n // Listen for the stop action\n const stop$ = changes$.pipe(filter(change => change.type === ExtensionActionTypes.STOP));\n // Listen for lifted actions\n const liftedActions$ = changes$.pipe(filter(change => change.type === ExtensionActionTypes.DISPATCH), map(change => this.unwrapAction(change.payload)), concatMap(action => {\n if (action.type === IMPORT_STATE) {\n // State imports may happen in two situations:\n // 1. Explicitly by user\n // 2. User activated the \"persist state accross reloads\" option\n // and now the state is imported during reload.\n // Because of option 2, we need to give possible\n // lazy loaded reducers time to instantiate.\n // As soon as there is no UPDATE action within 1 second,\n // it is assumed that all reducers are loaded.\n return this.dispatcher.pipe(filter(action => action.type === UPDATE), timeout(1000), debounceTime(1000), map(() => action), catchError(() => of(action)), take(1));\n } else {\n return of(action);\n }\n }));\n // Listen for unlifted actions\n const actions$ = changes$.pipe(filter(change => change.type === ExtensionActionTypes.ACTION), map(change => this.unwrapAction(change.payload)));\n const actionsUntilStop$ = actions$.pipe(takeUntil(stop$));\n const liftedUntilStop$ = liftedActions$.pipe(takeUntil(stop$));\n this.start$ = start$.pipe(takeUntil(stop$));\n // Only take the action sources between the start/stop events\n this.actions$ = this.start$.pipe(switchMap(() => actionsUntilStop$));\n this.liftedActions$ = this.start$.pipe(switchMap(() => liftedUntilStop$));\n }\n unwrapAction(action) {\n // indirect eval according to https://esbuild.github.io/content-types/#direct-eval\n return typeof action === 'string' ? (0, eval)(`(${action})`) : action;\n }\n getExtensionConfig(config) {\n const extensionOptions = {\n name: config.name,\n features: config.features,\n serialize: config.serialize,\n autoPause: config.autoPause ?? false,\n trace: config.trace ?? false,\n traceLimit: config.traceLimit ?? 75\n // The action/state sanitizers are not added to the config\n // because sanitation is done in this class already.\n // It is done before sending it to the devtools extension for consistency:\n // - If we call extensionConnection.send(...),\n // the extension would call the sanitizers.\n // - If we call devtoolsExtension.send(...) (aka full state update),\n // the extension would NOT call the sanitizers, so we have to do it ourselves.\n };\n if (config.maxAge !== false /* support === 0 */) {\n extensionOptions.maxAge = config.maxAge;\n }\n return extensionOptions;\n }\n sendToReduxDevtools(send) {\n try {\n send();\n } catch (err) {\n console.warn('@ngrx/store-devtools: something went wrong inside the redux devtools', err);\n }\n }\n /** @nocollapse */\n static {\n this.ɵfac = function DevtoolsExtension_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || DevtoolsExtension)(i0.ɵɵinject(REDUX_DEVTOOLS_EXTENSION), i0.ɵɵinject(STORE_DEVTOOLS_CONFIG), i0.ɵɵinject(DevtoolsDispatcher));\n };\n }\n /** @nocollapse */\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DevtoolsExtension,\n factory: DevtoolsExtension.ɵfac\n });\n }\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(DevtoolsExtension, [{\n type: Injectable\n }], () => [{\n type: undefined,\n decorators: [{\n type: Inject,\n args: [REDUX_DEVTOOLS_EXTENSION]\n }]\n }, {\n type: StoreDevtoolsConfig,\n decorators: [{\n type: Inject,\n args: [STORE_DEVTOOLS_CONFIG]\n }]\n }, {\n type: DevtoolsDispatcher\n }], null);\n})();\nconst INIT_ACTION = {\n type: INIT\n};\nconst RECOMPUTE = '@ngrx/store-devtools/recompute';\nconst RECOMPUTE_ACTION = {\n type: RECOMPUTE\n};\n/**\n * Computes the next entry in the log by applying an action.\n */\nfunction computeNextEntry(reducer, action, state, error, errorHandler) {\n if (error) {\n return {\n state,\n error: 'Interrupted by an error up the chain'\n };\n }\n let nextState = state;\n let nextError;\n try {\n nextState = reducer(state, action);\n } catch (err) {\n nextError = err.toString();\n errorHandler.handleError(err);\n }\n return {\n state: nextState,\n error: nextError\n };\n}\n/**\n * Runs the reducer on invalidated actions to get a fresh computation log.\n */\nfunction recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, errorHandler, isPaused) {\n // Optimization: exit early and return the same reference\n // if we know nothing could have changed.\n if (minInvalidatedStateIndex >= computedStates.length && computedStates.length === stagedActionIds.length) {\n return computedStates;\n }\n const nextComputedStates = computedStates.slice(0, minInvalidatedStateIndex);\n // If the recording is paused, recompute all states up until the pause state,\n // else recompute all states.\n const lastIncludedActionId = stagedActionIds.length - (isPaused ? 1 : 0);\n for (let i = minInvalidatedStateIndex; i < lastIncludedActionId; i++) {\n const actionId = stagedActionIds[i];\n const action = actionsById[actionId].action;\n const previousEntry = nextComputedStates[i - 1];\n const previousState = previousEntry ? previousEntry.state : committedState;\n const previousError = previousEntry ? previousEntry.error : undefined;\n const shouldSkip = skippedActionIds.indexOf(actionId) > -1;\n const entry = shouldSkip ? previousEntry : computeNextEntry(reducer, action, previousState, previousError, errorHandler);\n nextComputedStates.push(entry);\n }\n // If the recording is paused, the last state will not be recomputed,\n // because it's essentially not part of the state history.\n if (isPaused) {\n nextComputedStates.push(computedStates[computedStates.length - 1]);\n }\n return nextComputedStates;\n}\nfunction liftInitialState(initialCommittedState, monitorReducer) {\n return {\n monitorState: monitorReducer(undefined, {}),\n nextActionId: 1,\n actionsById: {\n 0: liftAction(INIT_ACTION)\n },\n stagedActionIds: [0],\n skippedActionIds: [],\n committedState: initialCommittedState,\n currentStateIndex: 0,\n computedStates: [],\n isLocked: false,\n isPaused: false\n };\n}\n/**\n * Creates a history state reducer from an app's reducer.\n */\nfunction liftReducerWith(initialCommittedState, initialLiftedState, errorHandler, monitorReducer, options = {}) {\n /**\n * Manages how the history actions modify the history state.\n */\n return reducer => (liftedState, liftedAction) => {\n let {\n monitorState,\n actionsById,\n nextActionId,\n stagedActionIds,\n skippedActionIds,\n committedState,\n currentStateIndex,\n computedStates,\n isLocked,\n isPaused\n } = liftedState || initialLiftedState;\n if (!liftedState) {\n // Prevent mutating initialLiftedState\n actionsById = Object.create(actionsById);\n }\n function commitExcessActions(n) {\n // Auto-commits n-number of excess actions.\n let excess = n;\n let idsToDelete = stagedActionIds.slice(1, excess + 1);\n for (let i = 0; i < idsToDelete.length; i++) {\n if (computedStates[i + 1].error) {\n // Stop if error is found. Commit actions up to error.\n excess = i;\n idsToDelete = stagedActionIds.slice(1, excess + 1);\n break;\n } else {\n delete actionsById[idsToDelete[i]];\n }\n }\n skippedActionIds = skippedActionIds.filter(id => idsToDelete.indexOf(id) === -1);\n stagedActionIds = [0, ...stagedActionIds.slice(excess + 1)];\n committedState = computedStates[excess].state;\n computedStates = computedStates.slice(excess);\n currentStateIndex = currentStateIndex > excess ? currentStateIndex - excess : 0;\n }\n function commitChanges() {\n // Consider the last committed state the new starting point.\n // Squash any staged actions into a single committed state.\n actionsById = {\n 0: liftAction(INIT_ACTION)\n };\n nextActionId = 1;\n stagedActionIds = [0];\n skippedActionIds = [];\n committedState = computedStates[currentStateIndex].state;\n currentStateIndex = 0;\n computedStates = [];\n }\n // By default, aggressively recompute every state whatever happens.\n // This has O(n) performance, so we'll override this to a sensible\n // value whenever we feel like we don't have to recompute the states.\n let minInvalidatedStateIndex = 0;\n switch (liftedAction.type) {\n case LOCK_CHANGES:\n {\n isLocked = liftedAction.status;\n minInvalidatedStateIndex = Infinity;\n break;\n }\n case PAUSE_RECORDING:\n {\n isPaused = liftedAction.status;\n if (isPaused) {\n // Add a pause action to signal the devtools-user the recording is paused.\n // The corresponding state will be overwritten on each update to always contain\n // the latest state (see Actions.PERFORM_ACTION).\n stagedActionIds = [...stagedActionIds, nextActionId];\n actionsById[nextActionId] = new PerformAction({\n type: '@ngrx/devtools/pause'\n }, +Date.now());\n nextActionId++;\n minInvalidatedStateIndex = stagedActionIds.length - 1;\n computedStates = computedStates.concat(computedStates[computedStates.length - 1]);\n if (currentStateIndex === stagedActionIds.length - 2) {\n currentStateIndex++;\n }\n minInvalidatedStateIndex = Infinity;\n } else {\n commitChanges();\n }\n break;\n }\n case RESET:\n {\n // Get back to the state the store was created with.\n actionsById = {\n 0: liftAction(INIT_ACTION)\n };\n nextActionId = 1;\n stagedActionIds = [0];\n skippedActionIds = [];\n committedState = initialCommittedState;\n currentStateIndex = 0;\n computedStates = [];\n break;\n }\n case COMMIT:\n {\n commitChanges();\n break;\n }\n case ROLLBACK:\n {\n // Forget about any staged actions.\n // Start again from the last committed state.\n actionsById = {\n 0: liftAction(INIT_ACTION)\n };\n nextActionId = 1;\n stagedActionIds = [0];\n skippedActionIds = [];\n currentStateIndex = 0;\n computedStates = [];\n break;\n }\n case TOGGLE_ACTION:\n {\n // Toggle whether an action with given ID is skipped.\n // Being skipped means it is a no-op during the computation.\n const {\n id: actionId\n } = liftedAction;\n const index = skippedActionIds.indexOf(actionId);\n if (index === -1) {\n skippedActionIds = [actionId, ...skippedActionIds];\n } else {\n skippedActionIds = skippedActionIds.filter(id => id !== actionId);\n }\n // Optimization: we know history before this action hasn't changed\n minInvalidatedStateIndex = stagedActionIds.indexOf(actionId);\n break;\n }\n case SET_ACTIONS_ACTIVE:\n {\n // Toggle whether an action with given ID is skipped.\n // Being skipped means it is a no-op during the computation.\n const {\n start,\n end,\n active\n } = liftedAction;\n const actionIds = [];\n for (let i = start; i < end; i++) actionIds.push(i);\n if (active) {\n skippedActionIds = difference(skippedActionIds, actionIds);\n } else {\n skippedActionIds = [...skippedActionIds, ...actionIds];\n }\n // Optimization: we know history before this action hasn't changed\n minInvalidatedStateIndex = stagedActionIds.indexOf(start);\n break;\n }\n case JUMP_TO_STATE:\n {\n // Without recomputing anything, move the pointer that tell us\n // which state is considered the current one. Useful for sliders.\n currentStateIndex = liftedAction.index;\n // Optimization: we know the history has not changed.\n minInvalidatedStateIndex = Infinity;\n break;\n }\n case JUMP_TO_ACTION:\n {\n // Jumps to a corresponding state to a specific action.\n // Useful when filtering actions.\n const index = stagedActionIds.indexOf(liftedAction.actionId);\n if (index !== -1) currentStateIndex = index;\n minInvalidatedStateIndex = Infinity;\n break;\n }\n case SWEEP:\n {\n // Forget any actions that are currently being skipped.\n stagedActionIds = difference(stagedActionIds, skippedActionIds);\n skippedActionIds = [];\n currentStateIndex = Math.min(currentStateIndex, stagedActionIds.length - 1);\n break;\n }\n case PERFORM_ACTION:\n {\n // Ignore action and return state as is if recording is locked\n if (isLocked) {\n return liftedState || initialLiftedState;\n }\n if (isPaused || liftedState && isActionFiltered(liftedState.computedStates[currentStateIndex], liftedAction, options.predicate, options.actionsSafelist, options.actionsBlocklist)) {\n // If recording is paused or if the action should be ignored, overwrite the last state\n // (corresponds to the pause action) and keep everything else as is.\n // This way, the app gets the new current state while the devtools\n // do not record another action.\n const lastState = computedStates[computedStates.length - 1];\n computedStates = [...computedStates.slice(0, -1), computeNextEntry(reducer, liftedAction.action, lastState.state, lastState.error, errorHandler)];\n minInvalidatedStateIndex = Infinity;\n break;\n }\n // Auto-commit as new actions come in.\n if (options.maxAge && stagedActionIds.length === options.maxAge) {\n commitExcessActions(1);\n }\n if (currentStateIndex === stagedActionIds.length - 1) {\n currentStateIndex++;\n }\n const actionId = nextActionId++;\n // Mutation! This is the hottest path, and we optimize on purpose.\n // It is safe because we set a new key in a cache dictionary.\n actionsById[actionId] = liftedAction;\n stagedActionIds = [...stagedActionIds, actionId];\n // Optimization: we know that only the new action needs computing.\n minInvalidatedStateIndex = stagedActionIds.length - 1;\n break;\n }\n case IMPORT_STATE:\n {\n // Completely replace everything.\n ({\n monitorState,\n actionsById,\n nextActionId,\n stagedActionIds,\n skippedActionIds,\n committedState,\n currentStateIndex,\n computedStates,\n isLocked,\n isPaused\n } = liftedAction.nextLiftedState);\n break;\n }\n case INIT:\n {\n // Always recompute states on hot reload and init.\n minInvalidatedStateIndex = 0;\n if (options.maxAge && stagedActionIds.length > options.maxAge) {\n // States must be recomputed before committing excess.\n computedStates = recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, errorHandler, isPaused);\n commitExcessActions(stagedActionIds.length - options.maxAge);\n // Avoid double computation.\n minInvalidatedStateIndex = Infinity;\n }\n break;\n }\n case UPDATE:\n {\n const stateHasErrors = computedStates.filter(state => state.error).length > 0;\n if (stateHasErrors) {\n // Recompute all states\n minInvalidatedStateIndex = 0;\n if (options.maxAge && stagedActionIds.length > options.maxAge) {\n // States must be recomputed before committing excess.\n computedStates = recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, errorHandler, isPaused);\n commitExcessActions(stagedActionIds.length - options.maxAge);\n // Avoid double computation.\n minInvalidatedStateIndex = Infinity;\n }\n } else {\n // If not paused/locked, add a new action to signal devtools-user\n // that there was a reducer update.\n if (!isPaused && !isLocked) {\n if (currentStateIndex === stagedActionIds.length - 1) {\n currentStateIndex++;\n }\n // Add a new action to only recompute state\n const actionId = nextActionId++;\n actionsById[actionId] = new PerformAction(liftedAction, +Date.now());\n stagedActionIds = [...stagedActionIds, actionId];\n minInvalidatedStateIndex = stagedActionIds.length - 1;\n computedStates = recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, errorHandler, isPaused);\n }\n // Recompute state history with latest reducer and update action\n computedStates = computedStates.map(cmp => ({\n ...cmp,\n state: reducer(cmp.state, RECOMPUTE_ACTION)\n }));\n currentStateIndex = stagedActionIds.length - 1;\n if (options.maxAge && stagedActionIds.length > options.maxAge) {\n commitExcessActions(stagedActionIds.length - options.maxAge);\n }\n // Avoid double computation.\n minInvalidatedStateIndex = Infinity;\n }\n break;\n }\n default:\n {\n // If the action is not recognized, it's a monitor action.\n // Optimization: a monitor action can't change history.\n minInvalidatedStateIndex = Infinity;\n break;\n }\n }\n computedStates = recomputeStates(computedStates, minInvalidatedStateIndex, reducer, committedState, actionsById, stagedActionIds, skippedActionIds, errorHandler, isPaused);\n monitorState = monitorReducer(monitorState, liftedAction);\n return {\n monitorState,\n actionsById,\n nextActionId,\n stagedActionIds,\n skippedActionIds,\n committedState,\n currentStateIndex,\n computedStates,\n isLocked,\n isPaused\n };\n };\n}\nclass StoreDevtools {\n constructor(dispatcher, actions$, reducers$, extension, scannedActions, errorHandler, initialState, config) {\n const liftedInitialState = liftInitialState(initialState, config.monitor);\n const liftReducer = liftReducerWith(initialState, liftedInitialState, errorHandler, config.monitor, config);\n const liftedAction$ = merge(merge(actions$.asObservable().pipe(skip(1)), extension.actions$).pipe(map(liftAction)), dispatcher, extension.liftedActions$).pipe(observeOn(queueScheduler));\n const liftedReducer$ = reducers$.pipe(map(liftReducer));\n const zoneConfig = injectZoneConfig(config.connectInZone);\n const liftedStateSubject = new ReplaySubject(1);\n this.liftedStateSubscription = liftedAction$.pipe(withLatestFrom(liftedReducer$),\n // The extension would post messages back outside of the Angular zone\n // because we call `connect()` wrapped with `runOutsideAngular`. We run change\n // detection only once at the end after all the required asynchronous tasks have\n // been processed (for instance, `setInterval` scheduled by the `timeout` operator).\n // We have to re-enter the Angular zone before the `scan` since it runs the reducer\n // which must be run within the Angular zone.\n emitInZone(zoneConfig), scan(({\n state: liftedState\n }, [action, reducer]) => {\n let reducedLiftedState = reducer(liftedState, action);\n // On full state update\n // If we have actions filters, we must filter completely our lifted state to be sync with the extension\n if (action.type !== PERFORM_ACTION && shouldFilterActions(config)) {\n reducedLiftedState = filterLiftedState(reducedLiftedState, config.predicate, config.actionsSafelist, config.actionsBlocklist);\n }\n // Extension should be sent the sanitized lifted state\n extension.notify(action, reducedLiftedState);\n return {\n state: reducedLiftedState,\n action\n };\n }, {\n state: liftedInitialState,\n action: null\n })).subscribe(({\n state,\n action\n }) => {\n liftedStateSubject.next(state);\n if (action.type === PERFORM_ACTION) {\n const unliftedAction = action.action;\n scannedActions.next(unliftedAction);\n }\n });\n this.extensionStartSubscription = extension.start$.pipe(emitInZone(zoneConfig)).subscribe(() => {\n this.refresh();\n });\n const liftedState$ = liftedStateSubject.asObservable();\n const state$ = liftedState$.pipe(map(unliftState));\n Object.defineProperty(state$, 'state', {\n value: toSignal(state$, {\n manualCleanup: true,\n requireSync: true\n })\n });\n this.dispatcher = dispatcher;\n this.liftedState = liftedState$;\n this.state = state$;\n }\n ngOnDestroy() {\n // Even though the store devtools plugin is recommended to be\n // used only in development mode, it can still cause a memory leak\n // in microfrontend applications that are being created and destroyed\n // multiple times during development. This results in excessive memory\n // consumption, as it prevents entire apps from being garbage collected.\n this.liftedStateSubscription.unsubscribe();\n this.extensionStartSubscription.unsubscribe();\n }\n dispatch(action) {\n this.dispatcher.next(action);\n }\n next(action) {\n this.dispatcher.next(action);\n }\n error(error) {}\n complete() {}\n performAction(action) {\n this.dispatch(new PerformAction(action, +Date.now()));\n }\n refresh() {\n this.dispatch(new Refresh());\n }\n reset() {\n this.dispatch(new Reset(+Date.now()));\n }\n rollback() {\n this.dispatch(new Rollback(+Date.now()));\n }\n commit() {\n this.dispatch(new Commit(+Date.now()));\n }\n sweep() {\n this.dispatch(new Sweep());\n }\n toggleAction(id) {\n this.dispatch(new ToggleAction(id));\n }\n jumpToAction(actionId) {\n this.dispatch(new JumpToAction(actionId));\n }\n jumpToState(index) {\n this.dispatch(new JumpToState(index));\n }\n importState(nextLiftedState) {\n this.dispatch(new ImportState(nextLiftedState));\n }\n lockChanges(status) {\n this.dispatch(new LockChanges(status));\n }\n pauseRecording(status) {\n this.dispatch(new PauseRecording(status));\n }\n /** @nocollapse */\n static {\n this.ɵfac = function StoreDevtools_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || StoreDevtools)(i0.ɵɵinject(DevtoolsDispatcher), i0.ɵɵinject(i2.ActionsSubject), i0.ɵɵinject(i2.ReducerObservable), i0.ɵɵinject(DevtoolsExtension), i0.ɵɵinject(i2.ScannedActionsSubject), i0.ɵɵinject(i0.ErrorHandler), i0.ɵɵinject(INITIAL_STATE), i0.ɵɵinject(STORE_DEVTOOLS_CONFIG));\n };\n }\n /** @nocollapse */\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: StoreDevtools,\n factory: StoreDevtools.ɵfac\n });\n }\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(StoreDevtools, [{\n type: Injectable\n }], () => [{\n type: DevtoolsDispatcher\n }, {\n type: i2.ActionsSubject\n }, {\n type: i2.ReducerObservable\n }, {\n type: DevtoolsExtension\n }, {\n type: i2.ScannedActionsSubject\n }, {\n type: i0.ErrorHandler\n }, {\n type: undefined,\n decorators: [{\n type: Inject,\n args: [INITIAL_STATE]\n }]\n }, {\n type: StoreDevtoolsConfig,\n decorators: [{\n type: Inject,\n args: [STORE_DEVTOOLS_CONFIG]\n }]\n }], null);\n})();\n/**\n * If the devtools extension is connected out of the Angular zone,\n * this operator will emit all events within the zone.\n */\nfunction emitInZone({\n ngZone,\n connectInZone\n}) {\n return source => connectInZone ? new Observable(subscriber => source.subscribe({\n next: value => ngZone.run(() => subscriber.next(value)),\n error: error => ngZone.run(() => subscriber.error(error)),\n complete: () => ngZone.run(() => subscriber.complete())\n })) : source;\n}\nconst IS_EXTENSION_OR_MONITOR_PRESENT = new InjectionToken('@ngrx/store-devtools Is Devtools Extension or Monitor Present');\nfunction createIsExtensionOrMonitorPresent(extension, config) {\n return Boolean(extension) || config.monitor !== noMonitor;\n}\nfunction createReduxDevtoolsExtension() {\n const extensionKey = '__REDUX_DEVTOOLS_EXTENSION__';\n if (typeof window === 'object' && typeof window[extensionKey] !== 'undefined') {\n return window[extensionKey];\n } else {\n return null;\n }\n}\n/**\n * Provides developer tools and instrumentation for `Store`.\n *\n * @usageNotes\n *\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideStoreDevtools({\n * maxAge: 25,\n * logOnly: !isDevMode(),\n * }),\n * ],\n * });\n * ```\n */\nfunction provideStoreDevtools(options = {}) {\n return makeEnvironmentProviders([DevtoolsExtension, DevtoolsDispatcher, StoreDevtools, {\n provide: INITIAL_OPTIONS,\n useValue: options\n }, {\n provide: IS_EXTENSION_OR_MONITOR_PRESENT,\n deps: [REDUX_DEVTOOLS_EXTENSION, STORE_DEVTOOLS_CONFIG],\n useFactory: createIsExtensionOrMonitorPresent\n }, {\n provide: REDUX_DEVTOOLS_EXTENSION,\n useFactory: createReduxDevtoolsExtension\n }, {\n provide: STORE_DEVTOOLS_CONFIG,\n deps: [INITIAL_OPTIONS],\n useFactory: createConfig\n }, {\n provide: StateObservable,\n deps: [StoreDevtools],\n useFactory: createStateObservable\n }, {\n provide: ReducerManagerDispatcher,\n useExisting: DevtoolsDispatcher\n }]);\n}\nfunction createStateObservable(devtools) {\n return devtools.state;\n}\nclass StoreDevtoolsModule {\n static instrument(options = {}) {\n return {\n ngModule: StoreDevtoolsModule,\n providers: [provideStoreDevtools(options)]\n };\n }\n /** @nocollapse */\n static {\n this.ɵfac = function StoreDevtoolsModule_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || StoreDevtoolsModule)();\n };\n }\n /** @nocollapse */\n static {\n this.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: StoreDevtoolsModule\n });\n }\n /** @nocollapse */\n static {\n this.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n }\n}\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(StoreDevtoolsModule, [{\n type: NgModule,\n args: [{}]\n }], null, null);\n})();\n\n/**\n * DO NOT EDIT\n *\n * This file is automatically generated at build\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { INITIAL_OPTIONS, RECOMPUTE, REDUX_DEVTOOLS_EXTENSION, StoreDevtools, StoreDevtoolsConfig, StoreDevtoolsModule, provideStoreDevtools };\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n templateUrl: './maintenance.component.html'\r\n})\r\nexport class MaintenanceComponent { }\r\n","<div class=\"container-fluid\">\r\n <div class=\"row justify-content-center mt-5\">\r\n <div class=\"col-auto\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <span class=\"fa-layers fa-fw fa-10x\" style=\"color: #003b5c;\">\r\n <i class=\"fal fa-triangle\"></i>\r\n <i class=\"fas fa-tools\" data-fa-transform=\"shrink-10 down-2\"></i>\r\n </span>\r\n <h3 class=\"card-title my-3\">Vedlikehold og oppdatering</h3>\r\n <p class=\"card-text\">Kalkulatoren er midlertidig utilgjengelig på grunn av vedlikehold og oppdatering.</p>\r\n <p class=\"card-text\">Ved spørsmål, ta kontakt med fagsupport.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { MaintenanceComponent } from './maintenance/maintenance.component';\r\n\r\n/* eslint-disable max-len */\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n loadChildren: () => import('./home/home.module').then(m => m.HomeModule),\r\n pathMatch: 'full',\r\n },\r\n\r\n {\r\n path: 'agp',\r\n loadChildren: () =>\r\n import('./agp-calculator/agp-calculator.module').then(m => m.AgpCalculatorModule),\r\n },\r\n {\r\n path: 'beregning-av-sykepenger',\r\n loadChildren: () =>\r\n import('./sickness-benefit-agp/sickness-benefit-agp.module').then(\r\n m => m.SicknessBenefitAGPModule\r\n ),\r\n },\r\n { path: 'maltidstrekkalkulator-2018', redirectTo: '/maltidstrekkalkulator' },\r\n { path: 'maltidstrekkalkulator-2019', redirectTo: '/maltidstrekkalkulator' },\r\n { path: 'maltidstrekkalkulator-2020', redirectTo: '/maltidstrekkalkulator' },\r\n {\r\n path: 'maltidstrekkalkulator',\r\n loadChildren: () =>\r\n import('./meal-calculator/meal-calculator.module').then(m => m.MealCalculatorModule),\r\n },\r\n {\r\n path: 'valutakalkulator',\r\n loadChildren: () =>\r\n import('./currency-calculator/currency-calculator.module').then(\r\n m => m.CurrencyCalculatorModule\r\n ),\r\n },\r\n {\r\n path: 'dager-mellom-datoer',\r\n loadChildren: () =>\r\n import('./days-between-dates/days-between-dates.module').then(m => m.DaysBetweenDatesModule),\r\n },\r\n\r\n { path: 'mva-kalkulator', redirectTo: '/mva' },\r\n {\r\n path: 'mva',\r\n loadChildren: () =>\r\n import('./vat-calculator/vat-calculator.module').then(m => m.VatCalculatorModule),\r\n },\r\n\r\n { path: 'rente-kalkulator', redirectTo: '/rente' },\r\n {\r\n path: 'rente',\r\n loadChildren: () =>\r\n import('./interest-calculator/interest-calculator.module').then(\r\n m => m.InterestCalculatorModule\r\n ),\r\n },\r\n\r\n { path: 'forsinkelsesrente-kalkulator', redirectTo: '/forsinkelsesrente' },\r\n {\r\n path: 'forsinkelsesrente',\r\n loadChildren: () =>\r\n import('./late-payment-interest/late-payment-interest.module').then(\r\n m => m.LatePaymentInterestModule\r\n ),\r\n },\r\n\r\n {\r\n path: 'summerings-og-dokumentasjonsstrimmel',\r\n loadChildren: () =>\r\n import('./summary-and-documentation-strip/summary-and-documentation-strip.module').then(\r\n m => m.SummaryAndDocumentationStripModule\r\n ),\r\n },\r\n\r\n {\r\n path: 'konsumprisindeks',\r\n loadChildren: () =>\r\n import('./consumer-price-index/consumer-price-index.module').then(\r\n m => m.ConsumerPriceIndexModule\r\n ),\r\n },\r\n\r\n {\r\n path: 'naverdi',\r\n loadChildren: () =>\r\n import('./net-present-value/net-present-value.module').then(m => m.NPVModule),\r\n },\r\n\r\n {\r\n path: 'lanekalkulator',\r\n loadChildren: () =>\r\n import('./loan-calculator/loan-calculator.module').then(m => m.LoanCalculatorModule),\r\n },\r\n\r\n {\r\n path: 'utbytte-vs-lonn',\r\n loadChildren: () =>\r\n import('./dividend-vs-salary/dividend-vs-salary.module').then(m => m.DividendVsSalaryModule),\r\n },\r\n\r\n {\r\n path: 'firmabil',\r\n loadChildren: () => import('./company-car/company-car.module').then(m => m.CompanyCarModule),\r\n },\r\n\r\n { path: '**', redirectTo: '/' },\r\n\r\n { path: 'vedlikehold', component: MaintenanceComponent },\r\n];\r\n/* eslint-enable max-len */\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes)],\r\n exports: [RouterModule],\r\n})\r\nexport class AppRoutingModule {}\r\n","export const licenseKey =\r\n 'ewogICJmb3JtYXQiOiAxLAogICJjdXN0b21lcklkIjogIjNmMDg5MTYwLTVjYTgtNDA4Yy05OTk5LTljNTVkMjIyYjliYiIsCiAgIm1heFZlcnNpb25BbGxvd2VkIjogMjQxCn0=.yIm6ZzlxN6pxNPP/RlBlisQSqWI9MLwuHflJ3r+tT0QuVfsTGPgFdQ3/+Y31ghHGTGFHBTcuadC0ZQtRiGLqaNi78niSFC4eVGUzn3F82pvT3bAoYWObGs6f5qt5eMbP9Ns+lQ==';\r\n","export enum OneTrustConsentGroup {\r\n StrictlyNecessary = 'C0001',\r\n Analytical = 'C0002',\r\n Functional = 'C0003',\r\n Marketing = 'C0004',\r\n}\r\n","/*!\n * Core functionality for Snowplow JavaScript trackers v3.24.6 (http://bit.ly/sp-js)\n * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * Licensed under BSD-3-Clause\n */\n\nimport { __spreadArray, __assign } from 'tslib';\nimport { v4 } from 'uuid';\nvar version$1 = \"3.24.6\";\n\n/*\n * Copyright (c) 2013 Kevin van Zonneveld (http://kvz.io)\n * and Contributors (http://phpjs.org/authors)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n * of the Software, and to permit persons to whom the Software is furnished to do\n * so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n/**\n * Decodes a url safe Base 64 encoded string\n * @remarks See: {@link http://tools.ietf.org/html/rfc4648#page-7}\n * @param data - String to decode\n * @returns The decoded string\n */\nfunction base64urldecode(data) {\n if (!data) {\n return data;\n }\n var padding = 4 - data.length % 4;\n switch (padding) {\n case 2:\n data += '==';\n break;\n case 3:\n data += '=';\n break;\n }\n var b64Data = data.replace(/-/g, '+').replace(/_/g, '/');\n return base64decode(b64Data);\n}\n/**\n * Encodes a string into a url safe Base 64 encoded string\n * @remarks See: {@link http://tools.ietf.org/html/rfc4648#page-7}\n * @param data - String to encode\n * @returns The url safe Base 64 string\n */\nfunction base64urlencode(data) {\n if (!data) {\n return data;\n }\n var enc = base64encode(data);\n return enc.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\nvar b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n/**\n * Encode string as base64.\n * Any type can be passed, but will be stringified\n *\n * @param data - string to encode\n * @returns base64-encoded string\n */\nfunction base64encode(data) {\n // discuss at: http://phpjs.org/functions/base64_encode/\n // original by: Tyler Akins (http://rumkin.com)\n // improved by: Bayron Guevara\n // improved by: Thunder.m\n // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // improved by: Rafał Kukawski (http://kukawski.pl)\n // bugfixed by: Pellentesque Malesuada\n // example 1: base64_encode('Kevin van Zonneveld');\n // returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='\n // example 2: base64_encode('a');\n // returns 2: 'YQ=='\n // example 3: base64_encode('✓ à la mode');\n // returns 3: '4pyTIMOgIGxhIG1vZGU='\n var o1,\n o2,\n o3,\n h1,\n h2,\n h3,\n h4,\n bits,\n i = 0,\n ac = 0;\n var tmp_arr = [];\n if (!data) {\n return data;\n }\n data = unescape(encodeURIComponent(data));\n do {\n // pack three octets into four hexets\n o1 = data.charCodeAt(i++);\n o2 = data.charCodeAt(i++);\n o3 = data.charCodeAt(i++);\n bits = o1 << 16 | o2 << 8 | o3;\n h1 = bits >> 18 & 0x3f;\n h2 = bits >> 12 & 0x3f;\n h3 = bits >> 6 & 0x3f;\n h4 = bits & 0x3f;\n // use hexets to index into b64, and append result to encoded string\n tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n } while (i < data.length);\n var enc = tmp_arr.join('');\n var r = data.length % 3;\n return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);\n}\n/**\n * Decode base64 to string\n *\n * @param data - base64 to string\n * @returns decoded string\n */\nfunction base64decode(encodedData) {\n // discuss at: http://locutus.io/php/base64_decode/\n // original by: Tyler Akins (http://rumkin.com)\n // improved by: Thunder.m\n // improved by: Kevin van Zonneveld (http://kvz.io)\n // improved by: Kevin van Zonneveld (http://kvz.io)\n // input by: Aman Gupta\n // input by: Brett Zamir (http://brett-zamir.me)\n // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)\n // bugfixed by: Pellentesque Malesuada\n // bugfixed by: Kevin van Zonneveld (http://kvz.io)\n // improved by: Indigo744\n // example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==')\n // returns 1: 'Kevin van Zonneveld'\n // example 2: base64_decode('YQ==')\n // returns 2: 'a'\n // example 3: base64_decode('4pyTIMOgIGxhIG1vZGU=')\n // returns 3: '✓ à la mode'\n // decodeUTF8string()\n // Internal function to decode properly UTF8 string\n // Adapted from Solution #1 at https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding\n var decodeUTF8string = function (str) {\n // Going backwards: from bytestream, to percent-encoding, to original string.\n return decodeURIComponent(str.split('').map(function (c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n };\n var o1,\n o2,\n o3,\n h1,\n h2,\n h3,\n h4,\n bits,\n i = 0,\n ac = 0,\n dec = '';\n var tmpArr = [];\n if (!encodedData) {\n return encodedData;\n }\n encodedData += '';\n do {\n // unpack four hexets into three octets using index points in b64\n h1 = b64.indexOf(encodedData.charAt(i++));\n h2 = b64.indexOf(encodedData.charAt(i++));\n h3 = b64.indexOf(encodedData.charAt(i++));\n h4 = b64.indexOf(encodedData.charAt(i++));\n bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;\n o1 = bits >> 16 & 0xff;\n o2 = bits >> 8 & 0xff;\n o3 = bits & 0xff;\n if (h3 === 64) {\n tmpArr[ac++] = String.fromCharCode(o1);\n } else if (h4 === 64) {\n tmpArr[ac++] = String.fromCharCode(o1, o2);\n } else {\n tmpArr[ac++] = String.fromCharCode(o1, o2, o3);\n }\n } while (i < encodedData.length);\n dec = tmpArr.join('');\n return decodeUTF8string(dec.replace(/\\0+$/, ''));\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nfunction payloadBuilder() {\n var dict = {},\n allJson = [],\n jsonForProcessing = [],\n contextEntitiesForProcessing = [];\n var processor;\n var add = function (key, value) {\n if (value != null && value !== '') {\n // null also checks undefined\n dict[key] = value;\n }\n };\n var addDict = function (dict) {\n for (var key in dict) {\n if (Object.prototype.hasOwnProperty.call(dict, key)) {\n add(key, dict[key]);\n }\n }\n };\n var addJson = function (keyIfEncoded, keyIfNotEncoded, json) {\n if (json && isNonEmptyJson(json)) {\n var jsonWithKeys = {\n keyIfEncoded: keyIfEncoded,\n keyIfNotEncoded: keyIfNotEncoded,\n json: json\n };\n jsonForProcessing.push(jsonWithKeys);\n allJson.push(jsonWithKeys);\n }\n };\n var addContextEntity = function (entity) {\n contextEntitiesForProcessing.push(entity);\n };\n return {\n add: add,\n addDict: addDict,\n addJson: addJson,\n addContextEntity: addContextEntity,\n getPayload: function () {\n return dict;\n },\n getJson: function () {\n return allJson;\n },\n withJsonProcessor: function (jsonProcessor) {\n processor = jsonProcessor;\n },\n build: function () {\n processor === null || processor === void 0 ? void 0 : processor(this, jsonForProcessing, contextEntitiesForProcessing);\n return dict;\n }\n };\n}\n/**\n * A helper to build a Snowplow request from a set of name-value pairs, provided using the add methods.\n * Will base64 encode JSON, if desired, on build\n *\n * @returns The request builder, with add and build methods\n */\nfunction payloadJsonProcessor(encodeBase64) {\n return function (payloadBuilder, jsonForProcessing, contextEntitiesForProcessing) {\n var add = function (json, keyIfEncoded, keyIfNotEncoded) {\n var str = JSON.stringify(json);\n if (encodeBase64) {\n payloadBuilder.add(keyIfEncoded, base64urlencode(str));\n } else {\n payloadBuilder.add(keyIfNotEncoded, str);\n }\n };\n var getContextFromPayload = function () {\n var payload = payloadBuilder.getPayload();\n if (encodeBase64 ? payload.cx : payload.co) {\n return JSON.parse(encodeBase64 ? base64urldecode(payload.cx) : payload.co);\n }\n return undefined;\n };\n var combineContexts = function (originalContext, newContext) {\n var context = originalContext || getContextFromPayload();\n if (context) {\n context.data = context.data.concat(newContext.data);\n } else {\n context = newContext;\n }\n return context;\n };\n var context = undefined;\n for (var _i = 0, jsonForProcessing_1 = jsonForProcessing; _i < jsonForProcessing_1.length; _i++) {\n var json = jsonForProcessing_1[_i];\n if (json.keyIfEncoded === 'cx') {\n context = combineContexts(context, json.json);\n } else {\n add(json.json, json.keyIfEncoded, json.keyIfNotEncoded);\n }\n }\n jsonForProcessing.length = 0;\n if (contextEntitiesForProcessing.length) {\n var newContext = {\n schema: 'iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0',\n data: __spreadArray([], contextEntitiesForProcessing, true)\n };\n context = combineContexts(context, newContext);\n contextEntitiesForProcessing.length = 0;\n }\n if (context) {\n add(context, 'cx', 'co');\n }\n };\n}\n/**\n * Is property a non-empty JSON?\n * @param property - Checks if object is non-empty json\n */\nfunction isNonEmptyJson(property) {\n if (!isJson(property)) {\n return false;\n }\n for (var key in property) {\n if (Object.prototype.hasOwnProperty.call(property, key)) {\n return true;\n }\n }\n return false;\n}\n/**\n * Is property a JSON?\n * @param property - Checks if object is json\n */\nfunction isJson(property) {\n return typeof property !== 'undefined' && property !== null && (property.constructor === {}.constructor || property.constructor === [].constructor);\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nvar label = 'Snowplow: ';\nvar LOG_LEVEL;\n(function (LOG_LEVEL) {\n LOG_LEVEL[LOG_LEVEL[\"none\"] = 0] = \"none\";\n LOG_LEVEL[LOG_LEVEL[\"error\"] = 1] = \"error\";\n LOG_LEVEL[LOG_LEVEL[\"warn\"] = 2] = \"warn\";\n LOG_LEVEL[LOG_LEVEL[\"debug\"] = 3] = \"debug\";\n LOG_LEVEL[LOG_LEVEL[\"info\"] = 4] = \"info\";\n})(LOG_LEVEL || (LOG_LEVEL = {}));\nvar LOG = logger();\nfunction logger(logLevel) {\n if (logLevel === void 0) {\n logLevel = LOG_LEVEL.warn;\n }\n function setLogLevel(level) {\n if (LOG_LEVEL[level]) {\n logLevel = level;\n } else {\n logLevel = LOG_LEVEL.warn;\n }\n }\n /**\n * Log errors, with or without error object\n */\n function error(message, error) {\n var extraParams = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n extraParams[_i - 2] = arguments[_i];\n }\n if (logLevel >= LOG_LEVEL.error && typeof console !== 'undefined') {\n var logMsg = label + message + '\\n';\n if (error) {\n console.error.apply(console, __spreadArray([logMsg + '\\n', error], extraParams, false));\n } else {\n console.error.apply(console, __spreadArray([logMsg], extraParams, false));\n }\n }\n }\n /**\n * Log warnings, with or without error object\n */\n function warn(message, error) {\n var extraParams = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n extraParams[_i - 2] = arguments[_i];\n }\n if (logLevel >= LOG_LEVEL.warn && typeof console !== 'undefined') {\n var logMsg = label + message;\n if (error) {\n console.warn.apply(console, __spreadArray([logMsg + '\\n', error], extraParams, false));\n } else {\n console.warn.apply(console, __spreadArray([logMsg], extraParams, false));\n }\n }\n }\n /**\n * Log debug messages\n */\n function debug(message) {\n var extraParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n extraParams[_i - 1] = arguments[_i];\n }\n if (logLevel >= LOG_LEVEL.debug && typeof console !== 'undefined') {\n console.debug.apply(console, __spreadArray([label + message], extraParams, false));\n }\n }\n /**\n * Log info messages\n */\n function info(message) {\n var extraParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n extraParams[_i - 1] = arguments[_i];\n }\n if (logLevel >= LOG_LEVEL.info && typeof console !== 'undefined') {\n console.info.apply(console, __spreadArray([label + message], extraParams, false));\n }\n }\n return {\n setLogLevel: setLogLevel,\n warn: warn,\n error: error,\n debug: debug,\n info: info\n };\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Contains helper functions to aid in the addition and removal of Global Contexts\n */\nfunction globalContexts() {\n var globalPrimitives = [];\n var conditionalProviders = [];\n /**\n * Returns all applicable global contexts for a specified event\n * @param event - The event to check for applicable global contexts for\n * @returns An array of contexts\n */\n var assembleAllContexts = function (event) {\n var eventSchema = getUsefulSchema(event);\n var eventType = getEventType(event);\n var contexts = [];\n var generatedPrimitives = generatePrimitives(globalPrimitives, event, eventType, eventSchema);\n contexts.push.apply(contexts, generatedPrimitives);\n var generatedConditionals = generateConditionals(conditionalProviders, event, eventType, eventSchema);\n contexts.push.apply(contexts, generatedConditionals);\n return contexts;\n };\n return {\n getGlobalPrimitives: function () {\n return globalPrimitives;\n },\n getConditionalProviders: function () {\n return conditionalProviders;\n },\n addGlobalContexts: function (contexts) {\n var acceptedConditionalContexts = [];\n var acceptedContextPrimitives = [];\n for (var _i = 0, contexts_1 = contexts; _i < contexts_1.length; _i++) {\n var context = contexts_1[_i];\n if (isConditionalContextProvider(context)) {\n acceptedConditionalContexts.push(context);\n } else if (isContextPrimitive(context)) {\n acceptedContextPrimitives.push(context);\n }\n }\n globalPrimitives = globalPrimitives.concat(acceptedContextPrimitives);\n conditionalProviders = conditionalProviders.concat(acceptedConditionalContexts);\n },\n clearGlobalContexts: function () {\n conditionalProviders = [];\n globalPrimitives = [];\n },\n removeGlobalContexts: function (contexts) {\n var _loop_1 = function (context) {\n if (isConditionalContextProvider(context)) {\n conditionalProviders = conditionalProviders.filter(function (item) {\n return !compareProvider(context, item);\n });\n } else if (isContextPrimitive(context)) {\n globalPrimitives = globalPrimitives.filter(function (item) {\n return !compareProvider(context, item);\n });\n }\n };\n for (var _i = 0, contexts_2 = contexts; _i < contexts_2.length; _i++) {\n var context = contexts_2[_i];\n _loop_1(context);\n }\n },\n getApplicableContexts: function (event) {\n return assembleAllContexts(event);\n }\n };\n}\nfunction pluginContexts(plugins) {\n /**\n * Add common contexts to every event\n *\n * @param array - additionalContexts List of user-defined contexts\n * @returns userContexts combined with commonContexts\n */\n return {\n addPluginContexts: function (additionalContexts) {\n var combinedContexts = additionalContexts ? __spreadArray([], additionalContexts, true) : [];\n plugins.forEach(function (plugin) {\n try {\n if (plugin.contexts) {\n combinedContexts.push.apply(combinedContexts, plugin.contexts());\n }\n } catch (ex) {\n LOG.error('Error adding plugin contexts', ex);\n }\n });\n return combinedContexts;\n }\n };\n}\n/**\n * Find dynamic context generating functions and return their results to be merged into the static contexts\n * Combine an array of unchanging contexts with the result of a context-creating function\n *\n * @param dynamicOrStaticContexts - Array of custom context Objects or custom context generating functions\n * @param Parameters - to pass to dynamic context callbacks\n * @returns An array of Self Describing JSON context\n */\nfunction resolveDynamicContext(dynamicOrStaticContexts) {\n var _a;\n var extraParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n extraParams[_i - 1] = arguments[_i];\n }\n return (_a = dynamicOrStaticContexts === null || dynamicOrStaticContexts === void 0 ? void 0 : dynamicOrStaticContexts.map(function (context) {\n if (typeof context === 'function') {\n try {\n return context.apply(void 0, extraParams);\n } catch (e) {\n //TODO: provide warning\n return undefined;\n }\n } else {\n return context;\n }\n }).filter(Boolean)) !== null && _a !== void 0 ? _a : [];\n}\n/**\n * Slices a schema into its composite parts. Useful for ruleset filtering.\n * @param input - A schema string\n * @returns The vendor, schema name, major, minor and patch information of a schema string\n */\nfunction getSchemaParts(input) {\n var re = new RegExp('^iglu:([a-zA-Z0-9-_.]+)/([a-zA-Z0-9-_]+)/jsonschema/([1-9][0-9]*)-(0|[1-9][0-9]*)-(0|[1-9][0-9]*)$');\n var matches = re.exec(input);\n if (matches !== null) return matches.slice(1, 6);\n return undefined;\n}\n/**\n * Validates the vendor section of a schema string contains allowed wildcard values\n * @param parts - Array of parts from a schema string\n * @returns Whether the vendor validation parts are a valid combination\n */\nfunction validateVendorParts(parts) {\n if (parts[0] === '*' || parts[1] === '*') {\n return false; // no wildcard in first or second part\n }\n if (parts.slice(2).length > 0) {\n var asterisk = false;\n for (var _i = 0, _a = parts.slice(2); _i < _a.length; _i++) {\n var part = _a[_i];\n if (part === '*')\n // mark when we've found a wildcard\n asterisk = true;else if (asterisk)\n // invalid if alpha parts come after wildcard\n return false;\n }\n return true;\n } else if (parts.length == 2) return true;\n return false;\n}\n/**\n * Validates the vendor part of a schema string is valid for a rule set\n * @param input - Vendor part of a schema string\n * @returns Whether the vendor validation string is valid\n */\nfunction validateVendor(input) {\n var parts = input.split('.');\n if (parts && parts.length > 1) return validateVendorParts(parts);\n return false;\n}\n/**\n * Checks for validity of input and returns all the sections of a schema string that are used to match rules in a ruleset\n * @param input - A Schema string\n * @returns The sections of a schema string that are used to match rules in a ruleset\n */\nfunction getRuleParts(input) {\n var re = new RegExp('^iglu:((?:(?:[a-zA-Z0-9-_]+|\\\\*).)+(?:[a-zA-Z0-9-_]+|\\\\*))/([a-zA-Z0-9-_.]+|\\\\*)/jsonschema/([1-9][0-9]*|\\\\*)-(0|[1-9][0-9]*|\\\\*)-(0|[1-9][0-9]*|\\\\*)$');\n var matches = re.exec(input);\n if (matches !== null && validateVendor(matches[1])) return matches.slice(1, 6);\n return undefined;\n}\n/**\n * Ensures the rules specified in a schema string of a ruleset are valid\n * @param input - A Schema string\n * @returns if there rule is valid\n */\nfunction isValidRule(input) {\n var ruleParts = getRuleParts(input);\n if (ruleParts) {\n var vendor = ruleParts[0];\n return ruleParts.length === 5 && validateVendor(vendor);\n }\n return false;\n}\n/**\n * Check if a variable is an Array containing only strings\n * @param input - The variable to validate\n * @returns True if the input is an array containing only strings\n */\nfunction isStringArray(input) {\n return Array.isArray(input) && input.every(function (x) {\n return typeof x === 'string';\n });\n}\n/**\n * Validates whether a rule set is an array of valid ruleset strings\n * @param input - The Array of rule set arguments\n * @returns True is the input is an array of valid rules\n */\nfunction isValidRuleSetArg(input) {\n if (isStringArray(input)) return input.every(function (x) {\n return isValidRule(x);\n });else if (typeof input === 'string') return isValidRule(input);\n return false;\n}\n/**\n * Check if a variable is a valid, non-empty Self Describing JSON\n * @param input - The variable to validate\n * @returns True if a valid Self Describing JSON\n */\nfunction isSelfDescribingJson(input) {\n var sdj = input;\n if (isNonEmptyJson(sdj)) if ('schema' in sdj && 'data' in sdj) return typeof sdj.schema === 'string' && typeof sdj.data === 'object';\n return false;\n}\n/**\n * Validates if the input object contains the expected properties of a ruleset\n * @param input - The object containing a rule set\n * @returns True if a valid rule set\n */\nfunction isRuleSet(input) {\n var ruleSet = input;\n var ruleCount = 0;\n if (input != null && typeof input === 'object' && !Array.isArray(input)) {\n if (Object.prototype.hasOwnProperty.call(ruleSet, 'accept')) {\n if (isValidRuleSetArg(ruleSet['accept'])) {\n ruleCount += 1;\n } else {\n return false;\n }\n }\n if (Object.prototype.hasOwnProperty.call(ruleSet, 'reject')) {\n if (isValidRuleSetArg(ruleSet['reject'])) {\n ruleCount += 1;\n } else {\n return false;\n }\n }\n // if either 'reject' or 'accept' or both exists,\n // we have a valid ruleset\n return ruleCount > 0 && ruleCount <= 2;\n }\n return false;\n}\n/**\n * Validates if the function can be a valid context generator function\n * @param input - The function to be validated\n */\nfunction isContextCallbackFunction(input) {\n return typeof input === 'function' && input.length <= 1;\n}\n/**\n * Validates if the function can be a valid context primitive function or self describing json\n * @param input - The function or orbject to be validated\n * @returns True if either a Context Generator or Self Describing JSON\n */\nfunction isContextPrimitive(input) {\n return isContextCallbackFunction(input) || isSelfDescribingJson(input);\n}\n/**\n * Validates if an array is a valid shape to be a Filter Provider\n * @param input - The Array of Context filter callbacks\n */\nfunction isFilterProvider(input) {\n if (Array.isArray(input)) {\n if (input.length === 2) {\n if (Array.isArray(input[1])) {\n return isContextCallbackFunction(input[0]) && input[1].every(isContextPrimitive);\n }\n return isContextCallbackFunction(input[0]) && isContextPrimitive(input[1]);\n }\n }\n return false;\n}\n/**\n * Validates if an array is a valid shape to be an array of rule sets\n * @param input - The Array of Rule Sets\n */\nfunction isRuleSetProvider(input) {\n if (Array.isArray(input) && input.length === 2) {\n if (!isRuleSet(input[0])) return false;\n if (Array.isArray(input[1])) return input[1].every(isContextPrimitive);\n return isContextPrimitive(input[1]);\n }\n return false;\n}\n/**\n * Checks if an input array is either a filter provider or a rule set provider\n * @param input - An array of filter providers or rule set providers\n * @returns Whether the array is a valid {@link ConditionalContextProvider}\n */\nfunction isConditionalContextProvider(input) {\n return isFilterProvider(input) || isRuleSetProvider(input);\n}\n/**\n * Checks if a given schema matches any rules within the provided rule set\n * @param ruleSet - The rule set containing rules to match schema against\n * @param schema - The schema to be matched against the rule set\n */\nfunction matchSchemaAgainstRuleSet(ruleSet, schema) {\n var rejectCount = 0;\n var acceptCount = 0;\n var acceptRules = ruleSet['accept'];\n if (Array.isArray(acceptRules)) {\n if (ruleSet.accept.some(function (rule) {\n return matchSchemaAgainstRule(rule, schema);\n })) {\n acceptCount++;\n }\n } else if (typeof acceptRules === 'string') {\n if (matchSchemaAgainstRule(acceptRules, schema)) {\n acceptCount++;\n }\n }\n var rejectRules = ruleSet['reject'];\n if (Array.isArray(rejectRules)) {\n if (ruleSet.reject.some(function (rule) {\n return matchSchemaAgainstRule(rule, schema);\n })) {\n rejectCount++;\n }\n } else if (typeof rejectRules === 'string') {\n if (matchSchemaAgainstRule(rejectRules, schema)) {\n rejectCount++;\n }\n }\n if (acceptCount > 0 && rejectCount === 0) {\n return true;\n } else if (acceptCount === 0 && rejectCount > 0) {\n return false;\n }\n return false;\n}\n/**\n * Checks if a given schema matches a specific rule from a rule set\n * @param rule - The rule to match schema against\n * @param schema - The schema to be matched against the rule\n */\nfunction matchSchemaAgainstRule(rule, schema) {\n if (!isValidRule(rule)) return false;\n var ruleParts = getRuleParts(rule);\n var schemaParts = getSchemaParts(schema);\n if (ruleParts && schemaParts) {\n if (!matchVendor(ruleParts[0], schemaParts[0])) return false;\n for (var i = 1; i < 5; i++) {\n if (!matchPart(ruleParts[i], schemaParts[i])) return false;\n }\n return true; // if it hasn't failed, it passes\n }\n return false;\n}\nfunction matchVendor(rule, vendor) {\n // rule and vendor must have same number of elements\n var vendorParts = vendor.split('.');\n var ruleParts = rule.split('.');\n if (vendorParts && ruleParts) {\n if (vendorParts.length !== ruleParts.length) return false;\n for (var i = 0; i < ruleParts.length; i++) {\n if (!matchPart(vendorParts[i], ruleParts[i])) return false;\n }\n return true;\n }\n return false;\n}\nfunction matchPart(rule, schema) {\n // parts should be the string nested between slashes in the URI: /example/\n return rule && schema && rule === '*' || rule === schema;\n}\n// Returns the \"useful\" schema, i.e. what would someone want to use to identify events.\n// For some events this is the 'e' property but for unstructured events, this is the\n// 'schema' from the 'ue_px' field.\nfunction getUsefulSchema(sb) {\n var eventJson = sb.getJson();\n for (var _i = 0, eventJson_1 = eventJson; _i < eventJson_1.length; _i++) {\n var json = eventJson_1[_i];\n if (json.keyIfEncoded === 'ue_px' && typeof json.json['data'] === 'object') {\n var schema = json.json['data']['schema'];\n if (typeof schema == 'string') {\n return schema;\n }\n }\n }\n return '';\n}\nfunction getEventType(payloadBuilder) {\n var eventType = payloadBuilder.getPayload()['e'];\n return typeof eventType === 'string' ? eventType : '';\n}\nfunction buildGenerator(generator, event, eventType, eventSchema) {\n var contextGeneratorResult = undefined;\n try {\n // try to evaluate context generator\n var args = {\n event: event.getPayload(),\n eventType: eventType,\n eventSchema: eventSchema\n };\n contextGeneratorResult = generator(args);\n // determine if the produced result is a valid SDJ\n if (Array.isArray(contextGeneratorResult) && contextGeneratorResult.every(isSelfDescribingJson)) {\n return contextGeneratorResult;\n } else if (isSelfDescribingJson(contextGeneratorResult)) {\n return contextGeneratorResult;\n } else {\n return undefined;\n }\n } catch (error) {\n contextGeneratorResult = undefined;\n }\n return contextGeneratorResult;\n}\nfunction normalizeToArray(input) {\n if (Array.isArray(input)) {\n return input;\n }\n return Array.of(input);\n}\nfunction generatePrimitives(contextPrimitives, event, eventType, eventSchema) {\n var _a;\n var normalizedInputs = normalizeToArray(contextPrimitives);\n var partialEvaluate = function (primitive) {\n var result = evaluatePrimitive(primitive, event, eventType, eventSchema);\n if (result && result.length !== 0) {\n return result;\n }\n return undefined;\n };\n var generatedContexts = normalizedInputs.map(partialEvaluate);\n return (_a = []).concat.apply(_a, generatedContexts.filter(function (c) {\n return c != null && c.filter(Boolean);\n }));\n}\nfunction evaluatePrimitive(contextPrimitive, event, eventType, eventSchema) {\n if (isSelfDescribingJson(contextPrimitive)) {\n return [contextPrimitive];\n } else if (isContextCallbackFunction(contextPrimitive)) {\n var generatorOutput = buildGenerator(contextPrimitive, event, eventType, eventSchema);\n if (isSelfDescribingJson(generatorOutput)) {\n return [generatorOutput];\n } else if (Array.isArray(generatorOutput)) {\n return generatorOutput;\n }\n }\n return undefined;\n}\nfunction evaluateProvider(provider, event, eventType, eventSchema) {\n if (isFilterProvider(provider)) {\n var filter = provider[0];\n var filterResult = false;\n try {\n var args = {\n event: event.getPayload(),\n eventType: eventType,\n eventSchema: eventSchema\n };\n filterResult = filter(args);\n } catch (error) {\n filterResult = false;\n }\n if (filterResult === true) {\n return generatePrimitives(provider[1], event, eventType, eventSchema);\n }\n } else if (isRuleSetProvider(provider)) {\n if (matchSchemaAgainstRuleSet(provider[0], eventSchema)) {\n return generatePrimitives(provider[1], event, eventType, eventSchema);\n }\n }\n return [];\n}\nfunction compareProviderPart(a, b) {\n if (typeof a === 'function') return a === b;\n return JSON.stringify(a) === JSON.stringify(b);\n}\nfunction compareProvider(a, b) {\n if (isConditionalContextProvider(a)) {\n if (!isConditionalContextProvider(b)) return false;\n var ruleA = a[0],\n primitivesA = a[1];\n var ruleB = b[0],\n primitivesB_1 = b[1];\n if (!compareProviderPart(ruleA, ruleB)) return false;\n if (Array.isArray(primitivesA)) {\n if (!Array.isArray(primitivesB_1)) return false;\n if (primitivesA.length !== primitivesB_1.length) return false;\n return primitivesA.reduce(function (matches, a, i) {\n return matches && compareProviderPart(a, primitivesB_1[i]);\n }, true);\n } else {\n if (Array.isArray(primitivesB_1)) return false;\n return compareProviderPart(primitivesA, primitivesB_1);\n }\n } else if (isContextPrimitive(a)) {\n if (!isContextPrimitive(b)) return false;\n return compareProviderPart(a, b);\n }\n return false;\n}\nfunction generateConditionals(providers, event, eventType, eventSchema) {\n var _a;\n var normalizedInput = normalizeToArray(providers);\n var partialEvaluate = function (provider) {\n var result = evaluateProvider(provider, event, eventType, eventSchema);\n if (result && result.length !== 0) {\n return result;\n }\n return undefined;\n };\n var generatedContexts = normalizedInput.map(partialEvaluate);\n return (_a = []).concat.apply(_a, generatedContexts.filter(function (c) {\n return c != null && c.filter(Boolean);\n }));\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Transform optional/old-behavior number timestamp into`Timestamp` ADT\n *\n * @param timestamp - optional number or timestamp object\n * @returns correct timestamp object\n */\nfunction getTimestamp(timestamp) {\n if (timestamp == null) {\n return {\n type: 'dtm',\n value: new Date().getTime()\n };\n } else if (typeof timestamp === 'number') {\n return {\n type: 'dtm',\n value: timestamp\n };\n } else if (timestamp.type === 'ttm') {\n // We can return timestamp here, but this is safer fallback\n return {\n type: 'ttm',\n value: timestamp.value\n };\n } else {\n return {\n type: 'dtm',\n value: timestamp.value || new Date().getTime()\n };\n }\n}\n/**\n * Create a tracker core object\n *\n * @param base64 - Whether to base 64 encode contexts and self describing event JSONs\n * @param corePlugins - The core plugins to be processed with each event\n * @param callback - Function applied to every payload dictionary object\n * @returns Tracker core\n */\nfunction trackerCore(configuration) {\n if (configuration === void 0) {\n configuration = {};\n }\n function newCore(base64, corePlugins, callback) {\n var pluginContextsHelper = pluginContexts(corePlugins),\n globalContextsHelper = globalContexts();\n var encodeBase64 = base64,\n payloadPairs = {}; // Dictionary of key-value pairs which get added to every payload, e.g. tracker version\n /**\n * Wraps an array of custom contexts in a self-describing JSON\n *\n * @param contexts - Array of custom context self-describing JSONs\n * @returns Outer JSON\n */\n function completeContexts(contexts) {\n if (contexts && contexts.length) {\n return {\n schema: 'iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0',\n data: contexts\n };\n }\n return undefined;\n }\n /**\n * Adds all global contexts to a contexts array\n *\n * @param pb - PayloadData\n * @param contexts - Custom contexts relating to the event\n */\n function attachGlobalContexts(pb, contexts) {\n var applicableContexts = globalContextsHelper.getApplicableContexts(pb);\n var returnedContexts = [];\n if (contexts && contexts.length) {\n returnedContexts.push.apply(returnedContexts, contexts);\n }\n if (applicableContexts && applicableContexts.length) {\n returnedContexts.push.apply(returnedContexts, applicableContexts);\n }\n return returnedContexts;\n }\n /**\n * Gets called by every trackXXX method\n * Adds context and payloadPairs name-value pairs to the payload\n * Applies the callback to the built payload\n *\n * @param pb - Payload\n * @param context - Custom contexts relating to the event\n * @param timestamp - Timestamp of the event\n * @returns Payload after the callback is applied\n */\n function track(pb, context, timestamp) {\n pb.withJsonProcessor(payloadJsonProcessor(encodeBase64));\n pb.add('eid', v4());\n pb.addDict(payloadPairs);\n var tstamp = getTimestamp(timestamp);\n pb.add(tstamp.type, tstamp.value.toString());\n var allContexts = attachGlobalContexts(pb, pluginContextsHelper.addPluginContexts(context));\n var wrappedContexts = completeContexts(allContexts);\n if (wrappedContexts !== undefined) {\n pb.addJson('cx', 'co', wrappedContexts);\n }\n corePlugins.forEach(function (plugin) {\n try {\n if (plugin.beforeTrack) {\n plugin.beforeTrack(pb);\n }\n } catch (ex) {\n LOG.error('Plugin beforeTrack', ex);\n }\n });\n if (typeof callback === 'function') {\n callback(pb);\n }\n var finalPayload = pb.build();\n corePlugins.forEach(function (plugin) {\n try {\n if (plugin.afterTrack) {\n plugin.afterTrack(finalPayload);\n }\n } catch (ex) {\n LOG.error('Plugin afterTrack', ex);\n }\n });\n return finalPayload;\n }\n /**\n * Set a persistent key-value pair to be added to every payload\n *\n * @param key - Field name\n * @param value - Field value\n */\n function addPayloadPair(key, value) {\n payloadPairs[key] = value;\n }\n var core = {\n track: track,\n addPayloadPair: addPayloadPair,\n getBase64Encoding: function () {\n return encodeBase64;\n },\n setBase64Encoding: function (encode) {\n encodeBase64 = encode;\n },\n addPayloadDict: function (dict) {\n for (var key in dict) {\n if (Object.prototype.hasOwnProperty.call(dict, key)) {\n payloadPairs[key] = dict[key];\n }\n }\n },\n resetPayloadPairs: function (dict) {\n payloadPairs = isJson(dict) ? dict : {};\n },\n setTrackerVersion: function (version) {\n addPayloadPair('tv', version);\n },\n setTrackerNamespace: function (name) {\n addPayloadPair('tna', name);\n },\n setAppId: function (appId) {\n addPayloadPair('aid', appId);\n },\n setPlatform: function (value) {\n addPayloadPair('p', value);\n },\n setUserId: function (userId) {\n addPayloadPair('uid', userId);\n },\n setScreenResolution: function (width, height) {\n addPayloadPair('res', width + 'x' + height);\n },\n setViewport: function (width, height) {\n addPayloadPair('vp', width + 'x' + height);\n },\n setColorDepth: function (depth) {\n addPayloadPair('cd', depth);\n },\n setTimezone: function (timezone) {\n addPayloadPair('tz', timezone);\n },\n setLang: function (lang) {\n addPayloadPair('lang', lang);\n },\n setIpAddress: function (ip) {\n addPayloadPair('ip', ip);\n },\n setUseragent: function (useragent) {\n addPayloadPair('ua', useragent);\n },\n addGlobalContexts: function (contexts) {\n globalContextsHelper.addGlobalContexts(contexts);\n },\n clearGlobalContexts: function () {\n globalContextsHelper.clearGlobalContexts();\n },\n removeGlobalContexts: function (contexts) {\n globalContextsHelper.removeGlobalContexts(contexts);\n }\n };\n return core;\n }\n var base64 = configuration.base64,\n corePlugins = configuration.corePlugins,\n callback = configuration.callback,\n plugins = corePlugins !== null && corePlugins !== void 0 ? corePlugins : [],\n partialCore = newCore(base64 !== null && base64 !== void 0 ? base64 : true, plugins, callback),\n core = __assign(__assign({}, partialCore), {\n addPlugin: function (configuration) {\n var _a, _b;\n var plugin = configuration.plugin;\n plugins.push(plugin);\n (_a = plugin.logger) === null || _a === void 0 ? void 0 : _a.call(plugin, LOG);\n (_b = plugin.activateCorePlugin) === null || _b === void 0 ? void 0 : _b.call(plugin, core);\n }\n });\n plugins === null || plugins === void 0 ? void 0 : plugins.forEach(function (plugin) {\n var _a, _b;\n (_a = plugin.logger) === null || _a === void 0 ? void 0 : _a.call(plugin, LOG);\n (_b = plugin.activateCorePlugin) === null || _b === void 0 ? void 0 : _b.call(plugin, core);\n });\n return core;\n}\n/**\n * Build a self-describing event\n * A custom event type, allowing for an event to be tracked using your own custom schema\n * and a data object which conforms to the supplied schema\n *\n * @param event - Contains the properties and schema location for the event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildSelfDescribingEvent(event) {\n var _a = event.event,\n schema = _a.schema,\n data = _a.data,\n pb = payloadBuilder();\n var ueJson = {\n schema: 'iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0',\n data: {\n schema: schema,\n data: data\n }\n };\n pb.add('e', 'ue');\n pb.addJson('ue_px', 'ue_pr', ueJson);\n return pb;\n}\n/**\n * Build a Page View Event\n * Represents a Page View, which is typically fired as soon as possible when a web page\n * is loaded within the users browser. Often also fired on \"virtual page views\" within\n * Single Page Applications (SPA).\n *\n * @param event - Contains the properties for the Page View event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildPageView(event) {\n var pageUrl = event.pageUrl,\n pageTitle = event.pageTitle,\n referrer = event.referrer,\n pb = payloadBuilder();\n pb.add('e', 'pv'); // 'pv' for Page View\n pb.add('url', pageUrl);\n pb.add('page', pageTitle);\n pb.add('refr', referrer);\n return pb;\n}\n/**\n * Build a Page Ping Event\n * Fires when activity tracking is enabled in the browser.\n * Tracks same information as the last tracked Page View and includes scroll\n * information from the current page view\n *\n * @param event - Contains the properties for the Page Ping event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildPagePing(event) {\n var pageUrl = event.pageUrl,\n pageTitle = event.pageTitle,\n referrer = event.referrer,\n minXOffset = event.minXOffset,\n maxXOffset = event.maxXOffset,\n minYOffset = event.minYOffset,\n maxYOffset = event.maxYOffset,\n pb = payloadBuilder();\n pb.add('e', 'pp'); // 'pp' for Page Ping\n pb.add('url', pageUrl);\n pb.add('page', pageTitle);\n pb.add('refr', referrer);\n if (minXOffset && !isNaN(Number(minXOffset))) pb.add('pp_mix', minXOffset.toString());\n if (maxXOffset && !isNaN(Number(maxXOffset))) pb.add('pp_max', maxXOffset.toString());\n if (minYOffset && !isNaN(Number(minYOffset))) pb.add('pp_miy', minYOffset.toString());\n if (maxYOffset && !isNaN(Number(maxYOffset))) pb.add('pp_may', maxYOffset.toString());\n return pb;\n}\n/**\n * Build a Structured Event\n * A classic style of event tracking, allows for easier movement between analytics\n * systems. A loosely typed event, creating a Self Describing event is preferred, but\n * useful for interoperability.\n *\n * @param event - Contains the properties for the Structured event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildStructEvent(event) {\n var category = event.category,\n action = event.action,\n label = event.label,\n property = event.property,\n value = event.value,\n pb = payloadBuilder();\n pb.add('e', 'se'); // 'se' for Structured Event\n pb.add('se_ca', category);\n pb.add('se_ac', action);\n pb.add('se_la', label);\n pb.add('se_pr', property);\n pb.add('se_va', value == null ? undefined : value.toString());\n return pb;\n}\n/**\n * Build an Ecommerce Transaction Event\n * Allows for tracking common ecommerce events, this event is usually used when\n * a consumer completes a transaction.\n *\n * @param event - Contains the properties for the Ecommerce Transactoion event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildEcommerceTransaction(event) {\n var orderId = event.orderId,\n total = event.total,\n affiliation = event.affiliation,\n tax = event.tax,\n shipping = event.shipping,\n city = event.city,\n state = event.state,\n country = event.country,\n currency = event.currency,\n pb = payloadBuilder();\n pb.add('e', 'tr'); // 'tr' for Transaction\n pb.add('tr_id', orderId);\n pb.add('tr_af', affiliation);\n pb.add('tr_tt', total);\n pb.add('tr_tx', tax);\n pb.add('tr_sh', shipping);\n pb.add('tr_ci', city);\n pb.add('tr_st', state);\n pb.add('tr_co', country);\n pb.add('tr_cu', currency);\n return pb;\n}\n/**\n * Build an Ecommerce Transaction Item Event\n * Related to the {@link buildEcommerceTransaction}\n * Each Ecommerce Transaction may contain one or more EcommerceTransactionItem events\n *\n * @param event - Contains the properties for the Ecommerce Transaction Item event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildEcommerceTransactionItem(event) {\n var orderId = event.orderId,\n sku = event.sku,\n price = event.price,\n name = event.name,\n category = event.category,\n quantity = event.quantity,\n currency = event.currency,\n pb = payloadBuilder();\n pb.add('e', 'ti'); // 'tr' for Transaction Item\n pb.add('ti_id', orderId);\n pb.add('ti_sk', sku);\n pb.add('ti_nm', name);\n pb.add('ti_ca', category);\n pb.add('ti_pr', price);\n pb.add('ti_qu', quantity);\n pb.add('ti_cu', currency);\n return pb;\n}\n/**\n * Build a Scren View Event\n * Similar to a Page View but less focused on typical web properties\n * Often used for mobile applications as the user is presented with\n * new views as they performance navigation events\n *\n * @param event - Contains the properties for the Screen View event. One or more properties must be included.\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildScreenView(event) {\n var name = event.name,\n id = event.id;\n return buildSelfDescribingEvent({\n event: {\n schema: 'iglu:com.snowplowanalytics.snowplow/screen_view/jsonschema/1-0-0',\n data: removeEmptyProperties({\n name: name,\n id: id\n })\n }\n });\n}\n/**\n * Build a Link Click Event\n * Used when a user clicks on a link on a webpage, typically an anchor tag `<a>`\n *\n * @param event - Contains the properties for the Link Click event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildLinkClick(event) {\n var targetUrl = event.targetUrl,\n elementId = event.elementId,\n elementClasses = event.elementClasses,\n elementTarget = event.elementTarget,\n elementContent = event.elementContent;\n var eventJson = {\n schema: 'iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1',\n data: removeEmptyProperties({\n targetUrl: targetUrl,\n elementId: elementId,\n elementClasses: elementClasses,\n elementTarget: elementTarget,\n elementContent: elementContent\n })\n };\n return buildSelfDescribingEvent({\n event: eventJson\n });\n}\n/**\n * Build a Ad Impression Event\n * Used to track an advertisement impression\n *\n * @remarks\n * If you provide the cost field, you must also provide one of 'cpa', 'cpc', and 'cpm' for the costModel field.\n *\n * @param event - Contains the properties for the Ad Impression event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildAdImpression(event) {\n var impressionId = event.impressionId,\n costModel = event.costModel,\n cost = event.cost,\n targetUrl = event.targetUrl,\n bannerId = event.bannerId,\n zoneId = event.zoneId,\n advertiserId = event.advertiserId,\n campaignId = event.campaignId;\n var eventJson = {\n schema: 'iglu:com.snowplowanalytics.snowplow/ad_impression/jsonschema/1-0-0',\n data: removeEmptyProperties({\n impressionId: impressionId,\n costModel: costModel,\n cost: cost,\n targetUrl: targetUrl,\n bannerId: bannerId,\n zoneId: zoneId,\n advertiserId: advertiserId,\n campaignId: campaignId\n })\n };\n return buildSelfDescribingEvent({\n event: eventJson\n });\n}\n/**\n * Build a Ad Click Event\n * Used to track an advertisement click\n *\n * @remarks\n * If you provide the cost field, you must also provide one of 'cpa', 'cpc', and 'cpm' for the costModel field.\n *\n * @param event - Contains the properties for the Ad Click event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildAdClick(event) {\n var targetUrl = event.targetUrl,\n clickId = event.clickId,\n costModel = event.costModel,\n cost = event.cost,\n bannerId = event.bannerId,\n zoneId = event.zoneId,\n impressionId = event.impressionId,\n advertiserId = event.advertiserId,\n campaignId = event.campaignId;\n var eventJson = {\n schema: 'iglu:com.snowplowanalytics.snowplow/ad_click/jsonschema/1-0-0',\n data: removeEmptyProperties({\n targetUrl: targetUrl,\n clickId: clickId,\n costModel: costModel,\n cost: cost,\n bannerId: bannerId,\n zoneId: zoneId,\n impressionId: impressionId,\n advertiserId: advertiserId,\n campaignId: campaignId\n })\n };\n return buildSelfDescribingEvent({\n event: eventJson\n });\n}\n/**\n * Build a Ad Conversion Event\n * Used to track an advertisement click\n *\n * @remarks\n * If you provide the cost field, you must also provide one of 'cpa', 'cpc', and 'cpm' for the costModel field.\n *\n * @param event - Contains the properties for the Ad Conversion event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildAdConversion(event) {\n var conversionId = event.conversionId,\n costModel = event.costModel,\n cost = event.cost,\n category = event.category,\n action = event.action,\n property = event.property,\n initialValue = event.initialValue,\n advertiserId = event.advertiserId,\n campaignId = event.campaignId;\n var eventJson = {\n schema: 'iglu:com.snowplowanalytics.snowplow/ad_conversion/jsonschema/1-0-0',\n data: removeEmptyProperties({\n conversionId: conversionId,\n costModel: costModel,\n cost: cost,\n category: category,\n action: action,\n property: property,\n initialValue: initialValue,\n advertiserId: advertiserId,\n campaignId: campaignId\n })\n };\n return buildSelfDescribingEvent({\n event: eventJson\n });\n}\n/**\n * Build a Social Interaction Event\n * Social tracking will be used to track the way users interact\n * with Facebook, Twitter and Google + widgets\n * e.g. to capture “like this†or “tweet this†events.\n *\n * @param event - Contains the properties for the Social Interaction event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildSocialInteraction(event) {\n var action = event.action,\n network = event.network,\n target = event.target;\n var eventJson = {\n schema: 'iglu:com.snowplowanalytics.snowplow/social_interaction/jsonschema/1-0-0',\n data: removeEmptyProperties({\n action: action,\n network: network,\n target: target\n })\n };\n return buildSelfDescribingEvent({\n event: eventJson\n });\n}\n/**\n * Build a Add To Cart Event\n * For tracking users adding items from a cart\n * on an ecommerce site.\n *\n * @param event - Contains the properties for the Add To Cart event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildAddToCart(event) {\n var sku = event.sku,\n quantity = event.quantity,\n name = event.name,\n category = event.category,\n unitPrice = event.unitPrice,\n currency = event.currency;\n return buildSelfDescribingEvent({\n event: {\n schema: 'iglu:com.snowplowanalytics.snowplow/add_to_cart/jsonschema/1-0-0',\n data: removeEmptyProperties({\n sku: sku,\n quantity: quantity,\n name: name,\n category: category,\n unitPrice: unitPrice,\n currency: currency\n })\n }\n });\n}\n/**\n * Build a Remove From Cart Event\n * For tracking users removing items from a cart\n * on an ecommerce site.\n *\n * @param event - Contains the properties for the Remove From Cart event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildRemoveFromCart(event) {\n var sku = event.sku,\n quantity = event.quantity,\n name = event.name,\n category = event.category,\n unitPrice = event.unitPrice,\n currency = event.currency;\n return buildSelfDescribingEvent({\n event: {\n schema: 'iglu:com.snowplowanalytics.snowplow/remove_from_cart/jsonschema/1-0-0',\n data: removeEmptyProperties({\n sku: sku,\n quantity: quantity,\n name: name,\n category: category,\n unitPrice: unitPrice,\n currency: currency\n })\n }\n });\n}\n/**\n * Build a Form Focus or Change Form Event based on schema property\n * When a user focuses on a form element or when a user makes a\n * change to a form element.\n *\n * @param event - Contains the properties for the Form Focus or Change Form event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildFormFocusOrChange(event) {\n var event_schema = '';\n var schema = event.schema,\n formId = event.formId,\n elementId = event.elementId,\n nodeName = event.nodeName,\n elementClasses = event.elementClasses,\n value = event.value,\n type = event.type;\n var event_data = {\n formId: formId,\n elementId: elementId,\n nodeName: nodeName,\n elementClasses: elementClasses,\n value: value\n };\n if (schema === 'change_form') {\n event_schema = 'iglu:com.snowplowanalytics.snowplow/change_form/jsonschema/1-0-0';\n event_data.type = type;\n } else if (schema === 'focus_form') {\n event_schema = 'iglu:com.snowplowanalytics.snowplow/focus_form/jsonschema/1-0-0';\n event_data.elementType = type;\n }\n return buildSelfDescribingEvent({\n event: {\n schema: event_schema,\n data: removeEmptyProperties(event_data, {\n value: true\n })\n }\n });\n}\n/**\n * Build a Form Submission Event\n * Used to track when a user submits a form\n *\n * @param event - Contains the properties for the Form Submission event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildFormSubmission(event) {\n var formId = event.formId,\n formClasses = event.formClasses,\n elements = event.elements;\n return buildSelfDescribingEvent({\n event: {\n schema: 'iglu:com.snowplowanalytics.snowplow/submit_form/jsonschema/1-0-0',\n data: removeEmptyProperties({\n formId: formId,\n formClasses: formClasses,\n elements: elements\n })\n }\n });\n}\n/**\n * Build a Site Search Event\n * Used when a user performs a search action on a page\n *\n * @param event - Contains the properties for the Site Search event\n * @returns PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track}\n */\nfunction buildSiteSearch(event) {\n var terms = event.terms,\n filters = event.filters,\n totalResults = event.totalResults,\n pageResults = event.pageResults;\n return buildSelfDescribingEvent({\n event: {\n schema: 'iglu:com.snowplowanalytics.snowplow/site_search/jsonschema/1-0-0',\n data: removeEmptyProperties({\n terms: terms,\n filters: filters,\n totalResults: totalResults,\n pageResults: pageResults\n })\n }\n });\n}\n/**\n * Build a Consent Withdrawn Event\n * Used for tracking when a user withdraws their consent\n *\n * @param event - Contains the properties for the Consent Withdrawn event\n * @returns An object containing the PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track} and a 'consent_document' context\n */\nfunction buildConsentWithdrawn(event) {\n var all = event.all,\n id = event.id,\n version = event.version,\n name = event.name,\n description = event.description;\n var documentJson = {\n schema: 'iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0',\n data: removeEmptyProperties({\n id: id,\n version: version,\n name: name,\n description: description\n })\n };\n return {\n event: buildSelfDescribingEvent({\n event: {\n schema: 'iglu:com.snowplowanalytics.snowplow/consent_withdrawn/jsonschema/1-0-0',\n data: removeEmptyProperties({\n all: all\n })\n }\n }),\n context: [documentJson]\n };\n}\n/**\n * Build a Consent Granted Event\n * Used for tracking when a user grants their consent\n *\n * @param event - Contains the properties for the Consent Granted event\n * @returns An object containing the PayloadBuilder to be sent to {@link @snowplow/tracker-core#TrackerCore.track} and a 'consent_document' context\n */\nfunction buildConsentGranted(event) {\n var expiry = event.expiry,\n id = event.id,\n version = event.version,\n name = event.name,\n description = event.description;\n var documentJson = {\n schema: 'iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0',\n data: removeEmptyProperties({\n id: id,\n version: version,\n name: name,\n description: description\n })\n };\n return {\n event: buildSelfDescribingEvent({\n event: {\n schema: 'iglu:com.snowplowanalytics.snowplow/consent_granted/jsonschema/1-0-0',\n data: removeEmptyProperties({\n expiry: expiry\n })\n }\n }),\n context: [documentJson]\n };\n}\n/**\n * Returns a copy of a JSON with undefined and null properties removed\n *\n * @param event - JSON object to clean\n * @param exemptFields - Set of fields which should not be removed even if empty\n * @returns A cleaned copy of eventJson\n */\nfunction removeEmptyProperties(event, exemptFields) {\n if (exemptFields === void 0) {\n exemptFields = {};\n }\n var ret = {};\n for (var k in event) {\n if (exemptFields[k] || event[k] !== null && typeof event[k] !== 'undefined') {\n ret[k] = event[k];\n }\n }\n return ret;\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nvar version = version$1;\nexport { LOG, LOG_LEVEL, buildAdClick, buildAdConversion, buildAdImpression, buildAddToCart, buildConsentGranted, buildConsentWithdrawn, buildEcommerceTransaction, buildEcommerceTransactionItem, buildFormFocusOrChange, buildFormSubmission, buildLinkClick, buildPagePing, buildPageView, buildRemoveFromCart, buildScreenView, buildSelfDescribingEvent, buildSiteSearch, buildSocialInteraction, buildStructEvent, getRuleParts, getSchemaParts, globalContexts, isConditionalContextProvider, isContextCallbackFunction, isContextPrimitive, isFilterProvider, isJson, isNonEmptyJson, isRuleSet, isRuleSetProvider, isSelfDescribingJson, isStringArray, isValidRule, isValidRuleSetArg, matchSchemaAgainstRule, matchSchemaAgainstRuleSet, payloadBuilder, payloadJsonProcessor, pluginContexts, removeEmptyProperties, resolveDynamicContext, trackerCore, validateVendor, validateVendorParts, version };\n","/*!\n * Core functionality for Snowplow Browser trackers v3.24.6 (http://bit.ly/sp-js)\n * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * Licensed under BSD-3-Clause\n */\n\nimport { LOG, trackerCore, buildPageView, buildPagePing } from '@snowplow/tracker-core';\nimport { __assign, __spreadArray } from 'tslib';\nimport hash from 'sha1';\nimport { v4 } from 'uuid';\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Attempt to get a value from localStorage\n *\n * @param string - key\n * @returns string The value obtained from localStorage, or\n * undefined if localStorage is inaccessible\n */\nfunction attemptGetLocalStorage(key) {\n try {\n var localStorageAlias = window.localStorage,\n exp = localStorageAlias.getItem(key + '.expires');\n if (exp === null || +exp > Date.now()) {\n return localStorageAlias.getItem(key);\n } else {\n localStorageAlias.removeItem(key);\n localStorageAlias.removeItem(key + '.expires');\n }\n return undefined;\n } catch (e) {\n return undefined;\n }\n}\n/**\n * Attempt to write a value to localStorage\n *\n * @param string - key\n * @param string - value\n * @param number - ttl Time to live in seconds, defaults to 2 years from Date.now()\n * @returns boolean Whether the operation succeeded\n */\nfunction attemptWriteLocalStorage(key, value, ttl) {\n if (ttl === void 0) {\n ttl = 63072000;\n }\n try {\n var localStorageAlias = window.localStorage,\n t = Date.now() + ttl * 1000;\n localStorageAlias.setItem(\"\".concat(key, \".expires\"), t.toString());\n localStorageAlias.setItem(key, value);\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * Attempt to delete a value from localStorage\n *\n * @param string - key\n * @returns boolean Whether the operation succeeded\n */\nfunction attemptDeleteLocalStorage(key) {\n try {\n var localStorageAlias = window.localStorage;\n localStorageAlias.removeItem(key);\n localStorageAlias.removeItem(key + '.expires');\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * Attempt to get a value from sessionStorage\n *\n * @param string - key\n * @returns string The value obtained from sessionStorage, or\n * undefined if sessionStorage is inaccessible\n */\nfunction attemptGetSessionStorage(key) {\n try {\n return window.sessionStorage.getItem(key);\n } catch (e) {\n return undefined;\n }\n}\n/**\n * Attempt to write a value to sessionStorage\n *\n * @param string - key\n * @param string - value\n * @returns boolean Whether the operation succeeded\n */\nfunction attemptWriteSessionStorage(key, value) {\n try {\n window.sessionStorage.setItem(key, value);\n return true;\n } catch (e) {\n return false;\n }\n}\nvar DEFAULT_CROSS_DOMAIN_LINKER_PARAMS = {\n sessionId: true,\n sourceId: true,\n sourcePlatform: false,\n userId: false,\n reason: false\n};\nfunction createCrossDomainParameterValue(isExtendedFormat, attributeConfiguration, attributeValues) {\n var _a;\n var crossDomainParameterValue;\n var timestamp = new Date().getTime();\n var config = __assign(__assign({}, DEFAULT_CROSS_DOMAIN_LINKER_PARAMS), attributeConfiguration);\n var domainUserId = attributeValues.domainUserId,\n userId = attributeValues.userId,\n sessionId = attributeValues.sessionId,\n sourceId = attributeValues.sourceId,\n sourcePlatform = attributeValues.sourcePlatform,\n event = attributeValues.event;\n var eventTarget = event.currentTarget;\n var reason = typeof config.reason === 'function' ? config.reason(event) : (_a = eventTarget === null || eventTarget === void 0 ? void 0 : eventTarget.textContent) === null || _a === void 0 ? void 0 : _a.trim();\n if (isExtendedFormat) {\n /* Index is used by Enrich, so it should not be changed. */\n crossDomainParameterValue = [domainUserId, timestamp, config.sessionId && sessionId, config.userId && urlSafeBase64Encode(userId || ''), config.sourceId && urlSafeBase64Encode(sourceId || ''), config.sourcePlatform && sourcePlatform, config.reason && urlSafeBase64Encode(reason || '')].map(function (attribute) {\n return attribute || '';\n }).join('.')\n // Remove trailing dots\n .replace(/([.]*$)/, '');\n } else {\n crossDomainParameterValue = attributeValues.domainUserId + '.' + timestamp;\n }\n return crossDomainParameterValue;\n}\n/**\n *\n * The url-safe variation emits - and _ instead of + and / characters. Also removes = sign padding.\n * @param {string} str The string to encode in a URL safe manner\n * @return {string}\n */\nfunction urlSafeBase64Encode(str) {\n return btoa(str).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=+$/, '');\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Checks if an object is a string\n * @param str - The object to check\n */\nfunction isString(str) {\n if (str && typeof str.valueOf() === 'string') {\n return true;\n }\n return false;\n}\n/**\n * Checks if an object is an integer\n * @param int - The object to check\n */\nfunction isInteger(int) {\n return Number.isInteger && Number.isInteger(int) || typeof int === 'number' && isFinite(int) && Math.floor(int) === int;\n}\n/**\n * Checks if the input parameter is a function\n * @param func - The object to check\n */\nfunction isFunction(func) {\n if (func && typeof func === 'function') {\n return true;\n }\n return false;\n}\n/**\n * Cleans up the page title\n */\nfunction fixupTitle(title) {\n if (!isString(title)) {\n title = title.text || '';\n var tmp = document.getElementsByTagName('title');\n if (tmp && tmp[0] != null) {\n title = tmp[0].text;\n }\n }\n return title;\n}\n/**\n * Extract hostname from URL\n */\nfunction getHostName(url) {\n // scheme : // [username [: password] @] hostname [: port] [/ [path] [? query] [# fragment]]\n var e = new RegExp('^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)'),\n matches = e.exec(url);\n return matches ? matches[1] : url;\n}\n/**\n * Fix-up domain\n */\nfunction fixupDomain(domain) {\n var dl = domain.length;\n // remove trailing '.'\n if (domain.charAt(--dl) === '.') {\n domain = domain.slice(0, dl);\n }\n // remove leading '*'\n if (domain.slice(0, 2) === '*.') {\n domain = domain.slice(1);\n }\n return domain;\n}\n/**\n * Get page referrer. In the case of a single-page app,\n * if the URL changes without the page reloading, pass\n * in the old URL. It will be returned unless overriden\n * by a \"refer(r)er\" parameter in the querystring.\n *\n * @param string - oldLocation Optional.\n * @returns string The referrer\n */\nfunction getReferrer(oldLocation) {\n var windowAlias = window,\n fromQs = fromQuerystring('referrer', windowAlias.location.href) || fromQuerystring('referer', windowAlias.location.href);\n // Short-circuit\n if (fromQs) {\n return fromQs;\n }\n // In the case of a single-page app, return the old URL\n if (oldLocation) {\n return oldLocation;\n }\n try {\n if (windowAlias.top) {\n return windowAlias.top.document.referrer;\n } else if (windowAlias.parent) {\n return windowAlias.parent.document.referrer;\n }\n } catch (_a) {}\n return document.referrer;\n}\n/**\n * Cross-browser helper function to add event handler\n */\nfunction addEventListener(element, eventType, eventHandler, options) {\n if (element.addEventListener) {\n element.addEventListener(eventType, eventHandler, options);\n return true;\n }\n // IE Support\n if (element.attachEvent) {\n return element.attachEvent('on' + eventType, eventHandler);\n }\n element['on' + eventType] = eventHandler;\n}\n/**\n * Return value from name-value pair in querystring\n */\nfunction fromQuerystring(field, url) {\n var match = new RegExp('^[^#]*[?&]' + field + '=([^&#]*)').exec(url);\n if (!match) {\n return null;\n }\n return decodeURIComponent(match[1].replace(/\\+/g, ' '));\n}\n/**\n * Add a name-value pair to the querystring of a URL\n *\n * @param string - url URL to decorate\n * @param string - name Name of the querystring pair\n * @param string - value Value of the querystring pair\n */\nfunction decorateQuerystring(url, name, value) {\n var initialQsParams = name + '=' + value;\n var hashSplit = url.split('#');\n var qsSplit = hashSplit[0].split('?');\n var beforeQuerystring = qsSplit.shift();\n // Necessary because a querystring may contain multiple question marks\n var querystring = qsSplit.join('?');\n if (!querystring) {\n querystring = initialQsParams;\n } else {\n // Whether this is the first time the link has been decorated\n var initialDecoration = true;\n var qsFields = querystring.split('&');\n for (var i = 0; i < qsFields.length; i++) {\n if (qsFields[i].substr(0, name.length + 1) === name + '=') {\n initialDecoration = false;\n qsFields[i] = initialQsParams;\n querystring = qsFields.join('&');\n break;\n }\n }\n if (initialDecoration) {\n querystring = initialQsParams + '&' + querystring;\n }\n }\n hashSplit[0] = beforeQuerystring + '?' + querystring;\n return hashSplit.join('#');\n}\n/**\n * Finds the root domain\n */\nfunction findRootDomain(sameSite, secure) {\n var windowLocationHostnameAlias = window.location.hostname,\n cookiePrefix = '_sp_root_domain_test_',\n cookieName = cookiePrefix + new Date().getTime(),\n cookieValue = '_test_value_' + new Date().getTime();\n var locationParts = windowLocationHostnameAlias.split('.');\n for (var idx = locationParts.length - 2; idx >= 0; idx--) {\n var currentDomain = locationParts.slice(idx).join('.');\n cookie(cookieName, cookieValue, 0, '/', currentDomain, sameSite, secure);\n if (cookie(cookieName) === cookieValue) {\n // Clean up created cookie(s)\n deleteCookie(cookieName, currentDomain, sameSite, secure);\n var cookieNames = getCookiesWithPrefix(cookiePrefix);\n for (var i = 0; i < cookieNames.length; i++) {\n deleteCookie(cookieNames[i], currentDomain, sameSite, secure);\n }\n return currentDomain;\n }\n }\n // Cookies cannot be read\n return windowLocationHostnameAlias;\n}\n/**\n * Checks whether a value is present within an array\n *\n * @param val - The value to check for\n * @param array - The array to check within\n * @returns boolean Whether it exists\n */\nfunction isValueInArray(val, array) {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === val) {\n return true;\n }\n }\n return false;\n}\n/**\n * Deletes an arbitrary cookie by setting the expiration date to the past\n *\n * @param cookieName - The name of the cookie to delete\n * @param domainName - The domain the cookie is in\n */\nfunction deleteCookie(cookieName, domainName, sameSite, secure) {\n cookie(cookieName, '', -1, '/', domainName, sameSite, secure);\n}\n/**\n * Fetches the name of all cookies beginning with a certain prefix\n *\n * @param cookiePrefix - The prefix to check for\n * @returns array The cookies that begin with the prefix\n */\nfunction getCookiesWithPrefix(cookiePrefix) {\n var cookies = document.cookie.split('; ');\n var cookieNames = [];\n for (var i = 0; i < cookies.length; i++) {\n if (cookies[i].substring(0, cookiePrefix.length) === cookiePrefix) {\n cookieNames.push(cookies[i]);\n }\n }\n return cookieNames;\n}\n/**\n * Get and set the cookies associated with the current document in browser\n * This implementation always returns a string, returns the cookie value if only name is specified\n *\n * @param name - The cookie name (required)\n * @param value - The cookie value\n * @param ttl - The cookie Time To Live (seconds)\n * @param path - The cookies path\n * @param domain - The cookies domain\n * @param samesite - The cookies samesite attribute\n * @param secure - Boolean to specify if cookie should be secure\n * @returns string The cookies value\n */\nfunction cookie(name, value, ttl, path, domain, samesite, secure) {\n if (arguments.length > 1) {\n return document.cookie = name + '=' + encodeURIComponent(value !== null && value !== void 0 ? value : '') + (ttl ? '; Expires=' + new Date(+new Date() + ttl * 1000).toUTCString() : '') + (path ? '; Path=' + path : '') + (domain ? '; Domain=' + domain : '') + (samesite ? '; SameSite=' + samesite : '') + (secure ? '; Secure' : '');\n }\n return decodeURIComponent((('; ' + document.cookie).split('; ' + name + '=')[1] || '').split(';')[0]);\n}\n/**\n * Parses an object and returns either the\n * integer or undefined.\n *\n * @param obj - The object to parse\n * @returns the result of the parse operation\n */\nfunction parseAndValidateInt(obj) {\n var result = parseInt(obj);\n return isNaN(result) ? undefined : result;\n}\n/**\n * Parses an object and returns either the\n * number or undefined.\n *\n * @param obj - The object to parse\n * @returns the result of the parse operation\n */\nfunction parseAndValidateFloat(obj) {\n var result = parseFloat(obj);\n return isNaN(result) ? undefined : result;\n}\n/**\n * Convert a criterion object to a filter function\n *\n * @param object - criterion Either {allowlist: [array of allowable strings]}\n * or {denylist: [array of allowable strings]}\n * or {filter: function (elt) {return whether to track the element}\n * @param boolean - byClass Whether to allowlist/denylist based on an element's classes (for forms)\n * or name attribute (for fields)\n */\nfunction getFilterByClass(criterion) {\n // If the criterion argument is not an object, add listeners to all elements\n if (criterion == null || typeof criterion !== 'object' || Array.isArray(criterion)) {\n return function () {\n return true;\n };\n }\n var inclusive = Object.prototype.hasOwnProperty.call(criterion, 'allowlist');\n var specifiedClassesSet = getSpecifiedClassesSet(criterion);\n return getFilter(criterion, function (elt) {\n return checkClass(elt, specifiedClassesSet) === inclusive;\n });\n}\n/**\n * Convert a criterion object to a filter function\n *\n * @param object - criterion Either {allowlist: [array of allowable strings]}\n * or {denylist: [array of allowable strings]}\n * or {filter: function (elt) {return whether to track the element}\n */\nfunction getFilterByName(criterion) {\n // If the criterion argument is not an object, add listeners to all elements\n if (criterion == null || typeof criterion !== 'object' || Array.isArray(criterion)) {\n return function () {\n return true;\n };\n }\n var inclusive = criterion.hasOwnProperty('allowlist');\n var specifiedClassesSet = getSpecifiedClassesSet(criterion);\n return getFilter(criterion, function (elt) {\n return elt.name in specifiedClassesSet === inclusive;\n });\n}\n/**\n * List the classes of a DOM element without using elt.classList (for compatibility with IE 9)\n */\nfunction getCssClasses(elt) {\n return elt.className.match(/\\S+/g) || [];\n}\n/**\n * Check whether an element has at least one class from a given list\n */\nfunction checkClass(elt, classList) {\n var classes = getCssClasses(elt);\n for (var _i = 0, classes_1 = classes; _i < classes_1.length; _i++) {\n var className = classes_1[_i];\n if (classList[className]) {\n return true;\n }\n }\n return false;\n}\nfunction getFilter(criterion, fallbackFilter) {\n if (criterion.hasOwnProperty('filter') && criterion.filter) {\n return criterion.filter;\n }\n return fallbackFilter;\n}\nfunction getSpecifiedClassesSet(criterion) {\n // Convert the array of classes to an object of the form {class1: true, class2: true, ...}\n var specifiedClassesSet = {};\n var specifiedClasses = criterion.allowlist || criterion.denylist;\n if (specifiedClasses) {\n if (!Array.isArray(specifiedClasses)) {\n specifiedClasses = [specifiedClasses];\n }\n for (var i = 0; i < specifiedClasses.length; i++) {\n specifiedClassesSet[specifiedClasses[i]] = true;\n }\n }\n return specifiedClassesSet;\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/*\n * Checks whether sessionStorage is available, in a way that\n * does not throw a SecurityError in Firefox if \"always ask\"\n * is enabled for cookies (https://github.com/snowplow/snowplow/issues/163).\n */\nfunction hasSessionStorage() {\n try {\n return !!window.sessionStorage;\n } catch (e) {\n return true; // SecurityError when referencing it means it exists\n }\n}\n/*\n * Checks whether localStorage is available, in a way that\n * does not throw a SecurityError in Firefox if \"always ask\"\n * is enabled for cookies (https://github.com/snowplow/snowplow/issues/163).\n */\nfunction hasLocalStorage() {\n try {\n return !!window.localStorage;\n } catch (e) {\n return true; // SecurityError when referencing it means it exists\n }\n}\n/*\n * Checks whether localStorage is accessible\n * sets and removes an item to handle private IOS5 browsing\n * (http://git.io/jFB2Xw)\n */\nfunction localStorageAccessible() {\n var mod = 'modernizr';\n if (!hasLocalStorage()) {\n return false;\n }\n try {\n var ls = window.localStorage;\n ls.setItem(mod, mod);\n ls.removeItem(mod);\n return true;\n } catch (e) {\n return false;\n }\n}\nvar WEB_PAGE_SCHEMA = 'iglu:com.snowplowanalytics.snowplow/web_page/jsonschema/1-0-0';\nvar BROWSER_CONTEXT_SCHEMA = 'iglu:com.snowplowanalytics.snowplow/browser_context/jsonschema/2-0-0';\nvar CLIENT_SESSION_SCHEMA = 'iglu:com.snowplowanalytics.snowplow/client_session/jsonschema/1-0-2';\nvar PAYLOAD_DATA_SCHEMA = 'iglu:com.snowplowanalytics.snowplow/payload_data/jsonschema/1-0-4';\n\n/**\n * Object handling sending events to a collector.\n * Instantiated once per tracker instance.\n *\n * @param id - The Snowplow function name (used to generate the localStorage key)\n * @param sharedSate - Stores reference to the outbound queue so it can unload the page when all queues are empty\n * @param useLocalStorage - Whether to use localStorage at all\n * @param eventMethod - if null will use 'beacon' otherwise can be set to 'post', 'get', or 'beacon' to force.\n * @param postPath - The path where events are to be posted\n * @param bufferSize - How many events to batch in localStorage before sending them all\n * @param maxPostBytes - Maximum combined size in bytes of the event JSONs in a POST request\n * @param maxGetBytes - Maximum size in bytes of the complete event URL string in a GET request. 0 for no limit.\n * @param useStm - Whether to add timestamp to events\n * @param maxLocalStorageQueueSize - Maximum number of queued events we will attempt to store in local storage\n * @param connectionTimeout - Defines how long to wait before aborting the request\n * @param anonymousTracking - Defines whether to set the SP-Anonymous header for anonymous tracking on GET and POST\n * @param customHeaders - Allows custom headers to be defined and passed on XMLHttpRequest requests\n * @param withCredentials - Sets the value of the withCredentials flag on XMLHttpRequest (GET and POST) requests\n * @param retryStatusCodes – Failure HTTP response status codes from Collector for which sending events should be retried (they can override the `dontRetryStatusCodes`)\n * @param dontRetryStatusCodes – Failure HTTP response status codes from Collector for which sending events should not be retried\n * @param idService - Id service full URL. This URL will be added to the queue and will be called using a GET method.\n * @param retryFailedRequests - Whether to retry failed requests - Takes precedent over `retryStatusCodes` and `dontRetryStatusCodes`\n * @param onRequestSuccess - Function called when a request succeeds\n * @param onRequestFailure - Function called when a request does not succeed\n * @returns object OutQueueManager instance\n */\nfunction OutQueueManager(id, sharedSate, useLocalStorage, eventMethod, postPath, bufferSize, maxPostBytes, maxGetBytes, useStm, maxLocalStorageQueueSize, connectionTimeout, anonymousTracking, customHeaders, withCredentials, retryStatusCodes, dontRetryStatusCodes, idService, retryFailedRequests, onRequestSuccess, onRequestFailure) {\n if (retryFailedRequests === void 0) {\n retryFailedRequests = true;\n }\n var executingQueue = false,\n configCollectorUrl,\n outQueue = [],\n idServiceCalled = false;\n //Force to lower case if its a string\n eventMethod = typeof eventMethod === 'string' ? eventMethod.toLowerCase() : eventMethod;\n // Use the Beacon API if eventMethod is set true, 'true', or 'beacon'.\n var isBeaconRequested = eventMethod === true || eventMethod === 'beacon' || eventMethod === 'true',\n // Fall back to POST or GET for browsers which don't support Beacon API\n isBeaconAvailable = Boolean(isBeaconRequested && window.navigator && typeof window.navigator.sendBeacon === 'function' && !hasWebKitBeaconBug(window.navigator.userAgent)),\n useBeacon = isBeaconAvailable && isBeaconRequested,\n // Use GET if specified\n isGetRequested = eventMethod === 'get',\n // Don't use XhrHttpRequest for browsers which don't support CORS XMLHttpRequests (e.g. IE <= 9)\n useXhr = Boolean(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()),\n // Use POST if specified\n usePost = !isGetRequested && useXhr && (eventMethod === 'post' || isBeaconRequested),\n // Resolve all options and capabilities and decide path\n path = usePost ? postPath : '/i',\n // Different queue names for GET and POST since they are stored differently\n queueName = \"snowplowOutQueue_\".concat(id, \"_\").concat(usePost ? 'post2' : 'get');\n // Ensure we don't set headers when beacon is the requested eventMethod as we might fallback to POST\n // and end up sending them in older browsers which don't support beacon leading to inconsistencies\n if (isBeaconRequested) customHeaders = {};\n // Get buffer size or set 1 if unable to buffer\n bufferSize = useLocalStorage && localStorageAccessible() && usePost && bufferSize || 1;\n if (useLocalStorage) {\n // Catch any JSON parse errors or localStorage that might be thrown\n try {\n var localStorageQueue = window.localStorage.getItem(queueName);\n outQueue = localStorageQueue ? JSON.parse(localStorageQueue) : [];\n } catch (e) {}\n }\n // Initialize to and empty array if we didn't get anything out of localStorage\n if (!Array.isArray(outQueue)) {\n outQueue = [];\n }\n // Used by pageUnloadGuard\n sharedSate.outQueues.push(outQueue);\n if (useXhr && bufferSize > 1) {\n sharedSate.bufferFlushers.push(function (sync) {\n if (!executingQueue) {\n executeQueue(sync);\n }\n });\n }\n /*\n * Convert a dictionary to a querystring\n * The context field is the last in the querystring\n */\n function getQuerystring(request) {\n var querystring = '?',\n lowPriorityKeys = {\n co: true,\n cx: true\n },\n firstPair = true;\n for (var key in request) {\n if (request.hasOwnProperty(key) && !lowPriorityKeys.hasOwnProperty(key)) {\n if (!firstPair) {\n querystring += '&';\n } else {\n firstPair = false;\n }\n querystring += encodeURIComponent(key) + '=' + encodeURIComponent(request[key]);\n }\n }\n for (var contextKey in lowPriorityKeys) {\n if (request.hasOwnProperty(contextKey) && lowPriorityKeys.hasOwnProperty(contextKey)) {\n querystring += '&' + contextKey + '=' + encodeURIComponent(request[contextKey]);\n }\n }\n return querystring;\n }\n /*\n * Convert numeric fields to strings to match payload_data schema\n */\n function getBody(request) {\n var cleanedRequest = Object.keys(request).map(function (k) {\n return [k, request[k]];\n }).reduce(function (acc, _a) {\n var key = _a[0],\n value = _a[1];\n acc[key] = value.toString();\n return acc;\n }, {});\n return {\n evt: cleanedRequest,\n bytes: getUTF8Length(JSON.stringify(cleanedRequest))\n };\n }\n /**\n * Count the number of bytes a string will occupy when UTF-8 encoded\n * Taken from http://stackoverflow.com/questions/2848462/count-bytes-in-textarea-using-javascript/\n *\n * @param string - s\n * @returns number Length of s in bytes when UTF-8 encoded\n */\n function getUTF8Length(s) {\n var len = 0;\n for (var i = 0; i < s.length; i++) {\n var code = s.charCodeAt(i);\n if (code <= 0x7f) {\n len += 1;\n } else if (code <= 0x7ff) {\n len += 2;\n } else if (code >= 0xd800 && code <= 0xdfff) {\n // Surrogate pair: These take 4 bytes in UTF-8 and 2 chars in UCS-2\n // (Assume next char is the other [valid] half and just skip it)\n len += 4;\n i++;\n } else if (code < 0xffff) {\n len += 3;\n } else {\n len += 4;\n }\n }\n return len;\n }\n var postable = function (queue) {\n return typeof queue[0] === 'object' && 'evt' in queue[0];\n };\n /**\n * Send event as POST request right away without going to queue. Used when the request surpasses maxGetBytes or maxPostBytes\n * @param body POST request body\n * @param configCollectorUrl full collector URL with path\n */\n function sendPostRequestWithoutQueueing(body, configCollectorUrl) {\n var xhr = initializeXMLHttpRequest(configCollectorUrl, true, false);\n var batch = attachStmToEvent([body.evt]);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (isSuccessfulRequest(xhr.status)) {\n onRequestSuccess === null || onRequestSuccess === void 0 ? void 0 : onRequestSuccess(batch);\n } else {\n onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure({\n status: xhr.status,\n message: xhr.statusText,\n events: batch,\n willRetry: false\n });\n }\n }\n };\n xhr.send(encloseInPayloadDataEnvelope(batch));\n }\n function removeEventsFromQueue(numberToSend) {\n for (var deleteCount = 0; deleteCount < numberToSend; deleteCount++) {\n outQueue.shift();\n }\n if (useLocalStorage) {\n attemptWriteLocalStorage(queueName, JSON.stringify(outQueue.slice(0, maxLocalStorageQueueSize)));\n }\n }\n function setXhrCallbacks(xhr, numberToSend, batch) {\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n clearTimeout(xhrTimeout);\n if (isSuccessfulRequest(xhr.status)) {\n removeEventsFromQueue(numberToSend);\n onRequestSuccess === null || onRequestSuccess === void 0 ? void 0 : onRequestSuccess(batch);\n executeQueue();\n } else {\n var willRetry = shouldRetryForStatusCode(xhr.status);\n if (!willRetry) {\n LOG.error(\"Status \".concat(xhr.status, \", will not retry.\"));\n removeEventsFromQueue(numberToSend);\n }\n onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure({\n status: xhr.status,\n message: xhr.statusText,\n events: batch,\n willRetry: willRetry\n });\n executingQueue = false;\n }\n }\n };\n // Time out POST requests after connectionTimeout\n var xhrTimeout = setTimeout(function () {\n xhr.abort();\n if (!retryFailedRequests) {\n removeEventsFromQueue(numberToSend);\n }\n onRequestFailure === null || onRequestFailure === void 0 ? void 0 : onRequestFailure({\n status: 0,\n message: 'timeout',\n events: batch,\n willRetry: retryFailedRequests\n });\n executingQueue = false;\n }, connectionTimeout);\n }\n /*\n * Queue for submission to the collector and start processing queue\n */\n function enqueueRequest(request, url) {\n configCollectorUrl = url + path;\n var eventTooBigWarning = function (bytes, maxBytes) {\n return LOG.warn('Event (' + bytes + 'B) too big, max is ' + maxBytes);\n };\n if (usePost) {\n var body = getBody(request);\n if (body.bytes >= maxPostBytes) {\n eventTooBigWarning(body.bytes, maxPostBytes);\n sendPostRequestWithoutQueueing(body, configCollectorUrl);\n return;\n } else {\n outQueue.push(body);\n }\n } else {\n var querystring = getQuerystring(request);\n if (maxGetBytes > 0) {\n var requestUrl = createGetUrl(querystring);\n var bytes = getUTF8Length(requestUrl);\n if (bytes >= maxGetBytes) {\n eventTooBigWarning(bytes, maxGetBytes);\n if (useXhr) {\n var body = getBody(request);\n var postUrl = url + postPath;\n sendPostRequestWithoutQueueing(body, postUrl);\n }\n return;\n }\n }\n outQueue.push(querystring);\n }\n var savedToLocalStorage = false;\n if (useLocalStorage) {\n savedToLocalStorage = attemptWriteLocalStorage(queueName, JSON.stringify(outQueue.slice(0, maxLocalStorageQueueSize)));\n }\n // If we're not processing the queue, we'll start.\n if (!executingQueue && (!savedToLocalStorage || outQueue.length >= bufferSize)) {\n executeQueue();\n }\n }\n /*\n * Run through the queue of requests, sending them one at a time.\n * Stops processing when we run out of queued requests, or we get an error.\n */\n function executeQueue(sync) {\n if (sync === void 0) {\n sync = false;\n }\n // Failsafe in case there is some way for a bad value like \"null\" to end up in the outQueue\n while (outQueue.length && typeof outQueue[0] !== 'string' && typeof outQueue[0] !== 'object') {\n outQueue.shift();\n }\n if (!outQueue.length) {\n executingQueue = false;\n return;\n }\n // Let's check that we have a URL\n if (!isString(configCollectorUrl)) {\n throw 'No collector configured';\n }\n executingQueue = true;\n if (idService && !idServiceCalled) {\n var xhr_1 = initializeXMLHttpRequest(idService, false, sync);\n idServiceCalled = true;\n xhr_1.timeout = connectionTimeout;\n xhr_1.onreadystatechange = function () {\n if (xhr_1.readyState === 4) {\n executeQueue();\n }\n };\n xhr_1.send();\n return;\n }\n if (useXhr) {\n // Keep track of number of events to delete from queue\n var chooseHowManyToSend = function (queue) {\n var numberToSend = 0,\n byteCount = 0;\n while (numberToSend < queue.length) {\n byteCount += queue[numberToSend].bytes;\n if (byteCount >= maxPostBytes) {\n break;\n } else {\n numberToSend += 1;\n }\n }\n return numberToSend;\n };\n var url = void 0,\n xhr = void 0,\n numberToSend = void 0;\n if (postable(outQueue)) {\n url = configCollectorUrl;\n xhr = initializeXMLHttpRequest(url, true, sync);\n numberToSend = chooseHowManyToSend(outQueue);\n } else {\n url = createGetUrl(outQueue[0]);\n xhr = initializeXMLHttpRequest(url, false, sync);\n numberToSend = 1;\n }\n if (!postable(outQueue)) {\n // If not postable then it's a GET so just send it\n setXhrCallbacks(xhr, numberToSend, [url]);\n xhr.send();\n } else {\n var batch = outQueue.slice(0, numberToSend);\n if (batch.length > 0) {\n var beaconStatus = false;\n var eventBatch = batch.map(function (x) {\n return x.evt;\n });\n if (useBeacon) {\n var blob = new Blob([encloseInPayloadDataEnvelope(attachStmToEvent(eventBatch))], {\n type: 'application/json'\n });\n try {\n beaconStatus = window.navigator.sendBeacon(url, blob);\n } catch (error) {\n beaconStatus = false;\n }\n }\n // When beaconStatus is true, we can't _guarantee_ that it was successful (beacon queues asynchronously)\n // but the browser has taken it out of our hands, so we want to flush the queue assuming it will do its job\n if (beaconStatus === true) {\n removeEventsFromQueue(numberToSend);\n onRequestSuccess === null || onRequestSuccess === void 0 ? void 0 : onRequestSuccess(batch);\n executeQueue();\n } else {\n var batch_1 = attachStmToEvent(eventBatch);\n setXhrCallbacks(xhr, numberToSend, batch_1);\n xhr.send(encloseInPayloadDataEnvelope(batch_1));\n }\n }\n }\n } else if (!anonymousTracking && !postable(outQueue)) {\n // We can't send with this technique if anonymous tracking is on as we can't attach the header\n var image = new Image(1, 1),\n loading_1 = true;\n image.onload = function () {\n if (!loading_1) return;\n loading_1 = false;\n outQueue.shift();\n if (useLocalStorage) {\n attemptWriteLocalStorage(queueName, JSON.stringify(outQueue.slice(0, maxLocalStorageQueueSize)));\n }\n executeQueue();\n };\n image.onerror = function () {\n if (!loading_1) return;\n loading_1 = false;\n executingQueue = false;\n };\n image.src = createGetUrl(outQueue[0]);\n setTimeout(function () {\n if (loading_1 && executingQueue) {\n loading_1 = false;\n executeQueue();\n }\n }, connectionTimeout);\n } else {\n executingQueue = false;\n }\n }\n /**\n * Determines whether a request was successful, based on its status code\n * Anything in the 2xx range is considered successful\n *\n * @param statusCode The status code of the request\n * @returns Whether the request was successful\n */\n function isSuccessfulRequest(statusCode) {\n return statusCode >= 200 && statusCode < 300;\n }\n function shouldRetryForStatusCode(statusCode) {\n // success, don't retry\n if (isSuccessfulRequest(statusCode)) {\n return false;\n }\n if (!retryFailedRequests) {\n return false;\n }\n // retry if status code among custom user-supplied retry codes\n if (retryStatusCodes.includes(statusCode)) {\n return true;\n }\n // retry if status code *not* among the don't retry codes\n return !dontRetryStatusCodes.includes(statusCode);\n }\n /**\n * Open an XMLHttpRequest for a given endpoint with the correct credentials and header\n *\n * @param string - url The destination URL\n * @returns object The XMLHttpRequest\n */\n function initializeXMLHttpRequest(url, post, sync) {\n var xhr = new XMLHttpRequest();\n if (post) {\n xhr.open('POST', url, !sync);\n xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');\n } else {\n xhr.open('GET', url, !sync);\n }\n xhr.withCredentials = withCredentials;\n if (anonymousTracking) {\n xhr.setRequestHeader('SP-Anonymous', '*');\n }\n for (var header in customHeaders) {\n if (Object.prototype.hasOwnProperty.call(customHeaders, header)) {\n xhr.setRequestHeader(header, customHeaders[header]);\n }\n }\n return xhr;\n }\n /**\n * Enclose an array of events in a self-describing payload_data JSON string\n *\n * @param array - events Batch of events\n * @returns string payload_data self-describing JSON\n */\n function encloseInPayloadDataEnvelope(events) {\n return JSON.stringify({\n schema: PAYLOAD_DATA_SCHEMA,\n data: events\n });\n }\n /**\n * Attaches the STM field to outbound POST events.\n *\n * @param events - the events to attach the STM to\n */\n function attachStmToEvent(events) {\n var stm = new Date().getTime().toString();\n for (var i = 0; i < events.length; i++) {\n events[i]['stm'] = stm;\n }\n return events;\n }\n /**\n * Creates the full URL for sending the GET request. Will append `stm` if enabled\n *\n * @param nextRequest - the query string of the next request\n */\n function createGetUrl(nextRequest) {\n if (useStm) {\n return configCollectorUrl + nextRequest.replace('?', '?stm=' + new Date().getTime() + '&');\n }\n return configCollectorUrl + nextRequest;\n }\n return {\n enqueueRequest: enqueueRequest,\n executeQueue: function () {\n if (!executingQueue) {\n executeQueue();\n }\n },\n setUseLocalStorage: function (localStorage) {\n useLocalStorage = localStorage;\n },\n setAnonymousTracking: function (anonymous) {\n anonymousTracking = anonymous;\n },\n setCollectorUrl: function (url) {\n configCollectorUrl = url + path;\n },\n setBufferSize: function (newBufferSize) {\n bufferSize = newBufferSize;\n }\n };\n function hasWebKitBeaconBug(useragent) {\n return isIosVersionLessThanOrEqualTo(13, useragent) || isMacosxVersionLessThanOrEqualTo(10, 15, useragent) && isSafari(useragent);\n function isIosVersionLessThanOrEqualTo(major, useragent) {\n var match = useragent.match('(iP.+; CPU .*OS (d+)[_d]*.*) AppleWebKit/');\n if (match && match.length) {\n return parseInt(match[0]) <= major;\n }\n return false;\n }\n function isMacosxVersionLessThanOrEqualTo(major, minor, useragent) {\n var match = useragent.match('(Macintosh;.*Mac OS X (d+)_(d+)[_d]*.*) AppleWebKit/');\n if (match && match.length) {\n return parseInt(match[0]) <= major || parseInt(match[0]) === major && parseInt(match[1]) <= minor;\n }\n return false;\n }\n function isSafari(useragent) {\n return useragent.match('Version/.* Safari/') && !isChromiumBased(useragent);\n }\n function isChromiumBased(useragent) {\n return useragent.match('Chrom(e|ium)');\n }\n }\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/*\n * Extract parameter from URL\n */\nfunction getParameter(url, name) {\n // scheme : // [username [: password] @] hostname [: port] [/ [path] [? query] [# fragment]]\n var e = new RegExp('^(?:https?|ftp)(?::/*(?:[^?]+))([?][^#]+)'),\n matches = e.exec(url);\n if (matches && (matches === null || matches === void 0 ? void 0 : matches.length) > 1) {\n return fromQuerystring(name, matches[1]);\n }\n return null;\n}\n/*\n * Fix-up URL when page rendered from search engine cache or translated page.\n */\nfunction fixupUrl(hostName, href, referrer) {\n var _a;\n if (hostName === 'translate.googleusercontent.com') {\n // Google\n if (referrer === '') {\n referrer = href;\n }\n href = (_a = getParameter(href, 'u')) !== null && _a !== void 0 ? _a : '';\n hostName = getHostName(href);\n } else if (hostName === 'cc.bingj.com' ||\n // Bing & Yahoo\n hostName === 'webcache.googleusercontent.com' // Google\n ) {\n href = document.links[0].href;\n hostName = getHostName(href);\n }\n return [hostName, href, referrer];\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Indices of cookie values\n */\nvar cookieDisabledIndex = 0,\n domainUserIdIndex = 1,\n createTsIndex = 2,\n visitCountIndex = 3,\n nowTsIndex = 4,\n lastVisitTsIndex = 5,\n sessionIdIndex = 6,\n previousSessionIdIndex = 7,\n firstEventIdIndex = 8,\n firstEventTsInMsIndex = 9,\n eventIndexIndex = 10;\nfunction emptyIdCookie() {\n var idCookie = ['1', '', 0, 0, 0, undefined, '', '', '', undefined, 0];\n return idCookie;\n}\n/**\n * Parses the cookie values from its string representation.\n *\n * @param id Cookie value as string\n * @param domainUserId Domain user ID to be used in case of empty cookie string\n * @returns Parsed ID cookie tuple\n */\nfunction parseIdCookie(id, domainUserId, memorizedSessionId, memorizedVisitCount) {\n var now = new Date(),\n nowTs = Math.round(now.getTime() / 1000),\n tmpContainer;\n if (id) {\n tmpContainer = id.split('.');\n // cookies enabled\n tmpContainer.unshift('0');\n } else {\n tmpContainer = [\n // cookies disabled\n '1',\n // Domain user ID\n domainUserId,\n // Creation timestamp - seconds since Unix epoch\n nowTs,\n // visitCount - 0 = no previous visit\n memorizedVisitCount,\n // Current visit timestamp\n nowTs,\n // Last visit timestamp - blank meaning no previous visit\n '',\n // Session ID\n memorizedSessionId];\n }\n if (!tmpContainer[sessionIdIndex] || tmpContainer[sessionIdIndex] === 'undefined') {\n // session id\n tmpContainer[sessionIdIndex] = v4();\n }\n if (!tmpContainer[previousSessionIdIndex] || tmpContainer[previousSessionIdIndex] === 'undefined') {\n // previous session id\n tmpContainer[previousSessionIdIndex] = '';\n }\n if (!tmpContainer[firstEventIdIndex] || tmpContainer[firstEventIdIndex] === 'undefined') {\n // firstEventId - blank meaning no previous event\n tmpContainer[firstEventIdIndex] = '';\n }\n if (!tmpContainer[firstEventTsInMsIndex] || tmpContainer[firstEventTsInMsIndex] === 'undefined') {\n // firstEventTs - blank meaning no previous event\n tmpContainer[firstEventTsInMsIndex] = '';\n }\n if (!tmpContainer[eventIndexIndex] || tmpContainer[eventIndexIndex] === 'undefined') {\n // eventIndex – 0 = no previous event\n tmpContainer[eventIndexIndex] = 0;\n }\n var parseIntOr = function (value, defaultValue) {\n var parsed = parseInt(value);\n return isNaN(parsed) ? defaultValue : parsed;\n };\n var parseIntOrUndefined = function (value) {\n return value ? parseIntOr(value, undefined) : undefined;\n };\n var parsed = [tmpContainer[cookieDisabledIndex], tmpContainer[domainUserIdIndex], parseIntOr(tmpContainer[createTsIndex], nowTs), parseIntOr(tmpContainer[visitCountIndex], memorizedVisitCount), parseIntOr(tmpContainer[nowTsIndex], nowTs), parseIntOrUndefined(tmpContainer[lastVisitTsIndex]), tmpContainer[sessionIdIndex], tmpContainer[previousSessionIdIndex], tmpContainer[firstEventIdIndex], parseIntOrUndefined(tmpContainer[firstEventTsInMsIndex]), parseIntOr(tmpContainer[eventIndexIndex], 0)];\n return parsed;\n}\n/**\n * Initializes the domain user ID if not already present in the cookie. Sets an empty string if anonymous tracking.\n *\n * @param idCookie Parsed cookie\n * @param configAnonymousTracking Whether anonymous tracking is enabled\n * @returns Domain user ID\n */\nfunction initializeDomainUserId(idCookie, configAnonymousTracking) {\n var domainUserId;\n if (idCookie[domainUserIdIndex]) {\n domainUserId = idCookie[domainUserIdIndex];\n } else if (!configAnonymousTracking) {\n domainUserId = v4();\n idCookie[domainUserIdIndex] = domainUserId;\n } else {\n domainUserId = '';\n idCookie[domainUserIdIndex] = domainUserId;\n }\n return domainUserId;\n}\n/**\n * Starts a new session with a new ID.\n * Sets the previous session, last visit timestamp, and increments visit count if cookies enabled.\n * First event references are reset and will be updated in `updateFirstEventInIdCookie`.\n *\n * @param idCookie Parsed cookie\n * @param options.configStateStorageStrategy Cookie storage strategy\n * @param options.configAnonymousTracking If anonymous tracking is enabled\n * @param options.memorizedVisitCount Visit count to be used if cookies not enabled\n * @param options.onSessionUpdateCallback Session callback triggered on every session update\n * @returns New session ID\n */\nfunction startNewIdCookieSession(idCookie, options) {\n if (options === void 0) {\n options = {\n memorizedVisitCount: 1\n };\n }\n var memorizedVisitCount = options.memorizedVisitCount;\n // If cookies are enabled, base visit count and session ID on the cookies\n if (cookiesEnabledInIdCookie(idCookie)) {\n // Store the previous session ID\n idCookie[previousSessionIdIndex] = idCookie[sessionIdIndex];\n // Set lastVisitTs to currentVisitTs\n idCookie[lastVisitTsIndex] = idCookie[nowTsIndex];\n // Increment the session ID\n idCookie[visitCountIndex]++;\n } else {\n idCookie[visitCountIndex] = memorizedVisitCount;\n }\n // Create a new sessionId\n var sessionId = v4();\n idCookie[sessionIdIndex] = sessionId;\n // Reset event index and first event references\n idCookie[eventIndexIndex] = 0;\n idCookie[firstEventIdIndex] = '';\n idCookie[firstEventTsInMsIndex] = undefined;\n return sessionId;\n}\n/**\n * Update now timestamp in cookie.\n *\n * @param idCookie Parsed cookie\n */\nfunction updateNowTsInIdCookie(idCookie) {\n idCookie[nowTsIndex] = Math.round(new Date().getTime() / 1000);\n}\n/**\n * Updates the first event references according to the event payload if first event in session.\n *\n * @param idCookie Parsed cookie\n * @param payloadBuilder Event payload builder\n */\nfunction updateFirstEventInIdCookie(idCookie, payloadBuilder) {\n // Update first event references if new session or not present\n if (idCookie[eventIndexIndex] === 0) {\n var payload = payloadBuilder.build();\n idCookie[firstEventIdIndex] = payload['eid'];\n var ts = payload['dtm'] || payload['ttm'];\n idCookie[firstEventTsInMsIndex] = ts ? parseInt(ts) : undefined;\n }\n}\n/**\n * Increments event index counter.\n *\n * @param idCookie Parsed cookie\n */\nfunction incrementEventIndexInIdCookie(idCookie) {\n idCookie[eventIndexIndex] += 1;\n}\n/**\n * Serializes parsed cookie to string representation.\n *\n * @param idCookie Parsed cookie\n * @returns String cookie value\n */\nfunction serializeIdCookie(idCookie, configAnonymousTracking) {\n var anonymizedIdCookie = __spreadArray([], idCookie, true);\n if (configAnonymousTracking) {\n anonymizedIdCookie[domainUserIdIndex] = '';\n anonymizedIdCookie[previousSessionIdIndex] = '';\n }\n anonymizedIdCookie.shift();\n return anonymizedIdCookie.join('.');\n}\n/**\n * Transforms the parsed cookie into a client session context entity.\n *\n * @param idCookie Parsed cookie\n * @param configStateStorageStrategy Cookie storage strategy\n * @param configAnonymousTracking If anonymous tracking is enabled\n * @returns Client session context entity\n */\nfunction clientSessionFromIdCookie(idCookie, configStateStorageStrategy, configAnonymousTracking) {\n var firstEventTsInMs = idCookie[firstEventTsInMsIndex];\n var clientSession = {\n userId: configAnonymousTracking ? '00000000-0000-0000-0000-000000000000' // TODO: use uuid.NIL when we upgrade to uuid v8.3\n : idCookie[domainUserIdIndex],\n sessionId: idCookie[sessionIdIndex],\n eventIndex: idCookie[eventIndexIndex],\n sessionIndex: idCookie[visitCountIndex],\n previousSessionId: configAnonymousTracking ? null : idCookie[previousSessionIdIndex] || null,\n storageMechanism: configStateStorageStrategy == 'localStorage' ? 'LOCAL_STORAGE' : 'COOKIE_1',\n firstEventId: idCookie[firstEventIdIndex] || null,\n firstEventTimestamp: firstEventTsInMs ? new Date(firstEventTsInMs).toISOString() : null\n };\n return clientSession;\n}\nfunction sessionIdFromIdCookie(idCookie) {\n return idCookie[sessionIdIndex];\n}\nfunction domainUserIdFromIdCookie(idCookie) {\n return idCookie[domainUserIdIndex];\n}\nfunction visitCountFromIdCookie(idCookie) {\n return idCookie[visitCountIndex];\n}\nfunction cookiesEnabledInIdCookie(idCookie) {\n return idCookie[cookieDisabledIndex] === '0';\n}\nfunction eventIndexFromIdCookie(idCookie) {\n return idCookie[eventIndexIndex];\n}\nfunction useResizeObserver() {\n return 'ResizeObserver' in window;\n}\nvar resizeObserverInitialized = false;\nfunction initializeResizeObserver() {\n if (resizeObserverInitialized) {\n return;\n }\n if (!document || !document.body || !document.documentElement) {\n return;\n }\n resizeObserverInitialized = true;\n var resizeObserver = new ResizeObserver(function (entries) {\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var entry = entries_1[_i];\n if (entry.target === document.body || entry.target === document.documentElement) {\n cachedProperties = readBrowserProperties();\n }\n }\n });\n resizeObserver.observe(document.body);\n resizeObserver.observe(document.documentElement);\n}\nvar cachedProperties;\n/* Separator used for dimension values e.g. widthxheight */\nvar DIMENSION_SEPARATOR = 'x';\n/**\n * Gets various browser properties (that are expensive to read!)\n * - Will use a \"ResizeObserver\" approach in modern browsers to update cached properties only on change\n * - Will fallback to a direct read approach without cache in old browsers\n *\n * @returns BrowserProperties\n */\nfunction getBrowserProperties() {\n if (!useResizeObserver()) {\n return readBrowserProperties();\n }\n if (!cachedProperties) {\n cachedProperties = readBrowserProperties();\n }\n initializeResizeObserver();\n return cachedProperties;\n}\n/**\n * Reads the browser properties - expensive call!\n *\n * @returns BrowserProperties\n */\nfunction readBrowserProperties() {\n return {\n viewport: floorDimensionFields(detectViewport()),\n documentSize: floorDimensionFields(detectDocumentSize()),\n resolution: floorDimensionFields(detectScreenResolution()),\n colorDepth: screen.colorDepth,\n devicePixelRatio: window.devicePixelRatio,\n cookiesEnabled: window.navigator.cookieEnabled,\n online: window.navigator.onLine,\n browserLanguage: window.navigator.language || window.navigator.userLanguage,\n documentLanguage: document.documentElement.lang,\n webdriver: window.navigator.webdriver,\n deviceMemory: window.navigator.deviceMemory,\n hardwareConcurrency: window.navigator.hardwareConcurrency\n };\n}\n/**\n * Gets the current viewport.\n *\n * Code based on:\n * - http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\n * - http://responsejs.com/labs/dimensions/\n */\nfunction detectViewport() {\n var width, height;\n if ('innerWidth' in window) {\n width = window['innerWidth'];\n height = window['innerHeight'];\n } else {\n var e = document.documentElement || document.body;\n width = e['clientWidth'];\n height = e['clientHeight'];\n }\n return Math.max(0, width) + DIMENSION_SEPARATOR + Math.max(0, height);\n}\n/**\n * Gets the dimensions of the current\n * document.\n *\n * Code based on:\n * - http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\n */\nfunction detectDocumentSize() {\n var de = document.documentElement,\n // Alias\n be = document.body,\n // document.body may not have rendered, so check whether be.offsetHeight is null\n bodyHeight = be ? Math.max(be.offsetHeight, be.scrollHeight) : 0;\n var w = Math.max(de.clientWidth, de.offsetWidth, de.scrollWidth);\n var h = Math.max(de.clientHeight, de.offsetHeight, de.scrollHeight, bodyHeight);\n return isNaN(w) || isNaN(h) ? '' : w + DIMENSION_SEPARATOR + h;\n}\nfunction detectScreenResolution() {\n return screen.width + DIMENSION_SEPARATOR + screen.height;\n}\nfunction floorDimensionFields(field) {\n return field && field.split(DIMENSION_SEPARATOR).map(function (dimension) {\n return Math.floor(Number(dimension));\n }).join(DIMENSION_SEPARATOR);\n}\n\n/**\n * The Snowplow Tracker\n *\n * @param trackerId - The unique identifier of the tracker\n * @param namespace - The namespace of the tracker object\n * @param version - The current version of the JavaScript Tracker\n * @param endpoint - The collector endpoint to send events to, with or without protocol\n * @param sharedState - An object containing state which is shared across tracker instances\n * @param trackerConfiguration - Dictionary of configuration options\n */\nfunction Tracker(trackerId, namespace, version, endpoint, sharedState, trackerConfiguration) {\n if (trackerConfiguration === void 0) {\n trackerConfiguration = {};\n }\n var browserPlugins = [];\n var newTracker = function (trackerId, namespace, version, endpoint, state, trackerConfiguration) {\n /************************************************************\n * Private members\n ************************************************************/\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4;\n //use POST if eventMethod isn't present on the newTrackerConfiguration\n trackerConfiguration.eventMethod = (_a = trackerConfiguration.eventMethod) !== null && _a !== void 0 ? _a : 'post';\n var getStateStorageStrategy = function (config) {\n var _a;\n return (_a = config.stateStorageStrategy) !== null && _a !== void 0 ? _a : 'cookieAndLocalStorage';\n },\n getAnonymousSessionTracking = function (config) {\n var _a, _b;\n if (typeof config.anonymousTracking === 'boolean') {\n return false;\n }\n return (_b = ((_a = config.anonymousTracking) === null || _a === void 0 ? void 0 : _a.withSessionTracking) === true) !== null && _b !== void 0 ? _b : false;\n },\n getAnonymousServerTracking = function (config) {\n var _a, _b;\n if (typeof config.anonymousTracking === 'boolean') {\n return false;\n }\n return (_b = ((_a = config.anonymousTracking) === null || _a === void 0 ? void 0 : _a.withServerAnonymisation) === true) !== null && _b !== void 0 ? _b : false;\n },\n getAnonymousTracking = function (config) {\n return !!config.anonymousTracking;\n },\n isBrowserContextAvailable = (_c = (_b = trackerConfiguration === null || trackerConfiguration === void 0 ? void 0 : trackerConfiguration.contexts) === null || _b === void 0 ? void 0 : _b.browser) !== null && _c !== void 0 ? _c : false,\n isWebPageContextAvailable = (_e = (_d = trackerConfiguration === null || trackerConfiguration === void 0 ? void 0 : trackerConfiguration.contexts) === null || _d === void 0 ? void 0 : _d.webPage) !== null && _e !== void 0 ? _e : true,\n getExtendedCrossDomainTrackingConfiguration = function (crossDomainTrackingConfig) {\n if (typeof crossDomainTrackingConfig === 'boolean') {\n return {\n useExtendedCrossDomainLinker: crossDomainTrackingConfig\n };\n }\n return {\n useExtendedCrossDomainLinker: true,\n collectCrossDomainAttributes: crossDomainTrackingConfig\n };\n };\n // Get all injected plugins\n browserPlugins.push(getBrowserDataPlugin());\n /* When including the Web Page context, we add the relevant internal plugins */\n if (isWebPageContextAvailable) {\n browserPlugins.push(getWebPagePlugin());\n }\n if (isBrowserContextAvailable) {\n browserPlugins.push(getBrowserContextPlugin());\n }\n browserPlugins.push.apply(browserPlugins, (_f = trackerConfiguration.plugins) !== null && _f !== void 0 ? _f : []);\n var\n // Tracker core\n core = trackerCore({\n base64: trackerConfiguration.encodeBase64,\n corePlugins: browserPlugins,\n callback: sendRequest\n }),\n // Aliases\n documentCharset = document.characterSet || document.charset,\n // Current URL and Referrer URL\n locationArray = fixupUrl(window.location.hostname, window.location.href, getReferrer()),\n domainAlias = fixupDomain(locationArray[0]),\n locationHrefAlias = locationArray[1],\n configReferrerUrl = locationArray[2],\n customReferrer,\n // Platform defaults to web for this tracker\n configPlatform = (_g = trackerConfiguration.platform) !== null && _g !== void 0 ? _g : 'web',\n // Snowplow collector URL\n configCollectorUrl = asCollectorUrl(endpoint),\n // Custom path for post requests (to get around adblockers)\n configPostPath = (_h = trackerConfiguration.postPath) !== null && _h !== void 0 ? _h : '/com.snowplowanalytics.snowplow/tp2',\n // Site ID\n configTrackerSiteId = (_j = trackerConfiguration.appId) !== null && _j !== void 0 ? _j : '',\n // Document URL\n configCustomUrl,\n // Document title\n lastDocumentTitle = document.title,\n // Custom title\n lastConfigTitle,\n // Indicates that the lastConfigTitle was set from a trackPageView call\n // Custom title configured this way has a shorter lifespan than when set using setDocumentTitle.\n // It only lasts until the next trackPageView call.\n lastConfigTitleFromTrackPageView = false,\n // Controls whether activity tracking page ping event timers are reset on page view events\n resetActivityTrackingOnPageView = (_k = trackerConfiguration.resetActivityTrackingOnPageView) !== null && _k !== void 0 ? _k : true,\n // Disallow hash tags in URL. TODO: Should this be set to true by default?\n configDiscardHashTag,\n // Disallow brace in URL.\n configDiscardBrace,\n // First-party cookie name prefix\n configCookieNamePrefix = (_l = trackerConfiguration.cookieName) !== null && _l !== void 0 ? _l : '_sp_',\n // First-party cookie domain\n // User agent defaults to origin hostname\n configCookieDomain = (_m = trackerConfiguration.cookieDomain) !== null && _m !== void 0 ? _m : undefined,\n // First-party cookie path\n // Default is user agent defined.\n configCookiePath = '/',\n // First-party cookie samesite attribute\n configCookieSameSite = (_o = trackerConfiguration.cookieSameSite) !== null && _o !== void 0 ? _o : 'None',\n // First-party cookie secure attribute\n configCookieSecure = (_p = trackerConfiguration.cookieSecure) !== null && _p !== void 0 ? _p : true,\n // Do Not Track browser feature\n dnt = window.navigator.doNotTrack || window.navigator.msDoNotTrack || window.doNotTrack,\n // Do Not Track\n configDoNotTrack = typeof trackerConfiguration.respectDoNotTrack !== 'undefined' ? trackerConfiguration.respectDoNotTrack && (dnt === 'yes' || dnt === '1') : false,\n // Opt out of cookie tracking\n configOptOutCookie,\n // Life of the visitor cookie (in seconds)\n configVisitorCookieTimeout = (_q = trackerConfiguration.cookieLifetime) !== null && _q !== void 0 ? _q : 63072000,\n // 2 years\n // Life of the session cookie (in seconds)\n configSessionCookieTimeout = (_r = trackerConfiguration.sessionCookieTimeout) !== null && _r !== void 0 ? _r : 1800,\n // 30 minutes\n // Allows tracking user session (using cookies or local storage), can only be used with anonymousTracking\n configAnonymousSessionTracking = getAnonymousSessionTracking(trackerConfiguration),\n // Will send a header to server to prevent returning cookie and capturing IP\n configAnonymousServerTracking = getAnonymousServerTracking(trackerConfiguration),\n // Sets tracker to work in anonymous mode without accessing client storage\n configAnonymousTracking = getAnonymousTracking(trackerConfiguration),\n // Strategy defining how to store the state: cookie, localStorage, cookieAndLocalStorage or none\n configStateStorageStrategy = getStateStorageStrategy(trackerConfiguration),\n // Last activity timestamp\n lastActivityTime,\n // The last time an event was fired on the page - used to invalidate session if cookies are disabled\n lastEventTime = new Date().getTime(),\n // How are we scrolling?\n minXOffset,\n maxXOffset,\n minYOffset,\n maxYOffset,\n // Domain hash value\n domainHash,\n // Domain unique user ID\n domainUserId,\n // ID for the current session\n memorizedSessionId,\n // Index for the current session - kept in memory in case cookies are disabled\n memorizedVisitCount = 1,\n // Business-defined unique user ID\n businessUserId,\n // Manager for local storage queue\n outQueue = OutQueueManager(trackerId, state, configStateStorageStrategy == 'localStorage' || configStateStorageStrategy == 'cookieAndLocalStorage', trackerConfiguration.eventMethod, configPostPath, (_s = trackerConfiguration.bufferSize) !== null && _s !== void 0 ? _s : 1, (_t = trackerConfiguration.maxPostBytes) !== null && _t !== void 0 ? _t : 40000, (_u = trackerConfiguration.maxGetBytes) !== null && _u !== void 0 ? _u : 0, (_v = trackerConfiguration.useStm) !== null && _v !== void 0 ? _v : true, (_w = trackerConfiguration.maxLocalStorageQueueSize) !== null && _w !== void 0 ? _w : 1000, (_x = trackerConfiguration.connectionTimeout) !== null && _x !== void 0 ? _x : 5000, configAnonymousServerTracking, (_y = trackerConfiguration.customHeaders) !== null && _y !== void 0 ? _y : {}, (_z = trackerConfiguration.withCredentials) !== null && _z !== void 0 ? _z : true, (_0 = trackerConfiguration.retryStatusCodes) !== null && _0 !== void 0 ? _0 : [], ((_1 = trackerConfiguration.dontRetryStatusCodes) !== null && _1 !== void 0 ? _1 : []).concat([400, 401, 403, 410, 422]), trackerConfiguration.idService, trackerConfiguration.retryFailedRequests, trackerConfiguration.onRequestSuccess, trackerConfiguration.onRequestFailure),\n // Whether pageViewId should be regenerated after each trackPageView. Affect web_page context\n preservePageViewId = false,\n // Whether pageViewId should be kept the same until the page URL changes. Affects web_page context\n preservePageViewIdForUrl = (_2 = trackerConfiguration.preservePageViewIdForUrl) !== null && _2 !== void 0 ? _2 : false,\n // The pageViewId of the last page view event or undefined if no page view tracked yet. Used to determine if pageViewId should be regenerated for a new page view.\n lastSentPageViewId = undefined,\n // Activity tracking config for callback and page ping variants\n activityTrackingConfig = {\n enabled: false,\n installed: false,\n configurations: {}\n },\n configSessionContext = (_4 = (_3 = trackerConfiguration.contexts) === null || _3 === void 0 ? void 0 : _3.session) !== null && _4 !== void 0 ? _4 : false,\n toOptoutByCookie,\n onSessionUpdateCallback = trackerConfiguration.onSessionUpdateCallback,\n manualSessionUpdateCalled = false,\n _5 = getExtendedCrossDomainTrackingConfiguration(trackerConfiguration.useExtendedCrossDomainLinker || false),\n useExtendedCrossDomainLinker = _5.useExtendedCrossDomainLinker,\n collectCrossDomainAttributes = _5.collectCrossDomainAttributes;\n if (trackerConfiguration.hasOwnProperty('discoverRootDomain') && trackerConfiguration.discoverRootDomain) {\n configCookieDomain = findRootDomain(configCookieSameSite, configCookieSecure);\n }\n var _6 = getBrowserProperties(),\n browserLanguage = _6.browserLanguage,\n resolution = _6.resolution,\n colorDepth = _6.colorDepth,\n cookiesEnabled = _6.cookiesEnabled;\n // Set up unchanging name-value pairs\n core.setTrackerVersion(version);\n core.setTrackerNamespace(namespace);\n core.setAppId(configTrackerSiteId);\n core.setPlatform(configPlatform);\n core.addPayloadPair('cookie', cookiesEnabled ? '1' : '0');\n core.addPayloadPair('cs', documentCharset);\n core.addPayloadPair('lang', browserLanguage);\n core.addPayloadPair('res', resolution);\n core.addPayloadPair('cd', colorDepth);\n /*\n * Initialize tracker\n */\n updateDomainHash();\n initializeIdsAndCookies();\n if (trackerConfiguration.crossDomainLinker) {\n decorateLinks(trackerConfiguration.crossDomainLinker);\n }\n /**\n * Recalculate the domain, URL, and referrer\n */\n function refreshUrl() {\n locationArray = fixupUrl(window.location.hostname, window.location.href, getReferrer());\n // If this is a single-page app and the page URL has changed, then:\n // - if the new URL's querystring contains a \"refer(r)er\" parameter, use it as the referrer\n // - otherwise use the old URL as the referer\n if (locationArray[1] !== locationHrefAlias) {\n configReferrerUrl = getReferrer(locationHrefAlias);\n }\n domainAlias = fixupDomain(locationArray[0]);\n locationHrefAlias = locationArray[1];\n }\n /**\n * Create link handler to decorate the querystring of a link (onClick/onMouseDown)\n *\n * @param event - e The event targeting the link\n */\n function addLinkDecorationHandler(extended) {\n var CROSS_DOMAIN_PARAMETER_NAME = '_sp';\n return function (evt) {\n var elt = evt.currentTarget;\n var crossDomainParameterValue = createCrossDomainParameterValue(extended, collectCrossDomainAttributes, {\n domainUserId: domainUserId,\n userId: businessUserId || undefined,\n sessionId: memorizedSessionId,\n sourceId: configTrackerSiteId,\n sourcePlatform: configPlatform,\n event: evt\n });\n if (elt === null || elt === void 0 ? void 0 : elt.href) {\n elt.href = decorateQuerystring(elt.href, CROSS_DOMAIN_PARAMETER_NAME, crossDomainParameterValue);\n }\n };\n }\n /**\n * Enable querystring decoration for links passing a filter\n * Whenever such a link is clicked on or navigated to via the keyboard,\n * add \"_sp={{duid}}.{{timestamp}}\" to its querystring\n *\n * @param crossDomainLinker - Function used to determine which links to decorate\n */\n function decorateLinks(crossDomainLinker) {\n var crossDomainLinkHandler = addLinkDecorationHandler(useExtendedCrossDomainLinker);\n for (var i = 0; i < document.links.length; i++) {\n var elt = document.links[i];\n if (!elt.spDecorationEnabled && crossDomainLinker(elt)) {\n elt.addEventListener('click', crossDomainLinkHandler, true);\n elt.addEventListener('mousedown', crossDomainLinkHandler, true);\n // Don't add event listeners more than once\n elt.spDecorationEnabled = true;\n }\n }\n }\n /*\n * Removes hash tag from the URL\n *\n * URLs are purified before being recorded in the cookie,\n * or before being sent as GET parameters\n */\n function purify(url) {\n var targetPattern;\n if (configDiscardHashTag) {\n targetPattern = new RegExp('#.*');\n url = url.replace(targetPattern, '');\n }\n if (configDiscardBrace) {\n targetPattern = new RegExp('[{}]', 'g');\n url = url.replace(targetPattern, '');\n }\n return url;\n }\n /*\n * Extract scheme/protocol from URL\n */\n function getProtocolScheme(url) {\n var e = new RegExp('^([a-z]+):'),\n matches = e.exec(url);\n return matches ? matches[1] : null;\n }\n /*\n * Resolve relative reference\n *\n * Note: not as described in rfc3986 section 5.2\n */\n function resolveRelativeReference(baseUrl, url) {\n var protocol = getProtocolScheme(url),\n i;\n if (protocol) {\n return url;\n }\n if (url.slice(0, 1) === '/') {\n return getProtocolScheme(baseUrl) + '://' + getHostName(baseUrl) + url;\n }\n baseUrl = purify(baseUrl);\n if ((i = baseUrl.indexOf('?')) >= 0) {\n baseUrl = baseUrl.slice(0, i);\n }\n if ((i = baseUrl.lastIndexOf('/')) !== baseUrl.length - 1) {\n baseUrl = baseUrl.slice(0, i + 1);\n }\n return baseUrl + url;\n }\n /*\n * Send request\n */\n function sendRequest(request) {\n if (!(configDoNotTrack || toOptoutByCookie)) {\n outQueue.enqueueRequest(request.build(), configCollectorUrl);\n }\n }\n /*\n * Get cookie name with prefix and domain hash\n */\n function getSnowplowCookieName(baseName) {\n return configCookieNamePrefix + baseName + '.' + domainHash;\n }\n /*\n * Cookie getter.\n */\n function getSnowplowCookieValue(cookieName) {\n var fullName = getSnowplowCookieName(cookieName);\n if (configStateStorageStrategy == 'localStorage') {\n return attemptGetLocalStorage(fullName);\n } else if (configStateStorageStrategy == 'cookie' || configStateStorageStrategy == 'cookieAndLocalStorage') {\n return cookie(fullName);\n }\n return undefined;\n }\n /*\n * Update domain hash\n */\n function updateDomainHash() {\n refreshUrl();\n domainHash = hash((configCookieDomain || domainAlias) + (configCookiePath || '/')).slice(0, 4); // 4 hexits = 16 bits\n }\n /*\n * Process all \"activity\" events.\n * For performance, this function must have low overhead.\n */\n function activityHandler() {\n var now = new Date();\n lastActivityTime = now.getTime();\n }\n /*\n * Process all \"scroll\" events.\n */\n function scrollHandler() {\n updateMaxScrolls();\n activityHandler();\n }\n /*\n * Returns [pageXOffset, pageYOffset]\n */\n function getPageOffsets() {\n var documentElement = document.documentElement;\n if (documentElement) {\n return [documentElement.scrollLeft || window.pageXOffset, documentElement.scrollTop || window.pageYOffset];\n }\n return [0, 0];\n }\n /*\n * Quick initialization/reset of max scroll levels\n */\n function resetMaxScrolls() {\n var offsets = getPageOffsets();\n var x = offsets[0];\n minXOffset = x;\n maxXOffset = x;\n var y = offsets[1];\n minYOffset = y;\n maxYOffset = y;\n }\n /*\n * Check the max scroll levels, updating as necessary\n */\n function updateMaxScrolls() {\n var offsets = getPageOffsets();\n var x = offsets[0];\n if (x < minXOffset) {\n minXOffset = x;\n } else if (x > maxXOffset) {\n maxXOffset = x;\n }\n var y = offsets[1];\n if (y < minYOffset) {\n minYOffset = y;\n } else if (y > maxYOffset) {\n maxYOffset = y;\n }\n }\n /*\n * Prevents offsets from being decimal or NaN\n * See https://github.com/snowplow/snowplow-javascript-tracker/issues/324\n */\n function cleanOffset(offset) {\n return Math.round(offset);\n }\n /**\n * Sets or renews the session cookie.\n * Responsible for calling the `onSessionUpdateCallback` callback.\n * @returns {boolean} If the value persisted in cookies or LocalStorage\n */\n function setSessionCookie() {\n var cookieName = getSnowplowCookieName('ses');\n var cookieValue = '*';\n return persistValue(cookieName, cookieValue, configSessionCookieTimeout);\n }\n /**\n * @mutates idCookie\n * @param {ParsedIdCookie} idCookie\n * @returns {boolean} If the value persisted in cookies or LocalStorage\n */\n function setDomainUserIdCookie(idCookie) {\n var cookieName = getSnowplowCookieName('id');\n var cookieValue = serializeIdCookie(idCookie, configAnonymousTracking);\n return persistValue(cookieName, cookieValue, configVisitorCookieTimeout);\n }\n /**\n * no-op if anonymousTracking enabled, will still set cookies if anonymousSessionTracking is enabled\n * Sets a cookie based on the storage strategy:\n * - if 'localStorage': attempts to write to local storage\n * - if 'cookie' or 'cookieAndLocalStorage': writes to cookies\n * - otherwise: no-op\n * @param {string} name Name/key of the value to persist\n * @param {string} value\n * @param {number} timeout Used as the expiration date for cookies or as a TTL to be checked on LocalStorage\n * @returns {boolean} If the operation was successful or not\n */\n function persistValue(name, value, timeout) {\n if (configAnonymousTracking && !configAnonymousSessionTracking) {\n return false;\n }\n if (configStateStorageStrategy == 'localStorage') {\n return attemptWriteLocalStorage(name, value, timeout);\n } else if (configStateStorageStrategy == 'cookie' || configStateStorageStrategy == 'cookieAndLocalStorage') {\n cookie(name, value, timeout, configCookiePath, configCookieDomain, configCookieSameSite, configCookieSecure);\n return document.cookie.indexOf(\"\".concat(name, \"=\")) !== -1 ? true : false;\n }\n return false;\n }\n /**\n * Clears all cookie and local storage for id and ses values\n */\n function clearUserDataAndCookies(configuration) {\n var idname = getSnowplowCookieName('id');\n var sesname = getSnowplowCookieName('ses');\n attemptDeleteLocalStorage(idname);\n attemptDeleteLocalStorage(sesname);\n deleteCookie(idname, configCookieDomain, configCookieSameSite, configCookieSecure);\n deleteCookie(sesname, configCookieDomain, configCookieSameSite, configCookieSecure);\n if (!(configuration === null || configuration === void 0 ? void 0 : configuration.preserveSession)) {\n memorizedSessionId = v4();\n memorizedVisitCount = 1;\n }\n if (!(configuration === null || configuration === void 0 ? void 0 : configuration.preserveUser)) {\n domainUserId = configAnonymousTracking ? '' : v4();\n businessUserId = null;\n }\n }\n /**\n * Toggle Anonymous Tracking\n */\n function toggleAnonymousTracking(configuration) {\n if (configuration && configuration.stateStorageStrategy) {\n trackerConfiguration.stateStorageStrategy = configuration.stateStorageStrategy;\n configStateStorageStrategy = getStateStorageStrategy(trackerConfiguration);\n }\n configAnonymousTracking = getAnonymousTracking(trackerConfiguration);\n configAnonymousSessionTracking = getAnonymousSessionTracking(trackerConfiguration);\n configAnonymousServerTracking = getAnonymousServerTracking(trackerConfiguration);\n outQueue.setUseLocalStorage(configStateStorageStrategy == 'localStorage' || configStateStorageStrategy == 'cookieAndLocalStorage');\n outQueue.setAnonymousTracking(configAnonymousServerTracking);\n }\n /*\n * Load the domain user ID and the session ID\n * Set the cookies (if cookies are enabled)\n */\n function initializeIdsAndCookies() {\n if (configAnonymousTracking && !configAnonymousSessionTracking) {\n return;\n }\n var sesCookieSet = configStateStorageStrategy != 'none' && !!getSnowplowCookieValue('ses');\n var idCookie = loadDomainUserIdCookie();\n domainUserId = initializeDomainUserId(idCookie, configAnonymousTracking);\n if (!sesCookieSet) {\n memorizedSessionId = startNewIdCookieSession(idCookie);\n } else {\n memorizedSessionId = sessionIdFromIdCookie(idCookie);\n }\n memorizedVisitCount = visitCountFromIdCookie(idCookie);\n if (configStateStorageStrategy != 'none') {\n setSessionCookie();\n // Update currentVisitTs\n updateNowTsInIdCookie(idCookie);\n setDomainUserIdCookie(idCookie);\n }\n }\n /*\n * Load visitor ID cookie\n */\n function loadDomainUserIdCookie() {\n if (configStateStorageStrategy == 'none') {\n return emptyIdCookie();\n }\n var id = getSnowplowCookieValue('id') || undefined;\n return parseIdCookie(id, domainUserId, memorizedSessionId, memorizedVisitCount);\n }\n /**\n * Adds the protocol in front of our collector URL\n *\n * @param string - collectorUrl The collector URL with or without protocol\n * @returns string collectorUrl The tracker URL with protocol\n */\n function asCollectorUrl(collectorUrl) {\n if (collectorUrl.indexOf('http') === 0) {\n return collectorUrl;\n }\n return ('https:' === document.location.protocol ? 'https' : 'http') + '://' + collectorUrl;\n }\n /**\n * Initialize new `pageViewId` if it shouldn't be preserved.\n * Should be called when `trackPageView` is invoked\n */\n function resetPageView() {\n if (!preservePageViewId || state.pageViewId == null) {\n state.pageViewId = v4();\n state.pageViewUrl = configCustomUrl || locationHrefAlias;\n }\n }\n /**\n * Safe function to get `pageViewId`.\n * Generates it if it wasn't initialized by other tracker\n */\n function getPageViewId() {\n if (shouldGenerateNewPageViewId()) {\n state.pageViewId = v4();\n state.pageViewUrl = configCustomUrl || locationHrefAlias;\n }\n return state.pageViewId;\n }\n function shouldGenerateNewPageViewId() {\n // If pageViewId is not initialized, generate it\n if (state.pageViewId == null) {\n return true;\n }\n // If pageViewId should be preserved regardless of the URL, don't generate a new one\n if (preservePageViewId || !preservePageViewIdForUrl) {\n return false;\n }\n // If doesn't have previous URL in state, generate a new pageViewId\n if (state.pageViewUrl === undefined) {\n return true;\n }\n var current = configCustomUrl || locationHrefAlias;\n // If full preserve is enabled, compare the full URL\n if (preservePageViewIdForUrl === true || preservePageViewIdForUrl == 'full' || !('URL' in window)) {\n return state.pageViewUrl != current;\n }\n var currentUrl = new URL(current);\n var previousUrl = new URL(state.pageViewUrl);\n // If pathname preserve is enabled, compare the pathname\n if (preservePageViewIdForUrl == 'pathname') {\n return currentUrl.pathname != previousUrl.pathname;\n }\n // If pathname and search preserve is enabled, compare the pathname and search\n if (preservePageViewIdForUrl == 'pathnameAndSearch') {\n return currentUrl.pathname != previousUrl.pathname || currentUrl.search != previousUrl.search;\n }\n return false;\n }\n /**\n * Safe function to get `tabId`.\n * Generates it if it is not yet initialized. Shared between trackers.\n */\n function getTabId() {\n if (configStateStorageStrategy === 'none' || configAnonymousTracking || !isWebPageContextAvailable) {\n return null;\n }\n var SESSION_STORAGE_TAB_ID = '_sp_tab_id';\n var tabId = attemptGetSessionStorage(SESSION_STORAGE_TAB_ID);\n if (!tabId) {\n attemptWriteSessionStorage(SESSION_STORAGE_TAB_ID, v4());\n tabId = attemptGetSessionStorage(SESSION_STORAGE_TAB_ID);\n }\n return tabId || null;\n }\n /**\n * Put together a web page context with a unique UUID for the page view\n *\n * @returns web_page context\n */\n function getWebPagePlugin() {\n return {\n contexts: function () {\n return [{\n schema: WEB_PAGE_SCHEMA,\n data: {\n id: getPageViewId()\n }\n }];\n }\n };\n }\n function getBrowserContextPlugin() {\n return {\n contexts: function () {\n return [{\n schema: BROWSER_CONTEXT_SCHEMA,\n data: __assign(__assign({}, getBrowserProperties()), {\n tabId: getTabId()\n })\n }];\n }\n };\n }\n /*\n * Attaches common web fields to every request (resolution, url, referrer, etc.)\n * Also sets the required cookies.\n */\n function getBrowserDataPlugin() {\n var anonymizeOr = function (value) {\n return configAnonymousTracking ? null : value;\n };\n var anonymizeSessionOr = function (value) {\n return configAnonymousSessionTracking ? value : anonymizeOr(value);\n };\n return {\n beforeTrack: function (payloadBuilder) {\n var existingSession = getSnowplowCookieValue('ses'),\n idCookie = loadDomainUserIdCookie();\n var isFirstEventInSession = eventIndexFromIdCookie(idCookie) === 0;\n if (configOptOutCookie) {\n toOptoutByCookie = !!cookie(configOptOutCookie);\n } else {\n toOptoutByCookie = false;\n }\n if (configDoNotTrack || toOptoutByCookie) {\n clearUserDataAndCookies();\n return;\n }\n // If cookies are enabled, base visit count and session ID on the cookies\n if (cookiesEnabledInIdCookie(idCookie)) {\n // New session?\n if (!existingSession && configStateStorageStrategy != 'none') {\n memorizedSessionId = startNewIdCookieSession(idCookie);\n } else {\n memorizedSessionId = sessionIdFromIdCookie(idCookie);\n }\n memorizedVisitCount = visitCountFromIdCookie(idCookie);\n } else if (new Date().getTime() - lastEventTime > configSessionCookieTimeout * 1000) {\n memorizedVisitCount++;\n memorizedSessionId = startNewIdCookieSession(idCookie, {\n memorizedVisitCount: memorizedVisitCount\n });\n }\n // Update cookie\n updateNowTsInIdCookie(idCookie);\n updateFirstEventInIdCookie(idCookie, payloadBuilder);\n incrementEventIndexInIdCookie(idCookie);\n var _a = getBrowserProperties(),\n viewport = _a.viewport,\n documentSize = _a.documentSize;\n payloadBuilder.add('vp', viewport);\n payloadBuilder.add('ds', documentSize);\n payloadBuilder.add('vid', anonymizeSessionOr(memorizedVisitCount));\n payloadBuilder.add('sid', anonymizeSessionOr(memorizedSessionId));\n payloadBuilder.add('duid', anonymizeOr(domainUserIdFromIdCookie(idCookie))); // Always load from cookie as this is better etiquette than in-memory values\n payloadBuilder.add('uid', anonymizeOr(businessUserId));\n refreshUrl();\n payloadBuilder.add('refr', purify(customReferrer || configReferrerUrl));\n // Add the page URL last as it may take us over the IE limit (and we don't always need it)\n payloadBuilder.add('url', purify(configCustomUrl || locationHrefAlias));\n var clientSession = clientSessionFromIdCookie(idCookie, configStateStorageStrategy, configAnonymousTracking);\n if (configSessionContext && (!configAnonymousTracking || configAnonymousSessionTracking)) {\n addSessionContextToPayload(payloadBuilder, clientSession);\n }\n // Update cookies\n if (configStateStorageStrategy != 'none') {\n setDomainUserIdCookie(idCookie);\n var sessionIdentifierPersisted = setSessionCookie();\n if ((!existingSession || isFirstEventInSession) && sessionIdentifierPersisted && onSessionUpdateCallback && !manualSessionUpdateCalled) {\n onSessionUpdateCallback(clientSession);\n manualSessionUpdateCalled = false;\n }\n }\n lastEventTime = new Date().getTime();\n }\n };\n }\n function addSessionContextToPayload(payloadBuilder, clientSession) {\n var sessionContext = {\n schema: CLIENT_SESSION_SCHEMA,\n data: clientSession\n };\n payloadBuilder.addContextEntity(sessionContext);\n }\n /**\n * Expires current session and starts a new session.\n */\n function newSession() {\n // If cookies are enabled, base visit count and session ID on the cookies\n var idCookie = loadDomainUserIdCookie();\n // When cookies are enabled\n if (cookiesEnabledInIdCookie(idCookie)) {\n // When cookie/local storage is enabled - make a new session\n if (configStateStorageStrategy != 'none') {\n memorizedSessionId = startNewIdCookieSession(idCookie);\n } else {\n memorizedSessionId = sessionIdFromIdCookie(idCookie);\n }\n memorizedVisitCount = visitCountFromIdCookie(idCookie);\n } else {\n memorizedVisitCount++;\n memorizedSessionId = startNewIdCookieSession(idCookie, {\n memorizedVisitCount: memorizedVisitCount\n });\n }\n updateNowTsInIdCookie(idCookie);\n // Update cookies\n if (configStateStorageStrategy != 'none') {\n var clientSession = clientSessionFromIdCookie(idCookie, configStateStorageStrategy, configAnonymousTracking);\n setDomainUserIdCookie(idCookie);\n var sessionIdentifierPersisted = setSessionCookie();\n if (sessionIdentifierPersisted && onSessionUpdateCallback) {\n manualSessionUpdateCalled = true;\n onSessionUpdateCallback(clientSession);\n }\n }\n lastEventTime = new Date().getTime();\n }\n /**\n * Combine an array of unchanging contexts with the result of a context-creating function\n *\n * @param staticContexts - Array of custom contexts\n * @param contextCallback - Function returning an array of contexts\n */\n function finalizeContexts(staticContexts, contextCallback) {\n return (staticContexts || []).concat(contextCallback ? contextCallback() : []);\n }\n function logPageView(_a) {\n var title = _a.title,\n context = _a.context,\n timestamp = _a.timestamp,\n contextCallback = _a.contextCallback;\n refreshUrl();\n if (lastSentPageViewId && lastSentPageViewId == getPageViewId()) {\n // Do not reset pageViewId if a page view was not tracked yet or a different page view ID was used (in order to support multiple trackers with shared state)\n resetPageView();\n }\n lastSentPageViewId = getPageViewId();\n // So we know what document.title was at the time of trackPageView\n lastDocumentTitle = document.title;\n if (title) {\n lastConfigTitle = title;\n lastConfigTitleFromTrackPageView = true;\n } else if (lastConfigTitleFromTrackPageView) {\n lastConfigTitle = null;\n }\n // Fixup page title\n var pageTitle = fixupTitle(lastConfigTitle || lastDocumentTitle);\n // Log page view\n core.track(buildPageView({\n pageUrl: purify(configCustomUrl || locationHrefAlias),\n pageTitle: pageTitle,\n referrer: purify(customReferrer || configReferrerUrl)\n }), finalizeContexts(context, contextCallback), timestamp);\n // Send ping (to log that user has stayed on page)\n var now = new Date();\n var installingActivityTracking = false;\n if (activityTrackingConfig.enabled && !activityTrackingConfig.installed) {\n activityTrackingConfig.installed = true;\n installingActivityTracking = true;\n // Add mousewheel event handler, detect passive event listeners for performance\n var detectPassiveEvents_1 = {\n update: function update() {\n if (typeof window !== 'undefined' && typeof window.addEventListener === 'function') {\n var passive_1 = false;\n var options = Object.defineProperty({}, 'passive', {\n get: function get() {\n passive_1 = true;\n },\n set: function set() {}\n });\n // note: have to set and remove a no-op listener instead of null\n // (which was used previously), because Edge v15 throws an error\n // when providing a null callback.\n // https://github.com/rafrex/detect-passive-events/pull/3\n var noop = function noop() {};\n window.addEventListener('testPassiveEventSupport', noop, options);\n window.removeEventListener('testPassiveEventSupport', noop, options);\n detectPassiveEvents_1.hasSupport = passive_1;\n }\n }\n };\n detectPassiveEvents_1.update();\n // Detect available wheel event\n var wheelEvent = 'onwheel' in document.createElement('div') ? 'wheel' // Modern browsers support \"wheel\"\n : document.onmousewheel !== undefined ? 'mousewheel' // Webkit and IE support at least \"mousewheel\"\n : 'DOMMouseScroll'; // let's assume that remaining browsers are older Firefox\n if (Object.prototype.hasOwnProperty.call(detectPassiveEvents_1, 'hasSupport')) {\n addEventListener(document, wheelEvent, activityHandler, {\n passive: true\n });\n } else {\n addEventListener(document, wheelEvent, activityHandler);\n }\n // Capture our initial scroll points\n resetMaxScrolls();\n // Add event handlers; cross-browser compatibility here varies significantly\n // @see http://quirksmode.org/dom/events\n var documentHandlers = ['click', 'mouseup', 'mousedown', 'mousemove', 'keypress', 'keydown', 'keyup', 'touchend', 'touchstart'];\n var windowHandlers = ['resize', 'focus', 'blur'];\n var listener = function (_, handler) {\n if (handler === void 0) {\n handler = activityHandler;\n }\n return function (ev) {\n return addEventListener(document, ev, handler);\n };\n };\n documentHandlers.forEach(listener(document));\n windowHandlers.forEach(listener(window));\n listener(window, scrollHandler)('scroll');\n }\n if (activityTrackingConfig.enabled && (resetActivityTrackingOnPageView || installingActivityTracking)) {\n // Periodic check for activity.\n lastActivityTime = now.getTime();\n var key = void 0;\n for (key in activityTrackingConfig.configurations) {\n var config = activityTrackingConfig.configurations[key];\n if (config) {\n //Clear page ping heartbeat on new page view\n window.clearInterval(config.activityInterval);\n scheduleActivityInterval(config, context, contextCallback);\n }\n }\n }\n }\n function scheduleActivityInterval(config, context, contextCallback) {\n var executePagePing = function (cb, context) {\n refreshUrl();\n cb({\n context: context,\n pageViewId: getPageViewId(),\n minXOffset: minXOffset,\n minYOffset: minYOffset,\n maxXOffset: maxXOffset,\n maxYOffset: maxYOffset\n });\n resetMaxScrolls();\n };\n var timeout = function () {\n var now = new Date();\n // There was activity during the heart beat period;\n // on average, this is going to overstate the visitDuration by configHeartBeatTimer/2\n if (lastActivityTime + config.configMinimumVisitLength > now.getTime()) {\n executePagePing(config.callback, finalizeContexts(context, contextCallback));\n }\n config.activityInterval = window.setInterval(heartbeat, config.configHeartBeatTimer);\n };\n var heartbeat = function () {\n var now = new Date();\n // There was activity during the heart beat period;\n // on average, this is going to overstate the visitDuration by configHeartBeatTimer/2\n if (lastActivityTime + config.configHeartBeatTimer > now.getTime()) {\n executePagePing(config.callback, finalizeContexts(context, contextCallback));\n }\n };\n if (config.configMinimumVisitLength === 0) {\n config.activityInterval = window.setInterval(heartbeat, config.configHeartBeatTimer);\n } else {\n config.activityInterval = window.setTimeout(timeout, config.configMinimumVisitLength);\n }\n }\n /**\n * Configure the activity tracking and ensures integer values for min visit and heartbeat\n */\n function configureActivityTracking(configuration) {\n var minimumVisitLength = configuration.minimumVisitLength,\n heartbeatDelay = configuration.heartbeatDelay,\n callback = configuration.callback;\n if (isInteger(minimumVisitLength) && isInteger(heartbeatDelay)) {\n return {\n configMinimumVisitLength: minimumVisitLength * 1000,\n configHeartBeatTimer: heartbeatDelay * 1000,\n callback: callback\n };\n }\n LOG.error('Activity tracking minimumVisitLength & heartbeatDelay must be integers');\n return undefined;\n }\n /**\n * Log that a user is still viewing a given page by sending a page ping.\n * Not part of the public API - only called from logPageView() above.\n */\n function logPagePing(_a) {\n var context = _a.context,\n minXOffset = _a.minXOffset,\n minYOffset = _a.minYOffset,\n maxXOffset = _a.maxXOffset,\n maxYOffset = _a.maxYOffset;\n var newDocumentTitle = document.title;\n if (newDocumentTitle !== lastDocumentTitle) {\n lastDocumentTitle = newDocumentTitle;\n lastConfigTitle = undefined;\n }\n core.track(buildPagePing({\n pageUrl: purify(configCustomUrl || locationHrefAlias),\n pageTitle: fixupTitle(lastConfigTitle || lastDocumentTitle),\n referrer: purify(customReferrer || configReferrerUrl),\n minXOffset: cleanOffset(minXOffset),\n maxXOffset: cleanOffset(maxXOffset),\n minYOffset: cleanOffset(minYOffset),\n maxYOffset: cleanOffset(maxYOffset)\n }), context);\n }\n function disableActivityTrackingAction(actionKey) {\n var callbackConfiguration = activityTrackingConfig.configurations[actionKey];\n if ((callbackConfiguration === null || callbackConfiguration === void 0 ? void 0 : callbackConfiguration.configMinimumVisitLength) === 0) {\n window.clearTimeout(callbackConfiguration === null || callbackConfiguration === void 0 ? void 0 : callbackConfiguration.activityInterval);\n } else {\n window.clearInterval(callbackConfiguration === null || callbackConfiguration === void 0 ? void 0 : callbackConfiguration.activityInterval);\n }\n activityTrackingConfig.configurations[actionKey] = undefined;\n }\n var apiMethods = {\n getDomainSessionIndex: function () {\n return memorizedVisitCount;\n },\n getPageViewId: getPageViewId,\n getTabId: getTabId,\n newSession: newSession,\n getCookieName: function (basename) {\n return getSnowplowCookieName(basename);\n },\n getUserId: function () {\n return businessUserId;\n },\n getDomainUserId: function () {\n return loadDomainUserIdCookie()[1];\n },\n getDomainUserInfo: function () {\n return loadDomainUserIdCookie();\n },\n setReferrerUrl: function (url) {\n customReferrer = url;\n },\n setCustomUrl: function (url) {\n refreshUrl();\n configCustomUrl = resolveRelativeReference(locationHrefAlias, url);\n },\n setDocumentTitle: function (title) {\n // So we know what document.title was at the time of trackPageView\n lastDocumentTitle = document.title;\n lastConfigTitle = title;\n lastConfigTitleFromTrackPageView = false;\n },\n discardHashTag: function (enableFilter) {\n configDiscardHashTag = enableFilter;\n },\n discardBrace: function (enableFilter) {\n configDiscardBrace = enableFilter;\n },\n setCookiePath: function (path) {\n configCookiePath = path;\n updateDomainHash();\n },\n setVisitorCookieTimeout: function (timeout) {\n configVisitorCookieTimeout = timeout;\n },\n crossDomainLinker: function (crossDomainLinkerCriterion) {\n decorateLinks(crossDomainLinkerCriterion);\n },\n enableActivityTracking: function (configuration) {\n if (!activityTrackingConfig.configurations.pagePing) {\n activityTrackingConfig.enabled = true;\n activityTrackingConfig.configurations.pagePing = configureActivityTracking(__assign(__assign({}, configuration), {\n callback: logPagePing\n }));\n }\n },\n enableActivityTrackingCallback: function (configuration) {\n if (!activityTrackingConfig.configurations.callback) {\n activityTrackingConfig.enabled = true;\n activityTrackingConfig.configurations.callback = configureActivityTracking(configuration);\n }\n },\n disableActivityTracking: function () {\n disableActivityTrackingAction('pagePing');\n },\n disableActivityTrackingCallback: function () {\n disableActivityTrackingAction('callback');\n },\n updatePageActivity: function () {\n activityHandler();\n },\n setOptOutCookie: function (name) {\n configOptOutCookie = name;\n },\n setUserId: function (userId) {\n businessUserId = userId;\n },\n setUserIdFromLocation: function (querystringField) {\n refreshUrl();\n businessUserId = fromQuerystring(querystringField, locationHrefAlias);\n },\n setUserIdFromReferrer: function (querystringField) {\n refreshUrl();\n businessUserId = fromQuerystring(querystringField, configReferrerUrl);\n },\n setUserIdFromCookie: function (cookieName) {\n businessUserId = cookie(cookieName);\n },\n setCollectorUrl: function (collectorUrl) {\n configCollectorUrl = asCollectorUrl(collectorUrl);\n outQueue.setCollectorUrl(configCollectorUrl);\n },\n setBufferSize: function (newBufferSize) {\n outQueue.setBufferSize(newBufferSize);\n },\n flushBuffer: function (configuration) {\n if (configuration === void 0) {\n configuration = {};\n }\n outQueue.executeQueue();\n if (configuration.newBufferSize) {\n outQueue.setBufferSize(configuration.newBufferSize);\n }\n },\n trackPageView: function (event) {\n if (event === void 0) {\n event = {};\n }\n logPageView(event);\n },\n preservePageViewId: function () {\n preservePageViewId = true;\n },\n preservePageViewIdForUrl: function (preserve) {\n preservePageViewIdForUrl = preserve;\n },\n disableAnonymousTracking: function (configuration) {\n trackerConfiguration.anonymousTracking = false;\n toggleAnonymousTracking(configuration);\n initializeIdsAndCookies();\n outQueue.executeQueue(); // There might be some events in the queue we've been unable to send in anonymous mode\n },\n enableAnonymousTracking: function (configuration) {\n var _a;\n trackerConfiguration.anonymousTracking = (_a = configuration && (configuration === null || configuration === void 0 ? void 0 : configuration.options)) !== null && _a !== void 0 ? _a : true;\n toggleAnonymousTracking(configuration);\n // Reset the page view, if not tracking the session, so can't stitch user into new events on the page view id\n if (!configAnonymousSessionTracking) {\n resetPageView();\n }\n },\n clearUserData: clearUserDataAndCookies\n };\n return __assign(__assign({}, apiMethods), {\n id: trackerId,\n namespace: namespace,\n core: core,\n sharedState: state\n });\n };\n // Initialise the tracker\n var partialTracker = newTracker(trackerId, namespace, version, endpoint, sharedState, trackerConfiguration),\n tracker = __assign(__assign({}, partialTracker), {\n addPlugin: function (configuration) {\n var _a, _b;\n tracker.core.addPlugin(configuration);\n (_b = (_a = configuration.plugin).activateBrowserPlugin) === null || _b === void 0 ? void 0 : _b.call(_a, tracker);\n }\n });\n // Initialise each plugin with the tracker\n browserPlugins.forEach(function (p) {\n var _a;\n (_a = p.activateBrowserPlugin) === null || _a === void 0 ? void 0 : _a.call(p, tracker);\n });\n return tracker;\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nvar namedTrackers = {};\n/**\n * Dispatch function to all specified trackers\n *\n * @param trackers - An optional list of trackers to send the event to, or will send to all trackers\n * @param fn - The function which will run against each tracker\n */\nfunction dispatchToTrackers(trackers, fn) {\n try {\n getTrackers(trackers !== null && trackers !== void 0 ? trackers : allTrackerNames()).forEach(fn);\n } catch (ex) {\n LOG.error('Function failed', ex);\n }\n}\n/**\n * Dispatch function to all specified trackers from the supplied collection\n *\n * @param trackers - An optional list of trackers to send the event to, or will send to all trackers\n * @param trackerCollection - The collection which the trackers will be selected from\n * @param fn - The function which will run against each tracker\n */\nfunction dispatchToTrackersInCollection(trackers, trackerCollection, fn) {\n try {\n getTrackersFromCollection(trackers !== null && trackers !== void 0 ? trackers : Object.keys(trackerCollection), trackerCollection).forEach(fn);\n } catch (ex) {\n LOG.error('Function failed', ex);\n }\n}\n/**\n * Checks if a tracker has been created for a particular identifier\n * @param trackerId - The unique identifier of the tracker\n */\nfunction trackerExists(trackerId) {\n return namedTrackers.hasOwnProperty(trackerId);\n}\n/**\n * Creates a Tracker and adds it to the internal collection\n * @param trackerId - The unique identifier of the tracker\n * @param namespace - The namespace of the tracker, tracked with each event as `tna`\n * @param version - The current version of the tracker library\n * @param endpoint - The endpoint to send events to\n * @param sharedState - The instance of shared state to use for this tracker\n * @param configuration - The configuration to use for this tracker instance\n */\nfunction addTracker(trackerId, namespace, version, endpoint, sharedState, configuration) {\n if (!namedTrackers.hasOwnProperty(trackerId)) {\n namedTrackers[trackerId] = Tracker(trackerId, namespace, version, endpoint, sharedState, configuration);\n return namedTrackers[trackerId];\n }\n return null;\n}\n/**\n * Gets a single instance of the internal tracker object\n * @param trackerId - The unique identifier of the tracker\n * @returns The tracker instance, or null if not found\n */\nfunction getTracker(trackerId) {\n if (namedTrackers.hasOwnProperty(trackerId)) {\n return namedTrackers[trackerId];\n }\n LOG.warn(trackerId + ' not configured');\n return null;\n}\n/**\n * Gets an array of tracker instances based on the list of identifiers\n * @param trackerIds - An array of unique identifiers of the trackers\n * @returns The tracker instances, or empty list if none found\n */\nfunction getTrackers(trackerIds) {\n return getTrackersFromCollection(trackerIds, namedTrackers);\n}\n/**\n * Gets all the trackers as a object, keyed by their unique identifiers\n */\nfunction allTrackers() {\n return namedTrackers;\n}\n/**\n * Returns all the unique tracker identifiers\n */\nfunction allTrackerNames() {\n return Object.keys(namedTrackers);\n}\nfunction getTrackersFromCollection(trackerIds, trackerCollection) {\n var trackers = [];\n for (var _i = 0, trackerIds_1 = trackerIds; _i < trackerIds_1.length; _i++) {\n var id = trackerIds_1[_i];\n if (trackerCollection.hasOwnProperty(id)) {\n trackers.push(trackerCollection[id]);\n } else {\n LOG.warn(id + ' not configured');\n }\n }\n return trackers;\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * A set of variables which are shared among all initialised trackers\n */\nvar SharedState = /** @class */function () {\n function SharedState() {\n /* List of request queues - one per Tracker instance */\n this.outQueues = [];\n this.bufferFlushers = [];\n /* DOM Ready */\n this.hasLoaded = false;\n this.registeredOnLoadHandlers = [];\n }\n return SharedState;\n}();\nfunction createSharedState() {\n var sharedState = new SharedState(),\n documentAlias = document,\n windowAlias = window;\n /*\n * Handle page visibility event\n * Works everywhere except IE9\n */\n function visibilityChangeHandler() {\n if (documentAlias.visibilityState == 'hidden') {\n // Flush all POST queues\n sharedState.bufferFlushers.forEach(function (flusher) {\n flusher(false);\n });\n }\n }\n function flushBuffers() {\n // Flush all POST queues\n sharedState.bufferFlushers.forEach(function (flusher) {\n flusher(false);\n });\n }\n /*\n * Handler for onload event\n */\n function loadHandler() {\n var i;\n if (!sharedState.hasLoaded) {\n sharedState.hasLoaded = true;\n for (i = 0; i < sharedState.registeredOnLoadHandlers.length; i++) {\n sharedState.registeredOnLoadHandlers[i]();\n }\n }\n return true;\n }\n /*\n * Add onload or DOM ready handler\n */\n function addReadyListener() {\n if (documentAlias.addEventListener) {\n documentAlias.addEventListener('DOMContentLoaded', function ready() {\n documentAlias.removeEventListener('DOMContentLoaded', ready, false);\n loadHandler();\n });\n } else if (documentAlias.attachEvent) {\n documentAlias.attachEvent('onreadystatechange', function ready() {\n if (documentAlias.readyState === 'complete') {\n documentAlias.detachEvent('onreadystatechange', ready);\n loadHandler();\n }\n });\n }\n // fallback\n addEventListener(windowAlias, 'load', loadHandler, false);\n }\n /************************************************************\n * Constructor\n ************************************************************/\n // initialize the Snowplow singleton\n if (documentAlias.visibilityState) {\n // Flush for mobile and modern browsers\n addEventListener(documentAlias, 'visibilitychange', visibilityChangeHandler, false);\n }\n // Last attempt at flushing in beforeunload\n addEventListener(windowAlias, 'beforeunload', flushBuffers, false);\n if (document.readyState === 'loading') {\n addReadyListener();\n } else {\n loadHandler();\n }\n return sharedState;\n}\nexport { SharedState, addEventListener, addTracker, allTrackerNames, allTrackers, attemptDeleteLocalStorage, attemptGetLocalStorage, attemptGetSessionStorage, attemptWriteLocalStorage, attemptWriteSessionStorage, cookie, createCrossDomainParameterValue, createSharedState, decorateQuerystring, deleteCookie, dispatchToTrackers, dispatchToTrackersInCollection, findRootDomain, fixupDomain, fixupTitle, fixupUrl, fromQuerystring, getCookiesWithPrefix, getCssClasses, getFilterByClass, getFilterByName, getHostName, getReferrer, getTracker, getTrackers, hasLocalStorage, hasSessionStorage, isFunction, isInteger, isString, isValueInArray, localStorageAccessible, parseAndValidateFloat, parseAndValidateInt, trackerExists, urlSafeBase64Encode };\n","/*!\n * Browser tracker for Snowplow v3.24.6 (http://bit.ly/sp-js)\n * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * Licensed under BSD-3-Clause\n */\n\nimport { dispatchToTrackers, createSharedState, addTracker } from '@snowplow/browser-tracker-core';\nimport { buildStructEvent, buildSelfDescribingEvent, version } from '@snowplow/tracker-core';\nexport { version } from '@snowplow/tracker-core';\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Expires current session and starts a new session.\n *\n * @param trackers - The tracker identifiers which will have their session refreshed\n */\nfunction newSession(trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.newSession();\n });\n}\n/**\n * Override referrer\n *\n * @param url - Custom Referrer which will be used as override\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setReferrerUrl(url, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setReferrerUrl(url);\n });\n}\n/**\n * Override url\n *\n * @param url - Custom URL which will be used as override\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setCustomUrl(url, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setCustomUrl(url);\n });\n}\n/**\n * Override document.title\n *\n * @param title - Document title which will be used as override\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setDocumentTitle(title, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setDocumentTitle(title);\n });\n}\n/**\n * Strip hash tag (or anchor) from URL\n *\n * @param enable - Whether to enable stripping of hash\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction discardHashTag(enable, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.discardHashTag(enable);\n });\n}\n/**\n * Strip braces from URL\n *\n * @param enable - Whther to enable stripping of braces\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction discardBrace(enable, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.discardBrace(enable);\n });\n}\n/**\n * Set first-party cookie path\n *\n * @param path - The path which will be used when setting cookies\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setCookiePath(path, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setCookiePath(path);\n });\n}\n/**\n * Set visitor cookie timeout (in seconds)\n *\n * @param timeout - The timeout until cookies will expire\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setVisitorCookieTimeout(timeout, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setVisitorCookieTimeout(timeout);\n });\n}\n/**\n * Enable querystring decoration for links passing a filter\n *\n * @param crossDomainLinker - Function used to determine which links to decorate\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction crossDomainLinker(crossDomainLinkerCriterion, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.crossDomainLinker(crossDomainLinkerCriterion);\n });\n}\n/**\n * Enables page activity tracking (sends page pings to the Collector regularly).\n *\n * @param configuration - The activity tracking configuration\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction enableActivityTracking(configuration, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.enableActivityTracking(configuration);\n });\n}\n/**\n * Enables page activity tracking (replaces collector ping with callback).\n *\n * @param configuration - The activity tracking callback configuration\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction enableActivityTrackingCallback(configuration, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.enableActivityTrackingCallback(configuration);\n });\n}\n/**\n * Disables page activity tracking.\n *\n * @param trackers - The tracker identifiers the activity tracking will be disabled.\n */\nfunction disableActivityTracking(trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.disableActivityTracking();\n });\n}\n/**\n * Disables page activity tracking callback.\n *\n * @param trackers - The tracker identifiers the activity tracking callback will be disabled.\n */\nfunction disableActivityTrackingCallback(trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.disableActivityTrackingCallback();\n });\n}\n/**\n * Triggers the activityHandler manually to allow external user defined activity. i.e. While watching a video\n *\n * @param trackers - The tracker identifiers which will be updated\n */\nfunction updatePageActivity(trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.updatePageActivity();\n });\n}\n/**\n * Sets the opt out cookie.\n *\n * @param name - of the opt out cookie\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setOptOutCookie(name, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setOptOutCookie(name);\n });\n}\n/**\n * Set the business-defined user ID for this user.\n *\n * @param userId - The business-defined user ID\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setUserId(userId, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setUserId(userId);\n });\n}\n/**\n * Set the business-defined user ID for this user using the location querystring.\n *\n * @param querystringField - Name of a querystring name-value pair\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setUserIdFromLocation(querystringField, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setUserIdFromLocation(querystringField);\n });\n}\n/**\n * Set the business-defined user ID for this user using the referrer querystring.\n *\n * @param querystringField - Name of a querystring name-value pair\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setUserIdFromReferrer(querystringField, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setUserIdFromReferrer(querystringField);\n });\n}\n/**\n * Set the business-defined user ID for this user to the value of a cookie.\n *\n * @param cookieName - Name of the cookie whose value will be assigned to businessUserId\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setUserIdFromCookie(cookieName, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setUserIdFromCookie(cookieName);\n });\n}\n/**\n * Specify the Snowplow collector URL. Specific http or https to force it\n * or leave it off to match the website protocol.\n *\n * @param collectorUrl - The collector URL, with or without protocol\n * @param trackers - The tracker identifiers which will be configured\n */\nfunction setCollectorUrl(collectorUrl, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setCollectorUrl(collectorUrl);\n });\n}\n/**\n * Set the buffer size\n * Can be useful if you want to stop batching requests to ensure events start\n * sending closer to event creation\n *\n * @param newBufferSize - The value with which to update the bufferSize to\n * @param trackers - The tracker identifiers which will be flushed\n */\nfunction setBufferSize(newBufferSize, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.setBufferSize(newBufferSize);\n });\n}\n/**\n * Send all events in the outQueue\n * Only need to use this when sending events with a bufferSize of at least 2\n *\n * @param configuration - The configuration to use following flushing the buffer\n * @param trackers - The tracker identifiers which will be flushed\n */\nfunction flushBuffer(configuration, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.flushBuffer(configuration);\n });\n}\n/**\n * Track a visit to a web page\n *\n * @param event - The Page View Event properties\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction trackPageView(event, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.trackPageView(event);\n });\n}\n/**\n * Track a structured event\n * A classic style of event tracking, allows for easier movement between analytics\n * systems. A loosely typed event, creating a Self Describing event is preferred, but\n * useful for interoperability.\n *\n * @param event - The Structured Event properties\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction trackStructEvent(event, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.core.track(buildStructEvent(event), event.context, event.timestamp);\n });\n}\n/**\n * Track a self-describing event happening on this page.\n * A custom event type, allowing for an event to be tracked using your own custom schema\n * and a data object which conforms to the supplied schema\n *\n * @param event - The event information\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction trackSelfDescribingEvent(event, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.core.track(buildSelfDescribingEvent({\n event: event.event\n }), event.context, event.timestamp);\n });\n}\n/**\n * All provided contexts will be sent with every event\n *\n * @param contexts - An array of contexts or conditional contexts\n * @param trackers - The tracker identifiers which the global contexts will be added to\n */\nfunction addGlobalContexts(contexts, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.core.addGlobalContexts(contexts);\n });\n}\n/**\n * All provided contexts will no longer be sent with every event\n *\n * @param contexts - An array of contexts or conditional contexts\n * @param trackers - The tracker identifiers which the global contexts will be remove from\n */\nfunction removeGlobalContexts(contexts, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.core.removeGlobalContexts(contexts);\n });\n}\n/**\n * Clear all global contexts that are sent with events\n *\n * @param trackers - The tracker identifiers which the global contexts will be cleared from\n */\nfunction clearGlobalContexts(trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.core.clearGlobalContexts();\n });\n}\n/**\n * Stop regenerating `pageViewId` (available from `web_page` context)\n *\n * @param trackers - The tracker identifiers which the event will preserve their Page View Ids\n */\nfunction preservePageViewId(trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.preservePageViewId();\n });\n}\n/**\n * Disables anonymous tracking if active (ie. tracker initialized with `anonymousTracking`)\n * For stateStorageStrategy override, uses supplied value first,\n * falls back to one defined in initial config, otherwise uses cookieAndLocalStorage.\n *\n * @param configuration - The configuration for disabling anonymous tracking\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction disableAnonymousTracking(configuration, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.disableAnonymousTracking(configuration);\n });\n}\n/**\n * Enables anonymous tracking (ie. tracker initialized without `anonymousTracking`)\n *\n * @param configuration - The configuration for enabling anonymous tracking\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction enableAnonymousTracking(configuration, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.enableAnonymousTracking(configuration);\n });\n}\n/**\n * Clears all cookies and local storage containing user and session identifiers\n *\n * @param trackers - The tracker identifiers which the event will be sent to\n */\nfunction clearUserData(configuration, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.clearUserData(configuration);\n });\n}\n/**\n * Add a plugin into the plugin collection after trackers have already been initialised\n *\n * @param configuration - The plugin to add\n * @param trackers - The tracker identifiers which the plugin will be added to\n */\nfunction addPlugin(configuration, trackers) {\n dispatchToTrackers(trackers, function (t) {\n t.addPlugin(configuration);\n });\n}\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nvar state = typeof window !== 'undefined' ? createSharedState() : undefined;\n/**\n * Initialise a new tracker\n *\n * @param trackerId - The tracker id - also known as tracker namespace\n * @param endpoint - Collector endpoint in the form collector.mysite.com\n * @param configuration - The initialisation options of the tracker\n */\nfunction newTracker(trackerId, endpoint, configuration) {\n if (configuration === void 0) {\n configuration = {};\n }\n if (state) {\n return addTracker(trackerId, trackerId, \"js-\".concat(version), endpoint, state, configuration);\n } else {\n return undefined;\n }\n}\nexport { addGlobalContexts, addPlugin, clearGlobalContexts, clearUserData, crossDomainLinker, disableActivityTracking, disableActivityTrackingCallback, disableAnonymousTracking, discardBrace, discardHashTag, enableActivityTracking, enableActivityTrackingCallback, enableAnonymousTracking, flushBuffer, newSession, newTracker, preservePageViewId, removeGlobalContexts, setBufferSize, setCollectorUrl, setCookiePath, setCustomUrl, setDocumentTitle, setOptOutCookie, setReferrerUrl, setUserId, setUserIdFromCookie, setUserIdFromLocation, setUserIdFromReferrer, setVisitorCookieTimeout, trackPageView, trackSelfDescribingEvent, trackStructEvent, updatePageActivity };\n","/*!\n * Attaches Performance Timing data to Snowplow events v3.24.6 (http://bit.ly/sp-js)\n * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * Licensed under BSD-3-Clause\n */\n\n/*\n * Copyright (c) 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Adds Performance Timing context to events\n *\n * @remarks\n * May not be fully populated when inital Page View fires\n * Often a good idea to take the latest performance timing context\n * for a given page view id when analysing in the warehouse\n */\nfunction PerformanceTimingPlugin() {\n /**\n * Creates a context from the window.performance.timing object\n *\n * @returns object PerformanceTiming context\n */\n function getPerformanceTimingContext() {\n var windowAlias = window,\n performanceAlias = windowAlias.performance || windowAlias.mozPerformance || windowAlias.msPerformance || windowAlias.webkitPerformance,\n performanceTimingAlias = performanceAlias.timing;\n if (performanceAlias) {\n var performanceTiming = {\n navigationStart: performanceTimingAlias.navigationStart,\n redirectStart: performanceTimingAlias.redirectStart,\n redirectEnd: performanceTimingAlias.redirectEnd,\n fetchStart: performanceTimingAlias.fetchStart,\n domainLookupStart: performanceTimingAlias.domainLookupStart,\n domainLookupEnd: performanceTimingAlias.domainLookupEnd,\n connectStart: performanceTimingAlias.connectStart,\n secureConnectionStart: performanceTimingAlias.secureConnectionStart,\n connectEnd: performanceTimingAlias.connectEnd,\n requestStart: performanceTimingAlias.requestStart,\n responseStart: performanceTimingAlias.responseStart,\n responseEnd: performanceTimingAlias.responseEnd,\n unloadEventStart: performanceTimingAlias.unloadEventStart,\n unloadEventEnd: performanceTimingAlias.unloadEventEnd,\n domLoading: performanceTimingAlias.domLoading,\n domInteractive: performanceTimingAlias.domInteractive,\n domContentLoadedEventStart: performanceTimingAlias.domContentLoadedEventStart,\n domContentLoadedEventEnd: performanceTimingAlias.domContentLoadedEventEnd,\n domComplete: performanceTimingAlias.domComplete,\n loadEventStart: performanceTimingAlias.loadEventStart,\n loadEventEnd: performanceTimingAlias.loadEventEnd,\n msFirstPaint: performanceTimingAlias.msFirstPaint,\n chromeFirstPaint: performanceTimingAlias.chromeFirstPaint,\n requestEnd: performanceTimingAlias.requestEnd,\n proxyStart: performanceTimingAlias.proxyStart,\n proxyEnd: performanceTimingAlias.proxyEnd\n };\n return [{\n schema: 'iglu:org.w3/PerformanceTiming/jsonschema/1-0-0',\n data: performanceTiming\n }];\n }\n return [];\n }\n return {\n contexts: function () {\n return getPerformanceTimingContext();\n }\n };\n}\nexport { PerformanceTimingPlugin };\n","/*!\n * Form tracking for Snowplow v3.24.6 (http://bit.ly/sp-js)\n * Copyright 2022 Snowplow Analytics Ltd, 2010 Anthon Pang\n * Licensed under BSD-3-Clause\n */\n\nimport { addEventListener, getCssClasses, getFilterByClass, getFilterByName } from '@snowplow/browser-tracker-core';\nimport { buildFormFocusOrChange, resolveDynamicContext, buildFormSubmission } from '@snowplow/tracker-core';\n\n/** Events to capture in form tracking */\nvar FormTrackingEvent;\n(function (FormTrackingEvent) {\n /** Form field changed event */\n FormTrackingEvent[\"CHANGE_FORM\"] = \"change_form\";\n /** Form field focused event */\n FormTrackingEvent[\"FOCUS_FORM\"] = \"focus_form\";\n /** Form submitted event */\n FormTrackingEvent[\"SUBMIT_FORM\"] = \"submit_form\";\n})(FormTrackingEvent || (FormTrackingEvent = {}));\nvar defaultFormTrackingEvents = [FormTrackingEvent.CHANGE_FORM, FormTrackingEvent.FOCUS_FORM, FormTrackingEvent.SUBMIT_FORM];\nvar innerElementTags = ['textarea', 'input', 'select'];\nvar defaultTransformFn = function (x) {\n return x;\n};\n/*\n * Add submission event listeners to all form elements\n * Add value change event listeners to all mutable inner form elements\n */\nfunction addFormListeners(tracker, configuration) {\n var _a;\n var options = configuration.options,\n context = configuration.context,\n trackingMarker = tracker.id + 'form',\n config = getConfigurationForOptions(options);\n var forms = (_a = config.forms) !== null && _a !== void 0 ? _a : document.getElementsByTagName('form');\n Array.prototype.slice.call(forms).forEach(function (form) {\n if (config.formFilter(form)) {\n Array.prototype.slice.call(innerElementTags).forEach(function (tagname) {\n Array.prototype.slice.call(form.getElementsByTagName(tagname)).forEach(function (innerElement) {\n if (config.fieldFilter(innerElement) && !innerElement[trackingMarker] && innerElement.type.toLowerCase() !== 'password') {\n if (config.eventFilter(FormTrackingEvent.FOCUS_FORM)) {\n addEventListener(innerElement, 'focus', getFormChangeListener(tracker, config, 'focus_form', context), false);\n }\n if (config.eventFilter(FormTrackingEvent.CHANGE_FORM)) {\n addEventListener(innerElement, 'change', getFormChangeListener(tracker, config, 'change_form', context), false);\n }\n innerElement[trackingMarker] = true;\n }\n });\n });\n if (!form[trackingMarker]) {\n if (config.eventFilter(FormTrackingEvent.SUBMIT_FORM)) {\n addEventListener(form, 'submit', getFormSubmissionListener(tracker, config, trackingMarker, context));\n }\n form[trackingMarker] = true;\n }\n }\n });\n}\n/**\n * Check if forms array is a collection of HTML form elements or a filter or undefined\n */\nfunction isCollectionOfHTMLFormElements(forms) {\n return forms != null && Array.prototype.slice.call(forms).length > 0;\n}\n/*\n * Configures form tracking: which forms and fields will be tracked, and the context to attach\n */\nfunction getConfigurationForOptions(options) {\n if (options) {\n var formFilter = function (_) {\n return true;\n };\n var forms = null;\n if (isCollectionOfHTMLFormElements(options.forms)) {\n // options.forms is a collection of HTML form elements\n forms = options.forms;\n } else {\n // options.forms is null or a filter\n formFilter = getFilterByClass(options.forms);\n }\n return {\n forms: forms,\n formFilter: formFilter,\n fieldFilter: getFilterByName(options.fields),\n fieldTransform: getTransform(options.fields),\n eventFilter: function (event) {\n var _a;\n return ((_a = options.events) !== null && _a !== void 0 ? _a : defaultFormTrackingEvents).indexOf(event) > -1;\n }\n };\n } else {\n return {\n forms: null,\n formFilter: function () {\n return true;\n },\n fieldFilter: function () {\n return true;\n },\n fieldTransform: defaultTransformFn,\n eventFilter: function () {\n return true;\n }\n };\n }\n}\n/**\n * Convert a criterion object to a transform function\n *\n * @param object - criterion {transform: function (elt) {return the result of transform function applied to element}\n */\nfunction getTransform(criterion) {\n if (criterion && Object.prototype.hasOwnProperty.call(criterion, 'transform')) {\n return criterion.transform;\n }\n return defaultTransformFn;\n}\n/*\n * Get an identifier for a form, input, textarea, or select element\n */\nfunction getElementIdentifier(elt) {\n var properties = ['name', 'id', 'type', 'nodeName'];\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var propName = properties_1[_i];\n if (elt[propName] != false && typeof elt[propName] === 'string') {\n return elt[propName];\n }\n }\n return null;\n}\n/*\n * Identifies the parent form in which an element is contained\n */\nfunction getParentFormIdentifier(elt) {\n while (elt && elt.nodeName && elt.nodeName.toUpperCase() !== 'HTML' && elt.nodeName.toUpperCase() !== 'FORM') {\n elt = elt.parentNode;\n }\n if (elt && elt.nodeName && elt.nodeName.toUpperCase() === 'FORM') {\n return getElementIdentifier(elt);\n }\n return null;\n}\n/*\n * Returns a list of the input, textarea, and select elements inside a form along with their values\n */\nfunction getInnerFormElements(trackingMarker, elt) {\n var innerElements = [];\n Array.prototype.slice.call(innerElementTags).forEach(function (tagname) {\n var trackedChildren = Array.prototype.slice.call(elt.getElementsByTagName(tagname)).filter(function (child) {\n return child.hasOwnProperty(trackingMarker);\n });\n Array.prototype.slice.call(trackedChildren).forEach(function (child) {\n if (child.type === 'submit') {\n return;\n }\n var elementJson = {\n elementData: {\n name: getElementIdentifier(child),\n value: child.value,\n nodeName: child.nodeName\n },\n originalElement: child\n };\n if (child.type && child.nodeName.toUpperCase() === 'INPUT') {\n elementJson.elementData.type = child.type;\n }\n if ((child.type === 'checkbox' || child.type === 'radio') && !child.checked) {\n elementJson.elementData.value = null;\n }\n innerElements.push(elementJson);\n });\n });\n return innerElements;\n}\n/*\n * Return function to handle form field change event\n */\nfunction getFormChangeListener(tracker, config, event_type, context) {\n return function (e) {\n var _a, _b;\n var elt = e.target;\n if (elt) {\n var type = elt.nodeName && elt.nodeName.toUpperCase() === 'INPUT' ? elt.type : null;\n var value = elt.type === 'checkbox' && !elt.checked ? null : config.fieldTransform(elt.value, elt, elt);\n if (event_type === 'change_form' || type !== 'checkbox' && type !== 'radio') {\n tracker.core.track(buildFormFocusOrChange({\n schema: event_type,\n formId: (_a = getParentFormIdentifier(elt)) !== null && _a !== void 0 ? _a : '',\n elementId: (_b = getElementIdentifier(elt)) !== null && _b !== void 0 ? _b : '',\n nodeName: elt.nodeName,\n type: type,\n elementClasses: getCssClasses(elt),\n value: value !== null && value !== void 0 ? value : null\n }), resolveDynamicContext(context, elt, type, value));\n }\n }\n };\n}\n/*\n * Return function to handle form submission event\n */\nfunction getFormSubmissionListener(tracker, config, trackingMarker, context) {\n return function (e) {\n var _a;\n var elt = e.target;\n var innerElements = getInnerFormElements(trackingMarker, elt);\n innerElements.forEach(function (innerElement) {\n var _a;\n var eltData = innerElement.elementData;\n eltData.value = (_a = config.fieldTransform(eltData.value, eltData, innerElement.originalElement)) !== null && _a !== void 0 ? _a : eltData.value;\n });\n var elementsData = innerElements.map(function (elt) {\n return elt.elementData;\n });\n tracker.core.track(buildFormSubmission({\n formId: (_a = getElementIdentifier(elt)) !== null && _a !== void 0 ? _a : '',\n formClasses: getCssClasses(elt),\n elements: elementsData\n }), resolveDynamicContext(context, elt, elementsData));\n };\n}\nvar _trackers = {};\n/**\n * A plugin which enabled automatic form tracking\n */\nfunction FormTrackingPlugin() {\n return {\n activateBrowserPlugin: function (tracker) {\n _trackers[tracker.id] = tracker;\n }\n };\n}\n/**\n * Enables automatic form tracking\n * An event will be fired when a form field is changed or a form submitted.\n * This can be called multiple times: only forms not already tracked will be tracked.\n *\n * @param configuration - The form tracking configuration\n * @param trackers - The tracker identifiers which the events will be sent to\n */\nfunction enableFormTracking(configuration, trackers) {\n if (configuration === void 0) {\n configuration = {};\n }\n if (trackers === void 0) {\n trackers = Object.keys(_trackers);\n }\n trackers.forEach(function (t) {\n if (_trackers[t]) {\n if (_trackers[t].sharedState.hasLoaded) {\n addFormListeners(_trackers[t], configuration);\n } else {\n _trackers[t].sharedState.registeredOnLoadHandlers.push(function () {\n addFormListeners(_trackers[t], configuration);\n });\n }\n }\n });\n}\nexport { FormTrackingPlugin, enableFormTracking };\n","export type SnowplowContext =\r\n | CustomContext\r\n | CustomerContext\r\n | ProductContext\r\n | UserContext;\r\n\r\nexport enum SnowplowSchemaType {\r\n CustomSchema = 'iglu:com.visma-tech-hubs/context_custom/jsonschema/1-0-0',\r\n CustomerSchema = 'iglu:com.visma-tech-hubs/context_customer/jsonschema/1-0-0',\r\n ProductSchema = 'iglu:com.visma-tech-hubs/context_product/jsonschema/1-0-0',\r\n UserSchema = 'iglu:com.visma-tech-hubs/context_user/jsonschema/1-0-0',\r\n}\r\n\r\nexport interface CustomContext extends Record<string, unknown> {\r\n custom_name?: string;\r\n customfield_custom1?: string;\r\n customfield_custom2?: string;\r\n customfield_custom3?: string;\r\n}\r\n\r\nexport interface CustomerContext extends Record<string, unknown> {\r\n business_unit: string;\r\n company_name?: string;\r\n countryiso?: string; // string with two chars: XX\r\n customer_name: string;\r\n customfield_customer1?: string;\r\n customfield_customer2?: string;\r\n customfield_customer3?: string;\r\n organization_no?: string;\r\n}\r\n\r\nexport interface ProductContext extends Record<string, unknown> {\r\n customfield_product1?: string;\r\n customfield_product2?: string;\r\n customfield_product3?: string;\r\n module_name?: string;\r\n module_no?: string;\r\n product_name: string;\r\n r12?: string;\r\n}\r\n\r\nexport interface UserContext extends Record<string, unknown> {\r\n customfield_user1?: string;\r\n customfield_user2?: string;\r\n customfield_user3?: string;\r\n registration_date?: string; // yyyy-mm-dd\r\n user_type: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n BrowserTracker,\r\n enableActivityTracking,\r\n newTracker,\r\n SelfDescribingJson,\r\n setUserId,\r\n trackPageView,\r\n} from '@snowplow/browser-tracker';\r\nimport { PerformanceTimingPlugin } from '@snowplow/browser-plugin-performance-timing';\r\nimport { FormTrackingPlugin } from '@snowplow/browser-plugin-form-tracking';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport {\r\n CustomerContext,\r\n ProductContext,\r\n SnowplowContext,\r\n SnowplowSchemaType,\r\n UserContext,\r\n} from '../models/snowplow.models';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Injectable()\r\nexport class SnowplowService {\r\n private contexts: SelfDescribingJson<SnowplowContext>[] = [];\r\n private tracker: BrowserTracker;\r\n private isInitialized = false;\r\n\r\n constructor(private router: Router) {}\r\n\r\n public startTracking(): void {\r\n // Added this so that we can manually set when this should be started.\r\n // For those without config files, that uses environment.ts files, they can modify\r\n // all of this so that they use in the app module APP_INITIALIZER and useClass: Snowplow\r\n // then move this.startTracker() into the constructor and this should run with only modifying\r\n // app.module.ts . That is in case someone want to copy this.\r\n // Of course even better would be to have a way to build this without hardcoding to a product\r\n\r\n if (this.isInitialized) {\r\n return;\r\n }\r\n this.initTracker();\r\n this.initUserAndCustomerContext();\r\n this.initProductContext();\r\n this.startTrackingRoutes();\r\n this.isInitialized = true;\r\n }\r\n\r\n private initTracker(): void {\r\n if (this.tracker != null) {\r\n return;\r\n }\r\n this.tracker = newTracker('oppslag', environment.snowplowUrl, {\r\n appId: 'sticos',\r\n cookieSameSite: 'Lax',\r\n\r\n cookieSecure: true,\r\n plugins: [PerformanceTimingPlugin(), FormTrackingPlugin()],\r\n });\r\n enableActivityTracking(\r\n {\r\n heartbeatDelay: 10,\r\n minimumVisitLength: 10,\r\n },\r\n ['oppslag']\r\n );\r\n }\r\n\r\n private initUserAndCustomerContext(): void {\r\n this.createUserContext();\r\n this.createCustomerContext();\r\n setUserId('');\r\n }\r\n private createUserContext(): void {\r\n const userContext: Record<keyof UserContext, string> = {\r\n user_type: 'User',\r\n customfield_user1: '',\r\n customfield_user2: null,\r\n customfield_user3: null,\r\n registration_date: null,\r\n };\r\n this.contexts.push({\r\n data: userContext,\r\n schema: SnowplowSchemaType.UserSchema,\r\n });\r\n }\r\n\r\n private createCustomerContext(): void {\r\n const customerContext: Record<keyof CustomerContext, string> = {\r\n business_unit: 'Sticos AS',\r\n company_name: '',\r\n customer_name: '',\r\n countryiso: 'NO',\r\n organisation_no: '',\r\n customfield_customer1: '',\r\n customfield_customer2: null,\r\n customfield_customer3: null,\r\n };\r\n\r\n this.contexts.push({\r\n schema: SnowplowSchemaType.CustomerSchema,\r\n data: customerContext,\r\n });\r\n }\r\n\r\n private initProductContext(): void {\r\n const productContext: Record<keyof ProductContext, string> = {\r\n module_name: 'Kalkulator',\r\n product_name: 'Oppslag',\r\n r12: '485',\r\n customfield_product1: null,\r\n customfield_product2: null,\r\n customfield_product3: null,\r\n };\r\n this.contexts.push({\r\n schema: SnowplowSchemaType.ProductSchema,\r\n data: productContext,\r\n });\r\n }\r\n\r\n private startTrackingRoutes(): void {\r\n this.router.events.subscribe(event => {\r\n if (event instanceof NavigationEnd) {\r\n // according to snowplow documentation this needs to be done before track pageview:\r\n // https://docs.snowplow.io/docs/collecting-data/collecting-from-own-applications/javascript-trackers/javascript-tracker/javascript-tracker-v3/tracking-events/#activity-tracking-page-pings\r\n\r\n trackPageView({ title: event.url, context: this.contexts });\r\n }\r\n });\r\n }\r\n}\r\n","export type ArrayChunk = {\r\n indexFrom: number;\r\n indexTo: number;\r\n count: number;\r\n};\r\n\r\nexport class ArrayUtils {\r\n /**\r\n * For the given enum, return all its values (correctly typed)\r\n * as an array so we can iterate over them.\r\n */\r\n public static enumToArray<T extends object>(enumValues: T): Array<T[keyof T]> {\r\n const keys = Object.keys(enumValues).filter(key => !/^[0-9]+$/.test(key)) as Array<keyof T>;\r\n return keys.map(key => enumValues[key]);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, distinctUntilChanged, filter, map, Observable } from 'rxjs';\r\nimport { OneTrustConsentGroup } from '../enums/one-trust-consent-group.enum';\r\nimport { ArrayUtils } from '../utils/array.utils';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OneTrustService {\r\n private activeGroups$ = new BehaviorSubject<OneTrustConsentGroup[]>([]);\r\n\r\n /**\r\n * Handler that is called when the OneTrust script\r\n * is loaded, on bootstrap.\r\n */\r\n public scriptLoadedHandler(): void {\r\n this.listenForConsentChanges();\r\n this.consentChangeHandler();\r\n }\r\n\r\n /**\r\n * Observable that broadcasts changes in user consent\r\n * (active groups). Only emits distinct values.\r\n */\r\n public getActiveGroups(): Observable<OneTrustConsentGroup[]> {\r\n return this.activeGroups$.pipe(\r\n filter(groups => groups.length > 0),\r\n distinctUntilChanged()\r\n );\r\n }\r\n\r\n /**\r\n * Observable that broadcasts whether or not the user\r\n * has given consent for storing/using the given type of cookies.\r\n */\r\n public hasGivenConsentFor(group: OneTrustConsentGroup): Observable<boolean> {\r\n return this.getActiveGroups().pipe(map(activeGroups => activeGroups.includes(group)));\r\n }\r\n\r\n /**\r\n * Listen for changes in user consent.\r\n */\r\n private listenForConsentChanges(): void {\r\n if (!OneTrust) return;\r\n OneTrust.OnConsentChanged(this.consentChangeHandler.bind(this));\r\n }\r\n\r\n /**\r\n * Function that runs when user cookie consent changes.\r\n *\r\n * In practise this is when:\r\n * - the user makes changes to their cookie settings in the OneTrust consent dialog.\r\n * - The function also runs once at bootstrap, when the OneTrust script is loaded\r\n */\r\n private consentChangeHandler(): void {\r\n if (OnetrustActiveGroups === undefined) return;\r\n const validValues = ArrayUtils.enumToArray(OneTrustConsentGroup);\r\n const activeGroups = OnetrustActiveGroups.trim()\r\n .split(',')\r\n .filter((value): value is OneTrustConsentGroup => value !== '')\r\n .filter(value => validValues.includes(value as OneTrustConsentGroup));\r\n this.activeGroups$.next(activeGroups);\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-one-trust',\r\n standalone: true,\r\n imports: [CommonModule],\r\n template: '',\r\n})\r\nexport class OneTrustComponent {\r\n constructor() {\r\n const initScript = document.createElement('script');\r\n initScript.type = 'text/javascript';\r\n initScript.innerHTML =\r\n 'function OptanonWrapper() {' +\r\n 'if(window.oneTrustLoaded) return;' +\r\n \"const oneTrustLoadedEvent = new CustomEvent('oneTrustLoaded');\" +\r\n 'window.dispatchEvent(oneTrustLoadedEvent);' +\r\n 'window.oneTrustLoaded = true;' +\r\n '}';\r\n document.head.appendChild(initScript);\r\n }\r\n}\r\n","import { Component, DestroyRef, OnInit } from '@angular/core';\r\nimport { environment } from 'src/environments/environment';\r\nimport { SnowplowService } from './core/services/snowplow.service';\r\nimport config from 'devextreme/core/config';\r\nimport { licenseKey } from 'src/devextreme.license';\r\nimport { OneTrustService } from './common/services/one-trust.service';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { OneTrustConsentGroup } from './common/enums/one-trust-consent-group.enum';\r\n\r\nconfig({\r\n licenseKey: licenseKey,\r\n});\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.css'],\r\n})\r\nexport class AppComponent implements OnInit {\r\n constructor(\r\n private snowplowService: SnowplowService,\r\n private oneTrustService: OneTrustService,\r\n private destroyRef: DestroyRef\r\n ) {\r\n window.addEventListener('oneTrustLoaded', () => this.oneTrustService.scriptLoadedHandler(), {\r\n once: true,\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.oneTrustService\r\n .hasGivenConsentFor(OneTrustConsentGroup.Analytical)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(hasConsent => {\r\n if (hasConsent && environment.production) {\r\n this.snowplowService.startTracking();\r\n }\r\n });\r\n }\r\n}\r\n","<app-one-trust></app-one-trust>\r\n<router-outlet></router-outlet>\r\n","import { CommonModule } from '@angular/common';\r\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\r\nimport {\r\n ModuleWithProviders,\r\n NgModule,\r\n Optional,\r\n SkipSelf,\r\n} from '@angular/core';\r\n\r\n@NgModule({ imports: [CommonModule], providers: [provideHttpClient(withInterceptorsFromDi())] })\r\nexport class CoreModule {\r\n constructor(@Optional() @SkipSelf() core: CoreModule) {\r\n if (core) {\r\n throw new Error('Trying to inject CoreModule in CoreModule');\r\n }\r\n }\r\n\r\n static forRoot(): ModuleWithProviders<CoreModule> {\r\n return {\r\n ngModule: CoreModule,\r\n providers: [],\r\n };\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { environment } from '../../../environments/environment';\r\nimport { AppConfig } from '../models/app-config.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AppConfigService {\r\n constructor(private http: HttpClient) {}\r\n\r\n public load() {\r\n return this.http.get<AppConfig>('assets/config/config.json').pipe(\r\n tap(config => {\r\n environment.snowplowUrl = config.snowplowUrl;\r\n environment.ratesApiHost = config.ratesApiHost;\r\n environment.fetchVatRatesFromApi = config.fetchVatRatesFromApi;\r\n environment.fetchInterestRatesFromApi = config.fetchInterestRatesFromApi;\r\n environment.fetchMealRatesFromApi = config.fetchMealRatesFromApi;\r\n }),\r\n catchError(error => {\r\n console.error('Could not load file config.json');\r\n return error;\r\n })\r\n );\r\n }\r\n}\r\n","import config from 'devextreme/core/config';\r\nimport { locale, loadMessages } from 'devextreme/localization';\r\n\r\n// Load localized messages (English included by default)\r\nconst messagesNo = {\r\n nb: {\r\n 'Yes': 'Ja',\r\n 'No': 'Nei',\r\n 'Cancel': 'Avbryt',\r\n 'Clear': 'Tøm',\r\n 'Done': 'Ferdig',\r\n 'Loading': 'Laster...',\r\n 'Select': 'Velg...',\r\n 'Search': 'Søk...',\r\n 'Back': 'Tilbake',\r\n 'OK': 'OK',\r\n\r\n 'dxCollectionWidget-noDataText': 'Ingen data å vise',\r\n 'validation-required': 'Påkrevd',\r\n 'validation-required-formatted': '{0} er påkrevd',\r\n 'validation-numeric': 'Verdien må være et tall',\r\n 'validation-numeric-formatted': '{0} må være et tall',\r\n 'validation-range': 'Verdien er utenfor gyldig område',\r\n 'validation-range-formatted': '{0} er utenfor gyldig område',\r\n 'validation-stringLength': 'Lengden på verdien er ikke korrekt',\r\n 'validation-stringLength-formatted': 'Lengden på {0} er ikke korrekt',\r\n 'validation-custom': 'Verdien er ugyldig',\r\n 'validation-custom-formatted': '{0} er ugyldig',\r\n 'validation-compare': 'Verdiene er ikke like',\r\n 'validation-compare-formatted': '{0} er ikke like',\r\n 'validation-pattern': 'Verdien passer ikke mønsteret',\r\n 'validation-pattern-formatted': '{0} passer ikke mønsteret',\r\n 'validation-email': 'E-posten er ugyldig',\r\n 'validation-email-formatted': '{0} er ugyldig',\r\n 'validation-mask': 'Verdien er ugyldig',\r\n\r\n 'dxLookup-searchPlaceholder': 'Minimum antall tegn: {0}',\r\n 'dxList-pullingDownText': 'Dra ned for å oppdatere',\r\n 'dxList-pulledDownText': 'Slipp for å oppdatere',\r\n 'dxList-refreshingText': 'Oppdaterer...',\r\n 'dxList-pageLoadingText': 'Laster...',\r\n 'dxList-nextButtonText': 'Mer',\r\n 'dxList-selectAll': 'Velg alle',\r\n 'dxListEditDecorator-delete': 'Slett',\r\n 'dxListEditDecorator-more': 'Mer',\r\n 'dxScrollView-pullingDownText': 'Dra ned for å oppdatere',\r\n 'dxScrollView-pulledDownText': 'Slipp for å oppdatere',\r\n 'dxScrollView-refreshingText': 'Oppdaterer...',\r\n 'dxScrollView-reachBottomText': 'Laster...',\r\n 'dxDateBox-simulatedDataPickerTitleTime': 'Velg tid',\r\n 'dxDateBox-simulatedDataPickerTitleDate': 'Velg dato',\r\n 'dxDateBox-simulatedDataPickerTitleDateTime': 'Velg dato og tid',\r\n 'dxDateBox-validation-datetime': 'Verdien må være en dato eller en tid',\r\n 'dxFileUploader-selectFile': 'Velg fil',\r\n 'dxFileUploader-dropFile': 'eller dra hit',\r\n 'dxFileUploader-bytes': 'Bytes',\r\n 'dxFileUploader-kb': 'kb',\r\n 'dxFileUploader-Mb': 'Mb',\r\n 'dxFileUploader-Gb': 'Gb',\r\n 'dxFileUploader-upload': 'Last opp',\r\n 'dxFileUploader-uploaded': 'Lastet opp',\r\n 'dxFileUploader-readyToUpload': 'Klar til å laste opp',\r\n 'dxFileUploader-uploadFailedMessage': 'Feil ved opplasting',\r\n 'dxRangeSlider-ariaFrom': 'Fra',\r\n 'dxRangeSlider-ariaTill': 'Til',\r\n 'dxSwitch-onText': 'PÅ',\r\n 'dxSwitch-offText': 'AV',\r\n 'dxForm-optionalMark': 'valgfritt',\r\n 'dxForm-requiredMessage': '{0} er et obligatorisk felt',\r\n 'dxNumberBox-invalidValueMessage': 'Verdien må være et tall',\r\n\r\n 'dxDataGrid-columnChooserTitle': 'Kolonnevalg',\r\n 'dxDataGrid-columnChooserEmptyText': 'Dra kolonner hit for å skjule dem',\r\n 'dxDataGrid-groupContinuesMessage': 'Fortsetter på neste side',\r\n 'dxDataGrid-groupContinuedMessage': 'Fortsetter fra forrige side',\r\n 'dxDataGrid-groupHeaderText': 'Grupper etter denne kolonnen',\r\n 'dxDataGrid-ungroupHeaderText': 'Fjern gruppe',\r\n 'dxDataGrid-ungroupAllText': 'Fjern alle grupper',\r\n 'dxDataGrid-editingEditRow': 'Rediger',\r\n 'dxDataGrid-editingSaveRowChanges': 'Lagre',\r\n 'dxDataGrid-editingCancelRowChanges': 'Avbryt',\r\n 'dxDataGrid-editingDeleteRow': 'Fjern',\r\n 'dxDataGrid-editingUndeleteRow': 'Gjenopprett',\r\n 'dxDataGrid-editingConfirmDeleteMessage': 'Er du sikker på at du vil slette denne posten?',\r\n 'dxDataGrid-validationCancelChanges': 'Forkast endringer',\r\n 'dxDataGrid-groupPanelEmptyText': 'Dra en kolonne hit for å gruppere',\r\n 'dxDataGrid-noDataText': 'Ingen data',\r\n 'dxDataGrid-searchPanelPlaceholder': 'Søk...',\r\n 'dxDataGrid-filterRowShowAllText': '(Alle)',\r\n 'dxDataGrid-filterRowResetOperationText': 'Tilbakestill',\r\n 'dxDataGrid-filterRowOperationEquals': 'Er lik',\r\n 'dxDataGrid-filterRowOperationNotEquals': 'Er ulik',\r\n 'dxDataGrid-filterRowOperationLess': 'Mindre enn',\r\n 'dxDataGrid-filterRowOperationLessOrEquals': 'Mindre enn eller lik',\r\n 'dxDataGrid-filterRowOperationGreater': 'Større enn',\r\n 'dxDataGrid-filterRowOperationGreaterOrEquals': 'Større enn eller lik',\r\n 'dxDataGrid-filterRowOperationStartsWith': 'Starter med',\r\n 'dxDataGrid-filterRowOperationContains': 'Inneholder',\r\n 'dxDataGrid-filterRowOperationNotContains': 'Inneholder ikke',\r\n 'dxDataGrid-filterRowOperationEndsWith': 'Slutter på',\r\n 'dxDataGrid-filterRowOperationBetween': 'Mellom',\r\n 'dxDataGrid-filterRowOperationBetweenStartText': 'Start',\r\n 'dxDataGrid-filterRowOperationBetweenEndText': 'Slutt',\r\n 'dxDataGrid-applyFilterText': 'Bruk filter',\r\n 'dxDataGrid-trueText': 'sant',\r\n 'dxDataGrid-falseText': 'usant',\r\n 'dxDataGrid-sortingAscendingText': 'Sorter stigende',\r\n 'dxDataGrid-sortingDescendingText': 'Sorter synkende',\r\n 'dxDataGrid-sortingClearText': 'Avbryt sortering',\r\n 'dxDataGrid-editingSaveAllChanges': 'Lagre endringer',\r\n 'dxDataGrid-editingCancelAllChanges': 'Forkast endringer',\r\n 'dxDataGrid-editingAddRow': 'Ny rad',\r\n 'dxDataGrid-summaryMin': 'Min: {0}',\r\n 'dxDataGrid-summaryMinOtherColumn': 'Minimum for {1} er {0}',\r\n 'dxDataGrid-summaryMax': 'Maks: {0}',\r\n 'dxDataGrid-summaryMaxOtherColumn': 'Maksimum for {1} er {0}',\r\n 'dxDataGrid-summaryAvg': 'Ø: {0}',\r\n 'dxDataGrid-summaryAvgOtherColumn': 'Gjennomsnitt for {1} er {0}',\r\n 'dxDataGrid-summarySum': 'Sum: {0}',\r\n 'dxDataGrid-summarySumOtherColumn': 'Sum for {1} er {0}',\r\n 'dxDataGrid-summaryCount': 'Antall: {0}',\r\n 'dxDataGrid-columnFixingFix': 'Fest',\r\n 'dxDataGrid-columnFixingUnfix': 'Løsne',\r\n 'dxDataGrid-columnFixingLeftPosition': 'Til venstre',\r\n 'dxDataGrid-columnFixingRightPosition': 'Til høyre',\r\n 'dxDataGrid-exportTo': 'Eksporter',\r\n 'dxDataGrid-exportToExcel': 'Eksporter til Excel-fil',\r\n 'dxDataGrid-excelFormat': 'Excel-fil',\r\n 'dxDataGrid-selectedRows': 'Valgte rader',\r\n 'dxDataGrid-exportAll': 'Eksporter alle data',\r\n 'dxDataGrid-exportSelectedRows': 'Eksporter valgte rader',\r\n 'dxDataGrid-headerFilterEmptyValue': '(Tomme verdier)',\r\n 'dxDataGrid-headerFilterOK': 'OK',\r\n 'dxDataGrid-headerFilterCancel': 'Avbryt',\r\n 'dxDataGrid-ariaColumn': 'Kolonne',\r\n 'dxDataGrid-ariaValue': 'Verdi',\r\n 'dxDataGrid-ariaFilterCell': 'Filter-celle',\r\n 'dxDataGrid-ariaCollapse': 'Sammenslå',\r\n 'dxDataGrid-ariaExpand': 'Utvid',\r\n 'dxDataGrid-ariaDataGrid': 'Datatabell',\r\n 'dxDataGrid-ariaSearchInGrid': 'Søk i datatabellen',\r\n 'dxDataGrid-ariaSelectAll': 'Velg alle',\r\n 'dxDataGrid-ariaSelectRow': 'Velg rad',\r\n 'dxPager-infoText': 'Side {0} av {1} ({2} elementer)',\r\n 'dxPager-pagesCountText': 'av',\r\n 'dxPivotGrid-grandTotal': 'Totalt',\r\n 'dxPivotGrid-total': '{0} Totalt',\r\n 'dxPivotGrid-fieldChooserTitle': 'Feltvelger',\r\n 'dxPivotGrid-showFieldChooser': 'Vis feltvelger',\r\n 'dxPivotGrid-expandAll': 'Utvid alle',\r\n 'dxPivotGrid-collapseAll': 'Sammenslå alle',\r\n 'dxPivotGrid-sortColumnBySummary': '\\'{0}\\' sorter etter denne kolonnen',\r\n 'dxPivotGrid-sortRowBySummary': '\\'{0}\\' sorter etter denne raden',\r\n 'dxPivotGrid-removeAllSorting': 'Fjern sortering',\r\n 'dxPivotGrid-rowFields': 'Radfelter',\r\n 'dxPivotGrid-columnFields': 'Kolonnefelter',\r\n 'dxPivotGrid-dataFields': 'Datafelter',\r\n 'dxPivotGrid-filterFields': 'Filterfelter',\r\n 'dxPivotGrid-allFields': 'Alle felter',\r\n 'dxPivotGrid-columnFieldArea': 'Dra kolonnefelter hit',\r\n 'dxPivotGrid-dataFieldArea': 'Dra datafelter hit',\r\n 'dxPivotGrid-rowFieldArea': 'Dra radfelter hit',\r\n 'dxPivotGrid-filterFieldArea': 'Dra filterfelter hit',\r\n 'dxScheduler-editorLabelTitle': 'Emne',\r\n 'dxScheduler-editorLabelStartDate': 'Starttidspunkt',\r\n 'dxScheduler-editorLabelEndDate': 'Sluttidspunkt',\r\n 'dxScheduler-editorLabelDescription': 'Beskrivelse',\r\n 'dxScheduler-editorLabelRecurrence': 'Repetisjon',\r\n 'dxScheduler-openAppointment': 'Åpen dato',\r\n 'dxScheduler-recurrenceNever': 'Aldri',\r\n 'dxScheduler-recurrenceDaily': 'Daglig',\r\n 'dxScheduler-recurrenceWeekly': 'Ukentlig',\r\n 'dxScheduler-recurrenceMonthly': 'Månedlig',\r\n 'dxScheduler-recurrenceYearly': 'Årlig',\r\n 'dxScheduler-recurrenceEvery': 'Alle',\r\n 'dxScheduler-recurrenceEnd': 'Repetisjonsslutt',\r\n 'dxScheduler-recurrenceAfter': 'Etter',\r\n 'dxScheduler-recurrenceOn': 'På',\r\n 'dxScheduler-recurrenceRepeatDaily': 'Dag(er)',\r\n 'dxScheduler-recurrenceRepeatWeekly': 'Uke(r)',\r\n 'dxScheduler-recurrenceRepeatMonthly': 'Måned(er)',\r\n 'dxScheduler-recurrenceRepeatYearly': 'År',\r\n 'dxScheduler-switcherDay': 'Dag',\r\n 'dxScheduler-switcherWeek': 'Uke',\r\n 'dxScheduler-switcherWorkWeek': 'Arbeidsuke',\r\n 'dxScheduler-switcherMonth': 'Måned',\r\n 'dxScheduler-switcherTimelineDay': 'Tidslinje dag',\r\n 'dxScheduler-switcherTimelineWeek': 'Tidslinje uke',\r\n 'dxScheduler-switcherTimelineWorkWeek': 'Tidslinje arbeidsuke',\r\n 'dxScheduler-switcherTimelineMonth': 'Tidslinje måned',\r\n 'dxScheduler-switcherAgenda': 'Agenda',\r\n 'dxScheduler-recurrenceRepeatOnDate': 'på dato',\r\n 'dxScheduler-recurrenceRepeatCount': 'Hendelser',\r\n 'dxScheduler-allDay': 'Fulltid',\r\n 'dxScheduler-confirmRecurrenceEditMessage': 'Vil du redigere bare denne hendelsen eller hele serien?',\r\n 'dxScheduler-confirmRecurrenceDeleteMessage': 'Vil du slette bare denne hendelsen eller hele serien?',\r\n 'dxScheduler-confirmRecurrenceEditSeries': 'Rediger serien',\r\n 'dxScheduler-confirmRecurrenceDeleteSeries': 'Slett serien',\r\n 'dxScheduler-confirmRecurrenceEditOccurrence': 'Rediger hendelse',\r\n 'dxScheduler-confirmRecurrenceDeleteOccurrence': 'Slett datoer',\r\n 'dxScheduler-noTimezoneTitle': 'Ingen tidssone',\r\n 'dxCalendar-todayButtonText': 'I dag',\r\n 'dxCalendar-ariaWidgetName': 'Kalender',\r\n 'dxColorView-ariaRed': 'Rød',\r\n 'dxColorView-ariaGreen': 'Grønn',\r\n 'dxColorView-ariaBlue': 'Blå',\r\n 'dxColorView-ariaAlpha': 'Gjennomsiktig',\r\n 'dxColorView-ariaHex': 'Fargeverdi',\r\n 'vizExport-printingButtonText': 'Utskrift',\r\n 'vizExport-titleMenuText': 'Eksporter/Skriv ut',\r\n 'vizExport-exportButtonText': '{0}-fil'\r\n }\r\n};\r\n\r\nloadMessages(messagesNo);\r\nlocale('nb');\r\nconfig({ defaultCurrency: 'NOK' });\r\n","import { APP_BASE_HREF, HashLocationStrategy, LocationStrategy } from '@angular/common';\r\nimport '@angular/common/locales/global/nb';\r\nimport { APP_INITIALIZER, LOCALE_ID, NgModule, isDevMode } from '@angular/core';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { EffectsModule } from '@ngrx/effects';\r\nimport { StoreModule } from '@ngrx/store';\r\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { AppComponent } from './app.component';\r\nimport { CoreModule } from './core/core.module';\r\nimport { AppConfigService } from './core/services/app-config-service';\r\nimport { SnowplowService } from './core/services/snowplow.service';\r\nimport './localization';\r\nimport { MaintenanceComponent } from './maintenance/maintenance.component';\r\nimport { OneTrustComponent } from './common/components/one-trust/one-trust.component';\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport function initApiConfiguration(appConfig: AppConfigService): Function {\r\n return () => {\r\n return appConfig.load();\r\n };\r\n}\r\n\r\n@NgModule({\r\n imports: [\r\n BrowserModule,\r\n CoreModule.forRoot(),\r\n StoreModule.forRoot(),\r\n EffectsModule.forRoot(),\r\n AppRoutingModule,\r\n StoreDevtoolsModule.instrument({ maxAge: 25, logOnly: !isDevMode() }),\r\n OneTrustComponent,\r\n ],\r\n declarations: [AppComponent, MaintenanceComponent],\r\n providers: [\r\n { provide: LOCALE_ID, useValue: 'nb' },\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: initApiConfiguration,\r\n deps: [AppConfigService],\r\n multi: true,\r\n },\r\n {\r\n provide: APP_BASE_HREF,\r\n useValue: '/',\r\n },\r\n {\r\n provide: LocationStrategy,\r\n useClass: HashLocationStrategy,\r\n },\r\n SnowplowService,\r\n ],\r\n bootstrap: [AppComponent],\r\n})\r\nexport class AppModule {}\r\n","/// <reference types=\"@angular/localize\" />\r\n\r\nimport { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic()\r\n .bootstrapModule(AppModule)\r\n .catch(err => console.error(err));\r\n"],"mappings":"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","names":["i","v4","v4","state","state","action","OneTrustConsentGroup","dict","payloadBuilder","json","newContext","context","LOG_LEVEL","error","payloadBuilder","filter","a","base64","corePlugins","callback","core","version","configuration","import_uuid","configCollectorUrl","bytes","numberToSend","useragent","parsed","payloadBuilder","version","newTracker","trackerId","namespace","endpoint","state","trackerConfiguration","_a","_b","hash","timeout","noop","context","minXOffset","minYOffset","maxXOffset","maxYOffset","version","SharedState","FormTrackingEvent","SnowplowSchemaType"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,15,16,17,18,19]}