@kameleoon/javascript-sdk 4.18.0 → 4.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"javascript-sdk.umd.min.js","sources":["../../javascript-sdk-core/dist/javascript-sdk-core.browser.es.js","../src/constants.ts","../../../node_modules/tslib/tslib.es6.js","../src/requester.ts","../src/visitorCodeManager.ts","../src/storage.ts","../src/eventSource.ts","../src/prng.ts","../src/defaultLogger.ts","../src/visitorActivity/visitorActivityManager.ts","../src/dataManager.ts","../src/utils/platformAnalyzer.ts","../src/kameleoonClient.ts"],"sourcesContent":["var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction getAugmentedNamespace(n) {\n if (Object.prototype.hasOwnProperty.call(n, '__esModule')) return n;\n var f = n.default;\n\tif (typeof f == \"function\") {\n\t\tvar a = function a () {\n\t\t\tvar isInstance = false;\n try {\n isInstance = this instanceof a;\n } catch {}\n\t\t\tif (isInstance) {\n return Reflect.construct(f, arguments, this.constructor);\n\t\t\t}\n\t\t\treturn f.apply(this, arguments);\n\t\t};\n\t\ta.prototype = f.prototype;\n } else a = {};\n Object.defineProperty(a, '__esModule', {value: true});\n\tObject.keys(n).forEach(function (k) {\n\t\tvar d = Object.getOwnPropertyDescriptor(n, k);\n\t\tObject.defineProperty(a, k, d.get ? d : {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn n[k];\n\t\t\t}\n\t\t});\n\t});\n\treturn a;\n}\n\nvar build = {};\n\nvar main = {};\n\nvar hasRequiredMain;\n\nfunction requireMain () {\n\tif (hasRequiredMain) return main;\n\thasRequiredMain = 1;\n\tObject.defineProperty(main, \"__esModule\", { value: true });\n\tmain.Err = main.Ok = void 0;\n\t// --- Note ---\n\t// `throw` is a reserved keyword\n\tfunction throwErr(message) {\n\t if (!this.ok) {\n\t if (typeof this.error === \"string\" || typeof this.error === \"undefined\") {\n\t var defaultMessage = \"There was an error! No specific error message was provided.\";\n\t throw new Error(message || this.error || defaultMessage);\n\t }\n\t if (message) {\n\t this.error.message = message;\n\t }\n\t throw this.error;\n\t }\n\t return this.data;\n\t}\n\t// --- Note ---\n\t// `else` is a reserved keyword\n\tfunction elseDo(callback) {\n\t if (this.ok) {\n\t return this.data;\n\t }\n\t // TODO:\n\t // - Tackle the problem of callback return type not being enforced when using `void` | `undefined` as `T`\n\t // - In the same situation `or` works well\n\t return callback(this.error);\n\t}\n\tfunction or(orValue) {\n\t if (this.ok) {\n\t return this.data;\n\t }\n\t return orValue;\n\t}\n\tfunction and(callback) {\n\t if (this.ok) {\n\t callback(this.data);\n\t }\n\t return this;\n\t}\n\tfunction Ok(data) {\n\t return { ok: true, data: data, throw: throwErr, else: elseDo, or: or, and: and };\n\t}\n\tmain.Ok = Ok;\n\tfunction Err(error) {\n\t return { ok: false, error: error, throw: throwErr, else: elseDo, or: or, and: and };\n\t}\n\tmain.Err = Err;\n\t\n\treturn main;\n}\n\nvar hasRequiredBuild;\n\nfunction requireBuild () {\n\tif (hasRequiredBuild) return build;\n\thasRequiredBuild = 1;\n\t(function (exports) {\n\t\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t\texports.Err = exports.Ok = void 0;\n\t\tvar main_1 = requireMain();\n\t\tObject.defineProperty(exports, \"Ok\", { enumerable: true, get: function () { return main_1.Ok; } });\n\t\tObject.defineProperty(exports, \"Err\", { enumerable: true, get: function () { return main_1.Err; } });\n\t\t\n\t} (build));\n\treturn build;\n}\n\nvar buildExports = requireBuild();\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of exception types `KameleoonError`\n * */\nvar KameleoonException;\n(function (KameleoonException) {\n KameleoonException[\"Credentials\"] = \"Credentials\";\n KameleoonException[\"EventSourceInitialization\"] = \"EventSourceInitialization\";\n KameleoonException[\"FeatureFlagConfigurationNotFound\"] = \"FeatureFlagConfigurationNotFound\";\n KameleoonException[\"FeatureFlagVariableNotFound\"] = \"FeatureFlagVariableNotFound\";\n KameleoonException[\"FeatureFlagVariationNotFound\"] = \"FeatureFlagVariationNotFound\";\n KameleoonException[\"FeatureFlagExperimentNotFound\"] = \"FeatureFlagExperimentNotFound\";\n KameleoonException[\"FeatureFlagEnvironmentDisabled\"] = \"FeatureFlagEnvironmentDisabled\";\n KameleoonException[\"VisitAmount\"] = \"VisitAmount\";\n KameleoonException[\"VisitorCodeMaxLength\"] = \"VisitorCodeMaxLength\";\n KameleoonException[\"VisitorCodeEmpty\"] = \"VisitorCodeEmpty\";\n KameleoonException[\"StorageInitialization\"] = \"StorageInitialization\";\n KameleoonException[\"StorageWrite\"] = \"StorageWrite\";\n KameleoonException[\"StorageRead\"] = \"StorageRead\";\n KameleoonException[\"StorageParse\"] = \"StorageParse\";\n KameleoonException[\"StorageEmpty\"] = \"StorageEmpty\";\n KameleoonException[\"ClientConfiguration\"] = \"ClientConfiguration\";\n KameleoonException[\"TargetingCondition\"] = \"TargetingCondition\";\n KameleoonException[\"AmongValuesCheck\"] = \"AmongValuesCheck\";\n KameleoonException[\"RangeCheck\"] = \"RangeCheck\";\n KameleoonException[\"Initialization\"] = \"Initialization\";\n KameleoonException[\"JSONParse\"] = \"JSONParse\";\n KameleoonException[\"NumberParse\"] = \"NumberParse\";\n KameleoonException[\"VersionParse\"] = \"VersionParse\";\n KameleoonException[\"CookieParse\"] = \"CookieParse\";\n KameleoonException[\"SemanticVersionParse\"] = \"SemanticVersionParse\";\n KameleoonException[\"RemoteData\"] = \"RemoteData\";\n KameleoonException[\"MaximumRetriesReached\"] = \"MaximumRetriesReached\";\n})(KameleoonException || (KameleoonException = {}));\n\nconst ERROR_MESSAGES = {\n [KameleoonException.CookieParse]: (reason) => `Couldn't parse cookie string: ${reason}`,\n [KameleoonException.JSONParse]: (err) => `Couldn't parse JSON variable: ${err}`,\n [KameleoonException.NumberParse]: (value) => `It's not possible to parse value ${value} to Number`,\n [KameleoonException.VersionParse]: (value) => `It's not possible to parse a version value ${value} to Number, version should be in format x.x`,\n [KameleoonException.SemanticVersionParse]: (value) => `It's not possible to parse a version value ${value} to Number, version should be in format x.x.x`,\n [KameleoonException.Initialization]: () => \"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods\",\n [KameleoonException.Credentials]: () => 'KameleoonClient can not be created without credentials',\n [KameleoonException.StorageInitialization]: () => \"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed\",\n [KameleoonException.EventSourceInitialization]: () => \"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed\",\n [KameleoonException.FeatureFlagConfigurationNotFound]: (featureKey) => `No feature flag with key ${featureKey} was found.`,\n [KameleoonException.FeatureFlagEnvironmentDisabled]: (featureKey, environment) => `Feature flag with key ${featureKey} is disabled in ${environment} environment.`,\n [KameleoonException.FeatureFlagVariableNotFound]: (variableKey, visitorCode) => `No feature flag variable with key ${variableKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.FeatureFlagVariationNotFound]: (variationKey, visitorCode) => `No feature flag variation with key ${variationKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.FeatureFlagExperimentNotFound]: (experimentId, visitorCode) => `No feature flag experiment with id ${experimentId} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.VisitAmount]: () => 'Visit amount must be a number between 1 and 25',\n [KameleoonException.VisitorCodeMaxLength]: () => 'Visitor code can not be more than 255 characters long',\n [KameleoonException.VisitorCodeEmpty]: () => 'Visitor code can not be empty',\n [KameleoonException.StorageWrite]: (err) => `Couldn't update storage for kameleoonClient: ${err}`,\n [KameleoonException.StorageRead]: (key) => `No data found in storage under ${key} key`,\n [KameleoonException.StorageEmpty]: () => 'No data found in storage',\n [KameleoonException.StorageParse]: (err, key) => `Couldn't parse ${key} storage data, the data may be corrupted. Error: ${err}`,\n [KameleoonException.ClientConfiguration]: (err) => `Couldn't retrieve client configuration from Kameleoon Api. Error: ${err}`,\n [KameleoonException.TargetingCondition]: (targetingType) => `${targetingType} targeting condition is not yet supported.`,\n [KameleoonException.AmongValuesCheck]: (err, value) => `Couldn't parse value \"${value}\": ${err}`,\n [KameleoonException.RangeCheck]: (value) => `Couldn't parse value \"${value}\" as a range, value should be in format [x: number, y: number]`,\n [KameleoonException.RemoteData]: (err) => `Couldn't retrieve data from Kameleoon server. Error: ${err}`,\n [KameleoonException.MaximumRetriesReached]: (err) => `Maximum retries reached, request failed. Reason: ${err}`,\n};\n\nfunction exhaustCheck(option) {\n throw new Error(`Reaching an impossible state because of ${option}`);\n}\n\n/**\n * @class\n * KameleoonError - extends standard `Error` by adding custom `type` property with the type of `KameleoonException`\n * */\nclass KameleoonError extends Error {\n constructor(type, secondParam, thirdParam) {\n super(`Error: ${type}`);\n this.name = 'KameleoonError';\n this.errorType = type;\n switch (type) {\n case KameleoonException.Initialization:\n case KameleoonException.Credentials:\n case KameleoonException.VisitorCodeMaxLength:\n case KameleoonException.VisitorCodeEmpty:\n case KameleoonException.StorageInitialization:\n case KameleoonException.VisitAmount:\n case KameleoonException.EventSourceInitialization:\n case KameleoonException.StorageEmpty:\n this.message = ERROR_MESSAGES[type]();\n break;\n case KameleoonException.CookieParse:\n case KameleoonException.FeatureFlagConfigurationNotFound:\n case KameleoonException.NumberParse:\n case KameleoonException.ClientConfiguration:\n case KameleoonException.MaximumRetriesReached:\n case KameleoonException.RemoteData:\n case KameleoonException.VersionParse:\n case KameleoonException.SemanticVersionParse:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.FeatureFlagExperimentNotFound:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam);\n break;\n case KameleoonException.FeatureFlagVariationNotFound:\n case KameleoonException.FeatureFlagVariableNotFound:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam);\n break;\n case KameleoonException.FeatureFlagEnvironmentDisabled:\n if (thirdParam !== undefined) {\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam);\n }\n else {\n this.message = secondParam;\n }\n break;\n case KameleoonException.StorageWrite:\n case KameleoonException.JSONParse:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.StorageRead:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.StorageParse:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam);\n break;\n case KameleoonException.TargetingCondition:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.AmongValuesCheck:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam);\n break;\n case KameleoonException.RangeCheck:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n default:\n exhaustCheck(type);\n }\n }\n get type() {\n return this.errorType;\n }\n}\n\nvar UrlType;\n(function (UrlType) {\n UrlType[\"DataApi\"] = \"dataApi\";\n UrlType[\"Events\"] = \"events\";\n UrlType[\"ClientConfiguration\"] = \"clientConfiguration\";\n})(UrlType || (UrlType = {}));\nvar HttpMethod;\n(function (HttpMethod) {\n HttpMethod[\"Get\"] = \"GET\";\n HttpMethod[\"Post\"] = \"POST\";\n})(HttpMethod || (HttpMethod = {}));\nvar DataApiQuery;\n(function (DataApiQuery) {\n DataApiQuery[DataApiQuery[\"VisitEvent\"] = 0] = \"VisitEvent\";\n DataApiQuery[DataApiQuery[\"VisitData\"] = 1] = \"VisitData\";\n DataApiQuery[DataApiQuery[\"DataMap\"] = 2] = \"DataMap\";\n})(DataApiQuery || (DataApiQuery = {}));\n/**\n * @enum `RequestType` - an enum of available request types\n * */\nvar RequestType;\n(function (RequestType) {\n RequestType[\"Configuration\"] = \"configuration\";\n RequestType[\"Tracking\"] = \"tracking\";\n RequestType[\"RemoteData\"] = \"remoteData\";\n})(RequestType || (RequestType = {}));\n\nconst NUMBER_OF_RETRIES = 1;\nvar Header;\n(function (Header) {\n Header[\"UserAgent\"] = \"User-Agent\";\n Header[\"ContentType\"] = \"Content-Type\";\n Header[\"SdkVersion\"] = \"X-Kameleoon-SDK-Version\";\n Header[\"SdkType\"] = \"X-Kameleoon-SDK-Type\";\n Header[\"Authorization\"] = \"Authorization\";\n Header[\"AcceptEncoding\"] = \"Accept-Encoding\";\n Header[\"IfModifiedSince\"] = \"If-Modified-Since\";\n Header[\"LastModified\"] = \"Last-Modified\";\n})(Header || (Header = {}));\nconst UrlEventType = {\n CustomData: 'eventType=customData',\n StaticData: 'eventType=staticData',\n Page: 'eventType=page',\n Conversion: 'eventType=conversion',\n Activity: 'eventType=activity',\n Experiment: 'eventType=experiment',\n Geolocation: 'eventType=geolocation',\n TargetingSegment: 'eventType=targetingSegment',\n};\nconst UrlParameter = {\n Title: '&title=',\n ReferrersIndices: '&referrersIndices=',\n Negative: '&negative=',\n Revenue: '&revenue=',\n Overwrite: '&overwrite=',\n Index: '&index=',\n BrowserIndex: '&browserIndex=',\n BrowserVersion: '&browserVersion=',\n Href: '&href=',\n DeviceType: '&deviceType=',\n GoalId: '&goalId=',\n VisitorCode: '&visitorCode=',\n VariationId: '&variationId=',\n Ts: '&ts=',\n Key: '&key=',\n SdkName: '&sdkName=',\n SdkVersion: '&sdkVersion=',\n ValuesCountMap: '&valuesCountMap=',\n Nonce: '&nonce=',\n Id: '&id=',\n CustomData: '&customData=',\n CurrentVisit: '&currentVisit=',\n MaxNumberPreviousVisits: '&maxNumberPreviousVisits=',\n Os: '&os=',\n OsIndex: '&osIndex=',\n Country: '&country=',\n City: '&city=',\n Region: '&region=',\n Latitude: '&latitude=',\n Longitude: '&longitude=',\n PostalCode: '&postalCode=',\n Conversion: '&conversion=',\n StaticData: '&staticData=',\n Geolocation: '&geolocation=',\n Page: '&page=',\n Experiment: '&experiment=',\n Browser: '&browser=',\n MappingIdentifier: '&mappingIdentifier=',\n MappingValue: '&mappingValue=',\n Kcs: '&kcs=',\n Personalization: '&personalization=',\n UserAgent: '&userAgent=',\n BodyUa: '&bodyUa=',\n Cbs: '&cbs=',\n Metadata: '&metadata=',\n VisitNumber: '&visitNumber=',\n TimeSincePreviousVisit: '&timeSincePreviousVisit=',\n};\nconst UrlFirstParameter = {\n Environment: '?environment=',\n Ts: '?ts='};\nconst UrlQuery = {\n Sse: 'sse?siteCode=',\n Map: 'map?siteCode=',\n Events: 'events?siteCode=',\n Visitor: 'visitor?siteCode=',\n};\nconst UrlTracking = {\n Visit: 'visit/',\n Map: 'map/',\n};\nconst DEFAULT_DOMAINS = {\n [UrlType.DataApi]: 'data.kameleoon.io',\n [UrlType.Events]: 'events.kameleoon.eu',\n [UrlType.ClientConfiguration]: 'sdk-config.kameleoon.eu',\n};\n\n/**\n * Enumeration of log levels.\n */\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"NONE\"] = 0] = \"NONE\";\n LogLevel[LogLevel[\"ERROR\"] = 1] = \"ERROR\";\n LogLevel[LogLevel[\"WARNING\"] = 2] = \"WARNING\";\n LogLevel[LogLevel[\"INFO\"] = 3] = \"INFO\";\n LogLevel[LogLevel[\"DEBUG\"] = 4] = \"DEBUG\";\n})(LogLevel || (LogLevel = {}));\n/**\n * Mapping of log levels to their string representations.\n */\nconst LOG_LEVEL_NAMES = {\n [LogLevel.NONE]: 'NONE',\n [LogLevel.ERROR]: 'ERROR',\n [LogLevel.WARNING]: 'WARNING',\n [LogLevel.INFO]: 'INFO',\n [LogLevel.DEBUG]: 'DEBUG',\n};\n\n/**\n * A simple implementation of a logger that prints log messages to the console. This logger\n * implements the {@code IExternalLogger} interface.\n */\nclass DefaultLogger {\n /**\n * @method log - logs a message at the specified log level.\n *\n * @param {LogLevel} level - the log level\n * @param {string} message - the log message\n */\n log(level, message) {\n switch (level) {\n case LogLevel.DEBUG:\n console.debug(message);\n break;\n case LogLevel.INFO:\n console.info(message);\n break;\n case LogLevel.WARNING:\n console.warn(message);\n break;\n case LogLevel.ERROR:\n console.error(message);\n break;\n }\n }\n}\n\nconst replacer = (key, value) => {\n if (key === 'credentials') {\n return {\n clientId: `****`,\n clientSecret: `****`,\n };\n }\n if (value instanceof Map) {\n return Array.from(value.entries());\n }\n return value;\n};\nfunction template(strings, keys) {\n let res = '';\n if (keys) {\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n if (typeof key === 'object') {\n try {\n res += strings[i] + JSON.stringify(key, replacer);\n }\n catch (error) {\n res += strings[i] + \"{object}\";\n }\n }\n else if (typeof key === 'string') {\n res += strings[i] + \"'\" + key + \"'\";\n }\n else {\n res += strings[i] + key;\n }\n }\n }\n res += strings[strings.length - 1];\n return res;\n}\nclass KameleoonLogger {\n static setLogger(logger) {\n KameleoonLogger.logger = logger;\n }\n static setLogLevel(logLevel) {\n KameleoonLogger.logLevel = logLevel;\n }\n static log({ level, strings, keys }) {\n if (!KameleoonLogger.checkLevel(level))\n return;\n let message;\n if (typeof strings === 'string') {\n message = strings;\n }\n else if (typeof strings === 'function') {\n try {\n message = strings();\n }\n catch (error) {\n message = 'Failed to log message';\n }\n }\n else {\n message = template(strings, keys);\n }\n KameleoonLogger.writeMessage(level, message);\n }\n static info(strings, ...keys) {\n KameleoonLogger.log({ level: LogLevel.INFO, strings, keys });\n }\n static error(strings, ...keys) {\n KameleoonLogger.log({ level: LogLevel.ERROR, strings, keys });\n }\n static warning(strings, ...keys) {\n KameleoonLogger.log({ level: LogLevel.WARNING, strings, keys });\n }\n static debug(strings, ...keys) {\n KameleoonLogger.log({ level: LogLevel.DEBUG, strings, keys });\n }\n static checkLevel(level) {\n return level <= KameleoonLogger.logLevel && level !== LogLevel.NONE;\n }\n static writeMessage(level, message) {\n KameleoonLogger.logger.log(level, `Kameleoon [${LOG_LEVEL_NAMES[level]}]: ${message}`);\n }\n}\nKameleoonLogger.logger = new DefaultLogger();\nKameleoonLogger.logLevel = LogLevel.WARNING;\n\nclass Requester {\n constructor({ urlProvider, packageInfo, externalRequester, requestTimeout, trackRetryDelay, useAbortController, }) {\n KameleoonLogger.debug `CALL: new Requester(urlProvider, packageInfo: ${packageInfo}, externalRequester, requestTimeout: ${requestTimeout}, trackRetryDelay: ${trackRetryDelay}, useAbortController: ${useAbortController})`;\n this.urlProvider = urlProvider;\n this.useAbortController = useAbortController;\n this.externalRequester = externalRequester;\n this.trackRetryDelay = trackRetryDelay;\n this.packageInfo = packageInfo;\n this.timeout = requestTimeout;\n KameleoonLogger.debug `RETURN: new Requester(urlProvider, packageInfo: ${packageInfo}, externalRequester, requestTimeout: ${requestTimeout}, trackRetryDelay: ${trackRetryDelay}, useAbortController: ${useAbortController})`;\n }\n getClientConfiguration(timeStamp, modifiedSince) {\n return __awaiter(this, void 0, void 0, function* () {\n const requestUrl = this.urlProvider.getClientConfigurationUrl(timeStamp);\n let headers = Object.assign({ [Header.SdkType]: this.packageInfo.type.toLowerCase(), [Header.SdkVersion]: this.packageInfo.version }, (modifiedSince && { [Header.IfModifiedSince]: modifiedSince }));\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n try {\n let responseInfo = { message: '' };\n KameleoonLogger.debug `Running configuration request Method: ${HttpMethod.Get}, Url: ${requestUrl}, Headers: ${headers}, with retry limit ${requests}`;\n for (let i = 0; i < requests; i++) {\n const response = yield this.sendRequest({\n url: requestUrl,\n requestType: RequestType.Configuration,\n retryCount: i,\n parameters: {\n method: HttpMethod.Get,\n headers,\n },\n });\n if (response.ok) {\n const data = yield response.json();\n this.logReceivedConfigurationResponse(response.status, requestUrl, headers);\n const lastModified = this.getLastModifiedHeader(response);\n const configurationData = data;\n return buildExports.Ok({\n configuration: configurationData,\n lastModified: lastModified,\n });\n }\n if (response.status === 304) {\n this.logReceivedConfigurationResponse(response.status, requestUrl, headers);\n return buildExports.Ok({});\n }\n if (i === NUMBER_OF_RETRIES) {\n if (response.text) {\n const text = yield response.text();\n responseInfo = JSON.parse(text);\n }\n KameleoonLogger.error `Failed to get configuration response ${{\n status: response.status,\n message: responseInfo.message,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}, Headers: ${headers}`;\n }\n else {\n yield this.logRequestError({\n logLevel: LogLevel.WARNING,\n message: 'Failed to get configuration response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n }\n }\n return buildExports.Err(new KameleoonError(KameleoonException.MaximumRetriesReached, responseInfo.message));\n }\n catch (err) {\n yield this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get configuration response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n headers,\n });\n return buildExports.Err(new KameleoonError(KameleoonException.ClientConfiguration, err));\n }\n });\n }\n getRemoteData(key) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const requestUrl = this.urlProvider.getRemoteDataUrl(key);\n KameleoonLogger.debug `Running remote data request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n try {\n const response = yield this.sendRequest({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n parameters: {\n method: HttpMethod.Get,\n },\n });\n if (!response.ok) {\n yield this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get remote data response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n if (response.text) {\n const text = yield response.text();\n const message = (_a = JSON.parse(text)) === null || _a === void 0 ? void 0 : _a.message;\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, message));\n }\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, 'Unknown Reason - no `text()` was found for a response'));\n }\n const data = yield response.json();\n KameleoonLogger.debug `Received remote data response: ${{\n status: response.status,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n return buildExports.Ok(data);\n }\n catch (err) {\n yield this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get remote data response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n });\n }\n getVisitorData({ visitorCode, filters, isMappingIdentifier, }) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const requestUrl = this.urlProvider.getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n });\n KameleoonLogger.debug `Running visitor data request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n try {\n const response = yield this.sendRequest({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n parameters: {\n method: HttpMethod.Get,\n },\n });\n if (!response.ok) {\n yield this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get visitor data response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n if (typeof response.text === 'function') {\n const text = yield response.text();\n if (text) {\n const message = (_a = JSON.parse(text)) === null || _a === void 0 ? void 0 : _a.message;\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, message));\n }\n }\n if (response.status) {\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, `No error message. Error status: ${response.status}`));\n }\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, 'Unknown Reason - no text message or error status was found for a response'));\n }\n const data = yield response.json();\n KameleoonLogger.debug `Received visitor data response: ${{\n status: response.status,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n return buildExports.Ok(data);\n }\n catch (err) {\n yield this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get visitor data response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n });\n }\n track(body, isBodyUserAgent) {\n return __awaiter(this, void 0, void 0, function* () {\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n const url = this.urlProvider.getTrackingUrl(isBodyUserAgent);\n KameleoonLogger.debug `Running tracking request Method: ${HttpMethod.Post}, Url: ${url}, Body: ${body}, with retry limit ${requests}, retry delay ${this.trackRetryDelay} ms`;\n for (let i = 0; i < requests; i++) {\n let response;\n try {\n response = yield this.sendRequest({\n url,\n retryCount: i,\n requestType: RequestType.Tracking,\n parameters: {\n body,\n method: HttpMethod.Post,\n headers: {\n [Header.ContentType]: '*/*',\n },\n },\n });\n if (response.ok) {\n KameleoonLogger.debug `Received tracking response: ${{\n status: response.status,\n }} for request Method: ${HttpMethod.Post}, Url: ${url}, Body: ${body}`;\n return buildExports.Ok();\n }\n yield this.logRequestError({\n logLevel: i == NUMBER_OF_RETRIES ? LogLevel.ERROR : LogLevel.WARNING,\n message: 'Failed to get tracking response',\n response: response,\n method: HttpMethod.Post,\n url,\n });\n }\n catch (error) {\n yield this.logRequestError({\n logLevel: i == NUMBER_OF_RETRIES ? LogLevel.ERROR : LogLevel.WARNING,\n message: 'Failed to get tracking response',\n error,\n method: HttpMethod.Post,\n url,\n });\n }\n if (i < requests) {\n yield new Promise((resolve) => setTimeout(resolve, this.trackRetryDelay));\n }\n }\n return buildExports.Err();\n });\n }\n sendRequest({ url, requestType, retryCount, parameters, }) {\n return __awaiter(this, void 0, void 0, function* () {\n let response;\n if (this.useAbortController) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n response = yield this.externalRequester.sendRequest({\n url,\n retryCount: retryCount,\n requestType,\n parameters: Object.assign(Object.assign({}, parameters), { signal: controller.signal }),\n });\n clearTimeout(timeoutId);\n }\n else {\n response = yield this.externalRequester.sendRequest({\n url,\n retryCount: retryCount,\n requestType,\n parameters: parameters,\n });\n }\n return response;\n });\n }\n logRequestError({ logLevel, message, error, method, url, response, headers, }) {\n return __awaiter(this, void 0, void 0, function* () {\n if (error) {\n let errorText = 'Unknown error';\n if (error instanceof Error) {\n errorText = error.message;\n }\n KameleoonLogger.log({\n level: logLevel,\n strings: () => `${message} with error: ${errorText} for request Method: ${method}, Url: ${url}`,\n });\n }\n else if (response) {\n if (KameleoonLogger.checkLevel(logLevel)) {\n const logResponse = yield this.parseResponse(response);\n KameleoonLogger.log({\n level: logLevel,\n strings: () => `${message} response: Status: '${logResponse.status}' Message: '${logResponse.message}' for request Method: ${method}, Url: '${url}'` +\n (headers ? `, Headers: ${headers}` : ''),\n });\n }\n }\n });\n }\n parseResponse(response) {\n return __awaiter(this, void 0, void 0, function* () {\n let message = '';\n try {\n if (typeof response.text === 'function') {\n const text = yield response.text();\n if (text) {\n message = text;\n }\n }\n }\n catch (error) { }\n return {\n status: response.status,\n message: message,\n };\n });\n }\n getLastModifiedHeader(response) {\n if (response.headers) {\n const targetKey = Header.LastModified.toLowerCase();\n for (const [key, value] of response.headers) {\n if (key.toLowerCase() === targetKey) {\n return value;\n }\n }\n }\n return undefined;\n }\n logReceivedConfigurationResponse(responseStatus, requestUrl, headers) {\n KameleoonLogger.debug `Received configuration response: ${{\n status: responseStatus,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}, Headers: ${headers}`;\n }\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of environment, passed as an argument to KameleoonClient `configuration`s `environment` field\n * */\nvar Environment;\n(function (Environment) {\n Environment[\"Production\"] = \"production\";\n Environment[\"Staging\"] = \"staging\";\n Environment[\"Development\"] = \"development\";\n})(Environment || (Environment = {}));\n\nclass UrlProvider {\n constructor() {\n this.ready = false;\n this.isCustomDomain = false;\n this.domains = DEFAULT_DOMAINS;\n }\n initialize({ domain, siteCode, packageInfo, environment, }) {\n this.siteCode = siteCode;\n this.environment = environment;\n this.packageInfo = packageInfo;\n this.ready = true;\n this.setDomains(domain);\n }\n set dataApiDomain(domain) {\n if (!this.isCustomDomain) {\n this.domains[UrlType.DataApi] = domain;\n return;\n }\n const subDomain = domain.split('.')[0];\n const currentDomain = this.domains[UrlType.DataApi];\n this.domains[UrlType.DataApi] = currentDomain.replace(/^[^.]+/, subDomain);\n }\n get dataApiDomain() {\n return this.domains[UrlType.DataApi];\n }\n getClientConfigurationUrl(timeStamp) {\n this.isInitialized();\n const baseUrl = `https://${this.domains[UrlType.ClientConfiguration]}/v3/`;\n const environmentParam = this.environment === Environment.Production\n ? ''\n : UrlFirstParameter.Environment + encodeURIComponent(this.environment);\n let timeStampParam = '';\n if (timeStamp) {\n if (environmentParam) {\n timeStampParam = UrlParameter.Ts + timeStamp;\n }\n else {\n timeStampParam = UrlFirstParameter.Ts + timeStamp;\n }\n }\n return baseUrl + this.siteCode + environmentParam + timeStampParam;\n }\n getEventSourceUrl() {\n this.isInitialized();\n return `https://${this.domains[UrlType.Events]}:8110/${UrlQuery.Sse}${this.siteCode}`;\n }\n getRemoteDataUrl(key) {\n this.isInitialized();\n return (this.getDataApiUrl(DataApiQuery.DataMap) +\n this.siteCode +\n UrlParameter.Key +\n encodeURI(key));\n }\n getVisitorDataUrl({ visitorCode, filters, isMappingIdentifier, }) {\n this.isInitialized();\n const { customData, previousVisitAmount, currentVisit, conversions, geolocation, experiments, pageViews, device, browser, operatingSystem, kcs, personalization, visitorCode: visitorCodeFilter, cbs, } = filters;\n const identifierParameter = isMappingIdentifier\n ? UrlParameter.MappingValue\n : UrlParameter.VisitorCode;\n const customDataParameter = customData || visitorCodeFilter ? UrlParameter.CustomData + true : '';\n const conversionsParameter = conversions\n ? UrlParameter.Conversion + true\n : '';\n const geolocationParameter = geolocation\n ? UrlParameter.Geolocation + true\n : '';\n const experimentsParameter = experiments\n ? UrlParameter.Experiment + true\n : '';\n const pageViewsParameter = pageViews ? UrlParameter.Page + true : '';\n const staticDataParameter = UrlParameter.StaticData + true;\n const currentVisitParameter = currentVisit\n ? UrlParameter.CurrentVisit + true\n : '';\n const kcsParameter = kcs ? UrlParameter.Kcs + true : '';\n const personalizationParameter = personalization\n ? UrlParameter.Personalization + true\n : '';\n const previousVisitAmountParam = typeof previousVisitAmount !== 'number'\n ? UrlParameter.MaxNumberPreviousVisits + 1\n : UrlParameter.MaxNumberPreviousVisits + previousVisitAmount;\n const cbsParameter = cbs ? UrlParameter.Cbs + true : '';\n return (this.getDataApiUrl(DataApiQuery.VisitData) +\n this.siteCode +\n identifierParameter +\n visitorCode +\n previousVisitAmountParam +\n customDataParameter +\n conversionsParameter +\n geolocationParameter +\n experimentsParameter +\n pageViewsParameter +\n staticDataParameter +\n currentVisitParameter +\n kcsParameter +\n personalizationParameter +\n cbsParameter);\n }\n getTrackingUrl(isBodyUserAgent) {\n this.isInitialized();\n const { type, version } = this.packageInfo;\n let url = this.getDataApiUrl(DataApiQuery.VisitEvent) +\n this.siteCode +\n UrlParameter.SdkName +\n type.toLowerCase() +\n UrlParameter.SdkVersion +\n version;\n if (isBodyUserAgent) {\n url += UrlParameter.BodyUa + true;\n }\n return url;\n }\n isInitialized() {\n if (!this.ready) {\n throw new Error('UrlProvider is not initialized');\n }\n }\n getDataApiUrl(query) {\n if (!this.domains[UrlType.DataApi]) {\n throw new Error('Data API domain is not set');\n }\n const domain = `https://${this.domains[UrlType.DataApi]}`;\n switch (query) {\n case DataApiQuery.VisitEvent:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Events}`;\n case DataApiQuery.VisitData:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Visitor}`;\n case DataApiQuery.DataMap:\n return `${domain}/${UrlTracking.Map + UrlQuery.Map}`;\n }\n }\n setDomains(domain) {\n if (!domain) {\n return;\n }\n this.isCustomDomain = true;\n this.domains[UrlType.DataApi] = 'data.' + domain;\n this.domains[UrlType.Events] = 'events.' + domain;\n this.domains[UrlType.ClientConfiguration] = 'sdk-config.' + domain;\n }\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of feature variable types\n * */\nvar VariableType;\n(function (VariableType) {\n VariableType[\"BOOLEAN\"] = \"BOOLEAN\";\n VariableType[\"NUMBER\"] = \"NUMBER\";\n VariableType[\"STRING\"] = \"STRING\";\n VariableType[\"JSON\"] = \"JSON\";\n VariableType[\"JS\"] = \"JS\";\n VariableType[\"CSS\"] = \"CSS\";\n})(VariableType || (VariableType = {}));\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for data status\n * */\nvar TrackingStatus;\n(function (TrackingStatus) {\n TrackingStatus[\"Sent\"] = \"sent\";\n TrackingStatus[\"Unsent\"] = \"unsent\";\n TrackingStatus[\"Pending\"] = \"pending\";\n})(TrackingStatus || (TrackingStatus = {}));\n/**\n * @readonly\n * @enum {number} a helper Enum for getting milliseconds for a second/minute/hour/day/week/month.\n * Month is considered as an average of 30 days\n * */\nvar Milliseconds;\n(function (Milliseconds) {\n Milliseconds[Milliseconds[\"Second\"] = 1000] = \"Second\";\n Milliseconds[Milliseconds[\"Minute\"] = 60000] = \"Minute\";\n Milliseconds[Milliseconds[\"Hour\"] = 3600000] = \"Hour\";\n Milliseconds[Milliseconds[\"Day\"] = 86400000] = \"Day\";\n Milliseconds[Milliseconds[\"Week\"] = 604800000] = \"Week\";\n Milliseconds[Milliseconds[\"Month\"] = 2592000000] = \"Month\";\n})(Milliseconds || (Milliseconds = {}));\n\n/**\n * @class\n * CacheManager - a class for managing cache\n */\nclass CacheManager {\n /**\n * @param {number} cleanupTimeout - timeout for cleaning cache in seconds\n * generic type `T` is a type of data that will be stored in cache\n * @example\n * ```typescript\n * const cacheManager = new CacheManager<number>(60);\n * ```\n */\n constructor(cleanupTimeout) {\n this.cacheMap = new Map();\n this.intervalId = null;\n this.cleanupTimeout = cleanupTimeout * Milliseconds.Second;\n }\n add({ key, data, lifetime }) {\n KameleoonLogger.debug `CALL: CacheManager.add(key: ${key}, data: ${data}, lifetime: ${lifetime})`;\n if (this.intervalId === null) {\n this.activate();\n }\n const expirationTime = lifetime * Milliseconds.Second;\n const cacheItem = {\n data,\n expirationTime: Date.now() + expirationTime,\n };\n this.cacheMap.set(key, cacheItem);\n KameleoonLogger.debug `RETURN: CacheManager.add(key: ${key}, data: ${data}, lifetime: ${lifetime})`;\n }\n getAliveItem(key) {\n KameleoonLogger.debug `CALL: CacheManager.getAliveItem(key: ${key})`;\n const cacheItem = this.cacheMap.get(key);\n if (cacheItem && cacheItem.expirationTime >= Date.now()) {\n const data = cacheItem.data;\n KameleoonLogger.debug `RETURN: CacheManager.getAliveItem(key: ${key}) -> (item: ${data})`;\n return data;\n }\n cacheItem && this.cacheMap.delete(key);\n KameleoonLogger.debug `RETURN: CacheManager.getAliveItem(key: ${key}) -> (item: null)`;\n return null;\n }\n activate() {\n this.intervalId = setInterval(() => {\n const now = Date.now();\n for (const [key, item] of this.cacheMap) {\n if (item.expirationTime < now) {\n this.cacheMap.delete(key);\n }\n }\n if (!this.cacheMap.size) {\n this.cleanupInterval();\n }\n }, this.cleanupTimeout);\n }\n cleanupInterval() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n\nvar UpdateType;\n(function (UpdateType) {\n UpdateType[UpdateType[\"Polling\"] = 0] = \"Polling\";\n UpdateType[UpdateType[\"RealTime\"] = 1] = \"RealTime\";\n})(UpdateType || (UpdateType = {}));\nvar RuleType;\n(function (RuleType) {\n RuleType[\"TARGETED_DELIVERY\"] = \"TARGETED_DELIVERY\";\n RuleType[\"EXPERIMENTATION\"] = \"EXPERIMENTATION\";\n})(RuleType || (RuleType = {}));\nvar FeatureFlagSdkLanguageType;\n(function (FeatureFlagSdkLanguageType) {\n FeatureFlagSdkLanguageType[\"ANDROID\"] = \"ANDROID\";\n FeatureFlagSdkLanguageType[\"SWIFT\"] = \"SWIFT\";\n FeatureFlagSdkLanguageType[\"JAVA\"] = \"JAVA\";\n FeatureFlagSdkLanguageType[\"CSHARP\"] = \"CSHARP\";\n FeatureFlagSdkLanguageType[\"NODEJS\"] = \"NODEJS\";\n FeatureFlagSdkLanguageType[\"PHP\"] = \"PHP\";\n FeatureFlagSdkLanguageType[\"RUBY\"] = \"RUBY\";\n FeatureFlagSdkLanguageType[\"GO\"] = \"GO\";\n FeatureFlagSdkLanguageType[\"FLUTTER\"] = \"FLUTTER\";\n FeatureFlagSdkLanguageType[\"REACTJS\"] = \"REACTJS\";\n})(FeatureFlagSdkLanguageType || (FeatureFlagSdkLanguageType = {}));\nvar FeatureStatus;\n(function (FeatureStatus) {\n FeatureStatus[\"ACTIVATED\"] = \"ACTIVATED\";\n FeatureStatus[\"DEACTIVATED\"] = \"DEACTIVATED\";\n FeatureStatus[\"SCHEDULED\"] = \"SCHEDULED\";\n})(FeatureStatus || (FeatureStatus = {}));\nvar CustomDataScope;\n(function (CustomDataScope) {\n CustomDataScope[\"Visit\"] = \"VISIT\";\n CustomDataScope[\"Visitor\"] = \"VISITOR\";\n CustomDataScope[\"Page\"] = \"Page\";\n})(CustomDataScope || (CustomDataScope = {}));\nvar ConsentType;\n(function (ConsentType) {\n ConsentType[\"Required\"] = \"REQUIRED\";\n ConsentType[\"NotRequired\"] = \"NOT_REQUIRED\";\n})(ConsentType || (ConsentType = {}));\nvar ConsentBlockingBehaviour;\n(function (ConsentBlockingBehaviour) {\n ConsentBlockingBehaviour[\"PartiallyBlocked\"] = \"PARTIALLY_BLOCK\";\n ConsentBlockingBehaviour[\"CompletelyBlocked\"] = \"FULLY_BLOCK\";\n})(ConsentBlockingBehaviour || (ConsentBlockingBehaviour = {}));\n\nclass EventManager {\n addEventHandler(eventType, callback) {\n if (!this.eventHandlers) {\n this.eventHandlers = new Map();\n }\n this.eventHandlers.set(eventType, callback);\n }\n fireEvent(eventType, data) {\n var _a;\n const eventHandler = (_a = this.eventHandlers) === null || _a === void 0 ? void 0 : _a.get(eventType);\n if (eventHandler && data) {\n eventHandler(data);\n }\n }\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of event types\n * */\nvar EventType;\n(function (EventType) {\n EventType[\"Evaluation\"] = \"evaluation\";\n EventType[\"ConfigurationUpdate\"] = \"configurationUpdate\";\n})(EventType || (EventType = {}));\n\nconst DEFAULT_DATA_FILE_CONFIGURATION = {\n customData: [],\n featureFlags: [],\n configuration: {\n realTimeUpdate: false,\n consentType: ConsentType.NotRequired,\n dataApiDomain: 'data.kameleoon.io',\n consentOptOutBehavior: ConsentBlockingBehaviour.PartiallyBlocked,\n },\n};\n\nclass MEGroup {\n constructor(featureFlags) {\n this._featureFlags = featureFlags\n .slice()\n .sort((ff1, ff2) => ff1.id - ff2.id);\n }\n getFeatureFlagByHash(hash) {\n let idx = Math.floor(hash * this._featureFlags.length);\n idx = Math.min(idx, this._featureFlags.length - 1);\n return this._featureFlags[idx];\n }\n get featureFlags() {\n return this._featureFlags;\n }\n}\n\nclass ClientConfiguration {\n constructor({ updateInterval, urlProvider, storage, requester, dataManager, eventSource, externalVisitorCodeManager, eventManager, externalPackageInfo, defaultDataFile, }) {\n this.updateConfigurationIntervalId = null;\n this.updateType = UpdateType.Polling;\n this.configurationData = DEFAULT_DATA_FILE_CONFIGURATION;\n this.featureFlagsData = new Map();\n this.isTargetedDeliveryRule = null;\n this.segmentsData = null;\n this.holdoutData = null;\n this.meGroupsData = new Map();\n this.mappedRules = null;\n this.mappedExperiments = null;\n this.usedDefaultDataFile = false;\n this.blockingBehaviourMode = ConsentBlockingBehaviour.PartiallyBlocked;\n this.CACHE_REVALIDATE_PERIOD = 90 * Milliseconds.Minute;\n this.urlProvider = urlProvider;\n this.requester = requester;\n this.updateInterval = updateInterval;\n this.lastUpdate = new Date();\n this.storage = storage;\n this.dataManager = dataManager;\n this.eventManager = eventManager;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventSource = eventSource;\n this.externalPackageInfo = externalPackageInfo;\n this.defaultDataFile = defaultDataFile;\n }\n initialize() {\n return __awaiter(this, void 0, void 0, function* () {\n KameleoonLogger.debug('CALL: ClientConfiguration.initialize()');\n this.readStorageData();\n const shouldUpdate = this.checkShouldUpdate();\n if (shouldUpdate) {\n const updateResult = yield this.updateClientConfiguration();\n if (!updateResult.ok) {\n KameleoonLogger.error('Error occurred during client configuration update');\n return updateResult;\n }\n // --- Note ---\n // If update type is being toggled `initialize` will be called again\n // so we don't need to continue execution here\n const isUpdateTypeToggled = updateResult.data;\n if (isUpdateTypeToggled) {\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return buildExports.Ok();\n }\n }\n if (this.updateType === UpdateType.RealTime && !this.eventSource.isOpen) {\n this.handleRealTimeUpdates();\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return buildExports.Ok();\n }\n if (this.updateType === UpdateType.Polling) {\n this.handlePollingUpdates();\n }\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return buildExports.Ok();\n });\n }\n cleanupHandlers() {\n if (this.eventSource.isOpen) {\n this.eventSource.close();\n }\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n }\n handleRealTimeUpdates() {\n this.cleanupHandlers();\n const updateEventCallback = (timestamp) => {\n this.updateClientConfiguration(timestamp).then((updateResult) => {\n if (updateResult.ok) {\n this.eventManager.fireEvent(EventType.ConfigurationUpdate, {\n timestamp,\n });\n }\n });\n };\n this.eventSource.open(updateEventCallback);\n this.eventSource.onError((error) => {\n KameleoonLogger.error `Error occurred during real-time update: ${error}. Switching to polling updates while the connection is not restored.`;\n this.updateType = UpdateType.Polling;\n this.handlePollingUpdates();\n });\n }\n handlePollingUpdates() {\n // --- Note ---\n // If `initialize` is called again the interval will be cleared\n // so theoretically we will constantly defer config update\n // but `this.lastUpdate` with `checkShouldUpdate` will prevent that\n this.cleanupHandlers();\n // --- Note ---\n // Error Handling is for `setInterval` emergency cleanup\n try {\n const lastUpdateTime = this.lastUpdate.getTime();\n const now = Date.now();\n const timeToNextUpdate = Math.max(this.updateInterval - (now - lastUpdateTime), 0);\n setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n yield this.updateClientConfiguration();\n this.updateConfigurationIntervalId = setInterval(this.updateClientConfiguration.bind(this), this.updateInterval);\n }), timeToNextUpdate);\n }\n catch (err) {\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n throw err;\n }\n }\n get featureFlags() {\n return this.featureFlagsData;\n }\n get configuration() {\n return this.configurationData.configuration;\n }\n get segments() {\n if (this.segmentsData) {\n return this.segmentsData;\n }\n const segmentsData = new Map();\n this.featureFlagsData.forEach((flag) => {\n flag.rules.forEach((rule) => {\n if (rule.segment && !segmentsData.has(rule.segment.id.toString())) {\n segmentsData.set(rule.segment.id.toString(), rule.segment);\n }\n });\n });\n this.segmentsData = segmentsData;\n return segmentsData;\n }\n get ruleMap() {\n var _a;\n if ((_a = this.mappedRules) === null || _a === void 0 ? void 0 : _a.size) {\n return this.mappedRules;\n }\n const mappedRules = new Map();\n for (const featureFlag of this.featureFlags.values()) {\n for (const rule of featureFlag.rules) {\n const { id, experimentId, variationByExposition } = rule;\n const variationMap = new Map();\n variationByExposition.forEach(({ variationKey, variationId }) => {\n if (typeof variationId === 'number') {\n variationMap.set(variationKey, variationId);\n }\n });\n mappedRules.set(id, {\n featureId: featureFlag.id,\n experimentId,\n variations: variationMap,\n });\n }\n }\n this.mappedRules = mappedRules;\n return mappedRules;\n }\n get experimentMap() {\n var _a;\n if ((_a = this.mappedExperiments) === null || _a === void 0 ? void 0 : _a.size) {\n return this.mappedExperiments;\n }\n const mappedExperiments = new Map();\n for (const featureFlag of this.featureFlags.values()) {\n for (const rule of featureFlag.rules) {\n const { experimentId, variationByExposition } = rule;\n const variationMap = new Map();\n variationByExposition.forEach(({ variationKey, variationId }) => {\n if (typeof variationId === 'number') {\n variationMap.set(variationKey, variationId);\n }\n });\n mappedExperiments.set(experimentId, {\n type: rule.type,\n variations: variationMap,\n });\n }\n }\n this.mappedExperiments = mappedExperiments;\n return mappedExperiments;\n }\n get holdout() {\n return this.holdoutData;\n }\n get meGroups() {\n return this.meGroupsData;\n }\n get isConsentRequired() {\n return this.configuration.consentType === ConsentType.Required;\n }\n get consentBlockingBehaviour() {\n return this.blockingBehaviourMode;\n }\n get hasAnyTargetedDeliveryRule() {\n if (this.isTargetedDeliveryRule !== null) {\n return this.isTargetedDeliveryRule;\n }\n for (const featureFlag of this.featureFlags.values()) {\n if (featureFlag.environmentEnabled &&\n featureFlag.rules.some((rule) => rule.type === RuleType.TARGETED_DELIVERY)) {\n return true;\n }\n }\n return false;\n }\n checkShouldUpdate() {\n const { configuration } = this.configurationData;\n this.updateType = configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n if (!this.featureFlags.size) {\n return true;\n }\n const lastUpdateTime = this.lastUpdate.getTime();\n const updateWindowEdge = Date.now() - this.updateInterval;\n return lastUpdateTime < updateWindowEdge;\n }\n readStorageData() {\n var _a, _b, _c;\n KameleoonLogger.debug('CALL: ClientConfiguration.readStorageData()');\n const result = this.storage.read();\n if (result.ok) {\n let { data, lastUpdate, lastModified, requestTime } = result.data;\n let updateFeatureFlagsInfo = false;\n if (this.defaultDataFile) {\n try {\n const defaultDataFile = JSON.parse(this.defaultDataFile);\n this.defaultDataFile = undefined;\n this.usedDefaultDataFile = true;\n const localDateModified = (_b = (_a = data.dateModified) !== null && _a !== void 0 ? _a : requestTime) !== null && _b !== void 0 ? _b : -1;\n const defaultDateModified = (_c = defaultDataFile.dateModified) !== null && _c !== void 0 ? _c : 0;\n if (!requestTime || defaultDateModified > localDateModified) {\n data = defaultDataFile;\n updateFeatureFlagsInfo = true;\n }\n }\n catch (error) {\n KameleoonLogger.error `Error parsing default data file: ${String(error)}`;\n }\n }\n this.updateConfigurationData(data, updateFeatureFlagsInfo);\n this.lastUpdate = this.usedDefaultDataFile\n ? new Date(0)\n : new Date(Date.parse(lastUpdate));\n this.lastModified = lastModified;\n this.requestTime = requestTime;\n }\n KameleoonLogger.debug `RETURN: ClientConfiguration.readStorageData() -> (result: ${result.ok})`;\n }\n /**\n * Updates client configuration\n *\n * @param timeStamp - timestamp for real-time configuration update\n *\n * @returns `true` if current update type should be toggled (SSE/Polling)\n */\n updateClientConfiguration(timestamp) {\n return __awaiter(this, void 0, void 0, function* () {\n const currentTime = Date.now();\n if (this.usedDefaultDataFile) {\n this.updateClientConfigurationInBackground();\n return buildExports.Ok(false);\n }\n if (this.requestTime && !timestamp && !this.externalPackageInfo.isServer) {\n if (currentTime - this.requestTime <= this.CACHE_REVALIDATE_PERIOD) {\n this.updateClientConfigurationInBackground();\n return buildExports.Ok(false);\n }\n else {\n KameleoonLogger.debug `Cached configuration data has expired. Fetching fresh data.`;\n }\n }\n const clientConfigurationResult = yield this.requester.getClientConfiguration(timestamp, this.lastModified);\n return this.applyNewConfigurationDataFromResponse(clientConfigurationResult);\n });\n }\n updateClientConfigurationInBackground() {\n setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n const clientConfigurationResult = yield this.requester.getClientConfiguration(undefined, this.lastModified);\n yield this.applyNewConfigurationDataFromResponse(clientConfigurationResult);\n }), 0);\n }\n applyNewConfigurationDataFromResponse(clientConfigurationResult) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n this.requestTime = Date.now();\n if (!clientConfigurationResult.ok) {\n if (this.featureFlags.size) {\n KameleoonLogger.error('Error occurred while updating configuration. Existing configuration will be used as a fallback.');\n return buildExports.Ok(true);\n }\n return clientConfigurationResult;\n }\n if (clientConfigurationResult.data.configuration === undefined) {\n // If configuration is undefined, it means that the server returned 304 Not Modified\n // and we should not update the configuration, but need to update the lastUpdate in storage\n this.updateStorageData();\n return buildExports.Ok(false);\n }\n const clientConfigurationData = clientConfigurationResult.data.configuration;\n this.updateConfigurationData(clientConfigurationData, true);\n this.dataManager.clearTrees();\n (_a = this.mappedRules) === null || _a === void 0 ? void 0 : _a.clear();\n (_b = this.experimentMap) === null || _b === void 0 ? void 0 : _b.clear();\n this.isTargetedDeliveryRule = null;\n if (clientConfigurationResult.data.lastModified) {\n this.lastModified = clientConfigurationResult.data.lastModified;\n }\n const result = this.updateStorageData();\n if (!result.ok) {\n return result;\n }\n const updateType = clientConfigurationData.configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n const toggleUpdateType = updateType !== this.updateType;\n if (toggleUpdateType) {\n this.updateType = updateType;\n KameleoonLogger.info `Configuration update type was toggled to ${UpdateType[updateType]}`;\n yield this.initialize();\n }\n this.blockingBehaviourMode = this.consentBlockingBehaviourFromStr(clientConfigurationData.configuration.consentOptOutBehavior);\n return buildExports.Ok(toggleUpdateType);\n });\n }\n updateConfigurationData(data, updateFeatureFlagsInfo = true) {\n const { configuration, featureFlags, customData, holdout, segments, dateModified, } = data;\n let segmentsMap = segments\n ? new Map(segments.map((segment) => [segment.id.toString(), segment]))\n : null;\n let customDataIndexById = null;\n if (updateFeatureFlagsInfo) {\n if (customData === null || customData === void 0 ? void 0 : customData.length) {\n customDataIndexById = new Map();\n for (let data of customData) {\n if (data.id !== undefined) {\n customDataIndexById.set(data.id, data.index);\n }\n else {\n customDataIndexById = null;\n break;\n }\n }\n }\n }\n const featureFlagsMap = new Map();\n for (const featureFlag of featureFlags) {\n featureFlagsMap.set(featureFlag.featureKey, featureFlag);\n // configurationFeatureFlag data from storage not needed to be modified\n if (updateFeatureFlagsInfo) {\n this.updateFeatureFlagSegments(featureFlag, segmentsMap);\n this.updateFeatureFlagBucketingCustomDataId(featureFlag, customDataIndexById);\n }\n }\n this.featureFlagsData = featureFlagsMap;\n if (customData === null || customData === void 0 ? void 0 : customData.length) {\n this.dataManager.customDataIndexes = customData;\n }\n this.meGroupsData = this.makeMEGroups(featureFlags);\n this.holdoutData = holdout !== null && holdout !== void 0 ? holdout : null;\n this.configurationData = {\n configuration,\n customData,\n holdout,\n dateModified,\n };\n this.urlProvider.dataApiDomain = data.configuration.dataApiDomain;\n this.updateConsentRequired();\n this.segmentsData = segmentsMap;\n }\n updateFeatureFlagSegments(featureFlag, segmentsMap) {\n if (segmentsMap !== null) {\n featureFlag.rules.forEach((rule) => {\n var _a;\n const segmentId = rule.segmentId;\n rule.segment =\n segmentId != null\n ? (_a = segmentsMap.get(segmentId.toString())) !== null && _a !== void 0 ? _a : null\n : null;\n });\n }\n }\n updateFeatureFlagBucketingCustomDataId(featureFlag, customDataIndexById) {\n const bucketingCustomDataId = featureFlag.bucketingCustomDataId;\n if (bucketingCustomDataId != null && customDataIndexById) {\n featureFlag.bucketingCustomDataIndex = customDataIndexById.get(bucketingCustomDataId);\n }\n }\n makeMEGroups(featureFlags) {\n const meGroupLists = new Map();\n featureFlags.forEach((featureFlag) => {\n const groupName = featureFlag.mutuallyExclusiveGroup;\n if (groupName) {\n let meGroupList = meGroupLists.get(groupName);\n if (meGroupList) {\n meGroupList.push(featureFlag);\n }\n else {\n meGroupLists.set(groupName, [featureFlag]);\n }\n }\n });\n const meGroups = new Map();\n meGroupLists.forEach((featureFlags, groupName) => {\n meGroups.set(groupName, new MEGroup(featureFlags));\n });\n return meGroups;\n }\n updateStorageData() {\n this.lastUpdate = new Date();\n const configurationData = Object.assign(Object.assign({}, this.configurationData), { featureFlags: Array.from(this.featureFlags.values()), segments: this.segmentsData\n ? Array.from(this.segmentsData.values())\n : undefined });\n const data = {\n data: configurationData,\n lastUpdate: this.lastUpdate.toString(),\n lastModified: this.lastModified,\n requestTime: this.requestTime,\n };\n return this.storage.write(data);\n }\n updateConsentRequired() {\n // --- Note ---\n // According to GDPR policy we should set visitorCode if legal consent isn't required\n // or we have at least one Targeted Delivery rule in configuration\n this.visitorCodeManager.consentRequired =\n this.isConsentRequired && !this.hasAnyTargetedDeliveryRule;\n }\n consentBlockingBehaviourFromStr(str) {\n if (str === ConsentBlockingBehaviour.PartiallyBlocked ||\n str === ConsentBlockingBehaviour.CompletelyBlocked) {\n return str;\n }\n KameleoonLogger.error(`Unexpected consent blocking type '${str}'`);\n return ConsentBlockingBehaviour.PartiallyBlocked;\n }\n}\n\nfunction constructTypeMap(indexMap) {\n return Object.fromEntries(Object.entries(indexMap).map(([key, value]) => [value, key]));\n}\n\nvar KameleoonData;\n(function (KameleoonData) {\n KameleoonData[\"UniqueIdentifier\"] = \"uniqueIdentifier\";\n KameleoonData[\"CustomData\"] = \"customData\";\n KameleoonData[\"PageView\"] = \"pageView\";\n KameleoonData[\"GeolocationData\"] = \"geolocation\";\n KameleoonData[\"Browser\"] = \"browser\";\n KameleoonData[\"Conversion\"] = \"conversion\";\n KameleoonData[\"Cookie\"] = \"cookie\";\n KameleoonData[\"Device\"] = \"device\";\n KameleoonData[\"OperatingSystem\"] = \"operatingSystem\";\n KameleoonData[\"UserAgent\"] = \"userAgent\";\n KameleoonData[\"ApplicationVersion\"] = \"applicationVersion\";\n KameleoonData[\"VisitsData\"] = \"visitsData\";\n KameleoonData[\"KameleoonConversionScore\"] = \"kameleoonConversionScore\";\n KameleoonData[\"Personalization\"] = \"personalization\";\n KameleoonData[\"CBScores\"] = \"cbScores\";\n KameleoonData[\"TargetedSegment\"] = \"targetedSegment\";\n})(KameleoonData || (KameleoonData = {}));\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for device type\n * */\nvar DeviceType;\n(function (DeviceType) {\n DeviceType[\"Phone\"] = \"PHONE\";\n DeviceType[\"Tablet\"] = \"TABLET\";\n DeviceType[\"Desktop\"] = \"DESKTOP\";\n})(DeviceType || (DeviceType = {}));\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for operating system type\n * */\nvar OperatingSystemType;\n(function (OperatingSystemType) {\n OperatingSystemType[\"WindowsPhone\"] = \"WINDOWS_PHONE\";\n OperatingSystemType[\"Windows\"] = \"WINDOWS\";\n OperatingSystemType[\"Android\"] = \"ANDROID\";\n OperatingSystemType[\"Linux\"] = \"LINUX\";\n OperatingSystemType[\"Mac\"] = \"MAC\";\n OperatingSystemType[\"IOS\"] = \"IOS\";\n})(OperatingSystemType || (OperatingSystemType = {}));\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for browser type\n * */\nvar BrowserType;\n(function (BrowserType) {\n BrowserType[\"Chrome\"] = \"CHROME\";\n BrowserType[\"InternetExplorer\"] = \"IE\";\n BrowserType[\"Firefox\"] = \"FIREFOX\";\n BrowserType[\"Safari\"] = \"SAFARI\";\n BrowserType[\"Opera\"] = \"OPERA\";\n BrowserType[\"Other\"] = \"OTHER\";\n})(BrowserType || (BrowserType = {}));\nconst OperatingSystemIndexMap = {\n [OperatingSystemType.Windows]: 0,\n [OperatingSystemType.Mac]: 1,\n [OperatingSystemType.IOS]: 2,\n [OperatingSystemType.Linux]: 3,\n [OperatingSystemType.Android]: 4,\n [OperatingSystemType.WindowsPhone]: 5,\n};\nconst OperatingSystemTypeMap = constructTypeMap(OperatingSystemIndexMap);\nconst BrowserIndexMap = {\n [BrowserType.Chrome]: 0,\n [BrowserType.InternetExplorer]: 1,\n [BrowserType.Firefox]: 2,\n [BrowserType.Safari]: 3,\n [BrowserType.Opera]: 4,\n [BrowserType.Other]: 5,\n};\nconst BrowserTypeMap = constructTypeMap(BrowserIndexMap);\n\nconst OFF_VARIATION_KEY = 'off';\nconst WAREHOUSE_AUDIENCE_KEY = 'warehouseAudiences';\nconst CACHE_CLEANUP_TIMEOUT = 10;\nconst CACHE_ITEM_LIFETIME = 5;\nconst IN_HOLDOUT_VARIATION_KEY = 'in-holdout';\n/**\n * @readonly\n * @enum {string} an Enum of all the possible Kameleoon SDK types\n * */\nvar SdkLanguageType;\n(function (SdkLanguageType) {\n SdkLanguageType[\"ANDROID\"] = \"ANDROID\";\n SdkLanguageType[\"IOS\"] = \"IOS\";\n SdkLanguageType[\"JAVA\"] = \"JAVA\";\n SdkLanguageType[\"CSHARP\"] = \"CSHARP\";\n SdkLanguageType[\"NODEJS\"] = \"NODEJS\";\n SdkLanguageType[\"PHP\"] = \"PHP\";\n SdkLanguageType[\"RUBY\"] = \"RUBY\";\n SdkLanguageType[\"GO\"] = \"GO\";\n SdkLanguageType[\"FLUTTER\"] = \"FLUTTER\";\n SdkLanguageType[\"REACT\"] = \"REACT\";\n SdkLanguageType[\"PYTHON\"] = \"PYTHON\";\n SdkLanguageType[\"JAVASCRIPT\"] = \"JAVASCRIPT\";\n SdkLanguageType[\"RUST\"] = \"RUST\";\n})(SdkLanguageType || (SdkLanguageType = {}));\nconst DEFAULT_VISITOR_DATA_FILTERS = {\n previousVisitAmount: 1,\n currentVisit: true,\n customData: true,\n pageViews: false,\n geolocation: false,\n device: false,\n browser: false,\n operatingSystem: false,\n conversions: false,\n experiments: false,\n kcs: false,\n visitorCode: true,\n personalization: false,\n};\n\nvar Operator;\n(function (Operator) {\n Operator[\"And\"] = \"AND\";\n Operator[\"Or\"] = \"OR\";\n})(Operator || (Operator = {}));\nvar ValueMatchType;\n(function (ValueMatchType) {\n ValueMatchType[\"TRUE\"] = \"TRUE\";\n ValueMatchType[\"FALSE\"] = \"FALSE\";\n ValueMatchType[\"EXACT\"] = \"EXACT\";\n ValueMatchType[\"CONTAINS\"] = \"CONTAINS\";\n ValueMatchType[\"REGULAR_EXPRESSION\"] = \"REGULAR_EXPRESSION\";\n ValueMatchType[\"EQUAL\"] = \"EQUAL\";\n ValueMatchType[\"LOWER\"] = \"LOWER\";\n ValueMatchType[\"GREATER\"] = \"GREATER\";\n ValueMatchType[\"UNDEFINED\"] = \"UNDEFINED\";\n ValueMatchType[\"AMONG_VALUES\"] = \"AMONG_VALUES\";\n ValueMatchType[\"RANGE\"] = \"RANGE\";\n})(ValueMatchType || (ValueMatchType = {}));\nvar VisitorType;\n(function (VisitorType) {\n VisitorType[\"NEW\"] = \"NEW\";\n VisitorType[\"RETURNING\"] = \"RETURNING\";\n})(VisitorType || (VisitorType = {}));\nvar MatchTypeVariation;\n(function (MatchTypeVariation) {\n MatchTypeVariation[\"ANY\"] = \"ANY\";\n MatchTypeVariation[\"EXACT\"] = \"EXACT\";\n})(MatchTypeVariation || (MatchTypeVariation = {}));\nvar MatchTypeTest;\n(function (MatchTypeTest) {\n MatchTypeTest[\"ALL\"] = \"ALL\";\n MatchTypeTest[\"TEST\"] = \"TEST\";\n MatchTypeTest[\"PERSO\"] = \"PERSO\";\n})(MatchTypeTest || (MatchTypeTest = {}));\nvar CampaignType;\n(function (CampaignType) {\n CampaignType[\"Experiment\"] = \"EXPERIMENT\";\n CampaignType[\"Personalization\"] = \"PERSONALIZATION\";\n CampaignType[\"Any\"] = \"ANY\";\n})(CampaignType || (CampaignType = {}));\n// --- Note ---\n// Starting the merge of `matchType` with the release of new conditions\n// Now it contains a couple of sub types, in future API version all match types\n// will be accumulated in this enum\nvar MatchType;\n(function (MatchType) {\n // -- Sub Type One\n MatchType[\"EXACT\"] = \"EXACT\";\n MatchType[\"CONTAINS\"] = \"CONTAINS\";\n MatchType[\"REGULAR_EXPRESSION\"] = \"REGULAR_EXPRESSION\";\n // -- Sub Type Two\n MatchType[\"GREATER\"] = \"GREATER\";\n MatchType[\"EQUAL\"] = \"EQUAL\";\n MatchType[\"LOWER\"] = \"LOWER\";\n})(MatchType || (MatchType = {}));\nvar VersionMatchType;\n(function (VersionMatchType) {\n VersionMatchType[\"GREATER\"] = \"GREATER\";\n VersionMatchType[\"EQUAL\"] = \"EQUAL\";\n VersionMatchType[\"LOWER\"] = \"LOWER\";\n})(VersionMatchType || (VersionMatchType = {}));\nvar NameMatchType;\n(function (NameMatchType) {\n NameMatchType[\"EXACT\"] = \"EXACT\";\n NameMatchType[\"CONTAINS\"] = \"CONTAINS\";\n NameMatchType[\"REGULAR_EXPRESSION\"] = \"REGULAR_EXPRESSION\";\n NameMatchType[\"OPTIONAL\"] = \"OPTIONAL\";\n})(NameMatchType || (NameMatchType = {}));\nvar TargetingType;\n(function (TargetingType) {\n TargetingType[\"PAGE_URL\"] = \"PAGE_URL\";\n TargetingType[\"PAGE_TITLE\"] = \"PAGE_TITLE\";\n TargetingType[\"LANDING_PAGE\"] = \"LANDING_PAGE\";\n TargetingType[\"ORIGIN\"] = \"ORIGIN\";\n TargetingType[\"ORIGIN_TYPE\"] = \"ORIGIN_TYPE\";\n TargetingType[\"REFERRERS\"] = \"REFERRERS\";\n TargetingType[\"NEW_VISITORS\"] = \"NEW_VISITORS\";\n TargetingType[\"INTERESTS\"] = \"INTERESTS\";\n TargetingType[\"BROWSER_LANGUAGE\"] = \"BROWSER_LANGUAGE\";\n TargetingType[\"GEOLOCATION\"] = \"GEOLOCATION\";\n TargetingType[\"DEVICE_TYPE\"] = \"DEVICE_TYPE\";\n TargetingType[\"SCREEN_DIMENSION\"] = \"SCREEN_DIMENSION\";\n TargetingType[\"VISITOR_IP\"] = \"VISITOR_IP\";\n TargetingType[\"AD_BLOCKER\"] = \"AD_BLOCKER\";\n TargetingType[\"PREVIOUS_PAGE\"] = \"PREVIOUS_PAGE\";\n TargetingType[\"KEY_PAGES\"] = \"KEY_PAGES\";\n TargetingType[\"PAGE_VIEWS\"] = \"PAGE_VIEWS\";\n TargetingType[\"FIRST_VISIT\"] = \"FIRST_VISIT\";\n TargetingType[\"LAST_VISIT\"] = \"LAST_VISIT\";\n TargetingType[\"ACTIVE_SESSION\"] = \"ACTIVE_SESSION\";\n TargetingType[\"TIME_SINCE_PAGE_LOAD\"] = \"TIME_SINCE_PAGE_LOAD\";\n TargetingType[\"SAME_DAY_VISITS\"] = \"SAME_DAY_VISITS\";\n TargetingType[\"VISITS\"] = \"VISITS\";\n TargetingType[\"VISITS_BY_PAGE\"] = \"VISITS_BY_PAGE\";\n TargetingType[\"VISITOR_CODE\"] = \"VISITOR_CODE\";\n TargetingType[\"SDK_LANGUAGE\"] = \"SDK_LANGUAGE\";\n TargetingType[\"INTERNAL_SEARCH_KEYWORDS\"] = \"INTERNAL_SEARCH_KEYWORDS\";\n TargetingType[\"TABS_ON_SITE\"] = \"TABS_ON_SITE\";\n TargetingType[\"CONVERSION_PROBABILITY\"] = \"CONVERSION_PROBABILITY\";\n TargetingType[\"HEAT_SLICE\"] = \"HEAT_SLICE\";\n TargetingType[\"SKY_STATUS\"] = \"SKY_STATUS\";\n TargetingType[\"TEMPERATURE\"] = \"TEMPERATURE\";\n TargetingType[\"DAY_NIGHT\"] = \"DAY_NIGHT\";\n TargetingType[\"FORECAST_SKY_STATUS\"] = \"FORECAST_SKY_STATUS\";\n TargetingType[\"FORECAST_TEMPERATURE\"] = \"FORECAST_TEMPERATURE\";\n TargetingType[\"DAY_OF_WEEK\"] = \"DAY_OF_WEEK\";\n TargetingType[\"TIME_RANGE\"] = \"TIME_RANGE\";\n TargetingType[\"HOUR_MINUTE_RANGE\"] = \"HOUR_MINUTE_RANGE\";\n TargetingType[\"JS_CODE\"] = \"JS_CODE\";\n TargetingType[\"COOKIE\"] = \"COOKIE\";\n TargetingType[\"EVENT\"] = \"EVENT\";\n TargetingType[\"BROWSER\"] = \"BROWSER\";\n TargetingType[\"OPERATING_SYSTEM\"] = \"OPERATING_SYSTEM\";\n TargetingType[\"DOM_ELEMENT\"] = \"DOM_ELEMENT\";\n TargetingType[\"MOUSE_OUT\"] = \"MOUSE_OUT\";\n TargetingType[\"TARGET_EXPERIMENT\"] = \"TARGET_EXPERIMENT\";\n TargetingType[\"TARGET_FEATURE_FLAG\"] = \"TARGET_FEATURE_FLAG\";\n TargetingType[\"TARGET_PERSONALIZATION\"] = \"TARGET_PERSONALIZATION\";\n TargetingType[\"EXCLUSIVE_EXPERIMENT\"] = \"EXCLUSIVE_EXPERIMENT\";\n TargetingType[\"CONVERSIONS\"] = \"CONVERSIONS\";\n TargetingType[\"CUSTOM_DATUM\"] = \"CUSTOM_DATUM\";\n TargetingType[\"YSANCE_SEGMENT\"] = \"YSANCE_SEGMENT\";\n TargetingType[\"SEGMENT\"] = \"SEGMENT\";\n TargetingType[\"YSANCE_ATTRIBUT\"] = \"YSANCE_ATTRIBUT\";\n TargetingType[\"TEALIUM_BADGE\"] = \"TEALIUM_BADGE\";\n TargetingType[\"TEALIUM_AUDIENCE\"] = \"TEALIUM_AUDIENCE\";\n TargetingType[\"PRICE_OF_DISPLAYED_PAGE\"] = \"PRICE_OF_DISPLAYED_PAGE\";\n TargetingType[\"NUMBER_OF_VISITED_PAGES\"] = \"NUMBER_OF_VISITED_PAGES\";\n TargetingType[\"VISITED_PAGES\"] = \"VISITED_PAGES\";\n TargetingType[\"CUSTOM\"] = \"CUSTOM\";\n TargetingType[\"EXPLICIT_TRIGGER\"] = \"EXPLICIT_TRIGGER\";\n TargetingType[\"APPLICATION_VERSION\"] = \"APPLICATION_VERSION\";\n})(TargetingType || (TargetingType = {}));\n\nvar TimeUnit;\n(function (TimeUnit) {\n TimeUnit[\"Minute\"] = \"MINUTE\";\n TimeUnit[\"Hour\"] = \"HOUR\";\n TimeUnit[\"Day\"] = \"DAY\";\n TimeUnit[\"Week\"] = \"WEEK\";\n TimeUnit[\"Month\"] = \"MONTH\";\n})(TimeUnit || (TimeUnit = {}));\nvar Order;\n(function (Order) {\n Order[\"Ascending\"] = \"asc\";\n Order[\"Descending\"] = \"desc\";\n})(Order || (Order = {}));\n\nconst HEX_CHARACTERS = '0123456789ABCDEF';\nconst NONCE_LENGTH = 16;\nconst HTTP = 'http://';\nconst HTTPS = 'https://';\nconst LOCALHOST = 'localhost';\nconst REGEX_DOMAIN = /^(\\.?(([a-zA-Z\\d][a-zA-Z\\d-]*[a-zA-Z\\d])|[a-zA-Z\\d]))(\\.(([a-zA-Z\\d][a-zA-Z\\d-]*[a-zA-Z\\d])|[a-zA-Z\\d])){1,126}$/;\nconst HIDDEN_SECRET_CHAR = '*';\nconst SECRET_VISIBLE_LENGTH = 4;\nconst VISITOR_VISIT_MAX_LENGTH = 26;\n\nclass Validator {\n static validateVersion(version) {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n if (versionParts.some((item) => isNaN(item))) {\n return buildExports.Err(new KameleoonError(KameleoonException.SemanticVersionParse, version));\n }\n return buildExports.Ok(versionParts.slice(0, 3));\n }\n static validateDomain(domain) {\n if (!domain) {\n return buildExports.Err();\n }\n domain = Validator.checkAndTrimProtocol(domain.toLowerCase());\n if (!REGEX_DOMAIN.test(domain) && domain !== LOCALHOST) {\n KameleoonLogger.error `The top-level domain ${domain} is invalid. The value has been set as provided, but it does not meet the required format for proper SDK functionality. Please check the domain for correctness.`;\n return buildExports.Ok(domain);\n }\n return buildExports.Ok(domain);\n }\n static validateNetworkDomain(networkDomain) {\n if (!networkDomain) {\n return buildExports.Err();\n }\n networkDomain = Validator.checkAndTrimProtocol(networkDomain.toLowerCase());\n // replace first and last dot\n networkDomain = networkDomain.replace(/^\\.+|\\.+$/g, '');\n if (!REGEX_DOMAIN.test(networkDomain) && networkDomain !== LOCALHOST) {\n KameleoonLogger.error `The network domain ${networkDomain} is invalid.`;\n return buildExports.Err();\n }\n return buildExports.Ok(networkDomain);\n }\n static checkAndTrimProtocol(domain) {\n const protocols = [HTTP, HTTPS];\n for (const protocol of protocols) {\n if (domain.startsWith(protocol)) {\n domain = domain.substring(protocol.length);\n KameleoonLogger.warning `The domain contains ${protocol}. Domain after protocol trimming: ${domain}`;\n break;\n }\n }\n return domain;\n }\n}\n\nclass Utilities {\n static getNonce(prng) {\n let nonce = '';\n for (let i = 0; i < NONCE_LENGTH; i++) {\n const randomNumber = prng.getRandomNumber();\n const randomIndex = Math.floor(randomNumber * NONCE_LENGTH);\n nonce += HEX_CHARACTERS.charAt(randomIndex);\n }\n return nonce;\n }\n static checkTargeting({ segment, visitorCode, targetingData, experimentId, variationConfiguration, clientConfiguration, packageInfo, dataManager, }) {\n KameleoonLogger.debug `CALL: checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager)`;\n if (!segment || !segment.conditionsData.firstLevel.length) {\n const result = buildExports.Ok(true);\n KameleoonLogger.debug `RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n if (!variationConfiguration) {\n const result = buildExports.Err(new KameleoonError(KameleoonException.Initialization));\n KameleoonLogger.debug `RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n let variations = {};\n const assignedVariationsResult = variationConfiguration.getStoredVariations(visitorCode);\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n const targetingTree = dataManager.getTree(segment);\n let trees = undefined;\n let ruleMap = undefined;\n let segments = undefined;\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n KameleoonLogger.debug `RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n static convertTimeUnit(time, timeUnit) {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n return time / timeMap[timeUnit];\n }\n static isCustomData(dataItem) {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n static updateCache({ hasJsCssVariables, cacheManager, visitorCode, experimentId, variationId, }) {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n const newCacheData = cacheData ? Object.assign({}, cacheData) : {};\n newCacheData[experimentId] = {\n variationId,\n hasJsCssVariables,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n static getTrackingCode(trackingCache, visitorCode) {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n const cacheData = trackingCache.getAliveItem(visitorCode);\n if (!cacheData) {\n return resultString;\n }\n const updatedCacheData = {};\n Object.entries(cacheData).forEach(([experimentId, { variationId, expirationTime, hasJsCssVariables }]) => {\n const flag = !hasJsCssVariables;\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId},true]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},${flag}]);`;\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n hasJsCssVariables,\n };\n }\n });\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n return resultString;\n }\n static compareSemVer({ version, compareVersion, operator, }) {\n const versionResult = Validator.validateVersion(version);\n const compareVersionResult = Validator.validateVersion(compareVersion);\n if (!versionResult.ok) {\n return buildExports.Err(versionResult.error);\n }\n if (!compareVersionResult.ok) {\n return buildExports.Err(compareVersionResult.error);\n }\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] = compareVersionResult.data;\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n switch (operator) {\n case VersionMatchType.EQUAL:\n return buildExports.Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return buildExports.Ok(major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch));\n case VersionMatchType.LOWER:\n return buildExports.Ok(major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch));\n default:\n KameleoonLogger.error `Unknown version match type: ${operator}`;\n exhaustCheck(operator);\n }\n }\n static getVariationByHash(variationByExposition, hash) {\n let total = 0;\n for (const varByExpItem of variationByExposition) {\n total += varByExpItem.exposition;\n if (total >= hash) {\n return varByExpItem;\n }\n }\n return null;\n }\n}\n\nclass ListUtilities {\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({ list, element, order, }) {\n if (list.includes(element)) {\n return;\n }\n const index = list.findIndex((item) => order === Order.Ascending ? item >= element : item <= element);\n if (index === -1) {\n list.push(element);\n }\n else {\n list.splice(index, 0, element);\n }\n }\n /**\n * Insert visit in ordered list, if visit already exists in list, does nothing\n * @param list - list to insert element\n * @param visit - visit to insert\n */\n static insertVisitInOrderedListMutably({ list, visit, }) {\n // Check if the visit already exists in the list\n const currentVisit = list.find((item) => typeof item === 'number'\n ? item === visit.timeStarted\n : item.timeStarted === visit.timeStarted);\n if (currentVisit) {\n return;\n }\n const index = list.findIndex((item) => {\n if (typeof item === 'number') {\n return item >= visit.timeStarted;\n }\n return item.timeStarted >= visit.timeStarted;\n });\n if (index === -1) {\n list.push(visit);\n }\n else {\n list.splice(index, 0, visit);\n }\n if (list.length > VISITOR_VISIT_MAX_LENGTH) {\n list.splice(0, list.length - VISITOR_VISIT_MAX_LENGTH);\n }\n }\n}\n\n/**\n * @class\n * PageView - a class for creating an instance of a page view data\n * */\nclass PageView {\n /**\n * @param {PageViewParametersType} pageViewParameters - an object with page view parameters\n * */\n constructor({ urlAddress, title, referrers }) {\n this.urlAddress = urlAddress;\n this.title = title;\n this.referrers = referrers;\n this.timestamps = [\n {\n time: Date.now(),\n status: TrackingStatus.Unsent,\n },\n ];\n }\n get url() {\n var _a;\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.urlAddress) {\n return '';\n }\n const titleParameter = this.title\n ? UrlParameter.Title + encodeURIComponent(this.title)\n : '';\n const referrersParameter = ((_a = this.referrers) === null || _a === void 0 ? void 0 : _a.length)\n ? UrlParameter.ReferrersIndices + JSON.stringify(this.referrers)\n : '';\n return (UrlEventType.Page +\n UrlParameter.Href +\n encodeURIComponent(this.urlAddress) +\n titleParameter +\n referrersParameter);\n }\n get status() {\n const { [TrackingStatus.Sent]: sent, [TrackingStatus.Unsent]: unsent, [TrackingStatus.Pending]: pending, } = this.timestamps.reduce((acc, { status }) => {\n acc[status] = true;\n return acc;\n }, {\n [TrackingStatus.Sent]: false,\n [TrackingStatus.Unsent]: false,\n [TrackingStatus.Pending]: false,\n });\n if (sent && !unsent && !pending) {\n return TrackingStatus.Sent;\n }\n if (pending && !unsent) {\n return TrackingStatus.Pending;\n }\n return TrackingStatus.Unsent;\n }\n set status(status) {\n this.timestamps = this.timestamps.map((timestamp) => (Object.assign(Object.assign({}, timestamp), { status })));\n }\n set _nonce(nonce) {\n this.nonce = nonce;\n }\n get data() {\n return {\n urlAddress: this.urlAddress,\n title: this.title,\n referrers: this.referrers,\n type: KameleoonData.PageView,\n timestamps: this.timestamps,\n status: this.status,\n nonce: this.nonce,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a PageView instance from raw data\n * @param {PageViewDataType} data - a raw data\n * @return {PageView} a PageView instance\n * */\n static _fromRaw(data) {\n const { urlAddress, title, referrers, timestamps, nonce } = data;\n const pageView = new PageView({\n urlAddress,\n title,\n referrers,\n });\n pageView.timestamps = timestamps;\n if (nonce) {\n pageView._nonce = nonce;\n }\n return pageView;\n }\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of page view data from a visit\n * @param {VisitType} visit - a visit\n * @param {Map<string, PageView>} dataMap - a map of page view data where we collect data\n * */\n static _updateFromVisit(visit, dataMap) {\n const pageEvents = visit.pageEvents;\n if (pageEvents) {\n for (const pageEvent of pageEvents) {\n let referrers = [];\n const { time } = pageEvent;\n const { href, title, referrersIndices } = pageEvent.data;\n if (typeof referrersIndices[0] === 'number') {\n referrers = referrersIndices;\n }\n let pageView;\n if (dataMap.has(href)) {\n const existingTimestamps = dataMap.get(href).timestamps;\n pageView = new PageView({\n urlAddress: href,\n title,\n referrers,\n });\n pageView.timestamps = [\n ...existingTimestamps,\n { time, status: TrackingStatus.Sent },\n ];\n }\n else {\n pageView = new PageView({\n urlAddress: href,\n title,\n referrers,\n });\n pageView.timestamps = [{ time, status: TrackingStatus.Sent }];\n }\n dataMap.set(href, pageView);\n }\n }\n }\n}\n\n/**\n * @class\n * CustomData - a class for creating an instance for user's custom data\n * */\nlet CustomData$1 = class CustomData {\n constructor(first, second, ...rest) {\n this._status = TrackingStatus.Unsent;\n this.isIdentifier = false;\n const isNumber = typeof first === 'number';\n const isBoolean = typeof second === 'boolean';\n if (isNumber) {\n this._index = first;\n }\n else {\n this._name = first;\n this._index = CustomData.UNDEFINED_INDEX;\n }\n this.overwrite = isBoolean ? second : true;\n this.value = isBoolean\n ? rest\n : [second, ...rest].filter((v) => v != null);\n }\n get url() {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (typeof this._index !== 'number') {\n return '';\n }\n const uniqueValues = [...new Set(this.value)];\n let resultValue = {};\n // --- Note ---\n // Final value should look like this `{ \"value_1\": 1, \"value_2\": 1, \"value_3\": 1 }`\n // With no duplicates\n uniqueValues.forEach((value) => {\n resultValue[value] = 1;\n });\n let identifierParameter = '';\n if (this.isIdentifier) {\n identifierParameter = UrlParameter.MappingIdentifier + String(true);\n }\n return (UrlEventType.CustomData +\n UrlParameter.Index +\n this._index +\n UrlParameter.ValuesCountMap +\n encodeURIComponent(JSON.stringify(resultValue)) +\n UrlParameter.Overwrite +\n String(this.overwrite) +\n identifierParameter);\n }\n get data() {\n return Object.assign(Object.assign({ index: this._index }, (this._name !== undefined ? { name: this._name } : {})), { value: this.value, type: KameleoonData.CustomData, isIdentifier: this.isIdentifier, status: this.status, overwrite: this.overwrite });\n }\n get status() {\n if (this._isMappingIdentifier) {\n return TrackingStatus.Unsent;\n }\n return this._status;\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a CustomData instance from raw data\n * @param {CustomDataType} data - a raw data\n * @return {CustomData} a CustomData instance\n * */\n static _fromRaw(data) {\n const { index, value, status, isIdentifier, name, overwrite } = data;\n let customData;\n if (name) {\n customData = new CustomData(name, overwrite !== null && overwrite !== void 0 ? overwrite : true, ...value);\n customData.index = index;\n }\n else {\n customData = new CustomData(index, overwrite !== null && overwrite !== void 0 ? overwrite : true, ...value);\n }\n customData.status = status;\n customData._isMappingIdentifier = isIdentifier;\n return customData;\n }\n /**\n * @property isMappingIdentifier - signifying if the data is a mapping identifier\n * @private\n * */\n set _isMappingIdentifier(value) {\n this.isIdentifier = value;\n }\n set status(status) {\n this._status = status;\n }\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of custom data from a visit\n * @param {VisitType} visit - a visit\n * */\n static _updateFromVisit(visit, dataMap) {\n var _a;\n if ((_a = visit.customDataEvents) === null || _a === void 0 ? void 0 : _a.length) {\n for (let i = visit.customDataEvents.length - 1; i >= 0; i--) {\n const { index, valuesCountMap } = visit.customDataEvents[i].data;\n if (!dataMap.has(index)) {\n dataMap.set(index, new CustomData(index, ...Object.keys(valuesCountMap)));\n }\n }\n }\n }\n /**\n * @private\n * @method index - an internal setter for setting index of custom data\n * @param {number} value - an index value\n * */\n set index(value) {\n this._index = value;\n }\n /**\n * @private\n * @method index - an internal getter for index of custom data\n * */\n get index() {\n return this._index;\n }\n /**\n * @private\n * @method name - an internal getter for a name of custom data\n * */\n get name() {\n return this._name;\n }\n /**\n * @private\n * @method name - an internal getter for a name of custom data\n * */\n get values() {\n return this.value;\n }\n};\nCustomData$1.UNDEFINED_INDEX = -1;\n\n/**\n * @class\n * Conversion - a class for creating an instance for conversion tracking\n * */\nlet Conversion$1 = class Conversion {\n /**\n * @param {ConversionParametersType} conversionParameters - an object with conversion parameters\n * */\n constructor({ goalId, revenue = 0, negative = false, metadata, }) {\n this.goalId = goalId;\n this.revenue = revenue;\n this.negative = negative;\n this.status = TrackingStatus.Unsent;\n this.id = Math.floor(Math.random() * 1000000);\n this._metadata = metadata;\n }\n set _id(id) {\n this.id = id;\n }\n set _nonce(nonce) {\n this.nonce = nonce;\n }\n get url() {\n var _a;\n return (UrlEventType.Conversion +\n UrlParameter.GoalId +\n String(this.goalId) +\n UrlParameter.Revenue +\n String(this.revenue) +\n UrlParameter.Negative +\n String(this.negative) +\n (((_a = this.metadata) === null || _a === void 0 ? void 0 : _a.length)\n ? UrlParameter.Metadata + this._encodeMetadata()\n : ''));\n }\n /**\n * @private\n * @method metadata - an internal getter for a metadata of conversion\n * */\n get _metadata() {\n return this.metadata;\n }\n /**\n * @private\n * @method metadata - an internal setter for setting metadata of conversion\n * @param {number} value - an index value\n * */\n set _metadata(value) {\n this.metadata = value;\n }\n get data() {\n var _a;\n return {\n goalId: this.goalId,\n nonce: this.nonce,\n revenue: this.revenue,\n negative: this.negative,\n type: KameleoonData.Conversion,\n status: this.status,\n id: this.id,\n metadata: ((_a = this.metadata) === null || _a === void 0 ? void 0 : _a.map((item) => item.data)) || undefined,\n };\n }\n _encodeMetadata() {\n var _a;\n if (!((_a = this.metadata) === null || _a === void 0 ? void 0 : _a.length)) {\n return '';\n }\n const indices = new Set();\n return encodeURIComponent(JSON.stringify(this.metadata.reduce((acc, item) => {\n if (indices.has(item.data.index)) {\n return acc;\n }\n indices.add(item.data.index);\n acc[item.data.index] = item.data.value;\n return acc;\n }, {})));\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Conversion instance from raw data\n * @param {ConversionDataType} data - a raw data\n * @return {Conversion} a Conversion instance\n * */\n static _fromRaw(data) {\n const { goalId, revenue, negative, status, id, nonce, metadata } = data;\n const conversion = new Conversion({\n goalId,\n revenue,\n negative,\n metadata: Conversion.parseMetadata(metadata),\n });\n conversion._id = id;\n conversion.status = status;\n if (nonce) {\n conversion._nonce = nonce;\n }\n return conversion;\n }\n static parseMetadata(metadata) {\n return ((metadata === null || metadata === void 0 ? void 0 : metadata.map((item) => CustomData$1._fromRaw(item))) ||\n undefined);\n }\n /**\n * @private\n * @method _listFromVisit - an internal method for returning a list of all Conversion instances\n * @param {VisitType} visit - a visits\n * @return {Conversion[]} - a list of Conversion instances\n * */\n static _listFromVisit(visit) {\n var _a, _b;\n const conversions = [];\n if (!((_a = visit.conversionEvents) === null || _a === void 0 ? void 0 : _a.length)) {\n return [];\n }\n if ((_b = visit.conversionEvents) === null || _b === void 0 ? void 0 : _b.length) {\n for (const conversionEvent of visit.conversionEvents) {\n const { goalId, revenue, negative } = conversionEvent.data;\n const conversion = new Conversion({ goalId, revenue, negative });\n // --- Note ---\n // Conversion is marked as sent, so the visitor won't be converted again just\n // by pulling visits data\n conversion.status = TrackingStatus.Sent;\n conversions.push(conversion);\n }\n }\n return conversions;\n }\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of Conversion instances with only goalId\n * @param {VisitType} visit - a visits\n * @param {Map<number, Conversion>} dataMap - a map of Conversion instances\n * */\n static _updateFromVisit(visit, dataMap) {\n var _a;\n if ((_a = visit.conversionEvents) === null || _a === void 0 ? void 0 : _a.length) {\n for (const conversionEvent of visit.conversionEvents) {\n const { goalId } = conversionEvent.data;\n // --- Note ---\n // - We only take unique `goalId`s as and don't use `revenue` and `negative`\n // because we only utilize it for Conversion Condition and don't re-sent this data tracking\n // not to break server `revenue` calculations and not to cause extra conversions\n // - Moreover conversion is marked as sent, so the visitor won't be converted again just\n // by pulling visits data\n if (!dataMap.has(goalId)) {\n const conversion = new Conversion({ goalId });\n conversion.status = TrackingStatus.Sent;\n dataMap.set(goalId, conversion);\n }\n }\n }\n }\n};\n\n/**\n * @class\n * Browser - a class for creating an instance for browser of a certain type\n * */\nlet Browser$1 = class Browser {\n /**\n * @param {BrowserType} browser - one of the browser types available for data, if browser can not be found in a list, it can be marked as `BrowserType.Other`\n * @param {number | undefined} version - version of the browser, floating point number represents major and minor version of the browser\n * @example\n * ```ts\n * const browser = new Browser(BrowserType.Chrome, 86);\n * const browser = new Browser(BrowserType.Safari, 14.1);\n * ```\n * */\n constructor(browser, version) {\n this.browser = browser;\n this.version = version;\n this.status = TrackingStatus.Unsent;\n }\n get url() {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.browser) {\n return '';\n }\n const browserVersion = this.version\n ? UrlParameter.BrowserVersion + this.version\n : '';\n return (UrlEventType.StaticData +\n UrlParameter.Browser +\n this.browser +\n UrlParameter.BrowserIndex +\n BrowserIndexMap[this.browser] +\n browserVersion);\n }\n get data() {\n return {\n browser: this.browser,\n type: KameleoonData.Browser,\n version: this.version,\n status: this.status,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Browser instance from raw data\n * @param {BrowserDataType} data - a raw data\n * @return {Browser} a Browser instance\n * */\n static _fromRaw(data) {\n const { browser: browserType, version, status } = data;\n const browser = new Browser(browserType, version);\n browser.status = status;\n return browser;\n }\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of Browser class from a visit\n * @param {VisitType} visit - a visit\n * @returns {Browser | undefined} an instance of Browser class or undefined if browser can not be found among visits\n * */\n static _fromVisit(visit) {\n if (!visit.staticDataEvent) {\n return undefined;\n }\n const { browser: browserType, browserIndex, browserVersion, } = visit.staticDataEvent.data;\n if (browserType || typeof browserIndex === 'number') {\n const browser = browserType !== null && browserType !== void 0 ? browserType : BrowserTypeMap[browserIndex];\n if (browserVersion) {\n return new Browser(browser, browserVersion);\n }\n else {\n return new Browser(browser);\n }\n }\n return undefined;\n }\n};\n\n/**\n * @class\n * Device - a class for creating an instance for device of a certain type\n * */\nlet Device$1 = class Device {\n /**\n * @param {DeviceType} device - one of the available device types from `DeviceType` enum\n * */\n constructor(device) {\n this.device = device;\n this.status = TrackingStatus.Unsent;\n }\n get url() {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.device) {\n return '';\n }\n return UrlEventType.StaticData + UrlParameter.DeviceType + this.device;\n }\n get data() {\n return {\n device: this.device,\n type: KameleoonData.Device,\n status: this.status,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Device instance from raw data\n * @param {DeviceDataType} data - a raw data\n * @return {Device} a Device instance\n * */\n static _fromRaw(data) {\n const { device: deviceType, status } = data;\n const device = new Device(deviceType);\n device.status = status;\n return device;\n }\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of Device class from a visit\n * @param {VisitType} visit - a visit\n * @returns {Device | undefined} an instance of Device class or undefined if browser can not be found among visits\n * */\n static _fromVisit(visit) {\n var _a;\n if ((_a = visit.staticDataEvent) === null || _a === void 0 ? void 0 : _a.data.deviceType) {\n return new Device(visit.staticDataEvent.data.deviceType);\n }\n return undefined;\n }\n};\n\n/**\n * @class\n * OperatingSystem - a class for creating an instance for Operating System of a certain type\n * */\nlet OperatingSystem$1 = class OperatingSystem {\n /**\n * @param {OperatingSystemType} operatingSystem - one of the available operating system types from `OperatingSystemType` enum\n * */\n constructor(operatingSystem) {\n this.operatingSystem = operatingSystem;\n this.status = TrackingStatus.Unsent;\n }\n get url() {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.operatingSystem) {\n return '';\n }\n return (UrlEventType.StaticData +\n UrlParameter.Os +\n this.operatingSystem +\n UrlParameter.OsIndex +\n OperatingSystemIndexMap[this.operatingSystem]);\n }\n get data() {\n return {\n operatingSystem: this.operatingSystem,\n type: KameleoonData.OperatingSystem,\n status: this.status,\n };\n }\n /**\n * @private\n * @method _fromRaw - a static method for creating an instance of OperatingSystem class from raw data\n * @param {OperatingSystemDataType} data - a raw data\n * @returns {OperatingSystem} an instance of OperatingSystem class\n * */\n static _fromRaw(data) {\n const { operatingSystem, status } = data;\n const os = new OperatingSystem(operatingSystem);\n os.status = status;\n return os;\n }\n /**\n * @private\n * @method _fromVisit - a static method for creating an instance of OperatingSystem class from a visit\n * @param {VisitType} visit - a visit\n * @returns {OperatingSystem | undefined} an instance of OperatingSystem class or undefined\n * */\n static _fromVisit(visit) {\n if (!visit.staticDataEvent) {\n return undefined;\n }\n const { os: operatingSystemType, osIndex } = visit.staticDataEvent.data;\n if (operatingSystemType || typeof osIndex === 'number') {\n const operatingSystem = operatingSystemType !== null && operatingSystemType !== void 0 ? operatingSystemType : OperatingSystemTypeMap[osIndex];\n return new OperatingSystem(operatingSystem);\n }\n return undefined;\n }\n};\n\n/**\n * @class\n * Geolocation - a class for creating an instance for geolocation data\n * */\nclass GeolocationData {\n /**\n * @param {GeolocationInfoType} geolocationInfo - an object containing information about geolocation of a visitor\n * @example\n * ```ts\n * // Visitor is located at Triumph Arch in Paris, France\n * const location: GeolocationDataType = {\n * country: 'France',\n * region: 'Île-de-France',\n * city: 'Paris',\n * postalCode: '75008',\n * coordinates: [48.8738, 2.295]\n * };\n *\n * const geolocation = new GeolocationData(location);\n * ```\n *\n * */\n constructor({ country, region, city, postalCode, coordinates, }) {\n this.country = country;\n this.region = region;\n this.city = city;\n this.postalCode = postalCode;\n this.coordinates = coordinates;\n this.status = TrackingStatus.Unsent;\n }\n get url() {\n const region = this.region\n ? UrlParameter.Region + encodeURIComponent(this.region)\n : '';\n const city = this.city\n ? UrlParameter.City + encodeURIComponent(this.city)\n : '';\n const postalCode = this.postalCode\n ? UrlParameter.PostalCode + encodeURIComponent(this.postalCode)\n : '';\n const coordinates = this.coordinates\n ? UrlParameter.Latitude +\n this.coordinates[0] +\n UrlParameter.Longitude +\n this.coordinates[1]\n : '';\n return (UrlEventType.Geolocation +\n UrlParameter.Country +\n encodeURIComponent(this.country) +\n region +\n city +\n postalCode +\n coordinates);\n }\n get data() {\n return {\n type: KameleoonData.GeolocationData,\n country: this.country,\n region: this.region,\n city: this.city,\n postalCode: this.postalCode,\n coordinates: this.coordinates,\n status: this.status,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a GeolocationData instance from raw data\n * @param {GeolocationDataType} data - a raw data\n * @return {GeolocationData} a GeolocationData instance\n * */\n static _fromRaw(data) {\n const { country, region, city, postalCode, coordinates, status } = data;\n const geolocation = new GeolocationData({\n country,\n region,\n city,\n postalCode,\n coordinates,\n });\n geolocation.status = status;\n return geolocation;\n }\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of GeolocationData class from a visit\n * @param {VisitType} visit - a visit\n * @returns {GeolocationData | undefined} an instance of GeolocationData class or undefined if geolocation can not be found among visits\n * */\n static _fromVisit(visit) {\n var _a;\n if (!((_a = visit.geolocationEvents) === null || _a === void 0 ? void 0 : _a.length)) {\n return undefined;\n }\n let geolocationData = undefined;\n for (const geolocationEvent of visit.geolocationEvents) {\n const { data } = geolocationEvent;\n if (data.country) {\n geolocationData = data;\n }\n }\n // --- Note ---\n // We only take `country`, `region`, and `city` from geolocation event ignoring other fields\n // as they are not participating in targeting, and visits data won't be tracked again\n const { country, region, city } = geolocationData || {};\n if (country) {\n if (region && city) {\n return new GeolocationData({ country, region, city });\n }\n else if (region) {\n return new GeolocationData({ country, region });\n }\n else {\n return new GeolocationData({ country });\n }\n }\n }\n}\n\n/**\n * @class\n * Visits - a class for creating an instance of a stored visits data\n * */\nclass VisitsData {\n /**\n * @param {number[]} visits - a list of visits\n * */\n constructor(visits) {\n this.status = TrackingStatus.Sent;\n this.visits = visits;\n this._visitNumber = visits.length ? visits.length - 1 : 0;\n }\n get visitNumber() {\n return this._visitNumber;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n visits: this.visits,\n visitNumber: this._visitNumber,\n type: KameleoonData.VisitsData,\n status: this.status,\n };\n }\n get isSent() {\n return true;\n }\n /**\n * Adds a single timestamp while ensuring the list remains sorted and unique\n * @param {VisitDataType} visit - The visit data to be added\n */\n set timestamp(visit) {\n ListUtilities.insertVisitInOrderedListMutably({\n list: this.visits,\n visit,\n });\n this._visitNumber = this.visits.length ? this.visits.length - 1 : 0;\n }\n updateVisitNumber(visitNumber) {\n if (visitNumber > this._visitNumber) {\n this._visitNumber = visitNumber;\n }\n }\n}\n\n/**\n * @class\n * KameleoonConversionScore - a class for creating an KCS Heat Range data\n * */\nclass KameleoonConversionScore {\n /**\n * @param {KCSType} kcs - Kameleoon Conversion Score nested object\n * */\n constructor(kcs) {\n this.kcs = kcs;\n this.status = TrackingStatus.Sent;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n kcs: this.kcs,\n type: KameleoonData.KameleoonConversionScore,\n status: this.status,\n };\n }\n}\n\nclass Personalization {\n /**\n * @param {number} id\n * @param {number} variationId\n * */\n constructor(id, variationId) {\n this.id = id;\n this.variationId = variationId;\n this.status = TrackingStatus.Sent;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n id: this.id,\n variationId: this.variationId,\n type: KameleoonData.Personalization,\n status: TrackingStatus.Sent,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Personalization instance from raw data\n * @param {PersonalizationDataType} data - a raw data\n * @return {Personalization} a Personalization instance\n * */\n static _fromRaw(data) {\n return new Personalization(data.id, data.variationId);\n }\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of Personalization instances\n * @param {VisitType} visit - a visits\n * @param {Map<number, Personalization>} dataMap - a map of Personalization instances\n * */\n static _updateFromVisit(visit, dataMap) {\n var _a;\n if ((_a = visit.personalizationEvents) === null || _a === void 0 ? void 0 : _a.length) {\n for (const personalizationEvent of visit.personalizationEvents) {\n const { id, variationId } = personalizationEvent.data;\n if (!dataMap.has(id)) {\n const personalization = new Personalization(id, variationId);\n dataMap.set(id, personalization);\n }\n }\n }\n }\n}\n\nclass CBScores {\n constructor(cbsMap) {\n this.values = new Map(Object.entries(cbsMap).map(([key, value]) => [\n Number(key),\n this.extractVarIds(value),\n ]));\n this.cbs = cbsMap;\n this.status = TrackingStatus.Sent;\n }\n extractVarIds(scores) {\n // keys = experiment IDs / values = list of variation IDs ordered descending\n // by score (there may be several variation ids with same score)\n const grouped = new Map();\n Object.entries(scores).forEach(([variationId, score]) => {\n if (!grouped.has(score)) {\n grouped.set(score, []);\n }\n grouped.get(score).push(Number(variationId));\n });\n return Array.from(grouped.entries())\n .sort(([scoreA], [scoreB]) => scoreB - scoreA)\n .map(([, ids]) => ({ ids: ids.sort((a, b) => a - b) }));\n }\n getValues() {\n return this.values;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n cbs: this.cbs,\n type: KameleoonData.CBScores,\n status: this.status,\n };\n }\n static _fromRaw(data) {\n const cbScores = new CBScores(data.cbs);\n cbScores.status = data.status;\n return cbScores;\n }\n}\n\nclass VisitProcessor {\n constructor({ filters, dataManager, visitorCode, }) {\n this.visitsData = new VisitsData([]);\n this.visitorData = [];\n this.storageVisitorData = [];\n this.experimentData = {};\n this.singleDataTypes = {\n [KameleoonData.Device]: null,\n [KameleoonData.Browser]: null,\n [KameleoonData.GeolocationData]: null,\n [KameleoonData.OperatingSystem]: null,\n [KameleoonData.KameleoonConversionScore]: null,\n [KameleoonData.CBScores]: null,\n };\n this.multipleDataTypes = {\n [KameleoonData.CustomData]: new Map(),\n [KameleoonData.PageView]: new Map(),\n [KameleoonData.Conversion]: new Map(),\n [KameleoonData.Personalization]: new Map(),\n };\n this.filters = filters;\n this.dataManager = dataManager;\n this.visitorDataTypes = dataManager.getVisitorStoredDataTypes(visitorCode);\n }\n get data() {\n return {\n visitorData: this.visitorData,\n storageVisitorData: this.storageVisitorData,\n visitsData: this.visitsData,\n experimentData: this.experimentData,\n };\n }\n processVisit(visit) {\n this.processBrowser(visit);\n this.processDevice(visit);\n this.processOperatingSystem(visit);\n this.processGeolocationData(visit);\n this.processCustomData(visit);\n this.processConversion(visit);\n this.processPageView(visit);\n this.processExperiments(visit);\n this.processPersonalization(visit);\n }\n processMultipleDataTypes() {\n for (const [dataType, data] of Object.entries(this.multipleDataTypes)) {\n if (!data.size) {\n continue;\n }\n switch (dataType) {\n case KameleoonData.PageView: {\n this.visitorData.push(...data.values());\n this.storageVisitorData.push(...data.values());\n break;\n }\n case KameleoonData.Personalization:\n case KameleoonData.Conversion: {\n this.storageVisitorData.push(...data.values());\n break;\n }\n case KameleoonData.CustomData: {\n const dataItem = data;\n dataItem.forEach((customData) => {\n this.visitorData.push(customData);\n if (!this.dataManager.storedCustomDataIndexes.has(customData.data.index)) {\n this.storageVisitorData.push(customData);\n }\n });\n break;\n }\n }\n }\n }\n processKcs(kcsData) {\n if (this.filters.kcs && kcsData) {\n const kcs = new KameleoonConversionScore(kcsData);\n this.storageVisitorData.push(kcs);\n }\n }\n processVisitsData(visit) {\n var _a;\n this.visitsData.timestamp = {\n timeStarted: visit.timeStarted,\n timeLastActivity: (_a = visit.timeLastEvent) !== null && _a !== void 0 ? _a : visit.timeStarted,\n };\n }\n processVisitNumber(visit, visitOffset) {\n var _a, _b, _c;\n if (this.visitsData.visitNumber <= visitOffset &&\n ((_a = visit.staticDataEvent) === null || _a === void 0 ? void 0 : _a.data.visitNumber)) {\n const visitNumber = (_c = (_b = visit.staticDataEvent) === null || _b === void 0 ? void 0 : _b.data.visitNumber) !== null && _c !== void 0 ? _c : 0;\n this.visitsData.updateVisitNumber(visitNumber + visitOffset);\n }\n }\n processCbs(cbsData) {\n if (this.filters.cbs && cbsData) {\n const cbs = new CBScores(cbsData);\n this.storageVisitorData.push(cbs);\n }\n }\n processBrowser(visit) {\n if (this.filters.browser && !this.singleDataTypes[KameleoonData.Browser]) {\n const browser = Browser$1._fromVisit(visit);\n if (browser) {\n if (!this.visitorDataTypes.has(KameleoonData.Browser)) {\n this.storageVisitorData.push(browser);\n }\n this.visitorData.push(browser);\n this.singleDataTypes[KameleoonData.Browser] = browser;\n }\n }\n }\n processDevice(visit) {\n if (this.filters.device && !this.singleDataTypes[KameleoonData.Device]) {\n const device = Device$1._fromVisit(visit);\n if (device) {\n if (!this.visitorDataTypes.has(KameleoonData.Device)) {\n this.storageVisitorData.push(device);\n }\n this.visitorData.push(device);\n this.singleDataTypes[KameleoonData.Device] = device;\n }\n }\n }\n processOperatingSystem(visit) {\n if (this.filters.operatingSystem &&\n !this.singleDataTypes[KameleoonData.OperatingSystem]) {\n const operatingSystem = OperatingSystem$1._fromVisit(visit);\n if (operatingSystem) {\n if (!this.visitorDataTypes.has(KameleoonData.OperatingSystem)) {\n this.storageVisitorData.push(operatingSystem);\n }\n this.visitorData.push(operatingSystem);\n this.singleDataTypes[KameleoonData.OperatingSystem] = operatingSystem;\n }\n }\n }\n processGeolocationData(visit) {\n if (this.filters.geolocation &&\n !this.singleDataTypes[KameleoonData.GeolocationData]) {\n const geolocation = GeolocationData._fromVisit(visit);\n if (geolocation) {\n if (!this.visitorDataTypes.has(KameleoonData.GeolocationData)) {\n this.storageVisitorData.push(geolocation);\n }\n this.visitorData.push(geolocation);\n this.singleDataTypes[KameleoonData.GeolocationData] = geolocation;\n }\n }\n }\n processCustomData(visit) {\n if (this.filters.customData) {\n CustomData$1._updateFromVisit(visit, this.multipleDataTypes[KameleoonData.CustomData]);\n }\n }\n processConversion(visit) {\n if (this.filters.conversions) {\n // --- Note ---\n // We collect Conversion data with only unique goalId\n Conversion$1._updateFromVisit(visit, this.multipleDataTypes[KameleoonData.Conversion]);\n // --- Note ---\n // We collect all Conversion data with goalId, revenue and negative for all visits\n const conversions = Conversion$1._listFromVisit(visit);\n if (conversions.length) {\n this.visitorData.push(...conversions);\n }\n }\n }\n processPageView(visit) {\n if (this.filters.pageViews) {\n PageView._updateFromVisit(visit, this.multipleDataTypes[KameleoonData.PageView]);\n }\n }\n processExperiments(visit) {\n if (this.filters.experiments && visit.experimentEvents) {\n for (const experimentEvent of visit.experimentEvents) {\n const { id, variationId } = experimentEvent.data;\n this.experimentData[id] = {\n variationId,\n isTargetedRule: false,\n status: TrackingStatus.Unsent,\n };\n }\n }\n }\n processPersonalization(visit) {\n if (this.filters.personalization) {\n Personalization._updateFromVisit(visit, this.multipleDataTypes[KameleoonData.Personalization]);\n }\n }\n processMappingIdentifier(visit) {\n var _a, _b;\n if (!visit) {\n return;\n }\n const timestamp = (_b = (_a = visit.customDataEvents) === null || _a === void 0 ? void 0 : _a.find((event) => event.data.mappingIdentifier)) === null || _b === void 0 ? void 0 : _b.time;\n if (timestamp && visit.visitorCode) {\n return {\n mappingIdentifier: visit.visitorCode,\n timestamp,\n };\n }\n }\n}\n\nclass Parser {\n static parseFeatureVariable(variable) {\n const { key, type, value } = variable;\n switch (type) {\n case VariableType.BOOLEAN:\n return buildExports.Ok({\n key,\n type,\n value: Boolean(value),\n });\n case VariableType.JS:\n case VariableType.CSS:\n case VariableType.STRING:\n return buildExports.Ok({\n key,\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n if (Number.isNaN(numberValue)) {\n return buildExports.Err(new KameleoonError(KameleoonException.NumberParse, String(value)));\n }\n return buildExports.Ok({\n key,\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue = JSON.parse(String(variable.value));\n return buildExports.Ok({\n key,\n type,\n value: jsonValue,\n });\n }\n catch (err) {\n return buildExports.Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n static parseVisitorData({ data, filters, visitorCode, dataManager, variationConfiguration, }) {\n const visitProcessor = new VisitProcessor({\n filters,\n dataManager,\n visitorCode,\n });\n const { currentVisit, previousVisits, kcs, cbs } = data;\n if (!(previousVisits === null || previousVisits === void 0 ? void 0 : previousVisits.length) && !currentVisit) {\n return {\n visitorData: [],\n storageVisitorData: [],\n visitsData: new VisitsData([]),\n };\n }\n if (currentVisit) {\n visitProcessor.processVisit(currentVisit);\n visitProcessor.processVisitNumber(currentVisit, 0);\n }\n previousVisits === null || previousVisits === void 0 ? void 0 : previousVisits.forEach((visit, index) => {\n visitProcessor.processVisit(visit);\n visitProcessor.processVisitsData(visit);\n visitProcessor.processVisitNumber(visit, index + 1);\n });\n visitProcessor.processKcs(kcs);\n visitProcessor.processCbs(cbs);\n visitProcessor.processMultipleDataTypes();\n const mappingIdentifier = visitProcessor.processMappingIdentifier(currentVisit !== null && currentVisit !== void 0 ? currentVisit : previousVisits === null || previousVisits === void 0 ? void 0 : previousVisits[0]);\n const { visitorData, storageVisitorData, visitsData, experimentData } = visitProcessor.data;\n variationConfiguration.updateStoredVariations(visitorCode, experimentData);\n return {\n visitorData,\n storageVisitorData,\n visitsData,\n mappingIdentifier,\n };\n }\n static parseRegExp(value) {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n return new RegExp(expression, flags);\n }\n return new RegExp(value);\n }\n static parseSecret(secret) {\n if (secret === null) {\n return 'null';\n }\n const length = secret.length;\n if (length <= SECRET_VISIBLE_LENGTH) {\n return HIDDEN_SECRET_CHAR.repeat(length);\n }\n const hiddenLength = Math.max(length - SECRET_VISIBLE_LENGTH, SECRET_VISIBLE_LENGTH);\n return (secret.substring(0, length - hiddenLength) +\n HIDDEN_SECRET_CHAR.repeat(hiddenLength));\n }\n}\n\nvar _a;\nclass ClientSettings {\n constructor(siteCode, configuration) {\n KameleoonLogger.debug `CALL: new ClientSettings(siteCode: ${siteCode}, configuration: ${configuration})`;\n this.siteCode = siteCode;\n this.environment = this.getEnvironment(configuration);\n this.networkDomain = this.getNetworkDomain(configuration);\n this.updateInterval = this.getUpdateInterval(configuration);\n this.cleanupInterval = this.getCleanupInterval(configuration);\n this.requestTimeout = this.getRequestTimeout(configuration);\n this.trackingInterval = this.getTrackingInterval(configuration);\n this.trackRetryDelay = 5 * Milliseconds.Second;\n KameleoonLogger.debug `RETURN: new ClientSettings(siteCode: ${siteCode}, configuration: ${configuration})`;\n }\n getTrackingInterval(configuration) {\n const { MIN_TRACKING_INTERVAL_MS, MAX_TRACKING_INTERVAL_MS, DEFAULT_TRACKING_INTERVAL_MS, } = ClientSettings;\n if (typeof (configuration === null || configuration === void 0 ? void 0 : configuration.trackingInterval) === 'number') {\n if (configuration.trackingInterval < MIN_TRACKING_INTERVAL_MS) {\n KameleoonLogger.warning(`Tracking interval must not be shorter than ${MIN_TRACKING_INTERVAL_MS} ms. Minimum possible interval was applied.`);\n return MIN_TRACKING_INTERVAL_MS;\n }\n if (configuration.trackingInterval > MAX_TRACKING_INTERVAL_MS) {\n KameleoonLogger.warning(`Tracking interval must not be longer than ${MAX_TRACKING_INTERVAL_MS} ms. Maximum possible interval was applied.`);\n return MAX_TRACKING_INTERVAL_MS;\n }\n return configuration.trackingInterval;\n }\n return DEFAULT_TRACKING_INTERVAL_MS;\n }\n getEnvironment(configuration) {\n if (configuration === null || configuration === void 0 ? void 0 : configuration.environment) {\n return configuration.environment;\n }\n return Environment.Production;\n }\n getCleanupInterval(configuration) {\n if (typeof (configuration === null || configuration === void 0 ? void 0 : configuration.targetingDataCleanupInterval) === 'number') {\n if (configuration.targetingDataCleanupInterval < 1) {\n KameleoonLogger.warning('Targeting data cleanup interval must not be shorter than 1 minute. Minimum possible interval was applied.');\n return 1 * Milliseconds.Minute;\n }\n return configuration.targetingDataCleanupInterval * Milliseconds.Minute;\n }\n return null;\n }\n getUpdateInterval(configuration) {\n if (typeof (configuration === null || configuration === void 0 ? void 0 : configuration.updateInterval) === 'number') {\n if (configuration.updateInterval < 1) {\n KameleoonLogger.warning('Update interval must not be shorter than 1 minute. Minimum possible interval was applied.');\n return 1 * Milliseconds.Minute;\n }\n return configuration.updateInterval * Milliseconds.Minute;\n }\n return 60 * Milliseconds.Minute;\n }\n getNetworkDomain(configuration) {\n const result = Validator.validateNetworkDomain(configuration === null || configuration === void 0 ? void 0 : configuration.networkDomain);\n if (!result.ok) {\n return null;\n }\n return result.data;\n }\n getRequestTimeout(configuration) {\n if (typeof (configuration === null || configuration === void 0 ? void 0 : configuration.requestTimeout) === 'number') {\n return configuration.requestTimeout;\n }\n return 10 * Milliseconds.Second;\n }\n get settings() {\n return {\n trackingInterval: this.trackingInterval,\n trackRetryDelay: this.trackRetryDelay,\n cleanupInterval: this.cleanupInterval,\n updateInterval: this.updateInterval,\n requestTimeout: this.requestTimeout,\n networkDomain: this.networkDomain,\n environment: this.environment,\n siteCode: this.siteCode,\n };\n }\n}\n_a = ClientSettings;\nClientSettings.DEFAULT_TRACKING_INTERVAL_MS = 1000;\nClientSettings.MIN_TRACKING_INTERVAL_MS = _a.DEFAULT_TRACKING_INTERVAL_MS;\nClientSettings.MAX_TRACKING_INTERVAL_MS = 5000;\n\n/**\n * @class\n * Cookie - a class for creating an instance for defining user's cookie\n * */\nlet Cookie$1 = class Cookie {\n /**\n * @param {CookieType[]} cookie - a list of cookies\n * */\n constructor(cookie) {\n this.cookie = cookie;\n this.status = TrackingStatus.Sent;\n }\n /**\n * @method fromString - a static method for creating an instance of `Cookie` from a string\n * @param {string} cookieString - a string containing a list of cookies\n * @returns {Cookie} an instance of `Cookie`\n * */\n static fromString(cookieString) {\n if (!cookieString) {\n return new Cookie([]);\n }\n const pairs = cookieString.split(';');\n const cookie = pairs\n .map((item) => {\n const [key, value] = item.trim().split('=');\n if (!key) {\n KameleoonLogger.warning `Cookie string has an empty key: ${cookieString}`;\n return null;\n }\n return { key, value };\n })\n .filter((item) => item !== null);\n return new Cookie(cookie);\n }\n get url() {\n return '';\n }\n get data() {\n return {\n cookie: this.cookie,\n type: KameleoonData.Cookie,\n status: this.status,\n };\n }\n};\n\n/**\n * @class\n * UserAgent - a class for creating an instance for user agent\n * */\nclass UserAgent {\n constructor(value) {\n this.value = value;\n this.status = TrackingStatus.Sent;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n value: this.value,\n type: KameleoonData.UserAgent,\n status: this.status,\n };\n }\n}\n\nclass UniqueIdentifier {\n /**\n * @param {boolean} value - a boolean value that indicates if the visitor has a unique identifier\n * */\n constructor(value) {\n this._value = value;\n this.status = TrackingStatus.Sent;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n value: this._value,\n type: KameleoonData.UniqueIdentifier,\n status: TrackingStatus.Sent,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a UniqueIdentifier instance from raw data\n * @param {IdentifierDataType} data - a raw data\n * @return {UniqueIdentifier} a UniqueIdentifier instance\n * */\n static _fromRaw(data) {\n return new UniqueIdentifier(data.value);\n }\n}\n\n/**\n * @class\n * ApplicationVersion - a class for creating an instance for app version\n * */\nlet ApplicationVersion$1 = class ApplicationVersion {\n /**\n * @param {string} version - version of mobile application\n * */\n constructor(version) {\n this.version = version;\n this.status = TrackingStatus.Sent;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n version: this.version,\n type: KameleoonData.ApplicationVersion,\n status: this.status,\n };\n }\n};\n\nclass DataProcessor {\n constructor(cleanupInterval = null, packageInfo) {\n this.cleanupInterval = cleanupInterval;\n this.packageInfo = packageInfo;\n }\n mutUpdateData({ infoData, visitorCode, mutData, dataItem, extendTtl, }) {\n let { visitorReference, data, isReference } = this.dereferenceData(mutData, visitorCode);\n if (this.packageInfo.isServer &&\n isReference &&\n !mutData[visitorReference]) {\n if (infoData.mappingIdentifiers) {\n delete infoData.mappingIdentifiers[visitorCode];\n }\n delete mutData[visitorCode];\n visitorReference = visitorCode;\n }\n let expirationTime;\n if (extendTtl) {\n expirationTime = this.cleanupInterval\n ? Date.now() + this.cleanupInterval\n : 0;\n }\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n this.updateCustomData({\n expirationTime,\n customData: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.PageView: {\n this.updatePageView({\n expirationTime,\n pageView: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.Conversion: {\n this.updateConversion({\n expirationTime,\n conversion: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.VisitsData: {\n this.updateVisitsData({\n expirationTime,\n visitsData: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.Personalization: {\n this.updatePersonalization({\n expirationTime,\n personalization: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.TargetedSegment: {\n this.updateTargetedSegment({\n expirationTime,\n targetedSegment: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n default: {\n this.updateCommonData({\n expirationTime,\n commonData: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n }\n }\n return expirationTime;\n }\n mutCleanupData(mutData, infoData) {\n var _a;\n if (!this.cleanupInterval) {\n return null;\n }\n let nextCleanupTime = 0;\n for (const [visitorCode, data] of Object.entries(mutData)) {\n if (typeof data === 'string') {\n this.removeReference({\n mutData,\n visitorCode,\n linkedVisitor: data,\n infoData,\n });\n continue;\n }\n let closestCleanupTime = 0;\n for (const key of Object.keys(data)) {\n const dataKey = key;\n let time;\n switch (dataKey) {\n case KameleoonData.CustomData:\n case KameleoonData.PageView:\n case KameleoonData.Conversion:\n case KameleoonData.Personalization: {\n time = this.deleteNestedExpiredField(data, dataKey);\n break;\n }\n default: {\n time = this.deleteExpiredField(data, dataKey);\n }\n }\n if (!closestCleanupTime || (time && time < closestCleanupTime)) {\n closestCleanupTime = time;\n }\n }\n if (!Object.keys(mutData[visitorCode]).length) {\n delete mutData[visitorCode];\n if (this.packageInfo.isServer) {\n (_a = infoData.mappingIdentifiers) !== null && _a !== void 0 ? _a : (infoData.mappingIdentifiers = {});\n delete infoData.mappingIdentifiers[visitorCode];\n }\n }\n else if (!nextCleanupTime ||\n (closestCleanupTime && closestCleanupTime < nextCleanupTime)) {\n nextCleanupTime = closestCleanupTime;\n }\n }\n return nextCleanupTime;\n }\n mutAddUnsentData({ mutData, visitorCode, dataType, }) {\n const unsentData = mutData.unsentData[visitorCode];\n if (!unsentData || !unsentData.length) {\n mutData.unsentData[visitorCode] = [dataType];\n }\n else {\n const set = new Set([...unsentData]);\n set.add(dataType);\n mutData.unsentData[visitorCode] = Array.from(set);\n }\n }\n createReference({ mutData, visitorCode, linkedVisitor, }) {\n // --- Note ---\n // Provided(linked) visitor is now pointing to the visitor code\n mutData[linkedVisitor] = visitorCode;\n }\n removeReference({ mutData, visitorCode, linkedVisitor, infoData, }) {\n if (this.packageInfo.isServer) {\n if (!mutData[linkedVisitor]) {\n delete mutData[visitorCode];\n if (infoData.mappingIdentifiers) {\n delete infoData.mappingIdentifiers[visitorCode];\n }\n }\n }\n }\n updatePageView({ visitorCode, mutData, pageView, expirationTime, }) {\n const { data } = pageView;\n const isExist = mutData[visitorCode] &&\n KameleoonData.PageView in mutData[visitorCode] &&\n data.urlAddress in mutData[visitorCode][KameleoonData.PageView];\n const parameters = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.PageView,\n nestedKey: data.urlAddress,\n value: data,\n };\n if (isExist) {\n const existingData = mutData[visitorCode][KameleoonData.PageView][data.urlAddress];\n const existingTimestamps = existingData.timestamps;\n // --- Note ---\n // Merging existing timestamps with added\n for (const existingTimestamp of existingTimestamps) {\n const { time: existingTime } = existingTimestamp;\n if (data.timestamps.some(({ time }) => time === existingTime)) {\n continue;\n }\n const index = data.timestamps.findIndex(({ time }) => time >= existingTime);\n if (index === -1) {\n data.timestamps.push(existingTimestamp);\n }\n else {\n data.timestamps.splice(index, 0, existingTimestamp);\n }\n }\n this.updateNestedField(parameters);\n }\n else {\n this.createNestedField(parameters);\n }\n }\n updateCustomData({ visitorCode, customData, mutData, expirationTime, }) {\n const { data } = customData;\n const isExist = mutData[visitorCode] && KameleoonData.CustomData in mutData[visitorCode];\n const parameters = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.CustomData,\n nestedKey: data.index.toString(),\n value: data,\n };\n if (isExist) {\n this.updateNestedField(parameters);\n }\n else {\n this.createNestedField(parameters);\n }\n }\n updateConversion({ conversion, mutData, visitorCode, expirationTime, }) {\n const { data } = conversion;\n const isExist = mutData[visitorCode] && KameleoonData.Conversion in mutData[visitorCode];\n const parameters = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.Conversion,\n nestedKey: data.id.toString(),\n value: data,\n };\n if (isExist) {\n this.updateNestedField(parameters);\n }\n else {\n this.createNestedField(parameters);\n }\n }\n updateVisitsData({ visitorCode, mutData, visitsData, expirationTime, }) {\n var _a, _b;\n const { data } = visitsData;\n const isExist = mutData[visitorCode] && KameleoonData.VisitsData in mutData[visitorCode];\n const parameters = {\n expirationTime,\n data: mutData,\n key: KameleoonData.VisitsData,\n value: data,\n visitorCode,\n };\n if (isExist) {\n const existingVisits = mutData[visitorCode][KameleoonData.VisitsData];\n // --- Note ---\n // We are preserving the order of visits\n existingVisits.visits.forEach((visit) => {\n ListUtilities.insertVisitInOrderedListMutably({\n list: data.visits,\n visit: visit,\n });\n });\n const visitNumber = Math.max((_a = data.visitNumber) !== null && _a !== void 0 ? _a : data.visits.length - 1, data.visits.length - 1, (_b = existingVisits.visitNumber) !== null && _b !== void 0 ? _b : 0);\n this.updateField(Object.assign(Object.assign({}, parameters), { value: Object.assign(Object.assign({}, data), { visits: data.visits, visitNumber: visitNumber }) }));\n }\n else {\n this.createField(parameters);\n }\n }\n updatePersonalization({ visitorCode, mutData, personalization, expirationTime, }) {\n const { data } = personalization;\n const isExist = mutData[visitorCode] &&\n KameleoonData.Personalization in mutData[visitorCode];\n const parameters = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.Personalization,\n nestedKey: data.id.toString(),\n value: data,\n };\n if (isExist) {\n this.updateNestedField(parameters);\n }\n else {\n this.createNestedField(parameters);\n }\n }\n updateTargetedSegment({ visitorCode, mutData, targetedSegment, expirationTime, }) {\n const { data } = targetedSegment;\n const isExist = mutData[visitorCode] &&\n KameleoonData.TargetedSegment in mutData[visitorCode];\n const parameters = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.TargetedSegment,\n nestedKey: data.id.toString(),\n value: data,\n };\n if (isExist) {\n this.updateNestedField(parameters);\n }\n else {\n this.createNestedField(parameters);\n }\n }\n updateCommonData({ visitorCode, mutData, commonData, expirationTime, }) {\n const { data } = commonData;\n const isExist = mutData[visitorCode] && data.type in mutData[visitorCode];\n const parameters = {\n expirationTime,\n data: mutData,\n key: data.type,\n visitorCode,\n value: data,\n };\n if (isExist) {\n this.updateField(parameters);\n }\n else {\n this.createField(parameters);\n }\n }\n dereferenceData(data, visitorCode) {\n // --- Note ---\n // Visitor reference can not point to another visitor reference\n if (typeof data[visitorCode] === 'string') {\n return {\n visitorReference: data[visitorCode],\n data: data,\n isReference: true,\n };\n }\n return {\n visitorReference: visitorCode,\n data: data,\n isReference: false,\n };\n }\n deleteExpiredField(data, key) {\n if (!data) {\n return 0;\n }\n const dataKey = key;\n const isExpired = data[dataKey].expirationTime < Date.now();\n if (!isExpired) {\n return data[dataKey].expirationTime;\n }\n delete data[dataKey];\n return 0;\n }\n deleteNestedExpiredField(data, key) {\n if (!data[key]) {\n return 0;\n }\n const existingData = data[key];\n let closestCleanupTime;\n for (const [nestedKey, value] of Object.entries(existingData)) {\n if (!value) {\n continue;\n }\n const isExpired = value.expirationTime < Date.now();\n if (isExpired) {\n delete existingData[nestedKey];\n }\n else if (!closestCleanupTime ||\n value.expirationTime < closestCleanupTime) {\n closestCleanupTime = value.expirationTime;\n }\n }\n if (!Object.keys(existingData).length) {\n delete data[key];\n }\n return closestCleanupTime;\n }\n updateField({ key, value, data, visitorCode, expirationTime, }) {\n var _a;\n const existing = data[visitorCode][key];\n data[visitorCode][key] = Object.assign(Object.assign({}, value), { expirationTime: (_a = expirationTime !== null && expirationTime !== void 0 ? expirationTime : (existing.expirationTime && existing.expirationTime)) !== null && _a !== void 0 ? _a : Date.now() });\n }\n createField({ key, value, data, visitorCode, expirationTime, }) {\n data[visitorCode] = Object.assign(Object.assign({}, data[visitorCode]), { [key]: Object.assign(Object.assign({}, value), { expirationTime }) });\n }\n updateNestedField({ key, nestedKey, value, data, visitorCode, expirationTime, }) {\n var _a;\n const existing = data[visitorCode][key][nestedKey];\n data[visitorCode][key][nestedKey] = Object.assign(Object.assign({}, value), { expirationTime: (_a = expirationTime !== null && expirationTime !== void 0 ? expirationTime : existing === null || existing === void 0 ? void 0 : existing.expirationTime) !== null && _a !== void 0 ? _a : Date.now() });\n }\n createNestedField({ key, nestedKey, value, data, visitorCode, expirationTime, }) {\n var _a;\n if (!((_a = data[visitorCode]) === null || _a === void 0 ? void 0 : _a[key])) {\n data[visitorCode] = Object.assign(Object.assign({}, data[visitorCode]), { [key]: {\n [nestedKey]: Object.assign(Object.assign({}, value), { expirationTime }),\n } });\n }\n else {\n data[visitorCode] = Object.assign(Object.assign({}, data[visitorCode]), { [key]: Object.assign(Object.assign({}, data[visitorCode][key]), { [nestedKey]: Object.assign(Object.assign({}, value), { expirationTime }) }) });\n }\n }\n}\n\n/**\n * @class\n * StaticData - a class for creating static data for Kameleoon.\n * */\nclass StaticData {\n constructor({ browserType, visitNumber, timeSincePreviousVisit, os, deviceType, browserVersion, }) {\n this.browserType = browserType;\n this.visitNumber = visitNumber;\n this.timeSincePreviousVisit = timeSincePreviousVisit;\n this.os = os;\n this.deviceType = deviceType;\n this.browserVersion = browserVersion;\n }\n get url() {\n const browserVersion = this.browserVersion\n ? UrlParameter.BrowserVersion + this.browserVersion\n : '';\n const browserType = this.browserType\n ? UrlParameter.Browser + this.browserType\n : '';\n const browserIndex = this.browserType\n ? UrlParameter.BrowserIndex + BrowserIndexMap[this.browserType]\n : '';\n const os = this.os ? UrlParameter.Os + this.os : '';\n const osIndex = this.os\n ? UrlParameter.OsIndex + OperatingSystemIndexMap[this.os]\n : '';\n const deviceType = this.deviceType\n ? UrlParameter.DeviceType + this.deviceType\n : '';\n const visitNumber = this.visitNumber !== undefined\n ? UrlParameter.VisitNumber + this.visitNumber\n : '';\n const timeSincePreviousVisit = this.timeSincePreviousVisit !== undefined\n ? UrlParameter.TimeSincePreviousVisit + this.timeSincePreviousVisit\n : '';\n return (UrlEventType.StaticData +\n browserType +\n browserIndex +\n browserVersion +\n visitNumber +\n timeSincePreviousVisit +\n os +\n osIndex +\n deviceType);\n }\n}\n\nclass ConditionFactoryInstance {\n static setConditionFactoryInstance(value) {\n this.conditionFactoryInstance = value;\n }\n static createCondition(data) {\n return this.conditionFactoryInstance.createCondition(data);\n }\n}\n\nclass Node {\n constructor(value, left, right) {\n var _a;\n this.inverseResult = false;\n if (this.isOperator(value)) {\n this.nodeValue = value;\n }\n else {\n const result = ConditionFactoryInstance.createCondition(value);\n this.inverseResult = !((_a = value.isInclude) !== null && _a !== void 0 ? _a : true);\n if (result.ok) {\n this.nodeValue = result.data;\n }\n else {\n this.nodeError = result.error;\n }\n }\n this.leftChild = left;\n this.rightChild = right;\n }\n get value() {\n return this.nodeValue;\n }\n get error() {\n return this.nodeError;\n }\n get left() {\n return this.leftChild;\n }\n get right() {\n return this.rightChild;\n }\n get inverse() {\n return this.inverseResult;\n }\n isOperator(value) {\n return value === Operator.And || value === Operator.Or;\n }\n}\n\nclass Tree {\n constructor(segment) {\n this.error = null;\n this.targetingTypes = new Set();\n KameleoonLogger.debug `CALL: new Tree(segment: ${segment})`;\n const { nestedConditions, topLevelOperators } = this.flattenSegment(segment);\n // --- Note ---\n // - Targeting tree is built bottom-up, it's the only way to both get the consistent logic\n // (grouping nested conditions) and have human readable tree representation.\n // - Here is an example of how tree is built (we use strict complete binary tree)\n // Let's say we have such a condition `value < 10 || value > 20 && value < 30`\n // Following is pseudo code for building tree:\n //\n // `const operators = [Operator.Or, Operator.And]`\n // `const conditions = [\n // {type: Condition.Less, value: 10},\n // {type: Condition.Greater, value: 20},\n // {type: Condition.Less, value: 30},\n // ]`\n //\n // After the first iteration we have node like this:\n // AND\n // / \\\n // <30 >20\n //\n // After the second iteration tree looks as follows:\n // OR\n // / \\\n // AND <10\n // / \\\n // <30 >20\n //\n // As you can see Leaf Nodes contain conditions and Non-Leaf Nodes contain logical operators\n const nestedNodes = nestedConditions.map(({ conditions, operators }) => {\n const nodes = conditions.map((condition) => {\n // --- Note ---\n // We keep condition types to optimize\n // some external operations depending on what conditions are present\n // in a tree\n this.targetingTypes.add(condition.targetingType);\n return new Node(condition);\n });\n return this.buildTree(nodes, operators);\n });\n this.tree = this.buildTree(nestedNodes, topLevelOperators);\n KameleoonLogger.debug `RETURN: new Tree(segment: ${segment})`;\n }\n evaluate(data) {\n const result = this.evaluateNode(this.tree, data);\n if (this.error) {\n return buildExports.Err(this.error);\n }\n return buildExports.Ok(result);\n }\n hasTargetingType(targetingType) {\n return this.targetingTypes.has(targetingType);\n }\n evaluateNode(node, data) {\n if (this.isLeafNode(node)) {\n if (node.error) {\n // --- Note ---\n // Non-existing condition should not break targeting tree\n // instead it should be treated as `true` condition\n if (node.error.type === KameleoonException.TargetingCondition) {\n return true;\n }\n return false;\n }\n const result = node.value.evaluate(data);\n if (!result.ok) {\n this.error = result.error;\n return false;\n }\n return node.inverse ? !result.data : result.data;\n }\n if (this.isNonLeafNode(node)) {\n switch (node.value) {\n case Operator.And: {\n return (this.evaluateNode(node.left, data) &&\n this.evaluateNode(node.right, data));\n }\n case Operator.Or: {\n return (this.evaluateNode(node.left, data) ||\n this.evaluateNode(node.right, data));\n }\n }\n }\n return false;\n }\n isLeafNode(node) {\n return !Boolean(node.left && node.right);\n }\n isNonLeafNode(node) {\n return Boolean(node.left &&\n node.right &&\n (node.value === Operator.Or || node.value === Operator.And));\n }\n // --- Note ---\n // This method mutates `nodes` array\n // It's done for the sake of performance\n buildTree(nodes, operators) {\n if (nodes.length === 1) {\n return nodes[0];\n }\n for (const operator of operators) {\n const left = nodes.shift();\n const right = nodes.shift();\n const newNode = new Node(operator, left, right);\n nodes.unshift(newNode);\n }\n return nodes[0];\n }\n flattenSegment(segment) {\n const { firstLevel: conditions, firstLevelOrOperators: operators } = segment.conditionsData;\n const nestedConditions = [];\n conditions.forEach((condition) => {\n const { conditions: conditionList, orOperators } = condition;\n const group = {\n operators: this.convertOperators(orOperators),\n conditions: conditionList,\n };\n nestedConditions.push(group);\n });\n return {\n topLevelOperators: this.convertOperators(operators),\n nestedConditions,\n };\n }\n convertOperators(operators) {\n return operators.map((operator) => (operator ? Operator.Or : Operator.And));\n }\n}\n\nclass Device {\n constructor({ device }) {\n this.device = device;\n }\n evaluate({ targetingData, }) {\n const deviceData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.Device];\n if (deviceData) {\n const { device } = deviceData;\n return buildExports.Ok(device === this.device);\n }\n return buildExports.Ok(false);\n }\n}\n\nclass Browser {\n constructor({ browser, version, versionMatchType }) {\n this.browser = browser;\n this.version = version;\n this.versionMatchType = versionMatchType;\n }\n evaluate({ targetingData, }) {\n const browserData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.Browser];\n if (browserData) {\n const result = this.checkCondition(browserData);\n if (this.error) {\n return buildExports.Err(this.error);\n }\n return buildExports.Ok(result);\n }\n return buildExports.Ok(false);\n }\n checkCondition(browserData) {\n const { browser, version } = browserData;\n if (typeof this.browser !== 'string') {\n return false;\n }\n if (!this.version) {\n return browser === this.browser;\n }\n if (!this.versionMatchType || typeof version !== 'number') {\n return false;\n }\n const parsedVersion = parseFloat(this.version);\n if (isNaN(parsedVersion)) {\n KameleoonLogger.error `Failed to parse version: ${this.version} in Browser condition`;\n this.error = new KameleoonError(KameleoonException.VersionParse, this.version);\n }\n switch (this.versionMatchType) {\n case VersionMatchType.EQUAL:\n return browser === this.browser && version === parsedVersion;\n case VersionMatchType.GREATER:\n return browser === this.browser && version > parsedVersion;\n case VersionMatchType.LOWER:\n return browser === this.browser && version < parsedVersion;\n default:\n KameleoonLogger.error `Unexpected comparing operation for Browser condition: ${this.versionMatchType}`;\n exhaustCheck(this.versionMatchType);\n }\n }\n}\n\nclass Conversion {\n constructor({ goalId }) {\n this.conditionValue = goalId;\n }\n evaluate({ targetingData, }) {\n const conversionData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.Conversion];\n if (!this.conditionValue) {\n return buildExports.Ok(false);\n }\n if (conversionData) {\n if (Object.keys(conversionData).length && this.conditionValue === -1) {\n return buildExports.Ok(true);\n }\n const conversions = Object.values(conversionData);\n return buildExports.Ok(conversions.some((conversion) => {\n if (!conversion) {\n return false;\n }\n return conversion.goalId === this.conditionValue;\n }));\n }\n return buildExports.Ok(false);\n }\n}\n\nclass CustomData {\n constructor({ customDataIndex, valueMatchType, value, range, }) {\n this.customDataIndex = customDataIndex ? Number(customDataIndex) : -1;\n this.matchType = valueMatchType;\n this.conditionValue = value;\n this.range = range;\n }\n evaluate({ targetingData, }) {\n var _a;\n const customData = (_a = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.CustomData]) === null || _a === void 0 ? void 0 : _a[this.customDataIndex];\n if (this.matchType === ValueMatchType.UNDEFINED) {\n return buildExports.Ok(!customData);\n }\n if (customData) {\n const { value: customDataValue } = customData;\n const result = this.checkCondition(customDataValue);\n if (this.error) {\n return buildExports.Err(this.error);\n }\n return buildExports.Ok(result);\n }\n return buildExports.Ok(false);\n }\n checkCondition(customDataValue) {\n if (typeof this.conditionValue !== 'string' &&\n this.matchType !== ValueMatchType.TRUE &&\n this.matchType !== ValueMatchType.FALSE &&\n this.matchType !== ValueMatchType.RANGE) {\n KameleoonLogger.error `Unexpected condition value for CustomData condition: ${this.conditionValue}`;\n return false;\n }\n // --- Note ---\n // `TRUE`/`FALSE`/`RANGE` do not use condition value\n // so we can safely assume that `this.conditionValue` is a string at this point\n // for other match types\n const conditionValue = this.conditionValue;\n // --- Note ---\n // `AMONG_VALUES` and `RANGE` are checked separately to avoid recursion overhead\n // for `JSON.parse` inside `this.parseArray`\n if (this.matchType === ValueMatchType.AMONG_VALUES) {\n const result = this.parseArray(conditionValue);\n if (!result.ok) {\n this.error = result.error;\n return false;\n }\n const resultData = new Set(result.data);\n return Array.isArray(customDataValue)\n ? customDataValue.some((value) => resultData.has(value))\n : result.data.includes(customDataValue);\n }\n if (this.matchType === ValueMatchType.RANGE) {\n const result = this.parseRange(this.range);\n if (!result.ok) {\n this.error = result.error;\n return false;\n }\n const [lowerBound, upperBound] = result.data;\n const isInRange = (value) => value >= lowerBound && value <= upperBound;\n return Array.isArray(customDataValue)\n ? customDataValue.some((value) => isInRange(Number(value)))\n : isInRange(Number(customDataValue));\n }\n if (Array.isArray(customDataValue)) {\n return customDataValue.some((value) => this.checkCondition(value));\n }\n switch (this.matchType) {\n case ValueMatchType.CONTAINS:\n return customDataValue.includes(conditionValue);\n case ValueMatchType.EXACT:\n return customDataValue === this.conditionValue;\n case ValueMatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(conditionValue).test(customDataValue);\n case ValueMatchType.LOWER:\n return Number(customDataValue) < Number(this.conditionValue);\n case ValueMatchType.EQUAL:\n return Number(customDataValue) === Number(this.conditionValue);\n case ValueMatchType.GREATER:\n return Number(customDataValue) > Number(this.conditionValue);\n case ValueMatchType.TRUE:\n return customDataValue.toLowerCase() === 'true';\n case ValueMatchType.FALSE:\n return customDataValue.toLowerCase() === 'false';\n default:\n KameleoonLogger.error `Unexpected comparing operation for CustomData condition: ${this.matchType}`;\n return false;\n }\n }\n parseArray(value) {\n try {\n const result = JSON.parse(value);\n if (Array.isArray(result)) {\n return buildExports.Ok(result);\n }\n }\n catch (err) {\n KameleoonLogger.error `Failed to parse array: ${value} in CustomData condition`;\n return buildExports.Err(new KameleoonError(KameleoonException.AmongValuesCheck, err, value));\n }\n return buildExports.Ok([]);\n }\n parseRange(array) {\n if (!array || array.length !== 2) {\n KameleoonLogger.error `Failed to parse range: ${array} in CustomData condition`;\n return buildExports.Err(new KameleoonError(KameleoonException.RangeCheck, array));\n }\n return buildExports.Ok(array);\n }\n}\n\nclass PageUtils {\n static getLatest(pageViewData) {\n return Object.values(pageViewData).reduce((latest, current) => latest.timestamps[latest.timestamps.length - 1].time >\n current.timestamps[current.timestamps.length - 1].time\n ? latest\n : current);\n }\n}\n\nclass PageTitle {\n constructor({ matchType, title }) {\n this.matchType = matchType;\n this.conditionValue = title;\n }\n evaluate({ targetingData, }) {\n const pageViewData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.PageView];\n if (!pageViewData) {\n return buildExports.Ok(false);\n }\n const latestPageView = PageUtils.getLatest(pageViewData);\n return buildExports.Ok(this.checkCondition(latestPageView.title));\n }\n checkCondition(title) {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return title.includes(this.conditionValue);\n case MatchType.EXACT:\n return title === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(title);\n default:\n KameleoonLogger.error `Unexpected comparing operation for PageTitle condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass PageUrl {\n constructor({ matchType, url }) {\n this.matchType = matchType;\n this.conditionValue = url;\n }\n evaluate({ targetingData, }) {\n const pageViewData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.PageView];\n if (!pageViewData) {\n return buildExports.Ok(false);\n }\n const latestPageView = PageUtils.getLatest(pageViewData);\n return buildExports.Ok(this.checkCondition(latestPageView.urlAddress));\n }\n checkCondition(url) {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return url.includes(this.conditionValue);\n case MatchType.EXACT:\n return url === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(url);\n default:\n KameleoonLogger.error `Unexpected comparing operation for PageUrl condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass SdkLanguage {\n constructor({ sdkLanguage, version, versionMatchType }) {\n this.sdkLanguage = sdkLanguage;\n this.conditionValue = version;\n this.versionMatchType = versionMatchType;\n }\n evaluate({ sdkInfo, }) {\n return this.checkCondition(sdkInfo);\n }\n checkCondition(sdkInfo) {\n const { type: sdkType, version } = sdkInfo;\n if (!this.sdkLanguage) {\n return buildExports.Ok(false);\n }\n if (typeof this.conditionValue !== 'string') {\n return buildExports.Ok(sdkType === this.sdkLanguage);\n }\n if (!this.versionMatchType) {\n return buildExports.Ok(false);\n }\n if (sdkType !== this.sdkLanguage) {\n return buildExports.Ok(false);\n }\n const result = Utilities.compareSemVer({\n version,\n compareVersion: this.conditionValue,\n operator: this.versionMatchType,\n });\n if (!result.ok) {\n return buildExports.Err(result.error);\n }\n return buildExports.Ok(result.data);\n }\n}\n\nclass VisitorCode {\n constructor({ visitorCode, matchType }) {\n this.matchType = matchType;\n this.conditionValue = visitorCode;\n }\n evaluate({ visitorCode, }) {\n return buildExports.Ok(this.checkCondition(visitorCode));\n }\n checkCondition(visitorCode) {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return visitorCode.includes(this.conditionValue);\n case MatchType.EXACT:\n return visitorCode === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(visitorCode);\n default:\n KameleoonLogger.error `Unexpected comparing operation for VisitorCode condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass Cookie {\n constructor({ name, value, nameMatchType, valueMatchType, }) {\n this.cookie = {\n key: name !== null && name !== void 0 ? name : undefined,\n value: value !== null && value !== void 0 ? value : undefined,\n };\n this.keyMatchType = nameMatchType;\n this.valueMatchType = valueMatchType;\n }\n evaluate({ targetingData, }) {\n var _a;\n const isEmptyCookie = !this.cookie.key && !this.cookie.value;\n const isValidMatchType = Boolean(this.valueMatchType) && Boolean(this.keyMatchType);\n if (isEmptyCookie || !isValidMatchType) {\n return buildExports.Ok(false);\n }\n const extractedCookie = this.extractCookie();\n const cookieData = ((_a = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.Cookie]) === null || _a === void 0 ? void 0 : _a.cookie) || [];\n return buildExports.Ok(extractedCookie.some((pair) => this.checkCondition(pair)) ||\n cookieData.some((pair) => this.checkCondition(pair)));\n }\n extractCookie() {\n if (typeof document !== 'undefined' && document.cookie) {\n return Cookie$1.fromString(document.cookie).data.cookie;\n }\n return [];\n }\n checkCondition(dataCookie) {\n const cookieMatchType = this.keyMatchType;\n const { key, value } = dataCookie;\n if (cookieMatchType === NameMatchType.OPTIONAL) {\n const conditionCookie = this.cookie;\n return this.isOptionalCookie(conditionCookie)\n ? this.compareCookieValue(value, conditionCookie.value)\n : false;\n }\n const { key: compareKey, value: compareValue } = this.cookie;\n let keyMatch;\n switch (cookieMatchType) {\n case NameMatchType.EXACT:\n keyMatch = key === compareKey;\n break;\n case NameMatchType.CONTAINS:\n keyMatch = key.includes(compareKey);\n break;\n case NameMatchType.REGULAR_EXPRESSION:\n keyMatch = Parser.parseRegExp(compareKey).test(key);\n break;\n default:\n KameleoonLogger.error `Unexpected comparing operation for Cookie condition: ${cookieMatchType}`;\n exhaustCheck(cookieMatchType);\n }\n return keyMatch && this.compareCookieValue(value, compareValue);\n }\n compareCookieValue(value, compareValue) {\n const valueMatchType = this.valueMatchType;\n switch (valueMatchType) {\n case ValueMatchType.EXACT:\n return value === compareValue;\n case ValueMatchType.CONTAINS:\n return value.includes(compareValue);\n case ValueMatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(compareValue).test(value);\n default:\n KameleoonLogger.error `Unexpected comparing operation for Cookie condition: ${valueMatchType}`;\n return false;\n }\n }\n isOptionalCookie(cookie) {\n const { value } = cookie;\n return typeof value !== 'undefined';\n }\n}\n\nclass OperatingSystem {\n constructor({ os }) {\n this.operatingSystem = os;\n }\n evaluate({ targetingData, }) {\n const operatingSystemData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.OperatingSystem];\n if (operatingSystemData) {\n const { operatingSystem } = operatingSystemData;\n return buildExports.Ok(operatingSystem === this.operatingSystem);\n }\n return buildExports.Ok(false);\n }\n}\n\n// --- Note ---\n// `GeolocationCondition` uses `Condition` in the naming to avoid confusion with\n// native `Geolocation` API\nclass GeolocationCondition {\n constructor({ country, region, city }) {\n this.country = country;\n this.region = region;\n this.city = city;\n }\n evaluate({ targetingData, }) {\n const geolocationData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.GeolocationData];\n if (geolocationData) {\n const { country: dataCountry, region: dataRegion, city: dataCity, } = geolocationData;\n const [conditionCountry, conditionRegion, conditionCity] = [\n this.country,\n this.region,\n this.city,\n ];\n if (!conditionCountry || !dataCountry) {\n return buildExports.Ok(false);\n }\n const result = dataCountry.toLowerCase() === conditionCountry.toLowerCase() &&\n (!conditionRegion ||\n (dataRegion === null || dataRegion === void 0 ? void 0 : dataRegion.toLowerCase()) === conditionRegion.toLowerCase()) &&\n (!conditionCity ||\n (dataCity === null || dataCity === void 0 ? void 0 : dataCity.toLowerCase()) === conditionCity.toLowerCase());\n return buildExports.Ok(result);\n }\n return buildExports.Ok(false);\n }\n}\n\nclass Segment {\n constructor({ segmentId }) {\n this.segmentId = segmentId;\n }\n evaluate(evaluationData) {\n const { segments, trees } = evaluationData;\n if (!this.segmentId) {\n return buildExports.Ok(false);\n }\n const segment = segments === null || segments === void 0 ? void 0 : segments.get(this.segmentId.toString());\n if (!segment) {\n return buildExports.Ok(false);\n }\n const tree = trees === null || trees === void 0 ? void 0 : trees.get(this.segmentId.toString());\n if (tree) {\n return tree.evaluate(evaluationData);\n }\n return new Tree(segment).evaluate(evaluationData);\n }\n}\n\nclass TargetFeatureFlag {\n constructor({ featureFlagId, variationKey, ruleId }) {\n this.featureId = featureFlagId;\n this.ruleId = ruleId;\n this.variationKey = variationKey;\n }\n evaluate({ variationData, ruleMap, }) {\n var _a, _b, _c, _d;\n if (!this.featureId || !ruleMap) {\n return buildExports.Ok(false);\n }\n // -- Visitor took part in any experiment of the feature flag\n // with any variation\n if (this.featureId && !this.ruleId && !this.variationKey) {\n for (const [_, rule] of ruleMap) {\n const { featureId, experimentId } = rule;\n if (featureId === this.featureId &&\n typeof ((_a = variationData[experimentId]) === null || _a === void 0 ? void 0 : _a.variationId) === 'number') {\n return buildExports.Ok(true);\n }\n }\n return buildExports.Ok(false);\n }\n // -- Visitor took part in certain experiment of the feature flag\n // with any/exact variation\n if (this.featureId && this.ruleId) {\n const rule = ruleMap.get(this.ruleId);\n if (!rule) {\n return buildExports.Ok(false);\n }\n const { experimentId, variations } = rule;\n if (this.variationKey) {\n const variationId = variations.get(this.variationKey);\n return buildExports.Ok(Boolean(variationId) &&\n ((_b = variationData[experimentId]) === null || _b === void 0 ? void 0 : _b.variationId) === variationId);\n }\n return buildExports.Ok(Boolean((_c = variationData[rule.experimentId]) === null || _c === void 0 ? void 0 : _c.variationId));\n }\n // -- Visitor took part in any experiment of the feature flag\n // with certain variation\n if (this.featureId && !this.ruleId && this.variationKey) {\n for (const [_, rule] of ruleMap) {\n const { featureId, experimentId, variations } = rule;\n if (featureId === this.featureId && variations.has(this.variationKey)) {\n const variationId = variations.get(this.variationKey);\n return buildExports.Ok(Boolean(variationId) &&\n ((_d = variationData[experimentId]) === null || _d === void 0 ? void 0 : _d.variationId) === variationId);\n }\n }\n }\n return buildExports.Ok(false);\n }\n}\n\nclass PreviousPage {\n constructor({ matchType, url }) {\n this.conditionValue = url;\n this.matchType = matchType;\n }\n evaluate({ targetingData, }) {\n const pageViewsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.PageView];\n if (!pageViewsData) {\n return buildExports.Ok(false);\n }\n // --- Note ---\n // There is more concise way to find previous latest page, but it's less performant,\n // here we only ever check two latest timestamps of page and use one loop\n // The second latest can't be equal to the latest\n const secondLatestPageView = this.getSecondLatestPageView(Object.values(pageViewsData));\n if (!secondLatestPageView) {\n return buildExports.Ok(false);\n }\n const url = secondLatestPageView.urlAddress;\n return buildExports.Ok(this.checkCondition(url));\n }\n checkCondition(url) {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return url.includes(this.conditionValue);\n case MatchType.EXACT:\n return url === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(url);\n default:\n KameleoonLogger.error `Unexpected comparing operation for PreviousPage condition: ${this.matchType}`;\n return false;\n }\n }\n getSecondLatestPageView(pageViewsData) {\n if (pageViewsData.length < 2) {\n return undefined;\n }\n // --- Note ---\n // Arguments and variables named with abbreviations for better readability\n // `second` in this context is `second to latest`\n let latestPV;\n let secondPV;\n pageViewsData.forEach((currentPV) => {\n const currentLatestTs = currentPV.timestamps[currentPV.timestamps.length - 1].time;\n // -- Initial check\n if (!latestPV) {\n latestPV = currentPV;\n return;\n }\n const latestTs = latestPV.timestamps[latestPV.timestamps.length - 1].time;\n // -- Covering a case where latest needs to be updated\n if (currentLatestTs > latestTs) {\n secondPV = latestPV;\n latestPV = currentPV;\n return;\n }\n // -- Covering a case where only second needs to be updated\n const secondTs = secondPV\n ? secondPV.timestamps[secondPV.timestamps.length - 1].time\n : 0;\n // -- Second may need to be updated\n if (currentLatestTs > secondTs) {\n secondPV = currentPV;\n }\n });\n return secondPV;\n }\n}\n\nclass VisitedPages {\n constructor({ matchType, pageCount }) {\n this.matchType = matchType;\n this.conditionValue = pageCount;\n }\n evaluate({ targetingData, }) {\n const pageViewsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.PageView];\n if (!pageViewsData) {\n return buildExports.Ok(false);\n }\n let pagesAmount = 0;\n Object.values(pageViewsData).forEach((pageView) => {\n pagesAmount += pageView.timestamps.length;\n });\n return buildExports.Ok(this.checkCondition(pagesAmount));\n }\n checkCondition(pagesAmount) {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n switch (this.matchType) {\n case MatchType.EQUAL:\n return pagesAmount === this.conditionValue;\n case MatchType.GREATER:\n return pagesAmount > this.conditionValue;\n case MatchType.LOWER:\n return pagesAmount < this.conditionValue;\n default:\n KameleoonLogger.error `Unexpected comparing operation for VisitedPages condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass FirstVisit {\n constructor({ matchType, count, unitOfTime }) {\n this.matchType = matchType;\n this.conditionValue = count;\n this.timeUnit = unitOfTime;\n }\n evaluate({ targetingData, sdkInfo, }) {\n const visitsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.VisitsData];\n if (sdkInfo.isServer\n ? !(visitsData === null || visitsData === void 0 ? void 0 : visitsData.visits.length)\n : !(visitsData === null || visitsData === void 0 ? void 0 : visitsData.visits) || visitsData.visits.length < 2) {\n return buildExports.Ok(false);\n }\n const firstVisit = visitsData.visits[0];\n return buildExports.Ok(this.checkCondition(typeof firstVisit === 'number' ? firstVisit : firstVisit.timeStarted));\n }\n checkCondition(firstVisitTimestamp) {\n if (!this.matchType ||\n typeof this.conditionValue !== 'number' ||\n !this.timeUnit) {\n return false;\n }\n const elapsedTimeMilliseconds = Date.now() - firstVisitTimestamp;\n const elapsedTimeUnit = Utilities.convertTimeUnit(elapsedTimeMilliseconds, this.timeUnit);\n switch (this.matchType) {\n case MatchType.GREATER:\n return elapsedTimeUnit > this.conditionValue;\n case MatchType.LOWER:\n return elapsedTimeUnit < this.conditionValue;\n default:\n KameleoonLogger.error `Unexpected comparing operation for FirstVisit condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass LastVisit {\n constructor({ matchType, count, unitOfTime }) {\n this.matchType = matchType;\n this.conditionValue = count;\n this.timeUnit = unitOfTime;\n }\n evaluate({ targetingData, sdkInfo, }) {\n const visitsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.VisitsData];\n if (sdkInfo.isServer\n ? !(visitsData === null || visitsData === void 0 ? void 0 : visitsData.visits.length)\n : !(visitsData === null || visitsData === void 0 ? void 0 : visitsData.visits) || visitsData.visits.length < 2) {\n return buildExports.Ok(false);\n }\n const visits = visitsData.visits;\n // --- Note ---\n // Takes the timestamp of latest previous visit\n const indexLastVisit = sdkInfo.isServer\n ? visits.length - 1\n : visits.length - 2;\n const latestPreviousVisit = visits[indexLastVisit];\n return buildExports.Ok(this.checkCondition(typeof latestPreviousVisit === 'number'\n ? latestPreviousVisit\n : latestPreviousVisit.timeStarted));\n }\n checkCondition(lastVisitTimestamp) {\n if (!this.matchType ||\n typeof this.conditionValue !== 'number' ||\n !this.timeUnit) {\n return false;\n }\n const elapsedTimeMilliseconds = Date.now() - lastVisitTimestamp;\n const elapsedTimeUnit = Utilities.convertTimeUnit(elapsedTimeMilliseconds, this.timeUnit);\n switch (this.matchType) {\n case MatchType.GREATER:\n return elapsedTimeUnit > this.conditionValue;\n case MatchType.LOWER:\n return elapsedTimeUnit < this.conditionValue;\n default:\n KameleoonLogger.error `Unexpected comparing operation for LastVisit condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass SameDayVisits {\n constructor({ matchType, visitCount }) {\n this.matchType = matchType;\n this.conditionValue = visitCount;\n }\n evaluate({ targetingData, sdkInfo, }) {\n const visitsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.VisitsData];\n if (!visitsData) {\n return buildExports.Ok(false);\n }\n let todayVisits = 0;\n const todayTimestamp = new Date().setHours(0, 0, 0, 0);\n const { visits } = visitsData;\n visits.forEach((item) => {\n let timeStarted;\n if (typeof item === 'number') {\n timeStarted = item;\n }\n else {\n timeStarted = item.timeStarted;\n }\n if (timeStarted >= todayTimestamp) {\n todayVisits++;\n }\n });\n if (sdkInfo.isServer) {\n // --- Note ---\n // +1 is current visit\n todayVisits += 1;\n }\n return buildExports.Ok(this.checkCondition(todayVisits));\n }\n checkCondition(todayVisitsAmount) {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n switch (this.matchType) {\n case MatchType.EQUAL:\n return todayVisitsAmount === this.conditionValue;\n case MatchType.GREATER:\n return todayVisitsAmount > this.conditionValue;\n case MatchType.LOWER:\n return todayVisitsAmount < this.conditionValue;\n default:\n KameleoonLogger.error `Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass Visits {\n constructor({ matchType, visitCount }) {\n this.matchType = matchType;\n this.conditionValue = visitCount;\n }\n evaluate({ targetingData, sdkInfo, }) {\n const visitsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.VisitsData];\n if (!visitsData) {\n return buildExports.Ok(false);\n }\n // --- Note ---\n // +1 is current visit for server sdk\n const visits = visitsData.visits.length + (sdkInfo.isServer ? 1 : 0);\n return buildExports.Ok(this.checkCondition(visits));\n }\n checkCondition(visitsAmount) {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n switch (this.matchType) {\n case MatchType.EQUAL:\n return visitsAmount === this.conditionValue;\n case MatchType.GREATER:\n return visitsAmount > this.conditionValue;\n case MatchType.LOWER:\n return visitsAmount < this.conditionValue;\n default:\n KameleoonLogger.error `Unexpected comparing operation for Visits condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass NewVisitor {\n constructor({ visitorType }) {\n this.visitorType = visitorType;\n }\n evaluate({ targetingData, sdkInfo, }) {\n const visitsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.VisitsData];\n if (!visitsData || !this.visitorType) {\n return buildExports.Ok(false);\n }\n const { visits } = visitsData;\n // --- Note ---\n // Second case handles situation when user didn't use `addData` that\n // creates new current visit\n const isNewVisitor = sdkInfo.isServer\n ? !visits.length\n : visits.length <= 1;\n switch (this.visitorType) {\n case VisitorType.NEW:\n return buildExports.Ok(isNewVisitor);\n case VisitorType.RETURNING:\n return buildExports.Ok(!isNewVisitor);\n default:\n KameleoonLogger.error `Unexpected visitor type for NewVisitor condition: ${this.visitorType}`;\n exhaustCheck(this.visitorType);\n }\n }\n}\n\nclass ApplicationVersion {\n constructor({ version, versionMatchType }) {\n this.conditionValue = version;\n this.versionMatchType = versionMatchType;\n }\n evaluate({ targetingData, }) {\n var _a;\n const version = (_a = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.ApplicationVersion]) === null || _a === void 0 ? void 0 : _a.version;\n if (!version || !this.conditionValue || !this.versionMatchType) {\n return buildExports.Ok(false);\n }\n const result = Utilities.compareSemVer({\n version,\n compareVersion: this.conditionValue,\n operator: this.versionMatchType,\n });\n if (!result.ok) {\n return buildExports.Err(result.error);\n }\n return buildExports.Ok(result.data);\n }\n}\n\nclass ConversionLikelihood {\n constructor({ lowerBound, upperBound, keyMomentId, goalId, }) {\n this.lowerBound = lowerBound;\n this.upperBound = upperBound;\n this.keyMomentId = keyMomentId;\n this.goalId = goalId;\n }\n evaluate({ targetingData, }) {\n var _a;\n const kcsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.KameleoonConversionScore];\n if (typeof this.keyMomentId !== 'number' ||\n typeof this.goalId !== 'number' ||\n typeof this.lowerBound !== 'number' ||\n typeof this.upperBound !== 'number' ||\n !kcsData) {\n return buildExports.Ok(false);\n }\n const score = (_a = kcsData.kcs[this.keyMomentId.toString()]) === null || _a === void 0 ? void 0 : _a[this.goalId.toString()];\n if (typeof score !== 'number') {\n return buildExports.Ok(false);\n }\n return buildExports.Ok(score >= this.lowerBound && score <= this.upperBound);\n }\n}\n\nclass ExclusiveExperimentCondition {\n constructor({ campaignType }) {\n this.campaignType = campaignType;\n }\n evaluate(data) {\n return buildExports.Ok(this.checkCondition(data));\n }\n checkCondition(data) {\n var _a;\n const variations = Object.values(data.variationData);\n const personalizations = Object.values(((_a = data.targetingData) === null || _a === void 0 ? void 0 : _a.personalization) || {});\n const hasSingleValidVariation = variations.length === 1 &&\n data.experimentId !== null &&\n data.variationData[data.experimentId] !== undefined;\n const hasNoVariations = variations.length === 0;\n const hasNoPersonalizations = personalizations.length === 0;\n switch (this.campaignType) {\n case CampaignType.Experiment:\n return hasNoVariations || hasSingleValidVariation;\n case CampaignType.Personalization:\n return hasNoPersonalizations;\n case CampaignType.Any:\n return hasNoPersonalizations && (hasNoVariations || hasSingleValidVariation);\n default:\n return false;\n }\n }\n}\n\nclass TargetExperimentCondition {\n constructor({ variationMatchType, variation, experiment, }) {\n this.variationMatchType = variationMatchType;\n this.variationId = variation || -1;\n this.experimentId = experiment || -1;\n }\n evaluate(data) {\n return buildExports.Ok(this.checkCondition(data));\n }\n checkCondition(data) {\n const variation = data.variationData[this.experimentId];\n if (!variation) {\n return false;\n }\n switch (this.variationMatchType) {\n case MatchTypeVariation.ANY:\n return true;\n case MatchTypeVariation.EXACT:\n return variation.variationId === this.variationId;\n default:\n return false;\n }\n }\n}\n\nclass TargetPersonalizationCondition {\n constructor({ personalizationId }) {\n this.personalizationId = personalizationId;\n }\n evaluate(data) {\n if (!data.targetingData) {\n return buildExports.Ok(false);\n }\n return buildExports.Ok(this.checkCondition(data));\n }\n checkCondition(data) {\n var _a;\n if (!this.personalizationId) {\n return false;\n }\n const personalizationData = (_a = data.targetingData) === null || _a === void 0 ? void 0 : _a[KameleoonData.Personalization];\n return (personalizationData === null || personalizationData === void 0 ? void 0 : personalizationData[this.personalizationId]) !== undefined;\n }\n}\n\nclass ConditionFactory {\n createCondition(data) {\n const { targetingType } = data;\n switch (targetingType) {\n case TargetingType.CUSTOM_DATUM:\n return buildExports.Ok(new CustomData(data));\n case TargetingType.EXCLUSIVE_EXPERIMENT:\n return buildExports.Ok(new ExclusiveExperimentCondition(data));\n case TargetingType.TARGET_EXPERIMENT:\n return buildExports.Ok(new TargetExperimentCondition(data));\n case TargetingType.TARGET_FEATURE_FLAG:\n return buildExports.Ok(new TargetFeatureFlag(data));\n case TargetingType.TARGET_PERSONALIZATION:\n return buildExports.Ok(new TargetPersonalizationCondition(data));\n case TargetingType.DEVICE_TYPE:\n return buildExports.Ok(new Device(data));\n case TargetingType.BROWSER:\n return buildExports.Ok(new Browser(data));\n case TargetingType.PAGE_URL:\n return buildExports.Ok(new PageUrl(data));\n case TargetingType.PAGE_TITLE:\n return buildExports.Ok(new PageTitle(data));\n case TargetingType.CONVERSIONS:\n return buildExports.Ok(new Conversion(data));\n case TargetingType.VISITOR_CODE:\n return buildExports.Ok(new VisitorCode(data));\n case TargetingType.SDK_LANGUAGE:\n return buildExports.Ok(new SdkLanguage(data));\n case TargetingType.COOKIE:\n return buildExports.Ok(new Cookie(data));\n case TargetingType.OPERATING_SYSTEM:\n return buildExports.Ok(new OperatingSystem(data));\n case TargetingType.GEOLOCATION:\n return buildExports.Ok(new GeolocationCondition(data));\n case TargetingType.SEGMENT:\n return buildExports.Ok(new Segment(data));\n case TargetingType.APPLICATION_VERSION:\n return buildExports.Ok(new ApplicationVersion(data));\n case TargetingType.PREVIOUS_PAGE:\n return buildExports.Ok(new PreviousPage(data));\n case TargetingType.PAGE_VIEWS:\n return buildExports.Ok(new VisitedPages(data));\n case TargetingType.LAST_VISIT:\n return buildExports.Ok(new LastVisit(data));\n case TargetingType.FIRST_VISIT:\n return buildExports.Ok(new FirstVisit(data));\n case TargetingType.SAME_DAY_VISITS:\n return buildExports.Ok(new SameDayVisits(data));\n case TargetingType.VISITS:\n return buildExports.Ok(new Visits(data));\n case TargetingType.NEW_VISITORS:\n return buildExports.Ok(new NewVisitor(data));\n case TargetingType.HEAT_SLICE:\n return buildExports.Ok(new ConversionLikelihood(data));\n default:\n KameleoonLogger.info `Unsupported targeted condition type found: ${targetingType}`;\n return buildExports.Err(new KameleoonError(KameleoonException.TargetingCondition, targetingType));\n }\n }\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing keys for Kameleoon SDK related data stored on storage\n * */\nvar KameleoonStorageKey;\n(function (KameleoonStorageKey) {\n KameleoonStorageKey[\"ClientData\"] = \"kameleoonClientData\";\n KameleoonStorageKey[\"TargetingData\"] = \"kameleoonTargetingData\";\n KameleoonStorageKey[\"TrackingData\"] = \"kameleoonTrackingData\";\n KameleoonStorageKey[\"VariationData\"] = \"kameleoonVariationData\";\n KameleoonStorageKey[\"VisitorCode\"] = \"kameleoonVisitorCode\";\n KameleoonStorageKey[\"ConsentData\"] = \"kameleoonConsentData\";\n KameleoonStorageKey[\"DataInfo\"] = \"kameleoonDataInfo\";\n KameleoonStorageKey[\"KameleoonSimulationFFData\"] = \"kameleoonSimulationFFData\";\n KameleoonStorageKey[\"ForcedFeatureVariation\"] = \"kameleoonForcedFeatureVariation\";\n KameleoonStorageKey[\"ForcedExperimentVariation\"] = \"kameleoonForcedExperimentVariation\";\n})(KameleoonStorageKey || (KameleoonStorageKey = {}));\nconst DEFAULT_CLIENT_CONFIGURATION = {\n data: DEFAULT_DATA_FILE_CONFIGURATION,\n lastUpdate: '',\n};\n// --- Note ---\n// Not a real visit duration, rather a guaranteed minimum time\nconst VISIT_DURATION = 29 * Milliseconds.Minute;\n\nclass IntegrityChecker {\n constructor(key) {\n this.key = key;\n }\n isDataValid(data) {\n switch (this.key) {\n case KameleoonStorageKey.ClientData:\n return this.checkClientDataIntegrity(data);\n case KameleoonStorageKey.TargetingData:\n return this.checkTargetingDataIntegrity(data);\n case KameleoonStorageKey.DataInfo:\n return this.checkDataInfoIntegrity(data);\n case KameleoonStorageKey.VariationData:\n return this.checkVariationDataIntegrity(data);\n case KameleoonStorageKey.TrackingData:\n return this.checkTrackingDataIntegrity(data);\n default:\n return true;\n }\n }\n getDefaultData() {\n switch (this.key) {\n case KameleoonStorageKey.ClientData:\n return this.getDefaultClientData();\n case KameleoonStorageKey.DataInfo:\n return { unsentData: {}, nextVisitTime: 0, mappingIdentifiers: {} };\n case KameleoonStorageKey.TrackingData:\n return { scheduledVisitors: {} };\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.VariationData:\n case KameleoonStorageKey.ConsentData:\n return {};\n case KameleoonStorageKey.VisitorCode:\n return '';\n case KameleoonStorageKey.KameleoonSimulationFFData:\n return '';\n case KameleoonStorageKey.ForcedExperimentVariation:\n return {};\n case KameleoonStorageKey.ForcedFeatureVariation:\n return {};\n default:\n exhaustCheck(this.key);\n }\n }\n checkTrackingDataIntegrity(data) {\n return this.hasFields(data, ['scheduledVisitors']);\n }\n checkDataInfoIntegrity(data) {\n return this.hasFields(data, ['unsentData', 'nextVisitTime']);\n }\n checkVariationDataIntegrity(data) {\n const variations = Object.values(data);\n if (!variations.length) {\n return true;\n }\n const hasInvalidFields = (obj) => !this.hasFields(obj, ['status']) || this.hasFields(obj, ['isSent']);\n for (const variation of variations) {\n for (const value of Object.values(variation)) {\n if (hasInvalidFields(value)) {\n return false;\n }\n }\n }\n return true;\n }\n checkClientDataIntegrity(data) {\n return this.hasFields(data, Object.keys(DEFAULT_CLIENT_CONFIGURATION));\n }\n checkTargetingDataIntegrity(data) {\n const visitorValues = Object.values(data);\n if (!visitorValues.length) {\n return true;\n }\n for (const visitorData of visitorValues) {\n // --- Note ---\n // If `visitorData` is a string, it means that it's a visitor reference\n if (typeof visitorData === 'string') {\n continue;\n }\n const hasInvalidFields = (obj) => !this.hasFields(obj, ['status']) ||\n this.hasFields(obj, ['sent']) ||\n this.hasFields(obj, ['timestampList']);\n for (const [key, data] of Object.entries(visitorData)) {\n if (Array.isArray(data)) {\n return false;\n }\n switch (key) {\n case KameleoonData.PageView:\n case KameleoonData.Conversion:\n case KameleoonData.Personalization:\n case KameleoonData.TargetedSegment:\n case KameleoonData.CustomData: {\n const hasBadFields = Object.values(data).some((obj) => hasInvalidFields(obj));\n if (hasBadFields) {\n return false;\n }\n continue;\n }\n default: {\n if (hasInvalidFields(data)) {\n return false;\n }\n }\n }\n }\n }\n return true;\n }\n getDefaultClientData() {\n return Object.assign(Object.assign({}, DEFAULT_CLIENT_CONFIGURATION), { lastUpdate: new Date().toString() });\n }\n hasFields(obj, fields) {\n const keys = Object.keys(obj);\n if (!keys.length || !fields.length) {\n return false;\n }\n return fields.every((field) => keys.includes(field));\n }\n}\n\n// --- Note ---\n// Named `DataStorage` to avoid collision with `Storage` from `window` API\nclass DataStorage {\n constructor(externalStorage, storageKey) {\n this.externalStorage = externalStorage;\n this.storageKey = storageKey;\n const integrityChecker = new IntegrityChecker(storageKey);\n const result = this.read();\n if (!result.ok) {\n if (result.error.type === KameleoonException.StorageEmpty) {\n const defaultData = integrityChecker.getDefaultData();\n this.write(defaultData);\n }\n return;\n }\n const data = result.data;\n if (!integrityChecker.isDataValid(data)) {\n const defaultData = integrityChecker.getDefaultData();\n this.write(defaultData);\n }\n }\n read() {\n try {\n const result = this.externalStorage.read(this.storageKey);\n if (result === null) {\n return buildExports.Err(new KameleoonError(KameleoonException.StorageEmpty));\n }\n // --- Note ---\n // Have to cast the type here to tell TS that `result.data` type is a subset of `T` as we check it already in the default generic `StorageDataType` for `IExternalStorage`\n return buildExports.Ok(result);\n }\n catch (_) {\n KameleoonLogger.error `Failed to read data from storage: ${this.storageKey}`;\n return buildExports.Err(new KameleoonError(KameleoonException.StorageRead, this.storageKey));\n }\n }\n write(data) {\n try {\n this.externalStorage.write(this.storageKey, data);\n return buildExports.Ok();\n }\n catch (_) {\n KameleoonLogger.error `Failed to write data to storage: ${this.storageKey}`;\n return buildExports.Err(new KameleoonError(KameleoonException.StorageWrite, this.storageKey));\n }\n }\n update(data) {\n const result = this.read();\n if (!result.ok) {\n if (result.error.type === KameleoonException.StorageEmpty) {\n return this.write(data);\n }\n else {\n return result;\n }\n }\n const existingData = result.data;\n let newData;\n if (typeof existingData === 'string') {\n newData = data;\n }\n else {\n newData = Object.assign(Object.assign({}, existingData), data);\n }\n return this.write(newData);\n }\n}\n\nclass StorageCleanupManager {\n constructor(externalStorage, cleanupInterval) {\n this.externalStorage = externalStorage;\n this.cleanupInterval = cleanupInterval;\n if (cleanupInterval > 0) {\n this.initCleanupInterval();\n }\n }\n initCleanupInterval() {\n for (const storageKey of Object.values(KameleoonStorageKey)) {\n let cleanupInterval = null;\n try {\n switch (storageKey) {\n case KameleoonStorageKey.ForcedFeatureVariation:\n case KameleoonStorageKey.ForcedExperimentVariation:\n case KameleoonStorageKey.VariationData:\n case KameleoonStorageKey.ConsentData:\n KameleoonLogger.info `Starting cleanup for ${storageKey} with interval ${this.cleanupInterval}`;\n cleanupInterval = setInterval(() => this.cleanupData(storageKey), this.cleanupInterval);\n break;\n case KameleoonStorageKey.ClientData:\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.TrackingData:\n case KameleoonStorageKey.VisitorCode:\n case KameleoonStorageKey.DataInfo:\n case KameleoonStorageKey.KameleoonSimulationFFData:\n break;\n default:\n // check if all cases are handled\n KameleoonLogger.error `Unknown storage key: ${storageKey} for initCleanupInterval.`;\n }\n }\n catch (Error) {\n if (cleanupInterval) {\n clearInterval(cleanupInterval);\n }\n KameleoonLogger.error `Error while starting cleanup for ${storageKey} with interval ${this.cleanupInterval}`;\n }\n }\n }\n cleanupData(storageKey) {\n const dataResult = this.externalStorage.read(storageKey);\n if (!dataResult) {\n return;\n }\n const currentTime = Date.now();\n switch (storageKey) {\n case KameleoonStorageKey.VariationData:\n this.cleanupVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ForcedFeatureVariation:\n this.cleanupForcedFeatureVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ForcedExperimentVariation:\n this.cleanupForcedExperimentVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ConsentData:\n this.cleanupConsentData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ClientData:\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.TrackingData:\n case KameleoonStorageKey.VisitorCode:\n case KameleoonStorageKey.DataInfo:\n case KameleoonStorageKey.KameleoonSimulationFFData:\n break;\n default:\n KameleoonLogger.error `Unknown storage key: ${storageKey} for cleanupData.`;\n }\n this.externalStorage.write(storageKey, dataResult);\n }\n cleanupConsentData(consentData, currentTime) {\n for (const [visitorCode, consent] of Object.entries(consentData)) {\n // for consistency with the old data in the storage\n if (typeof consent === 'boolean') {\n consentData[visitorCode] = {\n consent,\n expirationTime: currentTime + this.cleanupInterval,\n };\n continue;\n }\n const value = consent;\n if (typeof value.expirationTime === 'number') {\n if (value.expirationTime < currentTime) {\n delete consentData[visitorCode];\n }\n }\n else {\n value.expirationTime = currentTime + this.cleanupInterval;\n }\n }\n }\n cleanupVariationData(variationData, currentTime) {\n for (const [visitorCode, featureVariations] of Object.entries(variationData)) {\n this.cleanupObjectValues(featureVariations, currentTime);\n if (Object.keys(variationData[visitorCode]).length === 0) {\n delete variationData[visitorCode];\n }\n }\n }\n cleanupForcedFeatureVariationData(forcedFeatureVariationData, currentTime) {\n for (const [simulated, visitorData] of Object.entries(forcedFeatureVariationData)) {\n for (const [visitorCode, features] of Object.entries(visitorData)) {\n this.cleanupObjectValues(features, currentTime);\n if (Object.keys(forcedFeatureVariationData[Number(simulated)][visitorCode]).length === 0) {\n delete forcedFeatureVariationData[Number(simulated)][visitorCode];\n }\n }\n }\n }\n cleanupForcedExperimentVariationData(forcedExperimentVariationData, currentTime) {\n for (const [visitorCode, experiments] of Object.entries(forcedExperimentVariationData)) {\n this.cleanupObjectValues(experiments, currentTime);\n if (Object.keys(forcedExperimentVariationData[visitorCode]).length === 0) {\n delete forcedExperimentVariationData[visitorCode];\n }\n }\n }\n cleanupObjectValues(obj, currentTime) {\n for (const [key, value] of Object.entries(obj)) {\n if (typeof value.expirationTime === 'number') {\n if (value.expirationTime < currentTime) {\n delete obj[key];\n }\n }\n else {\n value.expirationTime = currentTime + this.cleanupInterval;\n }\n }\n }\n}\n\nvar LegalConsent;\n(function (LegalConsent) {\n LegalConsent[LegalConsent[\"Unknown\"] = 0] = \"Unknown\";\n LegalConsent[LegalConsent[\"Given\"] = 1] = \"Given\";\n LegalConsent[LegalConsent[\"NotGiven\"] = 2] = \"NotGiven\";\n})(LegalConsent || (LegalConsent = {}));\n\nclass TargetedSegment {\n constructor(id) {\n this.id = id;\n this.status = TrackingStatus.Unsent;\n }\n get url() {\n return UrlEventType.TargetingSegment + UrlParameter.Id + this.id;\n }\n get data() {\n return {\n id: this.id,\n type: KameleoonData.TargetedSegment,\n status: this.status,\n };\n }\n static _fromRaw(data) {\n const { id, status } = data;\n const targetedSegment = new TargetedSegment(id);\n targetedSegment.status = status;\n return targetedSegment;\n }\n}\n\nclass DataManager {\n constructor({ dataStorage, infoStorage, cleanupInterval, packageInfo, }) {\n this.targetingTrees = new Map();\n this.mappingIdentifierCustomDataIndex = null;\n this.persistentCustomDataIndexes = new Set();\n this.localCustomDataIndexes = new Set();\n this.customDataIndexByName = new Map();\n this.cleanupIntervalId = null;\n KameleoonLogger.debug `CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval})`;\n this.dataStorage = dataStorage;\n this.infoStorage = infoStorage;\n this.dataProcessor = new DataProcessor(cleanupInterval, packageInfo);\n this.packageInfo = packageInfo;\n if (cleanupInterval) {\n const cleanupCallback = () => {\n this.cleanupData();\n };\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.cleanupIntervalId = setInterval(cleanupCallback, cleanupInterval);\n }\n catch (err) {\n if (this.cleanupIntervalId) {\n clearInterval(this.cleanupIntervalId);\n }\n KameleoonLogger.error `Failed to set cleanup interval: ${cleanupInterval}`;\n throw err;\n }\n }\n KameleoonLogger.debug `RETURN: new DataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval})`;\n }\n getUnsentData(visitorCode) {\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return [];\n }\n const infoData = infoResult.data;\n const targetingData = this.getVisitorData(visitorCode);\n if (!infoData.unsentData[visitorCode] || !targetingData) {\n return [];\n }\n const unsentDataKeys = infoData.unsentData[visitorCode];\n const isNextVisit = infoData.nextVisitTime <= Date.now();\n const filter = ({ status, key, cdIndex }) => {\n if (typeof cdIndex === 'number') {\n // --- Note ---\n // Persistent CustomData is mandatory for sending each time\n // but only once per visit\n if (this.persistentCustomDataIndexes.has(cdIndex) && isNextVisit) {\n return true;\n }\n }\n return unsentDataKeys.includes(key) && status === TrackingStatus.Unsent;\n };\n if (isNextVisit) {\n infoData.nextVisitTime = Date.now() + VISIT_DURATION;\n this.infoStorage.write(infoData);\n }\n return this.getDataFromRaw(targetingData, filter);\n }\n getPendingData(visitorCode) {\n const targetingData = this.getVisitorData(visitorCode);\n if (!targetingData) {\n return [];\n }\n const filter = ({ status }) => status === TrackingStatus.Pending;\n return this.getDataFromRaw(targetingData, filter);\n }\n getDataFromRaw(targetingData, filter) {\n const resultData = [];\n for (const [key, data] of Object.entries(targetingData)) {\n if (!data) {\n continue;\n }\n switch (key) {\n case KameleoonData.CustomData: {\n for (const customData of Object.values(data)) {\n if (!customData) {\n continue;\n }\n const { status, index } = customData;\n if (filter({ status, key, cdIndex: index })) {\n const customDataItem = CustomData$1._fromRaw(customData);\n resultData.push(customDataItem);\n }\n }\n break;\n }\n case KameleoonData.Conversion: {\n for (const conversion of Object.values(data)) {\n if (!conversion) {\n continue;\n }\n if (filter({ status: conversion.status, key })) {\n const customDataItem = Conversion$1._fromRaw(conversion);\n resultData.push(customDataItem);\n }\n }\n break;\n }\n case KameleoonData.PageView: {\n const pageViewData = data;\n for (const pageView of Object.values(pageViewData)) {\n if (filter({ status: pageView.status, key })) {\n const pageViewItem = PageView._fromRaw(pageView);\n resultData.push(pageViewItem);\n }\n }\n break;\n }\n case KameleoonData.TargetedSegment: {\n const targetedSegmentData = data;\n for (const targetedSegment of Object.values(targetedSegmentData)) {\n if (filter({ status: targetedSegment.status, key })) {\n const targetedSegmentItem = TargetedSegment._fromRaw(targetedSegment);\n resultData.push(targetedSegmentItem);\n }\n }\n break;\n }\n case KameleoonData.GeolocationData: {\n const geolocationData = data;\n if (!data) {\n continue;\n }\n if (filter({ status: geolocationData.status, key })) {\n const geolocationItem = GeolocationData._fromRaw(geolocationData);\n resultData.push(geolocationItem);\n }\n break;\n }\n case KameleoonData.Browser: {\n const browserData = data;\n if (filter({ status: browserData.status, key })) {\n const browserItem = Browser$1._fromRaw(browserData);\n resultData.push(browserItem);\n }\n break;\n }\n case KameleoonData.Device: {\n const deviceData = data;\n if (filter({ status: deviceData.status, key })) {\n const deviceItem = Device$1._fromRaw(deviceData);\n resultData.push(deviceItem);\n }\n break;\n }\n case KameleoonData.OperatingSystem: {\n const osData = data;\n if (filter({ status: osData.status, key })) {\n const osItem = OperatingSystem$1._fromRaw(osData);\n resultData.push(osItem);\n }\n }\n }\n }\n return resultData;\n }\n storeTrackedData(data) {\n this.storeDataForVisitors(data, false);\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return;\n }\n const unsentData = infoResult.data.unsentData;\n for (const [visitorCode, kameleoonData] of Object.entries(data)) {\n if (!unsentData[visitorCode]) {\n return;\n }\n const unsentDataKeys = new Set(unsentData[visitorCode]);\n kameleoonData.forEach(({ data }) => {\n if (unsentDataKeys.has(data.type)) {\n unsentDataKeys.delete(data.type);\n }\n });\n const hasPersistentCustomData = kameleoonData.some(({ data }) => {\n if (data.type !== KameleoonData.CustomData) {\n return false;\n }\n const { index } = data;\n return (this.persistentCustomDataIndexes.has(index) ||\n this.mappingIdentifierCustomDataIndex === index);\n });\n if (hasPersistentCustomData) {\n unsentDataKeys.add(KameleoonData.CustomData);\n }\n unsentData[visitorCode] = Array.from(unsentDataKeys);\n if (!unsentData[visitorCode].length) {\n delete unsentData[visitorCode];\n }\n }\n this.infoStorage.write(infoResult.data);\n }\n /**\n * Store data for a single visitor\n */\n storeData({ visitorCode, data, track, }) {\n KameleoonLogger.debug `CALL: DataManager.storeDataForVisitor(vc: ${visitorCode}, track: ${track}, data: ${data})`;\n const result = this.storeDataInternal((infoData, targetingData) => {\n this.mutUpdateTargetingData({\n infoData,\n targetingData,\n visitorCode,\n kameleoonData: data,\n extendTtl: true,\n track,\n });\n });\n KameleoonLogger.debug `RETURN: DataManager.storeDataForVisitor(vc: ${visitorCode}, track: ${track}, data: ${data}) -> ${result}`;\n return result;\n }\n /**\n * Store data for multiple visitors\n */\n storeDataForVisitors(data, extendTtl) {\n KameleoonLogger.debug `CALL: DataManager.storeDataForVisitors(data: ${data}, extendTtl: ${extendTtl})`;\n const result = this.storeDataInternal((infoData, targetingData) => {\n for (const [visitorCode, kameleoonData] of Object.entries(data)) {\n this.mutUpdateTargetingData({\n infoData,\n targetingData,\n visitorCode,\n kameleoonData,\n extendTtl,\n });\n }\n });\n KameleoonLogger.debug `RETURN: DataManager.storeDataForVisitors(data: ${data}, extendTtl: ${extendTtl}) -> ${result}`;\n return result;\n }\n // ========= Internal shared logic =========\n storeDataInternal(updater) {\n const dataResult = this.dataStorage.read();\n if (!dataResult.ok) {\n return dataResult;\n }\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return infoResult;\n }\n const targetingData = dataResult.data;\n const infoData = infoResult.data;\n updater(infoData, targetingData);\n this.cleanupData();\n this.infoStorage.write(infoData);\n return this.dataStorage.write(targetingData);\n }\n getTree(segment) {\n if (this.targetingTrees.has(segment.id)) {\n return this.targetingTrees.get(segment.id);\n }\n const targetingTree = new Tree(segment);\n this.targetingTrees.set(segment.id, targetingTree);\n return targetingTree;\n }\n clearTrees() {\n this.targetingTrees.clear();\n }\n isPersistentCustomData(dataItem) {\n if (!this.persistentCustomDataIndexes.size) {\n return false;\n }\n if (Utilities.isCustomData(dataItem)) {\n return this.persistentCustomDataIndexes.has(dataItem.data.index);\n }\n return false;\n }\n isUniqueIdentifier(visitorCode) {\n var _a;\n const targetingData = this.getVisitorData(visitorCode);\n const uniqueIdentifier = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.UniqueIdentifier];\n return (_a = uniqueIdentifier === null || uniqueIdentifier === void 0 ? void 0 : uniqueIdentifier.value) !== null && _a !== void 0 ? _a : false;\n }\n getVisitorIdentifier(visitorCode) {\n var _a, _b, _c;\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return visitorCode;\n }\n const infoData = infoResult.data;\n (_a = infoData.mappingIdentifiers) !== null && _a !== void 0 ? _a : (infoData.mappingIdentifiers = {});\n return ((_c = (_b = infoData.mappingIdentifiers[visitorCode]) === null || _b === void 0 ? void 0 : _b.mappingIdentifier) !== null && _c !== void 0 ? _c : visitorCode);\n }\n getMappingIdentifier(visitorCode) {\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return undefined;\n }\n const infoData = infoResult.data;\n if (infoData.mappingIdentifiers) {\n return infoData.mappingIdentifiers[visitorCode];\n }\n return undefined;\n }\n setMappingIdentifier(visitorCode, mappingIdentifier) {\n var _a;\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return;\n }\n const infoData = infoResult.data;\n (_a = infoData.mappingIdentifiers) !== null && _a !== void 0 ? _a : (infoData.mappingIdentifiers = {});\n const currentMappingIdentifier = infoData.mappingIdentifiers[visitorCode];\n if (!currentMappingIdentifier ||\n currentMappingIdentifier.timestamp < mappingIdentifier.timestamp) {\n infoData.mappingIdentifiers[visitorCode] = mappingIdentifier;\n this.infoStorage.write(infoData);\n }\n }\n getVisitorData(visitorCode) {\n this.cleanupData();\n const storageData = this.dataStorage.read();\n if (!storageData.ok) {\n return undefined;\n }\n let { visitorReference, data, isReference } = this.dataProcessor.dereferenceData(storageData.data, visitorCode);\n if (this.packageInfo.isServer && isReference && !data[visitorReference]) {\n const infoData = this.infoStorage.read();\n if (infoData.ok && infoData.data.mappingIdentifiers) {\n delete infoData.data.mappingIdentifiers[visitorCode];\n }\n delete data[visitorCode];\n visitorReference = visitorCode;\n }\n return data[visitorReference];\n }\n getVisitorStoredDataTypes(visitorCode) {\n const targetingData = this.getVisitorData(visitorCode);\n if (!targetingData) {\n return new Set();\n }\n return new Set(Object.keys(targetingData));\n }\n getLinkedVisitor(visitorCode) {\n var _a, _b, _c;\n const storageData = this.dataStorage.read();\n if (!storageData.ok) {\n return null;\n }\n const visitorDataOrRef = storageData.data[visitorCode];\n // Direct reference case\n if (typeof visitorDataOrRef === 'string') {\n return visitorDataOrRef;\n }\n // No mapping index or no visitor data\n if (visitorDataOrRef == null ||\n this.mappingIdentifierCustomDataIndex == null) {\n return null;\n }\n const value = (_c = (_b = (_a = visitorDataOrRef[KameleoonData.CustomData]) === null || _a === void 0 ? void 0 : _a[this.mappingIdentifierCustomDataIndex]) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c[0];\n return value !== null && value !== void 0 ? value : null;\n }\n mutUpdateTargetingData({ infoData, visitorCode, kameleoonData, targetingData, extendTtl, track, }) {\n var _a, _b, _c;\n for (const dataItem of kameleoonData) {\n // prcoess track status\n if (track === false) {\n dataItem.status = TrackingStatus.Sent;\n }\n // process custom data\n if (dataItem.data.type === KameleoonData.CustomData) {\n const customDataIsValid = this.processCustomData({\n infoData,\n customData: dataItem,\n mutData: targetingData,\n visitorCode,\n });\n if (!customDataIsValid) {\n continue;\n }\n }\n // process metadata of conversions\n if (dataItem.data.type === KameleoonData.Conversion) {\n const conversion = dataItem;\n if (((_b = (_a = conversion._metadata) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0) {\n conversion._metadata = (_c = conversion._metadata) === null || _c === void 0 ? void 0 : _c.filter((item) => this.trySetCustomDataIndexByName(item));\n }\n }\n const expirationTime = this.dataProcessor.mutUpdateData({\n infoData,\n visitorCode,\n mutData: targetingData,\n dataItem,\n extendTtl,\n });\n const nextCleanup = infoData.nextDataCleanup;\n if (!nextCleanup ||\n (nextCleanup && expirationTime && expirationTime < nextCleanup)) {\n infoData.nextDataCleanup = expirationTime;\n }\n if (dataItem.data.status === TrackingStatus.Unsent) {\n this.dataProcessor.mutAddUnsentData({\n mutData: infoData,\n visitorCode,\n dataType: dataItem.data.type,\n });\n }\n }\n }\n cleanupData() {\n const result = this.dataStorage.read();\n const infoResult = this.infoStorage.read();\n if (!result.ok || !infoResult.ok) {\n return;\n }\n const data = result.data;\n const infoData = infoResult.data;\n const nextCleanup = infoData.nextDataCleanup;\n if (nextCleanup && nextCleanup < Date.now()) {\n const nextCleanupTime = this.dataProcessor.mutCleanupData(data, infoData);\n infoData.nextDataCleanup = nextCleanupTime || undefined;\n this.infoStorage.write(infoData);\n this.dataStorage.write(data);\n }\n }\n processCustomData({ infoData, mutData, customData, visitorCode, }) {\n var _a;\n const { data } = customData;\n const isDataValid = Boolean(data.value.length && data.value[0].length);\n if (!this.trySetCustomDataIndexByName(customData)) {\n return false;\n }\n if (data.index == CustomData$1.UNDEFINED_INDEX) {\n data.index = customData.index;\n }\n if (this.mappingIdentifierCustomDataIndex === data.index && isDataValid) {\n customData._isMappingIdentifier = true;\n const userId = data.value[0];\n if (visitorCode !== userId) {\n KameleoonLogger.info `Linked anonymous visitor ${visitorCode} with user ${userId}`;\n // --- Note ---\n // Associate linked visitor codes\n this.dataProcessor.createReference({\n infoData,\n mutData,\n visitorCode,\n linkedVisitor: data.value[0],\n });\n (_a = infoData.mappingIdentifiers) !== null && _a !== void 0 ? _a : (infoData.mappingIdentifiers = {});\n infoData.mappingIdentifiers[userId] = {\n mappingIdentifier: visitorCode,\n timestamp: Date.now(),\n };\n }\n }\n if (this.localCustomDataIndexes.has(data.index)) {\n customData.status = TrackingStatus.Sent;\n }\n return true;\n }\n trySetCustomDataIndexByName(customData) {\n if (customData.index !== CustomData$1.UNDEFINED_INDEX)\n return true;\n if (!customData.name)\n return false;\n const cdIndex = this.customDataIndexByName.get(customData.name);\n if (cdIndex == null)\n return false;\n customData.index = cdIndex;\n return true;\n }\n get unsentDataVisitors() {\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return [];\n }\n return Object.keys(infoResult.data.unsentData);\n }\n get identifierCustomDataIndex() {\n return this.mappingIdentifierCustomDataIndex;\n }\n get trees() {\n return this.targetingTrees;\n }\n get storedCustomDataIndexes() {\n const result = this.dataStorage.read();\n if (!result.ok) {\n return new Set();\n }\n const targetingData = result.data;\n if (!(KameleoonData.CustomData in targetingData)) {\n return new Set();\n }\n const indexes = new Set();\n for (const index in Object.keys(targetingData[KameleoonData.CustomData])) {\n indexes.add(Number(index));\n }\n return indexes;\n }\n set customDataIndexes(customData) {\n var _a;\n const [customDataLocalOnlyIndexes, persistentCustomDataIndexes] = [[], []];\n const customDataIndexByName = new Map();\n customData.forEach((customData) => {\n if (customData.localOnly) {\n customDataLocalOnlyIndexes.push(customData.index);\n }\n if (customData.scope === CustomDataScope.Visitor) {\n persistentCustomDataIndexes.push(customData.index);\n }\n if (customData.name) {\n customDataIndexByName.set(customData.name, customData.index);\n }\n });\n this.mappingIdentifierCustomDataIndex =\n ((_a = customData.find((customData) => customData.isMappingIdentifier)) === null || _a === void 0 ? void 0 : _a.index) ||\n null;\n this.localCustomDataIndexes = new Set(customDataLocalOnlyIndexes);\n this.persistentCustomDataIndexes = new Set(persistentCustomDataIndexes);\n this.customDataIndexByName = customDataIndexByName;\n }\n getCustomDataIndexByName(name) {\n return this.customDataIndexByName.get(name);\n }\n}\n\nconst VISITOR_CODE_LENGTH = 16;\nconst VISITOR_CODE_MAX_LENGTH = 255;\nconst DEFAULT_MAX_AGE = 60 * 60 * 24 * 365;\nconst PATH = '/';\n\n/**\n * VisitorCodeManager - a class which manages visitor codes using cookies, offering functions to generate, retrieve,\n * and handle these codes while considering user consent.\n **/\nclass VisitorCodeManager {\n constructor() {\n this.isConsentRequired = false;\n }\n set consentRequired(isRequired) {\n this.isConsentRequired = isRequired;\n }\n get consentRequired() {\n return this.isConsentRequired;\n }\n set getData(callback) {\n this.getDataCallback = callback;\n }\n set setData(callback) {\n this.setDataCallback = callback;\n }\n get setData() {\n if (this.setDataCallback) {\n return this.setDataCallback;\n }\n throw new Error('Missing setDataCallback!');\n }\n validateVisitorCode(visitorCode) {\n if (visitorCode.length === 0) {\n return buildExports.Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return buildExports.Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n return buildExports.Ok();\n }\n getVisitorCode(defaultVisitorCode) {\n KameleoonLogger.debug `CALL: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode})`;\n if (!this.getDataCallback || !this.setDataCallback) {\n throw new Error('Missing getDataCallback or setDataCallback methods in getVisitorCode!');\n }\n let visitorCode;\n const existingVisitorCode = this.getDataCallback(KameleoonStorageKey.VisitorCode);\n if (existingVisitorCode) {\n visitorCode = existingVisitorCode;\n }\n if (!visitorCode) {\n if (defaultVisitorCode) {\n this.validateVisitorCode(defaultVisitorCode).throw();\n visitorCode = defaultVisitorCode;\n KameleoonLogger.debug `Used default visitor code: ${visitorCode}`;\n }\n else {\n visitorCode = this.generateVisitorCode();\n KameleoonLogger.debug `Generated new visitor code: ${visitorCode}`;\n }\n }\n this.processSimulatedVariations(visitorCode);\n if (!this.isConsentRequired) {\n this.setDataCallback({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n }\n KameleoonLogger.debug `RETURN: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode}) -> (visitorCode: ${visitorCode})`;\n return visitorCode;\n }\n processSimulatedVariations(visitorCode) {\n if (this.variationConfiguration) {\n const simulatedVariationsData = this.getSimulatedVariations(visitorCode);\n try {\n this.variationConfiguration.clearSimulatedVariations(visitorCode).throw();\n if (simulatedVariationsData !== null && simulatedVariationsData.length > 0) {\n this.variationConfiguration.updateForcedFeatureVariations(visitorCode, simulatedVariationsData).throw();\n }\n }\n catch (error) {\n if (error instanceof Error) {\n KameleoonLogger.error `Failed to process simulated variations: ${error.message}`;\n }\n }\n }\n }\n getSimulatedVariations(visitorCode) {\n KameleoonLogger.debug `CALL: VisitorCodeManager.getSimulatedVariations(visitorCode: ${visitorCode})`;\n const simulatedVariationsData = this.getDataCallback(KameleoonStorageKey.KameleoonSimulationFFData);\n let variations = null;\n if (typeof simulatedVariationsData === 'string' &&\n simulatedVariationsData.length > 0) {\n try {\n const parsed = JSON.parse(decodeURIComponent(simulatedVariationsData));\n if (parsed && typeof parsed === 'object') {\n variations = Object.entries(parsed)\n .map(([key, value]) => {\n return this.variationConfiguration.simulatedVariationFromJson(key, value);\n })\n .filter((variation) => variation !== null);\n }\n }\n catch (error) {\n if (error instanceof Error) {\n KameleoonLogger.error `Failed to parse simulated variations: ${error.message}`;\n }\n }\n }\n KameleoonLogger.debug `RETURN: VisitorCodeManager.getSimulatedVariations(visitorCode: ${visitorCode}) -> (variations: ${variations})`;\n return variations;\n }\n generateVisitorCode() {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray = [];\n for (let i = 0; i < VISITOR_CODE_LENGTH; i++) {\n randomCharacterArray.push(characters[Math.floor(Math.random() * characters.length)]);\n }\n return randomCharacterArray.join('');\n }\n setVariationConfiguration(variationConfiguration) {\n if (!this.variationConfiguration) {\n this.variationConfiguration = variationConfiguration;\n }\n }\n}\n\nvar sha256$2 = {exports: {}};\n\nfunction commonjsRequire(path) {\n\tthrow new Error('Could not dynamically require \"' + path + '\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');\n}\n\nvar core$1 = {exports: {}};\n\nvar _nodeResolve_empty = {};\n\nvar _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tdefault: _nodeResolve_empty\n});\n\nvar require$$0 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1);\n\nvar core = core$1.exports;\n\nvar hasRequiredCore;\n\nfunction requireCore () {\n\tif (hasRequiredCore) return core$1.exports;\n\thasRequiredCore = 1;\n\t(function (module, exports) {\n(function (root, factory) {\n\t\t\t{\n\t\t\t\t// CommonJS\n\t\t\t\tmodule.exports = factory();\n\t\t\t}\n\t\t}(core, function () {\n\n\t\t\t/*globals window, global, require*/\n\n\t\t\t/**\n\t\t\t * CryptoJS core components.\n\t\t\t */\n\t\t\tvar CryptoJS = CryptoJS || (function (Math, undefined$1) {\n\n\t\t\t var crypto;\n\n\t\t\t // Native crypto from window (Browser)\n\t\t\t if (typeof window !== 'undefined' && window.crypto) {\n\t\t\t crypto = window.crypto;\n\t\t\t }\n\n\t\t\t // Native crypto in web worker (Browser)\n\t\t\t if (typeof self !== 'undefined' && self.crypto) {\n\t\t\t crypto = self.crypto;\n\t\t\t }\n\n\t\t\t // Native crypto from worker\n\t\t\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t\t\t crypto = globalThis.crypto;\n\t\t\t }\n\n\t\t\t // Native (experimental IE 11) crypto from window (Browser)\n\t\t\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t\t\t crypto = window.msCrypto;\n\t\t\t }\n\n\t\t\t // Native crypto from global (NodeJS)\n\t\t\t if (!crypto && typeof commonjsGlobal !== 'undefined' && commonjsGlobal.crypto) {\n\t\t\t crypto = commonjsGlobal.crypto;\n\t\t\t }\n\n\t\t\t // Native crypto import via require (NodeJS)\n\t\t\t if (!crypto && typeof commonjsRequire === 'function') {\n\t\t\t try {\n\t\t\t crypto = require$$0;\n\t\t\t } catch (err) {}\n\t\t\t }\n\n\t\t\t /*\n\t\t\t * Cryptographically secure pseudorandom number generator\n\t\t\t *\n\t\t\t * As Math.random() is cryptographically not safe to use\n\t\t\t */\n\t\t\t var cryptoSecureRandomInt = function () {\n\t\t\t if (crypto) {\n\t\t\t // Use getRandomValues method (Browser)\n\t\t\t if (typeof crypto.getRandomValues === 'function') {\n\t\t\t try {\n\t\t\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t\t\t } catch (err) {}\n\t\t\t }\n\n\t\t\t // Use randomBytes method (NodeJS)\n\t\t\t if (typeof crypto.randomBytes === 'function') {\n\t\t\t try {\n\t\t\t return crypto.randomBytes(4).readInt32LE();\n\t\t\t } catch (err) {}\n\t\t\t }\n\t\t\t }\n\n\t\t\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t\t\t };\n\n\t\t\t /*\n\t\t\t * Local polyfill of Object.create\n\n\t\t\t */\n\t\t\t var create = Object.create || (function () {\n\t\t\t function F() {}\n\n\t\t\t return function (obj) {\n\t\t\t var subtype;\n\n\t\t\t F.prototype = obj;\n\n\t\t\t subtype = new F();\n\n\t\t\t F.prototype = null;\n\n\t\t\t return subtype;\n\t\t\t };\n\t\t\t }());\n\n\t\t\t /**\n\t\t\t * CryptoJS namespace.\n\t\t\t */\n\t\t\t var C = {};\n\n\t\t\t /**\n\t\t\t * Library namespace.\n\t\t\t */\n\t\t\t var C_lib = C.lib = {};\n\n\t\t\t /**\n\t\t\t * Base object for prototypal inheritance.\n\t\t\t */\n\t\t\t var Base = C_lib.Base = (function () {\n\n\n\t\t\t return {\n\t\t\t /**\n\t\t\t * Creates a new object that inherits from this object.\n\t\t\t *\n\t\t\t * @param {Object} overrides Properties to copy into the new object.\n\t\t\t *\n\t\t\t * @return {Object} The new object.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var MyType = CryptoJS.lib.Base.extend({\n\t\t\t * field: 'value',\n\t\t\t *\n\t\t\t * method: function () {\n\t\t\t * }\n\t\t\t * });\n\t\t\t */\n\t\t\t extend: function (overrides) {\n\t\t\t // Spawn\n\t\t\t var subtype = create(this);\n\n\t\t\t // Augment\n\t\t\t if (overrides) {\n\t\t\t subtype.mixIn(overrides);\n\t\t\t }\n\n\t\t\t // Create default initializer\n\t\t\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t\t\t subtype.init = function () {\n\t\t\t subtype.$super.init.apply(this, arguments);\n\t\t\t };\n\t\t\t }\n\n\t\t\t // Initializer's prototype is the subtype object\n\t\t\t subtype.init.prototype = subtype;\n\n\t\t\t // Reference supertype\n\t\t\t subtype.$super = this;\n\n\t\t\t return subtype;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Extends this object and runs the init method.\n\t\t\t * Arguments to create() will be passed to init().\n\t\t\t *\n\t\t\t * @return {Object} The new object.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var instance = MyType.create();\n\t\t\t */\n\t\t\t create: function () {\n\t\t\t var instance = this.extend();\n\t\t\t instance.init.apply(instance, arguments);\n\n\t\t\t return instance;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Initializes a newly created object.\n\t\t\t * Override this method to add some logic when your objects are created.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var MyType = CryptoJS.lib.Base.extend({\n\t\t\t * init: function () {\n\t\t\t * // ...\n\t\t\t * }\n\t\t\t * });\n\t\t\t */\n\t\t\t init: function () {\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Copies properties into this object.\n\t\t\t *\n\t\t\t * @param {Object} properties The properties to mix in.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * MyType.mixIn({\n\t\t\t * field: 'value'\n\t\t\t * });\n\t\t\t */\n\t\t\t mixIn: function (properties) {\n\t\t\t for (var propertyName in properties) {\n\t\t\t if (properties.hasOwnProperty(propertyName)) {\n\t\t\t this[propertyName] = properties[propertyName];\n\t\t\t }\n\t\t\t }\n\n\t\t\t // IE won't copy toString using the loop above\n\t\t\t if (properties.hasOwnProperty('toString')) {\n\t\t\t this.toString = properties.toString;\n\t\t\t }\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Creates a copy of this object.\n\t\t\t *\n\t\t\t * @return {Object} The clone.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var clone = instance.clone();\n\t\t\t */\n\t\t\t clone: function () {\n\t\t\t return this.init.prototype.extend(this);\n\t\t\t }\n\t\t\t };\n\t\t\t }());\n\n\t\t\t /**\n\t\t\t * An array of 32-bit words.\n\t\t\t *\n\t\t\t * @property {Array} words The array of 32-bit words.\n\t\t\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t\t\t */\n\t\t\t var WordArray = C_lib.WordArray = Base.extend({\n\t\t\t /**\n\t\t\t * Initializes a newly created word array.\n\t\t\t *\n\t\t\t * @param {Array} words (Optional) An array of 32-bit words.\n\t\t\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t\t\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t\t\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t\t\t */\n\t\t\t init: function (words, sigBytes) {\n\t\t\t words = this.words = words || [];\n\n\t\t\t if (sigBytes != undefined$1) {\n\t\t\t this.sigBytes = sigBytes;\n\t\t\t } else {\n\t\t\t this.sigBytes = words.length * 4;\n\t\t\t }\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Converts this word array to a string.\n\t\t\t *\n\t\t\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t\t\t *\n\t\t\t * @return {string} The stringified word array.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var string = wordArray + '';\n\t\t\t * var string = wordArray.toString();\n\t\t\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t\t\t */\n\t\t\t toString: function (encoder) {\n\t\t\t return (encoder || Hex).stringify(this);\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Concatenates a word array to this word array.\n\t\t\t *\n\t\t\t * @param {WordArray} wordArray The word array to append.\n\t\t\t *\n\t\t\t * @return {WordArray} This word array.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * wordArray1.concat(wordArray2);\n\t\t\t */\n\t\t\t concat: function (wordArray) {\n\t\t\t // Shortcuts\n\t\t\t var thisWords = this.words;\n\t\t\t var thatWords = wordArray.words;\n\t\t\t var thisSigBytes = this.sigBytes;\n\t\t\t var thatSigBytes = wordArray.sigBytes;\n\n\t\t\t // Clamp excess bits\n\t\t\t this.clamp();\n\n\t\t\t // Concat\n\t\t\t if (thisSigBytes % 4) {\n\t\t\t // Copy one byte at a time\n\t\t\t for (var i = 0; i < thatSigBytes; i++) {\n\t\t\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t\t\t }\n\t\t\t } else {\n\t\t\t // Copy one word at a time\n\t\t\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t\t\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t\t\t }\n\t\t\t }\n\t\t\t this.sigBytes += thatSigBytes;\n\n\t\t\t // Chainable\n\t\t\t return this;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Removes insignificant bits.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * wordArray.clamp();\n\t\t\t */\n\t\t\t clamp: function () {\n\t\t\t // Shortcuts\n\t\t\t var words = this.words;\n\t\t\t var sigBytes = this.sigBytes;\n\n\t\t\t // Clamp\n\t\t\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t\t\t words.length = Math.ceil(sigBytes / 4);\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Creates a copy of this word array.\n\t\t\t *\n\t\t\t * @return {WordArray} The clone.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var clone = wordArray.clone();\n\t\t\t */\n\t\t\t clone: function () {\n\t\t\t var clone = Base.clone.call(this);\n\t\t\t clone.words = this.words.slice(0);\n\n\t\t\t return clone;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Creates a word array filled with random bytes.\n\t\t\t *\n\t\t\t * @param {number} nBytes The number of random bytes to generate.\n\t\t\t *\n\t\t\t * @return {WordArray} The random word array.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t\t\t */\n\t\t\t random: function (nBytes) {\n\t\t\t var words = [];\n\n\t\t\t for (var i = 0; i < nBytes; i += 4) {\n\t\t\t words.push(cryptoSecureRandomInt());\n\t\t\t }\n\n\t\t\t return new WordArray.init(words, nBytes);\n\t\t\t }\n\t\t\t });\n\n\t\t\t /**\n\t\t\t * Encoder namespace.\n\t\t\t */\n\t\t\t var C_enc = C.enc = {};\n\n\t\t\t /**\n\t\t\t * Hex encoding strategy.\n\t\t\t */\n\t\t\t var Hex = C_enc.Hex = {\n\t\t\t /**\n\t\t\t * Converts a word array to a hex string.\n\t\t\t *\n\t\t\t * @param {WordArray} wordArray The word array.\n\t\t\t *\n\t\t\t * @return {string} The hex string.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t\t\t */\n\t\t\t stringify: function (wordArray) {\n\t\t\t // Shortcuts\n\t\t\t var words = wordArray.words;\n\t\t\t var sigBytes = wordArray.sigBytes;\n\n\t\t\t // Convert\n\t\t\t var hexChars = [];\n\t\t\t for (var i = 0; i < sigBytes; i++) {\n\t\t\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t\t hexChars.push((bite >>> 4).toString(16));\n\t\t\t hexChars.push((bite & 0x0f).toString(16));\n\t\t\t }\n\n\t\t\t return hexChars.join('');\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Converts a hex string to a word array.\n\t\t\t *\n\t\t\t * @param {string} hexStr The hex string.\n\t\t\t *\n\t\t\t * @return {WordArray} The word array.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t\t\t */\n\t\t\t parse: function (hexStr) {\n\t\t\t // Shortcut\n\t\t\t var hexStrLength = hexStr.length;\n\n\t\t\t // Convert\n\t\t\t var words = [];\n\t\t\t for (var i = 0; i < hexStrLength; i += 2) {\n\t\t\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t\t\t }\n\n\t\t\t return new WordArray.init(words, hexStrLength / 2);\n\t\t\t }\n\t\t\t };\n\n\t\t\t /**\n\t\t\t * Latin1 encoding strategy.\n\t\t\t */\n\t\t\t var Latin1 = C_enc.Latin1 = {\n\t\t\t /**\n\t\t\t * Converts a word array to a Latin1 string.\n\t\t\t *\n\t\t\t * @param {WordArray} wordArray The word array.\n\t\t\t *\n\t\t\t * @return {string} The Latin1 string.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t\t\t */\n\t\t\t stringify: function (wordArray) {\n\t\t\t // Shortcuts\n\t\t\t var words = wordArray.words;\n\t\t\t var sigBytes = wordArray.sigBytes;\n\n\t\t\t // Convert\n\t\t\t var latin1Chars = [];\n\t\t\t for (var i = 0; i < sigBytes; i++) {\n\t\t\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t\t latin1Chars.push(String.fromCharCode(bite));\n\t\t\t }\n\n\t\t\t return latin1Chars.join('');\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Converts a Latin1 string to a word array.\n\t\t\t *\n\t\t\t * @param {string} latin1Str The Latin1 string.\n\t\t\t *\n\t\t\t * @return {WordArray} The word array.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t\t\t */\n\t\t\t parse: function (latin1Str) {\n\t\t\t // Shortcut\n\t\t\t var latin1StrLength = latin1Str.length;\n\n\t\t\t // Convert\n\t\t\t var words = [];\n\t\t\t for (var i = 0; i < latin1StrLength; i++) {\n\t\t\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t\t\t }\n\n\t\t\t return new WordArray.init(words, latin1StrLength);\n\t\t\t }\n\t\t\t };\n\n\t\t\t /**\n\t\t\t * UTF-8 encoding strategy.\n\t\t\t */\n\t\t\t var Utf8 = C_enc.Utf8 = {\n\t\t\t /**\n\t\t\t * Converts a word array to a UTF-8 string.\n\t\t\t *\n\t\t\t * @param {WordArray} wordArray The word array.\n\t\t\t *\n\t\t\t * @return {string} The UTF-8 string.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t\t\t */\n\t\t\t stringify: function (wordArray) {\n\t\t\t try {\n\t\t\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t\t\t } catch (e) {\n\t\t\t throw new Error('Malformed UTF-8 data');\n\t\t\t }\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Converts a UTF-8 string to a word array.\n\t\t\t *\n\t\t\t * @param {string} utf8Str The UTF-8 string.\n\t\t\t *\n\t\t\t * @return {WordArray} The word array.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t\t\t */\n\t\t\t parse: function (utf8Str) {\n\t\t\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t\t\t }\n\t\t\t };\n\n\t\t\t /**\n\t\t\t * Abstract buffered block algorithm template.\n\t\t\t *\n\t\t\t * The property blockSize must be implemented in a concrete subtype.\n\t\t\t *\n\t\t\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t\t\t */\n\t\t\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t\t\t /**\n\t\t\t * Resets this block algorithm's data buffer to its initial state.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * bufferedBlockAlgorithm.reset();\n\t\t\t */\n\t\t\t reset: function () {\n\t\t\t // Initial values\n\t\t\t this._data = new WordArray.init();\n\t\t\t this._nDataBytes = 0;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Adds new data to this block algorithm's buffer.\n\t\t\t *\n\t\t\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * bufferedBlockAlgorithm._append('data');\n\t\t\t * bufferedBlockAlgorithm._append(wordArray);\n\t\t\t */\n\t\t\t _append: function (data) {\n\t\t\t // Convert string to WordArray, else assume WordArray already\n\t\t\t if (typeof data == 'string') {\n\t\t\t data = Utf8.parse(data);\n\t\t\t }\n\n\t\t\t // Append\n\t\t\t this._data.concat(data);\n\t\t\t this._nDataBytes += data.sigBytes;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Processes available data blocks.\n\t\t\t *\n\t\t\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t\t\t *\n\t\t\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t\t\t *\n\t\t\t * @return {WordArray} The processed data.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var processedData = bufferedBlockAlgorithm._process();\n\t\t\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t\t\t */\n\t\t\t _process: function (doFlush) {\n\t\t\t var processedWords;\n\n\t\t\t // Shortcuts\n\t\t\t var data = this._data;\n\t\t\t var dataWords = data.words;\n\t\t\t var dataSigBytes = data.sigBytes;\n\t\t\t var blockSize = this.blockSize;\n\t\t\t var blockSizeBytes = blockSize * 4;\n\n\t\t\t // Count blocks ready\n\t\t\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t\t\t if (doFlush) {\n\t\t\t // Round up to include partial blocks\n\t\t\t nBlocksReady = Math.ceil(nBlocksReady);\n\t\t\t } else {\n\t\t\t // Round down to include only full blocks,\n\t\t\t // less the number of blocks that must remain in the buffer\n\t\t\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t\t\t }\n\n\t\t\t // Count words ready\n\t\t\t var nWordsReady = nBlocksReady * blockSize;\n\n\t\t\t // Count bytes ready\n\t\t\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t\t\t // Process blocks\n\t\t\t if (nWordsReady) {\n\t\t\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t\t\t // Perform concrete-algorithm logic\n\t\t\t this._doProcessBlock(dataWords, offset);\n\t\t\t }\n\n\t\t\t // Remove processed words\n\t\t\t processedWords = dataWords.splice(0, nWordsReady);\n\t\t\t data.sigBytes -= nBytesReady;\n\t\t\t }\n\n\t\t\t // Return processed words\n\t\t\t return new WordArray.init(processedWords, nBytesReady);\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Creates a copy of this object.\n\t\t\t *\n\t\t\t * @return {Object} The clone.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var clone = bufferedBlockAlgorithm.clone();\n\t\t\t */\n\t\t\t clone: function () {\n\t\t\t var clone = Base.clone.call(this);\n\t\t\t clone._data = this._data.clone();\n\n\t\t\t return clone;\n\t\t\t },\n\n\t\t\t _minBufferSize: 0\n\t\t\t });\n\n\t\t\t /**\n\t\t\t * Abstract hasher template.\n\t\t\t *\n\t\t\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t\t\t */\n\t\t\t C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t\t\t /**\n\t\t\t * Configuration options.\n\t\t\t */\n\t\t\t cfg: Base.extend(),\n\n\t\t\t /**\n\t\t\t * Initializes a newly created hasher.\n\t\t\t *\n\t\t\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var hasher = CryptoJS.algo.SHA256.create();\n\t\t\t */\n\t\t\t init: function (cfg) {\n\t\t\t // Apply config defaults\n\t\t\t this.cfg = this.cfg.extend(cfg);\n\n\t\t\t // Set initial values\n\t\t\t this.reset();\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Resets this hasher to its initial state.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * hasher.reset();\n\t\t\t */\n\t\t\t reset: function () {\n\t\t\t // Reset data buffer\n\t\t\t BufferedBlockAlgorithm.reset.call(this);\n\n\t\t\t // Perform concrete-hasher logic\n\t\t\t this._doReset();\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Updates this hasher with a message.\n\t\t\t *\n\t\t\t * @param {WordArray|string} messageUpdate The message to append.\n\t\t\t *\n\t\t\t * @return {Hasher} This hasher.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * hasher.update('message');\n\t\t\t * hasher.update(wordArray);\n\t\t\t */\n\t\t\t update: function (messageUpdate) {\n\t\t\t // Append\n\t\t\t this._append(messageUpdate);\n\n\t\t\t // Update the hash\n\t\t\t this._process();\n\n\t\t\t // Chainable\n\t\t\t return this;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Finalizes the hash computation.\n\t\t\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t\t\t *\n\t\t\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t\t\t *\n\t\t\t * @return {WordArray} The hash.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var hash = hasher.finalize();\n\t\t\t * var hash = hasher.finalize('message');\n\t\t\t * var hash = hasher.finalize(wordArray);\n\t\t\t */\n\t\t\t finalize: function (messageUpdate) {\n\t\t\t // Final message update\n\t\t\t if (messageUpdate) {\n\t\t\t this._append(messageUpdate);\n\t\t\t }\n\n\t\t\t // Perform concrete-hasher logic\n\t\t\t var hash = this._doFinalize();\n\n\t\t\t return hash;\n\t\t\t },\n\n\t\t\t blockSize: 512/32,\n\n\t\t\t /**\n\t\t\t * Creates a shortcut function to a hasher's object interface.\n\t\t\t *\n\t\t\t * @param {Hasher} hasher The hasher to create a helper for.\n\t\t\t *\n\t\t\t * @return {Function} The shortcut function.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t\t\t */\n\t\t\t _createHelper: function (hasher) {\n\t\t\t return function (message, cfg) {\n\t\t\t return new hasher.init(cfg).finalize(message);\n\t\t\t };\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Creates a shortcut function to the HMAC's object interface.\n\t\t\t *\n\t\t\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t\t\t *\n\t\t\t * @return {Function} The shortcut function.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t\t\t */\n\t\t\t _createHmacHelper: function (hasher) {\n\t\t\t return function (message, key) {\n\t\t\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t\t\t };\n\t\t\t }\n\t\t\t });\n\n\t\t\t /**\n\t\t\t * Algorithm namespace.\n\t\t\t */\n\t\t\t var C_algo = C.algo = {};\n\n\t\t\t return C;\n\t\t\t}(Math));\n\n\n\t\t\treturn CryptoJS;\n\n\t\t})); \n\t} (core$1));\n\treturn core$1.exports;\n}\n\nvar sha256$1 = sha256$2.exports;\n\nvar hasRequiredSha256;\n\nfunction requireSha256 () {\n\tif (hasRequiredSha256) return sha256$2.exports;\n\thasRequiredSha256 = 1;\n\t(function (module, exports) {\n(function (root, factory) {\n\t\t\t{\n\t\t\t\t// CommonJS\n\t\t\t\tmodule.exports = factory(requireCore());\n\t\t\t}\n\t\t}(sha256$1, function (CryptoJS) {\n\n\t\t\t(function (Math) {\n\t\t\t // Shortcuts\n\t\t\t var C = CryptoJS;\n\t\t\t var C_lib = C.lib;\n\t\t\t var WordArray = C_lib.WordArray;\n\t\t\t var Hasher = C_lib.Hasher;\n\t\t\t var C_algo = C.algo;\n\n\t\t\t // Initialization and round constants tables\n\t\t\t var H = [];\n\t\t\t var K = [];\n\n\t\t\t // Compute constants\n\t\t\t (function () {\n\t\t\t function isPrime(n) {\n\t\t\t var sqrtN = Math.sqrt(n);\n\t\t\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t\t\t if (!(n % factor)) {\n\t\t\t return false;\n\t\t\t }\n\t\t\t }\n\n\t\t\t return true;\n\t\t\t }\n\n\t\t\t function getFractionalBits(n) {\n\t\t\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t\t\t }\n\n\t\t\t var n = 2;\n\t\t\t var nPrime = 0;\n\t\t\t while (nPrime < 64) {\n\t\t\t if (isPrime(n)) {\n\t\t\t if (nPrime < 8) {\n\t\t\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t\t\t }\n\t\t\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t\t\t nPrime++;\n\t\t\t }\n\n\t\t\t n++;\n\t\t\t }\n\t\t\t }());\n\n\t\t\t // Reusable object\n\t\t\t var W = [];\n\n\t\t\t /**\n\t\t\t * SHA-256 hash algorithm.\n\t\t\t */\n\t\t\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t\t\t _doReset: function () {\n\t\t\t this._hash = new WordArray.init(H.slice(0));\n\t\t\t },\n\n\t\t\t _doProcessBlock: function (M, offset) {\n\t\t\t // Shortcut\n\t\t\t var H = this._hash.words;\n\n\t\t\t // Working variables\n\t\t\t var a = H[0];\n\t\t\t var b = H[1];\n\t\t\t var c = H[2];\n\t\t\t var d = H[3];\n\t\t\t var e = H[4];\n\t\t\t var f = H[5];\n\t\t\t var g = H[6];\n\t\t\t var h = H[7];\n\n\t\t\t // Computation\n\t\t\t for (var i = 0; i < 64; i++) {\n\t\t\t if (i < 16) {\n\t\t\t W[i] = M[offset + i] | 0;\n\t\t\t } else {\n\t\t\t var gamma0x = W[i - 15];\n\t\t\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t\t\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t\t\t (gamma0x >>> 3);\n\n\t\t\t var gamma1x = W[i - 2];\n\t\t\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t\t\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t\t\t (gamma1x >>> 10);\n\n\t\t\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t\t\t }\n\n\t\t\t var ch = (e & f) ^ (~e & g);\n\t\t\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t\t\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t\t\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t\t\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t\t\t var t2 = sigma0 + maj;\n\n\t\t\t h = g;\n\t\t\t g = f;\n\t\t\t f = e;\n\t\t\t e = (d + t1) | 0;\n\t\t\t d = c;\n\t\t\t c = b;\n\t\t\t b = a;\n\t\t\t a = (t1 + t2) | 0;\n\t\t\t }\n\n\t\t\t // Intermediate hash value\n\t\t\t H[0] = (H[0] + a) | 0;\n\t\t\t H[1] = (H[1] + b) | 0;\n\t\t\t H[2] = (H[2] + c) | 0;\n\t\t\t H[3] = (H[3] + d) | 0;\n\t\t\t H[4] = (H[4] + e) | 0;\n\t\t\t H[5] = (H[5] + f) | 0;\n\t\t\t H[6] = (H[6] + g) | 0;\n\t\t\t H[7] = (H[7] + h) | 0;\n\t\t\t },\n\n\t\t\t _doFinalize: function () {\n\t\t\t // Shortcuts\n\t\t\t var data = this._data;\n\t\t\t var dataWords = data.words;\n\n\t\t\t var nBitsTotal = this._nDataBytes * 8;\n\t\t\t var nBitsLeft = data.sigBytes * 8;\n\n\t\t\t // Add padding\n\t\t\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t\t\t data.sigBytes = dataWords.length * 4;\n\n\t\t\t // Hash final blocks\n\t\t\t this._process();\n\n\t\t\t // Return final computed hash\n\t\t\t return this._hash;\n\t\t\t },\n\n\t\t\t clone: function () {\n\t\t\t var clone = Hasher.clone.call(this);\n\t\t\t clone._hash = this._hash.clone();\n\n\t\t\t return clone;\n\t\t\t }\n\t\t\t });\n\n\t\t\t /**\n\t\t\t * Shortcut function to the hasher's object interface.\n\t\t\t *\n\t\t\t * @param {WordArray|string} message The message to hash.\n\t\t\t *\n\t\t\t * @return {WordArray} The hash.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var hash = CryptoJS.SHA256('message');\n\t\t\t * var hash = CryptoJS.SHA256(wordArray);\n\t\t\t */\n\t\t\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t\t\t /**\n\t\t\t * Shortcut function to the HMAC's object interface.\n\t\t\t *\n\t\t\t * @param {WordArray|string} message The message to hash.\n\t\t\t * @param {WordArray|string} key The secret key.\n\t\t\t *\n\t\t\t * @return {WordArray} The HMAC.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t\t\t */\n\t\t\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t\t\t}(Math));\n\n\n\t\t\treturn CryptoJS.SHA256;\n\n\t\t})); \n\t} (sha256$2));\n\treturn sha256$2.exports;\n}\n\nvar sha256Exports = requireSha256();\nvar sha256 = /*@__PURE__*/getDefaultExportFromCjs(sha256Exports);\n\nclass Hasher {\n static getHashDoubleForMEGroup(visitorIdentifier, meGroupName) {\n return this.calculateHash(visitorIdentifier + meGroupName);\n }\n static getHashDouble({ visitorIdentifier, id, respoolTime, }) {\n let suffix = '';\n if (respoolTime) {\n suffix += String(respoolTime);\n }\n return this.calculateHash(visitorIdentifier + id + suffix);\n }\n // --- Note ---\n // `hashDouble` is a seeded pseudo-random number between 0 and 1\n // used for deciding what variation to assign\n // `calculateHash` algorithm is consistent between every SDK\n // and will always provide same pseudo-random value for the same input parameters\n static calculateHash(seed) {\n const hashDigest = sha256(seed).toString();\n return parseInt(hashDigest, 16) / Math.pow(2, 256);\n }\n}\n\nclass VariationConfiguration {\n constructor(externalStorage, externalStorageForcedExperimentVariations, externalStorageForcedFeatureVariations, visitorCodeManager, clientConfiguration) {\n this.storage = externalStorage;\n this.storageForcedExperimentVariations =\n externalStorageForcedExperimentVariations;\n this.storageForcedFeatureVariations =\n externalStorageForcedFeatureVariations;\n this.visitorCodeManager = visitorCodeManager;\n this.clientConfiguration = clientConfiguration;\n visitorCodeManager.setVariationConfiguration(this);\n }\n updateDataStatus({ visitorCode, experimentIdList, status, }) {\n const result = this.storage.read();\n if (!result.ok) {\n return result;\n }\n let updatedVariationData = result.data;\n if (!updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {};\n }\n for (const experimentId of experimentIdList) {\n updatedVariationData[visitorCode][experimentId] = Object.assign(Object.assign({}, updatedVariationData[visitorCode][experimentId]), { status });\n }\n return this.storage.write(updatedVariationData);\n }\n getUnsentData(visitorCode) {\n return this.getVariationData(visitorCode, (status) => status === TrackingStatus.Unsent);\n }\n getVisitorsWithUnsentData() {\n KameleoonLogger.debug `CALL: VariationConfiguration.unsentDataVisitors()`;\n const result = this.storage.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.unsentDataVisitors() -> (result: ${result})`;\n return [];\n }\n const visitors = [];\n for (const [visitorCode, variations] of Object.entries(result.data)) {\n if (Object.values(variations).some((v) => v.status === TrackingStatus.Unsent)) {\n visitors.push(visitorCode);\n }\n }\n KameleoonLogger.debug `RETURN: VariationConfiguration.unsentDataVisitors() -> (visitors: ${visitors})`;\n return visitors;\n }\n getPendingData(visitorCode) {\n return this.getVariationData(visitorCode, (status) => status === TrackingStatus.Pending);\n }\n getStoredVariations(visitorCode) {\n const result = this.storage.read();\n if (!result.ok) {\n return result;\n }\n const featureFlagVariations = result.data[visitorCode];\n if (!featureFlagVariations) {\n return buildExports.Err(new KameleoonError(KameleoonException.StorageRead, visitorCode));\n }\n return buildExports.Ok(featureFlagVariations);\n }\n getVariation({ visitorCode, visitorIdentifier, featureFlag, targetingData, packageInfo, clientConfiguration, dataManager, legalConsent, track = true, withAssignment = false, }) {\n KameleoonLogger.debug `CALL: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment})`;\n const { rules, featureKey, id: featureFlagId, defaultVariationKey, } = featureFlag;\n const consent = clientConfiguration.isConsentRequired\n ? legalConsent\n : LegalConsent.Given;\n for (const rule of rules) {\n const { segment, experimentId, id, exposition, respoolTime, variationByExposition, } = rule;\n const forcedVariationData = this.getForcedExperimentVariation(visitorCode, rule.experimentId);\n let forcedVariation = null;\n if (forcedVariationData.ok) {\n forcedVariation = forcedVariationData.data;\n if (forcedVariation && forcedVariation.forceTargeting) {\n KameleoonLogger.info `Visitor ${visitorCode} has been forced targeted for ${rule}`;\n const targetedVariation = this.createAndSaveForcedTargetedVariation(visitorCode, featureFlag, rule, forcedVariation, track, withAssignment);\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return buildExports.Ok(targetedVariation);\n }\n }\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n variationConfiguration: this,\n });\n if (!targetingResult.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetingResult})`;\n return targetingResult;\n }\n if (!targetingResult.data) {\n continue;\n }\n KameleoonLogger.info `Visitor ${visitorCode} has been targeted for ${rule}`;\n if (forcedVariation) {\n const targetedVariation = this.createAndSaveForcedTargetedVariation(visitorCode, featureFlag, rule, forcedVariation, track, withAssignment);\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return buildExports.Ok(targetedVariation);\n }\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(id),\n });\n KameleoonLogger.debug `Calculated ruleHash: ${ruleHash} for code: ${visitorIdentifier}`;\n if (ruleHash <= exposition) {\n // Checking if the evaluation is blocked due to the consent policy\n if (consent == LegalConsent.NotGiven &&\n rule.type == RuleType.EXPERIMENTATION) {\n const behaviour = clientConfiguration.consentBlockingBehaviour;\n if (behaviour == ConsentBlockingBehaviour.PartiallyBlocked) {\n break;\n }\n return buildExports.Err(new KameleoonError(KameleoonException.FeatureFlagEnvironmentDisabled, `Evaluation of ${rule} is blocked because consent is not provided for visitor '${visitorCode}'`));\n }\n // evaluate with CB scores if applicable\n let variation = this.evaluateCBScores(rule, visitorIdentifier, targetingData);\n if (!variation) {\n const variationHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(experimentId),\n });\n KameleoonLogger.debug `Calculated variationHash: ${variationHash} for code: ${visitorIdentifier}`;\n variation = Utilities.getVariationByHash(variationByExposition, variationHash);\n }\n if (variation) {\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [experimentId]: {\n variationId: variation.variationId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n const targetedVariation = {\n variationId: variation.variationId,\n variationKey: variation.variationKey,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n };\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return buildExports.Ok(targetedVariation);\n }\n }\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n const targetedVariation = {\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: true,\n };\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return buildExports.Ok(targetedVariation);\n }\n }\n const targetedVariation = {\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: false,\n };\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return buildExports.Ok(targetedVariation);\n }\n createAndSaveForcedTargetedVariation(visitorCode, featureFlag, rule, forcedVariation, track, withAssignment) {\n const targetedVariation = {\n variationKey: forcedVariation.varByExp.variationKey,\n variationId: forcedVariation.varByExp.variationId,\n rule,\n featureFlagId: featureFlag.id,\n featureKey: featureFlag.featureKey,\n experimentId: rule.experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n };\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [rule.experimentId]: {\n variationId: targetedVariation.variationId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n return targetedVariation;\n }\n updateStoredVariations(visitorCode, variationData) {\n KameleoonLogger.debug `CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData})`;\n const result = this.storage.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData}) -> (result: ${result})`;\n return result;\n }\n let updatedVariationData = result.data;\n if (!updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {};\n }\n for (const experimentId in variationData) {\n updatedVariationData[visitorCode][experimentId] =\n variationData[experimentId];\n }\n const resultWrite = this.storage.write(updatedVariationData);\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n getVariationData(visitorCode, filter) {\n const result = this.getStoredVariations(visitorCode);\n if (!result.ok) {\n return [];\n }\n const resultData = [];\n for (const [experimentId, variationData] of Object.entries(result.data)) {\n if (filter(variationData.status)) {\n resultData.push({\n experimentId: Number(experimentId),\n variationId: variationData.variationId,\n isTargetedRule: variationData.isTargetedRule,\n });\n }\n }\n return resultData;\n }\n updateForcedExperimentVariation(visitorCode, experimentId, forcedExperimentVariation) {\n KameleoonLogger.debug `CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation})`;\n const result = this.storageForcedExperimentVariations.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation}) -> (result: ${result})`;\n return result;\n }\n let updatedForcedVariationData = result.data;\n if (!updatedForcedVariationData[visitorCode]) {\n updatedForcedVariationData[visitorCode] = {};\n }\n if (forcedExperimentVariation) {\n updatedForcedVariationData[visitorCode][experimentId] =\n forcedExperimentVariation;\n }\n else {\n delete updatedForcedVariationData[visitorCode][experimentId];\n }\n const resultWrite = this.storageForcedExperimentVariations.write(updatedForcedVariationData);\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n updateForcedFeatureVariations(visitorCode, forcedFeatureVariations) {\n KameleoonLogger.debug `CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations})`;\n const result = this.storageForcedFeatureVariations.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations}) -> (result: ${result})`;\n return result;\n }\n let updatedVariationData = result.data;\n if (!updatedVariationData[0]) {\n updatedVariationData[0] = {};\n }\n if (!updatedVariationData[1]) {\n updatedVariationData[1] = {};\n }\n const updatedForcedFeatureVariationData = updatedVariationData[0];\n const updatedSimulatedFeatureVariationData = updatedVariationData[1];\n if (!updatedForcedFeatureVariationData[visitorCode]) {\n updatedForcedFeatureVariationData[visitorCode] = {};\n }\n if (!updatedSimulatedFeatureVariationData[visitorCode]) {\n updatedSimulatedFeatureVariationData[visitorCode] = {};\n }\n forcedFeatureVariations.forEach((forcedFeatureVariation) => {\n const targetData = forcedFeatureVariation.simulated\n ? updatedSimulatedFeatureVariationData[visitorCode]\n : updatedForcedFeatureVariationData[visitorCode];\n targetData[forcedFeatureVariation.featureKey] = forcedFeatureVariation;\n });\n const resultWrite = this.storageForcedFeatureVariations.write(updatedVariationData);\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n clearSimulatedVariations(visitorCode) {\n var _a;\n KameleoonLogger.debug `CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode})`;\n const result = this.storageForcedFeatureVariations.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode}) -> (result: ${result})`;\n return result;\n }\n let resultWrite;\n const updatedVariationData = result.data;\n if ((_a = updatedVariationData === null || updatedVariationData === void 0 ? void 0 : updatedVariationData[1]) === null || _a === void 0 ? void 0 : _a[visitorCode]) {\n delete updatedVariationData[1][visitorCode];\n resultWrite =\n this.storageForcedFeatureVariations.write(updatedVariationData);\n }\n else {\n resultWrite = buildExports.Ok();\n }\n KameleoonLogger.debug `RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n getForcedFeatureVariation(visitorCode, featureKey) {\n var _a, _b, _c, _d;\n KameleoonLogger.debug `CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n const result = this.storageForcedFeatureVariations.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (simulatedResult: ${result})`;\n return result;\n }\n const simulatedData = (_b = (_a = result.data[1]) === null || _a === void 0 ? void 0 : _a[visitorCode]) === null || _b === void 0 ? void 0 : _b[featureKey];\n if (simulatedData) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (simulatedData: ${simulatedData})`;\n return buildExports.Ok(simulatedData);\n }\n const forcedData = (_d = (_c = result.data[0]) === null || _c === void 0 ? void 0 : _c[visitorCode]) === null || _d === void 0 ? void 0 : _d[featureKey];\n KameleoonLogger.debug `RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (forcedData: ${forcedData})`;\n return buildExports.Ok(forcedData);\n }\n getForcedExperimentVariation(visitorCode, experimentId) {\n var _a;\n KameleoonLogger.debug `CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId})`;\n const forcedResult = this.storageForcedExperimentVariations.read();\n if (!forcedResult.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}) -> (forcedResult: ${forcedResult})`;\n return forcedResult;\n }\n const forcedData = (_a = forcedResult.data[visitorCode]) === null || _a === void 0 ? void 0 : _a[experimentId];\n KameleoonLogger.debug `RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}) -> (forcedExperiment: ${forcedData})`;\n return buildExports.Ok(forcedData);\n }\n parseForcedVariationData(simulatedVariation, simulated = false) {\n const featureFlag = this.clientConfiguration.featureFlags.get(simulatedVariation.featureKey);\n if (!featureFlag) {\n KameleoonLogger.error `Simulated feature flag '${simulatedVariation.featureKey}' not found`;\n return null;\n }\n let forcedVariation = null;\n if (simulatedVariation.experimentId === 0) {\n forcedVariation = {\n featureKey: simulatedVariation.featureKey,\n rule: null,\n varByExp: null,\n simulated: simulated,\n };\n return forcedVariation;\n }\n for (const rule of featureFlag.rules) {\n if (simulatedVariation.experimentId !== rule.experimentId) {\n continue;\n }\n const varByExp = rule.variationByExposition.find((varByExp) => varByExp.variationId === simulatedVariation.variationId);\n if (varByExp) {\n forcedVariation = {\n featureKey: simulatedVariation.featureKey,\n rule: {\n type: rule.type,\n experimentId: rule.experimentId,\n },\n varByExp: {\n variationKey: varByExp.variationKey,\n variationId: varByExp.variationId,\n },\n simulated: simulated,\n };\n return forcedVariation;\n }\n }\n KameleoonLogger.error `Simulated variation ${simulatedVariation.variationId} not found`;\n return null;\n }\n simulatedVariationFromJson(featureKey, data) {\n KameleoonLogger.debug `CALL: VariationConfiguration.simulatedVariationFromJson(featureKey: ${featureKey}, data: ${data})`;\n if (!this.isSimulatedVariationJson(data)) {\n return null;\n }\n const forcedVariation = this.parseForcedVariationData({\n featureKey,\n variationId: data.varId,\n experimentId: data.expId,\n }, true);\n KameleoonLogger.debug `RETURN: VariationConfiguration.simulatedVariationFromJson(featureKey: ${featureKey}, data: ${data}) -> (forcedVariation: ${forcedVariation})`;\n return forcedVariation;\n }\n isSimulatedVariationJson(value) {\n return value && (typeof value.expId === 'number' || value.expId === null);\n }\n evaluateCBScores(rule, visitorIdentifier, targetingData) {\n if (!targetingData || !targetingData.cbScores) {\n return null;\n }\n KameleoonLogger.debug `CALL: KameleoonClientImpl.evaluateCBScores(rule: ${rule}, targetingData: ${targetingData}, visitorIdentifier: ${visitorIdentifier})`;\n const experimentId = rule.experimentId;\n const varIdGroupByScores = new CBScores(targetingData.cbScores.cbs)\n .getValues()\n .get(experimentId);\n let variation = null;\n if (varIdGroupByScores !== undefined) {\n const varByExps = rule.variationByExposition;\n const varByExpExistInCBS = varIdGroupByScores\n .map((varGroup) => varByExps.filter((varByExp) => varGroup.ids.includes(varByExp.variationId)))\n .find((varByExpExistInCBS) => varByExpExistInCBS.length > 0);\n if (varByExpExistInCBS) {\n let idx = 0;\n if (varByExpExistInCBS.length > 1) {\n const variationHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime: rule.respoolTime,\n id: String(experimentId),\n });\n KameleoonLogger.debug `Calculated cbs hash ${variationHash} for code ${visitorIdentifier}`;\n idx = Math.min(Math.floor(variationHash * varByExpExistInCBS.length), varByExpExistInCBS.length - 1);\n }\n variation = varByExpExistInCBS[idx];\n }\n }\n KameleoonLogger.debug `RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${rule}, targetingData: ${targetingData}, visitorIdentifier: ${visitorIdentifier}) -> (variation: ${variation})`;\n return variation;\n }\n}\n\nconst REAL_TIME_EVENT = 'configuration-update-event';\n\n// --- Note ---\n// Named `KameleoonEventSource` to avoid collision with native `EventSource`\nclass KameleoonEventSource {\n constructor({ siteCode, externalEventSource, urlProvider, }) {\n this.url = urlProvider.getEventSourceUrl();\n this.siteCode = siteCode;\n this.eventSource = externalEventSource;\n this.isConnectionOpen = false;\n }\n get isOpen() {\n return this.isConnectionOpen;\n }\n open(onEvent) {\n this.eventSource.open({\n onEvent: this.handleMessage(onEvent),\n url: this.url,\n eventType: REAL_TIME_EVENT,\n });\n this.isConnectionOpen = true;\n KameleoonLogger.info `Established a new SSE connection with: ${this.url}`;\n }\n close() {\n this.eventSource.close();\n this.isConnectionOpen = false;\n KameleoonLogger.info `SSE connection: '${this.url}' was successfully closed`;\n }\n onError(callback) {\n if (!this.eventSource.onError) {\n KameleoonLogger.warning(\"EventSource does not have `onError` method provided. Real-time errors won't be handled.\");\n return;\n }\n this.eventSource.onError(callback);\n }\n handleMessage(onEvent) {\n const onMessage = (message) => {\n KameleoonLogger.debug `Received new message from: ${this.url}`;\n const event = JSON.parse(message.data);\n const { siteCode: eventSiteCode, ts } = event;\n if (this.siteCode === eventSiteCode) {\n onEvent(ts);\n }\n };\n return onMessage;\n }\n}\n\nvar Byte;\n(function (Byte) {\n Byte[Byte[\"Kb\"] = 1000] = \"Kb\";\n Byte[Byte[\"Mb\"] = 1000000] = \"Mb\";\n Byte[Byte[\"Gb\"] = 1000000000] = \"Gb\";\n})(Byte || (Byte = {}));\nconst MAX_BODY_SIZE = 10 * Byte.Mb;\nconst SYMBOL_SIZE = 4;\n\nclass BodyProvider {\n constructor(prng) {\n this.currentSize = 0;\n this.resultBody = [];\n this.hasUserAgent = false;\n this.trackingVisitors = {};\n this.prng = prng;\n }\n getTrackingBody() {\n const result = {\n body: this.resultBody.join('\\n'),\n hasUserAgent: this.hasUserAgent,\n };\n this.cleanup();\n return result;\n }\n addData({ visitorCode, variationData, visitorData, userAgent, isConsentProvided, isMappingIdentifier, }) {\n const lines = [];\n const variationDataLines = this.getVariationDataLines(variationData);\n const visitorDataLines = this.getVisitorDataLines(visitorData);\n lines.push(...variationDataLines, ...visitorDataLines);\n return this.addVisitorTrackingLines({\n visitorCode,\n lines,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n });\n }\n getVisitorDataLines(visitorData) {\n const lines = [];\n for (const data of visitorData) {\n let nonce;\n if (!(data instanceof StaticData) &&\n (data.data.type === KameleoonData.Conversion ||\n data.data.type === KameleoonData.PageView)) {\n const nonceValue = data.data.nonce;\n if (nonceValue) {\n nonce = nonceValue;\n }\n else {\n nonce = Utilities.getNonce(this.prng);\n data.data.nonce = nonce;\n }\n }\n if (!nonce) {\n nonce = Utilities.getNonce(this.prng);\n }\n lines.push(data.url + UrlParameter.Nonce + nonce);\n }\n return lines;\n }\n getVariationDataLines(variationData) {\n const lines = [];\n variationData.forEach((item) => {\n lines.push(UrlEventType.Experiment +\n UrlParameter.Id +\n item.experimentId +\n UrlParameter.VariationId +\n item.variationId +\n UrlParameter.Nonce +\n Utilities.getNonce(this.prng));\n });\n return lines;\n }\n prepareVisitorBody(visitorCode) {\n const visitorData = this.trackingVisitors[visitorCode];\n if (!visitorData) {\n return buildExports.Err();\n }\n const { lines, userAgent, isMappingIdentifier, isConsentProvided } = visitorData;\n const identifier = this.getIdentifier(visitorCode, isMappingIdentifier);\n if (lines.length) {\n lines.forEach((value, index) => {\n lines[index] = value + identifier;\n });\n KameleoonLogger.debug `Sending tracking request for unsent data ${lines} of visitor ${visitorCode} with given (or not required) consent ${isConsentProvided}`;\n }\n else if (isConsentProvided) {\n const activityLine = this.getActivityLine();\n lines.push(activityLine + identifier);\n KameleoonLogger.debug `Sending tracking request for activity of visitor ${visitorCode} with given consent`;\n }\n else {\n KameleoonLogger.debug `No data to send for visitor ${visitorCode} with no consent`;\n }\n if (userAgent && lines.length) {\n lines[0] += UrlParameter.UserAgent + userAgent;\n this.hasUserAgent = true;\n }\n // --- Note ---\n // Improve after `ts-res` chaining update\n const result = this.checkSize(lines);\n if (result.ok) {\n this.resultBody.push(...lines);\n }\n return result;\n }\n cleanup() {\n this.currentSize = 0;\n this.resultBody = [];\n this.hasUserAgent = false;\n this.trackingVisitors = {};\n }\n checkSize(lines) {\n let size = 0;\n size += lines.reduce((acc, line) => acc + line.length * SYMBOL_SIZE, 0);\n if (size + this.currentSize > MAX_BODY_SIZE) {\n return buildExports.Err();\n }\n this.currentSize += size;\n return buildExports.Ok();\n }\n addVisitorTrackingLines({ visitorCode, lines, userAgent, isConsentProvided, isMappingIdentifier, }) {\n if (!this.trackingVisitors[visitorCode]) {\n this.trackingVisitors[visitorCode] = {\n isMappingIdentifier,\n isConsentProvided,\n userAgent,\n lines,\n };\n }\n else {\n if (userAgent) {\n this.trackingVisitors[visitorCode].userAgent = userAgent;\n }\n this.trackingVisitors[visitorCode].lines.push(...lines);\n }\n return this.prepareVisitorBody(visitorCode);\n }\n getActivityLine() {\n return (UrlEventType.Activity + UrlParameter.Nonce + Utilities.getNonce(this.prng));\n }\n getIdentifier(visitorCode, isMappingIdentifier) {\n const identifier = isMappingIdentifier\n ? UrlParameter.MappingValue\n : UrlParameter.VisitorCode;\n return identifier + encodeURIComponent(visitorCode);\n }\n}\n\nclass Tracker {\n constructor({ dataManager, trackingStorage, variationConfiguration, trackingInterval, requester, prng, clientConfiguration, }) {\n this.intervalId = null;\n KameleoonLogger.debug `CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng, clientConfiguration)`;\n this.dataManager = dataManager;\n this.trackingStorage = trackingStorage;\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.bodyProvider = new BodyProvider(prng);\n this.clientConfiguration = clientConfiguration;\n try {\n this.intervalId = setInterval(() => {\n this.sendDataAll();\n }, trackingInterval);\n }\n catch (err) {\n this.intervalId && clearInterval(this.intervalId);\n throw err;\n }\n KameleoonLogger.debug `RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng, clientConfiguration)`;\n }\n scheduleVisitor(visitorCode, isConsentProvided) {\n KameleoonLogger.debug `CALL: Tracker.scheduleVisitor(visitorCode: ${visitorCode}, isConsentProvided: ${isConsentProvided})`;\n this.trackingStorage.read().and((trackingData) => {\n trackingData.scheduledVisitors[`_${visitorCode}`] = { isConsentProvided };\n this.trackingStorage.write(trackingData);\n });\n KameleoonLogger.debug `RETURN: Tracker.scheduleVisitor(visitorCode: ${visitorCode}, isConsentProvided: ${isConsentProvided})`;\n }\n checkIsIdentifier(visitorCode) {\n var _a, _b;\n const isUniqueIdentifier = this.dataManager.isUniqueIdentifier(visitorCode);\n const mappingIdentifier = (_b = (_a = this.dataManager.getMappingIdentifier(visitorCode)) === null || _a === void 0 ? void 0 : _a.mappingIdentifier) !== null && _b !== void 0 ? _b : visitorCode;\n let isMappingIdentifier = false;\n // --- Note ---\n // This part is a workaround for Data API\n // If there's is no unique identifier for the visitor\n // We do reconciliation for visitor with himself\n if (isUniqueIdentifier) {\n const linkedVisitor = this.dataManager.getLinkedVisitor(visitorCode);\n const index = this.dataManager.identifierCustomDataIndex;\n if (!linkedVisitor && typeof index === 'number') {\n this.dataManager.storeData({\n visitorCode,\n data: [new CustomData$1(index, visitorCode)],\n });\n }\n else {\n isMappingIdentifier = true;\n }\n }\n return isMappingIdentifier && visitorCode != mappingIdentifier;\n }\n getUserAgent(visitorCode) {\n const targetingData = this.dataManager.getVisitorData(visitorCode);\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n return undefined;\n }\n sendDataAll() {\n return __awaiter(this, void 0, void 0, function* () {\n const storageResult = this.trackingStorage.read();\n if (!storageResult.ok) {\n return;\n }\n const { scheduledVisitors } = storageResult.data;\n yield this.sendData(scheduledVisitors);\n });\n }\n sendDataForVisitor(visitorCode, isConsentProvided) {\n return __awaiter(this, void 0, void 0, function* () {\n const storageResult = this.trackingStorage.read();\n if (!storageResult.ok) {\n return;\n }\n yield this.sendData({ [`_${visitorCode}`]: { isConsentProvided } });\n });\n }\n sendData(scheduledVisitors) {\n return __awaiter(this, void 0, void 0, function* () {\n const pendingData = {};\n const trackingVisitorCodes = [];\n const trackedVisitors = [];\n for (const [visitorCode, { isConsentProvided }] of Object.entries(scheduledVisitors)) {\n let targetVisitorCode = visitorCode.startsWith('_')\n ? visitorCode.substring(1)\n : visitorCode;\n const isMappingIdentifier = this.checkIsIdentifier(targetVisitorCode);\n const userAgent = this.getUserAgent(targetVisitorCode);\n const visitorData = this.getUnsentVisitorData(targetVisitorCode, isConsentProvided);\n const variationData = this.getUnsentVariationData(targetVisitorCode, isConsentProvided);\n const result = this.bodyProvider.addData({\n visitorCode: targetVisitorCode,\n variationData,\n visitorData,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n });\n if (result.ok) {\n pendingData[targetVisitorCode] = {\n visitorData,\n variationData,\n };\n trackedVisitors.push({\n visitorCode: targetVisitorCode,\n isConsentProvided,\n });\n trackingVisitorCodes.push(visitorCode);\n }\n else {\n KameleoonLogger.warning('Visitor data to be tracked exceeded the request size limit. Some visitor data is kept to be sent later.' +\n ' If it is not caused by the peak load, decreasing the tracking interval is recommended.');\n break;\n }\n }\n const { body, hasUserAgent } = this.bodyProvider.getTrackingBody();\n if (trackingVisitorCodes.length !== 0) {\n this.trackingStorage.read().and((trackingData) => {\n trackingVisitorCodes.forEach((visitorCode) => {\n delete trackingData.scheduledVisitors[visitorCode];\n });\n this.trackingStorage.write(trackingData);\n });\n }\n if (!body) {\n return;\n }\n const result = yield this.requester.track(body, hasUserAgent);\n if (result.ok) {\n KameleoonLogger.info `Successful request for tracking visitors: ${trackedVisitors}, data: ${pendingData}`;\n this.updateDataStatus(pendingData, TrackingStatus.Sent);\n }\n else {\n KameleoonLogger.error('Tracking request failed');\n KameleoonLogger.info `Failed request for tracking visitors: ${trackedVisitors}, data: ${pendingData}`;\n this.updateDataStatus(pendingData, TrackingStatus.Unsent);\n let notTrackedVisitors = {};\n for (let { visitorCode, isConsentProvided } of trackedVisitors) {\n visitorCode = `_${visitorCode}`;\n notTrackedVisitors[visitorCode] = {\n isConsentProvided: isConsentProvided,\n };\n }\n this.addNotTrackedVisitors(notTrackedVisitors);\n }\n });\n }\n addNotTrackedVisitors(notTrackedVisitors) {\n const storageResult = this.trackingStorage.read();\n if (!storageResult.ok) {\n return;\n }\n const { scheduledVisitors } = storageResult.data;\n Object.entries(notTrackedVisitors).forEach(([visitorCode, { isConsentProvided }]) => {\n if (!scheduledVisitors[visitorCode]) {\n scheduledVisitors[visitorCode] = { isConsentProvided };\n }\n });\n this.trackingStorage.write({\n scheduledVisitors: scheduledVisitors,\n });\n }\n updateDataStatus(data, status) {\n let updatedData = {};\n for (const [visitorCode, { visitorData, variationData }] of Object.entries(data)) {\n const visitorDataForUpdate = visitorData\n .filter((dataItem) => !(dataItem instanceof StaticData))\n .map((dataItem) => {\n const item = dataItem;\n item.status = status;\n return item;\n });\n if (visitorDataForUpdate.length) {\n updatedData[visitorCode] = visitorDataForUpdate;\n }\n const experimentIdList = variationData.map((dataItem) => String(dataItem.experimentId));\n this.variationConfiguration.updateDataStatus({\n visitorCode,\n experimentIdList,\n status,\n });\n }\n if (Object.keys(updatedData).length === 0) {\n return;\n }\n if (status === TrackingStatus.Sent) {\n this.dataManager.storeTrackedData(updatedData);\n }\n else {\n this.dataManager.storeDataForVisitors(updatedData, false);\n }\n }\n getUnsentVisitorData(visitorCode, isConsentProvided) {\n const unsentData = this.dataManager.getUnsentData(visitorCode);\n const resultData = [];\n if (!unsentData.length) {\n return [];\n }\n for (const data of unsentData) {\n if (!data.url) {\n continue;\n }\n if (!isConsentProvided &&\n (!this.clientConfiguration.hasAnyTargetedDeliveryRule ||\n data instanceof StaticData ||\n data.data.type !== KameleoonData.Conversion)) {\n continue;\n }\n resultData.push(data);\n }\n if (resultData.length) {\n const pendingData = resultData\n .filter((data) => !(data instanceof StaticData))\n .map((data) => {\n const item = data;\n item.status = TrackingStatus.Pending;\n return item;\n });\n this.dataManager.storeTrackedData({\n [visitorCode]: pendingData,\n });\n }\n return resultData;\n }\n getUnsentVariationData(visitorCode, isConsentProvided) {\n const unsentData = this.variationConfiguration.getUnsentData(visitorCode);\n const sentExperimentIds = new Set();\n if (!unsentData.length) {\n return [];\n }\n const resultData = unsentData.filter((item) => {\n const isIncluded = item.isTargetedRule || isConsentProvided;\n if (isIncluded) {\n sentExperimentIds.add(String(item.experimentId));\n }\n return isIncluded;\n });\n this.variationConfiguration.updateDataStatus({\n visitorCode,\n experimentIdList: Array.from(sentExperimentIds),\n status: TrackingStatus.Pending,\n });\n return resultData;\n }\n}\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * for communicating with Kameleoon JavaScript SDK Core, when new instance is created\n */\nclass KameleoonClient {\n /**\n * @param {SDKCoreParameters} sdkCoreParameters - parameters for initializing sdk core\n */\n constructor({ siteCode, dependencies, configuration, internalConfiguration, stubMode, }) {\n var _a;\n this.initialized = false;\n this.stubMode = stubMode;\n if (stubMode) {\n this.variationConfiguration = {};\n this.clientConfiguration = {};\n this.dataManager = {};\n this.consentDataStorage = {};\n this.trackingCache = {};\n this.requester = {};\n this.externalPackageInfo = {};\n this.visitorCodeManager = {};\n this.eventManager = {};\n this.tracker = {};\n this.environment = '';\n return;\n }\n const logger = internalConfiguration === null || internalConfiguration === void 0 ? void 0 : internalConfiguration.externals.externalLogger;\n if (logger) {\n KameleoonLogger.setLogger(logger);\n }\n ConditionFactoryInstance.setConditionFactoryInstance(new ConditionFactory());\n KameleoonLogger.debug `CALL: new KameleoonClient(siteCode: ${siteCode}, dependencies: ${dependencies}, configuration: ${configuration})`;\n const { settings: clientSettings } = new ClientSettings(siteCode, configuration);\n this.environment = clientSettings.environment;\n const { externalStorage, externalEventSource, externalPackageInfo, externalVisitorCodeManager, externalRequester, externalPRNG, customDataManager, } = internalConfiguration.externals;\n const { useAbortController } = internalConfiguration.settings;\n const trackingCache = new CacheManager(CACHE_CLEANUP_TIMEOUT);\n const clientDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.ClientData);\n const variationDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.VariationData);\n const forcedVariationDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.ForcedExperimentVariation);\n const simulatedVariationDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.ForcedFeatureVariation);\n const consentDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.ConsentData);\n const trackingStorage = new DataStorage(externalStorage, KameleoonStorageKey.TrackingData);\n let dataManager = customDataManager;\n if (!dataManager) {\n const targetingDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.TargetingData);\n const dataInfoStorage = new DataStorage(externalStorage, KameleoonStorageKey.DataInfo);\n dataManager = new DataManager({\n dataStorage: targetingDataStorage,\n infoStorage: dataInfoStorage,\n cleanupInterval: clientSettings.cleanupInterval,\n packageInfo: externalPackageInfo,\n });\n }\n const urlProvider = (_a = dependencies === null || dependencies === void 0 ? void 0 : dependencies.urlProvider) !== null && _a !== void 0 ? _a : new UrlProvider();\n urlProvider.initialize({\n domain: clientSettings.networkDomain,\n siteCode: clientSettings.siteCode,\n packageInfo: externalPackageInfo,\n environment: clientSettings.environment,\n });\n const requester = new Requester({\n urlProvider,\n useAbortController,\n packageInfo: externalPackageInfo,\n externalRequester: externalRequester,\n requestTimeout: clientSettings.requestTimeout,\n trackRetryDelay: clientSettings.trackRetryDelay,\n });\n const eventSource = new KameleoonEventSource({\n siteCode: clientSettings.siteCode,\n externalEventSource,\n urlProvider,\n });\n const eventManager = new EventManager();\n const clientConfiguration = new ClientConfiguration({\n urlProvider,\n storage: clientDataStorage,\n updateInterval: clientSettings.updateInterval,\n dataManager,\n eventManager,\n requester,\n eventSource,\n externalVisitorCodeManager,\n externalPackageInfo,\n defaultDataFile: configuration === null || configuration === void 0 ? void 0 : configuration.defaultDataFile,\n });\n const variationConfiguration = new VariationConfiguration(variationDataStorage, forcedVariationDataStorage, simulatedVariationDataStorage, externalVisitorCodeManager, clientConfiguration);\n const tracker = new Tracker({\n dataManager,\n trackingStorage,\n variationConfiguration,\n requester,\n trackingInterval: clientSettings.trackingInterval,\n prng: externalPRNG,\n clientConfiguration,\n });\n this.tracker = tracker;\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.trackingCache = trackingCache;\n this.dataManager = dataManager;\n this.clientConfiguration = clientConfiguration;\n this.externalPackageInfo = externalPackageInfo;\n this.consentDataStorage = consentDataStorage;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventManager = eventManager;\n if (clientSettings.cleanupInterval !== null) {\n new StorageCleanupManager(externalStorage, clientSettings.cleanupInterval);\n }\n KameleoonLogger.debug `RETURN: new KameleoonClient(siteCode: ${siteCode}, dependencies: ${dependencies}, configuration: ${configuration})`;\n }\n initialize() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.stubMode) {\n return false;\n }\n KameleoonLogger.info('CALL: KameleoonClient.initialize()');\n const result = yield this.clientConfiguration.initialize();\n result.throw();\n this.initialized = true;\n KameleoonLogger.info `RETURN: KameleoonClient.initialize() -> (result: ${result.ok})`;\n return result.ok;\n });\n }\n addData(visitorCodeOrParams, ...dataRest) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n const params = typeof visitorCodeOrParams === 'string'\n ? { visitorCode: visitorCodeOrParams, data: dataRest }\n : visitorCodeOrParams;\n const { visitorCode, data, track = true } = params;\n KameleoonLogger.info `CALL: KameleoonClient.addData(visitorCode: ${visitorCode}, data: ${data})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n // assuming DataManager.storeData supports `track` (boolean) as discussed\n this.dataManager.storeData({ visitorCode, track, data }).throw();\n KameleoonLogger.info `RETURN: KameleoonClient.addData(visitorCode: ${visitorCode}, data: ${data})`;\n }\n getRemoteVisitorData({ visitorCode, shouldAddData = true, filters = DEFAULT_VISITOR_DATA_FILTERS, }) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${visitorCode}, shouldAddData: ${shouldAddData}, filters: ${filters})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const { previousVisitAmount } = filters;\n if (typeof previousVisitAmount === 'number' &&\n (previousVisitAmount < 1 || previousVisitAmount > 25)) {\n throw new KameleoonError(KameleoonException.VisitAmount);\n }\n const isUniqueIdentifier = this.dataManager.isUniqueIdentifier(visitorCode);\n const result = yield this.requester.getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier: isUniqueIdentifier,\n });\n const data = result.throw();\n const { visitorData, storageVisitorData, visitsData, mappingIdentifier } = Parser.parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n for (const dataItem of storageVisitorData) {\n if (shouldAddData || this.dataManager.isPersistentCustomData(dataItem)) {\n this.addData(visitorCode, dataItem);\n }\n }\n // --- Note ---\n // Data on visits amount and time stamps is not returned to a user\n if (visitsData && shouldAddData) {\n this.addData(visitorCode, visitsData);\n }\n if ((filters === null || filters === void 0 ? void 0 : filters.visitorCode) && mappingIdentifier) {\n this.dataManager.setMappingIdentifier(visitorCode, mappingIdentifier);\n }\n KameleoonLogger.info `RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${visitorCode}, shouldAddData: ${shouldAddData}, filters: ${filters}) -> (visitorData: ${visitorData})`;\n return visitorData;\n });\n }\n trackConversion({ visitorCode, goalId, negative, revenue, metadata, }) {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info `CALL: KameleoonClient.trackConversion(visitorCode: ${visitorCode}, goalId: ${goalId}, negative: ${negative}, revenue: ${revenue}, metadata: ${metadata})`;\n this.addData(visitorCode, new Conversion$1({ goalId, revenue, negative, metadata }));\n this.flush(visitorCode);\n KameleoonLogger.info `RETURN: KameleoonClient.trackConversion(visitorCode: ${visitorCode}, goalId: ${goalId}, negative: ${negative}, revenue: ${revenue}, metadata: ${metadata})`;\n }\n flush(params) {\n var _a;\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n let visitorCode;\n let isInstant = false;\n if (typeof params === 'string') {\n visitorCode = params;\n }\n else if (params) {\n visitorCode = params.visitorCode;\n isInstant = (_a = params.instant) !== null && _a !== void 0 ? _a : false;\n }\n KameleoonLogger.info `CALL: KameleoonClient.flush(visitorCode: ${visitorCode}, instant: ${isInstant})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n if (typeof visitorCode === 'string') {\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n if (isInstant) {\n this.tracker.sendDataForVisitor(visitorCode, this._isConsentProvided(visitorCode));\n }\n else {\n this.tracker.scheduleVisitor(visitorCode, this._isConsentProvided(visitorCode));\n }\n }\n else {\n for (const visitorCodeKey of this.dataManager.unsentDataVisitors) {\n this.tracker.scheduleVisitor(visitorCodeKey, this._isConsentProvided(visitorCodeKey));\n }\n for (const visitorCodeKey of this.variationConfiguration.getVisitorsWithUnsentData()) {\n this.tracker.scheduleVisitor(visitorCodeKey, this._isConsentProvided(visitorCodeKey));\n }\n if (isInstant) {\n this.tracker.sendDataAll();\n }\n }\n KameleoonLogger.info `RETURN: KameleoonClient.flush(visitorCode: ${visitorCode}, instant: ${isInstant})`;\n }\n getFeatureFlags() {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info('CALL: KameleoonClient.getFeatureFlags()');\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n const featureFlags = this.clientConfiguration.featureFlags;\n const resultFeatureFlags = [];\n featureFlags.forEach(({ id, featureKey }) => {\n resultFeatureFlags.push({\n id,\n key: featureKey,\n });\n });\n KameleoonLogger.info `RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${resultFeatureFlags})`;\n return resultFeatureFlags;\n }\n getVisitorFeatureFlags(visitorCode) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${visitorCode})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureFlags = [];\n activeVariations.forEach(({ featureFlagId, featureKey }) => {\n resultFeatureFlags.push({\n id: featureFlagId,\n key: featureKey,\n });\n });\n KameleoonLogger.info `RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${visitorCode}) -> (FeatureFlags: ${resultFeatureFlags})`;\n return resultFeatureFlags;\n }\n getVariation({ visitorCode, featureKey, track = true, }) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const variation = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track,\n }).throw();\n KameleoonLogger.info `RETURN: KameleoonClient.getVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (variation: ${variation})`;\n return variation;\n }\n getVariations({ visitorCode, onlyActive = false, track = true, }) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getVariations(visitorCode: ${visitorCode}, onlyActive: ${onlyActive}, track: ${track})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const variations = new Map();\n const featureFlags = this.clientConfiguration.featureFlags;\n for (const featureFlag of featureFlags.values()) {\n try {\n const variation = this._getFeatureVariation({\n visitorCode,\n featureKey: featureFlag.featureKey,\n track,\n });\n if (variation.ok &&\n (!onlyActive || variation.data.key !== OFF_VARIATION_KEY)) {\n variations.set(featureFlag.featureKey, variation.data);\n }\n }\n catch (err) {\n if (err instanceof KameleoonError &&\n err.type !== KameleoonException.FeatureFlagEnvironmentDisabled) {\n throw err;\n }\n }\n }\n KameleoonLogger.info `RETURN: KameleoonClient.getVariations(visitorCode: ${visitorCode}, onlyActive: ${onlyActive}, track: ${track}) -> (variations: ${variations})`;\n return variations;\n }\n getActiveFeatureFlags(visitorCode) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${visitorCode})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureList = new Map();\n activeVariations.forEach((variation) => {\n const { variationKey, featureKey, variationId, experimentId } = variation;\n let variables = [];\n if (variationId !== null && experimentId !== null) {\n variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n }\n const resultVariables = variables.map((variable) => Parser.parseFeatureVariable(variable).throw());\n resultFeatureList.set(variation.featureKey, {\n name: '',\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n });\n });\n KameleoonLogger.info `RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${visitorCode}) -> (FeatureFlags: ${resultFeatureList})`;\n return resultFeatureList;\n }\n getFeatureFlagVariationKey(visitorCode, featureKey) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const { key } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n KameleoonLogger.info `RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (variationKey: ${key})`;\n return key;\n }\n getFeatureFlagVariable({ visitorCode, featureKey, variableKey, }) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getFeatureFlagVariable(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variableKey: ${variableKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const { key: variationKey } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const variable = variables.find((item) => item.key === variableKey);\n if (!variable) {\n throw new KameleoonError(KameleoonException.FeatureFlagVariableNotFound, variableKey, visitorCode);\n }\n const { type, value } = Parser.parseFeatureVariable(variable).throw();\n const featureFlagVariable = { type, value };\n KameleoonLogger.info `RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variableKey: ${variableKey}) -> (FeatureFlagVariable: ${featureFlagVariable})`;\n return featureFlagVariable;\n }\n getFeatureFlagVariables(visitorCode, featureKey) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getFeatureFlagVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const { key: variationKey } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const resultVariables = [];\n for (const variable of variables) {\n const parsedVariable = Parser.parseFeatureVariable(variable).throw();\n resultVariables.push(parsedVariable);\n }\n KameleoonLogger.info `RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (FeatureFlagVariables: ${resultVariables})`;\n return resultVariables;\n }\n isFeatureFlagActive(firstParam, secondParam) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n let [visitorCode, featureKey, track] = ['', '', true];\n if (typeof firstParam === 'string') {\n visitorCode = firstParam;\n featureKey = secondParam;\n }\n else {\n [visitorCode, featureKey] = [\n firstParam.visitorCode,\n firstParam.featureKey,\n ];\n if (firstParam.track !== undefined) {\n track = firstParam.track;\n }\n }\n KameleoonLogger.info `CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track ${track})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n try {\n const { key } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track,\n }).throw();\n const isActive = key !== OFF_VARIATION_KEY;\n KameleoonLogger.info `RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (isActive: ${isActive})`;\n return isActive;\n }\n catch (err) {\n if (err instanceof KameleoonError &&\n err.type === KameleoonException.FeatureFlagEnvironmentDisabled) {\n KameleoonLogger.info `RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (isActive: false)`;\n return false;\n }\n throw err;\n }\n }\n getRemoteData(key) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.stubMode) {\n return null;\n }\n KameleoonLogger.info `CALL: KameleoonClient.getRemoteData(key: ${key})`;\n const remoteData = yield this.requester.getRemoteData(key);\n KameleoonLogger.info `RETURN: KameleoonClient.getRemoteData(key: ${key}) -> (remoteData: ${remoteData})`;\n return remoteData.throw();\n });\n }\n getVisitorWarehouseAudience({ visitorCode, customDataIndex, warehouseKey, }) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.stubMode) {\n return null;\n }\n KameleoonLogger.info `CALL: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const data = yield this.getRemoteData(warehouseKey || visitorCode);\n if (!data) {\n throw new KameleoonError(KameleoonException.RemoteData, `No data found for ${warehouseKey || visitorCode} key`);\n }\n if (!data[WAREHOUSE_AUDIENCE_KEY] ||\n Object.keys(data[WAREHOUSE_AUDIENCE_KEY]).length === 0) {\n KameleoonLogger.info `RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey}) -> (customData: null)`;\n return null;\n }\n const customData = new CustomData$1(customDataIndex, ...Object.keys(data[WAREHOUSE_AUDIENCE_KEY]));\n this.dataManager.storeData({\n visitorCode,\n track: true,\n data: [customData],\n });\n KameleoonLogger.info `RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey}) -> (customData: ${customData})`;\n return customData;\n });\n }\n onEvent(event, callback) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.onEvent(event: ${event}, callback)`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n this.eventManager.addEventHandler(event, callback);\n KameleoonLogger.info `RETURN: KameleoonClient.onEvent(event: ${event}, callback)`;\n }\n getEngineTrackingCode(visitorCode) {\n if (this.stubMode) {\n return '';\n }\n KameleoonLogger.info `CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${visitorCode})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const trackingCode = Utilities.getTrackingCode(this.trackingCache, visitorCode);\n KameleoonLogger.info `RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${visitorCode}) -> (trackingCode: ${trackingCode})`;\n return trackingCode;\n }\n isInitialized() {\n KameleoonLogger.debug `CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`;\n return this.initialized;\n }\n setLogLevel(level) {\n KameleoonLogger.setLogLevel(level);\n }\n setForcedVariation({ visitorCode, experimentId, variationKey, forceTargeting = true, }) {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info `CALL: KameleoonClient.setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n this._setForcedVariation({\n visitorCode,\n experimentId,\n variationKey,\n forceTargeting,\n }).throw();\n KameleoonLogger.info `RETURN: KameleoonClient.setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n }\n evaluateAudiences(visitorCode) {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info `CALL: KameleoonClient.evaluateAudiences(visitorCode: ${visitorCode})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const targetedSegments = [];\n const targetingData = this.dataManager.getVisitorData(visitorCode);\n for (let segment of this.clientConfiguration.segments.values()) {\n if (!segment.audienceTracking) {\n continue;\n }\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId: null,\n clientConfiguration: this.clientConfiguration,\n packageInfo: this.externalPackageInfo,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n const isTargeted = targetingResult.ok && targetingResult.data;\n if (isTargeted) {\n KameleoonLogger.info `Visitor ${visitorCode} has been targeted for ${segment}`;\n targetedSegments.push(new TargetedSegment(Number(segment.id)));\n }\n }\n if (targetedSegments.length !== 0) {\n this.dataManager.storeData({ visitorCode, data: targetedSegments });\n }\n this.flush(visitorCode);\n KameleoonLogger.info `RETURN: KameleoonClient.evaluateAudiences(visitorCode: ${visitorCode})`;\n }\n getDataFile() {\n const dataFile = {\n featureFlags: new Map(),\n };\n if (this.stubMode) {\n return dataFile;\n }\n KameleoonLogger.debug `CALL: KameleoonClient.getDataFile()`;\n this.clientConfiguration.featureFlags.forEach((featureFlag, key) => {\n const variationsMap = new Map();\n featureFlag.variations.forEach((sourceVariation) => {\n var _a;\n const variablesMap = new Map();\n sourceVariation.variables.forEach((variable) => {\n try {\n const parsedVariable = Parser.parseFeatureVariable(variable).throw();\n variablesMap.set(variable.key, parsedVariable);\n }\n catch (err) {\n KameleoonLogger.error `Error parsing variable ${variable.key} of feature flag ${featureFlag.featureKey}: ${err}`;\n }\n });\n variationsMap.set(sourceVariation.key, {\n name: (_a = sourceVariation.name) !== null && _a !== void 0 ? _a : '',\n key: sourceVariation.key,\n id: null,\n experimentId: null,\n variables: variablesMap,\n });\n });\n const rules = featureFlag.rules.map((rule) => {\n const ruleVariations = new Map();\n rule.variationByExposition.forEach((varByExp) => {\n const baseVariation = variationsMap.get(varByExp.variationKey);\n if (!baseVariation)\n return;\n ruleVariations.set(baseVariation.key, {\n name: baseVariation.name,\n key: baseVariation.key,\n id: varByExp.variationId,\n experimentId: rule.experimentId,\n variables: baseVariation.variables,\n });\n });\n return { variations: ruleVariations };\n });\n dataFile.featureFlags.set(key, {\n variations: variationsMap,\n environmentEnabled: featureFlag.environmentEnabled,\n rules,\n defaultVariationKey: featureFlag.defaultVariationKey,\n });\n });\n KameleoonLogger.debug `RETURN: KameleoonClient.getDataFile() -> (dataFile: ${dataFile})`;\n return dataFile;\n }\n setUserConsent({ visitorCode, consent, setData, }) {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info `CALL: KameleoonClient.setUserConsent(visitorCode: ${visitorCode}, consent: ${consent}, setData: ${setData})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n this.updateConsentData(visitorCode, consent);\n if (consent) {\n setData({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n }\n KameleoonLogger.info `RETURN: KameleoonClient.setUserConsent(visitorCode: ${visitorCode}, consent: ${consent}, setData: ${setData})`;\n }\n updateConsentData(visitorCode, consent) {\n const readResult = this.consentDataStorage.read();\n const legalConsent = consent ? LegalConsent.Given : LegalConsent.NotGiven;\n if (!readResult.ok) {\n if (readResult.error.type === KameleoonException.StorageEmpty) {\n this.consentDataStorage.write({\n [visitorCode]: {\n consent: legalConsent,\n },\n });\n }\n return;\n }\n const data = readResult.data;\n data[visitorCode] = {\n consent: legalConsent,\n };\n this.consentDataStorage.write(data);\n }\n getLegalConsent(visitorCode) {\n KameleoonLogger.debug `CALL: KameleoonClient.getLegalConsent(visitorCode: ${visitorCode})`;\n let legalConsent;\n const consentDataResult = this.consentDataStorage.read();\n legalConsent = consentDataResult.ok\n ? this.extractLegalConsent(consentDataResult.data[visitorCode])\n : LegalConsent.Unknown;\n KameleoonLogger.debug `RETURN: KameleoonClient.getLegalConsent(visitorCode: ${visitorCode}) -> (legalConsent: ${legalConsent})`;\n return legalConsent;\n }\n extractLegalConsent(consentData) {\n if (consentData === undefined)\n return LegalConsent.Unknown;\n if (typeof consentData === 'boolean') {\n return consentData ? LegalConsent.Given : LegalConsent.NotGiven;\n }\n const value = consentData.consent;\n if (typeof value === 'boolean')\n return value ? LegalConsent.Given : LegalConsent.NotGiven;\n return value;\n }\n _isConsentProvided(visitorCode) {\n KameleoonLogger.debug `CALL: KameleoonClient._isConsentProvided(visitorCode: ${visitorCode})`;\n const { isConsentRequired } = this.clientConfiguration;\n const isConsentProvided = !isConsentRequired ||\n this.getLegalConsent(visitorCode) == LegalConsent.Given;\n KameleoonLogger.debug `RETURN: KameleoonClient._isConsentProvided(visitorCode: ${visitorCode}) -> (isConsentProvided: ${isConsentProvided})`;\n return isConsentProvided;\n }\n _getFeatureVariables({ visitorCode, featureKey, variationKey, }) {\n KameleoonLogger.debug `CALL: KameleoonClient._getFeatureVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variationKey: ${variationKey})`;\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n if (!featureFlag) {\n throw new KameleoonError(KameleoonException.FeatureFlagConfigurationNotFound, featureKey);\n }\n const variation = featureFlag.variations.find((item) => item.key === variationKey);\n if (!variation) {\n throw new KameleoonError(KameleoonException.FeatureFlagVariationNotFound, variationKey, visitorCode);\n }\n KameleoonLogger.debug `RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variationKey: ${variationKey}) -> (variables: ${variation.variables})`;\n return variation.variables;\n }\n // @deprecated\n // To be removed with the deprecated methods\n _getActiveFeatureVariations(visitorCode) {\n KameleoonLogger.debug `CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${visitorCode})`;\n const featureFlags = this.clientConfiguration.featureFlags;\n const activeVariations = [];\n for (const featureFlag of featureFlags.values()) {\n if (!featureFlag.environmentEnabled) {\n continue;\n }\n try {\n const evalExp = this._evaluate({\n visitorCode,\n featureFlag,\n track: false,\n save: false,\n });\n if (evalExp.variationKey !== OFF_VARIATION_KEY) {\n activeVariations.push({\n variationKey: evalExp.variationKey,\n variationId: evalExp.variationId,\n experimentId: evalExp.experimentId,\n featureFlagId: featureFlag.id,\n featureKey: featureFlag.featureKey,\n rule: null,\n isTargetedRule: evalExp.ruleType === RuleType.TARGETED_DELIVERY,\n });\n }\n }\n catch (err) {\n if (err instanceof KameleoonError) {\n if (err.type != KameleoonException.FeatureFlagEnvironmentDisabled) {\n KameleoonLogger.error `Unexpected error: ${err}`;\n }\n continue;\n }\n }\n }\n KameleoonLogger.debug `RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${visitorCode}) -> (activeVariations: ${activeVariations})`;\n return activeVariations;\n }\n _evaluate({ visitorCode, featureFlag, track, save, }) {\n KameleoonLogger.debug `CALL: KameleoonClient._evaluate(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, track: ${track}, save: ${save})`;\n let evalExp;\n let forcedVariation = null;\n const visitorData = this.dataManager.getVisitorData(visitorCode);\n const forcedVariationData = this.variationConfiguration.getForcedFeatureVariation(visitorCode, featureFlag.featureKey);\n if (forcedVariationData.ok) {\n forcedVariation = forcedVariationData.data;\n }\n if (forcedVariation) {\n evalExp = KameleoonClient.EvaluatedExperiment.fromForcedFeatureVariation(featureFlag.defaultVariationKey, forcedVariation);\n }\n else if (this._isVisitorNotInHoldout(visitorCode, track, save, featureFlag, visitorData) &&\n this._isFFUnrestrictedByMEGroup(visitorCode, featureFlag, visitorData)) {\n const visitorIdentifier = this._getCodeForHash(visitorCode, featureFlag.bucketingCustomDataIndex, visitorData);\n const legalConsent = this.getLegalConsent(visitorCode);\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n track,\n withAssignment: save,\n targetingData: visitorData,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n legalConsent,\n })\n .throw();\n evalExp =\n KameleoonClient.EvaluatedExperiment.fromVariationData(variationData);\n }\n else {\n evalExp = KameleoonClient.EvaluatedExperiment.fromDefaultVariationKey(featureFlag.defaultVariationKey);\n }\n if (save &&\n !evalExp.isSimulated &&\n evalExp.experimentId !== null &&\n evalExp.variationId !== null) {\n this.variationConfiguration.updateStoredVariations(visitorCode, {\n [evalExp.experimentId]: {\n variationId: evalExp.variationId,\n isTargetedRule: evalExp.ruleType === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey: featureFlag.featureKey,\n variation: {\n key: evalExp.variationKey,\n experimentId: evalExp.experimentId,\n id: evalExp.variationId,\n },\n });\n KameleoonLogger.debug `RETURN: KameleoonClient._evaluate(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, track: ${track}, save: ${save}) -> (evalExp: ${evalExp})`;\n return evalExp;\n }\n _isFFUnrestrictedByMEGroup(visitorCode, featureFlag, visitorData) {\n const meGroupName = featureFlag.mutuallyExclusiveGroup;\n if (!meGroupName) {\n return true;\n }\n KameleoonLogger.debug `CALL: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, visitorData: ${visitorData})`;\n let selected = true;\n const meGroup = this.clientConfiguration.meGroups.get(meGroupName);\n if (meGroup) {\n const codeForHash = this._getCodeForHash(visitorCode, featureFlag.bucketingCustomDataIndex, visitorData);\n const hashMEGroup = Hasher.getHashDoubleForMEGroup(codeForHash, meGroupName);\n KameleoonLogger.debug `Calculated meGroup hash ${hashMEGroup} for code: ${codeForHash}, meGroup: ${meGroupName}`;\n selected = meGroup.getFeatureFlagByHash(hashMEGroup) === featureFlag;\n }\n KameleoonLogger.debug `RETURN: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, visitorData: ${visitorData}) -> (selected: ${selected})`;\n return selected;\n }\n _getFeatureVariation({ visitorCode, featureKey, track, }) {\n var _a, _b;\n KameleoonLogger.debug `CALL: KameleoonClient._getFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track})`;\n if (!this.initialized) {\n return buildExports.Err(new KameleoonError(KameleoonException.Initialization));\n }\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n if (!featureFlag) {\n return buildExports.Err(new KameleoonError(KameleoonException.FeatureFlagConfigurationNotFound, featureKey));\n }\n if (!featureFlag.environmentEnabled) {\n return buildExports.Err(new KameleoonError(KameleoonException.FeatureFlagEnvironmentDisabled, featureFlag.featureKey, this.environment));\n }\n const evalExp = this._evaluate({\n visitorCode,\n featureFlag,\n track,\n save: true,\n });\n const { experimentId, variationId, variationKey, isSimulated } = evalExp;\n let resultVariables = new Map();\n let hasJsCssVariables = false;\n try {\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n variables.forEach((variable) => {\n if (!hasJsCssVariables &&\n (variable.type === VariableType.JS ||\n variable.type === VariableType.CSS)) {\n hasJsCssVariables = true;\n }\n const parsedVariable = Parser.parseFeatureVariable(variable).throw();\n resultVariables.set(variable.key, parsedVariable);\n });\n }\n catch (_) { }\n if (experimentId && typeof variationId === 'number' && !isSimulated) {\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n hasJsCssVariables,\n visitorCode,\n experimentId,\n variationId,\n });\n }\n if (track && !isSimulated) {\n this.tracker.scheduleVisitor(visitorCode, this._isConsentProvided(visitorCode));\n }\n const variationName = (_b = (_a = featureFlag.variations.find((item) => item.key === variationKey)) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '';\n const resultData = {\n name: variationName,\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n };\n KameleoonLogger.debug `RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (variation: ${resultData})`;\n return buildExports.Ok(resultData);\n }\n _isVisitorNotInHoldout(visitorCode, track, save, featureFlag, visitorData) {\n const holdout = this.clientConfiguration.holdout;\n if (!holdout) {\n return true;\n }\n KameleoonLogger.debug `CALL: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${visitorCode}, track: ${track}, save: ${save}, featureFlag: ${featureFlag}, visitorData: ${visitorData})`;\n let isNotInHoldout = true;\n // Checking if the evaluation is blocked due to the consent policy\n const legalConsent = this.clientConfiguration.isConsentRequired\n ? this.getLegalConsent(visitorCode)\n : LegalConsent.Given;\n if (legalConsent == LegalConsent.NotGiven) {\n const behaviour = this.clientConfiguration.consentBlockingBehaviour;\n if (behaviour == ConsentBlockingBehaviour.CompletelyBlocked) {\n throw new KameleoonError(KameleoonException.FeatureFlagEnvironmentDisabled, `Evaluation of holdout is blocked because consent is not provided for visitor '${visitorCode}'`);\n }\n }\n const codeForHash = this._getCodeForHash(visitorCode, featureFlag === null || featureFlag === void 0 ? void 0 : featureFlag.bucketingCustomDataIndex, visitorData);\n const holdoutHash = Hasher.getHashDouble({\n visitorIdentifier: codeForHash,\n respoolTime: null,\n id: String(holdout.experimentId),\n });\n KameleoonLogger.debug `Calculated holdoutHash: ${holdoutHash} for visitorCode: ${codeForHash}`;\n let varByExp = Utilities.getVariationByHash(holdout.variationByExposition, holdoutHash);\n if (varByExp !== null) {\n isNotInHoldout = varByExp.variationKey !== IN_HOLDOUT_VARIATION_KEY;\n if (save) {\n this.variationConfiguration.updateStoredVariations(visitorCode, {\n [holdout.experimentId]: {\n variationId: varByExp.variationId,\n isTargetedRule: false,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n }\n KameleoonLogger.debug `RETURN: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${visitorCode}, track: ${track}, save: ${save}, featureFlag: ${featureFlag}, visitorData: ${visitorData}) -> (isNotInHoldout: ${isNotInHoldout})`;\n return isNotInHoldout;\n }\n _setForcedVariation({ visitorCode, experimentId, variationKey, forceTargeting = true, }) {\n KameleoonLogger.debug `CALL: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n if (variationKey === null) {\n const writeResult = this.variationConfiguration.updateForcedExperimentVariation(visitorCode, experimentId, null);\n KameleoonLogger.debug `RETURN: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting}) -> (writeResult: ${writeResult})`;\n return writeResult;\n }\n let rule = null;\n let varByExp = null;\n rule = this.clientConfiguration.experimentMap.get(experimentId);\n if (!rule) {\n KameleoonLogger.error `Experiment with id ${experimentId} not found for visitor ${visitorCode}`;\n return buildExports.Err(new KameleoonError(KameleoonException.FeatureFlagExperimentNotFound, experimentId, visitorCode));\n }\n varByExp = rule.variations.get(variationKey);\n if (varByExp === undefined) {\n KameleoonLogger.error `Variation with key ${variationKey} not found in experiment ${rule} for visitor ${visitorCode}`;\n return buildExports.Err(new KameleoonError(KameleoonException.FeatureFlagVariationNotFound, variationKey, visitorCode));\n }\n rule = {\n type: rule.type,\n experimentId: experimentId,\n };\n varByExp = {\n variationKey: variationKey,\n variationId: varByExp,\n };\n const writeResult = this.variationConfiguration.updateForcedExperimentVariation(visitorCode, experimentId, {\n rule: rule,\n varByExp: varByExp,\n forceTargeting,\n });\n KameleoonLogger.debug `RETURN: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting}) -> (writeResult: ${writeResult})`;\n return writeResult;\n }\n _getCodeForHash(visitorCode, bucketingCustomDataIndex, visitorData) {\n var _a;\n KameleoonLogger.debug `CALL: KameleoonClient._getCodeForHash(visitorCode: ${visitorCode}, bucketingCustomDataIndex: ${bucketingCustomDataIndex}, visitorData: ${visitorData})`;\n let codeForHash;\n if (bucketingCustomDataIndex != null) {\n const customData = visitorData === null || visitorData === void 0 ? void 0 : visitorData.customData;\n if (customData) {\n const customDataValue = (_a = customData[bucketingCustomDataIndex]) === null || _a === void 0 ? void 0 : _a.value[0];\n if (customDataValue) {\n codeForHash = customDataValue;\n }\n }\n }\n if (!codeForHash) {\n codeForHash = this.dataManager.getVisitorIdentifier(visitorCode);\n }\n KameleoonLogger.debug `RETURN: KameleoonClient._getCodeForHash(visitorCode: ${visitorCode}, bucketingCustomDataIndex: ${bucketingCustomDataIndex}, visitorData: ${visitorData}) -> (codeForHash: ${codeForHash})`;\n return codeForHash;\n }\n}\nKameleoonClient.EvaluatedExperiment = class {\n static fromForcedFeatureVariation(defaultVariationKey, forcedFeatureVariation) {\n var _a, _b, _c;\n let varKey = defaultVariationKey;\n if (forcedFeatureVariation.varByExp) {\n varKey = forcedFeatureVariation.varByExp.variationKey;\n }\n else if (forcedFeatureVariation.rule &&\n forcedFeatureVariation.rule.type === RuleType.EXPERIMENTATION) {\n varKey = OFF_VARIATION_KEY;\n }\n return {\n variationKey: varKey,\n variationId: ((_a = forcedFeatureVariation.varByExp) === null || _a === void 0 ? void 0 : _a.variationId) || null,\n experimentId: ((_b = forcedFeatureVariation.rule) === null || _b === void 0 ? void 0 : _b.experimentId) || null,\n ruleType: ((_c = forcedFeatureVariation.rule) === null || _c === void 0 ? void 0 : _c.type) || null,\n isSimulated: forcedFeatureVariation.simulated,\n };\n }\n static fromVariationData(variationData) {\n var _a, _b;\n return {\n variationKey: variationData.variationKey,\n variationId: variationData.variationId,\n experimentId: variationData.experimentId,\n ruleType: (_b = (_a = variationData.rule) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : null,\n isSimulated: false,\n };\n }\n static fromDefaultVariationKey(defaultVariationKey) {\n return {\n variationKey: defaultVariationKey,\n variationId: null,\n experimentId: null,\n ruleType: null,\n isSimulated: false,\n };\n }\n};\n\n/**\n * KameleoonUtils - a class containing static Kameleoon helper methods\n * */\nclass KameleoonUtils {\n /**\n * @method simulateSuccessRequest - a method to simulate a successful request based on request type, primarily used for `IExternalRequester` implementations\n *\n * @param {RequestType} requestType - request type\n * @param {SimulateRequestDataType[RequestType]} data - simulate data type for request\n * */\n static simulateSuccessRequest(requestType, data) {\n switch (requestType) {\n case RequestType.Tracking:\n return new Promise((resolve) => {\n const response = {\n status: 204,\n json: () => new Promise((r) => r(null)),\n text: () => new Promise((r) => r('')),\n ok: true,\n };\n resolve(response);\n });\n case RequestType.Configuration:\n case RequestType.RemoteData:\n return new Promise((resolve) => {\n const response = {\n status: 200,\n json: () => new Promise((r) => r(data)),\n text: () => new Promise((r) => r('')),\n ok: true,\n };\n resolve(response);\n });\n default:\n exhaustCheck(requestType);\n }\n }\n /**\n * @method getCookieValue - a method to get a cookie value by key from a cookie string, primarily used for `IExternalVisitorCodeManager` implementations\n *\n * @param {string} cookie - cookie string\n * @param {string} key - cookie key\n * @returns {string | null} cookie value or null if not found\n * */\n static getCookieValue(cookie, key) {\n const pairs = cookie.split('; ');\n const pair = pairs.find((pair) => {\n const [pairKey, pairValue] = pair.split('=');\n return pairKey === key && pairValue !== '';\n });\n if (pair) {\n return pair.split('=')[1];\n }\n return null;\n }\n}\n\nvar Err = buildExports.Err;\nvar Ok = buildExports.Ok;\nexport { ApplicationVersion$1 as ApplicationVersion, Browser$1 as Browser, BrowserType, Conversion$1 as Conversion, Cookie$1 as Cookie, CustomData$1 as CustomData, CustomDataScope, DataManager, DataProcessor, DataStorage, Device$1 as Device, DeviceType, Environment, Err, EventType, GeolocationData, Header, HttpMethod, KameleoonClient as KameleoonCore, KameleoonData, KameleoonError, KameleoonException, KameleoonLogger, KameleoonStorageKey, KameleoonUtils, LegalConsent, ListUtilities, LogLevel, Milliseconds, NUMBER_OF_RETRIES, Ok, OperatingSystem$1 as OperatingSystem, OperatingSystemType, PageView, Parser, RequestType, SdkLanguageType, StaticData, TrackingStatus, Tree, UniqueIdentifier, UserAgent, Utilities, VISITOR_CODE_LENGTH, VISIT_DURATION, Validator, VariableType, VisitorCodeManager };\n//# sourceMappingURL=javascript-sdk-core.browser.es.js.map\n","import { Milliseconds } from '@kameleoon/javascript-sdk-core/browser';\n\nexport enum CookieParameter {\n PairsDelimiter = '; ',\n KeyValueDelimiter = '=',\n MaxAge = 'Max-Age',\n Path = 'Path',\n Domain = 'Domain',\n}\nexport const ACTIVITY_INTERVAL = 15 * Milliseconds.Second;\nexport const VISIT_DURATION = 30 * Milliseconds.Minute;\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import {\n RequestType,\n IExternalRequester,\n KameleoonResponseType,\n SendRequestParametersType,\n} from '@kameleoon/javascript-sdk-core/browser';\n\nexport class Requester implements IExternalRequester {\n public async sendRequest({\n url,\n parameters,\n }: SendRequestParametersType<RequestType>): Promise<KameleoonResponseType> {\n return await fetch(url, parameters);\n }\n}\n","import {\n GetResultCookieParametersType,\n IExternalVisitorCodeManager,\n SetDataParametersType,\n} from './types';\nimport { CookieParameter } from './constants';\nimport {\n KameleoonLogger,\n KameleoonUtils,\n} from '@kameleoon/javascript-sdk-core/browser';\n\nclass VisitorCodeManager implements IExternalVisitorCodeManager {\n public getData(key: string): string | null {\n KameleoonLogger.debug`CALL: VisitorCodeManager.getData(key: ${key})`;\n const cookie = document.cookie;\n\n let visitorCode = null;\n if (cookie) {\n visitorCode = KameleoonUtils.getCookieValue(cookie, key);\n }\n\n KameleoonLogger.debug`RETURN: VisitorCodeManager.getData(key: ${key}) -> (visitorCode: ${visitorCode})`;\n return visitorCode;\n }\n\n public setData({\n visitorCode,\n domain,\n maxAge,\n key,\n path,\n }: SetDataParametersType): void {\n const resultCookie = this.getResultCookie({\n domain,\n visitorCode,\n key,\n maxAge,\n path,\n });\n\n document.cookie = resultCookie;\n KameleoonLogger.debug`Cookie ${resultCookie} was added for visitor ${visitorCode}`;\n }\n\n private getResultCookie({\n domain,\n visitorCode,\n maxAge,\n key,\n path,\n }: GetResultCookieParametersType): string {\n const cookieArray = [\n key + CookieParameter.KeyValueDelimiter + visitorCode,\n CookieParameter.MaxAge + CookieParameter.KeyValueDelimiter + maxAge,\n CookieParameter.Path + CookieParameter.KeyValueDelimiter + path,\n ];\n\n if (domain) {\n cookieArray.push(\n CookieParameter.Domain + CookieParameter.KeyValueDelimiter + domain,\n );\n }\n\n return cookieArray.join(CookieParameter.PairsDelimiter);\n }\n}\n\nexport { VisitorCodeManager as KameleoonVisitorCodeManager };\n","import {\n IExternalStorage,\n KameleoonStorageKey,\n LegalConsent,\n} from '@kameleoon/javascript-sdk-core/browser';\nimport { KameleoonVisitorCodeManager } from './visitorCodeManager';\nimport { EngineConsentDataType } from './types';\n\n// --- Note ---\n// Named `DataStorage` to avoid collision with `Storage` from `window` API\nexport class DataStorage<T> implements IExternalStorage<T> {\n private visitorCodeManager?: KameleoonVisitorCodeManager;\n\n public read(key: string): T | null {\n const data = localStorage.getItem(key);\n\n if (key === KameleoonStorageKey.ConsentData) {\n if (!data || data === '{}') {\n return this.getEngineConsentData();\n }\n }\n\n return data ? JSON.parse(data) : null;\n }\n\n public write(key: string, data: T): void {\n localStorage.setItem(key, JSON.stringify(data));\n }\n\n private getEngineConsentData(): T | null {\n if (!this.visitorCodeManager) {\n this.visitorCodeManager = new KameleoonVisitorCodeManager();\n }\n\n const visitorCode = this.visitorCodeManager.getData(\n KameleoonStorageKey.VisitorCode,\n );\n\n if (!visitorCode) {\n return null;\n }\n\n try {\n const engineConsentData = localStorage.getItem('kameleoonLegalConsent');\n\n if (!engineConsentData) {\n return null;\n }\n\n const engineConsent: EngineConsentDataType =\n JSON.parse(engineConsentData);\n\n const abTesting = engineConsent?.value?.AB_TESTING;\n if (typeof abTesting === 'boolean') {\n return {\n [visitorCode]: {\n consent: abTesting ? LegalConsent.Given : LegalConsent.NotGiven,\n },\n } as T;\n }\n\n return null;\n } catch (_) {\n return null;\n }\n }\n}\n","import {\n IExternalEventSource,\n EventSourceOpenParametersType,\n} from '@kameleoon/javascript-sdk-core/browser';\n\n// --- Note ---\n// Named `KameleoonEventSource` to avoid collision with native `EventSource`\nexport class KameleoonEventSource implements IExternalEventSource {\n private eventSource?: EventSource;\n\n public open({\n eventType,\n onEvent,\n url,\n }: EventSourceOpenParametersType): void {\n const eventSource = new EventSource(url);\n\n this.eventSource = eventSource;\n this.eventSource.addEventListener(eventType, onEvent);\n }\n\n public close(): void {\n if (this.eventSource) {\n this.eventSource.close();\n }\n }\n\n public onError(callback: (error: Event) => void): void {\n if (this.eventSource) {\n this.eventSource.onerror = callback;\n }\n }\n}\n","import { IExternalPRNG } from '@kameleoon/javascript-sdk-core/browser';\n\nexport class KameleoonPRNG implements IExternalPRNG {\n public getRandomNumber(): number {\n if (typeof window !== 'undefined' && window?.crypto) {\n const arr = new Uint32Array(1);\n const uint32Max = 0xffffffff + 1;\n\n window.crypto.getRandomValues(arr);\n\n return arr[0] / uint32Max;\n }\n\n return Math.random();\n }\n}\n","import {\n IExternalLogger,\n LogLevel\n} from '@kameleoon/javascript-sdk-core/browser';\n\n/**\n * A simple implementation of a logger for js clients that prints log messages to the console with timestamp.\n * This logger implements the {@code IExternalLogger} interface.\n */\nexport class DefaultLogger implements IExternalLogger {\n public log(level: LogLevel, message: string): void {\n const date = new Date();\n const formattedDate = date.toLocaleString('en-US', { timeZoneName: 'short' });\n message = `${formattedDate} ${message}`;\n switch (level) {\n case LogLevel.DEBUG:\n console.debug(message);\n break;\n case LogLevel.INFO:\n console.info(message);\n break;\n case LogLevel.WARNING:\n console.warn(message);\n break;\n case LogLevel.ERROR:\n console.error(message);\n break;\n }\n }\n}\n","import {\n ITracker,\n KameleoonLogger,\n} from '@kameleoon/javascript-sdk-core/browser';\nimport { ClientDataManager } from 'src/dataManager';\n\nexport interface VisitorActivityManagerType {}\n\nexport class VisitorActivityManager implements VisitorActivityManagerType {\n private dataManager: ClientDataManager;\n private tracker: ITracker;\n private isConsentProvided: (visitorCode: string) => boolean;\n\n /**\n * @param dataManager - Instance of ClientDataManager\n * @param tracker - Instance of ITracker\n * @param isConsentProvided - Function to check if consent is provided for a visitor\n * @param interval - Interval in milliseconds\n */\n constructor(\n dataManager: ClientDataManager,\n tracker: ITracker,\n isConsentProvided: (visitorCode: string) => boolean,\n interval: number,\n ) {\n KameleoonLogger.debug`CALL: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${interval})`;\n this.dataManager = dataManager;\n this.tracker = tracker;\n this.isConsentProvided = isConsentProvided;\n\n this.setup(interval);\n KameleoonLogger.debug`RETURN: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${interval})`;\n }\n\n private setup(interval: number): void {\n setInterval(() => {\n this.updateLastActivity();\n }, interval);\n this.updateLastActivity();\n }\n\n private updateLastActivity(): void {\n KameleoonLogger.debug`CALL: VisitorActivityManager.updateLastActivity()`;\n\n const visitorCode = this.dataManager.updateLastActivity();\n if (visitorCode) {\n this.tracker.scheduleVisitor(\n visitorCode,\n this.isConsentProvided(visitorCode),\n );\n }\n\n KameleoonLogger.debug`RETURN: VisitorActivityManager.updateLastActivity()`;\n }\n}\n","import {\n AddDataParamsType,\n Browser,\n DataManager,\n DataManagerParametersType as CoreDataManagerParametersType,\n Device,\n KameleoonData,\n KameleoonDataType,\n KameleoonError,\n KameleoonLogger,\n KameleoonVisitorDataType,\n ListUtilities,\n OperatingSystem,\n Result,\n StaticData,\n TrackingStatus,\n VisitDataType,\n VisitorsDataType,\n} from '@kameleoon/javascript-sdk-core/browser';\nimport { VISIT_DURATION } from 'src/constants';\nimport { IPlatformAnalyzer } from 'src/utils';\n\ntype DataManagerParametersType = CoreDataManagerParametersType & {\n platformAnalyzer: IPlatformAnalyzer;\n};\n\nexport class ClientDataManager extends DataManager {\n private visitor: Visitor | null = null;\n private readonly platformAnalyzer: IPlatformAnalyzer;\n\n constructor({\n dataStorage,\n infoStorage,\n cleanupInterval,\n packageInfo,\n platformAnalyzer,\n }: DataManagerParametersType) {\n KameleoonLogger.debug`CALL: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval}, packageInfo: ${packageInfo}, platformAnalyzer)`;\n super({ dataStorage, infoStorage, cleanupInterval, packageInfo });\n this.platformAnalyzer = platformAnalyzer;\n this.updateVisitor();\n KameleoonLogger.debug`RETURN: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval} packageInfo: ${packageInfo}, platformAnalyzer)`;\n }\n\n getUnsentData(visitorCode: string): (KameleoonDataType | StaticData)[] {\n const data = super.getUnsentData(visitorCode);\n const visitorData = super.getVisitorData(visitorCode);\n if (!visitorData) {\n return data;\n }\n const browser = visitorData[KameleoonData.Browser];\n const device = visitorData[KameleoonData.Device];\n const os = visitorData[KameleoonData.OperatingSystem];\n\n const staticData = new StaticData({\n browserType: browser?.browser,\n browserVersion: browser?.version,\n visitNumber: this.visitor?.visitNumber,\n timeSincePreviousVisit: this.visitor?.timeSincePreviousVisit,\n os: os?.operatingSystem,\n deviceType: device?.device,\n });\n data.push(staticData);\n return data;\n }\n\n public storeData(params: AddDataParamsType) {\n const { visitorCode, data } = params;\n if (data.length) {\n this.checkVisitor(visitorCode);\n }\n return super.storeData(params);\n }\n\n public storeDataForVisitors(\n data: VisitorsDataType,\n ): Result<void, KameleoonError> {\n return super.storeDataForVisitors(data, true);\n }\n\n getVisitorData(visitorCode: string): KameleoonVisitorDataType | undefined {\n this.checkVisitor(visitorCode);\n return super.getVisitorData(visitorCode);\n }\n\n updateLastActivity(): string | null {\n if (!this.visitor) {\n return null;\n }\n const storageData = this.dataStorage.read();\n\n if (!storageData.ok) {\n return null;\n }\n\n const data = storageData.data;\n let visitorData = data[this.visitor.visitorCode] ?? {};\n if (typeof visitorData === 'string') {\n visitorData = data[visitorData] as KameleoonVisitorDataType;\n }\n\n let visitsData = visitorData[KameleoonData.VisitsData];\n if (!visitsData) {\n visitsData = {\n visits: [],\n visitNumber: 0,\n type: KameleoonData.VisitsData,\n status: TrackingStatus.Sent,\n expirationTime: 0,\n };\n visitorData[KameleoonData.VisitsData] = visitsData;\n }\n\n const lastVisit = this.fetchVisit(\n visitsData.visits,\n visitsData.visits.length - 1,\n );\n\n const timeLastActivity = lastVisit?.timeLastActivity ?? 0;\n const now = Date.now();\n\n let visitNumber =\n visitsData.visitNumber ??\n (visitsData.visits.length ? visitsData.visits.length - 1 : 0);\n\n if (now - timeLastActivity > VISIT_DURATION) {\n visitNumber += timeLastActivity > 0 ? 1 : 0;\n ListUtilities.insertVisitInOrderedListMutably({\n list: visitsData.visits as VisitDataType[],\n visit: {\n timeStarted: now,\n timeLastActivity: now,\n },\n });\n this.visitor.timeSincePreviousVisit = lastVisit\n ? now - timeLastActivity\n : 0;\n } else if (visitsData.visits.length) {\n visitsData.visits[visitsData.visits.length - 1] = {\n timeStarted: lastVisit?.timeStarted ?? now,\n timeLastActivity: now,\n };\n if (this.visitor.timeSincePreviousVisit === -1) {\n const previousVisit = this.fetchVisit(\n visitsData.visits,\n visitsData.visits.length - 2,\n );\n this.visitor.timeSincePreviousVisit = previousVisit\n ? now - previousVisit.timeLastActivity\n : 0;\n }\n }\n visitsData.visitNumber = visitNumber;\n this.visitor.visitNumber = visitNumber;\n\n this.dataStorage.write(data);\n return this.visitor!.visitorCode;\n }\n\n public checkVisitor(visitorCode: string): void {\n if (!this.visitor || this.visitor.visitorCode !== visitorCode) {\n this.createVisitor(visitorCode);\n }\n }\n\n private createVisitor(visitorCode: string): void {\n KameleoonLogger.debug`CALL: ClientDataManager.createVisitor(visitorCode: ${visitorCode})`;\n this.visitor = new Visitor(visitorCode);\n\n try {\n const result = this.platformAnalyzer.getResult();\n const data = [];\n\n if (result.os?.name) {\n data.push(new OperatingSystem(result.os.name));\n }\n if (result.platform?.type) {\n data.push(new Device(result.platform.type));\n }\n if (result.browser?.name) {\n data.push(new Browser(result.browser.name, result.browser.version));\n }\n if (result.pageView) {\n data.push(result.pageView);\n }\n\n if (data.length) {\n this.storeData({ visitorCode, data });\n }\n } finally {\n this.updateLastActivity();\n }\n KameleoonLogger.debug`RETURN: ClientDataManager.createVisitor(visitorCode: ${visitorCode})`;\n }\n\n private updateVisitor(): void {\n KameleoonLogger.debug`CALL: ClientDataManager.updateVisitor()`;\n const storageData = this.dataStorage.read();\n\n if (!storageData.ok) {\n return;\n }\n\n const data = storageData.data;\n let lastVisitorCode;\n let lastTimestamp = -1;\n\n for (const [visitorCode, visitorData] of Object.entries(data)) {\n if (typeof visitorData === 'string') {\n continue;\n }\n\n const visitsData = visitorData[KameleoonData.VisitsData];\n if (!visitsData) {\n if (!lastVisitorCode) {\n lastVisitorCode = visitorCode;\n }\n continue;\n }\n\n const lastVisit = visitsData.visits.length\n ? visitsData.visits[visitsData.visits.length - 1]\n : null;\n\n if (lastVisit) {\n const timeLastActivity =\n (typeof lastVisit === 'number'\n ? lastVisit\n : lastVisit?.timeLastActivity) ?? 0;\n if (timeLastActivity > lastTimestamp) {\n lastTimestamp = timeLastActivity;\n lastVisitorCode = visitorCode;\n }\n } else if (!lastVisitorCode) {\n lastVisitorCode = visitorCode;\n }\n }\n\n if (lastVisitorCode) {\n this.createVisitor(lastVisitorCode);\n } else {\n this.visitor = null;\n KameleoonLogger.debug`ClientDataManager no visitor found`;\n }\n KameleoonLogger.debug`RETURN: ClientDataManager.updateVisitor()`;\n }\n\n private fetchVisit(\n visitorVisits: (VisitDataType | number)[],\n index: number,\n ): VisitDataType | null {\n if (index < 0 || index >= visitorVisits.length) {\n return null;\n }\n const visit = visitorVisits[index];\n if (typeof visit === 'number') {\n return {\n timeStarted: visit,\n timeLastActivity: visit,\n } as VisitDataType;\n } else {\n return visit;\n }\n }\n}\n\nclass Visitor {\n public visitorCode: string;\n public visitNumber: number = 0;\n public timeSincePreviousVisit: number = -1;\n\n constructor(visitorCode: string) {\n this.visitorCode = visitorCode;\n }\n}\n","import {\n BrowserType,\n DeviceType,\n KameleoonLogger,\n OperatingSystemType,\n PageView,\n} from '@kameleoon/javascript-sdk-core/browser';\nimport {\n BrowserResult,\n OSResult,\n PlatformAnalysisResult,\n PlatformResult,\n} from 'src/utils/types';\n\nexport class Utils {\n static getFirstMatch(regex: RegExp, userAgent: string): string {\n const match = userAgent.match(regex);\n return (match && match.length > 0 && match[1]) || '';\n }\n\n static getSecondMatch(regex: RegExp, userAgent: string): string {\n const match = userAgent.match(regex);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n static assign<T extends object>(target: T, ...sources: Partial<T>[]): T {\n return Object.assign(target, ...sources) as T;\n }\n}\n\nexport interface IPlatformAnalyzer {\n getResult(): PlatformAnalysisResult;\n}\n\nexport class PlatformAnalyzer implements IPlatformAnalyzer {\n private userAgent: string;\n private parsedResult: PlatformAnalysisResult;\n\n constructor() {\n this.userAgent = navigator.userAgent || '';\n KameleoonLogger.debug`PlatformParser: userAgent = ${this.userAgent}`;\n this.parsedResult = {};\n if (this.userAgent !== '') {\n this.parse();\n }\n }\n\n private parseBrowser(): BrowserResult {\n const browserRules = [\n {\n test: [/chrome|crios|crmo/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Chrome,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/firefox|iceweasel|fxios/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Firefox,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/safari|applewebkit/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Safari,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/version\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/opr\\/|opios/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Opera,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/edg([ea]|ios)/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.InternetExplorer,\n version: this.getBrowserVersion(\n Utils.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/googlebot/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i, userAgent) ||\n Utils.getFirstMatch(/version\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/SamsungBrowser/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/yabrowser/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/ucbrowser/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/vivaldi/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/phantom/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/electron/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/chromium/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/opera/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Opera,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/msie|trident/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.InternetExplorer,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/.*/i],\n describe: (userAgent: string): BrowserResult => {\n const fallbackRegex = userAgent.includes('(')\n ? /^(.*)\\/(.*)[ \\t]\\((.*)/\n : /^(.*)\\/(.*) /;\n return {\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getSecondMatch(fallbackRegex, userAgent),\n ),\n };\n },\n },\n ];\n\n const match = browserRules.find((rule) =>\n rule.test.some((regex) => regex.test(this.userAgent)),\n );\n\n if (match) {\n this.parsedResult.browser = match.describe(this.userAgent);\n }\n\n return this.parsedResult.browser || {};\n }\n\n private parseOS(): OSResult {\n const osRules = [\n {\n test: [/windows phone/i],\n describe: (): OSResult => ({ name: OperatingSystemType.WindowsPhone }),\n },\n {\n test: [/windows /i],\n describe: (): OSResult => ({ name: OperatingSystemType.Windows }),\n },\n {\n test: [/Macintosh(.*?) FxiOS(.*?) Version\\//],\n describe: (userAgent: string): OSResult => ({\n name: OperatingSystemType.IOS,\n version: Utils.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/, userAgent),\n }),\n },\n {\n test: [/macintosh/i],\n describe: (userAgent: string): OSResult => ({\n name: OperatingSystemType.Mac,\n version: Utils.getFirstMatch(\n /mac os x (\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ).replace(/[_\\s]/g, '.'),\n }),\n },\n {\n test: [/(ipod|iphone|ipad)/i],\n describe: (userAgent: string): OSResult => ({\n name: OperatingSystemType.IOS,\n version: Utils.getFirstMatch(\n /os (\\d+([_\\s]\\d+)*) like mac os x/i,\n userAgent,\n ).replace(/[_\\s]/g, '.'),\n }),\n },\n {\n test: [/android/i],\n describe: (): OSResult => ({ name: OperatingSystemType.Android }),\n },\n {\n test: [/linux/i],\n describe: (): OSResult => ({ name: OperatingSystemType.Linux }),\n },\n ];\n\n const match = osRules.find((rule) =>\n rule.test.some((regex) => regex.test(this.userAgent)),\n );\n\n if (match) {\n this.parsedResult.os = match.describe(this.userAgent);\n }\n\n return this.parsedResult.os || {};\n }\n\n private parsePlatform(): PlatformResult {\n const platformRules = [\n {\n test: [/huserAgentwei/i],\n describe: (userAgent: string): PlatformResult => ({\n type: DeviceType.Phone,\n }),\n },\n {\n test: [/nexus\\s*(?:7|8|9|10).*/i],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/ipad/i],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/Macintosh(.*?) FxiOS(.*?) Version\\//],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/kftt build/i],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/silk/i],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/tablet(?! pc)/i],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/ipod|iphone/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/nexus\\s*[0-6].*/i, /galaxy nexus/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/[^-]mobi/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/blackberry/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/bada/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/windows phone/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/android/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/ios/i],\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n {\n test: [/windows/i],\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n {\n test: [/linux/i],\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n ];\n const platformRulesOSName = [\n {\n test: () =>\n this.parsedResult.os?.name === OperatingSystemType.Android &&\n Number(String(this.parsedResult.os?.version).split('.')[0]) >= 3,\n describe: (userAgent: string): PlatformResult => ({\n type: DeviceType.Tablet,\n }),\n },\n {\n test: () => this.parsedResult.os?.name === OperatingSystemType.Android,\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: () => this.parsedResult.os?.name === OperatingSystemType.Mac,\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n {\n test: () => this.parsedResult.os?.name === OperatingSystemType.Windows,\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n {\n test: () => this.parsedResult.os?.name === OperatingSystemType.Linux,\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n ];\n\n const match =\n platformRules.find((rule) =>\n rule.test.some((regex) => regex.test(this.userAgent)),\n ) || platformRulesOSName.find((rule) => rule.test());\n\n if (match) {\n this.parsedResult.platform = match.describe(this.userAgent);\n }\n\n return this.parsedResult.platform || {};\n }\n\n private parse(): void {\n if (this.userAgent) {\n this.parseBrowser();\n this.parseOS();\n this.parsePlatform();\n }\n }\n\n private getBrowserVersion(version: string | undefined): number | undefined {\n if (!version) {\n return undefined;\n }\n\n const parts = version.split('.');\n if (parts.length === 0) {\n return undefined;\n }\n\n const majorMinor = parts.length > 1 ? `${parts[0]}.${parts[1]}` : parts[0];\n const result = parseFloat(majorMinor);\n return isNaN(result) ? undefined : result;\n }\n\n public parseWebView(): void {\n let href = window.location?.href;\n if (href) {\n const title = document ? document.title : '';\n this.parsedResult.pageView = new PageView({\n urlAddress: href,\n title: title,\n });\n }\n }\n\n public getResult(): PlatformAnalysisResult {\n this.parseWebView();\n return Utils.assign({}, this.parsedResult);\n }\n}\n","import {\n SdkLanguageType,\n KameleoonCore,\n VisitorCodeManager,\n IVisitorCodeManager,\n SetDataCallbackParametersType,\n Validator,\n KameleoonLogger,\n TargetingDataType,\n DataInfoType,\n KameleoonStorageKey,\n} from '@kameleoon/javascript-sdk-core/browser';\nimport { DataStorage as SDKCoreDataStorage } from '@kameleoon/javascript-sdk-core/browser';\nimport { Requester } from './requester';\nimport { DataStorage } from './storage';\nimport { KameleoonEventSource } from './eventSource';\nimport { KameleoonVisitorCodeManager } from './visitorCodeManager';\nimport { IExternalVisitorCodeManager, SDKParameters } from './types';\nimport { KameleoonPRNG } from './prng';\nimport { DefaultLogger } from 'src/defaultLogger';\nimport { VisitorActivityManager } from 'src/visitorActivity';\nimport { ACTIVITY_INTERVAL } from 'src/constants';\nimport { ClientDataManager } from 'src/dataManager';\nimport { PlatformAnalyzer } from 'src/utils/platformAnalyzer';\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * */\nexport class KameleoonClient extends KameleoonCore {\n private readonly domain?: string;\n private readonly internalVisitorCodeManager: IVisitorCodeManager;\n private readonly externalVisitorCodeManager: IExternalVisitorCodeManager;\n private readonly customDataManager?: ClientDataManager;\n\n constructor({\n siteCode,\n configuration,\n externals,\n _internals,\n stubMode,\n }: SDKParameters) {\n if (stubMode) {\n super({\n siteCode,\n internalConfiguration: {} as any,\n stubMode,\n });\n this.internalVisitorCodeManager = {} as any;\n this.externalVisitorCodeManager = {} as any;\n return;\n }\n const prng = _internals?.prng || new KameleoonPRNG();\n const storage = externals?.storage || new DataStorage();\n const requester = externals?.requester || new Requester();\n const eventSource = externals?.eventSource || new KameleoonEventSource();\n const visitorCodeManager = new VisitorCodeManager();\n const externalVisitorCodeManager =\n externals?.visitorCodeManager || new KameleoonVisitorCodeManager();\n\n const packageInfo = _internals?.packageInfo || {\n type: SdkLanguageType.JAVASCRIPT,\n version: process.env.npm_package_version as string,\n isServer: false,\n };\n\n const targetingDataStorage = new SDKCoreDataStorage<TargetingDataType>(\n storage,\n KameleoonStorageKey.TargetingData,\n );\n const dataInfoStorage = new SDKCoreDataStorage<DataInfoType>(\n storage,\n KameleoonStorageKey.DataInfo,\n );\n\n const customDataManager = new ClientDataManager({\n dataStorage: targetingDataStorage,\n infoStorage: dataInfoStorage,\n cleanupInterval: 0,\n packageInfo: packageInfo,\n platformAnalyzer: _internals?.platformAnalyzer ?? new PlatformAnalyzer(),\n });\n\n const dependencies = {\n externalPRNG: prng,\n externalStorage: storage,\n externalRequester: requester,\n externalEventSource: eventSource,\n externalVisitorCodeManager: visitorCodeManager,\n externalPackageInfo: packageInfo,\n externalLogger: externals?.logger || new DefaultLogger(),\n customDataManager: customDataManager,\n };\n\n const settings = {\n useAbortController: true,\n };\n\n super({\n siteCode,\n configuration,\n internalConfiguration: {\n externals: dependencies,\n settings,\n },\n });\n\n const cookieDomain = Validator.validateDomain(configuration?.cookieDomain);\n this.domain = cookieDomain.ok ? cookieDomain.data : undefined;\n this.internalVisitorCodeManager = visitorCodeManager;\n this.externalVisitorCodeManager = externalVisitorCodeManager;\n this.customDataManager = customDataManager;\n }\n\n /**\n * @method initialize - an asynchronous method for KameleoonClient initialization by fetching Kameleoon SDK related data from server or by retrieving data from local source if data is up-to-date or update interval has not been reached\n * @returns {Promise<boolean>} Promise resolved into boolean field indicating success or fail\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.StorageWrite` Couldn't update storage data\n * - `KameleoonException.StorageRead` - Couldn't read storage data\n * - `KameleoonException.ClientConfiguration` Couldn't retrieve client configuration from Kameleoon Api\n * - `KameleoonException.MaximumRetriesReached` Maximum retries reached, request failed\n */\n public async initialize(): Promise<boolean> {\n if (this.stubMode) {\n return false;\n }\n const initialized = super.initialize();\n new VisitorActivityManager(\n this.customDataManager!,\n this.tracker,\n (visitorCode: string) => this._isConsentProvided(visitorCode),\n ACTIVITY_INTERVAL,\n );\n return initialized;\n }\n\n /**\n * @method getVisitorCode - obtains visitor code from the browser cookie, if the visitor code doesn't yet exist generates a random visitor code (or uses a provided default) and sets a new visitor code to cookie\n * @param {string | undefined} defaultVisitorCode - visitor code to be used in case there is no visitor code in cookies *Note*: if not passed visitor code will be randomly generated\n * @returns {string} result visitor code\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.VisitorCodeEmpty` - The visitor code is empty\n */\n public getVisitorCode(defaultVisitorCode?: string): string {\n if (this.stubMode) {\n return '';\n }\n KameleoonLogger.info`CALL KamaleoonClient.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode})`;\n this.internalVisitorCodeManager.getData = (key: string) =>\n this.externalVisitorCodeManager.getData(key);\n\n this.internalVisitorCodeManager.setData = (\n parameters: SetDataCallbackParametersType,\n ) => {\n this.externalVisitorCodeManager.setData({\n ...parameters,\n domain: this.domain,\n });\n };\n\n const visitorCode =\n this.internalVisitorCodeManager.getVisitorCode(defaultVisitorCode);\n if (this.initialized) {\n this.customDataManager?.checkVisitor(visitorCode);\n }\n KameleoonLogger.info`RETURN KamaleoonClient.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode}) -> (visitorCode: ${visitorCode})`;\n return visitorCode;\n }\n\n /**\n * @method setLegalConsent - sets or updates the legal consent status for a visitor identified by their unique visitor code, affecting values in the response cookies based on the consent status\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {boolean} consent - a value representing the legal consent status. - 'true' indicates the\n * visitor has given legal consent. - 'false' indicates the visitor has withdrawn or not\n * provided legal consent.\n * @returns {void}\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.VisitorCodeEmpty` - The visitor code is empty\n */\n public setLegalConsent(visitorCode: string, consent: boolean): void {\n if (this.stubMode) {\n return;\n }\n super.setUserConsent({\n visitorCode,\n consent,\n setData: (parameters: SetDataCallbackParametersType): void => {\n this.externalVisitorCodeManager.setData({\n ...parameters,\n domain: this.domain,\n });\n },\n });\n super.flush(visitorCode);\n }\n}\n"],"names":["commonjsGlobal","globalThis","window","global","self","getDefaultExportFromCjs","x","__esModule","Object","prototype","hasOwnProperty","call","getAugmentedNamespace","n","f","default","a","isInstance","this","Reflect","construct","arguments","constructor","apply","defineProperty","value","keys","forEach","k","d","getOwnPropertyDescriptor","get","enumerable","hasRequiredMain","hasRequiredBuild","KameleoonException","build","main","buildExports","exports","Err","Ok","main_1","throwErr","message","ok","error","Error","data","elseDo","callback","or","orValue","and","throw","else","requireMain","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","e","rejected","result","done","then","SuppressedError","ERROR_MESSAGES","CookieParse","reason","JSONParse","err","NumberParse","VersionParse","SemanticVersionParse","Initialization","Credentials","StorageInitialization","EventSourceInitialization","FeatureFlagConfigurationNotFound","featureKey","FeatureFlagEnvironmentDisabled","environment","FeatureFlagVariableNotFound","variableKey","visitorCode","FeatureFlagVariationNotFound","variationKey","FeatureFlagExperimentNotFound","experimentId","VisitAmount","VisitorCodeMaxLength","VisitorCodeEmpty","StorageWrite","StorageRead","key","StorageEmpty","StorageParse","ClientConfiguration","TargetingCondition","targetingType","AmongValuesCheck","RangeCheck","RemoteData","MaximumRetriesReached","exhaustCheck","option","KameleoonError","type","secondParam","thirdParam","super","name","errorType","undefined","UrlType","HttpMethod","DataApiQuery","RequestType","Header","UrlEventType","UrlParameter","UrlTracking","DEFAULT_DOMAINS","DataApi","Events","LogLevel","LOG_LEVEL_NAMES","NONE","ERROR","WARNING","INFO","DEBUG","replacer","clientId","clientSecret","Map","Array","from","entries","KameleoonLogger","setLogger","logger","setLogLevel","logLevel","log","level","strings","checkLevel","res","i","length","JSON","stringify","template","writeMessage","info","warning","debug","console","warn","Requester$1","urlProvider","packageInfo","externalRequester","requestTimeout","trackRetryDelay","useAbortController","timeout","getClientConfiguration","timeStamp","modifiedSince","requestUrl","getClientConfigurationUrl","headers","assign","SdkType","toLowerCase","SdkVersion","version","IfModifiedSince","responseInfo","Get","NUMBER_OF_RETRIES","response","sendRequest","url","requestType","Configuration","retryCount","parameters","method","json","logReceivedConfigurationResponse","status","lastModified","getLastModifiedHeader","configurationData","configuration","text","parse","logRequestError","getRemoteData","_a","getRemoteDataUrl","getVisitorData","filters","isMappingIdentifier","getVisitorDataUrl","track","body","isBodyUserAgent","getTrackingUrl","Post","Tracking","ContentType","setTimeout","controller","AbortController","timeoutId","abort","signal","clearTimeout","errorText","logResponse","parseResponse","targetKey","LastModified","responseStatus","Environment","VariableType","TrackingStatus","Milliseconds","UpdateType","RuleType","FeatureFlagSdkLanguageType","FeatureStatus","CustomDataScope","ConsentType","ConsentBlockingBehaviour","EventType","UrlProvider","ready","isCustomDomain","domains","initialize","domain","siteCode","setDomains","dataApiDomain","subDomain","split","currentDomain","replace","isInitialized","baseUrl","environmentParam","Production","encodeURIComponent","timeStampParam","getEventSourceUrl","getDataApiUrl","DataMap","encodeURI","customData","previousVisitAmount","currentVisit","conversions","geolocation","experiments","pageViews","device","browser","operatingSystem","kcs","personalization","visitorCodeFilter","cbs","identifierParameter","customDataParameter","conversionsParameter","geolocationParameter","experimentsParameter","pageViewsParameter","staticDataParameter","currentVisitParameter","kcsParameter","personalizationParameter","previousVisitAmountParam","cbsParameter","VisitData","VisitEvent","query","CacheManager","cleanupTimeout","cacheMap","intervalId","Second","add","lifetime","activate","expirationTime","cacheItem","Date","now","set","getAliveItem","delete","setInterval","item","size","cleanupInterval","clearInterval","EventManager","addEventHandler","eventType","eventHandlers","fireEvent","eventHandler","DEFAULT_DATA_FILE_CONFIGURATION","featureFlags","realTimeUpdate","consentType","NotRequired","consentOptOutBehavior","PartiallyBlocked","MEGroup","_featureFlags","slice","sort","ff1","ff2","id","getFeatureFlagByHash","hash","idx","Math","floor","min","updateInterval","storage","requester","dataManager","eventSource","externalVisitorCodeManager","eventManager","externalPackageInfo","defaultDataFile","updateConfigurationIntervalId","updateType","Polling","featureFlagsData","isTargetedDeliveryRule","segmentsData","holdoutData","meGroupsData","mappedRules","mappedExperiments","usedDefaultDataFile","blockingBehaviourMode","CACHE_REVALIDATE_PERIOD","Minute","lastUpdate","visitorCodeManager","readStorageData","checkShouldUpdate","updateResult","updateClientConfiguration","RealTime","isOpen","handlePollingUpdates","handleRealTimeUpdates","cleanupHandlers","close","open","timestamp","ConfigurationUpdate","onError","lastUpdateTime","getTime","timeToNextUpdate","max","bind","segments","flag","rules","rule","segment","has","toString","ruleMap","featureFlag","values","variationByExposition","variationMap","variationId","featureId","variations","experimentMap","holdout","meGroups","isConsentRequired","Required","consentBlockingBehaviour","hasAnyTargetedDeliveryRule","environmentEnabled","some","TARGETED_DELIVERY","_b","_c","read","requestTime","updateFeatureFlagsInfo","localDateModified","dateModified","defaultDateModified","String","updateConfigurationData","currentTime","updateClientConfigurationInBackground","isServer","clientConfigurationResult","applyNewConfigurationDataFromResponse","updateStorageData","clientConfigurationData","clearTrees","clear","toggleUpdateType","consentBlockingBehaviourFromStr","segmentsMap","map","customDataIndexById","index","featureFlagsMap","updateFeatureFlagSegments","updateFeatureFlagBucketingCustomDataId","customDataIndexes","makeMEGroups","updateConsentRequired","segmentId","bucketingCustomDataId","bucketingCustomDataIndex","meGroupLists","groupName","mutuallyExclusiveGroup","meGroupList","push","write","consentRequired","str","CompletelyBlocked","constructTypeMap","indexMap","fromEntries","KameleoonData","DeviceType","OperatingSystemType","BrowserType","OperatingSystemIndexMap","Windows","Mac","IOS","Linux","Android","WindowsPhone","OperatingSystemTypeMap","BrowserIndexMap","Chrome","InternetExplorer","Firefox","Safari","Opera","Other","BrowserTypeMap","OFF_VARIATION_KEY","WAREHOUSE_AUDIENCE_KEY","SdkLanguageType","DEFAULT_VISITOR_DATA_FILTERS","Operator","ValueMatchType","VisitorType","MatchTypeVariation","MatchTypeTest","CampaignType","MatchType","VersionMatchType","NameMatchType","TargetingType","TimeUnit","Order","LOCALHOST","REGEX_DOMAIN","Validator","validateVersion","versionParts","parseInt","isNaN","validateDomain","checkAndTrimProtocol","test","validateNetworkDomain","networkDomain","protocols","protocol","startsWith","substring","Utilities","getNonce","prng","nonce","randomNumber","getRandomNumber","randomIndex","charAt","checkTargeting","targetingData","variationConfiguration","clientConfiguration","conditionsData","firstLevel","assignedVariationsResult","getStoredVariations","targetingTree","getTree","trees","hasTargetingType","SEGMENT","TARGET_FEATURE_FLAG","evaluate","variationData","sdkInfo","convertTimeUnit","time","timeUnit","Hour","Day","Week","Month","isCustomData","dataItem","CustomData","updateCache","hasJsCssVariables","cacheManager","cacheData","newCacheData","getTrackingCode","trackingCache","resultString","updatedCacheData","Number","compareSemVer","compareVersion","operator","versionResult","compareVersionResult","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","EQUAL","GREATER","LOWER","getVariationByHash","total","varByExpItem","exposition","ListUtilities","insertInOrderedListMutably","list","element","order","includes","findIndex","Ascending","splice","insertVisitInOrderedListMutably","visit","find","timeStarted","PageView","urlAddress","title","referrers","timestamps","Unsent","titleParameter","referrersParameter","Sent","sent","unsent","Pending","pending","reduce","acc","_nonce","_fromRaw","pageView","_updateFromVisit","dataMap","pageEvents","pageEvent","href","referrersIndices","existingTimestamps","CustomData$1","first","second","rest","_status","isIdentifier","isBoolean","_index","_name","UNDEFINED_INDEX","overwrite","filter","v","uniqueValues","Set","resultValue","_isMappingIdentifier","customDataEvents","valuesCountMap","Conversion$1","Conversion","goalId","revenue","negative","metadata","random","_metadata","_id","_encodeMetadata","indices","conversion","parseMetadata","_listFromVisit","conversionEvents","conversionEvent","Browser$1","Browser","browserVersion","browserType","_fromVisit","staticDataEvent","browserIndex","Device$1","Device","deviceType","OperatingSystem$1","OperatingSystem","os","operatingSystemType","osIndex","GeolocationData","country","region","city","postalCode","coordinates","geolocationEvents","geolocationData","geolocationEvent","VisitsData","visits","_visitNumber","visitNumber","isSent","updateVisitNumber","KameleoonConversionScore","Personalization","personalizationEvents","personalizationEvent","CBScores","cbsMap","extractVarIds","scores","grouped","score","scoreA","scoreB","ids","b","getValues","cbScores","VisitProcessor","visitsData","visitorData","storageVisitorData","experimentData","singleDataTypes","multipleDataTypes","visitorDataTypes","getVisitorStoredDataTypes","processVisit","processBrowser","processDevice","processOperatingSystem","processGeolocationData","processCustomData","processConversion","processPageView","processExperiments","processPersonalization","processMultipleDataTypes","dataType","storedCustomDataIndexes","processKcs","kcsData","processVisitsData","timeLastActivity","timeLastEvent","processVisitNumber","visitOffset","processCbs","cbsData","experimentEvents","experimentEvent","isTargetedRule","processMappingIdentifier","event","mappingIdentifier","Parser","parseFeatureVariable","variable","BOOLEAN","Boolean","JS","CSS","STRING","NUMBER","numberValue","jsonValue","parseVisitorData","visitProcessor","previousVisits","updateStoredVariations","parseRegExp","_","expression","flags","RegExp","parseSecret","secret","repeat","hiddenLength","ClientSettings","getEnvironment","getNetworkDomain","getUpdateInterval","getCleanupInterval","getRequestTimeout","trackingInterval","getTrackingInterval","MIN_TRACKING_INTERVAL_MS","MAX_TRACKING_INTERVAL_MS","DEFAULT_TRACKING_INTERVAL_MS","targetingDataCleanupInterval","settings","Cookie$1","Cookie","cookie","fromString","cookieString","trim","UniqueIdentifier","_value","DataProcessor","mutUpdateData","infoData","mutData","extendTtl","visitorReference","isReference","dereferenceData","mappingIdentifiers","updateCustomData","updatePageView","updateConversion","updateVisitsData","updatePersonalization","TargetedSegment","updateTargetedSegment","targetedSegment","updateCommonData","commonData","mutCleanupData","nextCleanupTime","removeReference","linkedVisitor","closestCleanupTime","dataKey","deleteNestedExpiredField","deleteExpiredField","mutAddUnsentData","unsentData","createReference","isExist","nestedKey","existingTimestamp","existingTime","updateNestedField","createNestedField","existingVisits","updateField","createField","existingData","existing","StaticData","timeSincePreviousVisit","ConditionFactoryInstance","setConditionFactoryInstance","conditionFactoryInstance","createCondition","Node","left","right","inverseResult","isOperator","nodeValue","isInclude","nodeError","leftChild","rightChild","inverse","And","Or","Tree","targetingTypes","nestedConditions","topLevelOperators","flattenSegment","nestedNodes","conditions","operators","nodes","condition","buildTree","tree","evaluateNode","node","isLeafNode","isNonLeafNode","shift","newNode","unshift","firstLevelOrOperators","conditionList","orOperators","group","convertOperators","deviceData","versionMatchType","browserData","checkCondition","parsedVersion","parseFloat","conditionValue","conversionData","customDataIndex","valueMatchType","range","matchType","UNDEFINED","customDataValue","TRUE","FALSE","RANGE","AMONG_VALUES","parseArray","resultData","isArray","parseRange","lowerBound","upperBound","isInRange","CONTAINS","EXACT","REGULAR_EXPRESSION","array","PageUtils","getLatest","pageViewData","latest","current","PageTitle","latestPageView","PageUrl","SdkLanguage","sdkLanguage","sdkType","VisitorCode","nameMatchType","keyMatchType","isEmptyCookie","isValidMatchType","extractedCookie","extractCookie","cookieData","pair","document","dataCookie","cookieMatchType","OPTIONAL","conditionCookie","isOptionalCookie","compareCookieValue","compareKey","compareValue","keyMatch","operatingSystemData","GeolocationCondition","dataCountry","dataRegion","dataCity","conditionCountry","conditionRegion","conditionCity","Segment","evaluationData","TargetFeatureFlag","featureFlagId","ruleId","_d","PreviousPage","pageViewsData","secondLatestPageView","getSecondLatestPageView","latestPV","secondPV","currentPV","currentLatestTs","VisitedPages","pageCount","pagesAmount","FirstVisit","count","unitOfTime","firstVisit","firstVisitTimestamp","elapsedTimeMilliseconds","elapsedTimeUnit","LastVisit","latestPreviousVisit","lastVisitTimestamp","SameDayVisits","visitCount","todayVisits","todayTimestamp","setHours","todayVisitsAmount","Visits","visitsAmount","NewVisitor","visitorType","isNewVisitor","NEW","RETURNING","ApplicationVersion","ConversionLikelihood","keyMomentId","ExclusiveExperimentCondition","campaignType","personalizations","hasSingleValidVariation","hasNoVariations","hasNoPersonalizations","Experiment","Any","TargetExperimentCondition","variationMatchType","variation","experiment","ANY","TargetPersonalizationCondition","personalizationId","personalizationData","ConditionFactory","CUSTOM_DATUM","EXCLUSIVE_EXPERIMENT","TARGET_EXPERIMENT","TARGET_PERSONALIZATION","DEVICE_TYPE","BROWSER","PAGE_URL","PAGE_TITLE","CONVERSIONS","VISITOR_CODE","SDK_LANGUAGE","COOKIE","OPERATING_SYSTEM","GEOLOCATION","APPLICATION_VERSION","PREVIOUS_PAGE","PAGE_VIEWS","LAST_VISIT","FIRST_VISIT","SAME_DAY_VISITS","VISITS","NEW_VISITORS","HEAT_SLICE","KameleoonStorageKey","DEFAULT_CLIENT_CONFIGURATION","VISIT_DURATION","IntegrityChecker","isDataValid","ClientData","checkClientDataIntegrity","TargetingData","checkTargetingDataIntegrity","DataInfo","checkDataInfoIntegrity","VariationData","checkVariationDataIntegrity","TrackingData","checkTrackingDataIntegrity","getDefaultData","getDefaultClientData","nextVisitTime","scheduledVisitors","ConsentData","KameleoonSimulationFFData","ForcedExperimentVariation","ForcedFeatureVariation","hasFields","hasInvalidFields","obj","visitorValues","fields","every","field","DataStorage$1","externalStorage","storageKey","integrityChecker","defaultData","update","newData","StorageCleanupManager","initCleanupInterval","cleanupData","dataResult","cleanupVariationData","cleanupForcedFeatureVariationData","cleanupForcedExperimentVariationData","cleanupConsentData","consentData","consent","featureVariations","cleanupObjectValues","forcedFeatureVariationData","simulated","features","forcedExperimentVariationData","LegalConsent","DataManager","dataStorage","infoStorage","targetingTrees","mappingIdentifierCustomDataIndex","persistentCustomDataIndexes","localCustomDataIndexes","customDataIndexByName","cleanupIntervalId","dataProcessor","cleanupCallback","getUnsentData","infoResult","unsentDataKeys","isNextVisit","getDataFromRaw","cdIndex","getPendingData","customDataItem","pageViewItem","targetedSegmentData","targetedSegmentItem","geolocationItem","browserItem","deviceItem","osData","osItem","storeTrackedData","storeDataForVisitors","kameleoonData","hasPersistentCustomData","storeData","storeDataInternal","mutUpdateTargetingData","updater","isPersistentCustomData","isUniqueIdentifier","uniqueIdentifier","getVisitorIdentifier","getMappingIdentifier","setMappingIdentifier","currentMappingIdentifier","storageData","getLinkedVisitor","visitorDataOrRef","trySetCustomDataIndexByName","nextCleanup","nextDataCleanup","userId","unsentDataVisitors","identifierCustomDataIndex","indexes","customDataLocalOnlyIndexes","localOnly","scope","Visitor","getCustomDataIndexByName","DEFAULT_MAX_AGE","VisitorCodeManager$1","isRequired","getData","getDataCallback","setData","setDataCallback","validateVisitorCode","getVisitorCode","defaultVisitorCode","existingVisitorCode","generateVisitorCode","processSimulatedVariations","maxAge","path","simulatedVariationsData","getSimulatedVariations","clearSimulatedVariations","updateForcedFeatureVariations","parsed","decodeURIComponent","simulatedVariationFromJson","randomCharacterArray","characters","join","setVariationConfiguration","hasRequiredCore","hasRequiredSha256","sha256$2","core$1","require$$0","freeze","__proto__","sha256Exports","module","CryptoJS","crypto","msCrypto","cryptoSecureRandomInt","getRandomValues","Uint32Array","randomBytes","readInt32LE","create","F","subtype","C","C_lib","lib","Base","extend","overrides","mixIn","init","$super","instance","properties","propertyName","clone","WordArray","words","sigBytes","encoder","Hex","concat","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","j","ceil","nBytes","C_enc","enc","hexChars","bite","hexStr","hexStrLength","substr","Latin1","latin1Chars","fromCharCode","latin1Str","latin1StrLength","charCodeAt","Utf8","escape","utf8Str","unescape","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","_process","doFlush","processedWords","dataWords","dataSigBytes","blockSize","nBlocksReady","nWordsReady","_minBufferSize","nBytesReady","offset","_doProcessBlock","Hasher","cfg","_doReset","messageUpdate","finalize","_doFinalize","_createHelper","hasher","_createHmacHelper","C_algo","HMAC","algo","H","K","isPrime","sqrtN","sqrt","factor","getFractionalBits","nPrime","pow","W","SHA256","_hash","M","c","g","h","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","t1","nBitsTotal","nBitsLeft","HmacSHA256","sha256","getHashDoubleForMEGroup","visitorIdentifier","meGroupName","calculateHash","getHashDouble","respoolTime","suffix","seed","hashDigest","VariationConfiguration","externalStorageForcedExperimentVariations","externalStorageForcedFeatureVariations","storageForcedExperimentVariations","storageForcedFeatureVariations","updateDataStatus","experimentIdList","updatedVariationData","getVariationData","getVisitorsWithUnsentData","visitors","featureFlagVariations","getVariation","legalConsent","withAssignment","defaultVariationKey","Given","forcedVariationData","getForcedExperimentVariation","forcedVariation","forceTargeting","targetedVariation","createAndSaveForcedTargetedVariation","targetingResult","ruleHash","NotGiven","EXPERIMENTATION","evaluateCBScores","variationHash","varByExp","resultWrite","updateForcedExperimentVariation","forcedExperimentVariation","updatedForcedVariationData","forcedFeatureVariations","updatedForcedFeatureVariationData","updatedSimulatedFeatureVariationData","forcedFeatureVariation","getForcedFeatureVariation","simulatedData","forcedData","forcedResult","parseForcedVariationData","simulatedVariation","isSimulatedVariationJson","varId","expId","varIdGroupByScores","varByExps","varByExpExistInCBS","varGroup","KameleoonEventSource$1","externalEventSource","isConnectionOpen","onEvent","handleMessage","eventSiteCode","ts","Byte","MAX_BODY_SIZE","Mb","BodyProvider","currentSize","resultBody","hasUserAgent","trackingVisitors","getTrackingBody","cleanup","addData","userAgent","isConsentProvided","lines","variationDataLines","getVariationDataLines","visitorDataLines","getVisitorDataLines","addVisitorTrackingLines","nonceValue","prepareVisitorBody","identifier","getIdentifier","activityLine","getActivityLine","checkSize","line","Tracker","trackingStorage","bodyProvider","sendDataAll","scheduleVisitor","trackingData","checkIsIdentifier","getUserAgent","userAgentData","UserAgent","storageResult","sendData","sendDataForVisitor","pendingData","trackingVisitorCodes","trackedVisitors","targetVisitorCode","getUnsentVisitorData","getUnsentVariationData","notTrackedVisitors","addNotTrackedVisitors","updatedData","visitorDataForUpdate","sentExperimentIds","isIncluded","KameleoonClient$1","KameleoonClient","dependencies","internalConfiguration","stubMode","initialized","consentDataStorage","tracker","externals","externalLogger","clientSettings","externalPRNG","customDataManager","clientDataStorage","DataStorage","variationDataStorage","forcedVariationDataStorage","simulatedVariationDataStorage","targetingDataStorage","dataInfoStorage","Requester","KameleoonEventSource","visitorCodeOrParams","dataRest","params","getRemoteVisitorData","shouldAddData","trackConversion","flush","isInstant","instant","_isConsentProvided","visitorCodeKey","getFeatureFlags","resultFeatureFlags","getVisitorFeatureFlags","activeVariations","_getActiveFeatureVariations","_getFeatureVariation","getVariations","onlyActive","getActiveFeatureFlags","resultFeatureList","variables","_getFeatureVariables","resultVariables","getFeatureFlagVariationKey","getFeatureFlagVariable","featureFlagVariable","getFeatureFlagVariables","parsedVariable","isFeatureFlagActive","firstParam","isActive","remoteData","getVisitorWarehouseAudience","warehouseKey","getEngineTrackingCode","trackingCode","setForcedVariation","_setForcedVariation","evaluateAudiences","targetedSegments","audienceTracking","getDataFile","dataFile","variationsMap","sourceVariation","variablesMap","ruleVariations","baseVariation","setUserConsent","updateConsentData","readResult","getLegalConsent","consentDataResult","extractLegalConsent","Unknown","evalExp","_evaluate","save","ruleType","EvaluatedExperiment","fromForcedFeatureVariation","_isVisitorNotInHoldout","_isFFUnrestrictedByMEGroup","_getCodeForHash","fromVariationData","fromDefaultVariationKey","isSimulated","Evaluation","selected","meGroup","codeForHash","hashMEGroup","isNotInHoldout","holdoutHash","writeResult","varKey","KameleoonUtils","simulateSuccessRequest","r","getCookieValue","pairKey","pairValue","CookieParameter","fetch","ACTIVITY_INTERVAL","VisitorCodeManager","resultCookie","getResultCookie","cookieArray","KeyValueDelimiter","MaxAge","Path","Domain","PairsDelimiter","localStorage","getItem","getEngineConsentData","setItem","KameleoonVisitorCodeManager","engineConsentData","engineConsent","abTesting","AB_TESTING","EventSource","addEventListener","onerror","KameleoonPRNG","arr","uint32Max","DefaultLogger","toLocaleString","timeZoneName","VisitorActivityManager","interval","setup","updateLastActivity","ClientDataManager","platformAnalyzer","visitor","updateVisitor","staticData","checkVisitor","lastVisit","fetchVisit","previousVisit","createVisitor","getResult","platform","lastVisitorCode","lastTimestamp","visitorVisits","Utils","getFirstMatch","regex","match","getSecondMatch","target","sources","PlatformAnalyzer","navigator","parsedResult","parseBrowser","describe","getBrowserVersion","fallbackRegex","parseOS","parsePlatform","platformRulesOSName","Tablet","Phone","Desktop","parts","majorMinor","parseWebView","location","KameleoonCore","_internals","internalVisitorCodeManager","JAVASCRIPT","SDKCoreDataStorage","cookieDomain","_super","setLegalConsent"],"mappings":"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","x_google_ignoreList":[2]}
1
+ {"version":3,"file":"javascript-sdk.umd.min.js","sources":["../../javascript-sdk-core/dist/javascript-sdk-core.browser.es.js","../src/constants.ts","../../../node_modules/tslib/tslib.es6.js","../src/requester.ts","../src/visitorCodeManager.ts","../src/storage.ts","../src/eventSource.ts","../src/prng.ts","../src/defaultLogger.ts","../src/visitorActivity/visitorActivityManager.ts","../src/dataManager.ts","../src/utils/platformAnalyzer.ts","../src/kameleoonClient.ts"],"sourcesContent":["var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction getAugmentedNamespace(n) {\n if (Object.prototype.hasOwnProperty.call(n, '__esModule')) return n;\n var f = n.default;\n\tif (typeof f == \"function\") {\n\t\tvar a = function a () {\n\t\t\tvar isInstance = false;\n try {\n isInstance = this instanceof a;\n } catch {}\n\t\t\tif (isInstance) {\n return Reflect.construct(f, arguments, this.constructor);\n\t\t\t}\n\t\t\treturn f.apply(this, arguments);\n\t\t};\n\t\ta.prototype = f.prototype;\n } else a = {};\n Object.defineProperty(a, '__esModule', {value: true});\n\tObject.keys(n).forEach(function (k) {\n\t\tvar d = Object.getOwnPropertyDescriptor(n, k);\n\t\tObject.defineProperty(a, k, d.get ? d : {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn n[k];\n\t\t\t}\n\t\t});\n\t});\n\treturn a;\n}\n\nvar build = {};\n\nvar main = {};\n\nvar hasRequiredMain;\n\nfunction requireMain () {\n\tif (hasRequiredMain) return main;\n\thasRequiredMain = 1;\n\tObject.defineProperty(main, \"__esModule\", { value: true });\n\tmain.Err = main.Ok = void 0;\n\t// --- Note ---\n\t// `throw` is a reserved keyword\n\tfunction throwErr(message) {\n\t if (!this.ok) {\n\t if (typeof this.error === \"string\" || typeof this.error === \"undefined\") {\n\t var defaultMessage = \"There was an error! No specific error message was provided.\";\n\t throw new Error(message || this.error || defaultMessage);\n\t }\n\t if (message) {\n\t this.error.message = message;\n\t }\n\t throw this.error;\n\t }\n\t return this.data;\n\t}\n\t// --- Note ---\n\t// `else` is a reserved keyword\n\tfunction elseDo(callback) {\n\t if (this.ok) {\n\t return this.data;\n\t }\n\t // TODO:\n\t // - Tackle the problem of callback return type not being enforced when using `void` | `undefined` as `T`\n\t // - In the same situation `or` works well\n\t return callback(this.error);\n\t}\n\tfunction or(orValue) {\n\t if (this.ok) {\n\t return this.data;\n\t }\n\t return orValue;\n\t}\n\tfunction and(callback) {\n\t if (this.ok) {\n\t callback(this.data);\n\t }\n\t return this;\n\t}\n\tfunction Ok(data) {\n\t return { ok: true, data: data, throw: throwErr, else: elseDo, or: or, and: and };\n\t}\n\tmain.Ok = Ok;\n\tfunction Err(error) {\n\t return { ok: false, error: error, throw: throwErr, else: elseDo, or: or, and: and };\n\t}\n\tmain.Err = Err;\n\t\n\treturn main;\n}\n\nvar hasRequiredBuild;\n\nfunction requireBuild () {\n\tif (hasRequiredBuild) return build;\n\thasRequiredBuild = 1;\n\t(function (exports) {\n\t\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t\texports.Err = exports.Ok = void 0;\n\t\tvar main_1 = requireMain();\n\t\tObject.defineProperty(exports, \"Ok\", { enumerable: true, get: function () { return main_1.Ok; } });\n\t\tObject.defineProperty(exports, \"Err\", { enumerable: true, get: function () { return main_1.Err; } });\n\t\t\n\t} (build));\n\treturn build;\n}\n\nvar buildExports = requireBuild();\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of exception types `KameleoonError`\n * */\nvar KameleoonException;\n(function (KameleoonException) {\n KameleoonException[\"Credentials\"] = \"Credentials\";\n KameleoonException[\"EventSourceInitialization\"] = \"EventSourceInitialization\";\n KameleoonException[\"FeatureFlagConfigurationNotFound\"] = \"FeatureFlagConfigurationNotFound\";\n KameleoonException[\"FeatureFlagVariableNotFound\"] = \"FeatureFlagVariableNotFound\";\n KameleoonException[\"FeatureFlagVariationNotFound\"] = \"FeatureFlagVariationNotFound\";\n KameleoonException[\"FeatureFlagExperimentNotFound\"] = \"FeatureFlagExperimentNotFound\";\n KameleoonException[\"FeatureFlagEnvironmentDisabled\"] = \"FeatureFlagEnvironmentDisabled\";\n KameleoonException[\"VisitAmount\"] = \"VisitAmount\";\n KameleoonException[\"VisitorCodeMaxLength\"] = \"VisitorCodeMaxLength\";\n KameleoonException[\"VisitorCodeEmpty\"] = \"VisitorCodeEmpty\";\n KameleoonException[\"StorageInitialization\"] = \"StorageInitialization\";\n KameleoonException[\"StorageWrite\"] = \"StorageWrite\";\n KameleoonException[\"StorageRead\"] = \"StorageRead\";\n KameleoonException[\"StorageParse\"] = \"StorageParse\";\n KameleoonException[\"StorageEmpty\"] = \"StorageEmpty\";\n KameleoonException[\"ClientConfiguration\"] = \"ClientConfiguration\";\n KameleoonException[\"TargetingCondition\"] = \"TargetingCondition\";\n KameleoonException[\"AmongValuesCheck\"] = \"AmongValuesCheck\";\n KameleoonException[\"RangeCheck\"] = \"RangeCheck\";\n KameleoonException[\"Initialization\"] = \"Initialization\";\n KameleoonException[\"JSONParse\"] = \"JSONParse\";\n KameleoonException[\"NumberParse\"] = \"NumberParse\";\n KameleoonException[\"VersionParse\"] = \"VersionParse\";\n KameleoonException[\"CookieParse\"] = \"CookieParse\";\n KameleoonException[\"SemanticVersionParse\"] = \"SemanticVersionParse\";\n KameleoonException[\"RemoteData\"] = \"RemoteData\";\n KameleoonException[\"MaximumRetriesReached\"] = \"MaximumRetriesReached\";\n})(KameleoonException || (KameleoonException = {}));\n\nconst ERROR_MESSAGES = {\n [KameleoonException.CookieParse]: (reason) => `Couldn't parse cookie string: ${reason}`,\n [KameleoonException.JSONParse]: (err) => `Couldn't parse JSON variable: ${err}`,\n [KameleoonException.NumberParse]: (value) => `It's not possible to parse value ${value} to Number`,\n [KameleoonException.VersionParse]: (value) => `It's not possible to parse a version value ${value} to Number, version should be in format x.x`,\n [KameleoonException.SemanticVersionParse]: (value) => `It's not possible to parse a version value ${value} to Number, version should be in format x.x.x`,\n [KameleoonException.Initialization]: () => \"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods\",\n [KameleoonException.Credentials]: () => 'KameleoonClient can not be created without credentials',\n [KameleoonException.StorageInitialization]: () => \"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed\",\n [KameleoonException.EventSourceInitialization]: () => \"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed\",\n [KameleoonException.FeatureFlagConfigurationNotFound]: (featureKey) => `No feature flag with key ${featureKey} was found.`,\n [KameleoonException.FeatureFlagEnvironmentDisabled]: (featureKey, environment) => `Feature flag with key ${featureKey} is disabled in ${environment} environment.`,\n [KameleoonException.FeatureFlagVariableNotFound]: (variableKey, visitorCode) => `No feature flag variable with key ${variableKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.FeatureFlagVariationNotFound]: (variationKey, visitorCode) => `No feature flag variation with key ${variationKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.FeatureFlagExperimentNotFound]: (experimentId, visitorCode) => `No feature flag experiment with id ${experimentId} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.VisitAmount]: () => 'Visit amount must be a number between 1 and 25',\n [KameleoonException.VisitorCodeMaxLength]: () => 'Visitor code can not be more than 255 characters long',\n [KameleoonException.VisitorCodeEmpty]: () => 'Visitor code can not be empty',\n [KameleoonException.StorageWrite]: (err) => `Couldn't update storage for kameleoonClient: ${err}`,\n [KameleoonException.StorageRead]: (key) => `No data found in storage under ${key} key`,\n [KameleoonException.StorageEmpty]: () => 'No data found in storage',\n [KameleoonException.StorageParse]: (err, key) => `Couldn't parse ${key} storage data, the data may be corrupted. Error: ${err}`,\n [KameleoonException.ClientConfiguration]: (err) => `Couldn't retrieve client configuration from Kameleoon Api. Error: ${err}`,\n [KameleoonException.TargetingCondition]: (targetingType) => `${targetingType} targeting condition is not yet supported.`,\n [KameleoonException.AmongValuesCheck]: (err, value) => `Couldn't parse value \"${value}\": ${err}`,\n [KameleoonException.RangeCheck]: (value) => `Couldn't parse value \"${value}\" as a range, value should be in format [x: number, y: number]`,\n [KameleoonException.RemoteData]: (err) => `Couldn't retrieve data from Kameleoon server. Error: ${err}`,\n [KameleoonException.MaximumRetriesReached]: (err) => `Maximum retries reached, request failed. Reason: ${err}`,\n};\n\nfunction exhaustCheck(option) {\n throw new Error(`Reaching an impossible state because of ${option}`);\n}\n\n/**\n * @class\n * KameleoonError - extends standard `Error` by adding custom `type` property with the type of `KameleoonException`\n * */\nclass KameleoonError extends Error {\n constructor(type, secondParam, thirdParam) {\n super(`Error: ${type}`);\n this.name = 'KameleoonError';\n this.errorType = type;\n switch (type) {\n case KameleoonException.Initialization:\n case KameleoonException.Credentials:\n case KameleoonException.VisitorCodeMaxLength:\n case KameleoonException.VisitorCodeEmpty:\n case KameleoonException.StorageInitialization:\n case KameleoonException.VisitAmount:\n case KameleoonException.EventSourceInitialization:\n case KameleoonException.StorageEmpty:\n this.message = ERROR_MESSAGES[type]();\n break;\n case KameleoonException.CookieParse:\n case KameleoonException.FeatureFlagConfigurationNotFound:\n case KameleoonException.NumberParse:\n case KameleoonException.ClientConfiguration:\n case KameleoonException.MaximumRetriesReached:\n case KameleoonException.RemoteData:\n case KameleoonException.VersionParse:\n case KameleoonException.SemanticVersionParse:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.FeatureFlagExperimentNotFound:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam);\n break;\n case KameleoonException.FeatureFlagVariationNotFound:\n case KameleoonException.FeatureFlagVariableNotFound:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam);\n break;\n case KameleoonException.FeatureFlagEnvironmentDisabled:\n if (thirdParam !== undefined) {\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam);\n }\n else {\n this.message = secondParam;\n }\n break;\n case KameleoonException.StorageWrite:\n case KameleoonException.JSONParse:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.StorageRead:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.StorageParse:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam);\n break;\n case KameleoonException.TargetingCondition:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.AmongValuesCheck:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam);\n break;\n case KameleoonException.RangeCheck:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n default:\n exhaustCheck(type);\n }\n }\n get type() {\n return this.errorType;\n }\n}\n\nvar UrlType;\n(function (UrlType) {\n UrlType[\"DataApi\"] = \"dataApi\";\n UrlType[\"Events\"] = \"events\";\n UrlType[\"ClientConfiguration\"] = \"clientConfiguration\";\n})(UrlType || (UrlType = {}));\nvar HttpMethod;\n(function (HttpMethod) {\n HttpMethod[\"Get\"] = \"GET\";\n HttpMethod[\"Post\"] = \"POST\";\n})(HttpMethod || (HttpMethod = {}));\nvar DataApiQuery;\n(function (DataApiQuery) {\n DataApiQuery[DataApiQuery[\"VisitEvent\"] = 0] = \"VisitEvent\";\n DataApiQuery[DataApiQuery[\"VisitData\"] = 1] = \"VisitData\";\n DataApiQuery[DataApiQuery[\"DataMap\"] = 2] = \"DataMap\";\n})(DataApiQuery || (DataApiQuery = {}));\n/**\n * @enum `RequestType` - an enum of available request types\n * */\nvar RequestType;\n(function (RequestType) {\n RequestType[\"Configuration\"] = \"configuration\";\n RequestType[\"Tracking\"] = \"tracking\";\n RequestType[\"RemoteData\"] = \"remoteData\";\n})(RequestType || (RequestType = {}));\n\nconst NUMBER_OF_RETRIES = 1;\nvar Header;\n(function (Header) {\n Header[\"UserAgent\"] = \"User-Agent\";\n Header[\"ContentType\"] = \"Content-Type\";\n Header[\"SdkVersion\"] = \"X-Kameleoon-SDK-Version\";\n Header[\"SdkType\"] = \"X-Kameleoon-SDK-Type\";\n Header[\"Authorization\"] = \"Authorization\";\n Header[\"AcceptEncoding\"] = \"Accept-Encoding\";\n Header[\"IfModifiedSince\"] = \"If-Modified-Since\";\n Header[\"LastModified\"] = \"Last-Modified\";\n})(Header || (Header = {}));\nconst UrlEventType = {\n CustomData: 'eventType=customData',\n StaticData: 'eventType=staticData',\n Page: 'eventType=page',\n Conversion: 'eventType=conversion',\n Activity: 'eventType=activity',\n Experiment: 'eventType=experiment',\n Geolocation: 'eventType=geolocation',\n TargetingSegment: 'eventType=targetingSegment',\n};\nconst UrlParameter = {\n Title: '&title=',\n ReferrersIndices: '&referrersIndices=',\n Negative: '&negative=',\n Revenue: '&revenue=',\n Overwrite: '&overwrite=',\n Index: '&index=',\n BrowserIndex: '&browserIndex=',\n BrowserVersion: '&browserVersion=',\n Href: '&href=',\n DeviceType: '&deviceType=',\n GoalId: '&goalId=',\n VisitorCode: '&visitorCode=',\n VariationId: '&variationId=',\n Ts: '&ts=',\n Key: '&key=',\n SdkName: '&sdkName=',\n SdkVersion: '&sdkVersion=',\n ValuesCountMap: '&valuesCountMap=',\n Nonce: '&nonce=',\n Id: '&id=',\n CustomData: '&customData=',\n CurrentVisit: '&currentVisit=',\n MaxNumberPreviousVisits: '&maxNumberPreviousVisits=',\n Os: '&os=',\n OsIndex: '&osIndex=',\n Country: '&country=',\n City: '&city=',\n Region: '&region=',\n Latitude: '&latitude=',\n Longitude: '&longitude=',\n PostalCode: '&postalCode=',\n Conversion: '&conversion=',\n StaticData: '&staticData=',\n Geolocation: '&geolocation=',\n Page: '&page=',\n Experiment: '&experiment=',\n Browser: '&browser=',\n MappingIdentifier: '&mappingIdentifier=',\n MappingValue: '&mappingValue=',\n Kcs: '&kcs=',\n Personalization: '&personalization=',\n UserAgent: '&userAgent=',\n BodyUa: '&bodyUa=',\n Cbs: '&cbs=',\n Metadata: '&metadata=',\n VisitNumber: '&visitNumber=',\n TimeSincePreviousVisit: '&timeSincePreviousVisit=',\n};\nconst UrlFirstParameter = {\n Environment: '?environment=',\n Ts: '?ts='};\nconst UrlQuery = {\n Sse: 'sse?siteCode=',\n Map: 'map?siteCode=',\n Events: 'events?siteCode=',\n Visitor: 'visitor?siteCode=',\n};\nconst UrlTracking = {\n Visit: 'visit/',\n Map: 'map/',\n};\nconst DEFAULT_DOMAINS = {\n [UrlType.DataApi]: 'data.kameleoon.io',\n [UrlType.Events]: 'events.kameleoon.eu',\n [UrlType.ClientConfiguration]: 'sdk-config.kameleoon.eu',\n};\n\n/**\n * Enumeration of log levels.\n */\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"NONE\"] = 0] = \"NONE\";\n LogLevel[LogLevel[\"ERROR\"] = 1] = \"ERROR\";\n LogLevel[LogLevel[\"WARNING\"] = 2] = \"WARNING\";\n LogLevel[LogLevel[\"INFO\"] = 3] = \"INFO\";\n LogLevel[LogLevel[\"DEBUG\"] = 4] = \"DEBUG\";\n})(LogLevel || (LogLevel = {}));\n/**\n * Mapping of log levels to their string representations.\n */\nconst LOG_LEVEL_NAMES = {\n [LogLevel.NONE]: 'NONE',\n [LogLevel.ERROR]: 'ERROR',\n [LogLevel.WARNING]: 'WARNING',\n [LogLevel.INFO]: 'INFO',\n [LogLevel.DEBUG]: 'DEBUG',\n};\n\n/**\n * A simple implementation of a logger that prints log messages to the console. This logger\n * implements the {@code IExternalLogger} interface.\n */\nclass DefaultLogger {\n /**\n * @method log - logs a message at the specified log level.\n *\n * @param {LogLevel} level - the log level\n * @param {string} message - the log message\n */\n log(level, message) {\n switch (level) {\n case LogLevel.DEBUG:\n console.debug(message);\n break;\n case LogLevel.INFO:\n console.info(message);\n break;\n case LogLevel.WARNING:\n console.warn(message);\n break;\n case LogLevel.ERROR:\n console.error(message);\n break;\n }\n }\n}\n\nconst replacer = (key, value) => {\n if (key === 'credentials') {\n return {\n clientId: `****`,\n clientSecret: `****`,\n };\n }\n if (value instanceof Map) {\n return Array.from(value.entries());\n }\n return value;\n};\nfunction template(strings, keys) {\n let res = '';\n if (keys) {\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n if (typeof key === 'object') {\n try {\n res += strings[i] + JSON.stringify(key, replacer);\n }\n catch (error) {\n res += strings[i] + \"{object}\";\n }\n }\n else if (typeof key === 'string') {\n res += strings[i] + \"'\" + key + \"'\";\n }\n else {\n res += strings[i] + key;\n }\n }\n }\n res += strings[strings.length - 1];\n return res;\n}\nclass KameleoonLogger {\n static setLogger(logger) {\n KameleoonLogger.logger = logger;\n }\n static setLogLevel(logLevel) {\n KameleoonLogger.logLevel = logLevel;\n }\n static log({ level, strings, keys }) {\n if (!KameleoonLogger.checkLevel(level))\n return;\n let message;\n if (typeof strings === 'string') {\n message = strings;\n }\n else if (typeof strings === 'function') {\n try {\n message = strings();\n }\n catch (error) {\n message = 'Failed to log message';\n }\n }\n else {\n message = template(strings, keys);\n }\n KameleoonLogger.writeMessage(level, message);\n }\n static info(strings, ...keys) {\n KameleoonLogger.log({ level: LogLevel.INFO, strings, keys });\n }\n static error(strings, ...keys) {\n KameleoonLogger.log({ level: LogLevel.ERROR, strings, keys });\n }\n static warning(strings, ...keys) {\n KameleoonLogger.log({ level: LogLevel.WARNING, strings, keys });\n }\n static debug(strings, ...keys) {\n KameleoonLogger.log({ level: LogLevel.DEBUG, strings, keys });\n }\n static checkLevel(level) {\n return level <= KameleoonLogger.logLevel && level !== LogLevel.NONE;\n }\n static writeMessage(level, message) {\n KameleoonLogger.logger.log(level, `Kameleoon [${LOG_LEVEL_NAMES[level]}]: ${message}`);\n }\n}\nKameleoonLogger.logger = new DefaultLogger();\nKameleoonLogger.logLevel = LogLevel.WARNING;\n\nclass Requester {\n constructor({ urlProvider, packageInfo, externalRequester, requestTimeout, trackRetryDelay, useAbortController, }) {\n KameleoonLogger.debug `CALL: new Requester(urlProvider, packageInfo: ${packageInfo}, externalRequester, requestTimeout: ${requestTimeout}, trackRetryDelay: ${trackRetryDelay}, useAbortController: ${useAbortController})`;\n this.urlProvider = urlProvider;\n this.useAbortController = useAbortController;\n this.externalRequester = externalRequester;\n this.trackRetryDelay = trackRetryDelay;\n this.packageInfo = packageInfo;\n this.timeout = requestTimeout;\n KameleoonLogger.debug `RETURN: new Requester(urlProvider, packageInfo: ${packageInfo}, externalRequester, requestTimeout: ${requestTimeout}, trackRetryDelay: ${trackRetryDelay}, useAbortController: ${useAbortController})`;\n }\n getClientConfiguration(timeStamp, modifiedSince) {\n return __awaiter(this, void 0, void 0, function* () {\n const requestUrl = this.urlProvider.getClientConfigurationUrl(timeStamp);\n let headers = Object.assign({ [Header.SdkType]: this.packageInfo.type.toLowerCase(), [Header.SdkVersion]: this.packageInfo.version }, (modifiedSince && { [Header.IfModifiedSince]: modifiedSince }));\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n try {\n let responseInfo = { message: '' };\n KameleoonLogger.debug `Running configuration request Method: ${HttpMethod.Get}, Url: ${requestUrl}, Headers: ${headers}, with retry limit ${requests}`;\n for (let i = 0; i < requests; i++) {\n const response = yield this.sendRequest({\n url: requestUrl,\n requestType: RequestType.Configuration,\n retryCount: i,\n parameters: {\n method: HttpMethod.Get,\n headers,\n },\n });\n if (response.ok) {\n const data = yield response.json();\n this.logReceivedConfigurationResponse(response.status, requestUrl, headers);\n const lastModified = this.getLastModifiedHeader(response);\n const configurationData = data;\n return buildExports.Ok({\n configuration: configurationData,\n lastModified: lastModified,\n });\n }\n if (response.status === 304) {\n this.logReceivedConfigurationResponse(response.status, requestUrl, headers);\n return buildExports.Ok({});\n }\n if (i === NUMBER_OF_RETRIES) {\n if (response.text) {\n const text = yield response.text();\n responseInfo = JSON.parse(text);\n }\n KameleoonLogger.error `Failed to get configuration response ${{\n status: response.status,\n message: responseInfo.message,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}, Headers: ${headers}`;\n }\n else {\n yield this.logRequestError({\n logLevel: LogLevel.WARNING,\n message: 'Failed to get configuration response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n }\n }\n return buildExports.Err(new KameleoonError(KameleoonException.MaximumRetriesReached, responseInfo.message));\n }\n catch (err) {\n yield this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get configuration response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n headers,\n });\n return buildExports.Err(new KameleoonError(KameleoonException.ClientConfiguration, err));\n }\n });\n }\n getRemoteData(key) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const requestUrl = this.urlProvider.getRemoteDataUrl(key);\n KameleoonLogger.debug `Running remote data request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n try {\n const response = yield this.sendRequest({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n parameters: {\n method: HttpMethod.Get,\n },\n });\n if (!response.ok) {\n yield this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get remote data response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n if (response.text) {\n const text = yield response.text();\n const message = (_a = JSON.parse(text)) === null || _a === void 0 ? void 0 : _a.message;\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, message));\n }\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, 'Unknown Reason - no `text()` was found for a response'));\n }\n const data = yield response.json();\n KameleoonLogger.debug `Received remote data response: ${{\n status: response.status,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n return buildExports.Ok(data);\n }\n catch (err) {\n yield this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get remote data response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n });\n }\n getVisitorData({ visitorCode, filters, isMappingIdentifier, }) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const requestUrl = this.urlProvider.getVisitorDataUrl({\n visitorCode,\n filters,\n isMappingIdentifier,\n });\n KameleoonLogger.debug `Running visitor data request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n try {\n const response = yield this.sendRequest({\n url: requestUrl,\n requestType: RequestType.RemoteData,\n retryCount: 0,\n parameters: {\n method: HttpMethod.Get,\n },\n });\n if (!response.ok) {\n yield this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get visitor data response',\n response: response,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n if (typeof response.text === 'function') {\n const text = yield response.text();\n if (text) {\n const message = (_a = JSON.parse(text)) === null || _a === void 0 ? void 0 : _a.message;\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, message));\n }\n }\n if (response.status) {\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, `No error message. Error status: ${response.status}`));\n }\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, 'Unknown Reason - no text message or error status was found for a response'));\n }\n const data = yield response.json();\n KameleoonLogger.debug `Received visitor data response: ${{\n status: response.status,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}`;\n return buildExports.Ok(data);\n }\n catch (err) {\n yield this.logRequestError({\n logLevel: LogLevel.ERROR,\n message: 'Failed to get visitor data response',\n error: err,\n method: HttpMethod.Get,\n url: requestUrl,\n });\n return buildExports.Err(new KameleoonError(KameleoonException.RemoteData, err));\n }\n });\n }\n track(body, isBodyUserAgent) {\n return __awaiter(this, void 0, void 0, function* () {\n // --- Note ---\n // Initial request + NUMBER_OF_RETRIES\n const requests = NUMBER_OF_RETRIES + 1;\n const url = this.urlProvider.getTrackingUrl(isBodyUserAgent);\n KameleoonLogger.debug `Running tracking request Method: ${HttpMethod.Post}, Url: ${url}, Body: ${body}, with retry limit ${requests}, retry delay ${this.trackRetryDelay} ms`;\n for (let i = 0; i < requests; i++) {\n let response;\n try {\n response = yield this.sendRequest({\n url,\n retryCount: i,\n requestType: RequestType.Tracking,\n parameters: {\n body,\n method: HttpMethod.Post,\n headers: {\n [Header.ContentType]: '*/*',\n },\n },\n });\n if (response.ok) {\n KameleoonLogger.debug `Received tracking response: ${{\n status: response.status,\n }} for request Method: ${HttpMethod.Post}, Url: ${url}, Body: ${body}`;\n return buildExports.Ok();\n }\n yield this.logRequestError({\n logLevel: i == NUMBER_OF_RETRIES ? LogLevel.ERROR : LogLevel.WARNING,\n message: 'Failed to get tracking response',\n response: response,\n method: HttpMethod.Post,\n url,\n });\n }\n catch (error) {\n yield this.logRequestError({\n logLevel: i == NUMBER_OF_RETRIES ? LogLevel.ERROR : LogLevel.WARNING,\n message: 'Failed to get tracking response',\n error,\n method: HttpMethod.Post,\n url,\n });\n }\n if (i < requests) {\n yield new Promise((resolve) => setTimeout(resolve, this.trackRetryDelay));\n }\n }\n return buildExports.Err();\n });\n }\n sendRequest({ url, requestType, retryCount, parameters, }) {\n return __awaiter(this, void 0, void 0, function* () {\n let response;\n if (this.useAbortController) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n response = yield this.externalRequester.sendRequest({\n url,\n retryCount: retryCount,\n requestType,\n parameters: Object.assign(Object.assign({}, parameters), { signal: controller.signal }),\n });\n clearTimeout(timeoutId);\n }\n else {\n response = yield this.externalRequester.sendRequest({\n url,\n retryCount: retryCount,\n requestType,\n parameters: parameters,\n });\n }\n return response;\n });\n }\n logRequestError({ logLevel, message, error, method, url, response, headers, }) {\n return __awaiter(this, void 0, void 0, function* () {\n if (error) {\n let errorText = 'Unknown error';\n if (error instanceof Error) {\n errorText = error.message;\n }\n KameleoonLogger.log({\n level: logLevel,\n strings: () => `${message} with error: ${errorText} for request Method: ${method}, Url: ${url}`,\n });\n }\n else if (response) {\n if (KameleoonLogger.checkLevel(logLevel)) {\n const logResponse = yield this.parseResponse(response);\n KameleoonLogger.log({\n level: logLevel,\n strings: () => `${message} response: Status: '${logResponse.status}' Message: '${logResponse.message}' for request Method: ${method}, Url: '${url}'` +\n (headers ? `, Headers: ${headers}` : ''),\n });\n }\n }\n });\n }\n parseResponse(response) {\n return __awaiter(this, void 0, void 0, function* () {\n let message = '';\n try {\n if (typeof response.text === 'function') {\n const text = yield response.text();\n if (text) {\n message = text;\n }\n }\n }\n catch (error) { }\n return {\n status: response.status,\n message: message,\n };\n });\n }\n getLastModifiedHeader(response) {\n if (response.headers) {\n const targetKey = Header.LastModified.toLowerCase();\n for (const [key, value] of response.headers) {\n if (key.toLowerCase() === targetKey) {\n return value;\n }\n }\n }\n return undefined;\n }\n logReceivedConfigurationResponse(responseStatus, requestUrl, headers) {\n KameleoonLogger.debug `Received configuration response: ${{\n status: responseStatus,\n }} for request Method: ${HttpMethod.Get}, Url: ${requestUrl}, Headers: ${headers}`;\n }\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of environment, passed as an argument to KameleoonClient `configuration`s `environment` field\n * */\nvar Environment;\n(function (Environment) {\n Environment[\"Production\"] = \"production\";\n Environment[\"Staging\"] = \"staging\";\n Environment[\"Development\"] = \"development\";\n})(Environment || (Environment = {}));\n\nclass UrlProvider {\n constructor() {\n this.ready = false;\n this.isCustomDomain = false;\n this.domains = DEFAULT_DOMAINS;\n }\n initialize({ domain, siteCode, packageInfo, environment, }) {\n this.siteCode = siteCode;\n this.environment = environment;\n this.packageInfo = packageInfo;\n this.ready = true;\n this.setDomains(domain);\n }\n set dataApiDomain(domain) {\n if (!this.isCustomDomain) {\n this.domains[UrlType.DataApi] = domain;\n return;\n }\n const subDomain = domain.split('.')[0];\n const currentDomain = this.domains[UrlType.DataApi];\n this.domains[UrlType.DataApi] = currentDomain.replace(/^[^.]+/, subDomain);\n }\n get dataApiDomain() {\n return this.domains[UrlType.DataApi];\n }\n getClientConfigurationUrl(timeStamp) {\n this.isInitialized();\n const baseUrl = `https://${this.domains[UrlType.ClientConfiguration]}/v3/`;\n const environmentParam = this.environment === Environment.Production\n ? ''\n : UrlFirstParameter.Environment + encodeURIComponent(this.environment);\n let timeStampParam = '';\n if (timeStamp) {\n if (environmentParam) {\n timeStampParam = UrlParameter.Ts + timeStamp;\n }\n else {\n timeStampParam = UrlFirstParameter.Ts + timeStamp;\n }\n }\n return baseUrl + this.siteCode + environmentParam + timeStampParam;\n }\n getEventSourceUrl() {\n this.isInitialized();\n return `https://${this.domains[UrlType.Events]}:8110/${UrlQuery.Sse}${this.siteCode}`;\n }\n getRemoteDataUrl(key) {\n this.isInitialized();\n return (this.getDataApiUrl(DataApiQuery.DataMap) +\n this.siteCode +\n UrlParameter.Key +\n encodeURI(key));\n }\n getVisitorDataUrl({ visitorCode, filters, isMappingIdentifier, }) {\n this.isInitialized();\n const { customData, previousVisitAmount, currentVisit, conversions, geolocation, experiments, pageViews, device, browser, operatingSystem, kcs, personalization, visitorCode: visitorCodeFilter, cbs, } = filters;\n const identifierParameter = isMappingIdentifier\n ? UrlParameter.MappingValue\n : UrlParameter.VisitorCode;\n const customDataParameter = customData || visitorCodeFilter ? UrlParameter.CustomData + true : '';\n const conversionsParameter = conversions\n ? UrlParameter.Conversion + true\n : '';\n const geolocationParameter = geolocation\n ? UrlParameter.Geolocation + true\n : '';\n const experimentsParameter = experiments\n ? UrlParameter.Experiment + true\n : '';\n const pageViewsParameter = pageViews ? UrlParameter.Page + true : '';\n const staticDataParameter = UrlParameter.StaticData + true;\n const currentVisitParameter = currentVisit\n ? UrlParameter.CurrentVisit + true\n : '';\n const kcsParameter = kcs ? UrlParameter.Kcs + true : '';\n const personalizationParameter = personalization\n ? UrlParameter.Personalization + true\n : '';\n const previousVisitAmountParam = typeof previousVisitAmount !== 'number'\n ? UrlParameter.MaxNumberPreviousVisits + 1\n : UrlParameter.MaxNumberPreviousVisits + previousVisitAmount;\n const cbsParameter = cbs ? UrlParameter.Cbs + true : '';\n return (this.getDataApiUrl(DataApiQuery.VisitData) +\n this.siteCode +\n identifierParameter +\n visitorCode +\n previousVisitAmountParam +\n customDataParameter +\n conversionsParameter +\n geolocationParameter +\n experimentsParameter +\n pageViewsParameter +\n staticDataParameter +\n currentVisitParameter +\n kcsParameter +\n personalizationParameter +\n cbsParameter);\n }\n getTrackingUrl(isBodyUserAgent) {\n this.isInitialized();\n const { type, version } = this.packageInfo;\n let url = this.getDataApiUrl(DataApiQuery.VisitEvent) +\n this.siteCode +\n UrlParameter.SdkName +\n type.toLowerCase() +\n UrlParameter.SdkVersion +\n version;\n if (isBodyUserAgent) {\n url += UrlParameter.BodyUa + true;\n }\n return url;\n }\n isInitialized() {\n if (!this.ready) {\n throw new Error('UrlProvider is not initialized');\n }\n }\n getDataApiUrl(query) {\n if (!this.domains[UrlType.DataApi]) {\n throw new Error('Data API domain is not set');\n }\n const domain = `https://${this.domains[UrlType.DataApi]}`;\n switch (query) {\n case DataApiQuery.VisitEvent:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Events}`;\n case DataApiQuery.VisitData:\n return `${domain}/${UrlTracking.Visit + UrlQuery.Visitor}`;\n case DataApiQuery.DataMap:\n return `${domain}/${UrlTracking.Map + UrlQuery.Map}`;\n }\n }\n setDomains(domain) {\n if (!domain) {\n return;\n }\n this.isCustomDomain = true;\n this.domains[UrlType.DataApi] = 'data.' + domain;\n this.domains[UrlType.Events] = 'events.' + domain;\n this.domains[UrlType.ClientConfiguration] = 'sdk-config.' + domain;\n }\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of feature variable types\n * */\nvar VariableType;\n(function (VariableType) {\n VariableType[\"BOOLEAN\"] = \"BOOLEAN\";\n VariableType[\"NUMBER\"] = \"NUMBER\";\n VariableType[\"STRING\"] = \"STRING\";\n VariableType[\"JSON\"] = \"JSON\";\n VariableType[\"JS\"] = \"JS\";\n VariableType[\"CSS\"] = \"CSS\";\n})(VariableType || (VariableType = {}));\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for data status\n * */\nvar TrackingStatus;\n(function (TrackingStatus) {\n TrackingStatus[\"Sent\"] = \"sent\";\n TrackingStatus[\"Unsent\"] = \"unsent\";\n TrackingStatus[\"Pending\"] = \"pending\";\n})(TrackingStatus || (TrackingStatus = {}));\n/**\n * @readonly\n * @enum {number} a helper Enum for getting milliseconds for a second/minute/hour/day/week/month.\n * Month is considered as an average of 30 days\n * */\nvar Milliseconds;\n(function (Milliseconds) {\n Milliseconds[Milliseconds[\"Second\"] = 1000] = \"Second\";\n Milliseconds[Milliseconds[\"Minute\"] = 60000] = \"Minute\";\n Milliseconds[Milliseconds[\"Hour\"] = 3600000] = \"Hour\";\n Milliseconds[Milliseconds[\"Day\"] = 86400000] = \"Day\";\n Milliseconds[Milliseconds[\"Week\"] = 604800000] = \"Week\";\n Milliseconds[Milliseconds[\"Month\"] = 2592000000] = \"Month\";\n})(Milliseconds || (Milliseconds = {}));\n\n/**\n * @class\n * CacheManager - a class for managing cache\n */\nclass CacheManager {\n /**\n * @param {number} cleanupTimeout - timeout for cleaning cache in seconds\n * generic type `T` is a type of data that will be stored in cache\n * @example\n * ```typescript\n * const cacheManager = new CacheManager<number>(60);\n * ```\n */\n constructor(cleanupTimeout) {\n this.cacheMap = new Map();\n this.intervalId = null;\n this.cleanupTimeout = cleanupTimeout * Milliseconds.Second;\n }\n add({ key, data, lifetime }) {\n KameleoonLogger.debug `CALL: CacheManager.add(key: ${key}, data: ${data}, lifetime: ${lifetime})`;\n if (this.intervalId === null) {\n this.activate();\n }\n const expirationTime = lifetime * Milliseconds.Second;\n const cacheItem = {\n data,\n expirationTime: Date.now() + expirationTime,\n };\n this.cacheMap.set(key, cacheItem);\n KameleoonLogger.debug `RETURN: CacheManager.add(key: ${key}, data: ${data}, lifetime: ${lifetime})`;\n }\n getAliveItem(key) {\n KameleoonLogger.debug `CALL: CacheManager.getAliveItem(key: ${key})`;\n const cacheItem = this.cacheMap.get(key);\n if (cacheItem && cacheItem.expirationTime >= Date.now()) {\n const data = cacheItem.data;\n KameleoonLogger.debug `RETURN: CacheManager.getAliveItem(key: ${key}) -> (item: ${data})`;\n return data;\n }\n cacheItem && this.cacheMap.delete(key);\n KameleoonLogger.debug `RETURN: CacheManager.getAliveItem(key: ${key}) -> (item: null)`;\n return null;\n }\n activate() {\n this.intervalId = setInterval(() => {\n const now = Date.now();\n for (const [key, item] of this.cacheMap) {\n if (item.expirationTime < now) {\n this.cacheMap.delete(key);\n }\n }\n if (!this.cacheMap.size) {\n this.cleanupInterval();\n }\n }, this.cleanupTimeout);\n }\n cleanupInterval() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n\nvar UpdateType;\n(function (UpdateType) {\n UpdateType[UpdateType[\"Polling\"] = 0] = \"Polling\";\n UpdateType[UpdateType[\"RealTime\"] = 1] = \"RealTime\";\n})(UpdateType || (UpdateType = {}));\nvar RuleType;\n(function (RuleType) {\n RuleType[\"TARGETED_DELIVERY\"] = \"TARGETED_DELIVERY\";\n RuleType[\"EXPERIMENTATION\"] = \"EXPERIMENTATION\";\n})(RuleType || (RuleType = {}));\nvar FeatureFlagSdkLanguageType;\n(function (FeatureFlagSdkLanguageType) {\n FeatureFlagSdkLanguageType[\"ANDROID\"] = \"ANDROID\";\n FeatureFlagSdkLanguageType[\"SWIFT\"] = \"SWIFT\";\n FeatureFlagSdkLanguageType[\"JAVA\"] = \"JAVA\";\n FeatureFlagSdkLanguageType[\"CSHARP\"] = \"CSHARP\";\n FeatureFlagSdkLanguageType[\"NODEJS\"] = \"NODEJS\";\n FeatureFlagSdkLanguageType[\"PHP\"] = \"PHP\";\n FeatureFlagSdkLanguageType[\"RUBY\"] = \"RUBY\";\n FeatureFlagSdkLanguageType[\"GO\"] = \"GO\";\n FeatureFlagSdkLanguageType[\"FLUTTER\"] = \"FLUTTER\";\n FeatureFlagSdkLanguageType[\"REACTJS\"] = \"REACTJS\";\n})(FeatureFlagSdkLanguageType || (FeatureFlagSdkLanguageType = {}));\nvar FeatureStatus;\n(function (FeatureStatus) {\n FeatureStatus[\"ACTIVATED\"] = \"ACTIVATED\";\n FeatureStatus[\"DEACTIVATED\"] = \"DEACTIVATED\";\n FeatureStatus[\"SCHEDULED\"] = \"SCHEDULED\";\n})(FeatureStatus || (FeatureStatus = {}));\nvar CustomDataScope;\n(function (CustomDataScope) {\n CustomDataScope[\"Visit\"] = \"VISIT\";\n CustomDataScope[\"Visitor\"] = \"VISITOR\";\n CustomDataScope[\"Page\"] = \"Page\";\n})(CustomDataScope || (CustomDataScope = {}));\nvar ConsentType;\n(function (ConsentType) {\n ConsentType[\"Required\"] = \"REQUIRED\";\n ConsentType[\"NotRequired\"] = \"NOT_REQUIRED\";\n})(ConsentType || (ConsentType = {}));\nvar ConsentBlockingBehaviour;\n(function (ConsentBlockingBehaviour) {\n ConsentBlockingBehaviour[\"PartiallyBlocked\"] = \"PARTIALLY_BLOCK\";\n ConsentBlockingBehaviour[\"CompletelyBlocked\"] = \"FULLY_BLOCK\";\n})(ConsentBlockingBehaviour || (ConsentBlockingBehaviour = {}));\n\nclass EventManager {\n addEventHandler(eventType, callback) {\n if (!this.eventHandlers) {\n this.eventHandlers = new Map();\n }\n this.eventHandlers.set(eventType, callback);\n }\n fireEvent(eventType, data) {\n var _a;\n const eventHandler = (_a = this.eventHandlers) === null || _a === void 0 ? void 0 : _a.get(eventType);\n if (eventHandler && data) {\n eventHandler(data);\n }\n }\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of event types\n * */\nvar EventType;\n(function (EventType) {\n EventType[\"Evaluation\"] = \"evaluation\";\n EventType[\"ConfigurationUpdate\"] = \"configurationUpdate\";\n})(EventType || (EventType = {}));\n\nconst DEFAULT_DATA_FILE_CONFIGURATION = {\n customData: [],\n featureFlags: [],\n configuration: {\n realTimeUpdate: false,\n consentType: ConsentType.NotRequired,\n dataApiDomain: 'data.kameleoon.io',\n consentOptOutBehavior: ConsentBlockingBehaviour.PartiallyBlocked,\n },\n};\n\nclass MEGroup {\n constructor(featureFlags) {\n this._featureFlags = featureFlags\n .slice()\n .sort((ff1, ff2) => ff1.id - ff2.id);\n }\n getFeatureFlagByHash(hash) {\n let idx = Math.floor(hash * this._featureFlags.length);\n idx = Math.min(idx, this._featureFlags.length - 1);\n return this._featureFlags[idx];\n }\n get featureFlags() {\n return this._featureFlags;\n }\n}\n\nclass ClientConfiguration {\n constructor({ updateInterval, urlProvider, storage, requester, dataManager, eventSource, externalVisitorCodeManager, eventManager, externalPackageInfo, defaultDataFile, }) {\n this.updateConfigurationIntervalId = null;\n this.updateType = UpdateType.Polling;\n this.configurationData = DEFAULT_DATA_FILE_CONFIGURATION;\n this.featureFlagsData = new Map();\n this.isTargetedDeliveryRule = null;\n this.segmentsData = null;\n this.holdoutData = null;\n this.meGroupsData = new Map();\n this.mappedRules = null;\n this.mappedExperiments = null;\n this.usedDefaultDataFile = false;\n this.refreshDataFileIfStalePromise = null;\n this.blockingBehaviourMode = ConsentBlockingBehaviour.PartiallyBlocked;\n this.CACHE_REVALIDATE_PERIOD = 90 * Milliseconds.Minute;\n this.urlProvider = urlProvider;\n this.requester = requester;\n this.updateInterval = updateInterval;\n this.lastUpdate = new Date();\n this.storage = storage;\n this.dataManager = dataManager;\n this.eventManager = eventManager;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventSource = eventSource;\n this.externalPackageInfo = externalPackageInfo;\n this.defaultDataFile = defaultDataFile;\n }\n initialize() {\n return __awaiter(this, void 0, void 0, function* () {\n KameleoonLogger.debug('CALL: ClientConfiguration.initialize()');\n this.readStorageData();\n const shouldUpdate = this.checkShouldUpdate();\n if (shouldUpdate) {\n const updateResult = yield this.updateClientConfiguration();\n if (!updateResult.ok) {\n KameleoonLogger.error('Error occurred during client configuration update');\n return updateResult;\n }\n // --- Note ---\n // If update type is being toggled `initialize` will be called again\n // so we don't need to continue execution here\n const isUpdateTypeToggled = updateResult.data;\n if (isUpdateTypeToggled) {\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return buildExports.Ok();\n }\n }\n if (this.updateType === UpdateType.RealTime && !this.eventSource.isOpen) {\n this.handleRealTimeUpdates();\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return buildExports.Ok();\n }\n if (this.updateType === UpdateType.Polling) {\n this.handlePollingUpdates();\n }\n KameleoonLogger.debug('RETURN: ClientConfiguration.initialize()');\n return buildExports.Ok();\n });\n }\n refreshDataFileIfStale() {\n if (!this.checkShouldUpdate()) {\n return Promise.resolve(buildExports.Ok(false));\n }\n if (!this.refreshDataFileIfStalePromise) {\n const promise = this.fetchClientConfiguration()\n .then((result) => (result.ok ? buildExports.Ok(true) : result))\n .finally(() => {\n if (this.refreshDataFileIfStalePromise === promise) {\n this.refreshDataFileIfStalePromise = null;\n }\n });\n this.refreshDataFileIfStalePromise = promise;\n }\n return this.refreshDataFileIfStalePromise;\n }\n cleanupHandlers() {\n if (this.eventSource.isOpen) {\n this.eventSource.close();\n }\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n }\n handleRealTimeUpdates() {\n this.cleanupHandlers();\n const updateEventCallback = (timestamp) => {\n this.updateClientConfiguration(timestamp).then((updateResult) => {\n if (updateResult.ok) {\n this.eventManager.fireEvent(EventType.ConfigurationUpdate, {\n timestamp,\n });\n }\n });\n };\n this.eventSource.open(updateEventCallback);\n this.eventSource.onError((error) => {\n KameleoonLogger.error `Error occurred during real-time update: ${error}. Switching to polling updates while the connection is not restored.`;\n this.updateType = UpdateType.Polling;\n this.handlePollingUpdates();\n });\n }\n handlePollingUpdates() {\n // --- Note ---\n // If `initialize` is called again the interval will be cleared\n // so theoretically we will constantly defer config update\n // but `this.lastUpdate` with `checkShouldUpdate` will prevent that\n this.cleanupHandlers();\n // --- Note ---\n // Error Handling is for `setInterval` emergency cleanup\n try {\n const lastUpdateTime = this.lastUpdate.getTime();\n const now = Date.now();\n const timeToNextUpdate = Math.max(this.updateInterval - (now - lastUpdateTime), 0);\n setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n yield this.updateClientConfiguration();\n this.updateConfigurationIntervalId = setInterval(this.updateClientConfiguration.bind(this), this.updateInterval);\n }), timeToNextUpdate);\n }\n catch (err) {\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n throw err;\n }\n }\n get featureFlags() {\n return this.featureFlagsData;\n }\n get configuration() {\n return this.configurationData.configuration;\n }\n get segments() {\n if (this.segmentsData) {\n return this.segmentsData;\n }\n const segmentsData = new Map();\n this.featureFlagsData.forEach((flag) => {\n flag.rules.forEach((rule) => {\n if (rule.segment && !segmentsData.has(rule.segment.id.toString())) {\n segmentsData.set(rule.segment.id.toString(), rule.segment);\n }\n });\n });\n this.segmentsData = segmentsData;\n return segmentsData;\n }\n get ruleMap() {\n var _a;\n if ((_a = this.mappedRules) === null || _a === void 0 ? void 0 : _a.size) {\n return this.mappedRules;\n }\n const mappedRules = new Map();\n for (const featureFlag of this.featureFlags.values()) {\n for (const rule of featureFlag.rules) {\n const { id, experimentId, variationByExposition } = rule;\n const variationMap = new Map();\n variationByExposition.forEach(({ variationKey, variationId }) => {\n if (typeof variationId === 'number') {\n variationMap.set(variationKey, variationId);\n }\n });\n mappedRules.set(id, {\n featureId: featureFlag.id,\n experimentId,\n variations: variationMap,\n });\n }\n }\n this.mappedRules = mappedRules;\n return mappedRules;\n }\n get experimentMap() {\n var _a;\n if ((_a = this.mappedExperiments) === null || _a === void 0 ? void 0 : _a.size) {\n return this.mappedExperiments;\n }\n const mappedExperiments = new Map();\n for (const featureFlag of this.featureFlags.values()) {\n for (const rule of featureFlag.rules) {\n const { experimentId, variationByExposition } = rule;\n const variationMap = new Map();\n variationByExposition.forEach(({ variationKey, variationId }) => {\n if (typeof variationId === 'number') {\n variationMap.set(variationKey, variationId);\n }\n });\n mappedExperiments.set(experimentId, {\n type: rule.type,\n variations: variationMap,\n });\n }\n }\n this.mappedExperiments = mappedExperiments;\n return mappedExperiments;\n }\n get holdout() {\n return this.holdoutData;\n }\n get meGroups() {\n return this.meGroupsData;\n }\n get isConsentRequired() {\n return this.configuration.consentType === ConsentType.Required;\n }\n get consentBlockingBehaviour() {\n return this.blockingBehaviourMode;\n }\n get hasAnyTargetedDeliveryRule() {\n if (this.isTargetedDeliveryRule !== null) {\n return this.isTargetedDeliveryRule;\n }\n for (const featureFlag of this.featureFlags.values()) {\n if (featureFlag.environmentEnabled &&\n featureFlag.rules.some((rule) => rule.type === RuleType.TARGETED_DELIVERY)) {\n return true;\n }\n }\n return false;\n }\n checkShouldUpdate() {\n const { configuration } = this.configurationData;\n this.updateType = configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n if (!this.featureFlags.size) {\n return true;\n }\n const lastUpdateTime = this.lastUpdate.getTime();\n const updateWindowEdge = Date.now() - this.updateInterval;\n return lastUpdateTime < updateWindowEdge;\n }\n readStorageData() {\n var _a, _b, _c;\n KameleoonLogger.debug('CALL: ClientConfiguration.readStorageData()');\n const result = this.storage.read();\n if (result.ok) {\n let { data, lastUpdate, lastModified, requestTime } = result.data;\n let updateFeatureFlagsInfo = false;\n if (this.defaultDataFile) {\n try {\n const defaultDataFile = JSON.parse(this.defaultDataFile);\n this.defaultDataFile = undefined;\n this.usedDefaultDataFile = true;\n const localDateModified = (_b = (_a = data.dateModified) !== null && _a !== void 0 ? _a : requestTime) !== null && _b !== void 0 ? _b : -1;\n const defaultDateModified = (_c = defaultDataFile.dateModified) !== null && _c !== void 0 ? _c : 0;\n if (!requestTime || defaultDateModified > localDateModified) {\n data = defaultDataFile;\n updateFeatureFlagsInfo = true;\n }\n }\n catch (error) {\n KameleoonLogger.error `Error parsing default data file: ${String(error)}`;\n }\n }\n this.updateConfigurationData(data, updateFeatureFlagsInfo);\n this.lastUpdate = this.usedDefaultDataFile\n ? new Date(0)\n : new Date(Date.parse(lastUpdate));\n this.lastModified = lastModified;\n this.requestTime = requestTime;\n }\n KameleoonLogger.debug `RETURN: ClientConfiguration.readStorageData() -> (result: ${result.ok})`;\n }\n /**\n * Updates client configuration\n *\n * @param timeStamp - timestamp for real-time configuration update\n *\n * @returns `true` if current update type should be toggled (SSE/Polling)\n */\n updateClientConfiguration(timestamp) {\n return __awaiter(this, void 0, void 0, function* () {\n const currentTime = Date.now();\n if (this.usedDefaultDataFile) {\n this.updateClientConfigurationInBackground();\n return buildExports.Ok(false);\n }\n if (this.requestTime && !timestamp && !this.externalPackageInfo.isServer) {\n if (currentTime - this.requestTime <= this.CACHE_REVALIDATE_PERIOD) {\n this.updateClientConfigurationInBackground();\n return buildExports.Ok(false);\n }\n else {\n KameleoonLogger.debug `Cached configuration data has expired. Fetching fresh data.`;\n }\n }\n return this.fetchClientConfiguration(timestamp);\n });\n }\n fetchClientConfiguration(timestamp) {\n return __awaiter(this, void 0, void 0, function* () {\n const clientConfigurationResult = yield this.requester.getClientConfiguration(timestamp, this.lastModified);\n return this.applyNewConfigurationDataFromResponse(clientConfigurationResult);\n });\n }\n updateClientConfigurationInBackground() {\n setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n const clientConfigurationResult = yield this.requester.getClientConfiguration(undefined, this.lastModified);\n yield this.applyNewConfigurationDataFromResponse(clientConfigurationResult);\n }), 0);\n }\n applyNewConfigurationDataFromResponse(clientConfigurationResult) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n this.requestTime = Date.now();\n if (!clientConfigurationResult.ok) {\n if (this.featureFlags.size) {\n KameleoonLogger.error('Error occurred while updating configuration. Existing configuration will be used as a fallback.');\n return buildExports.Ok(true);\n }\n return clientConfigurationResult;\n }\n if (clientConfigurationResult.data.configuration === undefined) {\n // If configuration is undefined, it means that the server returned 304 Not Modified\n // and we should not update the configuration, but need to update the lastUpdate in storage\n this.updateStorageData();\n return buildExports.Ok(false);\n }\n const clientConfigurationData = clientConfigurationResult.data.configuration;\n this.updateConfigurationData(clientConfigurationData, true);\n this.dataManager.clearTrees();\n (_a = this.mappedRules) === null || _a === void 0 ? void 0 : _a.clear();\n (_b = this.experimentMap) === null || _b === void 0 ? void 0 : _b.clear();\n this.isTargetedDeliveryRule = null;\n if (clientConfigurationResult.data.lastModified) {\n this.lastModified = clientConfigurationResult.data.lastModified;\n }\n const result = this.updateStorageData();\n if (!result.ok) {\n return result;\n }\n const updateType = clientConfigurationData.configuration.realTimeUpdate\n ? UpdateType.RealTime\n : UpdateType.Polling;\n const toggleUpdateType = updateType !== this.updateType;\n if (toggleUpdateType) {\n this.updateType = updateType;\n KameleoonLogger.info `Configuration update type was toggled to ${UpdateType[updateType]}`;\n yield this.initialize();\n }\n this.blockingBehaviourMode = this.consentBlockingBehaviourFromStr(clientConfigurationData.configuration.consentOptOutBehavior);\n return buildExports.Ok(toggleUpdateType);\n });\n }\n updateConfigurationData(data, updateFeatureFlagsInfo = true) {\n const { configuration, featureFlags, customData, holdout, segments, dateModified, } = data;\n let segmentsMap = segments\n ? new Map(segments.map((segment) => [segment.id.toString(), segment]))\n : null;\n let customDataIndexById = null;\n if (updateFeatureFlagsInfo) {\n if (customData === null || customData === void 0 ? void 0 : customData.length) {\n customDataIndexById = new Map();\n for (let data of customData) {\n if (data.id !== undefined) {\n customDataIndexById.set(data.id, data.index);\n }\n else {\n customDataIndexById = null;\n break;\n }\n }\n }\n }\n const featureFlagsMap = new Map();\n for (const featureFlag of featureFlags) {\n featureFlagsMap.set(featureFlag.featureKey, featureFlag);\n // configurationFeatureFlag data from storage not needed to be modified\n if (updateFeatureFlagsInfo) {\n this.updateFeatureFlagSegments(featureFlag, segmentsMap);\n this.updateFeatureFlagBucketingCustomDataId(featureFlag, customDataIndexById);\n }\n }\n this.featureFlagsData = featureFlagsMap;\n if (customData === null || customData === void 0 ? void 0 : customData.length) {\n this.dataManager.customDataIndexes = customData;\n }\n this.meGroupsData = this.makeMEGroups(featureFlags);\n this.holdoutData = holdout !== null && holdout !== void 0 ? holdout : null;\n this.configurationData = {\n configuration,\n customData,\n holdout,\n dateModified,\n };\n this.urlProvider.dataApiDomain = data.configuration.dataApiDomain;\n this.updateConsentRequired();\n this.segmentsData = segmentsMap;\n }\n updateFeatureFlagSegments(featureFlag, segmentsMap) {\n if (segmentsMap !== null) {\n featureFlag.rules.forEach((rule) => {\n var _a;\n const segmentId = rule.segmentId;\n rule.segment =\n segmentId != null\n ? (_a = segmentsMap.get(segmentId.toString())) !== null && _a !== void 0 ? _a : null\n : null;\n });\n }\n }\n updateFeatureFlagBucketingCustomDataId(featureFlag, customDataIndexById) {\n const bucketingCustomDataId = featureFlag.bucketingCustomDataId;\n if (bucketingCustomDataId != null && customDataIndexById) {\n featureFlag.bucketingCustomDataIndex = customDataIndexById.get(bucketingCustomDataId);\n }\n }\n makeMEGroups(featureFlags) {\n const meGroupLists = new Map();\n featureFlags.forEach((featureFlag) => {\n const groupName = featureFlag.mutuallyExclusiveGroup;\n if (groupName) {\n let meGroupList = meGroupLists.get(groupName);\n if (meGroupList) {\n meGroupList.push(featureFlag);\n }\n else {\n meGroupLists.set(groupName, [featureFlag]);\n }\n }\n });\n const meGroups = new Map();\n meGroupLists.forEach((featureFlags, groupName) => {\n meGroups.set(groupName, new MEGroup(featureFlags));\n });\n return meGroups;\n }\n updateStorageData() {\n this.lastUpdate = new Date();\n const configurationData = Object.assign(Object.assign({}, this.configurationData), { featureFlags: Array.from(this.featureFlags.values()), segments: this.segmentsData\n ? Array.from(this.segmentsData.values())\n : undefined });\n const data = {\n data: configurationData,\n lastUpdate: this.lastUpdate.toString(),\n lastModified: this.lastModified,\n requestTime: this.requestTime,\n };\n return this.storage.write(data);\n }\n updateConsentRequired() {\n // --- Note ---\n // According to GDPR policy we should set visitorCode if legal consent isn't required\n // or we have at least one Targeted Delivery rule in configuration\n this.visitorCodeManager.consentRequired =\n this.isConsentRequired && !this.hasAnyTargetedDeliveryRule;\n }\n consentBlockingBehaviourFromStr(str) {\n if (str === ConsentBlockingBehaviour.PartiallyBlocked ||\n str === ConsentBlockingBehaviour.CompletelyBlocked) {\n return str;\n }\n KameleoonLogger.error(`Unexpected consent blocking type '${str}'`);\n return ConsentBlockingBehaviour.PartiallyBlocked;\n }\n}\n\nfunction constructTypeMap(indexMap) {\n return Object.fromEntries(Object.entries(indexMap).map(([key, value]) => [value, key]));\n}\n\nvar KameleoonData;\n(function (KameleoonData) {\n KameleoonData[\"UniqueIdentifier\"] = \"uniqueIdentifier\";\n KameleoonData[\"CustomData\"] = \"customData\";\n KameleoonData[\"PageView\"] = \"pageView\";\n KameleoonData[\"GeolocationData\"] = \"geolocation\";\n KameleoonData[\"Browser\"] = \"browser\";\n KameleoonData[\"Conversion\"] = \"conversion\";\n KameleoonData[\"Cookie\"] = \"cookie\";\n KameleoonData[\"Device\"] = \"device\";\n KameleoonData[\"OperatingSystem\"] = \"operatingSystem\";\n KameleoonData[\"UserAgent\"] = \"userAgent\";\n KameleoonData[\"ApplicationVersion\"] = \"applicationVersion\";\n KameleoonData[\"VisitsData\"] = \"visitsData\";\n KameleoonData[\"KameleoonConversionScore\"] = \"kameleoonConversionScore\";\n KameleoonData[\"Personalization\"] = \"personalization\";\n KameleoonData[\"CBScores\"] = \"cbScores\";\n KameleoonData[\"TargetedSegment\"] = \"targetedSegment\";\n})(KameleoonData || (KameleoonData = {}));\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for device type\n * */\nvar DeviceType;\n(function (DeviceType) {\n DeviceType[\"Phone\"] = \"PHONE\";\n DeviceType[\"Tablet\"] = \"TABLET\";\n DeviceType[\"Desktop\"] = \"DESKTOP\";\n})(DeviceType || (DeviceType = {}));\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for operating system type\n * */\nvar OperatingSystemType;\n(function (OperatingSystemType) {\n OperatingSystemType[\"WindowsPhone\"] = \"WINDOWS_PHONE\";\n OperatingSystemType[\"Windows\"] = \"WINDOWS\";\n OperatingSystemType[\"Android\"] = \"ANDROID\";\n OperatingSystemType[\"Linux\"] = \"LINUX\";\n OperatingSystemType[\"Mac\"] = \"MAC\";\n OperatingSystemType[\"IOS\"] = \"IOS\";\n})(OperatingSystemType || (OperatingSystemType = {}));\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants for browser type\n * */\nvar BrowserType;\n(function (BrowserType) {\n BrowserType[\"Chrome\"] = \"CHROME\";\n BrowserType[\"InternetExplorer\"] = \"IE\";\n BrowserType[\"Firefox\"] = \"FIREFOX\";\n BrowserType[\"Safari\"] = \"SAFARI\";\n BrowserType[\"Opera\"] = \"OPERA\";\n BrowserType[\"Other\"] = \"OTHER\";\n})(BrowserType || (BrowserType = {}));\nconst OperatingSystemIndexMap = {\n [OperatingSystemType.Windows]: 0,\n [OperatingSystemType.Mac]: 1,\n [OperatingSystemType.IOS]: 2,\n [OperatingSystemType.Linux]: 3,\n [OperatingSystemType.Android]: 4,\n [OperatingSystemType.WindowsPhone]: 5,\n};\nconst OperatingSystemTypeMap = constructTypeMap(OperatingSystemIndexMap);\nconst BrowserIndexMap = {\n [BrowserType.Chrome]: 0,\n [BrowserType.InternetExplorer]: 1,\n [BrowserType.Firefox]: 2,\n [BrowserType.Safari]: 3,\n [BrowserType.Opera]: 4,\n [BrowserType.Other]: 5,\n};\nconst BrowserTypeMap = constructTypeMap(BrowserIndexMap);\n\nconst OFF_VARIATION_KEY = 'off';\nconst WAREHOUSE_AUDIENCE_KEY = 'warehouseAudiences';\nconst CACHE_CLEANUP_TIMEOUT = 10;\nconst CACHE_ITEM_LIFETIME = 5;\nconst IN_HOLDOUT_VARIATION_KEY = 'in-holdout';\n/**\n * @readonly\n * @enum {string} an Enum of all the possible Kameleoon SDK types\n * */\nvar SdkLanguageType;\n(function (SdkLanguageType) {\n SdkLanguageType[\"ANDROID\"] = \"ANDROID\";\n SdkLanguageType[\"IOS\"] = \"IOS\";\n SdkLanguageType[\"JAVA\"] = \"JAVA\";\n SdkLanguageType[\"CSHARP\"] = \"CSHARP\";\n SdkLanguageType[\"NODEJS\"] = \"NODEJS\";\n SdkLanguageType[\"PHP\"] = \"PHP\";\n SdkLanguageType[\"RUBY\"] = \"RUBY\";\n SdkLanguageType[\"GO\"] = \"GO\";\n SdkLanguageType[\"FLUTTER\"] = \"FLUTTER\";\n SdkLanguageType[\"REACT\"] = \"REACT\";\n SdkLanguageType[\"PYTHON\"] = \"PYTHON\";\n SdkLanguageType[\"JAVASCRIPT\"] = \"JAVASCRIPT\";\n SdkLanguageType[\"RUST\"] = \"RUST\";\n})(SdkLanguageType || (SdkLanguageType = {}));\nconst DEFAULT_VISITOR_DATA_FILTERS = {\n previousVisitAmount: 1,\n currentVisit: true,\n customData: true,\n pageViews: false,\n geolocation: false,\n device: false,\n browser: false,\n operatingSystem: false,\n conversions: false,\n experiments: false,\n kcs: false,\n visitorCode: true,\n personalization: false,\n};\n\nvar Operator;\n(function (Operator) {\n Operator[\"And\"] = \"AND\";\n Operator[\"Or\"] = \"OR\";\n})(Operator || (Operator = {}));\nvar ValueMatchType;\n(function (ValueMatchType) {\n ValueMatchType[\"TRUE\"] = \"TRUE\";\n ValueMatchType[\"FALSE\"] = \"FALSE\";\n ValueMatchType[\"EXACT\"] = \"EXACT\";\n ValueMatchType[\"CONTAINS\"] = \"CONTAINS\";\n ValueMatchType[\"REGULAR_EXPRESSION\"] = \"REGULAR_EXPRESSION\";\n ValueMatchType[\"EQUAL\"] = \"EQUAL\";\n ValueMatchType[\"LOWER\"] = \"LOWER\";\n ValueMatchType[\"GREATER\"] = \"GREATER\";\n ValueMatchType[\"UNDEFINED\"] = \"UNDEFINED\";\n ValueMatchType[\"AMONG_VALUES\"] = \"AMONG_VALUES\";\n ValueMatchType[\"RANGE\"] = \"RANGE\";\n})(ValueMatchType || (ValueMatchType = {}));\nvar VisitorType;\n(function (VisitorType) {\n VisitorType[\"NEW\"] = \"NEW\";\n VisitorType[\"RETURNING\"] = \"RETURNING\";\n})(VisitorType || (VisitorType = {}));\nvar MatchTypeVariation;\n(function (MatchTypeVariation) {\n MatchTypeVariation[\"ANY\"] = \"ANY\";\n MatchTypeVariation[\"EXACT\"] = \"EXACT\";\n})(MatchTypeVariation || (MatchTypeVariation = {}));\nvar MatchTypeTest;\n(function (MatchTypeTest) {\n MatchTypeTest[\"ALL\"] = \"ALL\";\n MatchTypeTest[\"TEST\"] = \"TEST\";\n MatchTypeTest[\"PERSO\"] = \"PERSO\";\n})(MatchTypeTest || (MatchTypeTest = {}));\nvar CampaignType;\n(function (CampaignType) {\n CampaignType[\"Experiment\"] = \"EXPERIMENT\";\n CampaignType[\"Personalization\"] = \"PERSONALIZATION\";\n CampaignType[\"Any\"] = \"ANY\";\n})(CampaignType || (CampaignType = {}));\n// --- Note ---\n// Starting the merge of `matchType` with the release of new conditions\n// Now it contains a couple of sub types, in future API version all match types\n// will be accumulated in this enum\nvar MatchType;\n(function (MatchType) {\n // -- Sub Type One\n MatchType[\"EXACT\"] = \"EXACT\";\n MatchType[\"CONTAINS\"] = \"CONTAINS\";\n MatchType[\"REGULAR_EXPRESSION\"] = \"REGULAR_EXPRESSION\";\n // -- Sub Type Two\n MatchType[\"GREATER\"] = \"GREATER\";\n MatchType[\"EQUAL\"] = \"EQUAL\";\n MatchType[\"LOWER\"] = \"LOWER\";\n})(MatchType || (MatchType = {}));\nvar VersionMatchType;\n(function (VersionMatchType) {\n VersionMatchType[\"GREATER\"] = \"GREATER\";\n VersionMatchType[\"EQUAL\"] = \"EQUAL\";\n VersionMatchType[\"LOWER\"] = \"LOWER\";\n})(VersionMatchType || (VersionMatchType = {}));\nvar NameMatchType;\n(function (NameMatchType) {\n NameMatchType[\"EXACT\"] = \"EXACT\";\n NameMatchType[\"CONTAINS\"] = \"CONTAINS\";\n NameMatchType[\"REGULAR_EXPRESSION\"] = \"REGULAR_EXPRESSION\";\n NameMatchType[\"OPTIONAL\"] = \"OPTIONAL\";\n})(NameMatchType || (NameMatchType = {}));\nvar TargetingType;\n(function (TargetingType) {\n TargetingType[\"PAGE_URL\"] = \"PAGE_URL\";\n TargetingType[\"PAGE_TITLE\"] = \"PAGE_TITLE\";\n TargetingType[\"LANDING_PAGE\"] = \"LANDING_PAGE\";\n TargetingType[\"ORIGIN\"] = \"ORIGIN\";\n TargetingType[\"ORIGIN_TYPE\"] = \"ORIGIN_TYPE\";\n TargetingType[\"REFERRERS\"] = \"REFERRERS\";\n TargetingType[\"NEW_VISITORS\"] = \"NEW_VISITORS\";\n TargetingType[\"INTERESTS\"] = \"INTERESTS\";\n TargetingType[\"BROWSER_LANGUAGE\"] = \"BROWSER_LANGUAGE\";\n TargetingType[\"GEOLOCATION\"] = \"GEOLOCATION\";\n TargetingType[\"DEVICE_TYPE\"] = \"DEVICE_TYPE\";\n TargetingType[\"SCREEN_DIMENSION\"] = \"SCREEN_DIMENSION\";\n TargetingType[\"VISITOR_IP\"] = \"VISITOR_IP\";\n TargetingType[\"AD_BLOCKER\"] = \"AD_BLOCKER\";\n TargetingType[\"PREVIOUS_PAGE\"] = \"PREVIOUS_PAGE\";\n TargetingType[\"KEY_PAGES\"] = \"KEY_PAGES\";\n TargetingType[\"PAGE_VIEWS\"] = \"PAGE_VIEWS\";\n TargetingType[\"FIRST_VISIT\"] = \"FIRST_VISIT\";\n TargetingType[\"LAST_VISIT\"] = \"LAST_VISIT\";\n TargetingType[\"ACTIVE_SESSION\"] = \"ACTIVE_SESSION\";\n TargetingType[\"TIME_SINCE_PAGE_LOAD\"] = \"TIME_SINCE_PAGE_LOAD\";\n TargetingType[\"SAME_DAY_VISITS\"] = \"SAME_DAY_VISITS\";\n TargetingType[\"VISITS\"] = \"VISITS\";\n TargetingType[\"VISITS_BY_PAGE\"] = \"VISITS_BY_PAGE\";\n TargetingType[\"VISITOR_CODE\"] = \"VISITOR_CODE\";\n TargetingType[\"SDK_LANGUAGE\"] = \"SDK_LANGUAGE\";\n TargetingType[\"INTERNAL_SEARCH_KEYWORDS\"] = \"INTERNAL_SEARCH_KEYWORDS\";\n TargetingType[\"TABS_ON_SITE\"] = \"TABS_ON_SITE\";\n TargetingType[\"CONVERSION_PROBABILITY\"] = \"CONVERSION_PROBABILITY\";\n TargetingType[\"HEAT_SLICE\"] = \"HEAT_SLICE\";\n TargetingType[\"SKY_STATUS\"] = \"SKY_STATUS\";\n TargetingType[\"TEMPERATURE\"] = \"TEMPERATURE\";\n TargetingType[\"DAY_NIGHT\"] = \"DAY_NIGHT\";\n TargetingType[\"FORECAST_SKY_STATUS\"] = \"FORECAST_SKY_STATUS\";\n TargetingType[\"FORECAST_TEMPERATURE\"] = \"FORECAST_TEMPERATURE\";\n TargetingType[\"DAY_OF_WEEK\"] = \"DAY_OF_WEEK\";\n TargetingType[\"TIME_RANGE\"] = \"TIME_RANGE\";\n TargetingType[\"HOUR_MINUTE_RANGE\"] = \"HOUR_MINUTE_RANGE\";\n TargetingType[\"JS_CODE\"] = \"JS_CODE\";\n TargetingType[\"COOKIE\"] = \"COOKIE\";\n TargetingType[\"EVENT\"] = \"EVENT\";\n TargetingType[\"BROWSER\"] = \"BROWSER\";\n TargetingType[\"OPERATING_SYSTEM\"] = \"OPERATING_SYSTEM\";\n TargetingType[\"DOM_ELEMENT\"] = \"DOM_ELEMENT\";\n TargetingType[\"MOUSE_OUT\"] = \"MOUSE_OUT\";\n TargetingType[\"TARGET_EXPERIMENT\"] = \"TARGET_EXPERIMENT\";\n TargetingType[\"TARGET_FEATURE_FLAG\"] = \"TARGET_FEATURE_FLAG\";\n TargetingType[\"TARGET_PERSONALIZATION\"] = \"TARGET_PERSONALIZATION\";\n TargetingType[\"EXCLUSIVE_EXPERIMENT\"] = \"EXCLUSIVE_EXPERIMENT\";\n TargetingType[\"CONVERSIONS\"] = \"CONVERSIONS\";\n TargetingType[\"CUSTOM_DATUM\"] = \"CUSTOM_DATUM\";\n TargetingType[\"YSANCE_SEGMENT\"] = \"YSANCE_SEGMENT\";\n TargetingType[\"SEGMENT\"] = \"SEGMENT\";\n TargetingType[\"YSANCE_ATTRIBUT\"] = \"YSANCE_ATTRIBUT\";\n TargetingType[\"TEALIUM_BADGE\"] = \"TEALIUM_BADGE\";\n TargetingType[\"TEALIUM_AUDIENCE\"] = \"TEALIUM_AUDIENCE\";\n TargetingType[\"PRICE_OF_DISPLAYED_PAGE\"] = \"PRICE_OF_DISPLAYED_PAGE\";\n TargetingType[\"NUMBER_OF_VISITED_PAGES\"] = \"NUMBER_OF_VISITED_PAGES\";\n TargetingType[\"VISITED_PAGES\"] = \"VISITED_PAGES\";\n TargetingType[\"CUSTOM\"] = \"CUSTOM\";\n TargetingType[\"EXPLICIT_TRIGGER\"] = \"EXPLICIT_TRIGGER\";\n TargetingType[\"APPLICATION_VERSION\"] = \"APPLICATION_VERSION\";\n})(TargetingType || (TargetingType = {}));\n\nvar TimeUnit;\n(function (TimeUnit) {\n TimeUnit[\"Minute\"] = \"MINUTE\";\n TimeUnit[\"Hour\"] = \"HOUR\";\n TimeUnit[\"Day\"] = \"DAY\";\n TimeUnit[\"Week\"] = \"WEEK\";\n TimeUnit[\"Month\"] = \"MONTH\";\n})(TimeUnit || (TimeUnit = {}));\nvar Order;\n(function (Order) {\n Order[\"Ascending\"] = \"asc\";\n Order[\"Descending\"] = \"desc\";\n})(Order || (Order = {}));\n\nconst HEX_CHARACTERS = '0123456789ABCDEF';\nconst NONCE_LENGTH = 16;\nconst HTTP = 'http://';\nconst HTTPS = 'https://';\nconst LOCALHOST = 'localhost';\nconst REGEX_DOMAIN = /^(\\.?(([a-zA-Z\\d][a-zA-Z\\d-]*[a-zA-Z\\d])|[a-zA-Z\\d]))(\\.(([a-zA-Z\\d][a-zA-Z\\d-]*[a-zA-Z\\d])|[a-zA-Z\\d])){1,126}$/;\nconst HIDDEN_SECRET_CHAR = '*';\nconst SECRET_VISIBLE_LENGTH = 4;\nconst VISITOR_VISIT_MAX_LENGTH = 26;\n\nclass Validator {\n static validateVersion(version) {\n const versionParts = version.split('.').map((x) => parseInt(x, 10));\n while (versionParts.length < 3) {\n versionParts.push(0);\n }\n if (versionParts.some((item) => isNaN(item))) {\n return buildExports.Err(new KameleoonError(KameleoonException.SemanticVersionParse, version));\n }\n return buildExports.Ok(versionParts.slice(0, 3));\n }\n static validateDomain(domain) {\n if (!domain) {\n return buildExports.Err();\n }\n domain = Validator.checkAndTrimProtocol(domain.toLowerCase());\n if (!REGEX_DOMAIN.test(domain) && domain !== LOCALHOST) {\n KameleoonLogger.error `The top-level domain ${domain} is invalid. The value has been set as provided, but it does not meet the required format for proper SDK functionality. Please check the domain for correctness.`;\n return buildExports.Ok(domain);\n }\n return buildExports.Ok(domain);\n }\n static validateNetworkDomain(networkDomain) {\n if (!networkDomain) {\n return buildExports.Err();\n }\n networkDomain = Validator.checkAndTrimProtocol(networkDomain.toLowerCase());\n // replace first and last dot\n networkDomain = networkDomain.replace(/^\\.+|\\.+$/g, '');\n if (!REGEX_DOMAIN.test(networkDomain) && networkDomain !== LOCALHOST) {\n KameleoonLogger.error `The network domain ${networkDomain} is invalid.`;\n return buildExports.Err();\n }\n return buildExports.Ok(networkDomain);\n }\n static checkAndTrimProtocol(domain) {\n const protocols = [HTTP, HTTPS];\n for (const protocol of protocols) {\n if (domain.startsWith(protocol)) {\n domain = domain.substring(protocol.length);\n KameleoonLogger.warning `The domain contains ${protocol}. Domain after protocol trimming: ${domain}`;\n break;\n }\n }\n return domain;\n }\n}\n\nclass Utilities {\n static getNonce(prng) {\n let nonce = '';\n for (let i = 0; i < NONCE_LENGTH; i++) {\n const randomNumber = prng.getRandomNumber();\n const randomIndex = Math.floor(randomNumber * NONCE_LENGTH);\n nonce += HEX_CHARACTERS.charAt(randomIndex);\n }\n return nonce;\n }\n static checkTargeting({ segment, visitorCode, targetingData, experimentId, variationConfiguration, clientConfiguration, packageInfo, dataManager, }) {\n KameleoonLogger.debug `CALL: checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager)`;\n if (!segment || !segment.conditionsData.firstLevel.length) {\n const result = buildExports.Ok(true);\n KameleoonLogger.debug `RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n if (!variationConfiguration) {\n const result = buildExports.Err(new KameleoonError(KameleoonException.Initialization));\n KameleoonLogger.debug `RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n let variations = {};\n const assignedVariationsResult = variationConfiguration.getStoredVariations(visitorCode);\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n const targetingTree = dataManager.getTree(segment);\n let trees = undefined;\n let ruleMap = undefined;\n let segments = undefined;\n // --- Note ---\n // Only getting trees and segments targeting type\n if (targetingTree.hasTargetingType(TargetingType.SEGMENT)) {\n trees = dataManager.trees;\n segments = clientConfiguration.segments;\n }\n // --- Note ---\n // Only constructing rule map for targeting type\n if (targetingTree.hasTargetingType(TargetingType.TARGET_FEATURE_FLAG)) {\n ruleMap = clientConfiguration.ruleMap;\n }\n const result = targetingTree.evaluate({\n variationData: variations,\n sdkInfo: packageInfo,\n segments,\n ruleMap,\n trees,\n targetingData,\n experimentId,\n visitorCode,\n });\n KameleoonLogger.debug `RETURN checkTargeting(segment, visitorCode: ${visitorCode}, targetingData: ${targetingData}, experimentId: ${experimentId}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${result})`;\n return result;\n }\n static convertTimeUnit(time, timeUnit) {\n const timeMap = {\n [TimeUnit.Minute]: Milliseconds.Minute,\n [TimeUnit.Hour]: Milliseconds.Hour,\n [TimeUnit.Day]: Milliseconds.Day,\n [TimeUnit.Week]: Milliseconds.Week,\n [TimeUnit.Month]: Milliseconds.Month,\n };\n return time / timeMap[timeUnit];\n }\n static isCustomData(dataItem) {\n return dataItem.data.type === KameleoonData.CustomData;\n }\n static updateCache({ hasJsCssVariables, cacheManager, visitorCode, experimentId, variationId, }) {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n const newCacheData = cacheData ? Object.assign({}, cacheData) : {};\n newCacheData[experimentId] = {\n variationId,\n hasJsCssVariables,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n static getTrackingCode(trackingCache, visitorCode) {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n const cacheData = trackingCache.getAliveItem(visitorCode);\n if (!cacheData) {\n return resultString;\n }\n const updatedCacheData = {};\n Object.entries(cacheData).forEach(([experimentId, { variationId, expirationTime, hasJsCssVariables }]) => {\n const flag = !hasJsCssVariables;\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId},true]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},${flag}]);`;\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n hasJsCssVariables,\n };\n }\n });\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n return resultString;\n }\n static compareSemVer({ version, compareVersion, operator, }) {\n const versionResult = Validator.validateVersion(version);\n const compareVersionResult = Validator.validateVersion(compareVersion);\n if (!versionResult.ok) {\n return buildExports.Err(versionResult.error);\n }\n if (!compareVersionResult.ok) {\n return buildExports.Err(compareVersionResult.error);\n }\n const [major, minor, patch] = versionResult.data;\n const [compareMajor, compareMinor, comparePatch] = compareVersionResult.data;\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n switch (operator) {\n case VersionMatchType.EQUAL:\n return buildExports.Ok(isMajorEqual && isMinorEqual && isPatchEqual);\n case VersionMatchType.GREATER:\n return buildExports.Ok(major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch));\n case VersionMatchType.LOWER:\n return buildExports.Ok(major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch));\n default:\n KameleoonLogger.error `Unknown version match type: ${operator}`;\n exhaustCheck(operator);\n }\n }\n static getVariationByHash(variationByExposition, hash) {\n let total = 0;\n for (const varByExpItem of variationByExposition) {\n total += varByExpItem.exposition;\n if (total >= hash) {\n return varByExpItem;\n }\n }\n return null;\n }\n}\n\nclass ListUtilities {\n /**\n * Insert element in ordered list, if element already exists in list, does nothing\n * @param list - list to insert element\n * @param element - element to insert\n * @param order - order of list\n */\n static insertInOrderedListMutably({ list, element, order, }) {\n if (list.includes(element)) {\n return;\n }\n const index = list.findIndex((item) => order === Order.Ascending ? item >= element : item <= element);\n if (index === -1) {\n list.push(element);\n }\n else {\n list.splice(index, 0, element);\n }\n }\n /**\n * Insert visit in ordered list, if visit already exists in list, does nothing\n * @param list - list to insert element\n * @param visit - visit to insert\n */\n static insertVisitInOrderedListMutably({ list, visit, }) {\n // Check if the visit already exists in the list\n const currentVisit = list.find((item) => typeof item === 'number'\n ? item === visit.timeStarted\n : item.timeStarted === visit.timeStarted);\n if (currentVisit) {\n return;\n }\n const index = list.findIndex((item) => {\n if (typeof item === 'number') {\n return item >= visit.timeStarted;\n }\n return item.timeStarted >= visit.timeStarted;\n });\n if (index === -1) {\n list.push(visit);\n }\n else {\n list.splice(index, 0, visit);\n }\n if (list.length > VISITOR_VISIT_MAX_LENGTH) {\n list.splice(0, list.length - VISITOR_VISIT_MAX_LENGTH);\n }\n }\n}\n\n/**\n * @class\n * PageView - a class for creating an instance of a page view data\n * */\nclass PageView {\n /**\n * @param {PageViewParametersType} pageViewParameters - an object with page view parameters\n * */\n constructor({ urlAddress, title, referrers }) {\n this.urlAddress = urlAddress;\n this.title = title;\n this.referrers = referrers;\n this.timestamps = [\n {\n time: Date.now(),\n status: TrackingStatus.Unsent,\n },\n ];\n }\n get url() {\n var _a;\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.urlAddress) {\n return '';\n }\n const titleParameter = this.title\n ? UrlParameter.Title + encodeURIComponent(this.title)\n : '';\n const referrersParameter = ((_a = this.referrers) === null || _a === void 0 ? void 0 : _a.length)\n ? UrlParameter.ReferrersIndices + JSON.stringify(this.referrers)\n : '';\n return (UrlEventType.Page +\n UrlParameter.Href +\n encodeURIComponent(this.urlAddress) +\n titleParameter +\n referrersParameter);\n }\n get status() {\n const { [TrackingStatus.Sent]: sent, [TrackingStatus.Unsent]: unsent, [TrackingStatus.Pending]: pending, } = this.timestamps.reduce((acc, { status }) => {\n acc[status] = true;\n return acc;\n }, {\n [TrackingStatus.Sent]: false,\n [TrackingStatus.Unsent]: false,\n [TrackingStatus.Pending]: false,\n });\n if (sent && !unsent && !pending) {\n return TrackingStatus.Sent;\n }\n if (pending && !unsent) {\n return TrackingStatus.Pending;\n }\n return TrackingStatus.Unsent;\n }\n set status(status) {\n this.timestamps = this.timestamps.map((timestamp) => (Object.assign(Object.assign({}, timestamp), { status })));\n }\n set _nonce(nonce) {\n this.nonce = nonce;\n }\n get data() {\n return {\n urlAddress: this.urlAddress,\n title: this.title,\n referrers: this.referrers,\n type: KameleoonData.PageView,\n timestamps: this.timestamps,\n status: this.status,\n nonce: this.nonce,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a PageView instance from raw data\n * @param {PageViewDataType} data - a raw data\n * @return {PageView} a PageView instance\n * */\n static _fromRaw(data) {\n const { urlAddress, title, referrers, timestamps, nonce } = data;\n const pageView = new PageView({\n urlAddress,\n title,\n referrers,\n });\n pageView.timestamps = timestamps;\n if (nonce) {\n pageView._nonce = nonce;\n }\n return pageView;\n }\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of page view data from a visit\n * @param {VisitType} visit - a visit\n * @param {Map<string, PageView>} dataMap - a map of page view data where we collect data\n * */\n static _updateFromVisit(visit, dataMap) {\n const pageEvents = visit.pageEvents;\n if (pageEvents) {\n for (const pageEvent of pageEvents) {\n let referrers = [];\n const { time } = pageEvent;\n const { href, title, referrersIndices } = pageEvent.data;\n if (typeof referrersIndices[0] === 'number') {\n referrers = referrersIndices;\n }\n let pageView;\n if (dataMap.has(href)) {\n const existingTimestamps = dataMap.get(href).timestamps;\n pageView = new PageView({\n urlAddress: href,\n title,\n referrers,\n });\n pageView.timestamps = [\n ...existingTimestamps,\n { time, status: TrackingStatus.Sent },\n ];\n }\n else {\n pageView = new PageView({\n urlAddress: href,\n title,\n referrers,\n });\n pageView.timestamps = [{ time, status: TrackingStatus.Sent }];\n }\n dataMap.set(href, pageView);\n }\n }\n }\n}\n\n/**\n * @class\n * CustomData - a class for creating an instance for user's custom data\n * */\nlet CustomData$1 = class CustomData {\n constructor(first, second, ...rest) {\n this._status = TrackingStatus.Unsent;\n this.isIdentifier = false;\n const isNumber = typeof first === 'number';\n const isBoolean = typeof second === 'boolean';\n if (isNumber) {\n this._index = first;\n }\n else {\n this._name = first;\n this._index = CustomData.UNDEFINED_INDEX;\n }\n this.overwrite = isBoolean ? second : true;\n this.value = isBoolean\n ? rest\n : [second, ...rest].filter((v) => v != null);\n }\n get url() {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (typeof this._index !== 'number') {\n return '';\n }\n const uniqueValues = [...new Set(this.value)];\n let resultValue = {};\n // --- Note ---\n // Final value should look like this `{ \"value_1\": 1, \"value_2\": 1, \"value_3\": 1 }`\n // With no duplicates\n uniqueValues.forEach((value) => {\n resultValue[value] = 1;\n });\n let identifierParameter = '';\n if (this.isIdentifier) {\n identifierParameter = UrlParameter.MappingIdentifier + String(true);\n }\n return (UrlEventType.CustomData +\n UrlParameter.Index +\n this._index +\n UrlParameter.ValuesCountMap +\n encodeURIComponent(JSON.stringify(resultValue)) +\n UrlParameter.Overwrite +\n String(this.overwrite) +\n identifierParameter);\n }\n get data() {\n return Object.assign(Object.assign({ index: this._index }, (this._name !== undefined ? { name: this._name } : {})), { value: this.value, type: KameleoonData.CustomData, isIdentifier: this.isIdentifier, status: this.status, overwrite: this.overwrite });\n }\n get status() {\n if (this._isMappingIdentifier) {\n return TrackingStatus.Unsent;\n }\n return this._status;\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a CustomData instance from raw data\n * @param {CustomDataType} data - a raw data\n * @return {CustomData} a CustomData instance\n * */\n static _fromRaw(data) {\n const { index, value, status, isIdentifier, name, overwrite } = data;\n let customData;\n if (name) {\n customData = new CustomData(name, overwrite !== null && overwrite !== void 0 ? overwrite : true, ...value);\n customData.index = index;\n }\n else {\n customData = new CustomData(index, overwrite !== null && overwrite !== void 0 ? overwrite : true, ...value);\n }\n customData.status = status;\n customData._isMappingIdentifier = isIdentifier;\n return customData;\n }\n /**\n * @property isMappingIdentifier - signifying if the data is a mapping identifier\n * @private\n * */\n set _isMappingIdentifier(value) {\n this.isIdentifier = value;\n }\n set status(status) {\n this._status = status;\n }\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of custom data from a visit\n * @param {VisitType} visit - a visit\n * */\n static _updateFromVisit(visit, dataMap) {\n var _a;\n if ((_a = visit.customDataEvents) === null || _a === void 0 ? void 0 : _a.length) {\n for (let i = visit.customDataEvents.length - 1; i >= 0; i--) {\n const { index, valuesCountMap } = visit.customDataEvents[i].data;\n if (!dataMap.has(index)) {\n dataMap.set(index, new CustomData(index, ...Object.keys(valuesCountMap)));\n }\n }\n }\n }\n /**\n * @private\n * @method index - an internal setter for setting index of custom data\n * @param {number} value - an index value\n * */\n set index(value) {\n this._index = value;\n }\n /**\n * @private\n * @method index - an internal getter for index of custom data\n * */\n get index() {\n return this._index;\n }\n /**\n * @private\n * @method name - an internal getter for a name of custom data\n * */\n get name() {\n return this._name;\n }\n /**\n * @private\n * @method name - an internal getter for a name of custom data\n * */\n get values() {\n return this.value;\n }\n};\nCustomData$1.UNDEFINED_INDEX = -1;\n\n/**\n * @class\n * Conversion - a class for creating an instance for conversion tracking\n * */\nlet Conversion$1 = class Conversion {\n /**\n * @param {ConversionParametersType} conversionParameters - an object with conversion parameters\n * */\n constructor({ goalId, revenue = 0, negative = false, metadata, }) {\n this.goalId = goalId;\n this.revenue = revenue;\n this.negative = negative;\n this.status = TrackingStatus.Unsent;\n this.id = Math.floor(Math.random() * 1000000);\n this._metadata = metadata;\n }\n set _id(id) {\n this.id = id;\n }\n set _nonce(nonce) {\n this.nonce = nonce;\n }\n get url() {\n var _a;\n return (UrlEventType.Conversion +\n UrlParameter.GoalId +\n String(this.goalId) +\n UrlParameter.Revenue +\n String(this.revenue) +\n UrlParameter.Negative +\n String(this.negative) +\n (((_a = this.metadata) === null || _a === void 0 ? void 0 : _a.length)\n ? UrlParameter.Metadata + this._encodeMetadata()\n : ''));\n }\n /**\n * @private\n * @method metadata - an internal getter for a metadata of conversion\n * */\n get _metadata() {\n return this.metadata;\n }\n /**\n * @private\n * @method metadata - an internal setter for setting metadata of conversion\n * @param {number} value - an index value\n * */\n set _metadata(value) {\n this.metadata = value;\n }\n get data() {\n var _a;\n return {\n goalId: this.goalId,\n nonce: this.nonce,\n revenue: this.revenue,\n negative: this.negative,\n type: KameleoonData.Conversion,\n status: this.status,\n id: this.id,\n metadata: ((_a = this.metadata) === null || _a === void 0 ? void 0 : _a.map((item) => item.data)) || undefined,\n };\n }\n _encodeMetadata() {\n var _a;\n if (!((_a = this.metadata) === null || _a === void 0 ? void 0 : _a.length)) {\n return '';\n }\n const indices = new Set();\n return encodeURIComponent(JSON.stringify(this.metadata.reduce((acc, item) => {\n if (indices.has(item.data.index)) {\n return acc;\n }\n indices.add(item.data.index);\n acc[item.data.index] = item.data.value;\n return acc;\n }, {})));\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Conversion instance from raw data\n * @param {ConversionDataType} data - a raw data\n * @return {Conversion} a Conversion instance\n * */\n static _fromRaw(data) {\n const { goalId, revenue, negative, status, id, nonce, metadata } = data;\n const conversion = new Conversion({\n goalId,\n revenue,\n negative,\n metadata: Conversion.parseMetadata(metadata),\n });\n conversion._id = id;\n conversion.status = status;\n if (nonce) {\n conversion._nonce = nonce;\n }\n return conversion;\n }\n static parseMetadata(metadata) {\n return ((metadata === null || metadata === void 0 ? void 0 : metadata.map((item) => CustomData$1._fromRaw(item))) ||\n undefined);\n }\n /**\n * @private\n * @method _listFromVisit - an internal method for returning a list of all Conversion instances\n * @param {VisitType} visit - a visits\n * @return {Conversion[]} - a list of Conversion instances\n * */\n static _listFromVisit(visit) {\n var _a, _b;\n const conversions = [];\n if (!((_a = visit.conversionEvents) === null || _a === void 0 ? void 0 : _a.length)) {\n return [];\n }\n if ((_b = visit.conversionEvents) === null || _b === void 0 ? void 0 : _b.length) {\n for (const conversionEvent of visit.conversionEvents) {\n const { goalId, revenue, negative } = conversionEvent.data;\n const conversion = new Conversion({ goalId, revenue, negative });\n // --- Note ---\n // Conversion is marked as sent, so the visitor won't be converted again just\n // by pulling visits data\n conversion.status = TrackingStatus.Sent;\n conversions.push(conversion);\n }\n }\n return conversions;\n }\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of Conversion instances with only goalId\n * @param {VisitType} visit - a visits\n * @param {Map<number, Conversion>} dataMap - a map of Conversion instances\n * */\n static _updateFromVisit(visit, dataMap) {\n var _a;\n if ((_a = visit.conversionEvents) === null || _a === void 0 ? void 0 : _a.length) {\n for (const conversionEvent of visit.conversionEvents) {\n const { goalId } = conversionEvent.data;\n // --- Note ---\n // - We only take unique `goalId`s as and don't use `revenue` and `negative`\n // because we only utilize it for Conversion Condition and don't re-sent this data tracking\n // not to break server `revenue` calculations and not to cause extra conversions\n // - Moreover conversion is marked as sent, so the visitor won't be converted again just\n // by pulling visits data\n if (!dataMap.has(goalId)) {\n const conversion = new Conversion({ goalId });\n conversion.status = TrackingStatus.Sent;\n dataMap.set(goalId, conversion);\n }\n }\n }\n }\n};\n\n/**\n * @class\n * Browser - a class for creating an instance for browser of a certain type\n * */\nlet Browser$1 = class Browser {\n /**\n * @param {BrowserType} browser - one of the browser types available for data, if browser can not be found in a list, it can be marked as `BrowserType.Other`\n * @param {number | undefined} version - version of the browser, floating point number represents major and minor version of the browser\n * @example\n * ```ts\n * const browser = new Browser(BrowserType.Chrome, 86);\n * const browser = new Browser(BrowserType.Safari, 14.1);\n * ```\n * */\n constructor(browser, version) {\n this.browser = browser;\n this.version = version;\n this.status = TrackingStatus.Unsent;\n }\n get url() {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.browser) {\n return '';\n }\n const browserVersion = this.version\n ? UrlParameter.BrowserVersion + this.version\n : '';\n return (UrlEventType.StaticData +\n UrlParameter.Browser +\n this.browser +\n UrlParameter.BrowserIndex +\n BrowserIndexMap[this.browser] +\n browserVersion);\n }\n get data() {\n return {\n browser: this.browser,\n type: KameleoonData.Browser,\n version: this.version,\n status: this.status,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Browser instance from raw data\n * @param {BrowserDataType} data - a raw data\n * @return {Browser} a Browser instance\n * */\n static _fromRaw(data) {\n const { browser: browserType, version, status } = data;\n const browser = new Browser(browserType, version);\n browser.status = status;\n return browser;\n }\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of Browser class from a visit\n * @param {VisitType} visit - a visit\n * @returns {Browser | undefined} an instance of Browser class or undefined if browser can not be found among visits\n * */\n static _fromVisit(visit) {\n if (!visit.staticDataEvent) {\n return undefined;\n }\n const { browser: browserType, browserIndex, browserVersion, } = visit.staticDataEvent.data;\n if (browserType || typeof browserIndex === 'number') {\n const browser = browserType !== null && browserType !== void 0 ? browserType : BrowserTypeMap[browserIndex];\n if (browserVersion) {\n return new Browser(browser, browserVersion);\n }\n else {\n return new Browser(browser);\n }\n }\n return undefined;\n }\n};\n\n/**\n * @class\n * Device - a class for creating an instance for device of a certain type\n * */\nlet Device$1 = class Device {\n /**\n * @param {DeviceType} device - one of the available device types from `DeviceType` enum\n * */\n constructor(device) {\n this.device = device;\n this.status = TrackingStatus.Unsent;\n }\n get url() {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.device) {\n return '';\n }\n return UrlEventType.StaticData + UrlParameter.DeviceType + this.device;\n }\n get data() {\n return {\n device: this.device,\n type: KameleoonData.Device,\n status: this.status,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Device instance from raw data\n * @param {DeviceDataType} data - a raw data\n * @return {Device} a Device instance\n * */\n static _fromRaw(data) {\n const { device: deviceType, status } = data;\n const device = new Device(deviceType);\n device.status = status;\n return device;\n }\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of Device class from a visit\n * @param {VisitType} visit - a visit\n * @returns {Device | undefined} an instance of Device class or undefined if browser can not be found among visits\n * */\n static _fromVisit(visit) {\n var _a;\n if ((_a = visit.staticDataEvent) === null || _a === void 0 ? void 0 : _a.data.deviceType) {\n return new Device(visit.staticDataEvent.data.deviceType);\n }\n return undefined;\n }\n};\n\n/**\n * @class\n * OperatingSystem - a class for creating an instance for Operating System of a certain type\n * */\nlet OperatingSystem$1 = class OperatingSystem {\n /**\n * @param {OperatingSystemType} operatingSystem - one of the available operating system types from `OperatingSystemType` enum\n * */\n constructor(operatingSystem) {\n this.operatingSystem = operatingSystem;\n this.status = TrackingStatus.Unsent;\n }\n get url() {\n // --- Note ---\n // If SDK is used in vanilla JS codebase, then you're also able to create an instance\n // with no required data, we don't want send anything to tracking in that case\n if (!this.operatingSystem) {\n return '';\n }\n return (UrlEventType.StaticData +\n UrlParameter.Os +\n this.operatingSystem +\n UrlParameter.OsIndex +\n OperatingSystemIndexMap[this.operatingSystem]);\n }\n get data() {\n return {\n operatingSystem: this.operatingSystem,\n type: KameleoonData.OperatingSystem,\n status: this.status,\n };\n }\n /**\n * @private\n * @method _fromRaw - a static method for creating an instance of OperatingSystem class from raw data\n * @param {OperatingSystemDataType} data - a raw data\n * @returns {OperatingSystem} an instance of OperatingSystem class\n * */\n static _fromRaw(data) {\n const { operatingSystem, status } = data;\n const os = new OperatingSystem(operatingSystem);\n os.status = status;\n return os;\n }\n /**\n * @private\n * @method _fromVisit - a static method for creating an instance of OperatingSystem class from a visit\n * @param {VisitType} visit - a visit\n * @returns {OperatingSystem | undefined} an instance of OperatingSystem class or undefined\n * */\n static _fromVisit(visit) {\n if (!visit.staticDataEvent) {\n return undefined;\n }\n const { os: operatingSystemType, osIndex } = visit.staticDataEvent.data;\n if (operatingSystemType || typeof osIndex === 'number') {\n const operatingSystem = operatingSystemType !== null && operatingSystemType !== void 0 ? operatingSystemType : OperatingSystemTypeMap[osIndex];\n return new OperatingSystem(operatingSystem);\n }\n return undefined;\n }\n};\n\n/**\n * @class\n * Geolocation - a class for creating an instance for geolocation data\n * */\nclass GeolocationData {\n /**\n * @param {GeolocationInfoType} geolocationInfo - an object containing information about geolocation of a visitor\n * @example\n * ```ts\n * // Visitor is located at Triumph Arch in Paris, France\n * const location: GeolocationDataType = {\n * country: 'France',\n * region: 'Île-de-France',\n * city: 'Paris',\n * postalCode: '75008',\n * coordinates: [48.8738, 2.295]\n * };\n *\n * const geolocation = new GeolocationData(location);\n * ```\n *\n * */\n constructor({ country, region, city, postalCode, coordinates, }) {\n this.country = country;\n this.region = region;\n this.city = city;\n this.postalCode = postalCode;\n this.coordinates = coordinates;\n this.status = TrackingStatus.Unsent;\n }\n get url() {\n const region = this.region\n ? UrlParameter.Region + encodeURIComponent(this.region)\n : '';\n const city = this.city\n ? UrlParameter.City + encodeURIComponent(this.city)\n : '';\n const postalCode = this.postalCode\n ? UrlParameter.PostalCode + encodeURIComponent(this.postalCode)\n : '';\n const coordinates = this.coordinates\n ? UrlParameter.Latitude +\n this.coordinates[0] +\n UrlParameter.Longitude +\n this.coordinates[1]\n : '';\n return (UrlEventType.Geolocation +\n UrlParameter.Country +\n encodeURIComponent(this.country) +\n region +\n city +\n postalCode +\n coordinates);\n }\n get data() {\n return {\n type: KameleoonData.GeolocationData,\n country: this.country,\n region: this.region,\n city: this.city,\n postalCode: this.postalCode,\n coordinates: this.coordinates,\n status: this.status,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a GeolocationData instance from raw data\n * @param {GeolocationDataType} data - a raw data\n * @return {GeolocationData} a GeolocationData instance\n * */\n static _fromRaw(data) {\n const { country, region, city, postalCode, coordinates, status } = data;\n const geolocation = new GeolocationData({\n country,\n region,\n city,\n postalCode,\n coordinates,\n });\n geolocation.status = status;\n return geolocation;\n }\n /**\n * @private\n * @method _fromVisit - an internal method for creating an instance of GeolocationData class from a visit\n * @param {VisitType} visit - a visit\n * @returns {GeolocationData | undefined} an instance of GeolocationData class or undefined if geolocation can not be found among visits\n * */\n static _fromVisit(visit) {\n var _a;\n if (!((_a = visit.geolocationEvents) === null || _a === void 0 ? void 0 : _a.length)) {\n return undefined;\n }\n let geolocationData = undefined;\n for (const geolocationEvent of visit.geolocationEvents) {\n const { data } = geolocationEvent;\n if (data.country) {\n geolocationData = data;\n }\n }\n // --- Note ---\n // We only take `country`, `region`, and `city` from geolocation event ignoring other fields\n // as they are not participating in targeting, and visits data won't be tracked again\n const { country, region, city } = geolocationData || {};\n if (country) {\n if (region && city) {\n return new GeolocationData({ country, region, city });\n }\n else if (region) {\n return new GeolocationData({ country, region });\n }\n else {\n return new GeolocationData({ country });\n }\n }\n }\n}\n\n/**\n * @class\n * Visits - a class for creating an instance of a stored visits data\n * */\nclass VisitsData {\n /**\n * @param {number[]} visits - a list of visits\n * */\n constructor(visits) {\n this.status = TrackingStatus.Sent;\n this.visits = visits;\n this._visitNumber = visits.length ? visits.length - 1 : 0;\n }\n get visitNumber() {\n return this._visitNumber;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n visits: this.visits,\n visitNumber: this._visitNumber,\n type: KameleoonData.VisitsData,\n status: this.status,\n };\n }\n get isSent() {\n return true;\n }\n /**\n * Adds a single timestamp while ensuring the list remains sorted and unique\n * @param {VisitDataType} visit - The visit data to be added\n */\n set timestamp(visit) {\n ListUtilities.insertVisitInOrderedListMutably({\n list: this.visits,\n visit,\n });\n this._visitNumber = this.visits.length ? this.visits.length - 1 : 0;\n }\n updateVisitNumber(visitNumber) {\n if (visitNumber > this._visitNumber) {\n this._visitNumber = visitNumber;\n }\n }\n}\n\n/**\n * @class\n * KameleoonConversionScore - a class for creating an KCS Heat Range data\n * */\nclass KameleoonConversionScore {\n /**\n * @param {KCSType} kcs - Kameleoon Conversion Score nested object\n * */\n constructor(kcs) {\n this.kcs = kcs;\n this.status = TrackingStatus.Sent;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n kcs: this.kcs,\n type: KameleoonData.KameleoonConversionScore,\n status: this.status,\n };\n }\n}\n\nclass Personalization {\n /**\n * @param {number} id\n * @param {number} variationId\n * */\n constructor(id, variationId) {\n this.id = id;\n this.variationId = variationId;\n this.status = TrackingStatus.Sent;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n id: this.id,\n variationId: this.variationId,\n type: KameleoonData.Personalization,\n status: TrackingStatus.Sent,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a Personalization instance from raw data\n * @param {PersonalizationDataType} data - a raw data\n * @return {Personalization} a Personalization instance\n * */\n static _fromRaw(data) {\n return new Personalization(data.id, data.variationId);\n }\n /**\n * @private\n * @method _updateFromVisit - an internal method for updating a list of Personalization instances\n * @param {VisitType} visit - a visits\n * @param {Map<number, Personalization>} dataMap - a map of Personalization instances\n * */\n static _updateFromVisit(visit, dataMap) {\n var _a;\n if ((_a = visit.personalizationEvents) === null || _a === void 0 ? void 0 : _a.length) {\n for (const personalizationEvent of visit.personalizationEvents) {\n const { id, variationId } = personalizationEvent.data;\n if (!dataMap.has(id)) {\n const personalization = new Personalization(id, variationId);\n dataMap.set(id, personalization);\n }\n }\n }\n }\n}\n\nclass CBScores {\n constructor(cbsMap) {\n this.values = new Map(Object.entries(cbsMap).map(([key, value]) => [\n Number(key),\n this.extractVarIds(value),\n ]));\n this.cbs = cbsMap;\n this.status = TrackingStatus.Sent;\n }\n extractVarIds(scores) {\n // keys = experiment IDs / values = list of variation IDs ordered descending\n // by score (there may be several variation ids with same score)\n const grouped = new Map();\n Object.entries(scores).forEach(([variationId, score]) => {\n if (!grouped.has(score)) {\n grouped.set(score, []);\n }\n grouped.get(score).push(Number(variationId));\n });\n return Array.from(grouped.entries())\n .sort(([scoreA], [scoreB]) => scoreB - scoreA)\n .map(([, ids]) => ({ ids: ids.sort((a, b) => a - b) }));\n }\n getValues() {\n return this.values;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n cbs: this.cbs,\n type: KameleoonData.CBScores,\n status: this.status,\n };\n }\n static _fromRaw(data) {\n const cbScores = new CBScores(data.cbs);\n cbScores.status = data.status;\n return cbScores;\n }\n}\n\nclass VisitProcessor {\n constructor({ filters, dataManager, visitorCode, }) {\n this.visitsData = new VisitsData([]);\n this.visitorData = [];\n this.storageVisitorData = [];\n this.experimentData = {};\n this.singleDataTypes = {\n [KameleoonData.Device]: null,\n [KameleoonData.Browser]: null,\n [KameleoonData.GeolocationData]: null,\n [KameleoonData.OperatingSystem]: null,\n [KameleoonData.KameleoonConversionScore]: null,\n [KameleoonData.CBScores]: null,\n };\n this.multipleDataTypes = {\n [KameleoonData.CustomData]: new Map(),\n [KameleoonData.PageView]: new Map(),\n [KameleoonData.Conversion]: new Map(),\n [KameleoonData.Personalization]: new Map(),\n };\n this.filters = filters;\n this.dataManager = dataManager;\n this.visitorDataTypes = dataManager.getVisitorStoredDataTypes(visitorCode);\n }\n get data() {\n return {\n visitorData: this.visitorData,\n storageVisitorData: this.storageVisitorData,\n visitsData: this.visitsData,\n experimentData: this.experimentData,\n };\n }\n processVisit(visit) {\n this.processBrowser(visit);\n this.processDevice(visit);\n this.processOperatingSystem(visit);\n this.processGeolocationData(visit);\n this.processCustomData(visit);\n this.processConversion(visit);\n this.processPageView(visit);\n this.processExperiments(visit);\n this.processPersonalization(visit);\n }\n processMultipleDataTypes() {\n for (const [dataType, data] of Object.entries(this.multipleDataTypes)) {\n if (!data.size) {\n continue;\n }\n switch (dataType) {\n case KameleoonData.PageView: {\n this.visitorData.push(...data.values());\n this.storageVisitorData.push(...data.values());\n break;\n }\n case KameleoonData.Personalization:\n case KameleoonData.Conversion: {\n this.storageVisitorData.push(...data.values());\n break;\n }\n case KameleoonData.CustomData: {\n const dataItem = data;\n dataItem.forEach((customData) => {\n this.visitorData.push(customData);\n if (!this.dataManager.storedCustomDataIndexes.has(customData.data.index)) {\n this.storageVisitorData.push(customData);\n }\n });\n break;\n }\n }\n }\n }\n processKcs(kcsData) {\n if (this.filters.kcs && kcsData) {\n const kcs = new KameleoonConversionScore(kcsData);\n this.storageVisitorData.push(kcs);\n }\n }\n processVisitsData(visit) {\n var _a;\n this.visitsData.timestamp = {\n timeStarted: visit.timeStarted,\n timeLastActivity: (_a = visit.timeLastEvent) !== null && _a !== void 0 ? _a : visit.timeStarted,\n };\n }\n processVisitNumber(visit, visitOffset) {\n var _a, _b, _c;\n if (this.visitsData.visitNumber <= visitOffset &&\n ((_a = visit.staticDataEvent) === null || _a === void 0 ? void 0 : _a.data.visitNumber)) {\n const visitNumber = (_c = (_b = visit.staticDataEvent) === null || _b === void 0 ? void 0 : _b.data.visitNumber) !== null && _c !== void 0 ? _c : 0;\n this.visitsData.updateVisitNumber(visitNumber + visitOffset);\n }\n }\n processCbs(cbsData) {\n if (this.filters.cbs && cbsData) {\n const cbs = new CBScores(cbsData);\n this.storageVisitorData.push(cbs);\n }\n }\n processBrowser(visit) {\n if (this.filters.browser && !this.singleDataTypes[KameleoonData.Browser]) {\n const browser = Browser$1._fromVisit(visit);\n if (browser) {\n if (!this.visitorDataTypes.has(KameleoonData.Browser)) {\n this.storageVisitorData.push(browser);\n }\n this.visitorData.push(browser);\n this.singleDataTypes[KameleoonData.Browser] = browser;\n }\n }\n }\n processDevice(visit) {\n if (this.filters.device && !this.singleDataTypes[KameleoonData.Device]) {\n const device = Device$1._fromVisit(visit);\n if (device) {\n if (!this.visitorDataTypes.has(KameleoonData.Device)) {\n this.storageVisitorData.push(device);\n }\n this.visitorData.push(device);\n this.singleDataTypes[KameleoonData.Device] = device;\n }\n }\n }\n processOperatingSystem(visit) {\n if (this.filters.operatingSystem &&\n !this.singleDataTypes[KameleoonData.OperatingSystem]) {\n const operatingSystem = OperatingSystem$1._fromVisit(visit);\n if (operatingSystem) {\n if (!this.visitorDataTypes.has(KameleoonData.OperatingSystem)) {\n this.storageVisitorData.push(operatingSystem);\n }\n this.visitorData.push(operatingSystem);\n this.singleDataTypes[KameleoonData.OperatingSystem] = operatingSystem;\n }\n }\n }\n processGeolocationData(visit) {\n if (this.filters.geolocation &&\n !this.singleDataTypes[KameleoonData.GeolocationData]) {\n const geolocation = GeolocationData._fromVisit(visit);\n if (geolocation) {\n if (!this.visitorDataTypes.has(KameleoonData.GeolocationData)) {\n this.storageVisitorData.push(geolocation);\n }\n this.visitorData.push(geolocation);\n this.singleDataTypes[KameleoonData.GeolocationData] = geolocation;\n }\n }\n }\n processCustomData(visit) {\n if (this.filters.customData) {\n CustomData$1._updateFromVisit(visit, this.multipleDataTypes[KameleoonData.CustomData]);\n }\n }\n processConversion(visit) {\n if (this.filters.conversions) {\n // --- Note ---\n // We collect Conversion data with only unique goalId\n Conversion$1._updateFromVisit(visit, this.multipleDataTypes[KameleoonData.Conversion]);\n // --- Note ---\n // We collect all Conversion data with goalId, revenue and negative for all visits\n const conversions = Conversion$1._listFromVisit(visit);\n if (conversions.length) {\n this.visitorData.push(...conversions);\n }\n }\n }\n processPageView(visit) {\n if (this.filters.pageViews) {\n PageView._updateFromVisit(visit, this.multipleDataTypes[KameleoonData.PageView]);\n }\n }\n processExperiments(visit) {\n if (this.filters.experiments && visit.experimentEvents) {\n for (const experimentEvent of visit.experimentEvents) {\n const { id, variationId } = experimentEvent.data;\n this.experimentData[id] = {\n variationId,\n isTargetedRule: false,\n status: TrackingStatus.Unsent,\n };\n }\n }\n }\n processPersonalization(visit) {\n if (this.filters.personalization) {\n Personalization._updateFromVisit(visit, this.multipleDataTypes[KameleoonData.Personalization]);\n }\n }\n processMappingIdentifier(visit) {\n var _a, _b;\n if (!visit) {\n return;\n }\n const timestamp = (_b = (_a = visit.customDataEvents) === null || _a === void 0 ? void 0 : _a.find((event) => event.data.mappingIdentifier)) === null || _b === void 0 ? void 0 : _b.time;\n if (timestamp && visit.visitorCode) {\n return {\n mappingIdentifier: visit.visitorCode,\n timestamp,\n };\n }\n }\n}\n\nclass Parser {\n static parseFeatureVariable(variable) {\n const { key, type, value } = variable;\n switch (type) {\n case VariableType.BOOLEAN:\n return buildExports.Ok({\n key,\n type,\n value: Boolean(value),\n });\n case VariableType.JS:\n case VariableType.CSS:\n case VariableType.STRING:\n return buildExports.Ok({\n key,\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n if (Number.isNaN(numberValue)) {\n return buildExports.Err(new KameleoonError(KameleoonException.NumberParse, String(value)));\n }\n return buildExports.Ok({\n key,\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue = JSON.parse(String(variable.value));\n return buildExports.Ok({\n key,\n type,\n value: jsonValue,\n });\n }\n catch (err) {\n return buildExports.Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n static parseVisitorData({ data, filters, visitorCode, dataManager, variationConfiguration, }) {\n const visitProcessor = new VisitProcessor({\n filters,\n dataManager,\n visitorCode,\n });\n const { currentVisit, previousVisits, kcs, cbs } = data;\n if (!(previousVisits === null || previousVisits === void 0 ? void 0 : previousVisits.length) && !currentVisit) {\n return {\n visitorData: [],\n storageVisitorData: [],\n visitsData: new VisitsData([]),\n };\n }\n if (currentVisit) {\n visitProcessor.processVisit(currentVisit);\n visitProcessor.processVisitNumber(currentVisit, 0);\n }\n previousVisits === null || previousVisits === void 0 ? void 0 : previousVisits.forEach((visit, index) => {\n visitProcessor.processVisit(visit);\n visitProcessor.processVisitsData(visit);\n visitProcessor.processVisitNumber(visit, index + 1);\n });\n visitProcessor.processKcs(kcs);\n visitProcessor.processCbs(cbs);\n visitProcessor.processMultipleDataTypes();\n const mappingIdentifier = visitProcessor.processMappingIdentifier(currentVisit !== null && currentVisit !== void 0 ? currentVisit : previousVisits === null || previousVisits === void 0 ? void 0 : previousVisits[0]);\n const { visitorData, storageVisitorData, visitsData, experimentData } = visitProcessor.data;\n variationConfiguration.updateStoredVariations(visitorCode, experimentData);\n return {\n visitorData,\n storageVisitorData,\n visitsData,\n mappingIdentifier,\n };\n }\n static parseRegExp(value) {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n return new RegExp(expression, flags);\n }\n return new RegExp(value);\n }\n static parseSecret(secret) {\n if (secret === null) {\n return 'null';\n }\n const length = secret.length;\n if (length <= SECRET_VISIBLE_LENGTH) {\n return HIDDEN_SECRET_CHAR.repeat(length);\n }\n const hiddenLength = Math.max(length - SECRET_VISIBLE_LENGTH, SECRET_VISIBLE_LENGTH);\n return (secret.substring(0, length - hiddenLength) +\n HIDDEN_SECRET_CHAR.repeat(hiddenLength));\n }\n}\n\nvar _a;\nclass ClientSettings {\n constructor(siteCode, configuration) {\n KameleoonLogger.debug `CALL: new ClientSettings(siteCode: ${siteCode}, configuration: ${configuration})`;\n this.siteCode = siteCode;\n this.environment = this.getEnvironment(configuration);\n this.networkDomain = this.getNetworkDomain(configuration);\n this.updateInterval = this.getUpdateInterval(configuration);\n this.cleanupInterval = this.getCleanupInterval(configuration);\n this.requestTimeout = this.getRequestTimeout(configuration);\n this.trackingInterval = this.getTrackingInterval(configuration);\n this.trackRetryDelay = 5 * Milliseconds.Second;\n KameleoonLogger.debug `RETURN: new ClientSettings(siteCode: ${siteCode}, configuration: ${configuration})`;\n }\n getTrackingInterval(configuration) {\n const { MIN_TRACKING_INTERVAL_MS, MAX_TRACKING_INTERVAL_MS, DEFAULT_TRACKING_INTERVAL_MS, } = ClientSettings;\n if (typeof (configuration === null || configuration === void 0 ? void 0 : configuration.trackingInterval) === 'number') {\n if (configuration.trackingInterval < MIN_TRACKING_INTERVAL_MS) {\n KameleoonLogger.warning(`Tracking interval must not be shorter than ${MIN_TRACKING_INTERVAL_MS} ms. Minimum possible interval was applied.`);\n return MIN_TRACKING_INTERVAL_MS;\n }\n if (configuration.trackingInterval > MAX_TRACKING_INTERVAL_MS) {\n KameleoonLogger.warning(`Tracking interval must not be longer than ${MAX_TRACKING_INTERVAL_MS} ms. Maximum possible interval was applied.`);\n return MAX_TRACKING_INTERVAL_MS;\n }\n return configuration.trackingInterval;\n }\n return DEFAULT_TRACKING_INTERVAL_MS;\n }\n getEnvironment(configuration) {\n if (configuration === null || configuration === void 0 ? void 0 : configuration.environment) {\n return configuration.environment;\n }\n return Environment.Production;\n }\n getCleanupInterval(configuration) {\n if (typeof (configuration === null || configuration === void 0 ? void 0 : configuration.targetingDataCleanupInterval) === 'number') {\n if (configuration.targetingDataCleanupInterval < 1) {\n KameleoonLogger.warning('Targeting data cleanup interval must not be shorter than 1 minute. Minimum possible interval was applied.');\n return 1 * Milliseconds.Minute;\n }\n return configuration.targetingDataCleanupInterval * Milliseconds.Minute;\n }\n return null;\n }\n getUpdateInterval(configuration) {\n if (typeof (configuration === null || configuration === void 0 ? void 0 : configuration.updateInterval) === 'number') {\n if (configuration.updateInterval < 1) {\n KameleoonLogger.warning('Update interval must not be shorter than 1 minute. Minimum possible interval was applied.');\n return 1 * Milliseconds.Minute;\n }\n return configuration.updateInterval * Milliseconds.Minute;\n }\n return 60 * Milliseconds.Minute;\n }\n getNetworkDomain(configuration) {\n const result = Validator.validateNetworkDomain(configuration === null || configuration === void 0 ? void 0 : configuration.networkDomain);\n if (!result.ok) {\n return null;\n }\n return result.data;\n }\n getRequestTimeout(configuration) {\n if (typeof (configuration === null || configuration === void 0 ? void 0 : configuration.requestTimeout) === 'number') {\n return configuration.requestTimeout;\n }\n return 10 * Milliseconds.Second;\n }\n get settings() {\n return {\n trackingInterval: this.trackingInterval,\n trackRetryDelay: this.trackRetryDelay,\n cleanupInterval: this.cleanupInterval,\n updateInterval: this.updateInterval,\n requestTimeout: this.requestTimeout,\n networkDomain: this.networkDomain,\n environment: this.environment,\n siteCode: this.siteCode,\n };\n }\n}\n_a = ClientSettings;\nClientSettings.DEFAULT_TRACKING_INTERVAL_MS = 1000;\nClientSettings.MIN_TRACKING_INTERVAL_MS = _a.DEFAULT_TRACKING_INTERVAL_MS;\nClientSettings.MAX_TRACKING_INTERVAL_MS = 5000;\n\n/**\n * @class\n * Cookie - a class for creating an instance for defining user's cookie\n * */\nlet Cookie$1 = class Cookie {\n /**\n * @param {CookieType[]} cookie - a list of cookies\n * */\n constructor(cookie) {\n this.cookie = cookie;\n this.status = TrackingStatus.Sent;\n }\n /**\n * @method fromString - a static method for creating an instance of `Cookie` from a string\n * @param {string} cookieString - a string containing a list of cookies\n * @returns {Cookie} an instance of `Cookie`\n * */\n static fromString(cookieString) {\n if (!cookieString) {\n return new Cookie([]);\n }\n const pairs = cookieString.split(';');\n const cookie = pairs\n .map((item) => {\n const [key, value] = item.trim().split('=');\n if (!key) {\n KameleoonLogger.warning `Cookie string has an empty key: ${cookieString}`;\n return null;\n }\n return { key, value };\n })\n .filter((item) => item !== null);\n return new Cookie(cookie);\n }\n get url() {\n return '';\n }\n get data() {\n return {\n cookie: this.cookie,\n type: KameleoonData.Cookie,\n status: this.status,\n };\n }\n};\n\n/**\n * @class\n * UserAgent - a class for creating an instance for user agent\n * */\nclass UserAgent {\n constructor(value) {\n this.value = value;\n this.status = TrackingStatus.Sent;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n value: this.value,\n type: KameleoonData.UserAgent,\n status: this.status,\n };\n }\n}\n\nclass UniqueIdentifier {\n /**\n * @param {boolean} value - a boolean value that indicates if the visitor has a unique identifier\n * */\n constructor(value) {\n this._value = value;\n this.status = TrackingStatus.Sent;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n value: this._value,\n type: KameleoonData.UniqueIdentifier,\n status: TrackingStatus.Sent,\n };\n }\n /**\n * @private\n * @method _fromRaw - an internal method for creating a UniqueIdentifier instance from raw data\n * @param {IdentifierDataType} data - a raw data\n * @return {UniqueIdentifier} a UniqueIdentifier instance\n * */\n static _fromRaw(data) {\n return new UniqueIdentifier(data.value);\n }\n}\n\n/**\n * @class\n * ApplicationVersion - a class for creating an instance for app version\n * */\nlet ApplicationVersion$1 = class ApplicationVersion {\n /**\n * @param {string} version - version of mobile application\n * */\n constructor(version) {\n this.version = version;\n this.status = TrackingStatus.Sent;\n }\n get url() {\n return '';\n }\n get data() {\n return {\n version: this.version,\n type: KameleoonData.ApplicationVersion,\n status: this.status,\n };\n }\n};\n\nclass DataProcessor {\n constructor(cleanupInterval = null, packageInfo) {\n this.cleanupInterval = cleanupInterval;\n this.packageInfo = packageInfo;\n }\n mutUpdateData({ infoData, visitorCode, mutData, dataItem, extendTtl, }) {\n let { visitorReference, data, isReference } = this.dereferenceData(mutData, visitorCode);\n if (this.packageInfo.isServer &&\n isReference &&\n !mutData[visitorReference]) {\n if (infoData.mappingIdentifiers) {\n delete infoData.mappingIdentifiers[visitorCode];\n }\n delete mutData[visitorCode];\n visitorReference = visitorCode;\n }\n let expirationTime;\n if (extendTtl) {\n expirationTime = this.cleanupInterval\n ? Date.now() + this.cleanupInterval\n : 0;\n }\n switch (dataItem.data.type) {\n case KameleoonData.CustomData: {\n this.updateCustomData({\n expirationTime,\n customData: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.PageView: {\n this.updatePageView({\n expirationTime,\n pageView: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.Conversion: {\n this.updateConversion({\n expirationTime,\n conversion: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.VisitsData: {\n this.updateVisitsData({\n expirationTime,\n visitsData: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.Personalization: {\n this.updatePersonalization({\n expirationTime,\n personalization: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n case KameleoonData.TargetedSegment: {\n this.updateTargetedSegment({\n expirationTime,\n targetedSegment: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n break;\n }\n default: {\n this.updateCommonData({\n expirationTime,\n commonData: dataItem,\n visitorCode: visitorReference,\n mutData: data,\n });\n }\n }\n return expirationTime;\n }\n mutCleanupData(mutData, infoData) {\n var _a;\n if (!this.cleanupInterval) {\n return null;\n }\n let nextCleanupTime = 0;\n for (const [visitorCode, data] of Object.entries(mutData)) {\n if (typeof data === 'string') {\n this.removeReference({\n mutData,\n visitorCode,\n linkedVisitor: data,\n infoData,\n });\n continue;\n }\n let closestCleanupTime = 0;\n for (const key of Object.keys(data)) {\n const dataKey = key;\n let time;\n switch (dataKey) {\n case KameleoonData.CustomData:\n case KameleoonData.PageView:\n case KameleoonData.Conversion:\n case KameleoonData.Personalization: {\n time = this.deleteNestedExpiredField(data, dataKey);\n break;\n }\n default: {\n time = this.deleteExpiredField(data, dataKey);\n }\n }\n if (!closestCleanupTime || (time && time < closestCleanupTime)) {\n closestCleanupTime = time;\n }\n }\n if (!Object.keys(mutData[visitorCode]).length) {\n delete mutData[visitorCode];\n if (this.packageInfo.isServer) {\n (_a = infoData.mappingIdentifiers) !== null && _a !== void 0 ? _a : (infoData.mappingIdentifiers = {});\n delete infoData.mappingIdentifiers[visitorCode];\n }\n }\n else if (!nextCleanupTime ||\n (closestCleanupTime && closestCleanupTime < nextCleanupTime)) {\n nextCleanupTime = closestCleanupTime;\n }\n }\n return nextCleanupTime;\n }\n mutAddUnsentData({ mutData, visitorCode, dataType, }) {\n const unsentData = mutData.unsentData[visitorCode];\n if (!unsentData || !unsentData.length) {\n mutData.unsentData[visitorCode] = [dataType];\n }\n else {\n const set = new Set([...unsentData]);\n set.add(dataType);\n mutData.unsentData[visitorCode] = Array.from(set);\n }\n }\n createReference({ mutData, visitorCode, linkedVisitor, }) {\n // --- Note ---\n // Provided(linked) visitor is now pointing to the visitor code\n mutData[linkedVisitor] = visitorCode;\n }\n removeReference({ mutData, visitorCode, linkedVisitor, infoData, }) {\n if (this.packageInfo.isServer) {\n if (!mutData[linkedVisitor]) {\n delete mutData[visitorCode];\n if (infoData.mappingIdentifiers) {\n delete infoData.mappingIdentifiers[visitorCode];\n }\n }\n }\n }\n updatePageView({ visitorCode, mutData, pageView, expirationTime, }) {\n const { data } = pageView;\n const isExist = mutData[visitorCode] &&\n KameleoonData.PageView in mutData[visitorCode] &&\n data.urlAddress in mutData[visitorCode][KameleoonData.PageView];\n const parameters = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.PageView,\n nestedKey: data.urlAddress,\n value: data,\n };\n if (isExist) {\n const existingData = mutData[visitorCode][KameleoonData.PageView][data.urlAddress];\n const existingTimestamps = existingData.timestamps;\n // --- Note ---\n // Merging existing timestamps with added\n for (const existingTimestamp of existingTimestamps) {\n const { time: existingTime } = existingTimestamp;\n if (data.timestamps.some(({ time }) => time === existingTime)) {\n continue;\n }\n const index = data.timestamps.findIndex(({ time }) => time >= existingTime);\n if (index === -1) {\n data.timestamps.push(existingTimestamp);\n }\n else {\n data.timestamps.splice(index, 0, existingTimestamp);\n }\n }\n this.updateNestedField(parameters);\n }\n else {\n this.createNestedField(parameters);\n }\n }\n updateCustomData({ visitorCode, customData, mutData, expirationTime, }) {\n const { data } = customData;\n const isExist = mutData[visitorCode] && KameleoonData.CustomData in mutData[visitorCode];\n const parameters = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.CustomData,\n nestedKey: data.index.toString(),\n value: data,\n };\n if (isExist) {\n this.updateNestedField(parameters);\n }\n else {\n this.createNestedField(parameters);\n }\n }\n updateConversion({ conversion, mutData, visitorCode, expirationTime, }) {\n const { data } = conversion;\n const isExist = mutData[visitorCode] && KameleoonData.Conversion in mutData[visitorCode];\n const parameters = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.Conversion,\n nestedKey: data.id.toString(),\n value: data,\n };\n if (isExist) {\n this.updateNestedField(parameters);\n }\n else {\n this.createNestedField(parameters);\n }\n }\n updateVisitsData({ visitorCode, mutData, visitsData, expirationTime, }) {\n var _a, _b;\n const { data } = visitsData;\n const isExist = mutData[visitorCode] && KameleoonData.VisitsData in mutData[visitorCode];\n const parameters = {\n expirationTime,\n data: mutData,\n key: KameleoonData.VisitsData,\n value: data,\n visitorCode,\n };\n if (isExist) {\n const existingVisits = mutData[visitorCode][KameleoonData.VisitsData];\n // --- Note ---\n // We are preserving the order of visits\n existingVisits.visits.forEach((visit) => {\n ListUtilities.insertVisitInOrderedListMutably({\n list: data.visits,\n visit: visit,\n });\n });\n const visitNumber = Math.max((_a = data.visitNumber) !== null && _a !== void 0 ? _a : data.visits.length - 1, data.visits.length - 1, (_b = existingVisits.visitNumber) !== null && _b !== void 0 ? _b : 0);\n this.updateField(Object.assign(Object.assign({}, parameters), { value: Object.assign(Object.assign({}, data), { visits: data.visits, visitNumber: visitNumber }) }));\n }\n else {\n this.createField(parameters);\n }\n }\n updatePersonalization({ visitorCode, mutData, personalization, expirationTime, }) {\n const { data } = personalization;\n const isExist = mutData[visitorCode] &&\n KameleoonData.Personalization in mutData[visitorCode];\n const parameters = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.Personalization,\n nestedKey: data.id.toString(),\n value: data,\n };\n if (isExist) {\n this.updateNestedField(parameters);\n }\n else {\n this.createNestedField(parameters);\n }\n }\n updateTargetedSegment({ visitorCode, mutData, targetedSegment, expirationTime, }) {\n const { data } = targetedSegment;\n const isExist = mutData[visitorCode] &&\n KameleoonData.TargetedSegment in mutData[visitorCode];\n const parameters = {\n expirationTime,\n visitorCode,\n data: mutData,\n key: KameleoonData.TargetedSegment,\n nestedKey: data.id.toString(),\n value: data,\n };\n if (isExist) {\n this.updateNestedField(parameters);\n }\n else {\n this.createNestedField(parameters);\n }\n }\n updateCommonData({ visitorCode, mutData, commonData, expirationTime, }) {\n const { data } = commonData;\n const isExist = mutData[visitorCode] && data.type in mutData[visitorCode];\n const parameters = {\n expirationTime,\n data: mutData,\n key: data.type,\n visitorCode,\n value: data,\n };\n if (isExist) {\n this.updateField(parameters);\n }\n else {\n this.createField(parameters);\n }\n }\n dereferenceData(data, visitorCode) {\n // --- Note ---\n // Visitor reference can not point to another visitor reference\n if (typeof data[visitorCode] === 'string') {\n return {\n visitorReference: data[visitorCode],\n data: data,\n isReference: true,\n };\n }\n return {\n visitorReference: visitorCode,\n data: data,\n isReference: false,\n };\n }\n deleteExpiredField(data, key) {\n if (!data) {\n return 0;\n }\n const dataKey = key;\n const isExpired = data[dataKey].expirationTime < Date.now();\n if (!isExpired) {\n return data[dataKey].expirationTime;\n }\n delete data[dataKey];\n return 0;\n }\n deleteNestedExpiredField(data, key) {\n if (!data[key]) {\n return 0;\n }\n const existingData = data[key];\n let closestCleanupTime;\n for (const [nestedKey, value] of Object.entries(existingData)) {\n if (!value) {\n continue;\n }\n const isExpired = value.expirationTime < Date.now();\n if (isExpired) {\n delete existingData[nestedKey];\n }\n else if (!closestCleanupTime ||\n value.expirationTime < closestCleanupTime) {\n closestCleanupTime = value.expirationTime;\n }\n }\n if (!Object.keys(existingData).length) {\n delete data[key];\n }\n return closestCleanupTime;\n }\n updateField({ key, value, data, visitorCode, expirationTime, }) {\n var _a;\n const existing = data[visitorCode][key];\n data[visitorCode][key] = Object.assign(Object.assign({}, value), { expirationTime: (_a = expirationTime !== null && expirationTime !== void 0 ? expirationTime : (existing.expirationTime && existing.expirationTime)) !== null && _a !== void 0 ? _a : Date.now() });\n }\n createField({ key, value, data, visitorCode, expirationTime, }) {\n data[visitorCode] = Object.assign(Object.assign({}, data[visitorCode]), { [key]: Object.assign(Object.assign({}, value), { expirationTime }) });\n }\n updateNestedField({ key, nestedKey, value, data, visitorCode, expirationTime, }) {\n var _a;\n const existing = data[visitorCode][key][nestedKey];\n data[visitorCode][key][nestedKey] = Object.assign(Object.assign({}, value), { expirationTime: (_a = expirationTime !== null && expirationTime !== void 0 ? expirationTime : existing === null || existing === void 0 ? void 0 : existing.expirationTime) !== null && _a !== void 0 ? _a : Date.now() });\n }\n createNestedField({ key, nestedKey, value, data, visitorCode, expirationTime, }) {\n var _a;\n if (!((_a = data[visitorCode]) === null || _a === void 0 ? void 0 : _a[key])) {\n data[visitorCode] = Object.assign(Object.assign({}, data[visitorCode]), { [key]: {\n [nestedKey]: Object.assign(Object.assign({}, value), { expirationTime }),\n } });\n }\n else {\n data[visitorCode] = Object.assign(Object.assign({}, data[visitorCode]), { [key]: Object.assign(Object.assign({}, data[visitorCode][key]), { [nestedKey]: Object.assign(Object.assign({}, value), { expirationTime }) }) });\n }\n }\n}\n\n/**\n * @class\n * StaticData - a class for creating static data for Kameleoon.\n * */\nclass StaticData {\n constructor({ browserType, visitNumber, timeSincePreviousVisit, os, deviceType, browserVersion, }) {\n this.browserType = browserType;\n this.visitNumber = visitNumber;\n this.timeSincePreviousVisit = timeSincePreviousVisit;\n this.os = os;\n this.deviceType = deviceType;\n this.browserVersion = browserVersion;\n }\n get url() {\n const browserVersion = this.browserVersion\n ? UrlParameter.BrowserVersion + this.browserVersion\n : '';\n const browserType = this.browserType\n ? UrlParameter.Browser + this.browserType\n : '';\n const browserIndex = this.browserType\n ? UrlParameter.BrowserIndex + BrowserIndexMap[this.browserType]\n : '';\n const os = this.os ? UrlParameter.Os + this.os : '';\n const osIndex = this.os\n ? UrlParameter.OsIndex + OperatingSystemIndexMap[this.os]\n : '';\n const deviceType = this.deviceType\n ? UrlParameter.DeviceType + this.deviceType\n : '';\n const visitNumber = this.visitNumber !== undefined\n ? UrlParameter.VisitNumber + this.visitNumber\n : '';\n const timeSincePreviousVisit = this.timeSincePreviousVisit !== undefined\n ? UrlParameter.TimeSincePreviousVisit + this.timeSincePreviousVisit\n : '';\n return (UrlEventType.StaticData +\n browserType +\n browserIndex +\n browserVersion +\n visitNumber +\n timeSincePreviousVisit +\n os +\n osIndex +\n deviceType);\n }\n}\n\nclass ConditionFactoryInstance {\n static setConditionFactoryInstance(value) {\n this.conditionFactoryInstance = value;\n }\n static createCondition(data) {\n return this.conditionFactoryInstance.createCondition(data);\n }\n}\n\nclass Node {\n constructor(value, left, right) {\n var _a;\n this.inverseResult = false;\n if (this.isOperator(value)) {\n this.nodeValue = value;\n }\n else {\n const result = ConditionFactoryInstance.createCondition(value);\n this.inverseResult = !((_a = value.isInclude) !== null && _a !== void 0 ? _a : true);\n if (result.ok) {\n this.nodeValue = result.data;\n }\n else {\n this.nodeError = result.error;\n }\n }\n this.leftChild = left;\n this.rightChild = right;\n }\n get value() {\n return this.nodeValue;\n }\n get error() {\n return this.nodeError;\n }\n get left() {\n return this.leftChild;\n }\n get right() {\n return this.rightChild;\n }\n get inverse() {\n return this.inverseResult;\n }\n isOperator(value) {\n return value === Operator.And || value === Operator.Or;\n }\n}\n\nclass Tree {\n constructor(segment) {\n this.error = null;\n this.targetingTypes = new Set();\n KameleoonLogger.debug `CALL: new Tree(segment: ${segment})`;\n const { nestedConditions, topLevelOperators } = this.flattenSegment(segment);\n // --- Note ---\n // - Targeting tree is built bottom-up, it's the only way to both get the consistent logic\n // (grouping nested conditions) and have human readable tree representation.\n // - Here is an example of how tree is built (we use strict complete binary tree)\n // Let's say we have such a condition `value < 10 || value > 20 && value < 30`\n // Following is pseudo code for building tree:\n //\n // `const operators = [Operator.Or, Operator.And]`\n // `const conditions = [\n // {type: Condition.Less, value: 10},\n // {type: Condition.Greater, value: 20},\n // {type: Condition.Less, value: 30},\n // ]`\n //\n // After the first iteration we have node like this:\n // AND\n // / \\\n // <30 >20\n //\n // After the second iteration tree looks as follows:\n // OR\n // / \\\n // AND <10\n // / \\\n // <30 >20\n //\n // As you can see Leaf Nodes contain conditions and Non-Leaf Nodes contain logical operators\n const nestedNodes = nestedConditions.map(({ conditions, operators }) => {\n const nodes = conditions.map((condition) => {\n // --- Note ---\n // We keep condition types to optimize\n // some external operations depending on what conditions are present\n // in a tree\n this.targetingTypes.add(condition.targetingType);\n return new Node(condition);\n });\n return this.buildTree(nodes, operators);\n });\n this.tree = this.buildTree(nestedNodes, topLevelOperators);\n KameleoonLogger.debug `RETURN: new Tree(segment: ${segment})`;\n }\n evaluate(data) {\n const result = this.evaluateNode(this.tree, data);\n if (this.error) {\n return buildExports.Err(this.error);\n }\n return buildExports.Ok(result);\n }\n hasTargetingType(targetingType) {\n return this.targetingTypes.has(targetingType);\n }\n evaluateNode(node, data) {\n if (this.isLeafNode(node)) {\n if (node.error) {\n // --- Note ---\n // Non-existing condition should not break targeting tree\n // instead it should be treated as `true` condition\n if (node.error.type === KameleoonException.TargetingCondition) {\n return true;\n }\n return false;\n }\n const result = node.value.evaluate(data);\n if (!result.ok) {\n this.error = result.error;\n return false;\n }\n return node.inverse ? !result.data : result.data;\n }\n if (this.isNonLeafNode(node)) {\n switch (node.value) {\n case Operator.And: {\n return (this.evaluateNode(node.left, data) &&\n this.evaluateNode(node.right, data));\n }\n case Operator.Or: {\n return (this.evaluateNode(node.left, data) ||\n this.evaluateNode(node.right, data));\n }\n }\n }\n return false;\n }\n isLeafNode(node) {\n return !Boolean(node.left && node.right);\n }\n isNonLeafNode(node) {\n return Boolean(node.left &&\n node.right &&\n (node.value === Operator.Or || node.value === Operator.And));\n }\n // --- Note ---\n // This method mutates `nodes` array\n // It's done for the sake of performance\n buildTree(nodes, operators) {\n if (nodes.length === 1) {\n return nodes[0];\n }\n for (const operator of operators) {\n const left = nodes.shift();\n const right = nodes.shift();\n const newNode = new Node(operator, left, right);\n nodes.unshift(newNode);\n }\n return nodes[0];\n }\n flattenSegment(segment) {\n const { firstLevel: conditions, firstLevelOrOperators: operators } = segment.conditionsData;\n const nestedConditions = [];\n conditions.forEach((condition) => {\n const { conditions: conditionList, orOperators } = condition;\n const group = {\n operators: this.convertOperators(orOperators),\n conditions: conditionList,\n };\n nestedConditions.push(group);\n });\n return {\n topLevelOperators: this.convertOperators(operators),\n nestedConditions,\n };\n }\n convertOperators(operators) {\n return operators.map((operator) => (operator ? Operator.Or : Operator.And));\n }\n}\n\nclass Device {\n constructor({ device }) {\n this.device = device;\n }\n evaluate({ targetingData, }) {\n const deviceData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.Device];\n if (deviceData) {\n const { device } = deviceData;\n return buildExports.Ok(device === this.device);\n }\n return buildExports.Ok(false);\n }\n}\n\nclass Browser {\n constructor({ browser, version, versionMatchType }) {\n this.browser = browser;\n this.version = version;\n this.versionMatchType = versionMatchType;\n }\n evaluate({ targetingData, }) {\n const browserData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.Browser];\n if (browserData) {\n const result = this.checkCondition(browserData);\n if (this.error) {\n return buildExports.Err(this.error);\n }\n return buildExports.Ok(result);\n }\n return buildExports.Ok(false);\n }\n checkCondition(browserData) {\n const { browser, version } = browserData;\n if (typeof this.browser !== 'string') {\n return false;\n }\n if (!this.version) {\n return browser === this.browser;\n }\n if (!this.versionMatchType || typeof version !== 'number') {\n return false;\n }\n const parsedVersion = parseFloat(this.version);\n if (isNaN(parsedVersion)) {\n KameleoonLogger.error `Failed to parse version: ${this.version} in Browser condition`;\n this.error = new KameleoonError(KameleoonException.VersionParse, this.version);\n }\n switch (this.versionMatchType) {\n case VersionMatchType.EQUAL:\n return browser === this.browser && version === parsedVersion;\n case VersionMatchType.GREATER:\n return browser === this.browser && version > parsedVersion;\n case VersionMatchType.LOWER:\n return browser === this.browser && version < parsedVersion;\n default:\n KameleoonLogger.error `Unexpected comparing operation for Browser condition: ${this.versionMatchType}`;\n exhaustCheck(this.versionMatchType);\n }\n }\n}\n\nclass Conversion {\n constructor({ goalId }) {\n this.conditionValue = goalId;\n }\n evaluate({ targetingData, }) {\n const conversionData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.Conversion];\n if (!this.conditionValue) {\n return buildExports.Ok(false);\n }\n if (conversionData) {\n if (Object.keys(conversionData).length && this.conditionValue === -1) {\n return buildExports.Ok(true);\n }\n const conversions = Object.values(conversionData);\n return buildExports.Ok(conversions.some((conversion) => {\n if (!conversion) {\n return false;\n }\n return conversion.goalId === this.conditionValue;\n }));\n }\n return buildExports.Ok(false);\n }\n}\n\nclass CustomData {\n constructor({ customDataIndex, valueMatchType, value, range, }) {\n this.customDataIndex = customDataIndex ? Number(customDataIndex) : -1;\n this.matchType = valueMatchType;\n this.conditionValue = value;\n this.range = range;\n }\n evaluate({ targetingData, }) {\n var _a;\n const customData = (_a = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.CustomData]) === null || _a === void 0 ? void 0 : _a[this.customDataIndex];\n if (this.matchType === ValueMatchType.UNDEFINED) {\n return buildExports.Ok(!customData);\n }\n if (customData) {\n const { value: customDataValue } = customData;\n const result = this.checkCondition(customDataValue);\n if (this.error) {\n return buildExports.Err(this.error);\n }\n return buildExports.Ok(result);\n }\n return buildExports.Ok(false);\n }\n checkCondition(customDataValue) {\n if (typeof this.conditionValue !== 'string' &&\n this.matchType !== ValueMatchType.TRUE &&\n this.matchType !== ValueMatchType.FALSE &&\n this.matchType !== ValueMatchType.RANGE) {\n KameleoonLogger.error `Unexpected condition value for CustomData condition: ${this.conditionValue}`;\n return false;\n }\n // --- Note ---\n // `TRUE`/`FALSE`/`RANGE` do not use condition value\n // so we can safely assume that `this.conditionValue` is a string at this point\n // for other match types\n const conditionValue = this.conditionValue;\n // --- Note ---\n // `AMONG_VALUES` and `RANGE` are checked separately to avoid recursion overhead\n // for `JSON.parse` inside `this.parseArray`\n if (this.matchType === ValueMatchType.AMONG_VALUES) {\n const result = this.parseArray(conditionValue);\n if (!result.ok) {\n this.error = result.error;\n return false;\n }\n const resultData = new Set(result.data);\n return Array.isArray(customDataValue)\n ? customDataValue.some((value) => resultData.has(value))\n : result.data.includes(customDataValue);\n }\n if (this.matchType === ValueMatchType.RANGE) {\n const result = this.parseRange(this.range);\n if (!result.ok) {\n this.error = result.error;\n return false;\n }\n const [lowerBound, upperBound] = result.data;\n const isInRange = (value) => value >= lowerBound && value <= upperBound;\n return Array.isArray(customDataValue)\n ? customDataValue.some((value) => isInRange(Number(value)))\n : isInRange(Number(customDataValue));\n }\n if (Array.isArray(customDataValue)) {\n return customDataValue.some((value) => this.checkCondition(value));\n }\n switch (this.matchType) {\n case ValueMatchType.CONTAINS:\n return customDataValue.includes(conditionValue);\n case ValueMatchType.EXACT:\n return customDataValue === this.conditionValue;\n case ValueMatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(conditionValue).test(customDataValue);\n case ValueMatchType.LOWER:\n return Number(customDataValue) < Number(this.conditionValue);\n case ValueMatchType.EQUAL:\n return Number(customDataValue) === Number(this.conditionValue);\n case ValueMatchType.GREATER:\n return Number(customDataValue) > Number(this.conditionValue);\n case ValueMatchType.TRUE:\n return customDataValue.toLowerCase() === 'true';\n case ValueMatchType.FALSE:\n return customDataValue.toLowerCase() === 'false';\n default:\n KameleoonLogger.error `Unexpected comparing operation for CustomData condition: ${this.matchType}`;\n return false;\n }\n }\n parseArray(value) {\n try {\n const result = JSON.parse(value);\n if (Array.isArray(result)) {\n return buildExports.Ok(result);\n }\n }\n catch (err) {\n KameleoonLogger.error `Failed to parse array: ${value} in CustomData condition`;\n return buildExports.Err(new KameleoonError(KameleoonException.AmongValuesCheck, err, value));\n }\n return buildExports.Ok([]);\n }\n parseRange(array) {\n if (!array || array.length !== 2) {\n KameleoonLogger.error `Failed to parse range: ${array} in CustomData condition`;\n return buildExports.Err(new KameleoonError(KameleoonException.RangeCheck, array));\n }\n return buildExports.Ok(array);\n }\n}\n\nclass PageUtils {\n static getLatest(pageViewData) {\n return Object.values(pageViewData).reduce((latest, current) => latest.timestamps[latest.timestamps.length - 1].time >\n current.timestamps[current.timestamps.length - 1].time\n ? latest\n : current);\n }\n}\n\nclass PageTitle {\n constructor({ matchType, title }) {\n this.matchType = matchType;\n this.conditionValue = title;\n }\n evaluate({ targetingData, }) {\n const pageViewData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.PageView];\n if (!pageViewData) {\n return buildExports.Ok(false);\n }\n const latestPageView = PageUtils.getLatest(pageViewData);\n return buildExports.Ok(this.checkCondition(latestPageView.title));\n }\n checkCondition(title) {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return title.includes(this.conditionValue);\n case MatchType.EXACT:\n return title === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(title);\n default:\n KameleoonLogger.error `Unexpected comparing operation for PageTitle condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass PageUrl {\n constructor({ matchType, url }) {\n this.matchType = matchType;\n this.conditionValue = url;\n }\n evaluate({ targetingData, }) {\n const pageViewData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.PageView];\n if (!pageViewData) {\n return buildExports.Ok(false);\n }\n const latestPageView = PageUtils.getLatest(pageViewData);\n return buildExports.Ok(this.checkCondition(latestPageView.urlAddress));\n }\n checkCondition(url) {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return url.includes(this.conditionValue);\n case MatchType.EXACT:\n return url === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(url);\n default:\n KameleoonLogger.error `Unexpected comparing operation for PageUrl condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass SdkLanguage {\n constructor({ sdkLanguage, version, versionMatchType }) {\n this.sdkLanguage = sdkLanguage;\n this.conditionValue = version;\n this.versionMatchType = versionMatchType;\n }\n evaluate({ sdkInfo, }) {\n return this.checkCondition(sdkInfo);\n }\n checkCondition(sdkInfo) {\n const { type: sdkType, version } = sdkInfo;\n if (!this.sdkLanguage) {\n return buildExports.Ok(false);\n }\n if (typeof this.conditionValue !== 'string') {\n return buildExports.Ok(sdkType === this.sdkLanguage);\n }\n if (!this.versionMatchType) {\n return buildExports.Ok(false);\n }\n if (sdkType !== this.sdkLanguage) {\n return buildExports.Ok(false);\n }\n const result = Utilities.compareSemVer({\n version,\n compareVersion: this.conditionValue,\n operator: this.versionMatchType,\n });\n if (!result.ok) {\n return buildExports.Err(result.error);\n }\n return buildExports.Ok(result.data);\n }\n}\n\nclass VisitorCode {\n constructor({ visitorCode, matchType }) {\n this.matchType = matchType;\n this.conditionValue = visitorCode;\n }\n evaluate({ visitorCode, }) {\n return buildExports.Ok(this.checkCondition(visitorCode));\n }\n checkCondition(visitorCode) {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return visitorCode.includes(this.conditionValue);\n case MatchType.EXACT:\n return visitorCode === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(visitorCode);\n default:\n KameleoonLogger.error `Unexpected comparing operation for VisitorCode condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass Cookie {\n constructor({ name, value, nameMatchType, valueMatchType, }) {\n this.cookie = {\n key: name !== null && name !== void 0 ? name : undefined,\n value: value !== null && value !== void 0 ? value : undefined,\n };\n this.keyMatchType = nameMatchType;\n this.valueMatchType = valueMatchType;\n }\n evaluate({ targetingData, }) {\n var _a;\n const isEmptyCookie = !this.cookie.key && !this.cookie.value;\n const isValidMatchType = Boolean(this.valueMatchType) && Boolean(this.keyMatchType);\n if (isEmptyCookie || !isValidMatchType) {\n return buildExports.Ok(false);\n }\n const extractedCookie = this.extractCookie();\n const cookieData = ((_a = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.Cookie]) === null || _a === void 0 ? void 0 : _a.cookie) || [];\n return buildExports.Ok(extractedCookie.some((pair) => this.checkCondition(pair)) ||\n cookieData.some((pair) => this.checkCondition(pair)));\n }\n extractCookie() {\n if (typeof document !== 'undefined' && document.cookie) {\n return Cookie$1.fromString(document.cookie).data.cookie;\n }\n return [];\n }\n checkCondition(dataCookie) {\n const cookieMatchType = this.keyMatchType;\n const { key, value } = dataCookie;\n if (cookieMatchType === NameMatchType.OPTIONAL) {\n const conditionCookie = this.cookie;\n return this.isOptionalCookie(conditionCookie)\n ? this.compareCookieValue(value, conditionCookie.value)\n : false;\n }\n const { key: compareKey, value: compareValue } = this.cookie;\n let keyMatch;\n switch (cookieMatchType) {\n case NameMatchType.EXACT:\n keyMatch = key === compareKey;\n break;\n case NameMatchType.CONTAINS:\n keyMatch = key.includes(compareKey);\n break;\n case NameMatchType.REGULAR_EXPRESSION:\n keyMatch = Parser.parseRegExp(compareKey).test(key);\n break;\n default:\n KameleoonLogger.error `Unexpected comparing operation for Cookie condition: ${cookieMatchType}`;\n exhaustCheck(cookieMatchType);\n }\n return keyMatch && this.compareCookieValue(value, compareValue);\n }\n compareCookieValue(value, compareValue) {\n const valueMatchType = this.valueMatchType;\n switch (valueMatchType) {\n case ValueMatchType.EXACT:\n return value === compareValue;\n case ValueMatchType.CONTAINS:\n return value.includes(compareValue);\n case ValueMatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(compareValue).test(value);\n default:\n KameleoonLogger.error `Unexpected comparing operation for Cookie condition: ${valueMatchType}`;\n return false;\n }\n }\n isOptionalCookie(cookie) {\n const { value } = cookie;\n return typeof value !== 'undefined';\n }\n}\n\nclass OperatingSystem {\n constructor({ os }) {\n this.operatingSystem = os;\n }\n evaluate({ targetingData, }) {\n const operatingSystemData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.OperatingSystem];\n if (operatingSystemData) {\n const { operatingSystem } = operatingSystemData;\n return buildExports.Ok(operatingSystem === this.operatingSystem);\n }\n return buildExports.Ok(false);\n }\n}\n\n// --- Note ---\n// `GeolocationCondition` uses `Condition` in the naming to avoid confusion with\n// native `Geolocation` API\nclass GeolocationCondition {\n constructor({ country, region, city }) {\n this.country = country;\n this.region = region;\n this.city = city;\n }\n evaluate({ targetingData, }) {\n const geolocationData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.GeolocationData];\n if (geolocationData) {\n const { country: dataCountry, region: dataRegion, city: dataCity, } = geolocationData;\n const [conditionCountry, conditionRegion, conditionCity] = [\n this.country,\n this.region,\n this.city,\n ];\n if (!conditionCountry || !dataCountry) {\n return buildExports.Ok(false);\n }\n const result = dataCountry.toLowerCase() === conditionCountry.toLowerCase() &&\n (!conditionRegion ||\n (dataRegion === null || dataRegion === void 0 ? void 0 : dataRegion.toLowerCase()) === conditionRegion.toLowerCase()) &&\n (!conditionCity ||\n (dataCity === null || dataCity === void 0 ? void 0 : dataCity.toLowerCase()) === conditionCity.toLowerCase());\n return buildExports.Ok(result);\n }\n return buildExports.Ok(false);\n }\n}\n\nclass Segment {\n constructor({ segmentId }) {\n this.segmentId = segmentId;\n }\n evaluate(evaluationData) {\n const { segments, trees } = evaluationData;\n if (!this.segmentId) {\n return buildExports.Ok(false);\n }\n const segment = segments === null || segments === void 0 ? void 0 : segments.get(this.segmentId.toString());\n if (!segment) {\n return buildExports.Ok(false);\n }\n const tree = trees === null || trees === void 0 ? void 0 : trees.get(this.segmentId.toString());\n if (tree) {\n return tree.evaluate(evaluationData);\n }\n return new Tree(segment).evaluate(evaluationData);\n }\n}\n\nclass TargetFeatureFlag {\n constructor({ featureFlagId, variationKey, ruleId }) {\n this.featureId = featureFlagId;\n this.ruleId = ruleId;\n this.variationKey = variationKey;\n }\n evaluate({ variationData, ruleMap, }) {\n var _a, _b, _c, _d;\n if (!this.featureId || !ruleMap) {\n return buildExports.Ok(false);\n }\n // -- Visitor took part in any experiment of the feature flag\n // with any variation\n if (this.featureId && !this.ruleId && !this.variationKey) {\n for (const [_, rule] of ruleMap) {\n const { featureId, experimentId } = rule;\n if (featureId === this.featureId &&\n typeof ((_a = variationData[experimentId]) === null || _a === void 0 ? void 0 : _a.variationId) === 'number') {\n return buildExports.Ok(true);\n }\n }\n return buildExports.Ok(false);\n }\n // -- Visitor took part in certain experiment of the feature flag\n // with any/exact variation\n if (this.featureId && this.ruleId) {\n const rule = ruleMap.get(this.ruleId);\n if (!rule) {\n return buildExports.Ok(false);\n }\n const { experimentId, variations } = rule;\n if (this.variationKey) {\n const variationId = variations.get(this.variationKey);\n return buildExports.Ok(Boolean(variationId) &&\n ((_b = variationData[experimentId]) === null || _b === void 0 ? void 0 : _b.variationId) === variationId);\n }\n return buildExports.Ok(Boolean((_c = variationData[rule.experimentId]) === null || _c === void 0 ? void 0 : _c.variationId));\n }\n // -- Visitor took part in any experiment of the feature flag\n // with certain variation\n if (this.featureId && !this.ruleId && this.variationKey) {\n for (const [_, rule] of ruleMap) {\n const { featureId, experimentId, variations } = rule;\n if (featureId === this.featureId && variations.has(this.variationKey)) {\n const variationId = variations.get(this.variationKey);\n return buildExports.Ok(Boolean(variationId) &&\n ((_d = variationData[experimentId]) === null || _d === void 0 ? void 0 : _d.variationId) === variationId);\n }\n }\n }\n return buildExports.Ok(false);\n }\n}\n\nclass PreviousPage {\n constructor({ matchType, url }) {\n this.conditionValue = url;\n this.matchType = matchType;\n }\n evaluate({ targetingData, }) {\n const pageViewsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.PageView];\n if (!pageViewsData) {\n return buildExports.Ok(false);\n }\n // --- Note ---\n // There is more concise way to find previous latest page, but it's less performant,\n // here we only ever check two latest timestamps of page and use one loop\n // The second latest can't be equal to the latest\n const secondLatestPageView = this.getSecondLatestPageView(Object.values(pageViewsData));\n if (!secondLatestPageView) {\n return buildExports.Ok(false);\n }\n const url = secondLatestPageView.urlAddress;\n return buildExports.Ok(this.checkCondition(url));\n }\n checkCondition(url) {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return url.includes(this.conditionValue);\n case MatchType.EXACT:\n return url === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Parser.parseRegExp(this.conditionValue).test(url);\n default:\n KameleoonLogger.error `Unexpected comparing operation for PreviousPage condition: ${this.matchType}`;\n return false;\n }\n }\n getSecondLatestPageView(pageViewsData) {\n if (pageViewsData.length < 2) {\n return undefined;\n }\n // --- Note ---\n // Arguments and variables named with abbreviations for better readability\n // `second` in this context is `second to latest`\n let latestPV;\n let secondPV;\n pageViewsData.forEach((currentPV) => {\n const currentLatestTs = currentPV.timestamps[currentPV.timestamps.length - 1].time;\n // -- Initial check\n if (!latestPV) {\n latestPV = currentPV;\n return;\n }\n const latestTs = latestPV.timestamps[latestPV.timestamps.length - 1].time;\n // -- Covering a case where latest needs to be updated\n if (currentLatestTs > latestTs) {\n secondPV = latestPV;\n latestPV = currentPV;\n return;\n }\n // -- Covering a case where only second needs to be updated\n const secondTs = secondPV\n ? secondPV.timestamps[secondPV.timestamps.length - 1].time\n : 0;\n // -- Second may need to be updated\n if (currentLatestTs > secondTs) {\n secondPV = currentPV;\n }\n });\n return secondPV;\n }\n}\n\nclass VisitedPages {\n constructor({ matchType, pageCount }) {\n this.matchType = matchType;\n this.conditionValue = pageCount;\n }\n evaluate({ targetingData, }) {\n const pageViewsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.PageView];\n if (!pageViewsData) {\n return buildExports.Ok(false);\n }\n let pagesAmount = 0;\n Object.values(pageViewsData).forEach((pageView) => {\n pagesAmount += pageView.timestamps.length;\n });\n return buildExports.Ok(this.checkCondition(pagesAmount));\n }\n checkCondition(pagesAmount) {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n switch (this.matchType) {\n case MatchType.EQUAL:\n return pagesAmount === this.conditionValue;\n case MatchType.GREATER:\n return pagesAmount > this.conditionValue;\n case MatchType.LOWER:\n return pagesAmount < this.conditionValue;\n default:\n KameleoonLogger.error `Unexpected comparing operation for VisitedPages condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass FirstVisit {\n constructor({ matchType, count, unitOfTime }) {\n this.matchType = matchType;\n this.conditionValue = count;\n this.timeUnit = unitOfTime;\n }\n evaluate({ targetingData, sdkInfo, }) {\n const visitsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.VisitsData];\n if (sdkInfo.isServer\n ? !(visitsData === null || visitsData === void 0 ? void 0 : visitsData.visits.length)\n : !(visitsData === null || visitsData === void 0 ? void 0 : visitsData.visits) || visitsData.visits.length < 2) {\n return buildExports.Ok(false);\n }\n const firstVisit = visitsData.visits[0];\n return buildExports.Ok(this.checkCondition(typeof firstVisit === 'number' ? firstVisit : firstVisit.timeStarted));\n }\n checkCondition(firstVisitTimestamp) {\n if (!this.matchType ||\n typeof this.conditionValue !== 'number' ||\n !this.timeUnit) {\n return false;\n }\n const elapsedTimeMilliseconds = Date.now() - firstVisitTimestamp;\n const elapsedTimeUnit = Utilities.convertTimeUnit(elapsedTimeMilliseconds, this.timeUnit);\n switch (this.matchType) {\n case MatchType.GREATER:\n return elapsedTimeUnit > this.conditionValue;\n case MatchType.LOWER:\n return elapsedTimeUnit < this.conditionValue;\n default:\n KameleoonLogger.error `Unexpected comparing operation for FirstVisit condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass LastVisit {\n constructor({ matchType, count, unitOfTime }) {\n this.matchType = matchType;\n this.conditionValue = count;\n this.timeUnit = unitOfTime;\n }\n evaluate({ targetingData, sdkInfo, }) {\n const visitsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.VisitsData];\n if (sdkInfo.isServer\n ? !(visitsData === null || visitsData === void 0 ? void 0 : visitsData.visits.length)\n : !(visitsData === null || visitsData === void 0 ? void 0 : visitsData.visits) || visitsData.visits.length < 2) {\n return buildExports.Ok(false);\n }\n const visits = visitsData.visits;\n // --- Note ---\n // Takes the timestamp of latest previous visit\n const indexLastVisit = sdkInfo.isServer\n ? visits.length - 1\n : visits.length - 2;\n const latestPreviousVisit = visits[indexLastVisit];\n return buildExports.Ok(this.checkCondition(typeof latestPreviousVisit === 'number'\n ? latestPreviousVisit\n : latestPreviousVisit.timeStarted));\n }\n checkCondition(lastVisitTimestamp) {\n if (!this.matchType ||\n typeof this.conditionValue !== 'number' ||\n !this.timeUnit) {\n return false;\n }\n const elapsedTimeMilliseconds = Date.now() - lastVisitTimestamp;\n const elapsedTimeUnit = Utilities.convertTimeUnit(elapsedTimeMilliseconds, this.timeUnit);\n switch (this.matchType) {\n case MatchType.GREATER:\n return elapsedTimeUnit > this.conditionValue;\n case MatchType.LOWER:\n return elapsedTimeUnit < this.conditionValue;\n default:\n KameleoonLogger.error `Unexpected comparing operation for LastVisit condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass SameDayVisits {\n constructor({ matchType, visitCount }) {\n this.matchType = matchType;\n this.conditionValue = visitCount;\n }\n evaluate({ targetingData, sdkInfo, }) {\n const visitsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.VisitsData];\n if (!visitsData) {\n return buildExports.Ok(false);\n }\n let todayVisits = 0;\n const todayTimestamp = new Date().setHours(0, 0, 0, 0);\n const { visits } = visitsData;\n visits.forEach((item) => {\n let timeStarted;\n if (typeof item === 'number') {\n timeStarted = item;\n }\n else {\n timeStarted = item.timeStarted;\n }\n if (timeStarted >= todayTimestamp) {\n todayVisits++;\n }\n });\n if (sdkInfo.isServer) {\n // --- Note ---\n // +1 is current visit\n todayVisits += 1;\n }\n return buildExports.Ok(this.checkCondition(todayVisits));\n }\n checkCondition(todayVisitsAmount) {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n switch (this.matchType) {\n case MatchType.EQUAL:\n return todayVisitsAmount === this.conditionValue;\n case MatchType.GREATER:\n return todayVisitsAmount > this.conditionValue;\n case MatchType.LOWER:\n return todayVisitsAmount < this.conditionValue;\n default:\n KameleoonLogger.error `Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass Visits {\n constructor({ matchType, visitCount }) {\n this.matchType = matchType;\n this.conditionValue = visitCount;\n }\n evaluate({ targetingData, sdkInfo, }) {\n const visitsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.VisitsData];\n if (!visitsData) {\n return buildExports.Ok(false);\n }\n // --- Note ---\n // +1 is current visit for server sdk\n const visits = visitsData.visits.length + (sdkInfo.isServer ? 1 : 0);\n return buildExports.Ok(this.checkCondition(visits));\n }\n checkCondition(visitsAmount) {\n if (!this.matchType || typeof this.conditionValue !== 'number') {\n return false;\n }\n switch (this.matchType) {\n case MatchType.EQUAL:\n return visitsAmount === this.conditionValue;\n case MatchType.GREATER:\n return visitsAmount > this.conditionValue;\n case MatchType.LOWER:\n return visitsAmount < this.conditionValue;\n default:\n KameleoonLogger.error `Unexpected comparing operation for Visits condition: ${this.matchType}`;\n return false;\n }\n }\n}\n\nclass NewVisitor {\n constructor({ visitorType }) {\n this.visitorType = visitorType;\n }\n evaluate({ targetingData, sdkInfo, }) {\n const visitsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.VisitsData];\n if (!visitsData || !this.visitorType) {\n return buildExports.Ok(false);\n }\n const { visits } = visitsData;\n // --- Note ---\n // Second case handles situation when user didn't use `addData` that\n // creates new current visit\n const isNewVisitor = sdkInfo.isServer\n ? !visits.length\n : visits.length <= 1;\n switch (this.visitorType) {\n case VisitorType.NEW:\n return buildExports.Ok(isNewVisitor);\n case VisitorType.RETURNING:\n return buildExports.Ok(!isNewVisitor);\n default:\n KameleoonLogger.error `Unexpected visitor type for NewVisitor condition: ${this.visitorType}`;\n exhaustCheck(this.visitorType);\n }\n }\n}\n\nclass ApplicationVersion {\n constructor({ version, versionMatchType }) {\n this.conditionValue = version;\n this.versionMatchType = versionMatchType;\n }\n evaluate({ targetingData, }) {\n var _a;\n const version = (_a = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.ApplicationVersion]) === null || _a === void 0 ? void 0 : _a.version;\n if (!version || !this.conditionValue || !this.versionMatchType) {\n return buildExports.Ok(false);\n }\n const result = Utilities.compareSemVer({\n version,\n compareVersion: this.conditionValue,\n operator: this.versionMatchType,\n });\n if (!result.ok) {\n return buildExports.Err(result.error);\n }\n return buildExports.Ok(result.data);\n }\n}\n\nclass ConversionLikelihood {\n constructor({ lowerBound, upperBound, keyMomentId, goalId, }) {\n this.lowerBound = lowerBound;\n this.upperBound = upperBound;\n this.keyMomentId = keyMomentId;\n this.goalId = goalId;\n }\n evaluate({ targetingData, }) {\n var _a;\n const kcsData = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.KameleoonConversionScore];\n if (typeof this.keyMomentId !== 'number' ||\n typeof this.goalId !== 'number' ||\n typeof this.lowerBound !== 'number' ||\n typeof this.upperBound !== 'number' ||\n !kcsData) {\n return buildExports.Ok(false);\n }\n const score = (_a = kcsData.kcs[this.keyMomentId.toString()]) === null || _a === void 0 ? void 0 : _a[this.goalId.toString()];\n if (typeof score !== 'number') {\n return buildExports.Ok(false);\n }\n return buildExports.Ok(score >= this.lowerBound && score <= this.upperBound);\n }\n}\n\nclass ExclusiveExperimentCondition {\n constructor({ campaignType }) {\n this.campaignType = campaignType;\n }\n evaluate(data) {\n return buildExports.Ok(this.checkCondition(data));\n }\n checkCondition(data) {\n var _a;\n const variations = Object.values(data.variationData);\n const personalizations = Object.values(((_a = data.targetingData) === null || _a === void 0 ? void 0 : _a.personalization) || {});\n const hasSingleValidVariation = variations.length === 1 &&\n data.experimentId !== null &&\n data.variationData[data.experimentId] !== undefined;\n const hasNoVariations = variations.length === 0;\n const hasNoPersonalizations = personalizations.length === 0;\n switch (this.campaignType) {\n case CampaignType.Experiment:\n return hasNoVariations || hasSingleValidVariation;\n case CampaignType.Personalization:\n return hasNoPersonalizations;\n case CampaignType.Any:\n return hasNoPersonalizations && (hasNoVariations || hasSingleValidVariation);\n default:\n return false;\n }\n }\n}\n\nclass TargetExperimentCondition {\n constructor({ variationMatchType, variation, experiment, }) {\n this.variationMatchType = variationMatchType;\n this.variationId = variation || -1;\n this.experimentId = experiment || -1;\n }\n evaluate(data) {\n return buildExports.Ok(this.checkCondition(data));\n }\n checkCondition(data) {\n const variation = data.variationData[this.experimentId];\n if (!variation) {\n return false;\n }\n switch (this.variationMatchType) {\n case MatchTypeVariation.ANY:\n return true;\n case MatchTypeVariation.EXACT:\n return variation.variationId === this.variationId;\n default:\n return false;\n }\n }\n}\n\nclass TargetPersonalizationCondition {\n constructor({ personalizationId }) {\n this.personalizationId = personalizationId;\n }\n evaluate(data) {\n if (!data.targetingData) {\n return buildExports.Ok(false);\n }\n return buildExports.Ok(this.checkCondition(data));\n }\n checkCondition(data) {\n var _a;\n if (!this.personalizationId) {\n return false;\n }\n const personalizationData = (_a = data.targetingData) === null || _a === void 0 ? void 0 : _a[KameleoonData.Personalization];\n return (personalizationData === null || personalizationData === void 0 ? void 0 : personalizationData[this.personalizationId]) !== undefined;\n }\n}\n\nclass ConditionFactory {\n createCondition(data) {\n const { targetingType } = data;\n switch (targetingType) {\n case TargetingType.CUSTOM_DATUM:\n return buildExports.Ok(new CustomData(data));\n case TargetingType.EXCLUSIVE_EXPERIMENT:\n return buildExports.Ok(new ExclusiveExperimentCondition(data));\n case TargetingType.TARGET_EXPERIMENT:\n return buildExports.Ok(new TargetExperimentCondition(data));\n case TargetingType.TARGET_FEATURE_FLAG:\n return buildExports.Ok(new TargetFeatureFlag(data));\n case TargetingType.TARGET_PERSONALIZATION:\n return buildExports.Ok(new TargetPersonalizationCondition(data));\n case TargetingType.DEVICE_TYPE:\n return buildExports.Ok(new Device(data));\n case TargetingType.BROWSER:\n return buildExports.Ok(new Browser(data));\n case TargetingType.PAGE_URL:\n return buildExports.Ok(new PageUrl(data));\n case TargetingType.PAGE_TITLE:\n return buildExports.Ok(new PageTitle(data));\n case TargetingType.CONVERSIONS:\n return buildExports.Ok(new Conversion(data));\n case TargetingType.VISITOR_CODE:\n return buildExports.Ok(new VisitorCode(data));\n case TargetingType.SDK_LANGUAGE:\n return buildExports.Ok(new SdkLanguage(data));\n case TargetingType.COOKIE:\n return buildExports.Ok(new Cookie(data));\n case TargetingType.OPERATING_SYSTEM:\n return buildExports.Ok(new OperatingSystem(data));\n case TargetingType.GEOLOCATION:\n return buildExports.Ok(new GeolocationCondition(data));\n case TargetingType.SEGMENT:\n return buildExports.Ok(new Segment(data));\n case TargetingType.APPLICATION_VERSION:\n return buildExports.Ok(new ApplicationVersion(data));\n case TargetingType.PREVIOUS_PAGE:\n return buildExports.Ok(new PreviousPage(data));\n case TargetingType.PAGE_VIEWS:\n return buildExports.Ok(new VisitedPages(data));\n case TargetingType.LAST_VISIT:\n return buildExports.Ok(new LastVisit(data));\n case TargetingType.FIRST_VISIT:\n return buildExports.Ok(new FirstVisit(data));\n case TargetingType.SAME_DAY_VISITS:\n return buildExports.Ok(new SameDayVisits(data));\n case TargetingType.VISITS:\n return buildExports.Ok(new Visits(data));\n case TargetingType.NEW_VISITORS:\n return buildExports.Ok(new NewVisitor(data));\n case TargetingType.HEAT_SLICE:\n return buildExports.Ok(new ConversionLikelihood(data));\n default:\n KameleoonLogger.info `Unsupported targeted condition type found: ${targetingType}`;\n return buildExports.Err(new KameleoonError(KameleoonException.TargetingCondition, targetingType));\n }\n }\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing keys for Kameleoon SDK related data stored on storage\n * */\nvar KameleoonStorageKey;\n(function (KameleoonStorageKey) {\n KameleoonStorageKey[\"ClientData\"] = \"kameleoonClientData\";\n KameleoonStorageKey[\"TargetingData\"] = \"kameleoonTargetingData\";\n KameleoonStorageKey[\"TrackingData\"] = \"kameleoonTrackingData\";\n KameleoonStorageKey[\"VariationData\"] = \"kameleoonVariationData\";\n KameleoonStorageKey[\"VisitorCode\"] = \"kameleoonVisitorCode\";\n KameleoonStorageKey[\"ConsentData\"] = \"kameleoonConsentData\";\n KameleoonStorageKey[\"DataInfo\"] = \"kameleoonDataInfo\";\n KameleoonStorageKey[\"KameleoonSimulationFFData\"] = \"kameleoonSimulationFFData\";\n KameleoonStorageKey[\"ForcedFeatureVariation\"] = \"kameleoonForcedFeatureVariation\";\n KameleoonStorageKey[\"ForcedExperimentVariation\"] = \"kameleoonForcedExperimentVariation\";\n})(KameleoonStorageKey || (KameleoonStorageKey = {}));\nconst DEFAULT_CLIENT_CONFIGURATION = {\n data: DEFAULT_DATA_FILE_CONFIGURATION,\n lastUpdate: '',\n};\n// --- Note ---\n// Not a real visit duration, rather a guaranteed minimum time\nconst VISIT_DURATION = 29 * Milliseconds.Minute;\n\nclass IntegrityChecker {\n constructor(key) {\n this.key = key;\n }\n isDataValid(data) {\n switch (this.key) {\n case KameleoonStorageKey.ClientData:\n return this.checkClientDataIntegrity(data);\n case KameleoonStorageKey.TargetingData:\n return this.checkTargetingDataIntegrity(data);\n case KameleoonStorageKey.DataInfo:\n return this.checkDataInfoIntegrity(data);\n case KameleoonStorageKey.VariationData:\n return this.checkVariationDataIntegrity(data);\n case KameleoonStorageKey.TrackingData:\n return this.checkTrackingDataIntegrity(data);\n default:\n return true;\n }\n }\n getDefaultData() {\n switch (this.key) {\n case KameleoonStorageKey.ClientData:\n return this.getDefaultClientData();\n case KameleoonStorageKey.DataInfo:\n return { unsentData: {}, nextVisitTime: 0, mappingIdentifiers: {} };\n case KameleoonStorageKey.TrackingData:\n return { scheduledVisitors: {} };\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.VariationData:\n case KameleoonStorageKey.ConsentData:\n return {};\n case KameleoonStorageKey.VisitorCode:\n return '';\n case KameleoonStorageKey.KameleoonSimulationFFData:\n return '';\n case KameleoonStorageKey.ForcedExperimentVariation:\n return {};\n case KameleoonStorageKey.ForcedFeatureVariation:\n return {};\n default:\n exhaustCheck(this.key);\n }\n }\n checkTrackingDataIntegrity(data) {\n return this.hasFields(data, ['scheduledVisitors']);\n }\n checkDataInfoIntegrity(data) {\n return this.hasFields(data, ['unsentData', 'nextVisitTime']);\n }\n checkVariationDataIntegrity(data) {\n const variations = Object.values(data);\n if (!variations.length) {\n return true;\n }\n const hasInvalidFields = (obj) => !this.hasFields(obj, ['status']) || this.hasFields(obj, ['isSent']);\n for (const variation of variations) {\n for (const value of Object.values(variation)) {\n if (hasInvalidFields(value)) {\n return false;\n }\n }\n }\n return true;\n }\n checkClientDataIntegrity(data) {\n return this.hasFields(data, Object.keys(DEFAULT_CLIENT_CONFIGURATION));\n }\n checkTargetingDataIntegrity(data) {\n const visitorValues = Object.values(data);\n if (!visitorValues.length) {\n return true;\n }\n for (const visitorData of visitorValues) {\n // --- Note ---\n // If `visitorData` is a string, it means that it's a visitor reference\n if (typeof visitorData === 'string') {\n continue;\n }\n const hasInvalidFields = (obj) => !this.hasFields(obj, ['status']) ||\n this.hasFields(obj, ['sent']) ||\n this.hasFields(obj, ['timestampList']);\n for (const [key, data] of Object.entries(visitorData)) {\n if (Array.isArray(data)) {\n return false;\n }\n switch (key) {\n case KameleoonData.PageView:\n case KameleoonData.Conversion:\n case KameleoonData.Personalization:\n case KameleoonData.TargetedSegment:\n case KameleoonData.CustomData: {\n const hasBadFields = Object.values(data).some((obj) => hasInvalidFields(obj));\n if (hasBadFields) {\n return false;\n }\n continue;\n }\n default: {\n if (hasInvalidFields(data)) {\n return false;\n }\n }\n }\n }\n }\n return true;\n }\n getDefaultClientData() {\n return Object.assign(Object.assign({}, DEFAULT_CLIENT_CONFIGURATION), { lastUpdate: new Date().toString() });\n }\n hasFields(obj, fields) {\n const keys = Object.keys(obj);\n if (!keys.length || !fields.length) {\n return false;\n }\n return fields.every((field) => keys.includes(field));\n }\n}\n\n// --- Note ---\n// Named `DataStorage` to avoid collision with `Storage` from `window` API\nclass DataStorage {\n constructor(externalStorage, storageKey) {\n this.externalStorage = externalStorage;\n this.storageKey = storageKey;\n const integrityChecker = new IntegrityChecker(storageKey);\n const result = this.read();\n if (!result.ok) {\n if (result.error.type === KameleoonException.StorageEmpty) {\n const defaultData = integrityChecker.getDefaultData();\n this.write(defaultData);\n }\n return;\n }\n const data = result.data;\n if (!integrityChecker.isDataValid(data)) {\n const defaultData = integrityChecker.getDefaultData();\n this.write(defaultData);\n }\n }\n read() {\n try {\n const result = this.externalStorage.read(this.storageKey);\n if (result === null) {\n return buildExports.Err(new KameleoonError(KameleoonException.StorageEmpty));\n }\n // --- Note ---\n // Have to cast the type here to tell TS that `result.data` type is a subset of `T` as we check it already in the default generic `StorageDataType` for `IExternalStorage`\n return buildExports.Ok(result);\n }\n catch (_) {\n KameleoonLogger.error `Failed to read data from storage: ${this.storageKey}`;\n return buildExports.Err(new KameleoonError(KameleoonException.StorageRead, this.storageKey));\n }\n }\n write(data) {\n try {\n this.externalStorage.write(this.storageKey, data);\n return buildExports.Ok();\n }\n catch (_) {\n KameleoonLogger.error `Failed to write data to storage: ${this.storageKey}`;\n return buildExports.Err(new KameleoonError(KameleoonException.StorageWrite, this.storageKey));\n }\n }\n update(data) {\n const result = this.read();\n if (!result.ok) {\n if (result.error.type === KameleoonException.StorageEmpty) {\n return this.write(data);\n }\n else {\n return result;\n }\n }\n const existingData = result.data;\n let newData;\n if (typeof existingData === 'string') {\n newData = data;\n }\n else {\n newData = Object.assign(Object.assign({}, existingData), data);\n }\n return this.write(newData);\n }\n}\n\nclass StorageCleanupManager {\n constructor(externalStorage, cleanupInterval) {\n this.externalStorage = externalStorage;\n this.cleanupInterval = cleanupInterval;\n if (cleanupInterval > 0) {\n this.initCleanupInterval();\n }\n }\n initCleanupInterval() {\n for (const storageKey of Object.values(KameleoonStorageKey)) {\n let cleanupInterval = null;\n try {\n switch (storageKey) {\n case KameleoonStorageKey.ForcedFeatureVariation:\n case KameleoonStorageKey.ForcedExperimentVariation:\n case KameleoonStorageKey.VariationData:\n case KameleoonStorageKey.ConsentData:\n KameleoonLogger.info `Starting cleanup for ${storageKey} with interval ${this.cleanupInterval}`;\n cleanupInterval = setInterval(() => this.cleanupData(storageKey), this.cleanupInterval);\n break;\n case KameleoonStorageKey.ClientData:\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.TrackingData:\n case KameleoonStorageKey.VisitorCode:\n case KameleoonStorageKey.DataInfo:\n case KameleoonStorageKey.KameleoonSimulationFFData:\n break;\n default:\n // check if all cases are handled\n KameleoonLogger.error `Unknown storage key: ${storageKey} for initCleanupInterval.`;\n }\n }\n catch (Error) {\n if (cleanupInterval) {\n clearInterval(cleanupInterval);\n }\n KameleoonLogger.error `Error while starting cleanup for ${storageKey} with interval ${this.cleanupInterval}`;\n }\n }\n }\n cleanupData(storageKey) {\n const dataResult = this.externalStorage.read(storageKey);\n if (!dataResult) {\n return;\n }\n const currentTime = Date.now();\n switch (storageKey) {\n case KameleoonStorageKey.VariationData:\n this.cleanupVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ForcedFeatureVariation:\n this.cleanupForcedFeatureVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ForcedExperimentVariation:\n this.cleanupForcedExperimentVariationData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ConsentData:\n this.cleanupConsentData(dataResult, currentTime);\n break;\n case KameleoonStorageKey.ClientData:\n case KameleoonStorageKey.TargetingData:\n case KameleoonStorageKey.TrackingData:\n case KameleoonStorageKey.VisitorCode:\n case KameleoonStorageKey.DataInfo:\n case KameleoonStorageKey.KameleoonSimulationFFData:\n break;\n default:\n KameleoonLogger.error `Unknown storage key: ${storageKey} for cleanupData.`;\n }\n this.externalStorage.write(storageKey, dataResult);\n }\n cleanupConsentData(consentData, currentTime) {\n for (const [visitorCode, consent] of Object.entries(consentData)) {\n // for consistency with the old data in the storage\n if (typeof consent === 'boolean') {\n consentData[visitorCode] = {\n consent,\n expirationTime: currentTime + this.cleanupInterval,\n };\n continue;\n }\n const value = consent;\n if (typeof value.expirationTime === 'number') {\n if (value.expirationTime < currentTime) {\n delete consentData[visitorCode];\n }\n }\n else {\n value.expirationTime = currentTime + this.cleanupInterval;\n }\n }\n }\n cleanupVariationData(variationData, currentTime) {\n for (const [visitorCode, featureVariations] of Object.entries(variationData)) {\n this.cleanupObjectValues(featureVariations, currentTime);\n if (Object.keys(variationData[visitorCode]).length === 0) {\n delete variationData[visitorCode];\n }\n }\n }\n cleanupForcedFeatureVariationData(forcedFeatureVariationData, currentTime) {\n for (const [simulated, visitorData] of Object.entries(forcedFeatureVariationData)) {\n for (const [visitorCode, features] of Object.entries(visitorData)) {\n this.cleanupObjectValues(features, currentTime);\n if (Object.keys(forcedFeatureVariationData[Number(simulated)][visitorCode]).length === 0) {\n delete forcedFeatureVariationData[Number(simulated)][visitorCode];\n }\n }\n }\n }\n cleanupForcedExperimentVariationData(forcedExperimentVariationData, currentTime) {\n for (const [visitorCode, experiments] of Object.entries(forcedExperimentVariationData)) {\n this.cleanupObjectValues(experiments, currentTime);\n if (Object.keys(forcedExperimentVariationData[visitorCode]).length === 0) {\n delete forcedExperimentVariationData[visitorCode];\n }\n }\n }\n cleanupObjectValues(obj, currentTime) {\n for (const [key, value] of Object.entries(obj)) {\n if (typeof value.expirationTime === 'number') {\n if (value.expirationTime < currentTime) {\n delete obj[key];\n }\n }\n else {\n value.expirationTime = currentTime + this.cleanupInterval;\n }\n }\n }\n}\n\nvar LegalConsent;\n(function (LegalConsent) {\n LegalConsent[LegalConsent[\"Unknown\"] = 0] = \"Unknown\";\n LegalConsent[LegalConsent[\"Given\"] = 1] = \"Given\";\n LegalConsent[LegalConsent[\"NotGiven\"] = 2] = \"NotGiven\";\n})(LegalConsent || (LegalConsent = {}));\n\nclass TargetedSegment {\n constructor(id) {\n this.id = id;\n this.status = TrackingStatus.Unsent;\n }\n get url() {\n return UrlEventType.TargetingSegment + UrlParameter.Id + this.id;\n }\n get data() {\n return {\n id: this.id,\n type: KameleoonData.TargetedSegment,\n status: this.status,\n };\n }\n static _fromRaw(data) {\n const { id, status } = data;\n const targetedSegment = new TargetedSegment(id);\n targetedSegment.status = status;\n return targetedSegment;\n }\n}\n\nclass DataManager {\n constructor({ dataStorage, infoStorage, cleanupInterval, packageInfo, }) {\n this.targetingTrees = new Map();\n this.mappingIdentifierCustomDataIndex = null;\n this.persistentCustomDataIndexes = new Set();\n this.localCustomDataIndexes = new Set();\n this.customDataIndexByName = new Map();\n this.cleanupIntervalId = null;\n KameleoonLogger.debug `CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval})`;\n this.dataStorage = dataStorage;\n this.infoStorage = infoStorage;\n this.dataProcessor = new DataProcessor(cleanupInterval, packageInfo);\n this.packageInfo = packageInfo;\n if (cleanupInterval) {\n const cleanupCallback = () => {\n this.cleanupData();\n };\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.cleanupIntervalId = setInterval(cleanupCallback, cleanupInterval);\n }\n catch (err) {\n if (this.cleanupIntervalId) {\n clearInterval(this.cleanupIntervalId);\n }\n KameleoonLogger.error `Failed to set cleanup interval: ${cleanupInterval}`;\n throw err;\n }\n }\n KameleoonLogger.debug `RETURN: new DataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval})`;\n }\n getUnsentData(visitorCode) {\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return [];\n }\n const infoData = infoResult.data;\n const targetingData = this.getVisitorData(visitorCode);\n if (!infoData.unsentData[visitorCode] || !targetingData) {\n return [];\n }\n const unsentDataKeys = infoData.unsentData[visitorCode];\n const isNextVisit = infoData.nextVisitTime <= Date.now();\n const filter = ({ status, key, cdIndex }) => {\n if (typeof cdIndex === 'number') {\n // --- Note ---\n // Persistent CustomData is mandatory for sending each time\n // but only once per visit\n if (this.persistentCustomDataIndexes.has(cdIndex) && isNextVisit) {\n return true;\n }\n }\n return unsentDataKeys.includes(key) && status === TrackingStatus.Unsent;\n };\n if (isNextVisit) {\n infoData.nextVisitTime = Date.now() + VISIT_DURATION;\n this.infoStorage.write(infoData);\n }\n return this.getDataFromRaw(targetingData, filter);\n }\n getPendingData(visitorCode) {\n const targetingData = this.getVisitorData(visitorCode);\n if (!targetingData) {\n return [];\n }\n const filter = ({ status }) => status === TrackingStatus.Pending;\n return this.getDataFromRaw(targetingData, filter);\n }\n getDataFromRaw(targetingData, filter) {\n const resultData = [];\n for (const [key, data] of Object.entries(targetingData)) {\n if (!data) {\n continue;\n }\n switch (key) {\n case KameleoonData.CustomData: {\n for (const customData of Object.values(data)) {\n if (!customData) {\n continue;\n }\n const { status, index } = customData;\n if (filter({ status, key, cdIndex: index })) {\n const customDataItem = CustomData$1._fromRaw(customData);\n resultData.push(customDataItem);\n }\n }\n break;\n }\n case KameleoonData.Conversion: {\n for (const conversion of Object.values(data)) {\n if (!conversion) {\n continue;\n }\n if (filter({ status: conversion.status, key })) {\n const customDataItem = Conversion$1._fromRaw(conversion);\n resultData.push(customDataItem);\n }\n }\n break;\n }\n case KameleoonData.PageView: {\n const pageViewData = data;\n for (const pageView of Object.values(pageViewData)) {\n if (filter({ status: pageView.status, key })) {\n const pageViewItem = PageView._fromRaw(pageView);\n resultData.push(pageViewItem);\n }\n }\n break;\n }\n case KameleoonData.TargetedSegment: {\n const targetedSegmentData = data;\n for (const targetedSegment of Object.values(targetedSegmentData)) {\n if (filter({ status: targetedSegment.status, key })) {\n const targetedSegmentItem = TargetedSegment._fromRaw(targetedSegment);\n resultData.push(targetedSegmentItem);\n }\n }\n break;\n }\n case KameleoonData.GeolocationData: {\n const geolocationData = data;\n if (!data) {\n continue;\n }\n if (filter({ status: geolocationData.status, key })) {\n const geolocationItem = GeolocationData._fromRaw(geolocationData);\n resultData.push(geolocationItem);\n }\n break;\n }\n case KameleoonData.Browser: {\n const browserData = data;\n if (filter({ status: browserData.status, key })) {\n const browserItem = Browser$1._fromRaw(browserData);\n resultData.push(browserItem);\n }\n break;\n }\n case KameleoonData.Device: {\n const deviceData = data;\n if (filter({ status: deviceData.status, key })) {\n const deviceItem = Device$1._fromRaw(deviceData);\n resultData.push(deviceItem);\n }\n break;\n }\n case KameleoonData.OperatingSystem: {\n const osData = data;\n if (filter({ status: osData.status, key })) {\n const osItem = OperatingSystem$1._fromRaw(osData);\n resultData.push(osItem);\n }\n }\n }\n }\n return resultData;\n }\n storeTrackedData(data) {\n this.storeDataForVisitors(data, false);\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return;\n }\n const unsentData = infoResult.data.unsentData;\n for (const [visitorCode, kameleoonData] of Object.entries(data)) {\n if (!unsentData[visitorCode]) {\n return;\n }\n const unsentDataKeys = new Set(unsentData[visitorCode]);\n kameleoonData.forEach(({ data }) => {\n if (unsentDataKeys.has(data.type)) {\n unsentDataKeys.delete(data.type);\n }\n });\n const hasPersistentCustomData = kameleoonData.some(({ data }) => {\n if (data.type !== KameleoonData.CustomData) {\n return false;\n }\n const { index } = data;\n return (this.persistentCustomDataIndexes.has(index) ||\n this.mappingIdentifierCustomDataIndex === index);\n });\n if (hasPersistentCustomData) {\n unsentDataKeys.add(KameleoonData.CustomData);\n }\n unsentData[visitorCode] = Array.from(unsentDataKeys);\n if (!unsentData[visitorCode].length) {\n delete unsentData[visitorCode];\n }\n }\n this.infoStorage.write(infoResult.data);\n }\n /**\n * Store data for a single visitor\n */\n storeData({ visitorCode, data, track, }) {\n KameleoonLogger.debug `CALL: DataManager.storeDataForVisitor(vc: ${visitorCode}, track: ${track}, data: ${data})`;\n const result = this.storeDataInternal((infoData, targetingData) => {\n this.mutUpdateTargetingData({\n infoData,\n targetingData,\n visitorCode,\n kameleoonData: data,\n extendTtl: true,\n track,\n });\n });\n KameleoonLogger.debug `RETURN: DataManager.storeDataForVisitor(vc: ${visitorCode}, track: ${track}, data: ${data}) -> ${result}`;\n return result;\n }\n /**\n * Store data for multiple visitors\n */\n storeDataForVisitors(data, extendTtl) {\n KameleoonLogger.debug `CALL: DataManager.storeDataForVisitors(data: ${data}, extendTtl: ${extendTtl})`;\n const result = this.storeDataInternal((infoData, targetingData) => {\n for (const [visitorCode, kameleoonData] of Object.entries(data)) {\n this.mutUpdateTargetingData({\n infoData,\n targetingData,\n visitorCode,\n kameleoonData,\n extendTtl,\n });\n }\n });\n KameleoonLogger.debug `RETURN: DataManager.storeDataForVisitors(data: ${data}, extendTtl: ${extendTtl}) -> ${result}`;\n return result;\n }\n // ========= Internal shared logic =========\n storeDataInternal(updater) {\n const dataResult = this.dataStorage.read();\n if (!dataResult.ok) {\n return dataResult;\n }\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return infoResult;\n }\n const targetingData = dataResult.data;\n const infoData = infoResult.data;\n updater(infoData, targetingData);\n this.cleanupData();\n this.infoStorage.write(infoData);\n return this.dataStorage.write(targetingData);\n }\n getTree(segment) {\n if (this.targetingTrees.has(segment.id)) {\n return this.targetingTrees.get(segment.id);\n }\n const targetingTree = new Tree(segment);\n this.targetingTrees.set(segment.id, targetingTree);\n return targetingTree;\n }\n clearTrees() {\n this.targetingTrees.clear();\n }\n isPersistentCustomData(dataItem) {\n if (!this.persistentCustomDataIndexes.size) {\n return false;\n }\n if (Utilities.isCustomData(dataItem)) {\n return this.persistentCustomDataIndexes.has(dataItem.data.index);\n }\n return false;\n }\n isUniqueIdentifier(visitorCode) {\n var _a;\n const targetingData = this.getVisitorData(visitorCode);\n const uniqueIdentifier = targetingData === null || targetingData === void 0 ? void 0 : targetingData[KameleoonData.UniqueIdentifier];\n return (_a = uniqueIdentifier === null || uniqueIdentifier === void 0 ? void 0 : uniqueIdentifier.value) !== null && _a !== void 0 ? _a : false;\n }\n getVisitorIdentifier(visitorCode) {\n var _a, _b, _c;\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return visitorCode;\n }\n const infoData = infoResult.data;\n (_a = infoData.mappingIdentifiers) !== null && _a !== void 0 ? _a : (infoData.mappingIdentifiers = {});\n return ((_c = (_b = infoData.mappingIdentifiers[visitorCode]) === null || _b === void 0 ? void 0 : _b.mappingIdentifier) !== null && _c !== void 0 ? _c : visitorCode);\n }\n getMappingIdentifier(visitorCode) {\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return undefined;\n }\n const infoData = infoResult.data;\n if (infoData.mappingIdentifiers) {\n return infoData.mappingIdentifiers[visitorCode];\n }\n return undefined;\n }\n setMappingIdentifier(visitorCode, mappingIdentifier) {\n var _a;\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return;\n }\n const infoData = infoResult.data;\n (_a = infoData.mappingIdentifiers) !== null && _a !== void 0 ? _a : (infoData.mappingIdentifiers = {});\n const currentMappingIdentifier = infoData.mappingIdentifiers[visitorCode];\n if (!currentMappingIdentifier ||\n currentMappingIdentifier.timestamp < mappingIdentifier.timestamp) {\n infoData.mappingIdentifiers[visitorCode] = mappingIdentifier;\n this.infoStorage.write(infoData);\n }\n }\n getVisitorData(visitorCode) {\n this.cleanupData();\n const storageData = this.dataStorage.read();\n if (!storageData.ok) {\n return undefined;\n }\n let { visitorReference, data, isReference } = this.dataProcessor.dereferenceData(storageData.data, visitorCode);\n if (this.packageInfo.isServer && isReference && !data[visitorReference]) {\n const infoData = this.infoStorage.read();\n if (infoData.ok && infoData.data.mappingIdentifiers) {\n delete infoData.data.mappingIdentifiers[visitorCode];\n }\n delete data[visitorCode];\n visitorReference = visitorCode;\n }\n return data[visitorReference];\n }\n getVisitorStoredDataTypes(visitorCode) {\n const targetingData = this.getVisitorData(visitorCode);\n if (!targetingData) {\n return new Set();\n }\n return new Set(Object.keys(targetingData));\n }\n getLinkedVisitor(visitorCode) {\n var _a, _b, _c;\n const storageData = this.dataStorage.read();\n if (!storageData.ok) {\n return null;\n }\n const visitorDataOrRef = storageData.data[visitorCode];\n // Direct reference case\n if (typeof visitorDataOrRef === 'string') {\n return visitorDataOrRef;\n }\n // No mapping index or no visitor data\n if (visitorDataOrRef == null ||\n this.mappingIdentifierCustomDataIndex == null) {\n return null;\n }\n const value = (_c = (_b = (_a = visitorDataOrRef[KameleoonData.CustomData]) === null || _a === void 0 ? void 0 : _a[this.mappingIdentifierCustomDataIndex]) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c[0];\n return value !== null && value !== void 0 ? value : null;\n }\n mutUpdateTargetingData({ infoData, visitorCode, kameleoonData, targetingData, extendTtl, track, }) {\n var _a, _b, _c;\n for (const dataItem of kameleoonData) {\n // prcoess track status\n if (track === false) {\n dataItem.status = TrackingStatus.Sent;\n }\n // process custom data\n if (dataItem.data.type === KameleoonData.CustomData) {\n const customDataIsValid = this.processCustomData({\n infoData,\n customData: dataItem,\n mutData: targetingData,\n visitorCode,\n });\n if (!customDataIsValid) {\n continue;\n }\n }\n // process metadata of conversions\n if (dataItem.data.type === KameleoonData.Conversion) {\n const conversion = dataItem;\n if (((_b = (_a = conversion._metadata) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0) {\n conversion._metadata = (_c = conversion._metadata) === null || _c === void 0 ? void 0 : _c.filter((item) => this.trySetCustomDataIndexByName(item));\n }\n }\n const expirationTime = this.dataProcessor.mutUpdateData({\n infoData,\n visitorCode,\n mutData: targetingData,\n dataItem,\n extendTtl,\n });\n const nextCleanup = infoData.nextDataCleanup;\n if (!nextCleanup ||\n (nextCleanup && expirationTime && expirationTime < nextCleanup)) {\n infoData.nextDataCleanup = expirationTime;\n }\n if (dataItem.data.status === TrackingStatus.Unsent) {\n this.dataProcessor.mutAddUnsentData({\n mutData: infoData,\n visitorCode,\n dataType: dataItem.data.type,\n });\n }\n }\n }\n cleanupData() {\n const result = this.dataStorage.read();\n const infoResult = this.infoStorage.read();\n if (!result.ok || !infoResult.ok) {\n return;\n }\n const data = result.data;\n const infoData = infoResult.data;\n const nextCleanup = infoData.nextDataCleanup;\n if (nextCleanup && nextCleanup < Date.now()) {\n const nextCleanupTime = this.dataProcessor.mutCleanupData(data, infoData);\n infoData.nextDataCleanup = nextCleanupTime || undefined;\n this.infoStorage.write(infoData);\n this.dataStorage.write(data);\n }\n }\n processCustomData({ infoData, mutData, customData, visitorCode, }) {\n var _a;\n const { data } = customData;\n const isDataValid = Boolean(data.value.length && data.value[0].length);\n if (!this.trySetCustomDataIndexByName(customData)) {\n return false;\n }\n if (data.index == CustomData$1.UNDEFINED_INDEX) {\n data.index = customData.index;\n }\n if (this.mappingIdentifierCustomDataIndex === data.index && isDataValid) {\n customData._isMappingIdentifier = true;\n const userId = data.value[0];\n if (visitorCode !== userId) {\n KameleoonLogger.info `Linked anonymous visitor ${visitorCode} with user ${userId}`;\n // --- Note ---\n // Associate linked visitor codes\n this.dataProcessor.createReference({\n infoData,\n mutData,\n visitorCode,\n linkedVisitor: data.value[0],\n });\n (_a = infoData.mappingIdentifiers) !== null && _a !== void 0 ? _a : (infoData.mappingIdentifiers = {});\n infoData.mappingIdentifiers[userId] = {\n mappingIdentifier: visitorCode,\n timestamp: Date.now(),\n };\n }\n }\n if (this.localCustomDataIndexes.has(data.index)) {\n customData.status = TrackingStatus.Sent;\n }\n return true;\n }\n trySetCustomDataIndexByName(customData) {\n if (customData.index !== CustomData$1.UNDEFINED_INDEX)\n return true;\n if (!customData.name)\n return false;\n const cdIndex = this.customDataIndexByName.get(customData.name);\n if (cdIndex == null)\n return false;\n customData.index = cdIndex;\n return true;\n }\n get unsentDataVisitors() {\n const infoResult = this.infoStorage.read();\n if (!infoResult.ok) {\n return [];\n }\n return Object.keys(infoResult.data.unsentData);\n }\n get identifierCustomDataIndex() {\n return this.mappingIdentifierCustomDataIndex;\n }\n get trees() {\n return this.targetingTrees;\n }\n get storedCustomDataIndexes() {\n const result = this.dataStorage.read();\n if (!result.ok) {\n return new Set();\n }\n const targetingData = result.data;\n if (!(KameleoonData.CustomData in targetingData)) {\n return new Set();\n }\n const indexes = new Set();\n for (const index in Object.keys(targetingData[KameleoonData.CustomData])) {\n indexes.add(Number(index));\n }\n return indexes;\n }\n set customDataIndexes(customData) {\n var _a;\n const [customDataLocalOnlyIndexes, persistentCustomDataIndexes] = [[], []];\n const customDataIndexByName = new Map();\n customData.forEach((customData) => {\n if (customData.localOnly) {\n customDataLocalOnlyIndexes.push(customData.index);\n }\n if (customData.scope === CustomDataScope.Visitor) {\n persistentCustomDataIndexes.push(customData.index);\n }\n if (customData.name) {\n customDataIndexByName.set(customData.name, customData.index);\n }\n });\n this.mappingIdentifierCustomDataIndex =\n ((_a = customData.find((customData) => customData.isMappingIdentifier)) === null || _a === void 0 ? void 0 : _a.index) ||\n null;\n this.localCustomDataIndexes = new Set(customDataLocalOnlyIndexes);\n this.persistentCustomDataIndexes = new Set(persistentCustomDataIndexes);\n this.customDataIndexByName = customDataIndexByName;\n }\n getCustomDataIndexByName(name) {\n return this.customDataIndexByName.get(name);\n }\n}\n\nconst VISITOR_CODE_LENGTH = 16;\nconst VISITOR_CODE_MAX_LENGTH = 255;\nconst DEFAULT_MAX_AGE = 60 * 60 * 24 * 365;\nconst PATH = '/';\n\n/**\n * VisitorCodeManager - a class which manages visitor codes using cookies, offering functions to generate, retrieve,\n * and handle these codes while considering user consent.\n **/\nclass VisitorCodeManager {\n constructor() {\n this.isConsentRequired = false;\n }\n set consentRequired(isRequired) {\n this.isConsentRequired = isRequired;\n }\n get consentRequired() {\n return this.isConsentRequired;\n }\n set getData(callback) {\n this.getDataCallback = callback;\n }\n set setData(callback) {\n this.setDataCallback = callback;\n }\n get setData() {\n if (this.setDataCallback) {\n return this.setDataCallback;\n }\n throw new Error('Missing setDataCallback!');\n }\n validateVisitorCode(visitorCode) {\n if (visitorCode.length === 0) {\n return buildExports.Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return buildExports.Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n return buildExports.Ok();\n }\n getVisitorCode(defaultVisitorCode) {\n KameleoonLogger.debug `CALL: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode})`;\n if (!this.getDataCallback || !this.setDataCallback) {\n throw new Error('Missing getDataCallback or setDataCallback methods in getVisitorCode!');\n }\n let visitorCode;\n const existingVisitorCode = this.getDataCallback(KameleoonStorageKey.VisitorCode);\n if (existingVisitorCode) {\n visitorCode = existingVisitorCode;\n }\n if (!visitorCode) {\n if (defaultVisitorCode) {\n this.validateVisitorCode(defaultVisitorCode).throw();\n visitorCode = defaultVisitorCode;\n KameleoonLogger.debug `Used default visitor code: ${visitorCode}`;\n }\n else {\n visitorCode = this.generateVisitorCode();\n KameleoonLogger.debug `Generated new visitor code: ${visitorCode}`;\n }\n }\n this.processSimulatedVariations(visitorCode);\n if (!this.isConsentRequired) {\n this.setDataCallback({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n }\n KameleoonLogger.debug `RETURN: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode}) -> (visitorCode: ${visitorCode})`;\n return visitorCode;\n }\n processSimulatedVariations(visitorCode) {\n if (this.variationConfiguration) {\n const simulatedVariationsData = this.getSimulatedVariations(visitorCode);\n try {\n this.variationConfiguration.clearSimulatedVariations(visitorCode).throw();\n if (simulatedVariationsData !== null && simulatedVariationsData.length > 0) {\n this.variationConfiguration.updateForcedFeatureVariations(visitorCode, simulatedVariationsData).throw();\n }\n }\n catch (error) {\n if (error instanceof Error) {\n KameleoonLogger.error `Failed to process simulated variations: ${error.message}`;\n }\n }\n }\n }\n getSimulatedVariations(visitorCode) {\n KameleoonLogger.debug `CALL: VisitorCodeManager.getSimulatedVariations(visitorCode: ${visitorCode})`;\n const simulatedVariationsData = this.getDataCallback(KameleoonStorageKey.KameleoonSimulationFFData);\n let variations = null;\n if (typeof simulatedVariationsData === 'string' &&\n simulatedVariationsData.length > 0) {\n try {\n const parsed = JSON.parse(decodeURIComponent(simulatedVariationsData));\n if (parsed && typeof parsed === 'object') {\n variations = Object.entries(parsed)\n .map(([key, value]) => {\n return this.variationConfiguration.simulatedVariationFromJson(key, value);\n })\n .filter((variation) => variation !== null);\n }\n }\n catch (error) {\n if (error instanceof Error) {\n KameleoonLogger.error `Failed to parse simulated variations: ${error.message}`;\n }\n }\n }\n KameleoonLogger.debug `RETURN: VisitorCodeManager.getSimulatedVariations(visitorCode: ${visitorCode}) -> (variations: ${variations})`;\n return variations;\n }\n generateVisitorCode() {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n const randomCharacterArray = [];\n for (let i = 0; i < VISITOR_CODE_LENGTH; i++) {\n randomCharacterArray.push(characters[Math.floor(Math.random() * characters.length)]);\n }\n return randomCharacterArray.join('');\n }\n setVariationConfiguration(variationConfiguration) {\n if (!this.variationConfiguration) {\n this.variationConfiguration = variationConfiguration;\n }\n }\n}\n\nvar sha256$2 = {exports: {}};\n\nfunction commonjsRequire(path) {\n\tthrow new Error('Could not dynamically require \"' + path + '\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');\n}\n\nvar core$1 = {exports: {}};\n\nvar _nodeResolve_empty = {};\n\nvar _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tdefault: _nodeResolve_empty\n});\n\nvar require$$0 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1);\n\nvar core = core$1.exports;\n\nvar hasRequiredCore;\n\nfunction requireCore () {\n\tif (hasRequiredCore) return core$1.exports;\n\thasRequiredCore = 1;\n\t(function (module, exports) {\n(function (root, factory) {\n\t\t\t{\n\t\t\t\t// CommonJS\n\t\t\t\tmodule.exports = factory();\n\t\t\t}\n\t\t}(core, function () {\n\n\t\t\t/*globals window, global, require*/\n\n\t\t\t/**\n\t\t\t * CryptoJS core components.\n\t\t\t */\n\t\t\tvar CryptoJS = CryptoJS || (function (Math, undefined$1) {\n\n\t\t\t var crypto;\n\n\t\t\t // Native crypto from window (Browser)\n\t\t\t if (typeof window !== 'undefined' && window.crypto) {\n\t\t\t crypto = window.crypto;\n\t\t\t }\n\n\t\t\t // Native crypto in web worker (Browser)\n\t\t\t if (typeof self !== 'undefined' && self.crypto) {\n\t\t\t crypto = self.crypto;\n\t\t\t }\n\n\t\t\t // Native crypto from worker\n\t\t\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t\t\t crypto = globalThis.crypto;\n\t\t\t }\n\n\t\t\t // Native (experimental IE 11) crypto from window (Browser)\n\t\t\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t\t\t crypto = window.msCrypto;\n\t\t\t }\n\n\t\t\t // Native crypto from global (NodeJS)\n\t\t\t if (!crypto && typeof commonjsGlobal !== 'undefined' && commonjsGlobal.crypto) {\n\t\t\t crypto = commonjsGlobal.crypto;\n\t\t\t }\n\n\t\t\t // Native crypto import via require (NodeJS)\n\t\t\t if (!crypto && typeof commonjsRequire === 'function') {\n\t\t\t try {\n\t\t\t crypto = require$$0;\n\t\t\t } catch (err) {}\n\t\t\t }\n\n\t\t\t /*\n\t\t\t * Cryptographically secure pseudorandom number generator\n\t\t\t *\n\t\t\t * As Math.random() is cryptographically not safe to use\n\t\t\t */\n\t\t\t var cryptoSecureRandomInt = function () {\n\t\t\t if (crypto) {\n\t\t\t // Use getRandomValues method (Browser)\n\t\t\t if (typeof crypto.getRandomValues === 'function') {\n\t\t\t try {\n\t\t\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t\t\t } catch (err) {}\n\t\t\t }\n\n\t\t\t // Use randomBytes method (NodeJS)\n\t\t\t if (typeof crypto.randomBytes === 'function') {\n\t\t\t try {\n\t\t\t return crypto.randomBytes(4).readInt32LE();\n\t\t\t } catch (err) {}\n\t\t\t }\n\t\t\t }\n\n\t\t\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t\t\t };\n\n\t\t\t /*\n\t\t\t * Local polyfill of Object.create\n\n\t\t\t */\n\t\t\t var create = Object.create || (function () {\n\t\t\t function F() {}\n\n\t\t\t return function (obj) {\n\t\t\t var subtype;\n\n\t\t\t F.prototype = obj;\n\n\t\t\t subtype = new F();\n\n\t\t\t F.prototype = null;\n\n\t\t\t return subtype;\n\t\t\t };\n\t\t\t }());\n\n\t\t\t /**\n\t\t\t * CryptoJS namespace.\n\t\t\t */\n\t\t\t var C = {};\n\n\t\t\t /**\n\t\t\t * Library namespace.\n\t\t\t */\n\t\t\t var C_lib = C.lib = {};\n\n\t\t\t /**\n\t\t\t * Base object for prototypal inheritance.\n\t\t\t */\n\t\t\t var Base = C_lib.Base = (function () {\n\n\n\t\t\t return {\n\t\t\t /**\n\t\t\t * Creates a new object that inherits from this object.\n\t\t\t *\n\t\t\t * @param {Object} overrides Properties to copy into the new object.\n\t\t\t *\n\t\t\t * @return {Object} The new object.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var MyType = CryptoJS.lib.Base.extend({\n\t\t\t * field: 'value',\n\t\t\t *\n\t\t\t * method: function () {\n\t\t\t * }\n\t\t\t * });\n\t\t\t */\n\t\t\t extend: function (overrides) {\n\t\t\t // Spawn\n\t\t\t var subtype = create(this);\n\n\t\t\t // Augment\n\t\t\t if (overrides) {\n\t\t\t subtype.mixIn(overrides);\n\t\t\t }\n\n\t\t\t // Create default initializer\n\t\t\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t\t\t subtype.init = function () {\n\t\t\t subtype.$super.init.apply(this, arguments);\n\t\t\t };\n\t\t\t }\n\n\t\t\t // Initializer's prototype is the subtype object\n\t\t\t subtype.init.prototype = subtype;\n\n\t\t\t // Reference supertype\n\t\t\t subtype.$super = this;\n\n\t\t\t return subtype;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Extends this object and runs the init method.\n\t\t\t * Arguments to create() will be passed to init().\n\t\t\t *\n\t\t\t * @return {Object} The new object.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var instance = MyType.create();\n\t\t\t */\n\t\t\t create: function () {\n\t\t\t var instance = this.extend();\n\t\t\t instance.init.apply(instance, arguments);\n\n\t\t\t return instance;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Initializes a newly created object.\n\t\t\t * Override this method to add some logic when your objects are created.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var MyType = CryptoJS.lib.Base.extend({\n\t\t\t * init: function () {\n\t\t\t * // ...\n\t\t\t * }\n\t\t\t * });\n\t\t\t */\n\t\t\t init: function () {\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Copies properties into this object.\n\t\t\t *\n\t\t\t * @param {Object} properties The properties to mix in.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * MyType.mixIn({\n\t\t\t * field: 'value'\n\t\t\t * });\n\t\t\t */\n\t\t\t mixIn: function (properties) {\n\t\t\t for (var propertyName in properties) {\n\t\t\t if (properties.hasOwnProperty(propertyName)) {\n\t\t\t this[propertyName] = properties[propertyName];\n\t\t\t }\n\t\t\t }\n\n\t\t\t // IE won't copy toString using the loop above\n\t\t\t if (properties.hasOwnProperty('toString')) {\n\t\t\t this.toString = properties.toString;\n\t\t\t }\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Creates a copy of this object.\n\t\t\t *\n\t\t\t * @return {Object} The clone.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var clone = instance.clone();\n\t\t\t */\n\t\t\t clone: function () {\n\t\t\t return this.init.prototype.extend(this);\n\t\t\t }\n\t\t\t };\n\t\t\t }());\n\n\t\t\t /**\n\t\t\t * An array of 32-bit words.\n\t\t\t *\n\t\t\t * @property {Array} words The array of 32-bit words.\n\t\t\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t\t\t */\n\t\t\t var WordArray = C_lib.WordArray = Base.extend({\n\t\t\t /**\n\t\t\t * Initializes a newly created word array.\n\t\t\t *\n\t\t\t * @param {Array} words (Optional) An array of 32-bit words.\n\t\t\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t\t\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t\t\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t\t\t */\n\t\t\t init: function (words, sigBytes) {\n\t\t\t words = this.words = words || [];\n\n\t\t\t if (sigBytes != undefined$1) {\n\t\t\t this.sigBytes = sigBytes;\n\t\t\t } else {\n\t\t\t this.sigBytes = words.length * 4;\n\t\t\t }\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Converts this word array to a string.\n\t\t\t *\n\t\t\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t\t\t *\n\t\t\t * @return {string} The stringified word array.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var string = wordArray + '';\n\t\t\t * var string = wordArray.toString();\n\t\t\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t\t\t */\n\t\t\t toString: function (encoder) {\n\t\t\t return (encoder || Hex).stringify(this);\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Concatenates a word array to this word array.\n\t\t\t *\n\t\t\t * @param {WordArray} wordArray The word array to append.\n\t\t\t *\n\t\t\t * @return {WordArray} This word array.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * wordArray1.concat(wordArray2);\n\t\t\t */\n\t\t\t concat: function (wordArray) {\n\t\t\t // Shortcuts\n\t\t\t var thisWords = this.words;\n\t\t\t var thatWords = wordArray.words;\n\t\t\t var thisSigBytes = this.sigBytes;\n\t\t\t var thatSigBytes = wordArray.sigBytes;\n\n\t\t\t // Clamp excess bits\n\t\t\t this.clamp();\n\n\t\t\t // Concat\n\t\t\t if (thisSigBytes % 4) {\n\t\t\t // Copy one byte at a time\n\t\t\t for (var i = 0; i < thatSigBytes; i++) {\n\t\t\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t\t\t }\n\t\t\t } else {\n\t\t\t // Copy one word at a time\n\t\t\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t\t\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t\t\t }\n\t\t\t }\n\t\t\t this.sigBytes += thatSigBytes;\n\n\t\t\t // Chainable\n\t\t\t return this;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Removes insignificant bits.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * wordArray.clamp();\n\t\t\t */\n\t\t\t clamp: function () {\n\t\t\t // Shortcuts\n\t\t\t var words = this.words;\n\t\t\t var sigBytes = this.sigBytes;\n\n\t\t\t // Clamp\n\t\t\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t\t\t words.length = Math.ceil(sigBytes / 4);\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Creates a copy of this word array.\n\t\t\t *\n\t\t\t * @return {WordArray} The clone.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var clone = wordArray.clone();\n\t\t\t */\n\t\t\t clone: function () {\n\t\t\t var clone = Base.clone.call(this);\n\t\t\t clone.words = this.words.slice(0);\n\n\t\t\t return clone;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Creates a word array filled with random bytes.\n\t\t\t *\n\t\t\t * @param {number} nBytes The number of random bytes to generate.\n\t\t\t *\n\t\t\t * @return {WordArray} The random word array.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t\t\t */\n\t\t\t random: function (nBytes) {\n\t\t\t var words = [];\n\n\t\t\t for (var i = 0; i < nBytes; i += 4) {\n\t\t\t words.push(cryptoSecureRandomInt());\n\t\t\t }\n\n\t\t\t return new WordArray.init(words, nBytes);\n\t\t\t }\n\t\t\t });\n\n\t\t\t /**\n\t\t\t * Encoder namespace.\n\t\t\t */\n\t\t\t var C_enc = C.enc = {};\n\n\t\t\t /**\n\t\t\t * Hex encoding strategy.\n\t\t\t */\n\t\t\t var Hex = C_enc.Hex = {\n\t\t\t /**\n\t\t\t * Converts a word array to a hex string.\n\t\t\t *\n\t\t\t * @param {WordArray} wordArray The word array.\n\t\t\t *\n\t\t\t * @return {string} The hex string.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t\t\t */\n\t\t\t stringify: function (wordArray) {\n\t\t\t // Shortcuts\n\t\t\t var words = wordArray.words;\n\t\t\t var sigBytes = wordArray.sigBytes;\n\n\t\t\t // Convert\n\t\t\t var hexChars = [];\n\t\t\t for (var i = 0; i < sigBytes; i++) {\n\t\t\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t\t hexChars.push((bite >>> 4).toString(16));\n\t\t\t hexChars.push((bite & 0x0f).toString(16));\n\t\t\t }\n\n\t\t\t return hexChars.join('');\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Converts a hex string to a word array.\n\t\t\t *\n\t\t\t * @param {string} hexStr The hex string.\n\t\t\t *\n\t\t\t * @return {WordArray} The word array.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t\t\t */\n\t\t\t parse: function (hexStr) {\n\t\t\t // Shortcut\n\t\t\t var hexStrLength = hexStr.length;\n\n\t\t\t // Convert\n\t\t\t var words = [];\n\t\t\t for (var i = 0; i < hexStrLength; i += 2) {\n\t\t\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t\t\t }\n\n\t\t\t return new WordArray.init(words, hexStrLength / 2);\n\t\t\t }\n\t\t\t };\n\n\t\t\t /**\n\t\t\t * Latin1 encoding strategy.\n\t\t\t */\n\t\t\t var Latin1 = C_enc.Latin1 = {\n\t\t\t /**\n\t\t\t * Converts a word array to a Latin1 string.\n\t\t\t *\n\t\t\t * @param {WordArray} wordArray The word array.\n\t\t\t *\n\t\t\t * @return {string} The Latin1 string.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t\t\t */\n\t\t\t stringify: function (wordArray) {\n\t\t\t // Shortcuts\n\t\t\t var words = wordArray.words;\n\t\t\t var sigBytes = wordArray.sigBytes;\n\n\t\t\t // Convert\n\t\t\t var latin1Chars = [];\n\t\t\t for (var i = 0; i < sigBytes; i++) {\n\t\t\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t\t\t latin1Chars.push(String.fromCharCode(bite));\n\t\t\t }\n\n\t\t\t return latin1Chars.join('');\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Converts a Latin1 string to a word array.\n\t\t\t *\n\t\t\t * @param {string} latin1Str The Latin1 string.\n\t\t\t *\n\t\t\t * @return {WordArray} The word array.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t\t\t */\n\t\t\t parse: function (latin1Str) {\n\t\t\t // Shortcut\n\t\t\t var latin1StrLength = latin1Str.length;\n\n\t\t\t // Convert\n\t\t\t var words = [];\n\t\t\t for (var i = 0; i < latin1StrLength; i++) {\n\t\t\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t\t\t }\n\n\t\t\t return new WordArray.init(words, latin1StrLength);\n\t\t\t }\n\t\t\t };\n\n\t\t\t /**\n\t\t\t * UTF-8 encoding strategy.\n\t\t\t */\n\t\t\t var Utf8 = C_enc.Utf8 = {\n\t\t\t /**\n\t\t\t * Converts a word array to a UTF-8 string.\n\t\t\t *\n\t\t\t * @param {WordArray} wordArray The word array.\n\t\t\t *\n\t\t\t * @return {string} The UTF-8 string.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t\t\t */\n\t\t\t stringify: function (wordArray) {\n\t\t\t try {\n\t\t\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t\t\t } catch (e) {\n\t\t\t throw new Error('Malformed UTF-8 data');\n\t\t\t }\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Converts a UTF-8 string to a word array.\n\t\t\t *\n\t\t\t * @param {string} utf8Str The UTF-8 string.\n\t\t\t *\n\t\t\t * @return {WordArray} The word array.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t\t\t */\n\t\t\t parse: function (utf8Str) {\n\t\t\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t\t\t }\n\t\t\t };\n\n\t\t\t /**\n\t\t\t * Abstract buffered block algorithm template.\n\t\t\t *\n\t\t\t * The property blockSize must be implemented in a concrete subtype.\n\t\t\t *\n\t\t\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t\t\t */\n\t\t\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t\t\t /**\n\t\t\t * Resets this block algorithm's data buffer to its initial state.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * bufferedBlockAlgorithm.reset();\n\t\t\t */\n\t\t\t reset: function () {\n\t\t\t // Initial values\n\t\t\t this._data = new WordArray.init();\n\t\t\t this._nDataBytes = 0;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Adds new data to this block algorithm's buffer.\n\t\t\t *\n\t\t\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * bufferedBlockAlgorithm._append('data');\n\t\t\t * bufferedBlockAlgorithm._append(wordArray);\n\t\t\t */\n\t\t\t _append: function (data) {\n\t\t\t // Convert string to WordArray, else assume WordArray already\n\t\t\t if (typeof data == 'string') {\n\t\t\t data = Utf8.parse(data);\n\t\t\t }\n\n\t\t\t // Append\n\t\t\t this._data.concat(data);\n\t\t\t this._nDataBytes += data.sigBytes;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Processes available data blocks.\n\t\t\t *\n\t\t\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t\t\t *\n\t\t\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t\t\t *\n\t\t\t * @return {WordArray} The processed data.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var processedData = bufferedBlockAlgorithm._process();\n\t\t\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t\t\t */\n\t\t\t _process: function (doFlush) {\n\t\t\t var processedWords;\n\n\t\t\t // Shortcuts\n\t\t\t var data = this._data;\n\t\t\t var dataWords = data.words;\n\t\t\t var dataSigBytes = data.sigBytes;\n\t\t\t var blockSize = this.blockSize;\n\t\t\t var blockSizeBytes = blockSize * 4;\n\n\t\t\t // Count blocks ready\n\t\t\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t\t\t if (doFlush) {\n\t\t\t // Round up to include partial blocks\n\t\t\t nBlocksReady = Math.ceil(nBlocksReady);\n\t\t\t } else {\n\t\t\t // Round down to include only full blocks,\n\t\t\t // less the number of blocks that must remain in the buffer\n\t\t\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t\t\t }\n\n\t\t\t // Count words ready\n\t\t\t var nWordsReady = nBlocksReady * blockSize;\n\n\t\t\t // Count bytes ready\n\t\t\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t\t\t // Process blocks\n\t\t\t if (nWordsReady) {\n\t\t\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t\t\t // Perform concrete-algorithm logic\n\t\t\t this._doProcessBlock(dataWords, offset);\n\t\t\t }\n\n\t\t\t // Remove processed words\n\t\t\t processedWords = dataWords.splice(0, nWordsReady);\n\t\t\t data.sigBytes -= nBytesReady;\n\t\t\t }\n\n\t\t\t // Return processed words\n\t\t\t return new WordArray.init(processedWords, nBytesReady);\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Creates a copy of this object.\n\t\t\t *\n\t\t\t * @return {Object} The clone.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var clone = bufferedBlockAlgorithm.clone();\n\t\t\t */\n\t\t\t clone: function () {\n\t\t\t var clone = Base.clone.call(this);\n\t\t\t clone._data = this._data.clone();\n\n\t\t\t return clone;\n\t\t\t },\n\n\t\t\t _minBufferSize: 0\n\t\t\t });\n\n\t\t\t /**\n\t\t\t * Abstract hasher template.\n\t\t\t *\n\t\t\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t\t\t */\n\t\t\t C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t\t\t /**\n\t\t\t * Configuration options.\n\t\t\t */\n\t\t\t cfg: Base.extend(),\n\n\t\t\t /**\n\t\t\t * Initializes a newly created hasher.\n\t\t\t *\n\t\t\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var hasher = CryptoJS.algo.SHA256.create();\n\t\t\t */\n\t\t\t init: function (cfg) {\n\t\t\t // Apply config defaults\n\t\t\t this.cfg = this.cfg.extend(cfg);\n\n\t\t\t // Set initial values\n\t\t\t this.reset();\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Resets this hasher to its initial state.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * hasher.reset();\n\t\t\t */\n\t\t\t reset: function () {\n\t\t\t // Reset data buffer\n\t\t\t BufferedBlockAlgorithm.reset.call(this);\n\n\t\t\t // Perform concrete-hasher logic\n\t\t\t this._doReset();\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Updates this hasher with a message.\n\t\t\t *\n\t\t\t * @param {WordArray|string} messageUpdate The message to append.\n\t\t\t *\n\t\t\t * @return {Hasher} This hasher.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * hasher.update('message');\n\t\t\t * hasher.update(wordArray);\n\t\t\t */\n\t\t\t update: function (messageUpdate) {\n\t\t\t // Append\n\t\t\t this._append(messageUpdate);\n\n\t\t\t // Update the hash\n\t\t\t this._process();\n\n\t\t\t // Chainable\n\t\t\t return this;\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Finalizes the hash computation.\n\t\t\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t\t\t *\n\t\t\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t\t\t *\n\t\t\t * @return {WordArray} The hash.\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var hash = hasher.finalize();\n\t\t\t * var hash = hasher.finalize('message');\n\t\t\t * var hash = hasher.finalize(wordArray);\n\t\t\t */\n\t\t\t finalize: function (messageUpdate) {\n\t\t\t // Final message update\n\t\t\t if (messageUpdate) {\n\t\t\t this._append(messageUpdate);\n\t\t\t }\n\n\t\t\t // Perform concrete-hasher logic\n\t\t\t var hash = this._doFinalize();\n\n\t\t\t return hash;\n\t\t\t },\n\n\t\t\t blockSize: 512/32,\n\n\t\t\t /**\n\t\t\t * Creates a shortcut function to a hasher's object interface.\n\t\t\t *\n\t\t\t * @param {Hasher} hasher The hasher to create a helper for.\n\t\t\t *\n\t\t\t * @return {Function} The shortcut function.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t\t\t */\n\t\t\t _createHelper: function (hasher) {\n\t\t\t return function (message, cfg) {\n\t\t\t return new hasher.init(cfg).finalize(message);\n\t\t\t };\n\t\t\t },\n\n\t\t\t /**\n\t\t\t * Creates a shortcut function to the HMAC's object interface.\n\t\t\t *\n\t\t\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t\t\t *\n\t\t\t * @return {Function} The shortcut function.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t\t\t */\n\t\t\t _createHmacHelper: function (hasher) {\n\t\t\t return function (message, key) {\n\t\t\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t\t\t };\n\t\t\t }\n\t\t\t });\n\n\t\t\t /**\n\t\t\t * Algorithm namespace.\n\t\t\t */\n\t\t\t var C_algo = C.algo = {};\n\n\t\t\t return C;\n\t\t\t}(Math));\n\n\n\t\t\treturn CryptoJS;\n\n\t\t})); \n\t} (core$1));\n\treturn core$1.exports;\n}\n\nvar sha256$1 = sha256$2.exports;\n\nvar hasRequiredSha256;\n\nfunction requireSha256 () {\n\tif (hasRequiredSha256) return sha256$2.exports;\n\thasRequiredSha256 = 1;\n\t(function (module, exports) {\n(function (root, factory) {\n\t\t\t{\n\t\t\t\t// CommonJS\n\t\t\t\tmodule.exports = factory(requireCore());\n\t\t\t}\n\t\t}(sha256$1, function (CryptoJS) {\n\n\t\t\t(function (Math) {\n\t\t\t // Shortcuts\n\t\t\t var C = CryptoJS;\n\t\t\t var C_lib = C.lib;\n\t\t\t var WordArray = C_lib.WordArray;\n\t\t\t var Hasher = C_lib.Hasher;\n\t\t\t var C_algo = C.algo;\n\n\t\t\t // Initialization and round constants tables\n\t\t\t var H = [];\n\t\t\t var K = [];\n\n\t\t\t // Compute constants\n\t\t\t (function () {\n\t\t\t function isPrime(n) {\n\t\t\t var sqrtN = Math.sqrt(n);\n\t\t\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t\t\t if (!(n % factor)) {\n\t\t\t return false;\n\t\t\t }\n\t\t\t }\n\n\t\t\t return true;\n\t\t\t }\n\n\t\t\t function getFractionalBits(n) {\n\t\t\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t\t\t }\n\n\t\t\t var n = 2;\n\t\t\t var nPrime = 0;\n\t\t\t while (nPrime < 64) {\n\t\t\t if (isPrime(n)) {\n\t\t\t if (nPrime < 8) {\n\t\t\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t\t\t }\n\t\t\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t\t\t nPrime++;\n\t\t\t }\n\n\t\t\t n++;\n\t\t\t }\n\t\t\t }());\n\n\t\t\t // Reusable object\n\t\t\t var W = [];\n\n\t\t\t /**\n\t\t\t * SHA-256 hash algorithm.\n\t\t\t */\n\t\t\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t\t\t _doReset: function () {\n\t\t\t this._hash = new WordArray.init(H.slice(0));\n\t\t\t },\n\n\t\t\t _doProcessBlock: function (M, offset) {\n\t\t\t // Shortcut\n\t\t\t var H = this._hash.words;\n\n\t\t\t // Working variables\n\t\t\t var a = H[0];\n\t\t\t var b = H[1];\n\t\t\t var c = H[2];\n\t\t\t var d = H[3];\n\t\t\t var e = H[4];\n\t\t\t var f = H[5];\n\t\t\t var g = H[6];\n\t\t\t var h = H[7];\n\n\t\t\t // Computation\n\t\t\t for (var i = 0; i < 64; i++) {\n\t\t\t if (i < 16) {\n\t\t\t W[i] = M[offset + i] | 0;\n\t\t\t } else {\n\t\t\t var gamma0x = W[i - 15];\n\t\t\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t\t\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t\t\t (gamma0x >>> 3);\n\n\t\t\t var gamma1x = W[i - 2];\n\t\t\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t\t\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t\t\t (gamma1x >>> 10);\n\n\t\t\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t\t\t }\n\n\t\t\t var ch = (e & f) ^ (~e & g);\n\t\t\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t\t\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t\t\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t\t\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t\t\t var t2 = sigma0 + maj;\n\n\t\t\t h = g;\n\t\t\t g = f;\n\t\t\t f = e;\n\t\t\t e = (d + t1) | 0;\n\t\t\t d = c;\n\t\t\t c = b;\n\t\t\t b = a;\n\t\t\t a = (t1 + t2) | 0;\n\t\t\t }\n\n\t\t\t // Intermediate hash value\n\t\t\t H[0] = (H[0] + a) | 0;\n\t\t\t H[1] = (H[1] + b) | 0;\n\t\t\t H[2] = (H[2] + c) | 0;\n\t\t\t H[3] = (H[3] + d) | 0;\n\t\t\t H[4] = (H[4] + e) | 0;\n\t\t\t H[5] = (H[5] + f) | 0;\n\t\t\t H[6] = (H[6] + g) | 0;\n\t\t\t H[7] = (H[7] + h) | 0;\n\t\t\t },\n\n\t\t\t _doFinalize: function () {\n\t\t\t // Shortcuts\n\t\t\t var data = this._data;\n\t\t\t var dataWords = data.words;\n\n\t\t\t var nBitsTotal = this._nDataBytes * 8;\n\t\t\t var nBitsLeft = data.sigBytes * 8;\n\n\t\t\t // Add padding\n\t\t\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t\t\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t\t\t data.sigBytes = dataWords.length * 4;\n\n\t\t\t // Hash final blocks\n\t\t\t this._process();\n\n\t\t\t // Return final computed hash\n\t\t\t return this._hash;\n\t\t\t },\n\n\t\t\t clone: function () {\n\t\t\t var clone = Hasher.clone.call(this);\n\t\t\t clone._hash = this._hash.clone();\n\n\t\t\t return clone;\n\t\t\t }\n\t\t\t });\n\n\t\t\t /**\n\t\t\t * Shortcut function to the hasher's object interface.\n\t\t\t *\n\t\t\t * @param {WordArray|string} message The message to hash.\n\t\t\t *\n\t\t\t * @return {WordArray} The hash.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var hash = CryptoJS.SHA256('message');\n\t\t\t * var hash = CryptoJS.SHA256(wordArray);\n\t\t\t */\n\t\t\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t\t\t /**\n\t\t\t * Shortcut function to the HMAC's object interface.\n\t\t\t *\n\t\t\t * @param {WordArray|string} message The message to hash.\n\t\t\t * @param {WordArray|string} key The secret key.\n\t\t\t *\n\t\t\t * @return {WordArray} The HMAC.\n\t\t\t *\n\t\t\t * @static\n\t\t\t *\n\t\t\t * @example\n\t\t\t *\n\t\t\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t\t\t */\n\t\t\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t\t\t}(Math));\n\n\n\t\t\treturn CryptoJS.SHA256;\n\n\t\t})); \n\t} (sha256$2));\n\treturn sha256$2.exports;\n}\n\nvar sha256Exports = requireSha256();\nvar sha256 = /*@__PURE__*/getDefaultExportFromCjs(sha256Exports);\n\nclass Hasher {\n static getHashDoubleForMEGroup(visitorIdentifier, meGroupName) {\n return this.calculateHash(visitorIdentifier + meGroupName);\n }\n static getHashDouble({ visitorIdentifier, id, respoolTime, }) {\n let suffix = '';\n if (respoolTime) {\n suffix += String(respoolTime);\n }\n return this.calculateHash(visitorIdentifier + id + suffix);\n }\n // --- Note ---\n // `hashDouble` is a seeded pseudo-random number between 0 and 1\n // used for deciding what variation to assign\n // `calculateHash` algorithm is consistent between every SDK\n // and will always provide same pseudo-random value for the same input parameters\n static calculateHash(seed) {\n const hashDigest = sha256(seed).toString();\n return parseInt(hashDigest, 16) / Math.pow(2, 256);\n }\n}\n\nclass VariationConfiguration {\n constructor(externalStorage, externalStorageForcedExperimentVariations, externalStorageForcedFeatureVariations, visitorCodeManager, clientConfiguration) {\n this.storage = externalStorage;\n this.storageForcedExperimentVariations =\n externalStorageForcedExperimentVariations;\n this.storageForcedFeatureVariations =\n externalStorageForcedFeatureVariations;\n this.visitorCodeManager = visitorCodeManager;\n this.clientConfiguration = clientConfiguration;\n visitorCodeManager.setVariationConfiguration(this);\n }\n updateDataStatus({ visitorCode, experimentIdList, status, }) {\n const result = this.storage.read();\n if (!result.ok) {\n return result;\n }\n let updatedVariationData = result.data;\n if (!updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {};\n }\n for (const experimentId of experimentIdList) {\n updatedVariationData[visitorCode][experimentId] = Object.assign(Object.assign({}, updatedVariationData[visitorCode][experimentId]), { status });\n }\n return this.storage.write(updatedVariationData);\n }\n getUnsentData(visitorCode) {\n return this.getVariationData(visitorCode, (status) => status === TrackingStatus.Unsent);\n }\n getVisitorsWithUnsentData() {\n KameleoonLogger.debug `CALL: VariationConfiguration.unsentDataVisitors()`;\n const result = this.storage.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.unsentDataVisitors() -> (result: ${result})`;\n return [];\n }\n const visitors = [];\n for (const [visitorCode, variations] of Object.entries(result.data)) {\n if (Object.values(variations).some((v) => v.status === TrackingStatus.Unsent)) {\n visitors.push(visitorCode);\n }\n }\n KameleoonLogger.debug `RETURN: VariationConfiguration.unsentDataVisitors() -> (visitors: ${visitors})`;\n return visitors;\n }\n getPendingData(visitorCode) {\n return this.getVariationData(visitorCode, (status) => status === TrackingStatus.Pending);\n }\n getStoredVariations(visitorCode) {\n const result = this.storage.read();\n if (!result.ok) {\n return result;\n }\n const featureFlagVariations = result.data[visitorCode];\n if (!featureFlagVariations) {\n return buildExports.Err(new KameleoonError(KameleoonException.StorageRead, visitorCode));\n }\n return buildExports.Ok(featureFlagVariations);\n }\n getVariation({ visitorCode, visitorIdentifier, featureFlag, targetingData, packageInfo, clientConfiguration, dataManager, legalConsent, track = true, withAssignment = false, }) {\n KameleoonLogger.debug `CALL: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment})`;\n const { rules, featureKey, id: featureFlagId, defaultVariationKey, } = featureFlag;\n const consent = clientConfiguration.isConsentRequired\n ? legalConsent\n : LegalConsent.Given;\n for (const rule of rules) {\n const { segment, experimentId, id, exposition, respoolTime, variationByExposition, } = rule;\n const forcedVariationData = this.getForcedExperimentVariation(visitorCode, rule.experimentId);\n let forcedVariation = null;\n if (forcedVariationData.ok) {\n forcedVariation = forcedVariationData.data;\n if (forcedVariation && forcedVariation.forceTargeting) {\n KameleoonLogger.info `Visitor ${visitorCode} has been forced targeted for ${rule}`;\n const targetedVariation = this.createAndSaveForcedTargetedVariation(visitorCode, featureFlag, rule, forcedVariation, track, withAssignment);\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return buildExports.Ok(targetedVariation);\n }\n }\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n packageInfo,\n clientConfiguration,\n dataManager,\n variationConfiguration: this,\n });\n if (!targetingResult.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetingResult})`;\n return targetingResult;\n }\n if (!targetingResult.data) {\n continue;\n }\n KameleoonLogger.info `Visitor ${visitorCode} has been targeted for ${rule}`;\n if (forcedVariation) {\n const targetedVariation = this.createAndSaveForcedTargetedVariation(visitorCode, featureFlag, rule, forcedVariation, track, withAssignment);\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return buildExports.Ok(targetedVariation);\n }\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(id),\n });\n KameleoonLogger.debug `Calculated ruleHash: ${ruleHash} for code: ${visitorIdentifier}`;\n if (ruleHash <= exposition) {\n // Checking if the evaluation is blocked due to the consent policy\n if (consent == LegalConsent.NotGiven &&\n rule.type == RuleType.EXPERIMENTATION) {\n const behaviour = clientConfiguration.consentBlockingBehaviour;\n if (behaviour == ConsentBlockingBehaviour.PartiallyBlocked) {\n break;\n }\n return buildExports.Err(new KameleoonError(KameleoonException.FeatureFlagEnvironmentDisabled, `Evaluation of ${rule} is blocked because consent is not provided for visitor '${visitorCode}'`));\n }\n // evaluate with CB scores if applicable\n let variation = this.evaluateCBScores(rule, visitorIdentifier, targetingData);\n if (!variation) {\n const variationHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime,\n id: String(experimentId),\n });\n KameleoonLogger.debug `Calculated variationHash: ${variationHash} for code: ${visitorIdentifier}`;\n variation = Utilities.getVariationByHash(variationByExposition, variationHash);\n }\n if (variation) {\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [experimentId]: {\n variationId: variation.variationId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n const targetedVariation = {\n variationId: variation.variationId,\n variationKey: variation.variationKey,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n };\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return buildExports.Ok(targetedVariation);\n }\n }\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n const targetedVariation = {\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: true,\n };\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return buildExports.Ok(targetedVariation);\n }\n }\n const targetedVariation = {\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n isTargetedRule: false,\n };\n KameleoonLogger.debug `RETURN: VariationConfiguration.getVariation(visitorCode: ${visitorCode}, visitorIdentifier: ${visitorIdentifier}, featureFlag: ${featureFlag}, targetingData: ${targetingData}, packageInfo: ${packageInfo}, clientConfiguration, dataManager, withAssignment: ${withAssignment}) -> (targetedVariation: ${targetedVariation})`;\n return buildExports.Ok(targetedVariation);\n }\n createAndSaveForcedTargetedVariation(visitorCode, featureFlag, rule, forcedVariation, track, withAssignment) {\n const targetedVariation = {\n variationKey: forcedVariation.varByExp.variationKey,\n variationId: forcedVariation.varByExp.variationId,\n rule,\n featureFlagId: featureFlag.id,\n featureKey: featureFlag.featureKey,\n experimentId: rule.experimentId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n };\n if (withAssignment) {\n this.updateStoredVariations(visitorCode, {\n [rule.experimentId]: {\n variationId: targetedVariation.variationId,\n isTargetedRule: rule.type === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n return targetedVariation;\n }\n updateStoredVariations(visitorCode, variationData) {\n KameleoonLogger.debug `CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData})`;\n const result = this.storage.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData}) -> (result: ${result})`;\n return result;\n }\n let updatedVariationData = result.data;\n if (!updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode] = {};\n }\n for (const experimentId in variationData) {\n updatedVariationData[visitorCode][experimentId] =\n variationData[experimentId];\n }\n const resultWrite = this.storage.write(updatedVariationData);\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${visitorCode}, variationData: ${variationData}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n getVariationData(visitorCode, filter) {\n const result = this.getStoredVariations(visitorCode);\n if (!result.ok) {\n return [];\n }\n const resultData = [];\n for (const [experimentId, variationData] of Object.entries(result.data)) {\n if (filter(variationData.status)) {\n resultData.push({\n experimentId: Number(experimentId),\n variationId: variationData.variationId,\n isTargetedRule: variationData.isTargetedRule,\n });\n }\n }\n return resultData;\n }\n updateForcedExperimentVariation(visitorCode, experimentId, forcedExperimentVariation) {\n KameleoonLogger.debug `CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation})`;\n const result = this.storageForcedExperimentVariations.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation}) -> (result: ${result})`;\n return result;\n }\n let updatedForcedVariationData = result.data;\n if (!updatedForcedVariationData[visitorCode]) {\n updatedForcedVariationData[visitorCode] = {};\n }\n if (forcedExperimentVariation) {\n updatedForcedVariationData[visitorCode][experimentId] =\n forcedExperimentVariation;\n }\n else {\n delete updatedForcedVariationData[visitorCode][experimentId];\n }\n const resultWrite = this.storageForcedExperimentVariations.write(updatedForcedVariationData);\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}, forcedExperimentVariation: ${forcedExperimentVariation}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n updateForcedFeatureVariations(visitorCode, forcedFeatureVariations) {\n KameleoonLogger.debug `CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations})`;\n const result = this.storageForcedFeatureVariations.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations}) -> (result: ${result})`;\n return result;\n }\n let updatedVariationData = result.data;\n if (!updatedVariationData[0]) {\n updatedVariationData[0] = {};\n }\n if (!updatedVariationData[1]) {\n updatedVariationData[1] = {};\n }\n const updatedForcedFeatureVariationData = updatedVariationData[0];\n const updatedSimulatedFeatureVariationData = updatedVariationData[1];\n if (!updatedForcedFeatureVariationData[visitorCode]) {\n updatedForcedFeatureVariationData[visitorCode] = {};\n }\n if (!updatedSimulatedFeatureVariationData[visitorCode]) {\n updatedSimulatedFeatureVariationData[visitorCode] = {};\n }\n forcedFeatureVariations.forEach((forcedFeatureVariation) => {\n const targetData = forcedFeatureVariation.simulated\n ? updatedSimulatedFeatureVariationData[visitorCode]\n : updatedForcedFeatureVariationData[visitorCode];\n targetData[forcedFeatureVariation.featureKey] = forcedFeatureVariation;\n });\n const resultWrite = this.storageForcedFeatureVariations.write(updatedVariationData);\n KameleoonLogger.debug `RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${visitorCode}, forcedFeatureVariations: ${forcedFeatureVariations}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n clearSimulatedVariations(visitorCode) {\n var _a;\n KameleoonLogger.debug `CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode})`;\n const result = this.storageForcedFeatureVariations.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode}) -> (result: ${result})`;\n return result;\n }\n let resultWrite;\n const updatedVariationData = result.data;\n if ((_a = updatedVariationData === null || updatedVariationData === void 0 ? void 0 : updatedVariationData[1]) === null || _a === void 0 ? void 0 : _a[visitorCode]) {\n delete updatedVariationData[1][visitorCode];\n resultWrite =\n this.storageForcedFeatureVariations.write(updatedVariationData);\n }\n else {\n resultWrite = buildExports.Ok();\n }\n KameleoonLogger.debug `RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${visitorCode}) -> (resultWrite: ${resultWrite})`;\n return resultWrite;\n }\n getForcedFeatureVariation(visitorCode, featureKey) {\n var _a, _b, _c, _d;\n KameleoonLogger.debug `CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n const result = this.storageForcedFeatureVariations.read();\n if (!result.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (simulatedResult: ${result})`;\n return result;\n }\n const simulatedData = (_b = (_a = result.data[1]) === null || _a === void 0 ? void 0 : _a[visitorCode]) === null || _b === void 0 ? void 0 : _b[featureKey];\n if (simulatedData) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (simulatedData: ${simulatedData})`;\n return buildExports.Ok(simulatedData);\n }\n const forcedData = (_d = (_c = result.data[0]) === null || _c === void 0 ? void 0 : _c[visitorCode]) === null || _d === void 0 ? void 0 : _d[featureKey];\n KameleoonLogger.debug `RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (forcedData: ${forcedData})`;\n return buildExports.Ok(forcedData);\n }\n getForcedExperimentVariation(visitorCode, experimentId) {\n var _a;\n KameleoonLogger.debug `CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId})`;\n const forcedResult = this.storageForcedExperimentVariations.read();\n if (!forcedResult.ok) {\n KameleoonLogger.debug `RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}) -> (forcedResult: ${forcedResult})`;\n return forcedResult;\n }\n const forcedData = (_a = forcedResult.data[visitorCode]) === null || _a === void 0 ? void 0 : _a[experimentId];\n KameleoonLogger.debug `RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${visitorCode}, experimentId: ${experimentId}) -> (forcedExperiment: ${forcedData})`;\n return buildExports.Ok(forcedData);\n }\n parseForcedVariationData(simulatedVariation, simulated = false) {\n const featureFlag = this.clientConfiguration.featureFlags.get(simulatedVariation.featureKey);\n if (!featureFlag) {\n KameleoonLogger.error `Simulated feature flag '${simulatedVariation.featureKey}' not found`;\n return null;\n }\n let forcedVariation = null;\n if (simulatedVariation.experimentId === 0) {\n forcedVariation = {\n featureKey: simulatedVariation.featureKey,\n rule: null,\n varByExp: null,\n simulated: simulated,\n };\n return forcedVariation;\n }\n for (const rule of featureFlag.rules) {\n if (simulatedVariation.experimentId !== rule.experimentId) {\n continue;\n }\n const varByExp = rule.variationByExposition.find((varByExp) => varByExp.variationId === simulatedVariation.variationId);\n if (varByExp) {\n forcedVariation = {\n featureKey: simulatedVariation.featureKey,\n rule: {\n type: rule.type,\n experimentId: rule.experimentId,\n },\n varByExp: {\n variationKey: varByExp.variationKey,\n variationId: varByExp.variationId,\n },\n simulated: simulated,\n };\n return forcedVariation;\n }\n }\n KameleoonLogger.error `Simulated variation ${simulatedVariation.variationId} not found`;\n return null;\n }\n simulatedVariationFromJson(featureKey, data) {\n KameleoonLogger.debug `CALL: VariationConfiguration.simulatedVariationFromJson(featureKey: ${featureKey}, data: ${data})`;\n if (!this.isSimulatedVariationJson(data)) {\n return null;\n }\n const forcedVariation = this.parseForcedVariationData({\n featureKey,\n variationId: data.varId,\n experimentId: data.expId,\n }, true);\n KameleoonLogger.debug `RETURN: VariationConfiguration.simulatedVariationFromJson(featureKey: ${featureKey}, data: ${data}) -> (forcedVariation: ${forcedVariation})`;\n return forcedVariation;\n }\n isSimulatedVariationJson(value) {\n return value && (typeof value.expId === 'number' || value.expId === null);\n }\n evaluateCBScores(rule, visitorIdentifier, targetingData) {\n if (!targetingData || !targetingData.cbScores) {\n return null;\n }\n KameleoonLogger.debug `CALL: KameleoonClientImpl.evaluateCBScores(rule: ${rule}, targetingData: ${targetingData}, visitorIdentifier: ${visitorIdentifier})`;\n const experimentId = rule.experimentId;\n const varIdGroupByScores = new CBScores(targetingData.cbScores.cbs)\n .getValues()\n .get(experimentId);\n let variation = null;\n if (varIdGroupByScores !== undefined) {\n const varByExps = rule.variationByExposition;\n const varByExpExistInCBS = varIdGroupByScores\n .map((varGroup) => varByExps.filter((varByExp) => varGroup.ids.includes(varByExp.variationId)))\n .find((varByExpExistInCBS) => varByExpExistInCBS.length > 0);\n if (varByExpExistInCBS) {\n let idx = 0;\n if (varByExpExistInCBS.length > 1) {\n const variationHash = Hasher.getHashDouble({\n visitorIdentifier,\n respoolTime: rule.respoolTime,\n id: String(experimentId),\n });\n KameleoonLogger.debug `Calculated cbs hash ${variationHash} for code ${visitorIdentifier}`;\n idx = Math.min(Math.floor(variationHash * varByExpExistInCBS.length), varByExpExistInCBS.length - 1);\n }\n variation = varByExpExistInCBS[idx];\n }\n }\n KameleoonLogger.debug `RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${rule}, targetingData: ${targetingData}, visitorIdentifier: ${visitorIdentifier}) -> (variation: ${variation})`;\n return variation;\n }\n}\n\nconst REAL_TIME_EVENT = 'configuration-update-event';\n\n// --- Note ---\n// Named `KameleoonEventSource` to avoid collision with native `EventSource`\nclass KameleoonEventSource {\n constructor({ siteCode, externalEventSource, urlProvider, }) {\n this.url = urlProvider.getEventSourceUrl();\n this.siteCode = siteCode;\n this.eventSource = externalEventSource;\n this.isConnectionOpen = false;\n }\n get isOpen() {\n return this.isConnectionOpen;\n }\n open(onEvent) {\n this.eventSource.open({\n onEvent: this.handleMessage(onEvent),\n url: this.url,\n eventType: REAL_TIME_EVENT,\n });\n this.isConnectionOpen = true;\n KameleoonLogger.info `Established a new SSE connection with: ${this.url}`;\n }\n close() {\n this.eventSource.close();\n this.isConnectionOpen = false;\n KameleoonLogger.info `SSE connection: '${this.url}' was successfully closed`;\n }\n onError(callback) {\n if (!this.eventSource.onError) {\n KameleoonLogger.warning(\"EventSource does not have `onError` method provided. Real-time errors won't be handled.\");\n return;\n }\n this.eventSource.onError(callback);\n }\n handleMessage(onEvent) {\n const onMessage = (message) => {\n KameleoonLogger.debug `Received new message from: ${this.url}`;\n const event = JSON.parse(message.data);\n const { siteCode: eventSiteCode, ts } = event;\n if (this.siteCode === eventSiteCode) {\n onEvent(ts);\n }\n };\n return onMessage;\n }\n}\n\nvar Byte;\n(function (Byte) {\n Byte[Byte[\"Kb\"] = 1000] = \"Kb\";\n Byte[Byte[\"Mb\"] = 1000000] = \"Mb\";\n Byte[Byte[\"Gb\"] = 1000000000] = \"Gb\";\n})(Byte || (Byte = {}));\nconst MAX_BODY_SIZE = 10 * Byte.Mb;\nconst SYMBOL_SIZE = 4;\n\nclass BodyProvider {\n constructor(prng) {\n this.currentSize = 0;\n this.resultBody = [];\n this.hasUserAgent = false;\n this.trackingVisitors = {};\n this.prng = prng;\n }\n getTrackingBody() {\n const result = {\n body: this.resultBody.join('\\n'),\n hasUserAgent: this.hasUserAgent,\n };\n this.cleanup();\n return result;\n }\n addData({ visitorCode, variationData, visitorData, userAgent, isConsentProvided, isMappingIdentifier, }) {\n const lines = [];\n const variationDataLines = this.getVariationDataLines(variationData);\n const visitorDataLines = this.getVisitorDataLines(visitorData);\n lines.push(...variationDataLines, ...visitorDataLines);\n return this.addVisitorTrackingLines({\n visitorCode,\n lines,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n });\n }\n getVisitorDataLines(visitorData) {\n const lines = [];\n for (const data of visitorData) {\n let nonce;\n if (!(data instanceof StaticData) &&\n (data.data.type === KameleoonData.Conversion ||\n data.data.type === KameleoonData.PageView)) {\n const nonceValue = data.data.nonce;\n if (nonceValue) {\n nonce = nonceValue;\n }\n else {\n nonce = Utilities.getNonce(this.prng);\n data.data.nonce = nonce;\n }\n }\n if (!nonce) {\n nonce = Utilities.getNonce(this.prng);\n }\n lines.push(data.url + UrlParameter.Nonce + nonce);\n }\n return lines;\n }\n getVariationDataLines(variationData) {\n const lines = [];\n variationData.forEach((item) => {\n lines.push(UrlEventType.Experiment +\n UrlParameter.Id +\n item.experimentId +\n UrlParameter.VariationId +\n item.variationId +\n UrlParameter.Nonce +\n Utilities.getNonce(this.prng));\n });\n return lines;\n }\n prepareVisitorBody(visitorCode) {\n const visitorData = this.trackingVisitors[visitorCode];\n if (!visitorData) {\n return buildExports.Err();\n }\n const { lines, userAgent, isMappingIdentifier, isConsentProvided } = visitorData;\n const identifier = this.getIdentifier(visitorCode, isMappingIdentifier);\n if (lines.length) {\n lines.forEach((value, index) => {\n lines[index] = value + identifier;\n });\n KameleoonLogger.debug `Sending tracking request for unsent data ${lines} of visitor ${visitorCode} with given (or not required) consent ${isConsentProvided}`;\n }\n else if (isConsentProvided) {\n const activityLine = this.getActivityLine();\n lines.push(activityLine + identifier);\n KameleoonLogger.debug `Sending tracking request for activity of visitor ${visitorCode} with given consent`;\n }\n else {\n KameleoonLogger.debug `No data to send for visitor ${visitorCode} with no consent`;\n }\n if (userAgent && lines.length) {\n lines[0] += UrlParameter.UserAgent + userAgent;\n this.hasUserAgent = true;\n }\n // --- Note ---\n // Improve after `ts-res` chaining update\n const result = this.checkSize(lines);\n if (result.ok) {\n this.resultBody.push(...lines);\n }\n return result;\n }\n cleanup() {\n this.currentSize = 0;\n this.resultBody = [];\n this.hasUserAgent = false;\n this.trackingVisitors = {};\n }\n checkSize(lines) {\n let size = 0;\n size += lines.reduce((acc, line) => acc + line.length * SYMBOL_SIZE, 0);\n if (size + this.currentSize > MAX_BODY_SIZE) {\n return buildExports.Err();\n }\n this.currentSize += size;\n return buildExports.Ok();\n }\n addVisitorTrackingLines({ visitorCode, lines, userAgent, isConsentProvided, isMappingIdentifier, }) {\n if (!this.trackingVisitors[visitorCode]) {\n this.trackingVisitors[visitorCode] = {\n isMappingIdentifier,\n isConsentProvided,\n userAgent,\n lines,\n };\n }\n else {\n if (userAgent) {\n this.trackingVisitors[visitorCode].userAgent = userAgent;\n }\n this.trackingVisitors[visitorCode].lines.push(...lines);\n }\n return this.prepareVisitorBody(visitorCode);\n }\n getActivityLine() {\n return (UrlEventType.Activity + UrlParameter.Nonce + Utilities.getNonce(this.prng));\n }\n getIdentifier(visitorCode, isMappingIdentifier) {\n const identifier = isMappingIdentifier\n ? UrlParameter.MappingValue\n : UrlParameter.VisitorCode;\n return identifier + encodeURIComponent(visitorCode);\n }\n}\n\nclass Tracker {\n constructor({ dataManager, trackingStorage, variationConfiguration, trackingInterval, requester, prng, clientConfiguration, }) {\n this.intervalId = null;\n KameleoonLogger.debug `CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng, clientConfiguration)`;\n this.dataManager = dataManager;\n this.trackingStorage = trackingStorage;\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.bodyProvider = new BodyProvider(prng);\n this.clientConfiguration = clientConfiguration;\n try {\n this.intervalId = setInterval(() => {\n this.sendDataAll();\n }, trackingInterval);\n }\n catch (err) {\n this.intervalId && clearInterval(this.intervalId);\n throw err;\n }\n KameleoonLogger.debug `RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${trackingInterval}, requester, prng, clientConfiguration)`;\n }\n scheduleVisitor(visitorCode, isConsentProvided) {\n KameleoonLogger.debug `CALL: Tracker.scheduleVisitor(visitorCode: ${visitorCode}, isConsentProvided: ${isConsentProvided})`;\n this.trackingStorage.read().and((trackingData) => {\n trackingData.scheduledVisitors[`_${visitorCode}`] = { isConsentProvided };\n this.trackingStorage.write(trackingData);\n });\n KameleoonLogger.debug `RETURN: Tracker.scheduleVisitor(visitorCode: ${visitorCode}, isConsentProvided: ${isConsentProvided})`;\n }\n checkIsIdentifier(visitorCode) {\n var _a, _b;\n const isUniqueIdentifier = this.dataManager.isUniqueIdentifier(visitorCode);\n const mappingIdentifier = (_b = (_a = this.dataManager.getMappingIdentifier(visitorCode)) === null || _a === void 0 ? void 0 : _a.mappingIdentifier) !== null && _b !== void 0 ? _b : visitorCode;\n let isMappingIdentifier = false;\n // --- Note ---\n // This part is a workaround for Data API\n // If there's is no unique identifier for the visitor\n // We do reconciliation for visitor with himself\n if (isUniqueIdentifier) {\n const linkedVisitor = this.dataManager.getLinkedVisitor(visitorCode);\n const index = this.dataManager.identifierCustomDataIndex;\n if (!linkedVisitor && typeof index === 'number') {\n this.dataManager.storeData({\n visitorCode,\n data: [new CustomData$1(index, visitorCode)],\n });\n }\n else {\n isMappingIdentifier = true;\n }\n }\n return isMappingIdentifier && visitorCode != mappingIdentifier;\n }\n getUserAgent(visitorCode) {\n const targetingData = this.dataManager.getVisitorData(visitorCode);\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n return undefined;\n }\n sendDataAll() {\n return __awaiter(this, void 0, void 0, function* () {\n const storageResult = this.trackingStorage.read();\n if (!storageResult.ok) {\n return;\n }\n const { scheduledVisitors } = storageResult.data;\n yield this.sendData(scheduledVisitors);\n });\n }\n sendDataForVisitor(visitorCode, isConsentProvided) {\n return __awaiter(this, void 0, void 0, function* () {\n const storageResult = this.trackingStorage.read();\n if (!storageResult.ok) {\n return;\n }\n yield this.sendData({ [`_${visitorCode}`]: { isConsentProvided } });\n });\n }\n sendData(scheduledVisitors) {\n return __awaiter(this, void 0, void 0, function* () {\n const pendingData = {};\n const trackingVisitorCodes = [];\n const trackedVisitors = [];\n for (const [visitorCode, { isConsentProvided }] of Object.entries(scheduledVisitors)) {\n let targetVisitorCode = visitorCode.startsWith('_')\n ? visitorCode.substring(1)\n : visitorCode;\n const isMappingIdentifier = this.checkIsIdentifier(targetVisitorCode);\n const userAgent = this.getUserAgent(targetVisitorCode);\n const visitorData = this.getUnsentVisitorData(targetVisitorCode, isConsentProvided);\n const variationData = this.getUnsentVariationData(targetVisitorCode, isConsentProvided);\n const result = this.bodyProvider.addData({\n visitorCode: targetVisitorCode,\n variationData,\n visitorData,\n userAgent,\n isConsentProvided,\n isMappingIdentifier,\n });\n if (result.ok) {\n pendingData[targetVisitorCode] = {\n visitorData,\n variationData,\n };\n trackedVisitors.push({\n visitorCode: targetVisitorCode,\n isConsentProvided,\n });\n trackingVisitorCodes.push(visitorCode);\n }\n else {\n KameleoonLogger.warning('Visitor data to be tracked exceeded the request size limit. Some visitor data is kept to be sent later.' +\n ' If it is not caused by the peak load, decreasing the tracking interval is recommended.');\n break;\n }\n }\n const { body, hasUserAgent } = this.bodyProvider.getTrackingBody();\n if (trackingVisitorCodes.length !== 0) {\n this.trackingStorage.read().and((trackingData) => {\n trackingVisitorCodes.forEach((visitorCode) => {\n delete trackingData.scheduledVisitors[visitorCode];\n });\n this.trackingStorage.write(trackingData);\n });\n }\n if (!body) {\n return;\n }\n const result = yield this.requester.track(body, hasUserAgent);\n if (result.ok) {\n KameleoonLogger.info `Successful request for tracking visitors: ${trackedVisitors}, data: ${pendingData}`;\n this.updateDataStatus(pendingData, TrackingStatus.Sent);\n }\n else {\n KameleoonLogger.error('Tracking request failed');\n KameleoonLogger.info `Failed request for tracking visitors: ${trackedVisitors}, data: ${pendingData}`;\n this.updateDataStatus(pendingData, TrackingStatus.Unsent);\n let notTrackedVisitors = {};\n for (let { visitorCode, isConsentProvided } of trackedVisitors) {\n visitorCode = `_${visitorCode}`;\n notTrackedVisitors[visitorCode] = {\n isConsentProvided: isConsentProvided,\n };\n }\n this.addNotTrackedVisitors(notTrackedVisitors);\n }\n });\n }\n addNotTrackedVisitors(notTrackedVisitors) {\n const storageResult = this.trackingStorage.read();\n if (!storageResult.ok) {\n return;\n }\n const { scheduledVisitors } = storageResult.data;\n Object.entries(notTrackedVisitors).forEach(([visitorCode, { isConsentProvided }]) => {\n if (!scheduledVisitors[visitorCode]) {\n scheduledVisitors[visitorCode] = { isConsentProvided };\n }\n });\n this.trackingStorage.write({\n scheduledVisitors: scheduledVisitors,\n });\n }\n updateDataStatus(data, status) {\n let updatedData = {};\n for (const [visitorCode, { visitorData, variationData }] of Object.entries(data)) {\n const visitorDataForUpdate = visitorData\n .filter((dataItem) => !(dataItem instanceof StaticData))\n .map((dataItem) => {\n const item = dataItem;\n item.status = status;\n return item;\n });\n if (visitorDataForUpdate.length) {\n updatedData[visitorCode] = visitorDataForUpdate;\n }\n const experimentIdList = variationData.map((dataItem) => String(dataItem.experimentId));\n this.variationConfiguration.updateDataStatus({\n visitorCode,\n experimentIdList,\n status,\n });\n }\n if (Object.keys(updatedData).length === 0) {\n return;\n }\n if (status === TrackingStatus.Sent) {\n this.dataManager.storeTrackedData(updatedData);\n }\n else {\n this.dataManager.storeDataForVisitors(updatedData, false);\n }\n }\n getUnsentVisitorData(visitorCode, isConsentProvided) {\n const unsentData = this.dataManager.getUnsentData(visitorCode);\n const resultData = [];\n if (!unsentData.length) {\n return [];\n }\n for (const data of unsentData) {\n if (!data.url) {\n continue;\n }\n if (!isConsentProvided &&\n (!this.clientConfiguration.hasAnyTargetedDeliveryRule ||\n data instanceof StaticData ||\n data.data.type !== KameleoonData.Conversion)) {\n continue;\n }\n resultData.push(data);\n }\n if (resultData.length) {\n const pendingData = resultData\n .filter((data) => !(data instanceof StaticData))\n .map((data) => {\n const item = data;\n item.status = TrackingStatus.Pending;\n return item;\n });\n this.dataManager.storeTrackedData({\n [visitorCode]: pendingData,\n });\n }\n return resultData;\n }\n getUnsentVariationData(visitorCode, isConsentProvided) {\n const unsentData = this.variationConfiguration.getUnsentData(visitorCode);\n const sentExperimentIds = new Set();\n if (!unsentData.length) {\n return [];\n }\n const resultData = unsentData.filter((item) => {\n const isIncluded = item.isTargetedRule || isConsentProvided;\n if (isIncluded) {\n sentExperimentIds.add(String(item.experimentId));\n }\n return isIncluded;\n });\n this.variationConfiguration.updateDataStatus({\n visitorCode,\n experimentIdList: Array.from(sentExperimentIds),\n status: TrackingStatus.Pending,\n });\n return resultData;\n }\n}\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * for communicating with Kameleoon JavaScript SDK Core, when new instance is created\n */\nclass KameleoonClient {\n /**\n * @param {SDKCoreParameters} sdkCoreParameters - parameters for initializing sdk core\n */\n constructor({ siteCode, dependencies, configuration, internalConfiguration, stubMode, }) {\n var _a;\n this.initialized = false;\n this.stubMode = stubMode;\n if (stubMode) {\n this.variationConfiguration = {};\n this.clientConfiguration = {};\n this.dataManager = {};\n this.consentDataStorage = {};\n this.trackingCache = {};\n this.requester = {};\n this.externalPackageInfo = {};\n this.visitorCodeManager = {};\n this.eventManager = {};\n this.tracker = {};\n this.environment = '';\n return;\n }\n const logger = internalConfiguration === null || internalConfiguration === void 0 ? void 0 : internalConfiguration.externals.externalLogger;\n if (logger) {\n KameleoonLogger.setLogger(logger);\n }\n ConditionFactoryInstance.setConditionFactoryInstance(new ConditionFactory());\n KameleoonLogger.debug `CALL: new KameleoonClient(siteCode: ${siteCode}, dependencies: ${dependencies}, configuration: ${configuration})`;\n const { settings: clientSettings } = new ClientSettings(siteCode, configuration);\n this.environment = clientSettings.environment;\n const { externalStorage, externalEventSource, externalPackageInfo, externalVisitorCodeManager, externalRequester, externalPRNG, customDataManager, } = internalConfiguration.externals;\n const { useAbortController } = internalConfiguration.settings;\n const trackingCache = new CacheManager(CACHE_CLEANUP_TIMEOUT);\n const clientDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.ClientData);\n const variationDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.VariationData);\n const forcedVariationDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.ForcedExperimentVariation);\n const simulatedVariationDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.ForcedFeatureVariation);\n const consentDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.ConsentData);\n const trackingStorage = new DataStorage(externalStorage, KameleoonStorageKey.TrackingData);\n let dataManager = customDataManager;\n if (!dataManager) {\n const targetingDataStorage = new DataStorage(externalStorage, KameleoonStorageKey.TargetingData);\n const dataInfoStorage = new DataStorage(externalStorage, KameleoonStorageKey.DataInfo);\n dataManager = new DataManager({\n dataStorage: targetingDataStorage,\n infoStorage: dataInfoStorage,\n cleanupInterval: clientSettings.cleanupInterval,\n packageInfo: externalPackageInfo,\n });\n }\n const urlProvider = (_a = dependencies === null || dependencies === void 0 ? void 0 : dependencies.urlProvider) !== null && _a !== void 0 ? _a : new UrlProvider();\n urlProvider.initialize({\n domain: clientSettings.networkDomain,\n siteCode: clientSettings.siteCode,\n packageInfo: externalPackageInfo,\n environment: clientSettings.environment,\n });\n const requester = new Requester({\n urlProvider,\n useAbortController,\n packageInfo: externalPackageInfo,\n externalRequester: externalRequester,\n requestTimeout: clientSettings.requestTimeout,\n trackRetryDelay: clientSettings.trackRetryDelay,\n });\n const eventSource = new KameleoonEventSource({\n siteCode: clientSettings.siteCode,\n externalEventSource,\n urlProvider,\n });\n const eventManager = new EventManager();\n const clientConfiguration = new ClientConfiguration({\n urlProvider,\n storage: clientDataStorage,\n updateInterval: clientSettings.updateInterval,\n dataManager,\n eventManager,\n requester,\n eventSource,\n externalVisitorCodeManager,\n externalPackageInfo,\n defaultDataFile: configuration === null || configuration === void 0 ? void 0 : configuration.defaultDataFile,\n });\n const variationConfiguration = new VariationConfiguration(variationDataStorage, forcedVariationDataStorage, simulatedVariationDataStorage, externalVisitorCodeManager, clientConfiguration);\n const tracker = new Tracker({\n dataManager,\n trackingStorage,\n variationConfiguration,\n requester,\n trackingInterval: clientSettings.trackingInterval,\n prng: externalPRNG,\n clientConfiguration,\n });\n this.tracker = tracker;\n this.variationConfiguration = variationConfiguration;\n this.requester = requester;\n this.trackingCache = trackingCache;\n this.dataManager = dataManager;\n this.clientConfiguration = clientConfiguration;\n this.externalPackageInfo = externalPackageInfo;\n this.consentDataStorage = consentDataStorage;\n this.visitorCodeManager = externalVisitorCodeManager;\n this.eventManager = eventManager;\n if (clientSettings.cleanupInterval !== null) {\n new StorageCleanupManager(externalStorage, clientSettings.cleanupInterval);\n }\n KameleoonLogger.debug `RETURN: new KameleoonClient(siteCode: ${siteCode}, dependencies: ${dependencies}, configuration: ${configuration})`;\n }\n initialize() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.stubMode) {\n return false;\n }\n KameleoonLogger.info('CALL: KameleoonClient.initialize()');\n const result = yield this.clientConfiguration.initialize();\n result.throw();\n this.initialized = true;\n KameleoonLogger.info `RETURN: KameleoonClient.initialize() -> (result: ${result.ok})`;\n return result.ok;\n });\n }\n addData(visitorCodeOrParams, ...dataRest) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n const params = typeof visitorCodeOrParams === 'string'\n ? { visitorCode: visitorCodeOrParams, data: dataRest }\n : visitorCodeOrParams;\n const { visitorCode, data, track = true } = params;\n KameleoonLogger.info `CALL: KameleoonClient.addData(visitorCode: ${visitorCode}, track: ${track}, data: ${data})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n // assuming DataManager.storeData supports `track` (boolean) as discussed\n this.dataManager.storeData({ visitorCode, track, data }).throw();\n KameleoonLogger.info `RETURN: KameleoonClient.addData(visitorCode: ${visitorCode}, track: ${track}, data: ${data})`;\n }\n getRemoteVisitorData({ visitorCode, shouldAddData = true, filters = DEFAULT_VISITOR_DATA_FILTERS, }) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${visitorCode}, shouldAddData: ${shouldAddData}, filters: ${filters})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const { previousVisitAmount } = filters;\n if (typeof previousVisitAmount === 'number' &&\n (previousVisitAmount < 1 || previousVisitAmount > 25)) {\n throw new KameleoonError(KameleoonException.VisitAmount);\n }\n const isUniqueIdentifier = this.dataManager.isUniqueIdentifier(visitorCode);\n const result = yield this.requester.getVisitorData({\n visitorCode,\n filters,\n isMappingIdentifier: isUniqueIdentifier,\n });\n const data = result.throw();\n const { visitorData, storageVisitorData, visitsData, mappingIdentifier } = Parser.parseVisitorData({\n data,\n filters,\n visitorCode,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n for (const dataItem of storageVisitorData) {\n if (shouldAddData || this.dataManager.isPersistentCustomData(dataItem)) {\n this.addData(visitorCode, dataItem);\n }\n }\n // --- Note ---\n // Data on visits amount and time stamps is not returned to a user\n if (visitsData && shouldAddData) {\n this.addData(visitorCode, visitsData);\n }\n if ((filters === null || filters === void 0 ? void 0 : filters.visitorCode) && mappingIdentifier) {\n this.dataManager.setMappingIdentifier(visitorCode, mappingIdentifier);\n }\n KameleoonLogger.info `RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${visitorCode}, shouldAddData: ${shouldAddData}, filters: ${filters}) -> (visitorData: ${visitorData})`;\n return visitorData;\n });\n }\n trackConversion({ visitorCode, goalId, negative, revenue, metadata, }) {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info `CALL: KameleoonClient.trackConversion(visitorCode: ${visitorCode}, goalId: ${goalId}, negative: ${negative}, revenue: ${revenue}, metadata: ${metadata})`;\n this.addData(visitorCode, new Conversion$1({ goalId, revenue, negative, metadata }));\n this.flush(visitorCode);\n KameleoonLogger.info `RETURN: KameleoonClient.trackConversion(visitorCode: ${visitorCode}, goalId: ${goalId}, negative: ${negative}, revenue: ${revenue}, metadata: ${metadata})`;\n }\n _flushInternal(visitorCode, isInstant = false) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof visitorCode === 'string') {\n if (isInstant) {\n yield this.tracker.sendDataForVisitor(visitorCode, this._isConsentProvided(visitorCode));\n }\n else {\n this.tracker.scheduleVisitor(visitorCode, this._isConsentProvided(visitorCode));\n }\n }\n else {\n for (const visitorCodeKey of this.dataManager.unsentDataVisitors) {\n this.tracker.scheduleVisitor(visitorCodeKey, this._isConsentProvided(visitorCodeKey));\n }\n for (const visitorCodeKey of this.variationConfiguration.getVisitorsWithUnsentData()) {\n this.tracker.scheduleVisitor(visitorCodeKey, this._isConsentProvided(visitorCodeKey));\n }\n if (isInstant) {\n yield this.tracker.sendDataAll();\n }\n }\n });\n }\n flushInstant(visitorCode) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n const { visitorCode: validatedVisitorCode } = this._parseFlushParams(visitorCode);\n KameleoonLogger.info `CALL: KameleoonClient.flushInstant(visitorCode: ${visitorCode})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n yield this._flushInternal(validatedVisitorCode, true);\n KameleoonLogger.info `RETURN: KameleoonClient.flushInstant(visitorCode: ${visitorCode})`;\n });\n }\n flush(params) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n const { visitorCode, isInstant } = this._parseFlushParams(params);\n KameleoonLogger.info `CALL: KameleoonClient.flush(visitorCode: ${visitorCode}, instant: ${isInstant})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n this._flushInternal(visitorCode, isInstant);\n KameleoonLogger.info `RETURN: KameleoonClient.flush(visitorCode: ${visitorCode}, instant: ${isInstant})`;\n }\n _parseFlushParams(params) {\n var _a;\n let visitorCode;\n let isInstant = false;\n if (typeof params === 'string') {\n visitorCode = params;\n }\n else if (params) {\n visitorCode = params.visitorCode;\n isInstant = (_a = params.instant) !== null && _a !== void 0 ? _a : false;\n }\n if (visitorCode !== undefined) {\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n }\n return { visitorCode, isInstant };\n }\n getFeatureFlags() {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info('CALL: KameleoonClient.getFeatureFlags()');\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n const featureFlags = this.clientConfiguration.featureFlags;\n const resultFeatureFlags = [];\n featureFlags.forEach(({ id, featureKey }) => {\n resultFeatureFlags.push({\n id,\n key: featureKey,\n });\n });\n KameleoonLogger.info `RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${resultFeatureFlags})`;\n return resultFeatureFlags;\n }\n getVisitorFeatureFlags(visitorCode) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${visitorCode})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureFlags = [];\n activeVariations.forEach(({ featureFlagId, featureKey }) => {\n resultFeatureFlags.push({\n id: featureFlagId,\n key: featureKey,\n });\n });\n KameleoonLogger.info `RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${visitorCode}) -> (FeatureFlags: ${resultFeatureFlags})`;\n return resultFeatureFlags;\n }\n getVariation({ visitorCode, featureKey, track = true, }) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const variation = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track,\n }).throw();\n KameleoonLogger.info `RETURN: KameleoonClient.getVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (variation: ${variation})`;\n return variation;\n }\n getVariations({ visitorCode, onlyActive = false, track = true, }) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getVariations(visitorCode: ${visitorCode}, onlyActive: ${onlyActive}, track: ${track})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const variations = new Map();\n const featureFlags = this.clientConfiguration.featureFlags;\n for (const featureFlag of featureFlags.values()) {\n try {\n const variation = this._getFeatureVariation({\n visitorCode,\n featureKey: featureFlag.featureKey,\n track,\n });\n if (variation.ok &&\n (!onlyActive || variation.data.key !== OFF_VARIATION_KEY)) {\n variations.set(featureFlag.featureKey, variation.data);\n }\n }\n catch (err) {\n if (err instanceof KameleoonError &&\n err.type !== KameleoonException.FeatureFlagEnvironmentDisabled) {\n throw err;\n }\n }\n }\n KameleoonLogger.info `RETURN: KameleoonClient.getVariations(visitorCode: ${visitorCode}, onlyActive: ${onlyActive}, track: ${track}) -> (variations: ${variations})`;\n return variations;\n }\n getActiveFeatureFlags(visitorCode) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${visitorCode})`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const activeVariations = this._getActiveFeatureVariations(visitorCode);\n const resultFeatureList = new Map();\n activeVariations.forEach((variation) => {\n const { variationKey, featureKey, variationId, experimentId } = variation;\n let variables = [];\n if (variationId !== null && experimentId !== null) {\n variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n }\n const resultVariables = variables.map((variable) => Parser.parseFeatureVariable(variable).throw());\n resultFeatureList.set(variation.featureKey, {\n name: '',\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n });\n });\n KameleoonLogger.info `RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${visitorCode}) -> (FeatureFlags: ${resultFeatureList})`;\n return resultFeatureList;\n }\n getFeatureFlagVariationKey(visitorCode, featureKey) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const { key } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n KameleoonLogger.info `RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (variationKey: ${key})`;\n return key;\n }\n getFeatureFlagVariable({ visitorCode, featureKey, variableKey, }) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getFeatureFlagVariable(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variableKey: ${variableKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const { key: variationKey } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const variable = variables.find((item) => item.key === variableKey);\n if (!variable) {\n throw new KameleoonError(KameleoonException.FeatureFlagVariableNotFound, variableKey, visitorCode);\n }\n const { type, value } = Parser.parseFeatureVariable(variable).throw();\n const featureFlagVariable = { type, value };\n KameleoonLogger.info `RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variableKey: ${variableKey}) -> (FeatureFlagVariable: ${featureFlagVariable})`;\n return featureFlagVariable;\n }\n getFeatureFlagVariables(visitorCode, featureKey) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.getFeatureFlagVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const { key: variationKey } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track: true,\n }).throw();\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n const resultVariables = [];\n for (const variable of variables) {\n const parsedVariable = Parser.parseFeatureVariable(variable).throw();\n resultVariables.push(parsedVariable);\n }\n KameleoonLogger.info `RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}) -> (FeatureFlagVariables: ${resultVariables})`;\n return resultVariables;\n }\n isFeatureFlagActive(firstParam, secondParam) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n let [visitorCode, featureKey, track] = ['', '', true];\n if (typeof firstParam === 'string') {\n visitorCode = firstParam;\n featureKey = secondParam;\n }\n else {\n [visitorCode, featureKey] = [\n firstParam.visitorCode,\n firstParam.featureKey,\n ];\n if (firstParam.track !== undefined) {\n track = firstParam.track;\n }\n }\n KameleoonLogger.info `CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track ${track})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n try {\n const { key } = this._getFeatureVariation({\n visitorCode,\n featureKey,\n track,\n }).throw();\n const isActive = key !== OFF_VARIATION_KEY;\n KameleoonLogger.info `RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (isActive: ${isActive})`;\n return isActive;\n }\n catch (err) {\n if (err instanceof KameleoonError &&\n err.type === KameleoonException.FeatureFlagEnvironmentDisabled) {\n KameleoonLogger.info `RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (isActive: false)`;\n return false;\n }\n throw err;\n }\n }\n getRemoteData(key) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.stubMode) {\n return null;\n }\n KameleoonLogger.info `CALL: KameleoonClient.getRemoteData(key: ${key})`;\n const remoteData = yield this.requester.getRemoteData(key);\n KameleoonLogger.info `RETURN: KameleoonClient.getRemoteData(key: ${key}) -> (remoteData: ${remoteData})`;\n return remoteData.throw();\n });\n }\n getVisitorWarehouseAudience({ visitorCode, customDataIndex, warehouseKey, }) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.stubMode) {\n return null;\n }\n KameleoonLogger.info `CALL: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const data = yield this.getRemoteData(warehouseKey || visitorCode);\n if (!data) {\n throw new KameleoonError(KameleoonException.RemoteData, `No data found for ${warehouseKey || visitorCode} key`);\n }\n if (!data[WAREHOUSE_AUDIENCE_KEY] ||\n Object.keys(data[WAREHOUSE_AUDIENCE_KEY]).length === 0) {\n KameleoonLogger.info `RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey}) -> (customData: null)`;\n return null;\n }\n const customData = new CustomData$1(customDataIndex, ...Object.keys(data[WAREHOUSE_AUDIENCE_KEY]));\n this.dataManager.storeData({\n visitorCode,\n track: true,\n data: [customData],\n });\n KameleoonLogger.info `RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${visitorCode}, customDataIndex: ${customDataIndex}, warehouseKey: ${warehouseKey}) -> (customData: ${customData})`;\n return customData;\n });\n }\n onEvent(event, callback) {\n if (this.stubMode) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n KameleoonLogger.info `CALL: KameleoonClient.onEvent(event: ${event}, callback)`;\n if (!this.initialized) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n this.eventManager.addEventHandler(event, callback);\n KameleoonLogger.info `RETURN: KameleoonClient.onEvent(event: ${event}, callback)`;\n }\n getEngineTrackingCode(visitorCode) {\n if (this.stubMode) {\n return '';\n }\n KameleoonLogger.info `CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${visitorCode})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const trackingCode = Utilities.getTrackingCode(this.trackingCache, visitorCode);\n KameleoonLogger.info `RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${visitorCode}) -> (trackingCode: ${trackingCode})`;\n return trackingCode;\n }\n isInitialized() {\n KameleoonLogger.debug `CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`;\n return this.initialized;\n }\n setLogLevel(level) {\n KameleoonLogger.setLogLevel(level);\n }\n setForcedVariation({ visitorCode, experimentId, variationKey, forceTargeting = true, }) {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info `CALL: KameleoonClient.setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n this._setForcedVariation({\n visitorCode,\n experimentId,\n variationKey,\n forceTargeting,\n }).throw();\n KameleoonLogger.info `RETURN: KameleoonClient.setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n }\n evaluateAudiences(visitorCode) {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info `CALL: KameleoonClient.evaluateAudiences(visitorCode: ${visitorCode})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n const targetedSegments = [];\n const targetingData = this.dataManager.getVisitorData(visitorCode);\n for (let segment of this.clientConfiguration.segments.values()) {\n if (!segment.audienceTracking) {\n continue;\n }\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId: null,\n clientConfiguration: this.clientConfiguration,\n packageInfo: this.externalPackageInfo,\n dataManager: this.dataManager,\n variationConfiguration: this.variationConfiguration,\n });\n const isTargeted = targetingResult.ok && targetingResult.data;\n if (isTargeted) {\n KameleoonLogger.info `Visitor ${visitorCode} has been targeted for ${segment}`;\n targetedSegments.push(new TargetedSegment(Number(segment.id)));\n }\n }\n if (targetedSegments.length !== 0) {\n this.dataManager.storeData({ visitorCode, data: targetedSegments });\n }\n this.flush(visitorCode);\n KameleoonLogger.info `RETURN: KameleoonClient.evaluateAudiences(visitorCode: ${visitorCode})`;\n }\n getDataFile() {\n const dataFile = {\n featureFlags: new Map(),\n };\n if (this.stubMode) {\n return dataFile;\n }\n KameleoonLogger.debug `CALL: KameleoonClient.getDataFile()`;\n this.clientConfiguration.featureFlags.forEach((featureFlag, key) => {\n const variationsMap = new Map();\n featureFlag.variations.forEach((sourceVariation) => {\n var _a;\n const variablesMap = new Map();\n sourceVariation.variables.forEach((variable) => {\n try {\n const parsedVariable = Parser.parseFeatureVariable(variable).throw();\n variablesMap.set(variable.key, parsedVariable);\n }\n catch (err) {\n KameleoonLogger.error `Error parsing variable ${variable.key} of feature flag ${featureFlag.featureKey}: ${err}`;\n }\n });\n variationsMap.set(sourceVariation.key, {\n name: (_a = sourceVariation.name) !== null && _a !== void 0 ? _a : '',\n key: sourceVariation.key,\n id: null,\n experimentId: null,\n variables: variablesMap,\n });\n });\n const rules = featureFlag.rules.map((rule) => {\n const ruleVariations = new Map();\n rule.variationByExposition.forEach((varByExp) => {\n const baseVariation = variationsMap.get(varByExp.variationKey);\n if (!baseVariation)\n return;\n ruleVariations.set(baseVariation.key, {\n name: baseVariation.name,\n key: baseVariation.key,\n id: varByExp.variationId,\n experimentId: rule.experimentId,\n variables: baseVariation.variables,\n });\n });\n return { variations: ruleVariations };\n });\n dataFile.featureFlags.set(key, {\n variations: variationsMap,\n environmentEnabled: featureFlag.environmentEnabled,\n rules,\n defaultVariationKey: featureFlag.defaultVariationKey,\n });\n });\n KameleoonLogger.debug `RETURN: KameleoonClient.getDataFile() -> (dataFile: ${dataFile})`;\n return dataFile;\n }\n setUserConsent({ visitorCode, consent, setData, }) {\n if (this.stubMode) {\n return;\n }\n KameleoonLogger.info `CALL: KameleoonClient.setUserConsent(visitorCode: ${visitorCode}, consent: ${consent}, setData: ${setData})`;\n this.visitorCodeManager.validateVisitorCode(visitorCode).throw();\n this.updateConsentData(visitorCode, consent);\n if (consent) {\n setData({\n visitorCode,\n key: KameleoonStorageKey.VisitorCode,\n maxAge: DEFAULT_MAX_AGE,\n path: PATH,\n });\n }\n KameleoonLogger.info `RETURN: KameleoonClient.setUserConsent(visitorCode: ${visitorCode}, consent: ${consent}, setData: ${setData})`;\n }\n updateConsentData(visitorCode, consent) {\n const readResult = this.consentDataStorage.read();\n const legalConsent = consent ? LegalConsent.Given : LegalConsent.NotGiven;\n if (!readResult.ok) {\n if (readResult.error.type === KameleoonException.StorageEmpty) {\n this.consentDataStorage.write({\n [visitorCode]: {\n consent: legalConsent,\n },\n });\n }\n return;\n }\n const data = readResult.data;\n data[visitorCode] = {\n consent: legalConsent,\n };\n this.consentDataStorage.write(data);\n }\n getLegalConsent(visitorCode) {\n KameleoonLogger.debug `CALL: KameleoonClient.getLegalConsent(visitorCode: ${visitorCode})`;\n let legalConsent;\n const consentDataResult = this.consentDataStorage.read();\n legalConsent = consentDataResult.ok\n ? this.extractLegalConsent(consentDataResult.data[visitorCode])\n : LegalConsent.Unknown;\n KameleoonLogger.debug `RETURN: KameleoonClient.getLegalConsent(visitorCode: ${visitorCode}) -> (legalConsent: ${legalConsent})`;\n return legalConsent;\n }\n extractLegalConsent(consentData) {\n if (consentData === undefined)\n return LegalConsent.Unknown;\n if (typeof consentData === 'boolean') {\n return consentData ? LegalConsent.Given : LegalConsent.NotGiven;\n }\n const value = consentData.consent;\n if (typeof value === 'boolean')\n return value ? LegalConsent.Given : LegalConsent.NotGiven;\n return value;\n }\n _isConsentProvided(visitorCode) {\n KameleoonLogger.debug `CALL: KameleoonClient._isConsentProvided(visitorCode: ${visitorCode})`;\n const { isConsentRequired } = this.clientConfiguration;\n const isConsentProvided = !isConsentRequired ||\n this.getLegalConsent(visitorCode) == LegalConsent.Given;\n KameleoonLogger.debug `RETURN: KameleoonClient._isConsentProvided(visitorCode: ${visitorCode}) -> (isConsentProvided: ${isConsentProvided})`;\n return isConsentProvided;\n }\n _getFeatureVariables({ visitorCode, featureKey, variationKey, }) {\n KameleoonLogger.debug `CALL: KameleoonClient._getFeatureVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variationKey: ${variationKey})`;\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n if (!featureFlag) {\n throw new KameleoonError(KameleoonException.FeatureFlagConfigurationNotFound, featureKey);\n }\n const variation = featureFlag.variations.find((item) => item.key === variationKey);\n if (!variation) {\n throw new KameleoonError(KameleoonException.FeatureFlagVariationNotFound, variationKey, visitorCode);\n }\n KameleoonLogger.debug `RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${visitorCode}, featureKey: ${featureKey}, variationKey: ${variationKey}) -> (variables: ${variation.variables})`;\n return variation.variables;\n }\n // @deprecated\n // To be removed with the deprecated methods\n _getActiveFeatureVariations(visitorCode) {\n KameleoonLogger.debug `CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${visitorCode})`;\n const featureFlags = this.clientConfiguration.featureFlags;\n const activeVariations = [];\n for (const featureFlag of featureFlags.values()) {\n if (!featureFlag.environmentEnabled) {\n continue;\n }\n try {\n const evalExp = this._evaluate({\n visitorCode,\n featureFlag,\n track: false,\n save: false,\n });\n if (evalExp.variationKey !== OFF_VARIATION_KEY) {\n activeVariations.push({\n variationKey: evalExp.variationKey,\n variationId: evalExp.variationId,\n experimentId: evalExp.experimentId,\n featureFlagId: featureFlag.id,\n featureKey: featureFlag.featureKey,\n rule: null,\n isTargetedRule: evalExp.ruleType === RuleType.TARGETED_DELIVERY,\n });\n }\n }\n catch (err) {\n if (err instanceof KameleoonError) {\n if (err.type != KameleoonException.FeatureFlagEnvironmentDisabled) {\n KameleoonLogger.error `Unexpected error: ${err}`;\n }\n continue;\n }\n }\n }\n KameleoonLogger.debug `RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${visitorCode}) -> (activeVariations: ${activeVariations})`;\n return activeVariations;\n }\n _evaluate({ visitorCode, featureFlag, track, save, }) {\n KameleoonLogger.debug `CALL: KameleoonClient._evaluate(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, track: ${track}, save: ${save})`;\n let evalExp;\n let forcedVariation = null;\n const visitorData = this.dataManager.getVisitorData(visitorCode);\n const forcedVariationData = this.variationConfiguration.getForcedFeatureVariation(visitorCode, featureFlag.featureKey);\n if (forcedVariationData.ok) {\n forcedVariation = forcedVariationData.data;\n }\n if (forcedVariation) {\n evalExp = KameleoonClient.EvaluatedExperiment.fromForcedFeatureVariation(featureFlag.defaultVariationKey, forcedVariation);\n }\n else if (this._isVisitorNotInHoldout(visitorCode, track, save, featureFlag, visitorData) &&\n this._isFFUnrestrictedByMEGroup(visitorCode, featureFlag, visitorData)) {\n const visitorIdentifier = this._getCodeForHash(visitorCode, featureFlag.bucketingCustomDataIndex, visitorData);\n const legalConsent = this.getLegalConsent(visitorCode);\n const variationData = this.variationConfiguration\n .getVariation({\n visitorCode,\n visitorIdentifier,\n featureFlag,\n track,\n withAssignment: save,\n targetingData: visitorData,\n clientConfiguration: this.clientConfiguration,\n dataManager: this.dataManager,\n packageInfo: this.externalPackageInfo,\n legalConsent,\n })\n .throw();\n evalExp =\n KameleoonClient.EvaluatedExperiment.fromVariationData(variationData);\n }\n else {\n evalExp = KameleoonClient.EvaluatedExperiment.fromDefaultVariationKey(featureFlag.defaultVariationKey);\n }\n if (save &&\n !evalExp.isSimulated &&\n evalExp.experimentId !== null &&\n evalExp.variationId !== null) {\n this.variationConfiguration.updateStoredVariations(visitorCode, {\n [evalExp.experimentId]: {\n variationId: evalExp.variationId,\n isTargetedRule: evalExp.ruleType === RuleType.TARGETED_DELIVERY,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n this.eventManager.fireEvent(EventType.Evaluation, {\n featureKey: featureFlag.featureKey,\n variation: {\n key: evalExp.variationKey,\n experimentId: evalExp.experimentId,\n id: evalExp.variationId,\n },\n });\n KameleoonLogger.debug `RETURN: KameleoonClient._evaluate(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, track: ${track}, save: ${save}) -> (evalExp: ${evalExp})`;\n return evalExp;\n }\n _isFFUnrestrictedByMEGroup(visitorCode, featureFlag, visitorData) {\n const meGroupName = featureFlag.mutuallyExclusiveGroup;\n if (!meGroupName) {\n return true;\n }\n KameleoonLogger.debug `CALL: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, visitorData: ${visitorData})`;\n let selected = true;\n const meGroup = this.clientConfiguration.meGroups.get(meGroupName);\n if (meGroup) {\n const codeForHash = this._getCodeForHash(visitorCode, featureFlag.bucketingCustomDataIndex, visitorData);\n const hashMEGroup = Hasher.getHashDoubleForMEGroup(codeForHash, meGroupName);\n KameleoonLogger.debug `Calculated meGroup hash ${hashMEGroup} for code: ${codeForHash}, meGroup: ${meGroupName}`;\n selected = meGroup.getFeatureFlagByHash(hashMEGroup) === featureFlag;\n }\n KameleoonLogger.debug `RETURN: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${visitorCode}, featureFlag: ${featureFlag}, visitorData: ${visitorData}) -> (selected: ${selected})`;\n return selected;\n }\n _getFeatureVariation({ visitorCode, featureKey, track, }) {\n var _a, _b;\n KameleoonLogger.debug `CALL: KameleoonClient._getFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track})`;\n if (!this.initialized) {\n return buildExports.Err(new KameleoonError(KameleoonException.Initialization));\n }\n const featureFlags = this.clientConfiguration.featureFlags;\n const featureFlag = featureFlags.get(featureKey);\n if (!featureFlag) {\n return buildExports.Err(new KameleoonError(KameleoonException.FeatureFlagConfigurationNotFound, featureKey));\n }\n if (!featureFlag.environmentEnabled) {\n return buildExports.Err(new KameleoonError(KameleoonException.FeatureFlagEnvironmentDisabled, featureFlag.featureKey, this.environment));\n }\n const evalExp = this._evaluate({\n visitorCode,\n featureFlag,\n track,\n save: true,\n });\n const { experimentId, variationId, variationKey, isSimulated } = evalExp;\n let resultVariables = new Map();\n let hasJsCssVariables = false;\n try {\n const variables = this._getFeatureVariables({\n visitorCode,\n featureKey,\n variationKey,\n });\n variables.forEach((variable) => {\n if (!hasJsCssVariables &&\n (variable.type === VariableType.JS ||\n variable.type === VariableType.CSS)) {\n hasJsCssVariables = true;\n }\n const parsedVariable = Parser.parseFeatureVariable(variable).throw();\n resultVariables.set(variable.key, parsedVariable);\n });\n }\n catch (_) { }\n if (experimentId && typeof variationId === 'number' && !isSimulated) {\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n hasJsCssVariables,\n visitorCode,\n experimentId,\n variationId,\n });\n }\n if (track && !isSimulated) {\n this.tracker.scheduleVisitor(visitorCode, this._isConsentProvided(visitorCode));\n }\n const variationName = (_b = (_a = featureFlag.variations.find((item) => item.key === variationKey)) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '';\n const resultData = {\n name: variationName,\n key: variationKey,\n id: variationId,\n experimentId,\n variables: resultVariables,\n };\n KameleoonLogger.debug `RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${visitorCode}, featureKey: ${featureKey}, track: ${track}) -> (variation: ${resultData})`;\n return buildExports.Ok(resultData);\n }\n _isVisitorNotInHoldout(visitorCode, track, save, featureFlag, visitorData) {\n const holdout = this.clientConfiguration.holdout;\n if (!holdout) {\n return true;\n }\n KameleoonLogger.debug `CALL: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${visitorCode}, track: ${track}, save: ${save}, featureFlag: ${featureFlag}, visitorData: ${visitorData})`;\n let isNotInHoldout = true;\n // Checking if the evaluation is blocked due to the consent policy\n const legalConsent = this.clientConfiguration.isConsentRequired\n ? this.getLegalConsent(visitorCode)\n : LegalConsent.Given;\n if (legalConsent == LegalConsent.NotGiven) {\n const behaviour = this.clientConfiguration.consentBlockingBehaviour;\n if (behaviour == ConsentBlockingBehaviour.CompletelyBlocked) {\n throw new KameleoonError(KameleoonException.FeatureFlagEnvironmentDisabled, `Evaluation of holdout is blocked because consent is not provided for visitor '${visitorCode}'`);\n }\n }\n const codeForHash = this._getCodeForHash(visitorCode, featureFlag === null || featureFlag === void 0 ? void 0 : featureFlag.bucketingCustomDataIndex, visitorData);\n const holdoutHash = Hasher.getHashDouble({\n visitorIdentifier: codeForHash,\n respoolTime: null,\n id: String(holdout.experimentId),\n });\n KameleoonLogger.debug `Calculated holdoutHash: ${holdoutHash} for visitorCode: ${codeForHash}`;\n let varByExp = Utilities.getVariationByHash(holdout.variationByExposition, holdoutHash);\n if (varByExp !== null) {\n isNotInHoldout = varByExp.variationKey !== IN_HOLDOUT_VARIATION_KEY;\n if (save) {\n this.variationConfiguration.updateStoredVariations(visitorCode, {\n [holdout.experimentId]: {\n variationId: varByExp.variationId,\n isTargetedRule: false,\n status: track ? TrackingStatus.Unsent : TrackingStatus.Sent,\n },\n });\n }\n }\n KameleoonLogger.debug `RETURN: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${visitorCode}, track: ${track}, save: ${save}, featureFlag: ${featureFlag}, visitorData: ${visitorData}) -> (isNotInHoldout: ${isNotInHoldout})`;\n return isNotInHoldout;\n }\n _setForcedVariation({ visitorCode, experimentId, variationKey, forceTargeting = true, }) {\n KameleoonLogger.debug `CALL: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting})`;\n if (variationKey === null) {\n const writeResult = this.variationConfiguration.updateForcedExperimentVariation(visitorCode, experimentId, null);\n KameleoonLogger.debug `RETURN: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting}) -> (writeResult: ${writeResult})`;\n return writeResult;\n }\n let rule = null;\n let varByExp = null;\n rule = this.clientConfiguration.experimentMap.get(experimentId);\n if (!rule) {\n KameleoonLogger.error `Experiment with id ${experimentId} not found for visitor ${visitorCode}`;\n return buildExports.Err(new KameleoonError(KameleoonException.FeatureFlagExperimentNotFound, experimentId, visitorCode));\n }\n varByExp = rule.variations.get(variationKey);\n if (varByExp === undefined) {\n KameleoonLogger.error `Variation with key ${variationKey} not found in experiment ${rule} for visitor ${visitorCode}`;\n return buildExports.Err(new KameleoonError(KameleoonException.FeatureFlagVariationNotFound, variationKey, visitorCode));\n }\n rule = {\n type: rule.type,\n experimentId: experimentId,\n };\n varByExp = {\n variationKey: variationKey,\n variationId: varByExp,\n };\n const writeResult = this.variationConfiguration.updateForcedExperimentVariation(visitorCode, experimentId, {\n rule: rule,\n varByExp: varByExp,\n forceTargeting,\n });\n KameleoonLogger.debug `RETURN: KameleoonClient._setForcedVariation(visitorCode: '${visitorCode}', experimentId: ${experimentId}, variationKey: '${variationKey}', forceTargeting: ${forceTargeting}) -> (writeResult: ${writeResult})`;\n return writeResult;\n }\n _getCodeForHash(visitorCode, bucketingCustomDataIndex, visitorData) {\n var _a;\n KameleoonLogger.debug `CALL: KameleoonClient._getCodeForHash(visitorCode: ${visitorCode}, bucketingCustomDataIndex: ${bucketingCustomDataIndex}, visitorData: ${visitorData})`;\n let codeForHash;\n if (bucketingCustomDataIndex != null) {\n const customData = visitorData === null || visitorData === void 0 ? void 0 : visitorData.customData;\n if (customData) {\n const customDataValue = (_a = customData[bucketingCustomDataIndex]) === null || _a === void 0 ? void 0 : _a.value[0];\n if (customDataValue) {\n codeForHash = customDataValue;\n }\n }\n }\n if (!codeForHash) {\n codeForHash = this.dataManager.getVisitorIdentifier(visitorCode);\n }\n KameleoonLogger.debug `RETURN: KameleoonClient._getCodeForHash(visitorCode: ${visitorCode}, bucketingCustomDataIndex: ${bucketingCustomDataIndex}, visitorData: ${visitorData}) -> (codeForHash: ${codeForHash})`;\n return codeForHash;\n }\n _refreshDataFileIfStale() {\n return __awaiter(this, void 0, void 0, function* () {\n const result = yield this.clientConfiguration.refreshDataFileIfStale();\n return result.ok && result.data;\n });\n }\n}\nKameleoonClient.EvaluatedExperiment = class {\n static fromForcedFeatureVariation(defaultVariationKey, forcedFeatureVariation) {\n var _a, _b, _c;\n let varKey = defaultVariationKey;\n if (forcedFeatureVariation.varByExp) {\n varKey = forcedFeatureVariation.varByExp.variationKey;\n }\n else if (forcedFeatureVariation.rule &&\n forcedFeatureVariation.rule.type === RuleType.EXPERIMENTATION) {\n varKey = OFF_VARIATION_KEY;\n }\n return {\n variationKey: varKey,\n variationId: ((_a = forcedFeatureVariation.varByExp) === null || _a === void 0 ? void 0 : _a.variationId) || null,\n experimentId: ((_b = forcedFeatureVariation.rule) === null || _b === void 0 ? void 0 : _b.experimentId) || null,\n ruleType: ((_c = forcedFeatureVariation.rule) === null || _c === void 0 ? void 0 : _c.type) || null,\n isSimulated: forcedFeatureVariation.simulated,\n };\n }\n static fromVariationData(variationData) {\n var _a, _b;\n return {\n variationKey: variationData.variationKey,\n variationId: variationData.variationId,\n experimentId: variationData.experimentId,\n ruleType: (_b = (_a = variationData.rule) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : null,\n isSimulated: false,\n };\n }\n static fromDefaultVariationKey(defaultVariationKey) {\n return {\n variationKey: defaultVariationKey,\n variationId: null,\n experimentId: null,\n ruleType: null,\n isSimulated: false,\n };\n }\n};\n\n/**\n * KameleoonUtils - a class containing static Kameleoon helper methods\n * */\nclass KameleoonUtils {\n /**\n * @method simulateSuccessRequest - a method to simulate a successful request based on request type, primarily used for `IExternalRequester` implementations\n *\n * @param {RequestType} requestType - request type\n * @param {SimulateRequestDataType[RequestType]} data - simulate data type for request\n * */\n static simulateSuccessRequest(requestType, data) {\n switch (requestType) {\n case RequestType.Tracking:\n return new Promise((resolve) => {\n const response = {\n status: 204,\n json: () => new Promise((r) => r(null)),\n text: () => new Promise((r) => r('')),\n ok: true,\n };\n resolve(response);\n });\n case RequestType.Configuration:\n case RequestType.RemoteData:\n return new Promise((resolve) => {\n const response = {\n status: 200,\n json: () => new Promise((r) => r(data)),\n text: () => new Promise((r) => r('')),\n ok: true,\n };\n resolve(response);\n });\n default:\n exhaustCheck(requestType);\n }\n }\n /**\n * @method getCookieValue - a method to get a cookie value by key from a cookie string, primarily used for `IExternalVisitorCodeManager` implementations\n *\n * @param {string} cookie - cookie string\n * @param {string} key - cookie key\n * @returns {string | null} cookie value or null if not found\n * */\n static getCookieValue(cookie, key) {\n const pairs = cookie.split('; ');\n const pair = pairs.find((pair) => {\n const [pairKey, pairValue] = pair.split('=');\n return pairKey === key && pairValue !== '';\n });\n if (pair) {\n return pair.split('=')[1];\n }\n return null;\n }\n}\n\nvar Err = buildExports.Err;\nvar Ok = buildExports.Ok;\nexport { ApplicationVersion$1 as ApplicationVersion, Browser$1 as Browser, BrowserType, Conversion$1 as Conversion, Cookie$1 as Cookie, CustomData$1 as CustomData, CustomDataScope, DataManager, DataProcessor, DataStorage, Device$1 as Device, DeviceType, Environment, Err, EventType, GeolocationData, Header, HttpMethod, KameleoonClient as KameleoonCore, KameleoonData, KameleoonError, KameleoonException, KameleoonLogger, KameleoonStorageKey, KameleoonUtils, LegalConsent, ListUtilities, LogLevel, Milliseconds, NUMBER_OF_RETRIES, Ok, OperatingSystem$1 as OperatingSystem, OperatingSystemType, PageView, Parser, RequestType, SdkLanguageType, StaticData, TrackingStatus, Tree, UniqueIdentifier, UserAgent, Utilities, VISITOR_CODE_LENGTH, VISIT_DURATION, Validator, VariableType, VisitorCodeManager };\n//# sourceMappingURL=javascript-sdk-core.browser.es.js.map\n","import { Milliseconds } from '@kameleoon/javascript-sdk-core/browser';\n\nexport enum CookieParameter {\n PairsDelimiter = '; ',\n KeyValueDelimiter = '=',\n MaxAge = 'Max-Age',\n Path = 'Path',\n Domain = 'Domain',\n}\nexport const ACTIVITY_INTERVAL = 15 * Milliseconds.Second;\nexport const VISIT_DURATION = 30 * Milliseconds.Minute;\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import {\n RequestType,\n IExternalRequester,\n KameleoonResponseType,\n SendRequestParametersType,\n} from '@kameleoon/javascript-sdk-core/browser';\n\nexport class Requester implements IExternalRequester {\n public async sendRequest({\n url,\n parameters,\n }: SendRequestParametersType<RequestType>): Promise<KameleoonResponseType> {\n return await fetch(url, parameters);\n }\n}\n","import {\n GetResultCookieParametersType,\n IExternalVisitorCodeManager,\n SetDataParametersType,\n} from './types';\nimport { CookieParameter } from './constants';\nimport {\n KameleoonLogger,\n KameleoonUtils,\n} from '@kameleoon/javascript-sdk-core/browser';\n\nclass VisitorCodeManager implements IExternalVisitorCodeManager {\n public getData(key: string): string | null {\n KameleoonLogger.debug`CALL: VisitorCodeManager.getData(key: ${key})`;\n const cookie = document.cookie;\n\n let visitorCode = null;\n if (cookie) {\n visitorCode = KameleoonUtils.getCookieValue(cookie, key);\n }\n\n KameleoonLogger.debug`RETURN: VisitorCodeManager.getData(key: ${key}) -> (visitorCode: ${visitorCode})`;\n return visitorCode;\n }\n\n public setData({\n visitorCode,\n domain,\n maxAge,\n key,\n path,\n }: SetDataParametersType): void {\n const resultCookie = this.getResultCookie({\n domain,\n visitorCode,\n key,\n maxAge,\n path,\n });\n\n document.cookie = resultCookie;\n KameleoonLogger.debug`Cookie ${resultCookie} was added for visitor ${visitorCode}`;\n }\n\n private getResultCookie({\n domain,\n visitorCode,\n maxAge,\n key,\n path,\n }: GetResultCookieParametersType): string {\n const cookieArray = [\n key + CookieParameter.KeyValueDelimiter + visitorCode,\n CookieParameter.MaxAge + CookieParameter.KeyValueDelimiter + maxAge,\n CookieParameter.Path + CookieParameter.KeyValueDelimiter + path,\n ];\n\n if (domain) {\n cookieArray.push(\n CookieParameter.Domain + CookieParameter.KeyValueDelimiter + domain,\n );\n }\n\n return cookieArray.join(CookieParameter.PairsDelimiter);\n }\n}\n\nexport { VisitorCodeManager as KameleoonVisitorCodeManager };\n","import {\n IExternalStorage,\n KameleoonStorageKey,\n LegalConsent,\n} from '@kameleoon/javascript-sdk-core/browser';\nimport { KameleoonVisitorCodeManager } from './visitorCodeManager';\nimport { EngineConsentDataType } from './types';\n\n// --- Note ---\n// Named `DataStorage` to avoid collision with `Storage` from `window` API\nexport class DataStorage<T> implements IExternalStorage<T> {\n private visitorCodeManager?: KameleoonVisitorCodeManager;\n\n public read(key: string): T | null {\n const data = localStorage.getItem(key);\n\n if (key === KameleoonStorageKey.ConsentData) {\n if (!data || data === '{}') {\n return this.getEngineConsentData();\n }\n }\n\n return data ? JSON.parse(data) : null;\n }\n\n public write(key: string, data: T): void {\n localStorage.setItem(key, JSON.stringify(data));\n }\n\n private getEngineConsentData(): T | null {\n if (!this.visitorCodeManager) {\n this.visitorCodeManager = new KameleoonVisitorCodeManager();\n }\n\n const visitorCode = this.visitorCodeManager.getData(\n KameleoonStorageKey.VisitorCode,\n );\n\n if (!visitorCode) {\n return null;\n }\n\n try {\n const engineConsentData = localStorage.getItem('kameleoonLegalConsent');\n\n if (!engineConsentData) {\n return null;\n }\n\n const engineConsent: EngineConsentDataType =\n JSON.parse(engineConsentData);\n\n const abTesting = engineConsent?.value?.AB_TESTING;\n if (typeof abTesting === 'boolean') {\n return {\n [visitorCode]: {\n consent: abTesting ? LegalConsent.Given : LegalConsent.NotGiven,\n },\n } as T;\n }\n\n return null;\n } catch (_) {\n return null;\n }\n }\n}\n","import {\n IExternalEventSource,\n EventSourceOpenParametersType,\n} from '@kameleoon/javascript-sdk-core/browser';\n\n// --- Note ---\n// Named `KameleoonEventSource` to avoid collision with native `EventSource`\nexport class KameleoonEventSource implements IExternalEventSource {\n private eventSource?: EventSource;\n\n public open({\n eventType,\n onEvent,\n url,\n }: EventSourceOpenParametersType): void {\n const eventSource = new EventSource(url);\n\n this.eventSource = eventSource;\n this.eventSource.addEventListener(eventType, onEvent);\n }\n\n public close(): void {\n if (this.eventSource) {\n this.eventSource.close();\n }\n }\n\n public onError(callback: (error: Event) => void): void {\n if (this.eventSource) {\n this.eventSource.onerror = callback;\n }\n }\n}\n","import { IExternalPRNG } from '@kameleoon/javascript-sdk-core/browser';\n\nexport class KameleoonPRNG implements IExternalPRNG {\n public getRandomNumber(): number {\n if (typeof window !== 'undefined' && window?.crypto) {\n const arr = new Uint32Array(1);\n const uint32Max = 0xffffffff + 1;\n\n window.crypto.getRandomValues(arr);\n\n return arr[0] / uint32Max;\n }\n\n return Math.random();\n }\n}\n","import {\n IExternalLogger,\n LogLevel\n} from '@kameleoon/javascript-sdk-core/browser';\n\n/**\n * A simple implementation of a logger for js clients that prints log messages to the console with timestamp.\n * This logger implements the {@code IExternalLogger} interface.\n */\nexport class DefaultLogger implements IExternalLogger {\n public log(level: LogLevel, message: string): void {\n const date = new Date();\n const formattedDate = date.toLocaleString('en-US', { timeZoneName: 'short' });\n message = `${formattedDate} ${message}`;\n switch (level) {\n case LogLevel.DEBUG:\n console.debug(message);\n break;\n case LogLevel.INFO:\n console.info(message);\n break;\n case LogLevel.WARNING:\n console.warn(message);\n break;\n case LogLevel.ERROR:\n console.error(message);\n break;\n }\n }\n}\n","import {\n ITracker,\n KameleoonLogger,\n} from '@kameleoon/javascript-sdk-core/browser';\nimport { ClientDataManager } from 'src/dataManager';\n\nexport interface VisitorActivityManagerType {}\n\nexport class VisitorActivityManager implements VisitorActivityManagerType {\n private dataManager: ClientDataManager;\n private tracker: ITracker;\n private isConsentProvided: (visitorCode: string) => boolean;\n\n /**\n * @param dataManager - Instance of ClientDataManager\n * @param tracker - Instance of ITracker\n * @param isConsentProvided - Function to check if consent is provided for a visitor\n * @param interval - Interval in milliseconds\n */\n constructor(\n dataManager: ClientDataManager,\n tracker: ITracker,\n isConsentProvided: (visitorCode: string) => boolean,\n interval: number,\n ) {\n KameleoonLogger.debug`CALL: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${interval})`;\n this.dataManager = dataManager;\n this.tracker = tracker;\n this.isConsentProvided = isConsentProvided;\n\n this.setup(interval);\n KameleoonLogger.debug`RETURN: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${interval})`;\n }\n\n private setup(interval: number): void {\n setInterval(() => {\n this.updateLastActivity();\n }, interval);\n this.updateLastActivity();\n }\n\n private updateLastActivity(): void {\n KameleoonLogger.debug`CALL: VisitorActivityManager.updateLastActivity()`;\n\n const visitorCode = this.dataManager.updateLastActivity();\n if (visitorCode) {\n this.tracker.scheduleVisitor(\n visitorCode,\n this.isConsentProvided(visitorCode),\n );\n }\n\n KameleoonLogger.debug`RETURN: VisitorActivityManager.updateLastActivity()`;\n }\n}\n","import {\n AddDataParamsType,\n Browser,\n DataManager,\n DataManagerParametersType as CoreDataManagerParametersType,\n Device,\n KameleoonData,\n KameleoonDataType,\n KameleoonError,\n KameleoonLogger,\n KameleoonVisitorDataType,\n ListUtilities,\n OperatingSystem,\n Result,\n StaticData,\n TrackingStatus,\n VisitDataType,\n VisitorsDataType,\n} from '@kameleoon/javascript-sdk-core/browser';\nimport { VISIT_DURATION } from 'src/constants';\nimport { IPlatformAnalyzer } from 'src/utils';\n\ntype DataManagerParametersType = CoreDataManagerParametersType & {\n platformAnalyzer: IPlatformAnalyzer;\n};\n\nexport class ClientDataManager extends DataManager {\n private visitor: Visitor | null = null;\n private readonly platformAnalyzer: IPlatformAnalyzer;\n\n constructor({\n dataStorage,\n infoStorage,\n cleanupInterval,\n packageInfo,\n platformAnalyzer,\n }: DataManagerParametersType) {\n KameleoonLogger.debug`CALL: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval}, packageInfo: ${packageInfo}, platformAnalyzer)`;\n super({ dataStorage, infoStorage, cleanupInterval, packageInfo });\n this.platformAnalyzer = platformAnalyzer;\n this.updateVisitor();\n KameleoonLogger.debug`RETURN: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${cleanupInterval} packageInfo: ${packageInfo}, platformAnalyzer)`;\n }\n\n getUnsentData(visitorCode: string): (KameleoonDataType | StaticData)[] {\n const data = super.getUnsentData(visitorCode);\n const visitorData = super.getVisitorData(visitorCode);\n if (!visitorData) {\n return data;\n }\n const browser = visitorData[KameleoonData.Browser];\n const device = visitorData[KameleoonData.Device];\n const os = visitorData[KameleoonData.OperatingSystem];\n\n const staticData = new StaticData({\n browserType: browser?.browser,\n browserVersion: browser?.version,\n visitNumber: this.visitor?.visitNumber,\n timeSincePreviousVisit: this.visitor?.timeSincePreviousVisit,\n os: os?.operatingSystem,\n deviceType: device?.device,\n });\n data.push(staticData);\n return data;\n }\n\n public storeData(params: AddDataParamsType) {\n const { visitorCode, data } = params;\n if (data.length) {\n this.checkVisitor(visitorCode);\n }\n return super.storeData(params);\n }\n\n public storeDataForVisitors(\n data: VisitorsDataType,\n ): Result<void, KameleoonError> {\n return super.storeDataForVisitors(data, true);\n }\n\n getVisitorData(visitorCode: string): KameleoonVisitorDataType | undefined {\n this.checkVisitor(visitorCode);\n return super.getVisitorData(visitorCode);\n }\n\n updateLastActivity(): string | null {\n if (!this.visitor) {\n return null;\n }\n const storageData = this.dataStorage.read();\n\n if (!storageData.ok) {\n return null;\n }\n\n const data = storageData.data;\n let visitorData = data[this.visitor.visitorCode] ?? {};\n if (typeof visitorData === 'string') {\n visitorData = data[visitorData] as KameleoonVisitorDataType;\n }\n\n let visitsData = visitorData[KameleoonData.VisitsData];\n if (!visitsData) {\n visitsData = {\n visits: [],\n visitNumber: 0,\n type: KameleoonData.VisitsData,\n status: TrackingStatus.Sent,\n expirationTime: 0,\n };\n visitorData[KameleoonData.VisitsData] = visitsData;\n }\n\n const lastVisit = this.fetchVisit(\n visitsData.visits,\n visitsData.visits.length - 1,\n );\n\n const timeLastActivity = lastVisit?.timeLastActivity ?? 0;\n const now = Date.now();\n\n let visitNumber =\n visitsData.visitNumber ??\n (visitsData.visits.length ? visitsData.visits.length - 1 : 0);\n\n if (now - timeLastActivity > VISIT_DURATION) {\n visitNumber += timeLastActivity > 0 ? 1 : 0;\n ListUtilities.insertVisitInOrderedListMutably({\n list: visitsData.visits as VisitDataType[],\n visit: {\n timeStarted: now,\n timeLastActivity: now,\n },\n });\n this.visitor.timeSincePreviousVisit = lastVisit\n ? now - timeLastActivity\n : 0;\n } else if (visitsData.visits.length) {\n visitsData.visits[visitsData.visits.length - 1] = {\n timeStarted: lastVisit?.timeStarted ?? now,\n timeLastActivity: now,\n };\n if (this.visitor.timeSincePreviousVisit === -1) {\n const previousVisit = this.fetchVisit(\n visitsData.visits,\n visitsData.visits.length - 2,\n );\n this.visitor.timeSincePreviousVisit = previousVisit\n ? now - previousVisit.timeLastActivity\n : 0;\n }\n }\n visitsData.visitNumber = visitNumber;\n this.visitor.visitNumber = visitNumber;\n\n this.dataStorage.write(data);\n return this.visitor!.visitorCode;\n }\n\n public checkVisitor(visitorCode: string): void {\n if (!this.visitor || this.visitor.visitorCode !== visitorCode) {\n this.createVisitor(visitorCode);\n }\n }\n\n private createVisitor(visitorCode: string): void {\n KameleoonLogger.debug`CALL: ClientDataManager.createVisitor(visitorCode: ${visitorCode})`;\n this.visitor = new Visitor(visitorCode);\n\n try {\n const result = this.platformAnalyzer.getResult();\n const data = [];\n\n if (result.os?.name) {\n data.push(new OperatingSystem(result.os.name));\n }\n if (result.platform?.type) {\n data.push(new Device(result.platform.type));\n }\n if (result.browser?.name) {\n data.push(new Browser(result.browser.name, result.browser.version));\n }\n if (result.pageView) {\n data.push(result.pageView);\n }\n\n if (data.length) {\n this.storeData({ visitorCode, data });\n }\n } finally {\n this.updateLastActivity();\n }\n KameleoonLogger.debug`RETURN: ClientDataManager.createVisitor(visitorCode: ${visitorCode})`;\n }\n\n private updateVisitor(): void {\n KameleoonLogger.debug`CALL: ClientDataManager.updateVisitor()`;\n const storageData = this.dataStorage.read();\n\n if (!storageData.ok) {\n return;\n }\n\n const data = storageData.data;\n let lastVisitorCode;\n let lastTimestamp = -1;\n\n for (const [visitorCode, visitorData] of Object.entries(data)) {\n if (typeof visitorData === 'string') {\n continue;\n }\n\n const visitsData = visitorData[KameleoonData.VisitsData];\n if (!visitsData) {\n if (!lastVisitorCode) {\n lastVisitorCode = visitorCode;\n }\n continue;\n }\n\n const lastVisit = visitsData.visits.length\n ? visitsData.visits[visitsData.visits.length - 1]\n : null;\n\n if (lastVisit) {\n const timeLastActivity =\n (typeof lastVisit === 'number'\n ? lastVisit\n : lastVisit?.timeLastActivity) ?? 0;\n if (timeLastActivity > lastTimestamp) {\n lastTimestamp = timeLastActivity;\n lastVisitorCode = visitorCode;\n }\n } else if (!lastVisitorCode) {\n lastVisitorCode = visitorCode;\n }\n }\n\n if (lastVisitorCode) {\n this.createVisitor(lastVisitorCode);\n } else {\n this.visitor = null;\n KameleoonLogger.debug`ClientDataManager no visitor found`;\n }\n KameleoonLogger.debug`RETURN: ClientDataManager.updateVisitor()`;\n }\n\n private fetchVisit(\n visitorVisits: (VisitDataType | number)[],\n index: number,\n ): VisitDataType | null {\n if (index < 0 || index >= visitorVisits.length) {\n return null;\n }\n const visit = visitorVisits[index];\n if (typeof visit === 'number') {\n return {\n timeStarted: visit,\n timeLastActivity: visit,\n } as VisitDataType;\n } else {\n return visit;\n }\n }\n}\n\nclass Visitor {\n public visitorCode: string;\n public visitNumber: number = 0;\n public timeSincePreviousVisit: number = -1;\n\n constructor(visitorCode: string) {\n this.visitorCode = visitorCode;\n }\n}\n","import {\n BrowserType,\n DeviceType,\n KameleoonLogger,\n OperatingSystemType,\n PageView,\n} from '@kameleoon/javascript-sdk-core/browser';\nimport {\n BrowserResult,\n OSResult,\n PlatformAnalysisResult,\n PlatformResult,\n} from 'src/utils/types';\n\nexport class Utils {\n static getFirstMatch(regex: RegExp, userAgent: string): string {\n const match = userAgent.match(regex);\n return (match && match.length > 0 && match[1]) || '';\n }\n\n static getSecondMatch(regex: RegExp, userAgent: string): string {\n const match = userAgent.match(regex);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n static assign<T extends object>(target: T, ...sources: Partial<T>[]): T {\n return Object.assign(target, ...sources) as T;\n }\n}\n\nexport interface IPlatformAnalyzer {\n getResult(): PlatformAnalysisResult;\n}\n\nexport class PlatformAnalyzer implements IPlatformAnalyzer {\n private userAgent: string;\n private parsedResult: PlatformAnalysisResult;\n\n constructor() {\n this.userAgent = navigator.userAgent || '';\n KameleoonLogger.debug`PlatformParser: userAgent = ${this.userAgent}`;\n this.parsedResult = {};\n if (this.userAgent !== '') {\n this.parse();\n }\n }\n\n private parseBrowser(): BrowserResult {\n const browserRules = [\n {\n test: [/chrome|crios|crmo/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Chrome,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/firefox|iceweasel|fxios/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Firefox,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/safari|applewebkit/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Safari,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/version\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/opr\\/|opios/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Opera,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/edg([ea]|ios)/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.InternetExplorer,\n version: this.getBrowserVersion(\n Utils.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/googlebot/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i, userAgent) ||\n Utils.getFirstMatch(/version\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/SamsungBrowser/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/yabrowser/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/ucbrowser/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/vivaldi/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/phantom/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/electron/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/chromium/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(\n /(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ),\n ),\n }),\n },\n {\n test: [/opera/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.Opera,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/msie|trident/i],\n describe: (userAgent: string): BrowserResult => ({\n name: BrowserType.InternetExplorer,\n version: this.getBrowserVersion(\n Utils.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i, userAgent),\n ),\n }),\n },\n {\n test: [/.*/i],\n describe: (userAgent: string): BrowserResult => {\n const fallbackRegex = userAgent.includes('(')\n ? /^(.*)\\/(.*)[ \\t]\\((.*)/\n : /^(.*)\\/(.*) /;\n return {\n name: BrowserType.Other,\n version: this.getBrowserVersion(\n Utils.getSecondMatch(fallbackRegex, userAgent),\n ),\n };\n },\n },\n ];\n\n const match = browserRules.find((rule) =>\n rule.test.some((regex) => regex.test(this.userAgent)),\n );\n\n if (match) {\n this.parsedResult.browser = match.describe(this.userAgent);\n }\n\n return this.parsedResult.browser || {};\n }\n\n private parseOS(): OSResult {\n const osRules = [\n {\n test: [/windows phone/i],\n describe: (): OSResult => ({ name: OperatingSystemType.WindowsPhone }),\n },\n {\n test: [/windows /i],\n describe: (): OSResult => ({ name: OperatingSystemType.Windows }),\n },\n {\n test: [/Macintosh(.*?) FxiOS(.*?) Version\\//],\n describe: (userAgent: string): OSResult => ({\n name: OperatingSystemType.IOS,\n version: Utils.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/, userAgent),\n }),\n },\n {\n test: [/macintosh/i],\n describe: (userAgent: string): OSResult => ({\n name: OperatingSystemType.Mac,\n version: Utils.getFirstMatch(\n /mac os x (\\d+(\\.?_?\\d+)+)/i,\n userAgent,\n ).replace(/[_\\s]/g, '.'),\n }),\n },\n {\n test: [/(ipod|iphone|ipad)/i],\n describe: (userAgent: string): OSResult => ({\n name: OperatingSystemType.IOS,\n version: Utils.getFirstMatch(\n /os (\\d+([_\\s]\\d+)*) like mac os x/i,\n userAgent,\n ).replace(/[_\\s]/g, '.'),\n }),\n },\n {\n test: [/android/i],\n describe: (): OSResult => ({ name: OperatingSystemType.Android }),\n },\n {\n test: [/linux/i],\n describe: (): OSResult => ({ name: OperatingSystemType.Linux }),\n },\n ];\n\n const match = osRules.find((rule) =>\n rule.test.some((regex) => regex.test(this.userAgent)),\n );\n\n if (match) {\n this.parsedResult.os = match.describe(this.userAgent);\n }\n\n return this.parsedResult.os || {};\n }\n\n private parsePlatform(): PlatformResult {\n const platformRules = [\n {\n test: [/huserAgentwei/i],\n describe: (userAgent: string): PlatformResult => ({\n type: DeviceType.Phone,\n }),\n },\n {\n test: [/nexus\\s*(?:7|8|9|10).*/i],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/ipad/i],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/Macintosh(.*?) FxiOS(.*?) Version\\//],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/kftt build/i],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/silk/i],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/tablet(?! pc)/i],\n describe: (): PlatformResult => ({ type: DeviceType.Tablet }),\n },\n {\n test: [/ipod|iphone/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/nexus\\s*[0-6].*/i, /galaxy nexus/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/[^-]mobi/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/blackberry/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/bada/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/windows phone/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/android/i],\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: [/ios/i],\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n {\n test: [/windows/i],\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n {\n test: [/linux/i],\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n ];\n const platformRulesOSName = [\n {\n test: () =>\n this.parsedResult.os?.name === OperatingSystemType.Android &&\n Number(String(this.parsedResult.os?.version).split('.')[0]) >= 3,\n describe: (userAgent: string): PlatformResult => ({\n type: DeviceType.Tablet,\n }),\n },\n {\n test: () => this.parsedResult.os?.name === OperatingSystemType.Android,\n describe: (): PlatformResult => ({ type: DeviceType.Phone }),\n },\n {\n test: () => this.parsedResult.os?.name === OperatingSystemType.Mac,\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n {\n test: () => this.parsedResult.os?.name === OperatingSystemType.Windows,\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n {\n test: () => this.parsedResult.os?.name === OperatingSystemType.Linux,\n describe: (): PlatformResult => ({ type: DeviceType.Desktop }),\n },\n ];\n\n const match =\n platformRules.find((rule) =>\n rule.test.some((regex) => regex.test(this.userAgent)),\n ) || platformRulesOSName.find((rule) => rule.test());\n\n if (match) {\n this.parsedResult.platform = match.describe(this.userAgent);\n }\n\n return this.parsedResult.platform || {};\n }\n\n private parse(): void {\n if (this.userAgent) {\n this.parseBrowser();\n this.parseOS();\n this.parsePlatform();\n }\n }\n\n private getBrowserVersion(version: string | undefined): number | undefined {\n if (!version) {\n return undefined;\n }\n\n const parts = version.split('.');\n if (parts.length === 0) {\n return undefined;\n }\n\n const majorMinor = parts.length > 1 ? `${parts[0]}.${parts[1]}` : parts[0];\n const result = parseFloat(majorMinor);\n return isNaN(result) ? undefined : result;\n }\n\n public parseWebView(): void {\n let href = window.location?.href;\n if (href) {\n const title = document ? document.title : '';\n this.parsedResult.pageView = new PageView({\n urlAddress: href,\n title: title,\n });\n }\n }\n\n public getResult(): PlatformAnalysisResult {\n this.parseWebView();\n return Utils.assign({}, this.parsedResult);\n }\n}\n","import {\n SdkLanguageType,\n KameleoonCore,\n VisitorCodeManager,\n IVisitorCodeManager,\n SetDataCallbackParametersType,\n Validator,\n KameleoonLogger,\n TargetingDataType,\n DataInfoType,\n KameleoonStorageKey,\n} from '@kameleoon/javascript-sdk-core/browser';\nimport { DataStorage as SDKCoreDataStorage } from '@kameleoon/javascript-sdk-core/browser';\nimport { Requester } from './requester';\nimport { DataStorage } from './storage';\nimport { KameleoonEventSource } from './eventSource';\nimport { KameleoonVisitorCodeManager } from './visitorCodeManager';\nimport { IExternalVisitorCodeManager, SDKParameters } from './types';\nimport { KameleoonPRNG } from './prng';\nimport { DefaultLogger } from 'src/defaultLogger';\nimport { VisitorActivityManager } from 'src/visitorActivity';\nimport { ACTIVITY_INTERVAL } from 'src/constants';\nimport { ClientDataManager } from 'src/dataManager';\nimport { PlatformAnalyzer } from 'src/utils/platformAnalyzer';\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * */\nexport class KameleoonClient extends KameleoonCore {\n private readonly domain?: string;\n private readonly internalVisitorCodeManager: IVisitorCodeManager;\n private readonly externalVisitorCodeManager: IExternalVisitorCodeManager;\n private readonly customDataManager?: ClientDataManager;\n\n constructor({\n siteCode,\n configuration,\n externals,\n _internals,\n stubMode,\n }: SDKParameters) {\n if (stubMode) {\n super({\n siteCode,\n internalConfiguration: {} as any,\n stubMode,\n });\n this.internalVisitorCodeManager = {} as any;\n this.externalVisitorCodeManager = {} as any;\n return;\n }\n const prng = _internals?.prng || new KameleoonPRNG();\n const storage = externals?.storage || new DataStorage();\n const requester = externals?.requester || new Requester();\n const eventSource = externals?.eventSource || new KameleoonEventSource();\n const visitorCodeManager = new VisitorCodeManager();\n const externalVisitorCodeManager =\n externals?.visitorCodeManager || new KameleoonVisitorCodeManager();\n\n const packageInfo = _internals?.packageInfo || {\n type: SdkLanguageType.JAVASCRIPT,\n version: process.env.npm_package_version as string,\n isServer: false,\n };\n\n const targetingDataStorage = new SDKCoreDataStorage<TargetingDataType>(\n storage,\n KameleoonStorageKey.TargetingData,\n );\n const dataInfoStorage = new SDKCoreDataStorage<DataInfoType>(\n storage,\n KameleoonStorageKey.DataInfo,\n );\n\n const customDataManager = new ClientDataManager({\n dataStorage: targetingDataStorage,\n infoStorage: dataInfoStorage,\n cleanupInterval: 0,\n packageInfo: packageInfo,\n platformAnalyzer: _internals?.platformAnalyzer ?? new PlatformAnalyzer(),\n });\n\n const dependencies = {\n externalPRNG: prng,\n externalStorage: storage,\n externalRequester: requester,\n externalEventSource: eventSource,\n externalVisitorCodeManager: visitorCodeManager,\n externalPackageInfo: packageInfo,\n externalLogger: externals?.logger || new DefaultLogger(),\n customDataManager: customDataManager,\n };\n\n const settings = {\n useAbortController: true,\n };\n\n super({\n siteCode,\n configuration,\n internalConfiguration: {\n externals: dependencies,\n settings,\n },\n });\n\n const cookieDomain = Validator.validateDomain(configuration?.cookieDomain);\n this.domain = cookieDomain.ok ? cookieDomain.data : undefined;\n this.internalVisitorCodeManager = visitorCodeManager;\n this.externalVisitorCodeManager = externalVisitorCodeManager;\n this.customDataManager = customDataManager;\n }\n\n /**\n * @method initialize - an asynchronous method for KameleoonClient initialization by fetching Kameleoon SDK related data from server or by retrieving data from local source if data is up-to-date or update interval has not been reached\n * @returns {Promise<boolean>} Promise resolved into boolean field indicating success or fail\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.StorageWrite` Couldn't update storage data\n * - `KameleoonException.StorageRead` - Couldn't read storage data\n * - `KameleoonException.ClientConfiguration` Couldn't retrieve client configuration from Kameleoon Api\n * - `KameleoonException.MaximumRetriesReached` Maximum retries reached, request failed\n */\n public async initialize(): Promise<boolean> {\n if (this.stubMode) {\n return false;\n }\n const initialized = super.initialize();\n new VisitorActivityManager(\n this.customDataManager!,\n this.tracker,\n (visitorCode: string) => this._isConsentProvided(visitorCode),\n ACTIVITY_INTERVAL,\n );\n return initialized;\n }\n\n /**\n * @method getVisitorCode - obtains visitor code from the browser cookie, if the visitor code doesn't yet exist generates a random visitor code (or uses a provided default) and sets a new visitor code to cookie\n * @param {string | undefined} defaultVisitorCode - visitor code to be used in case there is no visitor code in cookies *Note*: if not passed visitor code will be randomly generated\n * @returns {string} result visitor code\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.VisitorCodeEmpty` - The visitor code is empty\n */\n public getVisitorCode(defaultVisitorCode?: string): string {\n if (this.stubMode) {\n return '';\n }\n KameleoonLogger.info`CALL KamaleoonClient.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode})`;\n this.internalVisitorCodeManager.getData = (key: string) =>\n this.externalVisitorCodeManager.getData(key);\n\n this.internalVisitorCodeManager.setData = (\n parameters: SetDataCallbackParametersType,\n ) => {\n this.externalVisitorCodeManager.setData({\n ...parameters,\n domain: this.domain,\n });\n };\n\n const visitorCode =\n this.internalVisitorCodeManager.getVisitorCode(defaultVisitorCode);\n if (this.initialized) {\n this.customDataManager?.checkVisitor(visitorCode);\n }\n KameleoonLogger.info`RETURN KamaleoonClient.getVisitorCode(defaultVisitorCode: ${defaultVisitorCode}) -> (visitorCode: ${visitorCode})`;\n return visitorCode;\n }\n\n /**\n * @method setLegalConsent - sets or updates the legal consent status for a visitor identified by their unique visitor code, affecting values in the response cookies based on the consent status\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {boolean} consent - a value representing the legal consent status. - 'true' indicates the\n * visitor has given legal consent. - 'false' indicates the visitor has withdrawn or not\n * provided legal consent.\n * @returns {void}\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.VisitorCodeEmpty` - The visitor code is empty\n */\n public setLegalConsent(visitorCode: string, consent: boolean): void {\n if (this.stubMode) {\n return;\n }\n super.setUserConsent({\n visitorCode,\n consent,\n setData: (parameters: SetDataCallbackParametersType): void => {\n this.externalVisitorCodeManager.setData({\n ...parameters,\n domain: this.domain,\n });\n },\n });\n super.flush(visitorCode);\n }\n}\n"],"names":["commonjsGlobal","globalThis","window","global","self","getDefaultExportFromCjs","x","__esModule","Object","prototype","hasOwnProperty","call","getAugmentedNamespace","n","f","default","a","isInstance","this","Reflect","construct","arguments","constructor","apply","defineProperty","value","keys","forEach","k","d","getOwnPropertyDescriptor","get","enumerable","hasRequiredMain","hasRequiredBuild","KameleoonException","build","main","buildExports","exports","Err","Ok","main_1","throwErr","message","ok","error","Error","data","elseDo","callback","or","orValue","and","throw","else","requireMain","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","e","rejected","result","done","then","SuppressedError","ERROR_MESSAGES","CookieParse","reason","JSONParse","err","NumberParse","VersionParse","SemanticVersionParse","Initialization","Credentials","StorageInitialization","EventSourceInitialization","FeatureFlagConfigurationNotFound","featureKey","FeatureFlagEnvironmentDisabled","environment","FeatureFlagVariableNotFound","variableKey","visitorCode","FeatureFlagVariationNotFound","variationKey","FeatureFlagExperimentNotFound","experimentId","VisitAmount","VisitorCodeMaxLength","VisitorCodeEmpty","StorageWrite","StorageRead","key","StorageEmpty","StorageParse","ClientConfiguration","TargetingCondition","targetingType","AmongValuesCheck","RangeCheck","RemoteData","MaximumRetriesReached","exhaustCheck","option","KameleoonError","type","secondParam","thirdParam","super","name","errorType","undefined","UrlType","HttpMethod","DataApiQuery","RequestType","Header","UrlEventType","UrlParameter","UrlTracking","DEFAULT_DOMAINS","DataApi","Events","LogLevel","LOG_LEVEL_NAMES","NONE","ERROR","WARNING","INFO","DEBUG","replacer","clientId","clientSecret","Map","Array","from","entries","KameleoonLogger","setLogger","logger","setLogLevel","logLevel","log","level","strings","checkLevel","res","i","length","JSON","stringify","template","writeMessage","info","warning","debug","console","warn","Requester$1","urlProvider","packageInfo","externalRequester","requestTimeout","trackRetryDelay","useAbortController","timeout","getClientConfiguration","timeStamp","modifiedSince","requestUrl","getClientConfigurationUrl","headers","assign","SdkType","toLowerCase","SdkVersion","version","IfModifiedSince","responseInfo","Get","NUMBER_OF_RETRIES","response","sendRequest","url","requestType","Configuration","retryCount","parameters","method","json","logReceivedConfigurationResponse","status","lastModified","getLastModifiedHeader","configurationData","configuration","text","parse","logRequestError","getRemoteData","_a","getRemoteDataUrl","getVisitorData","filters","isMappingIdentifier","getVisitorDataUrl","track","body","isBodyUserAgent","getTrackingUrl","Post","Tracking","ContentType","setTimeout","controller","AbortController","timeoutId","abort","signal","clearTimeout","errorText","logResponse","parseResponse","targetKey","LastModified","responseStatus","Environment","VariableType","TrackingStatus","Milliseconds","UpdateType","RuleType","FeatureFlagSdkLanguageType","FeatureStatus","CustomDataScope","ConsentType","ConsentBlockingBehaviour","EventType","UrlProvider","ready","isCustomDomain","domains","initialize","domain","siteCode","setDomains","dataApiDomain","subDomain","split","currentDomain","replace","isInitialized","baseUrl","environmentParam","Production","encodeURIComponent","timeStampParam","getEventSourceUrl","getDataApiUrl","DataMap","encodeURI","customData","previousVisitAmount","currentVisit","conversions","geolocation","experiments","pageViews","device","browser","operatingSystem","kcs","personalization","visitorCodeFilter","cbs","identifierParameter","customDataParameter","conversionsParameter","geolocationParameter","experimentsParameter","pageViewsParameter","staticDataParameter","currentVisitParameter","kcsParameter","personalizationParameter","previousVisitAmountParam","cbsParameter","VisitData","VisitEvent","query","CacheManager","cleanupTimeout","cacheMap","intervalId","Second","add","lifetime","activate","expirationTime","cacheItem","Date","now","set","getAliveItem","delete","setInterval","item","size","cleanupInterval","clearInterval","EventManager","addEventHandler","eventType","eventHandlers","fireEvent","eventHandler","DEFAULT_DATA_FILE_CONFIGURATION","featureFlags","realTimeUpdate","consentType","NotRequired","consentOptOutBehavior","PartiallyBlocked","MEGroup","_featureFlags","slice","sort","ff1","ff2","id","getFeatureFlagByHash","hash","idx","Math","floor","min","updateInterval","storage","requester","dataManager","eventSource","externalVisitorCodeManager","eventManager","externalPackageInfo","defaultDataFile","updateConfigurationIntervalId","updateType","Polling","featureFlagsData","isTargetedDeliveryRule","segmentsData","holdoutData","meGroupsData","mappedRules","mappedExperiments","usedDefaultDataFile","refreshDataFileIfStalePromise","blockingBehaviourMode","CACHE_REVALIDATE_PERIOD","Minute","lastUpdate","visitorCodeManager","readStorageData","checkShouldUpdate","updateResult","updateClientConfiguration","RealTime","isOpen","handlePollingUpdates","handleRealTimeUpdates","refreshDataFileIfStale","promise","fetchClientConfiguration","finally","cleanupHandlers","close","open","timestamp","ConfigurationUpdate","onError","lastUpdateTime","getTime","timeToNextUpdate","max","bind","segments","flag","rules","rule","segment","has","toString","ruleMap","featureFlag","values","variationByExposition","variationMap","variationId","featureId","variations","experimentMap","holdout","meGroups","isConsentRequired","Required","consentBlockingBehaviour","hasAnyTargetedDeliveryRule","environmentEnabled","some","TARGETED_DELIVERY","_b","_c","read","requestTime","updateFeatureFlagsInfo","localDateModified","dateModified","defaultDateModified","String","updateConfigurationData","currentTime","updateClientConfigurationInBackground","isServer","clientConfigurationResult","applyNewConfigurationDataFromResponse","updateStorageData","clientConfigurationData","clearTrees","clear","toggleUpdateType","consentBlockingBehaviourFromStr","segmentsMap","map","customDataIndexById","index","featureFlagsMap","updateFeatureFlagSegments","updateFeatureFlagBucketingCustomDataId","customDataIndexes","makeMEGroups","updateConsentRequired","segmentId","bucketingCustomDataId","bucketingCustomDataIndex","meGroupLists","groupName","mutuallyExclusiveGroup","meGroupList","push","write","consentRequired","str","CompletelyBlocked","constructTypeMap","indexMap","fromEntries","KameleoonData","DeviceType","OperatingSystemType","BrowserType","OperatingSystemIndexMap","Windows","Mac","IOS","Linux","Android","WindowsPhone","OperatingSystemTypeMap","BrowserIndexMap","Chrome","InternetExplorer","Firefox","Safari","Opera","Other","BrowserTypeMap","OFF_VARIATION_KEY","WAREHOUSE_AUDIENCE_KEY","SdkLanguageType","DEFAULT_VISITOR_DATA_FILTERS","Operator","ValueMatchType","VisitorType","MatchTypeVariation","MatchTypeTest","CampaignType","MatchType","VersionMatchType","NameMatchType","TargetingType","TimeUnit","Order","LOCALHOST","REGEX_DOMAIN","Validator","validateVersion","versionParts","parseInt","isNaN","validateDomain","checkAndTrimProtocol","test","validateNetworkDomain","networkDomain","protocols","protocol","startsWith","substring","Utilities","getNonce","prng","nonce","randomNumber","getRandomNumber","randomIndex","charAt","checkTargeting","targetingData","variationConfiguration","clientConfiguration","conditionsData","firstLevel","assignedVariationsResult","getStoredVariations","targetingTree","getTree","trees","hasTargetingType","SEGMENT","TARGET_FEATURE_FLAG","evaluate","variationData","sdkInfo","convertTimeUnit","time","timeUnit","Hour","Day","Week","Month","isCustomData","dataItem","CustomData","updateCache","hasJsCssVariables","cacheManager","cacheData","newCacheData","getTrackingCode","trackingCache","resultString","updatedCacheData","Number","compareSemVer","compareVersion","operator","versionResult","compareVersionResult","major","minor","patch","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","isPatchEqual","EQUAL","GREATER","LOWER","getVariationByHash","total","varByExpItem","exposition","ListUtilities","insertInOrderedListMutably","list","element","order","includes","findIndex","Ascending","splice","insertVisitInOrderedListMutably","visit","find","timeStarted","PageView","urlAddress","title","referrers","timestamps","Unsent","titleParameter","referrersParameter","Sent","sent","unsent","Pending","pending","reduce","acc","_nonce","_fromRaw","pageView","_updateFromVisit","dataMap","pageEvents","pageEvent","href","referrersIndices","existingTimestamps","CustomData$1","first","second","rest","_status","isIdentifier","isBoolean","_index","_name","UNDEFINED_INDEX","overwrite","filter","v","uniqueValues","Set","resultValue","_isMappingIdentifier","customDataEvents","valuesCountMap","Conversion$1","Conversion","goalId","revenue","negative","metadata","random","_metadata","_id","_encodeMetadata","indices","conversion","parseMetadata","_listFromVisit","conversionEvents","conversionEvent","Browser$1","Browser","browserVersion","browserType","_fromVisit","staticDataEvent","browserIndex","Device$1","Device","deviceType","OperatingSystem$1","OperatingSystem","os","operatingSystemType","osIndex","GeolocationData","country","region","city","postalCode","coordinates","geolocationEvents","geolocationData","geolocationEvent","VisitsData","visits","_visitNumber","visitNumber","isSent","updateVisitNumber","KameleoonConversionScore","Personalization","personalizationEvents","personalizationEvent","CBScores","cbsMap","extractVarIds","scores","grouped","score","scoreA","scoreB","ids","b","getValues","cbScores","VisitProcessor","visitsData","visitorData","storageVisitorData","experimentData","singleDataTypes","multipleDataTypes","visitorDataTypes","getVisitorStoredDataTypes","processVisit","processBrowser","processDevice","processOperatingSystem","processGeolocationData","processCustomData","processConversion","processPageView","processExperiments","processPersonalization","processMultipleDataTypes","dataType","storedCustomDataIndexes","processKcs","kcsData","processVisitsData","timeLastActivity","timeLastEvent","processVisitNumber","visitOffset","processCbs","cbsData","experimentEvents","experimentEvent","isTargetedRule","processMappingIdentifier","event","mappingIdentifier","Parser","parseFeatureVariable","variable","BOOLEAN","Boolean","JS","CSS","STRING","NUMBER","numberValue","jsonValue","parseVisitorData","visitProcessor","previousVisits","updateStoredVariations","parseRegExp","_","expression","flags","RegExp","parseSecret","secret","repeat","hiddenLength","ClientSettings","getEnvironment","getNetworkDomain","getUpdateInterval","getCleanupInterval","getRequestTimeout","trackingInterval","getTrackingInterval","MIN_TRACKING_INTERVAL_MS","MAX_TRACKING_INTERVAL_MS","DEFAULT_TRACKING_INTERVAL_MS","targetingDataCleanupInterval","settings","Cookie$1","Cookie","cookie","fromString","cookieString","trim","UniqueIdentifier","_value","DataProcessor","mutUpdateData","infoData","mutData","extendTtl","visitorReference","isReference","dereferenceData","mappingIdentifiers","updateCustomData","updatePageView","updateConversion","updateVisitsData","updatePersonalization","TargetedSegment","updateTargetedSegment","targetedSegment","updateCommonData","commonData","mutCleanupData","nextCleanupTime","removeReference","linkedVisitor","closestCleanupTime","dataKey","deleteNestedExpiredField","deleteExpiredField","mutAddUnsentData","unsentData","createReference","isExist","nestedKey","existingTimestamp","existingTime","updateNestedField","createNestedField","existingVisits","updateField","createField","existingData","existing","StaticData","timeSincePreviousVisit","ConditionFactoryInstance","setConditionFactoryInstance","conditionFactoryInstance","createCondition","Node","left","right","inverseResult","isOperator","nodeValue","isInclude","nodeError","leftChild","rightChild","inverse","And","Or","Tree","targetingTypes","nestedConditions","topLevelOperators","flattenSegment","nestedNodes","conditions","operators","nodes","condition","buildTree","tree","evaluateNode","node","isLeafNode","isNonLeafNode","shift","newNode","unshift","firstLevelOrOperators","conditionList","orOperators","group","convertOperators","deviceData","versionMatchType","browserData","checkCondition","parsedVersion","parseFloat","conditionValue","conversionData","customDataIndex","valueMatchType","range","matchType","UNDEFINED","customDataValue","TRUE","FALSE","RANGE","AMONG_VALUES","parseArray","resultData","isArray","parseRange","lowerBound","upperBound","isInRange","CONTAINS","EXACT","REGULAR_EXPRESSION","array","PageUtils","getLatest","pageViewData","latest","current","PageTitle","latestPageView","PageUrl","SdkLanguage","sdkLanguage","sdkType","VisitorCode","nameMatchType","keyMatchType","isEmptyCookie","isValidMatchType","extractedCookie","extractCookie","cookieData","pair","document","dataCookie","cookieMatchType","OPTIONAL","conditionCookie","isOptionalCookie","compareCookieValue","compareKey","compareValue","keyMatch","operatingSystemData","GeolocationCondition","dataCountry","dataRegion","dataCity","conditionCountry","conditionRegion","conditionCity","Segment","evaluationData","TargetFeatureFlag","featureFlagId","ruleId","_d","PreviousPage","pageViewsData","secondLatestPageView","getSecondLatestPageView","latestPV","secondPV","currentPV","currentLatestTs","VisitedPages","pageCount","pagesAmount","FirstVisit","count","unitOfTime","firstVisit","firstVisitTimestamp","elapsedTimeMilliseconds","elapsedTimeUnit","LastVisit","latestPreviousVisit","lastVisitTimestamp","SameDayVisits","visitCount","todayVisits","todayTimestamp","setHours","todayVisitsAmount","Visits","visitsAmount","NewVisitor","visitorType","isNewVisitor","NEW","RETURNING","ApplicationVersion","ConversionLikelihood","keyMomentId","ExclusiveExperimentCondition","campaignType","personalizations","hasSingleValidVariation","hasNoVariations","hasNoPersonalizations","Experiment","Any","TargetExperimentCondition","variationMatchType","variation","experiment","ANY","TargetPersonalizationCondition","personalizationId","personalizationData","ConditionFactory","CUSTOM_DATUM","EXCLUSIVE_EXPERIMENT","TARGET_EXPERIMENT","TARGET_PERSONALIZATION","DEVICE_TYPE","BROWSER","PAGE_URL","PAGE_TITLE","CONVERSIONS","VISITOR_CODE","SDK_LANGUAGE","COOKIE","OPERATING_SYSTEM","GEOLOCATION","APPLICATION_VERSION","PREVIOUS_PAGE","PAGE_VIEWS","LAST_VISIT","FIRST_VISIT","SAME_DAY_VISITS","VISITS","NEW_VISITORS","HEAT_SLICE","KameleoonStorageKey","DEFAULT_CLIENT_CONFIGURATION","VISIT_DURATION","IntegrityChecker","isDataValid","ClientData","checkClientDataIntegrity","TargetingData","checkTargetingDataIntegrity","DataInfo","checkDataInfoIntegrity","VariationData","checkVariationDataIntegrity","TrackingData","checkTrackingDataIntegrity","getDefaultData","getDefaultClientData","nextVisitTime","scheduledVisitors","ConsentData","KameleoonSimulationFFData","ForcedExperimentVariation","ForcedFeatureVariation","hasFields","hasInvalidFields","obj","visitorValues","fields","every","field","DataStorage$1","externalStorage","storageKey","integrityChecker","defaultData","update","newData","StorageCleanupManager","initCleanupInterval","cleanupData","dataResult","cleanupVariationData","cleanupForcedFeatureVariationData","cleanupForcedExperimentVariationData","cleanupConsentData","consentData","consent","featureVariations","cleanupObjectValues","forcedFeatureVariationData","simulated","features","forcedExperimentVariationData","LegalConsent","DataManager","dataStorage","infoStorage","targetingTrees","mappingIdentifierCustomDataIndex","persistentCustomDataIndexes","localCustomDataIndexes","customDataIndexByName","cleanupIntervalId","dataProcessor","cleanupCallback","getUnsentData","infoResult","unsentDataKeys","isNextVisit","getDataFromRaw","cdIndex","getPendingData","customDataItem","pageViewItem","targetedSegmentData","targetedSegmentItem","geolocationItem","browserItem","deviceItem","osData","osItem","storeTrackedData","storeDataForVisitors","kameleoonData","hasPersistentCustomData","storeData","storeDataInternal","mutUpdateTargetingData","updater","isPersistentCustomData","isUniqueIdentifier","uniqueIdentifier","getVisitorIdentifier","getMappingIdentifier","setMappingIdentifier","currentMappingIdentifier","storageData","getLinkedVisitor","visitorDataOrRef","trySetCustomDataIndexByName","nextCleanup","nextDataCleanup","userId","unsentDataVisitors","identifierCustomDataIndex","indexes","customDataLocalOnlyIndexes","localOnly","scope","Visitor","getCustomDataIndexByName","DEFAULT_MAX_AGE","VisitorCodeManager$1","isRequired","getData","getDataCallback","setData","setDataCallback","validateVisitorCode","getVisitorCode","defaultVisitorCode","existingVisitorCode","generateVisitorCode","processSimulatedVariations","maxAge","path","simulatedVariationsData","getSimulatedVariations","clearSimulatedVariations","updateForcedFeatureVariations","parsed","decodeURIComponent","simulatedVariationFromJson","randomCharacterArray","characters","join","setVariationConfiguration","hasRequiredCore","hasRequiredSha256","sha256$2","core$1","require$$0","freeze","__proto__","sha256Exports","module","CryptoJS","crypto","msCrypto","cryptoSecureRandomInt","getRandomValues","Uint32Array","randomBytes","readInt32LE","create","F","subtype","C","C_lib","lib","Base","extend","overrides","mixIn","init","$super","instance","properties","propertyName","clone","WordArray","words","sigBytes","encoder","Hex","concat","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","j","ceil","nBytes","C_enc","enc","hexChars","bite","hexStr","hexStrLength","substr","Latin1","latin1Chars","fromCharCode","latin1Str","latin1StrLength","charCodeAt","Utf8","escape","utf8Str","unescape","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","_process","doFlush","processedWords","dataWords","dataSigBytes","blockSize","nBlocksReady","nWordsReady","_minBufferSize","nBytesReady","offset","_doProcessBlock","Hasher","cfg","_doReset","messageUpdate","finalize","_doFinalize","_createHelper","hasher","_createHmacHelper","C_algo","HMAC","algo","H","K","isPrime","sqrtN","sqrt","factor","getFractionalBits","nPrime","pow","W","SHA256","_hash","M","c","g","h","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","t1","nBitsTotal","nBitsLeft","HmacSHA256","sha256","getHashDoubleForMEGroup","visitorIdentifier","meGroupName","calculateHash","getHashDouble","respoolTime","suffix","seed","hashDigest","VariationConfiguration","externalStorageForcedExperimentVariations","externalStorageForcedFeatureVariations","storageForcedExperimentVariations","storageForcedFeatureVariations","updateDataStatus","experimentIdList","updatedVariationData","getVariationData","getVisitorsWithUnsentData","visitors","featureFlagVariations","getVariation","legalConsent","withAssignment","defaultVariationKey","Given","forcedVariationData","getForcedExperimentVariation","forcedVariation","forceTargeting","targetedVariation","createAndSaveForcedTargetedVariation","targetingResult","ruleHash","NotGiven","EXPERIMENTATION","evaluateCBScores","variationHash","varByExp","resultWrite","updateForcedExperimentVariation","forcedExperimentVariation","updatedForcedVariationData","forcedFeatureVariations","updatedForcedFeatureVariationData","updatedSimulatedFeatureVariationData","forcedFeatureVariation","getForcedFeatureVariation","simulatedData","forcedData","forcedResult","parseForcedVariationData","simulatedVariation","isSimulatedVariationJson","varId","expId","varIdGroupByScores","varByExps","varByExpExistInCBS","varGroup","KameleoonEventSource$1","externalEventSource","isConnectionOpen","onEvent","handleMessage","eventSiteCode","ts","Byte","MAX_BODY_SIZE","Mb","BodyProvider","currentSize","resultBody","hasUserAgent","trackingVisitors","getTrackingBody","cleanup","addData","userAgent","isConsentProvided","lines","variationDataLines","getVariationDataLines","visitorDataLines","getVisitorDataLines","addVisitorTrackingLines","nonceValue","prepareVisitorBody","identifier","getIdentifier","activityLine","getActivityLine","checkSize","line","Tracker","trackingStorage","bodyProvider","sendDataAll","scheduleVisitor","trackingData","checkIsIdentifier","getUserAgent","userAgentData","UserAgent","storageResult","sendData","sendDataForVisitor","pendingData","trackingVisitorCodes","trackedVisitors","targetVisitorCode","getUnsentVisitorData","getUnsentVariationData","notTrackedVisitors","addNotTrackedVisitors","updatedData","visitorDataForUpdate","sentExperimentIds","isIncluded","KameleoonClient$1","KameleoonClient","dependencies","internalConfiguration","stubMode","initialized","consentDataStorage","tracker","externals","externalLogger","clientSettings","externalPRNG","customDataManager","clientDataStorage","DataStorage","variationDataStorage","forcedVariationDataStorage","simulatedVariationDataStorage","targetingDataStorage","dataInfoStorage","Requester","KameleoonEventSource","visitorCodeOrParams","dataRest","params","getRemoteVisitorData","shouldAddData","trackConversion","flush","_flushInternal","isInstant","_isConsentProvided","visitorCodeKey","flushInstant","validatedVisitorCode","_parseFlushParams","instant","getFeatureFlags","resultFeatureFlags","getVisitorFeatureFlags","activeVariations","_getActiveFeatureVariations","_getFeatureVariation","getVariations","onlyActive","getActiveFeatureFlags","resultFeatureList","variables","_getFeatureVariables","resultVariables","getFeatureFlagVariationKey","getFeatureFlagVariable","featureFlagVariable","getFeatureFlagVariables","parsedVariable","isFeatureFlagActive","firstParam","isActive","remoteData","getVisitorWarehouseAudience","warehouseKey","getEngineTrackingCode","trackingCode","setForcedVariation","_setForcedVariation","evaluateAudiences","targetedSegments","audienceTracking","getDataFile","dataFile","variationsMap","sourceVariation","variablesMap","ruleVariations","baseVariation","setUserConsent","updateConsentData","readResult","getLegalConsent","consentDataResult","extractLegalConsent","Unknown","evalExp","_evaluate","save","ruleType","EvaluatedExperiment","fromForcedFeatureVariation","_isVisitorNotInHoldout","_isFFUnrestrictedByMEGroup","_getCodeForHash","fromVariationData","fromDefaultVariationKey","isSimulated","Evaluation","selected","meGroup","codeForHash","hashMEGroup","isNotInHoldout","holdoutHash","writeResult","_refreshDataFileIfStale","varKey","KameleoonUtils","simulateSuccessRequest","r","getCookieValue","pairKey","pairValue","CookieParameter","fetch","ACTIVITY_INTERVAL","VisitorCodeManager","resultCookie","getResultCookie","cookieArray","KeyValueDelimiter","MaxAge","Path","Domain","PairsDelimiter","localStorage","getItem","getEngineConsentData","setItem","KameleoonVisitorCodeManager","engineConsentData","engineConsent","abTesting","AB_TESTING","EventSource","addEventListener","onerror","KameleoonPRNG","arr","uint32Max","DefaultLogger","toLocaleString","timeZoneName","VisitorActivityManager","interval","setup","updateLastActivity","ClientDataManager","platformAnalyzer","visitor","updateVisitor","staticData","checkVisitor","lastVisit","fetchVisit","previousVisit","createVisitor","getResult","platform","lastVisitorCode","lastTimestamp","visitorVisits","Utils","getFirstMatch","regex","match","getSecondMatch","target","sources","PlatformAnalyzer","navigator","parsedResult","parseBrowser","describe","getBrowserVersion","fallbackRegex","parseOS","parsePlatform","platformRulesOSName","Tablet","Phone","Desktop","parts","majorMinor","parseWebView","location","KameleoonCore","_internals","internalVisitorCodeManager","JAVASCRIPT","SDKCoreDataStorage","cookieDomain","_super","setLegalConsent"],"mappings":"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","x_google_ignoreList":[2]}