@kameleoon/javascript-sdk 4.22.0 → 4.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/javascript-sdk.cjs.min.js +1 -1
- package/dist/javascript-sdk.cjs.min.js.map +1 -1
- package/dist/javascript-sdk.es.min.js +1 -1
- package/dist/javascript-sdk.es.min.js.map +1 -1
- package/dist/javascript-sdk.umd.min.js +1 -1
- package/dist/javascript-sdk.umd.min.js.map +1 -1
- package/dist/kameleoonClient.d.ts +3 -0
- package/package.json +2 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).KameleoonSDK={})}(this,function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function a(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var t=e.default;if("function"==typeof t){var i=function e(){var i=!1;try{i=this instanceof e}catch{}return i?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};i.prototype=t.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(e).forEach(function(t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(i,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}),i}var n,o,r,s={},u={},l=(o||(o=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Err=e.Ok=void 0;var t=function(){if(n)return u;function e(e){if(!this.ok){if("string"==typeof this.error||void 0===this.error)throw new Error(e||this.error||"There was an error! No specific error message was provided.");throw e&&(this.error.message=e),this.error}return this.data}function t(e){return this.ok?this.data:e(this.error)}function i(e){return this.ok?this.data:e}function a(e){return this.ok&&e(this.data),this}return n=1,Object.defineProperty(u,"__esModule",{value:!0}),u.Err=u.Ok=void 0,u.Ok=function(n){return{ok:!0,data:n,throw:e,else:t,or:i,and:a}},u.Err=function(n){return{ok:!1,error:n,throw:e,else:t,or:i,and:a}},u}();Object.defineProperty(e,"Ok",{enumerable:!0,get:function(){return t.Ok}}),Object.defineProperty(e,"Err",{enumerable:!0,get:function(){return t.Err}})}(s)),s);function d(e,t,i,a){return new(i||(i=Promise))(function(t,n){function o(e){try{s(a.next(e))}catch(e){n(e)}}function r(e){try{s(a.throw(e))}catch(e){n(e)}}function s(e){var a;e.done?t(e.value):(a=e.value,a instanceof i?a:new i(function(e){e(a)})).then(o,r)}s((a=a.apply(e,[])).next())})}"function"==typeof SuppressedError&&SuppressedError,e.KameleoonException=void 0,(r=e.KameleoonException||(e.KameleoonException={})).Credentials="Credentials",r.EventSourceInitialization="EventSourceInitialization",r.FeatureFlagConfigurationNotFound="FeatureFlagConfigurationNotFound",r.FeatureFlagVariableNotFound="FeatureFlagVariableNotFound",r.FeatureFlagVariationNotFound="FeatureFlagVariationNotFound",r.FeatureFlagExperimentNotFound="FeatureFlagExperimentNotFound",r.FeatureFlagEnvironmentDisabled="FeatureFlagEnvironmentDisabled",r.VisitAmount="VisitAmount",r.VisitorCodeMaxLength="VisitorCodeMaxLength",r.VisitorCodeEmpty="VisitorCodeEmpty",r.StorageInitialization="StorageInitialization",r.StorageWrite="StorageWrite",r.StorageRead="StorageRead",r.StorageParse="StorageParse",r.StorageEmpty="StorageEmpty",r.ClientConfiguration="ClientConfiguration",r.TargetingCondition="TargetingCondition",r.AmongValuesCheck="AmongValuesCheck",r.RangeCheck="RangeCheck",r.Initialization="Initialization",r.JSONParse="JSONParse",r.NumberParse="NumberParse",r.VersionParse="VersionParse",r.CookieParse="CookieParse",r.SemanticVersionParse="SemanticVersionParse",r.RemoteData="RemoteData",r.MaximumRetriesReached="MaximumRetriesReached";const c={[e.KameleoonException.CookieParse]:e=>`Couldn't parse cookie string: ${e}`,[e.KameleoonException.JSONParse]:e=>`Couldn't parse JSON variable: ${e}`,[e.KameleoonException.NumberParse]:e=>`It's not possible to parse value ${e} to Number`,[e.KameleoonException.VersionParse]:e=>`It's not possible to parse a version value ${e} to Number, version should be in format x.x`,[e.KameleoonException.SemanticVersionParse]:e=>`It's not possible to parse a version value ${e} to Number, version should be in format x.x.x`,[e.KameleoonException.Initialization]:()=>"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods",[e.KameleoonException.Credentials]:()=>"KameleoonClient can not be created without credentials",[e.KameleoonException.StorageInitialization]:()=>"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed",[e.KameleoonException.EventSourceInitialization]:()=>"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed",[e.KameleoonException.FeatureFlagConfigurationNotFound]:e=>`No feature flag with key ${e} was found.`,[e.KameleoonException.FeatureFlagEnvironmentDisabled]:(e,t)=>`Feature flag with key ${e} is disabled in ${t} environment.`,[e.KameleoonException.FeatureFlagVariableNotFound]:(e,t)=>`No feature flag variable with key ${e} was found for ${t} visitorCode.`,[e.KameleoonException.FeatureFlagVariationNotFound]:(e,t)=>`No feature flag variation with key ${e} was found for ${t} visitorCode.`,[e.KameleoonException.FeatureFlagExperimentNotFound]:(e,t)=>`No feature flag experiment with id ${e} was found for ${t} visitorCode.`,[e.KameleoonException.VisitAmount]:()=>"Visit amount must be a number between 1 and 25",[e.KameleoonException.VisitorCodeMaxLength]:()=>"Visitor code can not be more than 255 characters long",[e.KameleoonException.VisitorCodeEmpty]:()=>"Visitor code can not be empty",[e.KameleoonException.StorageWrite]:e=>`Couldn't update storage for kameleoonClient: ${e}`,[e.KameleoonException.StorageRead]:e=>`No data found in storage under ${e} key`,[e.KameleoonException.StorageEmpty]:()=>"No data found in storage",[e.KameleoonException.StorageParse]:(e,t)=>`Couldn't parse ${t} storage data, the data may be corrupted. Error: ${e}`,[e.KameleoonException.ClientConfiguration]:e=>`Couldn't retrieve client configuration from Kameleoon Api. Error: ${e}`,[e.KameleoonException.TargetingCondition]:e=>`${e} targeting condition is not yet supported.`,[e.KameleoonException.AmongValuesCheck]:(e,t)=>`Couldn't parse value "${t}": ${e}`,[e.KameleoonException.RangeCheck]:e=>`Couldn't parse value "${e}" as a range, value should be in format [x: number, y: number]`,[e.KameleoonException.RemoteData]:e=>`Couldn't retrieve data from Kameleoon server. Error: ${e}`,[e.KameleoonException.MaximumRetriesReached]:e=>`Maximum retries reached, request failed. Reason: ${e}`};function g(e){throw new Error(`Reaching an impossible state because of ${e}`)}class h extends Error{constructor(t,i,a){switch(super(`Error: ${t}`),this.name="KameleoonError",this.errorType=t,t){case e.KameleoonException.Initialization:case e.KameleoonException.Credentials:case e.KameleoonException.VisitorCodeMaxLength:case e.KameleoonException.VisitorCodeEmpty:case e.KameleoonException.StorageInitialization:case e.KameleoonException.VisitAmount:case e.KameleoonException.EventSourceInitialization:case e.KameleoonException.StorageEmpty:this.message=c[t]();break;case e.KameleoonException.CookieParse:case e.KameleoonException.FeatureFlagConfigurationNotFound:case e.KameleoonException.NumberParse:case e.KameleoonException.ClientConfiguration:case e.KameleoonException.MaximumRetriesReached:case e.KameleoonException.RemoteData:case e.KameleoonException.VersionParse:case e.KameleoonException.SemanticVersionParse:this.message=c[t](i);break;case e.KameleoonException.FeatureFlagExperimentNotFound:case e.KameleoonException.FeatureFlagVariationNotFound:case e.KameleoonException.FeatureFlagVariableNotFound:this.message=c[t](i,a);break;case e.KameleoonException.FeatureFlagEnvironmentDisabled:this.message=void 0!==a?c[t](i,a):i;break;case e.KameleoonException.StorageWrite:case e.KameleoonException.JSONParse:case e.KameleoonException.StorageRead:this.message=c[t](i);break;case e.KameleoonException.StorageParse:this.message=c[t](i,a);break;case e.KameleoonException.TargetingCondition:this.message=c[t](i);break;case e.KameleoonException.AmongValuesCheck:this.message=c[t](i,a);break;case e.KameleoonException.RangeCheck:this.message=c[t](i);break;default:g(t)}}get type(){return this.errorType}}var p,v,m,f,C;!function(e){e.DataApi="dataApi",e.AccessToken="accessToken",e.Events="events",e.ClientConfiguration="clientConfiguration"}(p||(p={})),e.HttpMethod=void 0,(v=e.HttpMethod||(e.HttpMethod={})).Get="GET",v.Post="POST",function(e){e[e.VisitEvent=0]="VisitEvent",e[e.VisitData=1]="VisitData",e[e.DataMap=2]="DataMap"}(m||(m={})),e.RequestType=void 0,(f=e.RequestType||(e.RequestType={})).Configuration="configuration",f.Tracking="tracking",f.RemoteData="remoteData",e.Header=void 0,(C=e.Header||(e.Header={})).UserAgent="User-Agent",C.ContentType="Content-Type",C.SdkVersion="X-Kameleoon-SDK-Version",C.SdkType="X-Kameleoon-SDK-Type",C.Authorization="Authorization",C.AcceptEncoding="Accept-Encoding",C.IfModifiedSince="If-Modified-Since",C.LastModified="Last-Modified";const y="eventType=staticData",D="&browserIndex=",E="&browserVersion=",T="&deviceType=",I="&visitorCode=",k="&sdkVersion=",S="&nonce=",V="&id=",R="&maxNumberPreviousVisits=",w="&os=",b="&osIndex=",A="&browser=",K="&mappingValue=",x="visit/",O={[p.DataApi]:"data.kameleoon.io",[p.AccessToken]:"api.kameleoon.com",[p.Events]:"events.kameleoon.eu",[p.ClientConfiguration]:"sdk-config.kameleoon.eu"};var $;e.LogLevel=void 0,($=e.LogLevel||(e.LogLevel={}))[$.NONE=0]="NONE",$[$.ERROR=1]="ERROR",$[$.WARNING=2]="WARNING",$[$.INFO=3]="INFO",$[$.DEBUG=4]="DEBUG";const F={[e.LogLevel.NONE]:"NONE",[e.LogLevel.ERROR]:"ERROR",[e.LogLevel.WARNING]:"WARNING",[e.LogLevel.INFO]:"INFO",[e.LogLevel.DEBUG]:"DEBUG"},N=(e,t)=>"credentials"===e?{clientId:"****",clientSecret:"****"}:t instanceof Map?Array.from(t.entries()):t;class M{static setLogger(e){M.logger=e}static setLogLevel(e){M.logLevel=e}static log({level:e,strings:t,keys:i}){if(!M.checkLevel(e))return;let a;if("string"==typeof t)a=t;else if("function"==typeof t)try{a=t()}catch(e){a="Failed to log message"}else a=function(e,t){let i="";if(t)for(let a=0;a<t.length;a++){let n=t[a];if("object"==typeof n)try{i+=e[a]+JSON.stringify(n,N)}catch(t){i+=e[a]+"{object}"}else i+="string"==typeof n?e[a]+"'"+n+"'":e[a]+n}return i+=e[e.length-1],i}(t,i);M.writeMessage(e,a)}static info(t,...i){M.log({level:e.LogLevel.INFO,strings:t,keys:i})}static error(t,...i){M.log({level:e.LogLevel.ERROR,strings:t,keys:i})}static warning(t,...i){M.log({level:e.LogLevel.WARNING,strings:t,keys:i})}static debug(t,...i){M.log({level:e.LogLevel.DEBUG,strings:t,keys:i})}static checkLevel(t){return t<=M.logLevel&&t!==e.LogLevel.NONE}static writeMessage(e,t){M.logger.log(e,`Kameleoon [${F[e]}]: ${t}`)}}M.logger=new class{log(t,i){switch(t){case e.LogLevel.DEBUG:console.debug(i);break;case e.LogLevel.INFO:console.info(i);break;case e.LogLevel.WARNING:console.warn(i);break;case e.LogLevel.ERROR:console.error(i)}}},M.logLevel=e.LogLevel.WARNING;let L=class{constructor({urlProvider:e,packageInfo:t,externalRequester:i,requestTimeout:a,trackRetryDelay:n,useAbortController:o}){M.debug`CALL: new Requester(urlProvider, packageInfo: ${t}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${n}, useAbortController: ${o})`,this.urlProvider=e,this.useAbortController=o,this.externalRequester=i,this.trackRetryDelay=n,this.packageInfo=t,this.timeout=a,M.debug`RETURN: new Requester(urlProvider, packageInfo: ${t}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${n}, useAbortController: ${o})`}getClientConfiguration(t,i){return d(this,0,void 0,function*(){const a=this.urlProvider.getClientConfigurationUrl(t);let n=Object.assign({[e.Header.SdkType]:this.packageInfo.type,[e.Header.SdkVersion]:this.packageInfo.version},i&&{[e.Header.IfModifiedSince]:i});try{let t={message:""};M.debug`Running configuration request Method: ${e.HttpMethod.Get}, Url: ${a}, Headers: ${n}, with retry limit ${2}`;for(let i=0;i<2;i++){const o=yield this.sendRequest({url:a,requestType:e.RequestType.Configuration,retryCount:i,parameters:{method:e.HttpMethod.Get,headers:n}});if(o.ok){const e=yield o.json();this.logReceivedConfigurationResponse(o.status,a,n);const t=this.getLastModifiedHeader(o),i=e;return l.Ok({configuration:i,lastModified:t})}if(304===o.status)return this.logReceivedConfigurationResponse(o.status,a,n),l.Ok({});if(1===i){if(o.text){const e=yield o.text();t=JSON.parse(e)}M.error`Failed to get configuration response ${{status:o.status,message:t.message}} for request Method: ${e.HttpMethod.Get}, Url: ${a}, Headers: ${n}`}else yield this.logRequestError({logLevel:e.LogLevel.WARNING,message:"Failed to get configuration response",response:o,method:e.HttpMethod.Get,url:a})}return l.Err(new h(e.KameleoonException.MaximumRetriesReached,t.message))}catch(t){return yield this.logRequestError({logLevel:e.LogLevel.ERROR,message:"Failed to get configuration response",error:t,method:e.HttpMethod.Get,url:a,headers:n}),l.Err(new h(e.KameleoonException.ClientConfiguration,t))}})}getRemoteData(t){var i;return d(this,0,void 0,function*(){const a=this.urlProvider.getRemoteDataUrl(t);M.debug`Running remote data request Method: ${e.HttpMethod.Get}, Url: ${a}`;try{const t=yield this.sendRequest({url:a,requestType:e.RequestType.RemoteData,retryCount:0,parameters:{method:e.HttpMethod.Get}});if(!t.ok){if(yield this.logRequestError({logLevel:e.LogLevel.ERROR,message:"Failed to get remote data response",response:t,method:e.HttpMethod.Get,url:a}),t.text){const a=yield t.text(),n=null===(i=JSON.parse(a))||void 0===i?void 0:i.message;return l.Err(new h(e.KameleoonException.RemoteData,n))}return l.Err(new h(e.KameleoonException.RemoteData,"Unknown Reason - no `text()` was found for a response"))}const n=yield t.json();return M.debug`Received remote data response: ${{status:t.status}} for request Method: ${e.HttpMethod.Get}, Url: ${a}`,l.Ok(n)}catch(t){return yield this.logRequestError({logLevel:e.LogLevel.ERROR,message:"Failed to get remote data response",error:t,method:e.HttpMethod.Get,url:a}),l.Err(new h(e.KameleoonException.RemoteData,t))}})}getVisitorData({visitorCode:t,filters:i,isMappingIdentifier:a}){var n;return d(this,0,void 0,function*(){const o=this.urlProvider.getVisitorDataUrl({visitorCode:t,filters:i,isMappingIdentifier:a});M.debug`Running visitor data request Method: ${e.HttpMethod.Get}, Url: ${o}`;try{const t=yield this.sendRequest({url:o,requestType:e.RequestType.RemoteData,retryCount:0,parameters:{method:e.HttpMethod.Get}});if(!t.ok){if(yield this.logRequestError({logLevel:e.LogLevel.ERROR,message:"Failed to get visitor data response",response:t,method:e.HttpMethod.Get,url:o}),"function"==typeof t.text){const i=yield t.text();if(i){const t=null===(n=JSON.parse(i))||void 0===n?void 0:n.message;return l.Err(new h(e.KameleoonException.RemoteData,t))}}return t.status?l.Err(new h(e.KameleoonException.RemoteData,`No error message. Error status: ${t.status}`)):l.Err(new h(e.KameleoonException.RemoteData,"Unknown Reason - no text message or error status was found for a response"))}const i=yield t.json();return M.debug`Received visitor data response: ${{status:t.status}} for request Method: ${e.HttpMethod.Get}, Url: ${o}`,l.Ok(i)}catch(t){return yield this.logRequestError({logLevel:e.LogLevel.ERROR,message:"Failed to get visitor data response",error:t,method:e.HttpMethod.Get,url:o}),l.Err(new h(e.KameleoonException.RemoteData,t))}})}track(t,i){return d(this,0,void 0,function*(){const a=this.urlProvider.getTrackingUrl(i);M.debug`Running tracking request Method: ${e.HttpMethod.Post}, Url: ${a}, Body: ${t}, with retry limit ${2}, retry delay ${this.trackRetryDelay} ms`;for(let i=0;i<2;i++){let n;try{if(n=yield this.sendRequest({url:a,retryCount:i,requestType:e.RequestType.Tracking,parameters:{body:t,method:e.HttpMethod.Post,headers:{[e.Header.ContentType]:"*/*"}}}),n.ok)return M.debug`Received tracking response: ${{status:n.status}} for request Method: ${e.HttpMethod.Post}, Url: ${a}, Body: ${t}`,l.Ok();yield this.logRequestError({logLevel:1==i?e.LogLevel.ERROR:e.LogLevel.WARNING,message:"Failed to get tracking response",response:n,method:e.HttpMethod.Post,url:a})}catch(t){yield this.logRequestError({logLevel:1==i?e.LogLevel.ERROR:e.LogLevel.WARNING,message:"Failed to get tracking response",error:t,method:e.HttpMethod.Post,url:a})}i<2&&(yield new Promise(e=>setTimeout(e,this.trackRetryDelay)))}return l.Err()})}sendRequest({url:e,requestType:t,retryCount:i,parameters:a}){return d(this,0,void 0,function*(){let n;if(this.useAbortController){const o=new AbortController,r=setTimeout(()=>o.abort(),this.timeout);n=yield this.externalRequester.sendRequest({url:e,retryCount:i,requestType:t,parameters:Object.assign(Object.assign({},a),{signal:o.signal})}),clearTimeout(r)}else n=yield this.externalRequester.sendRequest({url:e,retryCount:i,requestType:t,parameters:a});return n})}logRequestError({logLevel:e,message:t,error:i,method:a,url:n,response:o,headers:r}){return d(this,0,void 0,function*(){if(i){let o="Unknown error";i instanceof Error&&(o=i.message),M.log({level:e,strings:()=>`${t} with error: ${o} for request Method: ${a}, Url: ${n}`})}else if(o&&M.checkLevel(e)){const i=yield this.parseResponse(o);M.log({level:e,strings:()=>`${t} response: Status: '${i.status}' Message: '${i.message}' for request Method: ${a}, Url: '${n}'`+(r?`, Headers: ${r}`:"")})}})}parseResponse(e){return d(this,0,void 0,function*(){let t="";try{if("function"==typeof e.text){const i=yield e.text();i&&(t=i)}}catch(e){}return{status:e.status,message:t}})}getLastModifiedHeader(t){if(t.headers){const i=e.Header.LastModified.toLowerCase();for(const[e,a]of t.headers)if(e.toLowerCase()===i)return a}}logReceivedConfigurationResponse(t,i,a){M.debug`Received configuration response: ${{status:t}} for request Method: ${e.HttpMethod.Get}, Url: ${i}, Headers: ${a}`}};var _,U,P,G,B,z,j,q,H,W,Y,X;e.Environment=void 0,(_=e.Environment||(e.Environment={})).Production="production",_.Staging="staging",_.Development="development";class J{constructor(){this.ready=!1,this.isCustomDomain=!1,this.domains=O}initialize({domain:e,siteCode:t,packageInfo:i,environment:a}){this.siteCode=t,this.environment=a,this.packageInfo=i,this.ready=!0,this.setDomains(e)}set dataApiDomain(e){if(!this.isCustomDomain)return void(this.domains[p.DataApi]=e);const t=e.split(".")[0],i=this.domains[p.DataApi];this.domains[p.DataApi]=i.replace(/^[^.]+/,t)}get dataApiDomain(){return this.domains[p.DataApi]}getClientConfigurationUrl(t){this.isInitialized();const i=`https://${this.domains[p.ClientConfiguration]}/v3/`,a=this.environment===e.Environment.Production?"":"?environment="+encodeURIComponent(this.environment);let n="";return t&&(n=a?"&ts="+t:"?ts="+t),i+this.siteCode+a+n}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains[p.Events]}:8110/sse?siteCode=${this.siteCode}`}getRemoteDataUrl(e){return this.isInitialized(),this.getDataApiUrl(m.DataMap)+this.siteCode+"&key="+encodeURI(e)}getVisitorDataUrl({visitorCode:e,filters:t,isMappingIdentifier:i}){this.isInitialized();const{customData:a,previousVisitAmount:n,currentVisit:o,conversions:r,geolocation:s,experiments:u,pageViews:l,device:d,browser:c,operatingSystem:g,kcs:h,personalization:p,visitorCode:v,cbs:f}=t,C=i?K:I,y=a||v?"&customData="+!0:"",D=r?"&conversion="+!0:"",E=s?"&geolocation="+!0:"",T=u?"&experiment="+!0:"",k=l?"&page="+!0:"",S="&staticData="+!0,V=o?"¤tVisit="+!0:"",w=h?"&kcs="+!0:"",b=p?"&personalization="+!0:"",A="number"!=typeof n?R+1:R+n,x=f?"&cbs="+!0:"";return this.getDataApiUrl(m.VisitData)+this.siteCode+C+e+A+y+D+E+T+k+S+V+w+b+x}getTrackingUrl(e){this.isInitialized();const{type:t,version:i}=this.packageInfo;let a=this.getDataApiUrl(m.VisitEvent)+this.siteCode+"&sdkName="+t+k+i;return e&&(a+="&bodyUa="+!0),a}getAccessTokenUrl(){this.isInitialized();const{type:e,version:t}=this.packageInfo;return`https://${this.domains[p.AccessToken]}/oauth/token?sdkName=`+e+k+t+"&siteCode="+this.siteCode}isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}getDataApiUrl(e){if(!this.domains[p.DataApi])throw new Error("Data API domain is not set");const t=`https://${this.domains[p.DataApi]}`;switch(e){case m.VisitEvent:return`${t}/${x+"events?siteCode="}`;case m.VisitData:return`${t}/${x+"visitor?siteCode="}`;case m.DataMap:return`${t}/map/map?siteCode=`}}setDomains(e){e&&(this.isCustomDomain=!0,this.domains[p.DataApi]="data."+e,this.domains[p.AccessToken]="api."+e,this.domains[p.Events]="events."+e,this.domains[p.ClientConfiguration]="sdk-config."+e)}}e.VariableType=void 0,(U=e.VariableType||(e.VariableType={})).BOOLEAN="BOOLEAN",U.NUMBER="NUMBER",U.STRING="STRING",U.JSON="JSON",U.JS="JS",U.CSS="CSS",e.TrackingStatus=void 0,(P=e.TrackingStatus||(e.TrackingStatus={})).Sent="sent",P.Unsent="unsent",P.Pending="pending",e.Milliseconds=void 0,(G=e.Milliseconds||(e.Milliseconds={}))[G.Second=1e3]="Second",G[G.Minute=6e4]="Minute",G[G.Hour=36e5]="Hour",G[G.Day=864e5]="Day",G[G.Week=6048e5]="Week",G[G.Month=2592e6]="Month";class Q{constructor(t){this.cacheMap=new Map,this.intervalId=null,this.cleanupTimeout=t*e.Milliseconds.Second}add({key:t,data:i,lifetime:a}){M.debug`CALL: CacheManager.add(key: ${t}, data: ${i}, lifetime: ${a})`,null===this.intervalId&&this.activate();const n=a*e.Milliseconds.Second,o={data:i,expirationTime:Date.now()+n};this.cacheMap.set(t,o),M.debug`RETURN: CacheManager.add(key: ${t}, data: ${i}, lifetime: ${a})`}getAliveItem(e){M.debug`CALL: CacheManager.getAliveItem(key: ${e})`;const t=this.cacheMap.get(e);if(t&&t.expirationTime>=Date.now()){const i=t.data;return M.debug`RETURN: CacheManager.getAliveItem(key: ${e}) -> (item: ${i})`,i}return t&&this.cacheMap.delete(e),M.debug`RETURN: CacheManager.getAliveItem(key: ${e}) -> (item: null)`,null}activate(){this.intervalId=setInterval(()=>{const e=Date.now();for(const[t,i]of this.cacheMap)i.expirationTime<e&&this.cacheMap.delete(t);this.cacheMap.size||this.cleanupInterval()},this.cleanupTimeout)}cleanupInterval(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null)}}!function(e){e[e.Polling=0]="Polling",e[e.RealTime=1]="RealTime"}(B||(B={})),function(e){e.TARGETED_DELIVERY="TARGETED_DELIVERY",e.EXPERIMENTATION="EXPERIMENTATION"}(z||(z={})),function(e){e.ANDROID="ANDROID",e.SWIFT="SWIFT",e.JAVA="JAVA",e.CSHARP="CSHARP",e.NODEJS="NODEJS",e.PHP="PHP",e.RUBY="RUBY",e.GO="GO",e.FLUTTER="FLUTTER",e.REACTJS="REACTJS"}(j||(j={})),function(e){e.ACTIVATED="ACTIVATED",e.DEACTIVATED="DEACTIVATED",e.SCHEDULED="SCHEDULED"}(q||(q={})),e.CustomDataScope=void 0,(H=e.CustomDataScope||(e.CustomDataScope={})).Visit="VISIT",H.Visitor="VISITOR",H.Page="Page",function(e){e.Required="REQUIRED",e.NotRequired="NOT_REQUIRED"}(W||(W={})),function(e){e.PartiallyBlocked="PARTIALLY_BLOCK",e.CompletelyBlocked="FULLY_BLOCK"}(Y||(Y={}));class Z{addEventHandler(e,t){this.eventHandlers||(this.eventHandlers=new Map),this.eventHandlers.set(e,t)}fireEvent(e,t){var i;const a=null===(i=this.eventHandlers)||void 0===i?void 0:i.get(e);a&&t&&a(t)}}e.EventType=void 0,(X=e.EventType||(e.EventType={})).Evaluation="evaluation",X.ConfigurationUpdate="configurationUpdate";const ee={customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:W.NotRequired,dataApiDomain:"data.kameleoon.io",consentOptOutBehavior:Y.PartiallyBlocked}};class te{constructor(e){this._featureFlags=e.slice().sort((e,t)=>e.id-t.id)}getFeatureFlagByHash(e){let t=Math.floor(e*this._featureFlags.length);return t=Math.min(t,this._featureFlags.length-1),this._featureFlags[t]}get featureFlags(){return this._featureFlags}}function ie(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e]))}var ae,ne,oe,re;e.KameleoonData=void 0,(ae=e.KameleoonData||(e.KameleoonData={})).UniqueIdentifier="uniqueIdentifier",ae.CustomData="customData",ae.PageView="pageView",ae.GeolocationData="geolocation",ae.Browser="browser",ae.Conversion="conversion",ae.Cookie="cookie",ae.Device="device",ae.OperatingSystem="operatingSystem",ae.UserAgent="userAgent",ae.ApplicationVersion="applicationVersion",ae.VisitsData="visitsData",ae.KameleoonConversionScore="kameleoonConversionScore",ae.Personalization="personalization",ae.CBScores="cbScores",ae.TargetedSegment="targetedSegment",e.DeviceType=void 0,(ne=e.DeviceType||(e.DeviceType={})).Phone="PHONE",ne.Tablet="TABLET",ne.Desktop="DESKTOP",e.OperatingSystemType=void 0,(oe=e.OperatingSystemType||(e.OperatingSystemType={})).WindowsPhone="WINDOWS_PHONE",oe.Windows="WINDOWS",oe.Android="ANDROID",oe.Linux="LINUX",oe.Mac="MAC",oe.IOS="IOS",e.BrowserType=void 0,(re=e.BrowserType||(e.BrowserType={})).Chrome="CHROME",re.InternetExplorer="IE",re.Firefox="FIREFOX",re.Safari="SAFARI",re.Opera="OPERA",re.Other="OTHER";const se={[e.OperatingSystemType.Windows]:0,[e.OperatingSystemType.Mac]:1,[e.OperatingSystemType.IOS]:2,[e.OperatingSystemType.Linux]:3,[e.OperatingSystemType.Android]:4,[e.OperatingSystemType.WindowsPhone]:5},ue=ie(se),le={[e.BrowserType.Chrome]:0,[e.BrowserType.InternetExplorer]:1,[e.BrowserType.Firefox]:2,[e.BrowserType.Safari]:3,[e.BrowserType.Opera]:4,[e.BrowserType.Other]:5},de=ie(le),ce="off",ge="warehouseAudiences";var he;e.SdkLanguageType=void 0,(he=e.SdkLanguageType||(e.SdkLanguageType={})).ANDROID="ANDROID",he.IOS="IOS",he.JAVA="JAVA",he.CSHARP="CSHARP",he.NODEJS="NODEJS",he.PHP="PHP",he.RUBY="RUBY",he.GO="GO",he.FLUTTER="FLUTTER",he.REACT="REACT",he.PYTHON="PYTHON",he.JAVASCRIPT="JAVASCRIPT",he.RUST="RUST";const pe={previousVisitAmount:1,currentVisit:!0,customData:!0,pageViews:!1,geolocation:!1,device:!1,browser:!1,operatingSystem:!1,conversions:!1,experiments:!1,kcs:!1,visitorCode:!0,personalization:!1};var ve,me,fe,Ce,ye,De,Ee,Te,Ie,ke,Se,Ve,Re;!function(e){e.And="AND",e.Or="OR"}(ve||(ve={})),function(e){e.TRUE="TRUE",e.FALSE="FALSE",e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.EQUAL="EQUAL",e.LOWER="LOWER",e.GREATER="GREATER",e.UNDEFINED="UNDEFINED",e.AMONG_VALUES="AMONG_VALUES",e.RANGE="RANGE"}(me||(me={})),function(e){e.NEW="NEW",e.RETURNING="RETURNING"}(fe||(fe={})),function(e){e.ANY="ANY",e.EXACT="EXACT"}(Ce||(Ce={})),function(e){e.ALL="ALL",e.TEST="TEST",e.PERSO="PERSO"}(ye||(ye={})),function(e){e.Experiment="EXPERIMENT",e.Personalization="PERSONALIZATION",e.Any="ANY"}(De||(De={})),function(e){e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(Ee||(Ee={})),function(e){e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(Te||(Te={})),function(e){e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.OPTIONAL="OPTIONAL"}(Ie||(Ie={})),function(e){e.CURRENT_VISIT="CURRENT_VISIT",e.VISITOR="VISITOR"}(ke||(ke={})),function(e){e.PAGE_URL="PAGE_URL",e.PAGE_TITLE="PAGE_TITLE",e.LANDING_PAGE="LANDING_PAGE",e.ORIGIN="ORIGIN",e.ORIGIN_TYPE="ORIGIN_TYPE",e.REFERRERS="REFERRERS",e.NEW_VISITORS="NEW_VISITORS",e.INTERESTS="INTERESTS",e.BROWSER_LANGUAGE="BROWSER_LANGUAGE",e.GEOLOCATION="GEOLOCATION",e.DEVICE_TYPE="DEVICE_TYPE",e.SCREEN_DIMENSION="SCREEN_DIMENSION",e.VISITOR_IP="VISITOR_IP",e.AD_BLOCKER="AD_BLOCKER",e.PREVIOUS_PAGE="PREVIOUS_PAGE",e.KEY_PAGES="KEY_PAGES",e.PAGE_VIEWS="PAGE_VIEWS",e.FIRST_VISIT="FIRST_VISIT",e.LAST_VISIT="LAST_VISIT",e.ACTIVE_SESSION="ACTIVE_SESSION",e.TIME_SINCE_PAGE_LOAD="TIME_SINCE_PAGE_LOAD",e.SAME_DAY_VISITS="SAME_DAY_VISITS",e.VISITS="VISITS",e.VISITS_BY_PAGE="VISITS_BY_PAGE",e.VISITOR_CODE="VISITOR_CODE",e.SDK_LANGUAGE="SDK_LANGUAGE",e.INTERNAL_SEARCH_KEYWORDS="INTERNAL_SEARCH_KEYWORDS",e.TABS_ON_SITE="TABS_ON_SITE",e.CONVERSION_PROBABILITY="CONVERSION_PROBABILITY",e.HEAT_SLICE="HEAT_SLICE",e.SKY_STATUS="SKY_STATUS",e.TEMPERATURE="TEMPERATURE",e.DAY_NIGHT="DAY_NIGHT",e.FORECAST_SKY_STATUS="FORECAST_SKY_STATUS",e.FORECAST_TEMPERATURE="FORECAST_TEMPERATURE",e.DAY_OF_WEEK="DAY_OF_WEEK",e.TIME_RANGE="TIME_RANGE",e.HOUR_MINUTE_RANGE="HOUR_MINUTE_RANGE",e.JS_CODE="JS_CODE",e.COOKIE="COOKIE",e.EVENT="EVENT",e.BROWSER="BROWSER",e.OPERATING_SYSTEM="OPERATING_SYSTEM",e.DOM_ELEMENT="DOM_ELEMENT",e.MOUSE_OUT="MOUSE_OUT",e.TARGET_EXPERIMENT="TARGET_EXPERIMENT",e.TARGET_FEATURE_FLAG="TARGET_FEATURE_FLAG",e.TARGET_PERSONALIZATION="TARGET_PERSONALIZATION",e.EXCLUSIVE_EXPERIMENT="EXCLUSIVE_EXPERIMENT",e.CONVERSIONS="CONVERSIONS",e.CUSTOM_DATUM="CUSTOM_DATUM",e.YSANCE_SEGMENT="YSANCE_SEGMENT",e.SEGMENT="SEGMENT",e.YSANCE_ATTRIBUT="YSANCE_ATTRIBUT",e.TEALIUM_BADGE="TEALIUM_BADGE",e.TEALIUM_AUDIENCE="TEALIUM_AUDIENCE",e.PRICE_OF_DISPLAYED_PAGE="PRICE_OF_DISPLAYED_PAGE",e.NUMBER_OF_VISITED_PAGES="NUMBER_OF_VISITED_PAGES",e.VISITED_PAGES="VISITED_PAGES",e.CUSTOM="CUSTOM",e.EXPLICIT_TRIGGER="EXPLICIT_TRIGGER",e.APPLICATION_VERSION="APPLICATION_VERSION"}(Se||(Se={})),function(e){e.Minute="MINUTE",e.Hour="HOUR",e.Day="DAY",e.Week="WEEK",e.Month="MONTH"}(Ve||(Ve={})),function(e){e.Ascending="asc",e.Descending="desc"}(Re||(Re={}));const we="localhost",be=/^(\.?(([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}$/;class Ae{static validateVersion(t){const i=t.split(".").map(e=>parseInt(e,10));for(;i.length<3;)i.push(0);return i.some(e=>isNaN(e))?l.Err(new h(e.KameleoonException.SemanticVersionParse,t)):l.Ok(i.slice(0,3))}static validateDomain(e){return e?(e=Ae.checkAndTrimProtocol(e.toLowerCase()),be.test(e)||e===we||M.error`The top-level domain ${e} 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.`,l.Ok(e)):l.Err()}static validateNetworkDomain(e){return e?(e=(e=Ae.checkAndTrimProtocol(e.toLowerCase())).replace(/^\.+|\.+$/g,""),be.test(e)||e===we?l.Ok(e):(M.error`The network domain ${e} is invalid.`,l.Err())):l.Err()}static checkAndTrimProtocol(e){const t=["http://","https://"];for(const i of t)if(e.startsWith(i)){e=e.substring(i.length),M.warning`The domain contains ${i}. Domain after protocol trimming: ${e}`;break}return e}}class Ke{static getNonce(e){let t="";for(let i=0;i<16;i++){const i=e.getRandomNumber(),a=Math.floor(16*i);t+="0123456789ABCDEF".charAt(a)}return t}static checkTargeting({segment:t,visitorCode:i,targetingData:a,experimentId:n,variationConfiguration:o,clientConfiguration:r,packageInfo:s,dataManager:u}){if(M.debug`CALL: checkTargeting(segment, visitorCode: ${i}, targetingData: ${a}, experimentId: ${n}, variationConfiguration, clientConfiguration, packageInfo, dataManager)`,!t||!t.conditionsData.firstLevel.length){const e=l.Ok(!0);return M.debug`RETURN checkTargeting(segment, visitorCode: ${i}, targetingData: ${a}, experimentId: ${n}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${e})`,e}if(!o){const t=l.Err(new h(e.KameleoonException.Initialization));return M.debug`RETURN checkTargeting(segment, visitorCode: ${i}, targetingData: ${a}, experimentId: ${n}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${t})`,t}let d={};const c=o.getStoredVariations(i);c.ok&&(d=c.data);const g=u.getTree(t);let p,v,m;g.hasTargetingType(Se.SEGMENT)&&(p=u.trees,m=r.segments),g.hasTargetingType(Se.TARGET_FEATURE_FLAG)&&(v=r.ruleMap);const f=g.evaluate({variationData:d,sdkInfo:s,segments:m,ruleMap:v,trees:p,targetingData:a,experimentId:n,visitorCode:i});return M.debug`RETURN checkTargeting(segment, visitorCode: ${i}, targetingData: ${a}, experimentId: ${n}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${f})`,f}static convertTimeUnit(t,i){return t/{[Ve.Minute]:e.Milliseconds.Minute,[Ve.Hour]:e.Milliseconds.Hour,[Ve.Day]:e.Milliseconds.Day,[Ve.Week]:e.Milliseconds.Week,[Ve.Month]:e.Milliseconds.Month}[i]}static isCustomData(t){return t.data.type===e.KameleoonData.CustomData}static updateCache({hasJsCssVariables:t,cacheManager:i,visitorCode:a,experimentId:n,variationId:o}){const r=i.getAliveItem(a),s=r?Object.assign({},r):{};s[n]={variationId:o,hasJsCssVariables:t,expirationTime:Date.now()+5*e.Milliseconds.Second},i.add({key:a,data:s,lifetime:5})}static getTrackingCode(e,t){let i="window.kameleoonQueue=window.kameleoonQueue||[];";const a=e.getAliveItem(t);if(!a)return i;const n={};return Object.entries(a).forEach(([e,{variationId:t,expirationTime:a,hasJsCssVariables:o}])=>{const r=!o;a>Date.now()&&(i+=`window.kameleoonQueue.push(['Experiments.assignVariation',${e},${t},true]);`,i+=`window.kameleoonQueue.push(['Experiments.trigger',${e},${r}]);`,n[Number(e)]={variationId:t,expirationTime:a,hasJsCssVariables:o})}),e.add({key:t,data:n,lifetime:5}),i}static compareSemVer({version:e,compareVersion:t,operator:i}){const a=Ae.validateVersion(e),n=Ae.validateVersion(t);if(!a.ok)return l.Err(a.error);if(!n.ok)return l.Err(n.error);const[o,r,s]=a.data,[u,d,c]=n.data,[h,p,v]=[o===u,r===d,s===c];switch(i){case Te.EQUAL:return l.Ok(h&&p&&v);case Te.GREATER:return l.Ok(o>u||h&&r>d||h&&p&&s>c);case Te.LOWER:return l.Ok(o<u||h&&r<d||h&&p&&s<c);default:M.error`Unknown version match type: ${i}`,g(i)}}static getVariationByHash(e,t){let i=0;for(const a of e)if(i+=a.exposition,i>=t)return a;return null}}class xe{static insertInOrderedListMutably({list:e,element:t,order:i}){if(e.includes(t))return;const a=e.findIndex(e=>i===Re.Ascending?e>=t:e<=t);-1===a?e.push(t):e.splice(a,0,t)}static insertVisitInOrderedListMutably({list:e,visit:t}){if(e.find(e=>"number"==typeof e?e===t.timeStarted:e.timeStarted===t.timeStarted))return;const i=e.findIndex(e=>"number"==typeof e?e>=t.timeStarted:e.timeStarted>=t.timeStarted);-1===i?e.push(t):e.splice(i,0,t),e.length>26&&e.splice(0,e.length-26)}}class Oe{constructor({urlAddress:t,title:i,referrers:a}){this.urlAddress=t,this.title=i,this.referrers=a,this.timestamps=[{time:Date.now(),status:e.TrackingStatus.Unsent}]}get url(){var e;if(!this.urlAddress)return"";const t=this.title?"&title="+encodeURIComponent(this.title):"",i=(null===(e=this.referrers)||void 0===e?void 0:e.length)?"&referrersIndices="+JSON.stringify(this.referrers):"";return"eventType=page&href="+encodeURIComponent(this.urlAddress)+t+i}get status(){const{[e.TrackingStatus.Sent]:t,[e.TrackingStatus.Unsent]:i,[e.TrackingStatus.Pending]:a}=this.timestamps.reduce((e,{status:t})=>(e[t]=!0,e),{[e.TrackingStatus.Sent]:!1,[e.TrackingStatus.Unsent]:!1,[e.TrackingStatus.Pending]:!1});return!t||i||a?a&&!i?e.TrackingStatus.Pending:e.TrackingStatus.Unsent:e.TrackingStatus.Sent}set status(e){this.timestamps=this.timestamps.map(t=>Object.assign(Object.assign({},t),{status:e}))}set _nonce(e){this.nonce=e}get data(){return{urlAddress:this.urlAddress,title:this.title,referrers:this.referrers,type:e.KameleoonData.PageView,timestamps:this.timestamps,status:this.status,nonce:this.nonce}}static _fromRaw(e){const{urlAddress:t,title:i,referrers:a,timestamps:n,nonce:o}=e,r=new Oe({urlAddress:t,title:i,referrers:a});return r.timestamps=n,o&&(r._nonce=o),r}static _updateFromVisit(t,i){const a=t.pageEvents;if(a)for(const t of a){let a=[];const{time:n}=t,{href:o,title:r,referrersIndices:s}=t.data;let u;if("number"==typeof s[0]&&(a=s),i.has(o)){const t=i.get(o).timestamps;u=new Oe({urlAddress:o,title:r,referrers:a}),u.timestamps=[...t,{time:n,status:e.TrackingStatus.Sent}]}else u=new Oe({urlAddress:o,title:r,referrers:a}),u.timestamps=[{time:n,status:e.TrackingStatus.Sent}];i.set(o,u)}}}let $e=class t{constructor(i,a,...n){this._status=e.TrackingStatus.Unsent,this.isIdentifier=!1;const o="boolean"==typeof a;"number"==typeof i?this._index=i:(this._name=i,this._index=t.UNDEFINED_INDEX),this.overwrite=!o||a,this.value=o?n:[a,...n].filter(e=>null!=e)}get url(){if("number"!=typeof this._index)return"";const e=[...new Set(this.value)];let t={};e.forEach(e=>{t[e]=1});let i="";return this.isIdentifier&&(i="&mappingIdentifier="+String(!0)),"eventType=customData&index="+this._index+"&valuesCountMap="+encodeURIComponent(JSON.stringify(t))+"&overwrite="+String(this.overwrite)+i}get data(){return Object.assign(Object.assign({index:this._index},void 0!==this._name?{name:this._name}:{}),{value:this.value,type:e.KameleoonData.CustomData,isIdentifier:this.isIdentifier,status:this.status,overwrite:this.overwrite})}get status(){return this._isMappingIdentifier?e.TrackingStatus.Unsent:this._status}static _fromRaw(e){const{index:i,value:a,status:n,isIdentifier:o,name:r,overwrite:s}=e;let u;return r?(u=new t(r,null==s||s,...a),u.index=i):u=new t(i,null==s||s,...a),u.status=n,u._isMappingIdentifier=o,u}set _isMappingIdentifier(e){this.isIdentifier=e}set status(e){this._status=e}static _updateFromVisit(e,i){var a;if(null===(a=e.customDataEvents)||void 0===a?void 0:a.length)for(let a=e.customDataEvents.length-1;a>=0;a--){const{index:n,valuesCountMap:o}=e.customDataEvents[a].data;i.has(n)||i.set(n,new t(n,...Object.keys(o)))}}set index(e){this._index=e}get index(){return this._index}get name(){return this._name}get values(){return this.value}};$e.UNDEFINED_INDEX=-1;let Fe=class t{constructor({goalId:t,revenue:i=0,negative:a=!1,metadata:n}){this.goalId=t,this.revenue=i,this.negative=a,this.status=e.TrackingStatus.Unsent,this.id=Math.floor(1e6*Math.random()),this._metadata=n,this.assignedTime=Date.now()}set _id(e){this.id=e}set _nonce(e){this.nonce=e}static _fromInternal(e){var{assignedTime:i}=e,a=function(e,t){var i={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(i[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(a=Object.getOwnPropertySymbols(e);n<a.length;n++)t.indexOf(a[n])<0&&Object.prototype.propertyIsEnumerable.call(e,a[n])&&(i[a[n]]=e[a[n]])}return i}(e,["assignedTime"]);const n=new t(a);return void 0!==i&&(n.assignedTime=i),n}get url(){var e;return"eventType=conversion&goalId="+String(this.goalId)+"&revenue="+String(this.revenue)+"&negative="+String(this.negative)+((null===(e=this.metadata)||void 0===e?void 0:e.length)?"&metadata="+this._encodeMetadata():"")}get _metadata(){return this.metadata}set _metadata(e){this.metadata=e}get data(){var t;return{goalId:this.goalId,nonce:this.nonce,revenue:this.revenue,negative:this.negative,type:e.KameleoonData.Conversion,status:this.status,id:this.id,metadata:(null===(t=this.metadata)||void 0===t?void 0:t.map(e=>e.data))||void 0,assignedTime:this.assignedTime}}_encodeMetadata(){var e;return(null===(e=this.metadata)||void 0===e?void 0:e.length)?encodeURIComponent(JSON.stringify(this.metadata.reduce((e,t)=>(null==e[t.data.index]&&(e[t.data.index]=t.data.value),e),{}))):""}static _fromRaw(e){const{goalId:i,revenue:a,negative:n,status:o,id:r,nonce:s,metadata:u,assignedTime:l}=e,d=t._fromInternal({goalId:i,revenue:a,negative:n,metadata:t.parseMetadata(u),assignedTime:l});return d._id=r,d.status=o,s&&(d._nonce=s),d}static parseMetadata(e){return(null==e?void 0:e.map(e=>$e._fromRaw(e)))||void 0}static _listFromVisit(i){var a,n;const o=[];if(!(null===(a=i.conversionEvents)||void 0===a?void 0:a.length))return[];if(null===(n=null==i?void 0:i.conversionEvents)||void 0===n?void 0:n.length)for(const a of i.conversionEvents){const{goalId:i,revenue:n,negative:r}=a.data,s=t._fromInternal({goalId:i,revenue:n,negative:r,assignedTime:a.time});s.status=e.TrackingStatus.Sent,o.push(s)}return o}static _updateFromVisit(i,a){var n;if(null===(n=i.conversionEvents)||void 0===n?void 0:n.length)for(const n of i.conversionEvents){const{goalId:i}=n.data;if(!a.has(i)){const o=t._fromInternal({goalId:i,assignedTime:n.time});o.status=e.TrackingStatus.Sent,a.set(i,o)}}}},Ne=class t{constructor(t,i){this.browser=t,this.version=i,this.status=e.TrackingStatus.Unsent}get url(){if(!this.browser)return"";const e=this.version?E+this.version:"";return y+A+this.browser+D+le[this.browser]+e}get data(){return{browser:this.browser,type:e.KameleoonData.Browser,version:this.version,status:this.status}}static _fromRaw(e){const{browser:i,version:a,status:n}=e,o=new t(i,a);return o.status=n,o}static _fromVisit(e){if(!e.staticDataEvent)return;const{browser:i,browserIndex:a,browserVersion:n}=e.staticDataEvent.data;if(i||"number"==typeof a){const e=null!=i?i:de[a];return n?new t(e,n):new t(e)}}},Me=class t{constructor(t){this.device=t,this.status=e.TrackingStatus.Unsent}get url(){return this.device?y+T+this.device:""}get data(){return{device:this.device,type:e.KameleoonData.Device,status:this.status}}static _fromRaw(e){const{device:i,status:a}=e,n=new t(i);return n.status=a,n}static _fromVisit(e){var i;if(null===(i=e.staticDataEvent)||void 0===i?void 0:i.data.deviceType)return new t(e.staticDataEvent.data.deviceType)}},Le=class t{constructor(t){this.operatingSystem=t,this.status=e.TrackingStatus.Unsent}get url(){return this.operatingSystem?y+w+this.operatingSystem+b+se[this.operatingSystem]:""}get data(){return{operatingSystem:this.operatingSystem,type:e.KameleoonData.OperatingSystem,status:this.status}}static _fromRaw(e){const{operatingSystem:i,status:a}=e,n=new t(i);return n.status=a,n}static _fromVisit(e){if(!e.staticDataEvent)return;const{os:i,osIndex:a}=e.staticDataEvent.data;if(i||"number"==typeof a){const e=null!=i?i:ue[a];return new t(e)}}};class _e{constructor({country:t,region:i,city:a,postalCode:n,coordinates:o}){this.country=t,this.region=i,this.city=a,this.postalCode=n,this.coordinates=o,this.status=e.TrackingStatus.Unsent}get url(){const e=this.region?"®ion="+encodeURIComponent(this.region):"",t=this.city?"&city="+encodeURIComponent(this.city):"",i=this.postalCode?"&postalCode="+encodeURIComponent(this.postalCode):"",a=this.coordinates?"&latitude="+this.coordinates[0]+"&longitude="+this.coordinates[1]:"";return"eventType=geolocation&country="+encodeURIComponent(this.country)+e+t+i+a}get data(){return{type:e.KameleoonData.GeolocationData,country:this.country,region:this.region,city:this.city,postalCode:this.postalCode,coordinates:this.coordinates,status:this.status}}static _fromRaw(e){const{country:t,region:i,city:a,postalCode:n,coordinates:o,status:r}=e,s=new _e({country:t,region:i,city:a,postalCode:n,coordinates:o});return s.status=r,s}static _fromVisit(e){var t;if(!(null===(t=e.geolocationEvents)||void 0===t?void 0:t.length))return;let i;for(const t of e.geolocationEvents){const{data:e}=t;e.country&&(i=e)}const{country:a,region:n,city:o}=i||{};return a?new _e(n&&o?{country:a,region:n,city:o}:n?{country:a,region:n}:{country:a}):void 0}}class Ue{constructor(t){this.status=e.TrackingStatus.Sent,this.visits=t,this._visitNumber=t.length?t.length-1:0}get visitNumber(){return this._visitNumber}get url(){return""}get data(){return{visits:this.visits,visitNumber:this._visitNumber,type:e.KameleoonData.VisitsData,status:this.status}}get isSent(){return!0}set timestamp(e){xe.insertVisitInOrderedListMutably({list:this.visits,visit:e}),this._visitNumber=this.visits.length?this.visits.length-1:0}updateVisitNumber(e){e>this._visitNumber&&(this._visitNumber=e)}}class Pe{constructor(t){this.kcs=t,this.status=e.TrackingStatus.Sent}get url(){return""}get data(){return{kcs:this.kcs,type:e.KameleoonData.KameleoonConversionScore,status:this.status}}}class Ge{constructor(t,i,a=Date.now()){this.id=t,this.variationId=i,this.status=e.TrackingStatus.Sent,this.assignedTime=a}get url(){return""}get data(){return{id:this.id,variationId:this.variationId,type:e.KameleoonData.Personalization,status:e.TrackingStatus.Sent,assignedTime:this.assignedTime}}static _fromRaw(e){return new Ge(e.id,e.variationId,e.assignedTime)}static _updateFromVisit(e,t){var i;if(null===(i=e.personalizationEvents)||void 0===i?void 0:i.length)for(const i of e.personalizationEvents){const{id:e,variationId:a}=i.data;if(!t.has(e)){const n=new Ge(e,a,i.time);t.set(e,n)}}}}class Be{constructor(t){this.values=new Map(Object.entries(t).map(([e,t])=>[Number(e),this.extractVarIds(t)])),this.cbs=t,this.status=e.TrackingStatus.Sent}extractVarIds(e){const t=new Map;return Object.entries(e).forEach(([e,i])=>{t.has(i)||t.set(i,[]),t.get(i).push(Number(e))}),Array.from(t.entries()).sort(([e],[t])=>t-e).map(([,e])=>({ids:e.sort((e,t)=>e-t)}))}getValues(){return this.values}get url(){return""}get data(){return{cbs:this.cbs,type:e.KameleoonData.CBScores,status:this.status}}static _fromRaw(e){const t=new Be(e.cbs);return t.status=e.status,t}}class ze{constructor({filters:t,dataManager:i,visitorCode:a}){this.visitsData=new Ue([]),this.visitorData=[],this.storageVisitorData=[],this.experimentData={},this.singleDataTypes={[e.KameleoonData.Device]:null,[e.KameleoonData.Browser]:null,[e.KameleoonData.GeolocationData]:null,[e.KameleoonData.OperatingSystem]:null,[e.KameleoonData.KameleoonConversionScore]:null,[e.KameleoonData.CBScores]:null},this.multipleDataTypes={[e.KameleoonData.CustomData]:new Map,[e.KameleoonData.PageView]:new Map,[e.KameleoonData.Conversion]:new Map,[e.KameleoonData.Personalization]:new Map},this.filters=t,this.dataManager=i,this.visitorDataTypes=i.getVisitorStoredDataTypes(a)}get data(){return{visitorData:this.visitorData,storageVisitorData:this.storageVisitorData,visitsData:this.visitsData,experimentData:this.experimentData}}processVisit(e){this.processBrowser(e),this.processDevice(e),this.processOperatingSystem(e),this.processGeolocationData(e),this.processCustomData(e),this.processConversion(e),this.processPageView(e),this.processExperiments(e),this.processPersonalization(e)}processMultipleDataTypes(){for(const[t,i]of Object.entries(this.multipleDataTypes))if(i.size)switch(t){case e.KameleoonData.PageView:this.visitorData.push(...i.values()),this.storageVisitorData.push(...i.values());break;case e.KameleoonData.Personalization:case e.KameleoonData.Conversion:this.storageVisitorData.push(...i.values());break;case e.KameleoonData.CustomData:i.forEach(e=>{this.visitorData.push(e),this.dataManager.storedCustomDataIndexes.has(e.data.index)||this.storageVisitorData.push(e)})}}processKcs(e){if(this.filters.kcs&&e){const t=new Pe(e);this.storageVisitorData.push(t)}}processVisitsData(e){var t;this.visitsData.timestamp={timeStarted:e.timeStarted,timeLastActivity:null!==(t=e.timeLastEvent)&&void 0!==t?t:e.timeStarted}}processVisitNumber(e,t){var i,a,n;if(this.visitsData.visitNumber<=t&&(null===(i=e.staticDataEvent)||void 0===i?void 0:i.data.visitNumber)){const i=null!==(n=null===(a=e.staticDataEvent)||void 0===a?void 0:a.data.visitNumber)&&void 0!==n?n:0;this.visitsData.updateVisitNumber(i+t)}}processCbs(e){if(this.filters.cbs&&e){const t=new Be(e);this.storageVisitorData.push(t)}}processBrowser(t){if(this.filters.browser&&!this.singleDataTypes[e.KameleoonData.Browser]){const i=Ne._fromVisit(t);i&&(this.visitorDataTypes.has(e.KameleoonData.Browser)||this.storageVisitorData.push(i),this.visitorData.push(i),this.singleDataTypes[e.KameleoonData.Browser]=i)}}processDevice(t){if(this.filters.device&&!this.singleDataTypes[e.KameleoonData.Device]){const i=Me._fromVisit(t);i&&(this.visitorDataTypes.has(e.KameleoonData.Device)||this.storageVisitorData.push(i),this.visitorData.push(i),this.singleDataTypes[e.KameleoonData.Device]=i)}}processOperatingSystem(t){if(this.filters.operatingSystem&&!this.singleDataTypes[e.KameleoonData.OperatingSystem]){const i=Le._fromVisit(t);i&&(this.visitorDataTypes.has(e.KameleoonData.OperatingSystem)||this.storageVisitorData.push(i),this.visitorData.push(i),this.singleDataTypes[e.KameleoonData.OperatingSystem]=i)}}processGeolocationData(t){if(this.filters.geolocation&&!this.singleDataTypes[e.KameleoonData.GeolocationData]){const i=_e._fromVisit(t);i&&(this.visitorDataTypes.has(e.KameleoonData.GeolocationData)||this.storageVisitorData.push(i),this.visitorData.push(i),this.singleDataTypes[e.KameleoonData.GeolocationData]=i)}}processCustomData(t){this.filters.customData&&$e._updateFromVisit(t,this.multipleDataTypes[e.KameleoonData.CustomData])}processConversion(t){if(this.filters.conversions){Fe._updateFromVisit(t,this.multipleDataTypes[e.KameleoonData.Conversion]);const i=Fe._listFromVisit(t);i.length&&this.visitorData.push(...i)}}processPageView(t){this.filters.pageViews&&Oe._updateFromVisit(t,this.multipleDataTypes[e.KameleoonData.PageView])}processExperiments(t){if(this.filters.experiments&&t.experimentEvents)for(const i of t.experimentEvents){const{id:t,variationId:a}=i.data;this.experimentData[t]={variationId:a,isTargetedRule:!1,status:e.TrackingStatus.Unsent,assignedTime:i.time}}}processPersonalization(t){this.filters.personalization&&Ge._updateFromVisit(t,this.multipleDataTypes[e.KameleoonData.Personalization])}processMappingIdentifier(e){var t,i;if(!e)return;const a=null===(i=null===(t=e.customDataEvents)||void 0===t?void 0:t.find(e=>e.data.mappingIdentifier))||void 0===i?void 0:i.time;return a&&e.visitorCode?{mappingIdentifier:e.visitorCode,timestamp:a}:void 0}}class je{static parseFeatureVariable(t){const{key:i,type:a,value:n}=t;switch(a){case e.VariableType.BOOLEAN:return l.Ok({key:i,type:a,value:Boolean(n)});case e.VariableType.JS:case e.VariableType.CSS:case e.VariableType.STRING:return l.Ok({key:i,type:a,value:String(n)});case e.VariableType.NUMBER:const o=Number(n);return Number.isNaN(o)?l.Err(new h(e.KameleoonException.NumberParse,String(n))):l.Ok({key:i,type:a,value:o});case e.VariableType.JSON:try{const e=JSON.parse(String(t.value));return l.Ok({key:i,type:a,value:e})}catch(t){return l.Err(new h(e.KameleoonException.JSONParse,t))}default:g(a)}}static parseVisitorData({data:e,filters:t,visitorCode:i,dataManager:a,variationConfiguration:n}){const o=new ze({filters:t,dataManager:a,visitorCode:i}),{currentVisit:r,previousVisits:s,kcs:u,cbs:l}=e;if(!(null==s?void 0:s.length)&&!r)return{visitorData:[],storageVisitorData:[],visitsData:new Ue([])};r&&(o.processVisit(r),o.processVisitNumber(r,0)),null==s||s.forEach((e,t)=>{o.processVisit(e),o.processVisitsData(e),o.processVisitNumber(e,t+1)}),o.processKcs(u),o.processCbs(l),o.processMultipleDataTypes();const d=o.processMappingIdentifier(null!=r?r:null==s?void 0:s[0]),{visitorData:c,storageVisitorData:g,visitsData:h,experimentData:p}=o.data;return n.updateStoredVariations(i,p),{visitorData:c,storageVisitorData:g,visitsData:h,mappingIdentifier:d}}static parseRegExp(e){if("/"===e[0]){const[t,i,a]=e.split("/");return new RegExp(i,a)}return new RegExp(e)}static parseSecret(e){if(null===e)return"null";const t=e.length;if(t<=4)return"*".repeat(t);const i=Math.max(t-4,4);return e.substring(0,t-i)+"*".repeat(i)}}class qe{constructor({updateInterval:t,urlProvider:i,storage:a,requester:n,dataManager:o,eventSource:r,externalVisitorCodeManager:s,eventManager:u,externalPackageInfo:l,defaultDataFile:d}){this.updateConfigurationIntervalId=null,this.updateType=B.Polling,this.configurationData=ee,this.featureFlagsData=new Map,this.isTargetedDeliveryRule=null,this.segmentsData=null,this.holdoutData=null,this.meGroupsData=new Map,this.mappedRules=null,this.mappedExperiments=null,this.usedDefaultDataFile=!1,this.refreshDataFileIfStalePromise=null,this.blockingBehaviourMode=Y.PartiallyBlocked,this.cachedDataFile=null,this.CACHE_REVALIDATE_PERIOD=90*e.Milliseconds.Minute,this.urlProvider=i,this.requester=n,this.updateInterval=t,this.lastUpdate=new Date,this.storage=a,this.dataManager=o,this.eventManager=u,this.visitorCodeManager=s,this.eventSource=r,this.externalPackageInfo=l,this.defaultDataFile=d}initialize(){return d(this,0,void 0,function*(){if(M.debug("CALL: ClientConfiguration.initialize()"),this.readStorageData(),this.checkShouldUpdate()){const e=yield this.updateClientConfiguration();if(!e.ok)return M.error("Error occurred during client configuration update"),e;if(e.data)return M.debug("RETURN: ClientConfiguration.initialize()"),l.Ok()}return this.updateType!==B.RealTime||this.eventSource.isOpen?(this.updateType===B.Polling&&this.handlePollingUpdates(),M.debug("RETURN: ClientConfiguration.initialize()"),l.Ok()):(this.handleRealTimeUpdates(),M.debug("RETURN: ClientConfiguration.initialize()"),l.Ok())})}refreshDataFileIfStale(){if(!this.checkShouldUpdate())return Promise.resolve(l.Ok(!1));if(!this.refreshDataFileIfStalePromise){const e=this.fetchClientConfiguration().then(e=>e.ok?l.Ok(!0):e).finally(()=>{this.refreshDataFileIfStalePromise===e&&(this.refreshDataFileIfStalePromise=null)});this.refreshDataFileIfStalePromise=e}return this.refreshDataFileIfStalePromise}cleanupHandlers(){this.eventSource.isOpen&&this.eventSource.close(),this.updateConfigurationIntervalId&&clearInterval(this.updateConfigurationIntervalId)}handleRealTimeUpdates(){this.cleanupHandlers(),this.eventSource.open(t=>{this.updateClientConfiguration(t).then(i=>{i.ok&&this.eventManager.fireEvent(e.EventType.ConfigurationUpdate,{timestamp:t})})}),this.eventSource.onError(e=>{M.error`Error occurred during real-time update: ${e}. Switching to polling updates while the connection is not restored.`,this.updateType=B.Polling,this.handlePollingUpdates()})}handlePollingUpdates(){this.cleanupHandlers();try{const e=this.lastUpdate.getTime(),t=Date.now(),i=Math.max(this.updateInterval-(t-e),0);setTimeout(()=>d(this,0,void 0,function*(){yield this.updateClientConfiguration(),this.updateConfigurationIntervalId=setInterval(this.updateClientConfiguration.bind(this),this.updateInterval)}),i)}catch(e){throw this.updateConfigurationIntervalId&&clearInterval(this.updateConfigurationIntervalId),e}}get featureFlags(){return this.featureFlagsData}get dataFile(){if(this.cachedDataFile)return this.cachedDataFile;const e={featureFlags:new Map,dateModified:this.dateModified};return this.featureFlagsData.forEach((t,i)=>{const a=new Map;t.variations.forEach(e=>{var i;const n=new Map;e.variables.forEach(e=>{try{const t=je.parseFeatureVariable(e).throw();n.set(e.key,t)}catch(i){M.error`Error parsing variable ${e.key} of feature flag ${t.featureKey}: ${i}`}}),a.set(e.key,{name:null!==(i=e.name)&&void 0!==i?i:"",key:e.key,id:null,experimentId:null,variables:n})});const n=t.rules.map(e=>{const t=new Map;return e.variationByExposition.forEach(i=>{const n=a.get(i.variationKey);n&&t.set(n.key,{name:n.name,key:n.key,id:i.variationId,experimentId:e.experimentId,variables:n.variables})}),{variations:t}});e.featureFlags.set(i,{variations:a,environmentEnabled:t.environmentEnabled,rules:n,defaultVariationKey:t.defaultVariationKey})}),this.cachedDataFile=e,e}get configuration(){return this.configurationData.configuration}get dateModified(){var e;return null!==(e=this.configurationData.dateModified)&&void 0!==e?e:0}get segments(){if(this.segmentsData)return this.segmentsData;const e=new Map;return this.featureFlagsData.forEach(t=>{t.rules.forEach(t=>{t.segment&&!e.has(t.segment.id.toString())&&e.set(t.segment.id.toString(),t.segment)})}),this.segmentsData=e,e}get ruleMap(){var e;if(null===(e=this.mappedRules)||void 0===e?void 0:e.size)return this.mappedRules;const t=new Map;for(const e of this.featureFlags.values())for(const i of e.rules){const{id:a,experimentId:n,variationByExposition:o}=i,r=new Map;o.forEach(({variationKey:e,variationId:t})=>{"number"==typeof t&&r.set(e,t)}),t.set(a,{featureId:e.id,experimentId:n,variations:r})}return this.mappedRules=t,t}get experimentMap(){var e;if(null===(e=this.mappedExperiments)||void 0===e?void 0:e.size)return this.mappedExperiments;const t=new Map;for(const e of this.featureFlags.values())for(const i of e.rules){const{experimentId:e,variationByExposition:a}=i,n=new Map;a.forEach(({variationKey:e,variationId:t})=>{"number"==typeof t&&n.set(e,t)}),t.set(e,{type:i.type,variations:n})}return this.mappedExperiments=t,t}get holdout(){return this.holdoutData}get meGroups(){return this.meGroupsData}get isConsentRequired(){return this.configuration.consentType===W.Required}get consentBlockingBehaviour(){return this.blockingBehaviourMode}get hasAnyTargetedDeliveryRule(){if(null!==this.isTargetedDeliveryRule)return this.isTargetedDeliveryRule;for(const e of this.featureFlags.values())if(e.environmentEnabled&&e.rules.some(e=>e.type===z.TARGETED_DELIVERY))return!0;return!1}checkShouldUpdate(){const{configuration:e}=this.configurationData;return this.updateType=e.realTimeUpdate?B.RealTime:B.Polling,!this.featureFlags.size||this.lastUpdate.getTime()<Date.now()-this.updateInterval}readStorageData(){var e,t,i;M.debug("CALL: ClientConfiguration.readStorageData()");const a=this.storage.read();if(a.ok){let{data:n,lastUpdate:o,lastModified:r,requestTime:s}=a.data,u=!1;if(this.defaultDataFile)try{const a=JSON.parse(this.defaultDataFile);this.defaultDataFile=void 0,this.usedDefaultDataFile=!0;const o=null!==(t=null!==(e=n.dateModified)&&void 0!==e?e:s)&&void 0!==t?t:-1,r=null!==(i=a.dateModified)&&void 0!==i?i:0;(!s||r>o)&&(n=a,u=!0)}catch(e){M.error`Error parsing default data file: ${String(e)}`}this.updateConfigurationData(n,u),this.lastUpdate=this.usedDefaultDataFile?new Date(0):new Date(Date.parse(o)),this.lastModified=r,this.requestTime=s}M.debug`RETURN: ClientConfiguration.readStorageData() -> (result: ${a.ok})`}updateClientConfiguration(e){return d(this,0,void 0,function*(){const t=Date.now();if(this.usedDefaultDataFile)return this.updateClientConfigurationInBackground(),l.Ok(!1);if(this.requestTime&&!e&&!this.externalPackageInfo.isServer){if(t-this.requestTime<=this.CACHE_REVALIDATE_PERIOD)return this.updateClientConfigurationInBackground(),l.Ok(!1);M.debug`Cached configuration data has expired. Fetching fresh data.`}return this.fetchClientConfiguration(e)})}fetchClientConfiguration(e){return d(this,0,void 0,function*(){const t=yield this.requester.getClientConfiguration(e,this.lastModified);return this.applyNewConfigurationDataFromResponse(t)})}updateClientConfigurationInBackground(){setTimeout(()=>d(this,0,void 0,function*(){const e=yield this.requester.getClientConfiguration(void 0,this.lastModified);yield this.applyNewConfigurationDataFromResponse(e)}),0)}applyNewConfigurationDataFromResponse(e){var t,i;return d(this,0,void 0,function*(){if(this.requestTime=Date.now(),!e.ok)return this.featureFlags.size?(M.error("Error occurred while updating configuration. Existing configuration will be used as a fallback."),l.Ok(!0)):e;if(void 0===e.data.configuration)return this.updateStorageData(),l.Ok(!1);const a=e.data.configuration;this.updateConfigurationData(a,!0),this.dataManager.clearTrees(),null===(t=this.mappedRules)||void 0===t||t.clear(),null===(i=this.experimentMap)||void 0===i||i.clear(),this.isTargetedDeliveryRule=null,e.data.lastModified&&(this.lastModified=e.data.lastModified);const n=this.updateStorageData();if(!n.ok)return n;const o=a.configuration.realTimeUpdate?B.RealTime:B.Polling,r=o!==this.updateType;return r&&(this.updateType=o,M.info`Configuration update type was toggled to ${B[o]}`,yield this.initialize()),this.blockingBehaviourMode=this.consentBlockingBehaviourFromStr(a.configuration.consentOptOutBehavior),l.Ok(r)})}updateConfigurationData(e,t=!0){const{configuration:i,featureFlags:a,customData:n,holdout:o,segments:r,dateModified:s}=e;let u=r?new Map(r.map(e=>[e.id.toString(),e])):null,l=null;if(t&&(null==n?void 0:n.length)){l=new Map;for(let e of n){if(void 0===e.id){l=null;break}l.set(e.id,e.index)}}const d=new Map;for(const e of a)d.set(e.featureKey,e),t&&(this.updateFeatureFlagSegments(e,u),this.updateFeatureFlagBucketingCustomDataId(e,l));this.featureFlagsData=d,(null==n?void 0:n.length)&&(this.dataManager.customDataIndexes=n),this.meGroupsData=this.makeMEGroups(a),this.holdoutData=null!=o?o:null,this.configurationData={configuration:i,customData:n,holdout:o,dateModified:s},this.urlProvider.dataApiDomain=e.configuration.dataApiDomain,this.updateConsentRequired(),this.segmentsData=u,this.cachedDataFile=null}updateFeatureFlagSegments(e,t){null!==t&&e.rules.forEach(e=>{var i;const a=e.segmentId;e.segment=null==a?null:null!==(i=t.get(a.toString()))&&void 0!==i?i:null})}updateFeatureFlagBucketingCustomDataId(e,t){const i=e.bucketingCustomDataId;null!=i&&t&&(e.bucketingCustomDataIndex=t.get(i))}makeMEGroups(e){const t=new Map;e.forEach(e=>{const i=e.mutuallyExclusiveGroup;if(i){let a=t.get(i);a?a.push(e):t.set(i,[e])}});const i=new Map;return t.forEach((e,t)=>{i.set(t,new te(e))}),i}updateStorageData(){this.lastUpdate=new Date;const e={data:Object.assign(Object.assign({},this.configurationData),{featureFlags:Array.from(this.featureFlags.values()),segments:this.segmentsData?Array.from(this.segmentsData.values()):void 0}),lastUpdate:this.lastUpdate.toString(),lastModified:this.lastModified,requestTime:this.requestTime};return this.storage.write(e)}updateConsentRequired(){this.visitorCodeManager.consentRequired=this.isConsentRequired&&!this.hasAnyTargetedDeliveryRule}consentBlockingBehaviourFromStr(e){return e===Y.PartiallyBlocked||e===Y.CompletelyBlocked?e:(M.error(`Unexpected consent blocking type '${e}'`),Y.PartiallyBlocked)}}var He;class We{constructor(t,i){M.debug`CALL: new ClientSettings(siteCode: ${t}, configuration: ${i})`,this.siteCode=t,this.environment=this.getEnvironment(i),this.networkDomain=this.getNetworkDomain(i),this.updateInterval=this.getUpdateInterval(i),this.cleanupInterval=this.getCleanupInterval(i),this.requestTimeout=this.getRequestTimeout(i),this.trackingInterval=this.getTrackingInterval(i),this.trackRetryDelay=5*e.Milliseconds.Second,M.debug`RETURN: new ClientSettings(siteCode: ${t}, configuration: ${i})`}getTrackingInterval(e){const{MIN_TRACKING_INTERVAL_MS:t,MAX_TRACKING_INTERVAL_MS:i,DEFAULT_TRACKING_INTERVAL_MS:a}=We;return"number"==typeof(null==e?void 0:e.trackingInterval)?e.trackingInterval<t?(M.warning(`Tracking interval must not be shorter than ${t} ms. Minimum possible interval was applied.`),t):e.trackingInterval>i?(M.warning(`Tracking interval must not be longer than ${i} ms. Maximum possible interval was applied.`),i):e.trackingInterval:a}getEnvironment(t){return(null==t?void 0:t.environment)?t.environment:e.Environment.Production}getCleanupInterval(t){return"number"==typeof(null==t?void 0:t.targetingDataCleanupInterval)?t.targetingDataCleanupInterval<1?(M.warning("Targeting data cleanup interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*e.Milliseconds.Minute):t.targetingDataCleanupInterval*e.Milliseconds.Minute:null}getUpdateInterval(t){return"number"==typeof(null==t?void 0:t.updateInterval)?t.updateInterval<1?(M.warning("Update interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*e.Milliseconds.Minute):t.updateInterval*e.Milliseconds.Minute:60*e.Milliseconds.Minute}getNetworkDomain(e){const t=Ae.validateNetworkDomain(null==e?void 0:e.networkDomain);return t.ok?t.data:null}getRequestTimeout(t){return"number"==typeof(null==t?void 0:t.requestTimeout)?t.requestTimeout:10*e.Milliseconds.Second}get settings(){return{trackingInterval:this.trackingInterval,trackRetryDelay:this.trackRetryDelay,cleanupInterval:this.cleanupInterval,updateInterval:this.updateInterval,requestTimeout:this.requestTimeout,networkDomain:this.networkDomain,environment:this.environment,siteCode:this.siteCode}}}He=We,We.DEFAULT_TRACKING_INTERVAL_MS=1e3,We.MIN_TRACKING_INTERVAL_MS=He.DEFAULT_TRACKING_INTERVAL_MS,We.MAX_TRACKING_INTERVAL_MS=5e3;let Ye=class t{constructor(t){this.cookie=t,this.status=e.TrackingStatus.Sent}static fromString(e){if(!e)return new t([]);const i=e.split(";").map(t=>{const[i,a]=t.trim().split("=");return i?{key:i,value:a}:(M.warning`Cookie string has an empty key: ${e}`,null)}).filter(e=>null!==e);return new t(i)}get url(){return""}get data(){return{cookie:this.cookie,type:e.KameleoonData.Cookie,status:this.status}}};class Xe{constructor(t){this._value=t,this.status=e.TrackingStatus.Sent}get url(){return""}get data(){return{value:this._value,type:e.KameleoonData.UniqueIdentifier,status:e.TrackingStatus.Sent}}static _fromRaw(e){return new Xe(e.value)}}class Je{constructor(e=null,t){this.cleanupInterval=e,this.packageInfo=t}mutUpdateData({infoData:t,visitorCode:i,mutData:a,dataItem:n,extendTtl:o}){let r,{visitorReference:s,data:u,isReference:l}=this.dereferenceData(a,i);switch(this.packageInfo.isServer&&l&&!a[s]&&(t.mappingIdentifiers&&delete t.mappingIdentifiers[i],delete a[i],s=i),o&&(r=this.cleanupInterval?Date.now()+this.cleanupInterval:0),n.data.type){case e.KameleoonData.CustomData:this.updateCustomData({expirationTime:r,customData:n,visitorCode:s,mutData:u});break;case e.KameleoonData.PageView:this.updatePageView({expirationTime:r,pageView:n,visitorCode:s,mutData:u});break;case e.KameleoonData.Conversion:this.updateConversion({expirationTime:r,conversion:n,visitorCode:s,mutData:u});break;case e.KameleoonData.VisitsData:this.updateVisitsData({expirationTime:r,visitsData:n,visitorCode:s,mutData:u});break;case e.KameleoonData.Personalization:this.updatePersonalization({expirationTime:r,personalization:n,visitorCode:s,mutData:u});break;case e.KameleoonData.TargetedSegment:this.updateTargetedSegment({expirationTime:r,targetedSegment:n,visitorCode:s,mutData:u});break;default:this.updateCommonData({expirationTime:r,commonData:n,visitorCode:s,mutData:u})}return r}mutCleanupData(t,i){var a;if(!this.cleanupInterval)return null;let n=0;for(const[o,r]of Object.entries(t)){if("string"==typeof r){this.removeReference({mutData:t,visitorCode:o,linkedVisitor:r,infoData:i});continue}let s=0;for(const t of Object.keys(r)){const i=t;let a;switch(i){case e.KameleoonData.CustomData:case e.KameleoonData.PageView:case e.KameleoonData.Conversion:case e.KameleoonData.Personalization:a=this.deleteNestedExpiredField(r,i);break;default:a=this.deleteExpiredField(r,i)}(!s||a&&a<s)&&(s=a)}Object.keys(t[o]).length?(!n||s&&s<n)&&(n=s):(delete t[o],this.packageInfo.isServer&&(null!==(a=i.mappingIdentifiers)&&void 0!==a||(i.mappingIdentifiers={}),delete i.mappingIdentifiers[o]))}return n}mutAddUnsentData({mutData:e,visitorCode:t,dataType:i}){const a=e.unsentData[t];if(a&&a.length){const n=new Set([...a]);n.add(i),e.unsentData[t]=Array.from(n)}else e.unsentData[t]=[i]}createReference({mutData:e,visitorCode:t,linkedVisitor:i}){e[i]=t}removeReference({mutData:e,visitorCode:t,linkedVisitor:i,infoData:a}){this.packageInfo.isServer&&(e[i]||(delete e[t],a.mappingIdentifiers&&delete a.mappingIdentifiers[t]))}updatePageView({visitorCode:t,mutData:i,pageView:a,expirationTime:n}){const{data:o}=a,r=i[t]&&e.KameleoonData.PageView in i[t]&&o.urlAddress in i[t][e.KameleoonData.PageView],s={expirationTime:n,visitorCode:t,data:i,key:e.KameleoonData.PageView,nestedKey:o.urlAddress,value:o};if(r){const a=i[t][e.KameleoonData.PageView][o.urlAddress].timestamps;for(const e of a){const{time:t}=e;if(o.timestamps.some(({time:e})=>e===t))continue;const i=o.timestamps.findIndex(({time:e})=>e>=t);-1===i?o.timestamps.push(e):o.timestamps.splice(i,0,e)}this.updateNestedField(s)}else this.createNestedField(s)}updateCustomData({visitorCode:t,customData:i,mutData:a,expirationTime:n}){const{data:o}=i,r=a[t]&&e.KameleoonData.CustomData in a[t],s={expirationTime:n,visitorCode:t,data:a,key:e.KameleoonData.CustomData,nestedKey:o.index.toString(),value:o};r?this.updateNestedField(s):this.createNestedField(s)}updateConversion({conversion:t,mutData:i,visitorCode:a,expirationTime:n}){const{data:o}=t,r=i[a]&&e.KameleoonData.Conversion in i[a],s={expirationTime:n,visitorCode:a,data:i,key:e.KameleoonData.Conversion,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(s):this.createNestedField(s)}updateVisitsData({visitorCode:t,mutData:i,visitsData:a,expirationTime:n}){var o,r;const{data:s}=a,u=i[t]&&e.KameleoonData.VisitsData in i[t],l={expirationTime:n,data:i,key:e.KameleoonData.VisitsData,value:s,visitorCode:t};if(u){const a=i[t][e.KameleoonData.VisitsData];a.visits.forEach(e=>{xe.insertVisitInOrderedListMutably({list:s.visits,visit:e})});const n=Math.max(null!==(o=s.visitNumber)&&void 0!==o?o:s.visits.length-1,s.visits.length-1,null!==(r=a.visitNumber)&&void 0!==r?r:0);this.updateField(Object.assign(Object.assign({},l),{value:Object.assign(Object.assign({},s),{visits:s.visits,visitNumber:n})}))}else this.createField(l)}updatePersonalization({visitorCode:t,mutData:i,personalization:a,expirationTime:n}){const{data:o}=a,r=i[t]&&e.KameleoonData.Personalization in i[t],s={expirationTime:n,visitorCode:t,data:i,key:e.KameleoonData.Personalization,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(s):this.createNestedField(s)}updateTargetedSegment({visitorCode:t,mutData:i,targetedSegment:a,expirationTime:n}){const{data:o}=a,r=i[t]&&e.KameleoonData.TargetedSegment in i[t],s={expirationTime:n,visitorCode:t,data:i,key:e.KameleoonData.TargetedSegment,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(s):this.createNestedField(s)}updateCommonData({visitorCode:e,mutData:t,commonData:i,expirationTime:a}){const{data:n}=i,o=t[e]&&n.type in t[e],r={expirationTime:a,data:t,key:n.type,visitorCode:e,value:n};o?this.updateField(r):this.createField(r)}dereferenceData(e,t){return"string"==typeof e[t]?{visitorReference:e[t],data:e,isReference:!0}:{visitorReference:t,data:e,isReference:!1}}deleteExpiredField(e,t){if(!e)return 0;const i=t;return e[i].expirationTime<Date.now()?(delete e[i],0):e[i].expirationTime}deleteNestedExpiredField(e,t){if(!e[t])return 0;const i=e[t];let a;for(const[e,t]of Object.entries(i))t&&(t.expirationTime<Date.now()?delete i[e]:(!a||t.expirationTime<a)&&(a=t.expirationTime));return Object.keys(i).length||delete e[t],a}updateField({key:e,value:t,data:i,visitorCode:a,expirationTime:n}){var o;const r=i[a][e];i[a][e]=Object.assign(Object.assign({},t),{expirationTime:null!==(o=null!=n?n:r.expirationTime&&r.expirationTime)&&void 0!==o?o:Date.now()})}createField({key:e,value:t,data:i,visitorCode:a,expirationTime:n}){i[a]=Object.assign(Object.assign({},i[a]),{[e]:Object.assign(Object.assign({},t),{expirationTime:n})})}updateNestedField({key:e,nestedKey:t,value:i,data:a,visitorCode:n,expirationTime:o}){var r;const s=a[n][e][t];a[n][e][t]=Object.assign(Object.assign({},i),{expirationTime:null!==(r=null!=o?o:null==s?void 0:s.expirationTime)&&void 0!==r?r:Date.now()})}createNestedField({key:e,nestedKey:t,value:i,data:a,visitorCode:n,expirationTime:o}){var r;(null===(r=a[n])||void 0===r?void 0:r[e])?a[n]=Object.assign(Object.assign({},a[n]),{[e]:Object.assign(Object.assign({},a[n][e]),{[t]:Object.assign(Object.assign({},i),{expirationTime:o})})}):a[n]=Object.assign(Object.assign({},a[n]),{[e]:{[t]:Object.assign(Object.assign({},i),{expirationTime:o})}})}}class Qe{constructor({browserType:e,visitNumber:t,timeSincePreviousVisit:i,os:a,deviceType:n,browserVersion:o}){this.browserType=e,this.visitNumber=t,this.timeSincePreviousVisit=i,this.os=a,this.deviceType=n,this.browserVersion=o}get url(){const e=this.browserVersion?E+this.browserVersion:"",t=this.browserType?A+this.browserType:"",i=this.browserType?D+le[this.browserType]:"",a=this.os?w+this.os:"",n=this.os?b+se[this.os]:"",o=this.deviceType?T+this.deviceType:"",r=void 0!==this.visitNumber?"&visitNumber="+this.visitNumber:"",s=void 0!==this.timeSincePreviousVisit?"&timeSincePreviousVisit="+this.timeSincePreviousVisit:"";return y+t+i+e+r+s+a+n+o}}class Ze{static setConditionFactoryInstance(e){this.conditionFactoryInstance=e}static createCondition(e){return this.conditionFactoryInstance.createCondition(e)}}class et{constructor(e,t,i){var a;if(this.inverseResult=!1,this.isOperator(e))this.nodeValue=e;else{const t=Ze.createCondition(e);this.inverseResult=!(null===(a=e.isInclude)||void 0===a||a),t.ok?this.nodeValue=t.data:this.nodeError=t.error}this.leftChild=t,this.rightChild=i}get value(){return this.nodeValue}get error(){return this.nodeError}get left(){return this.leftChild}get right(){return this.rightChild}get inverse(){return this.inverseResult}isOperator(e){return e===ve.And||e===ve.Or}}class tt{constructor(e){this.error=null,this.targetingTypes=new Set,M.debug`CALL: new Tree(segment: ${e})`;const{nestedConditions:t,topLevelOperators:i}=this.flattenSegment(e),a=t.map(({conditions:e,operators:t})=>{const i=e.map(e=>(this.targetingTypes.add(e.targetingType),new et(e)));return this.buildTree(i,t)});this.tree=this.buildTree(a,i),M.debug`RETURN: new Tree(segment: ${e})`}evaluate(e){const t=this.evaluateNode(this.tree,e);return this.error?l.Err(this.error):l.Ok(t)}hasTargetingType(e){return this.targetingTypes.has(e)}evaluateNode(t,i){if(this.isLeafNode(t)){if(t.error)return t.error.type===e.KameleoonException.TargetingCondition;const a=t.value.evaluate(i);return a.ok?t.inverse?!a.data:a.data:(this.error=a.error,!1)}if(this.isNonLeafNode(t))switch(t.value){case ve.And:return this.evaluateNode(t.left,i)&&this.evaluateNode(t.right,i);case ve.Or:return this.evaluateNode(t.left,i)||this.evaluateNode(t.right,i)}return!1}isLeafNode(e){return!Boolean(e.left&&e.right)}isNonLeafNode(e){return Boolean(e.left&&e.right&&(e.value===ve.Or||e.value===ve.And))}buildTree(e,t){if(1===e.length)return e[0];for(const i of t){const t=e.shift(),a=e.shift(),n=new et(i,t,a);e.unshift(n)}return e[0]}flattenSegment(e){const{firstLevel:t,firstLevelOrOperators:i}=e.conditionsData,a=[];return t.forEach(e=>{const{conditions:t,orOperators:i}=e,n={operators:this.convertOperators(i),conditions:t};a.push(n)}),{topLevelOperators:this.convertOperators(i),nestedConditions:a}}convertOperators(e){return e.map(e=>e?ve.Or:ve.And)}}function it({targetingData:t,sdkInfo:i},a,n){var o;const r=null==t?void 0:t[e.KameleoonData.VisitsData];if(!(null===(o=null==r?void 0:r.visits)||void 0===o?void 0:o.length)||null==a&&null==n)return 0;const{visits:s}=r;let u=1;a!==ke.CURRENT_VISIT&&(u=null!=n?i.isServer?n-1:n:s.length);const l=s[Math.max(0,s.length-u)];return"number"==typeof l?l:l.timeStarted}class at{constructor({campaignType:e,visitCount:t,visitScope:i}){this.campaignType=e,this.visitCount=t,this.visitScope=i}evaluate(e){return l.Ok(this.checkCondition(e))}checkCondition(e){const t=it(e,this.visitScope,this.visitCount);switch(this.campaignType){case De.Experiment:return this.checkExperiment(e,t);case De.Personalization:return this.checkPersonalization(e,t);case De.Any:return this.checkPersonalization(e,t)&&this.checkExperiment(e,t);default:return!1}}checkExperiment(e,t){const i=Object.keys(e.variationData);let a=0,n=null;for(const o of i){const i=e.variationData[o];if((!(null==i?void 0:i.assignedTime)||i.assignedTime>=t)&&(a++,n=o,a>1))break}return 0===a||1===a&&null!==e.experimentId&&n===String(e.experimentId)}checkPersonalization(e,t){var i;const a=Object.values((null===(i=e.targetingData)||void 0===i?void 0:i.personalization)||{});for(const e of a)if((null==e?void 0:e.assignedTime)&&e.assignedTime>=t)return!1;return!0}}class nt{constructor({device:e}){this.device=e}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.Device];if(i){const{device:e}=i;return l.Ok(e===this.device)}return l.Ok(!1)}}class ot{constructor({browser:e,version:t,versionMatchType:i}){this.browser=e,this.version=t,this.versionMatchType=i}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.Browser];if(i){const e=this.checkCondition(i);return this.error?l.Err(this.error):l.Ok(e)}return l.Ok(!1)}checkCondition(t){const{browser:i,version:a}=t;if("string"!=typeof this.browser)return!1;if(!this.version)return i===this.browser;if(!this.versionMatchType||"number"!=typeof a)return!1;const n=parseFloat(this.version);switch(isNaN(n)&&(M.error`Failed to parse version: ${this.version} in Browser condition`,this.error=new h(e.KameleoonException.VersionParse,this.version)),this.versionMatchType){case Te.EQUAL:return i===this.browser&&a===n;case Te.GREATER:return i===this.browser&&a>n;case Te.LOWER:return i===this.browser&&a<n;default:M.error`Unexpected comparing operation for Browser condition: ${this.versionMatchType}`,g(this.versionMatchType)}}}class rt{constructor({goalId:e,visitCount:t,visitScope:i}){this.goalId=e,this.visitCount=t,this.visitScope=i}evaluate(t){const{targetingData:i}=t,a=null==i?void 0:i[e.KameleoonData.Conversion];if(!a)return l.Ok(!1);const n=Object.values(a);if(!n.length)return l.Ok(!1);const o=it(t,this.visitScope,this.visitCount);return l.Ok(n.some(e=>!!e&&(null==this.goalId||e.goalId===this.goalId)&&(!e.assignedTime||e.assignedTime>=o)))}}class st{constructor({customDataIndex:e,valueMatchType:t,value:i,range:a}){this.customDataIndex=e?Number(e):-1,this.matchType=t,this.conditionValue=i,this.range=a}evaluate({targetingData:t}){var i;const a=null===(i=null==t?void 0:t[e.KameleoonData.CustomData])||void 0===i?void 0:i[this.customDataIndex];if(this.matchType===me.UNDEFINED)return l.Ok(!a);if(a){const{value:e}=a,t=this.checkCondition(e);return this.error?l.Err(this.error):l.Ok(t)}return l.Ok(!1)}checkCondition(e){if("string"!=typeof this.conditionValue&&this.matchType!==me.TRUE&&this.matchType!==me.FALSE&&this.matchType!==me.RANGE)return M.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`,!1;const t=this.conditionValue;if(this.matchType===me.AMONG_VALUES){const i=this.parseArray(t);if(!i.ok)return this.error=i.error,!1;const a=new Set(i.data);return Array.isArray(e)?e.some(e=>a.has(e)):i.data.includes(e)}if(this.matchType===me.RANGE){const t=this.parseRange(this.range);if(!t.ok)return this.error=t.error,!1;const[i,a]=t.data,n=e=>e>=i&&e<=a;return Array.isArray(e)?e.some(e=>n(Number(e))):n(Number(e))}if(Array.isArray(e))return e.some(e=>this.checkCondition(e));switch(this.matchType){case me.CONTAINS:return e.includes(t);case me.EXACT:return e===this.conditionValue;case me.REGULAR_EXPRESSION:return je.parseRegExp(t).test(e);case me.LOWER:return Number(e)<Number(this.conditionValue);case me.EQUAL:return Number(e)===Number(this.conditionValue);case me.GREATER:return Number(e)>Number(this.conditionValue);case me.TRUE:return"true"===e.toLowerCase();case me.FALSE:return"false"===e.toLowerCase();default:return M.error`Unexpected comparing operation for CustomData condition: ${this.matchType}`,!1}}parseArray(t){try{const e=JSON.parse(t);if(Array.isArray(e))return l.Ok(e)}catch(i){return M.error`Failed to parse array: ${t} in CustomData condition`,l.Err(new h(e.KameleoonException.AmongValuesCheck,i,t))}return l.Ok([])}parseRange(t){return t&&2===t.length?l.Ok(t):(M.error`Failed to parse range: ${t} in CustomData condition`,l.Err(new h(e.KameleoonException.RangeCheck,t)))}}class ut{static getLatest(e){return Object.values(e).reduce((e,t)=>e.timestamps[e.timestamps.length-1].time>t.timestamps[t.timestamps.length-1].time?e:t)}}class lt{constructor({matchType:e,title:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.PageView];if(!i)return l.Ok(!1);const a=ut.getLatest(i);return l.Ok(this.checkCondition(a.title))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case Ee.CONTAINS:return e.includes(this.conditionValue);case Ee.EXACT:return e===this.conditionValue;case Ee.REGULAR_EXPRESSION:return je.parseRegExp(this.conditionValue).test(e);default:return M.error`Unexpected comparing operation for PageTitle condition: ${this.matchType}`,!1}}}class dt{constructor({matchType:e,url:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.PageView];if(!i)return l.Ok(!1);const a=ut.getLatest(i);return l.Ok(this.checkCondition(a.urlAddress))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case Ee.CONTAINS:return e.includes(this.conditionValue);case Ee.EXACT:return e===this.conditionValue;case Ee.REGULAR_EXPRESSION:return je.parseRegExp(this.conditionValue).test(e);default:return M.error`Unexpected comparing operation for PageUrl condition: ${this.matchType}`,!1}}}class ct{constructor({sdkLanguage:e,version:t,versionMatchType:i}){this.sdkLanguage=e,this.conditionValue=t,this.versionMatchType=i}evaluate({sdkInfo:e}){return this.checkCondition(e)}checkCondition(e){const{type:t,version:i}=e;if(!this.sdkLanguage)return l.Ok(!1);if("string"!=typeof this.conditionValue)return l.Ok(t===this.sdkLanguage);if(!this.versionMatchType)return l.Ok(!1);if(t!==this.sdkLanguage)return l.Ok(!1);const a=Ke.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?l.Ok(a.data):l.Err(a.error)}}class gt{constructor({visitorCode:e,matchType:t}){this.matchType=t,this.conditionValue=e}evaluate({visitorCode:e}){return l.Ok(this.checkCondition(e))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case Ee.CONTAINS:return e.includes(this.conditionValue);case Ee.EXACT:return e===this.conditionValue;case Ee.REGULAR_EXPRESSION:return je.parseRegExp(this.conditionValue).test(e);default:return M.error`Unexpected comparing operation for VisitorCode condition: ${this.matchType}`,!1}}}class ht{constructor({name:e,value:t,nameMatchType:i,valueMatchType:a}){this.cookie={key:null!=e?e:void 0,value:null!=t?t:void 0},this.keyMatchType=i,this.valueMatchType=a}evaluate({targetingData:t}){var i;const a=!this.cookie.key&&!this.cookie.value,n=Boolean(this.valueMatchType)&&Boolean(this.keyMatchType);if(a||!n)return l.Ok(!1);const o=this.extractCookie(),r=(null===(i=null==t?void 0:t[e.KameleoonData.Cookie])||void 0===i?void 0:i.cookie)||[];return l.Ok(o.some(e=>this.checkCondition(e))||r.some(e=>this.checkCondition(e)))}extractCookie(){return"undefined"!=typeof document&&document.cookie?Ye.fromString(document.cookie).data.cookie:[]}checkCondition(e){const t=this.keyMatchType,{key:i,value:a}=e;if(t===Ie.OPTIONAL){const e=this.cookie;return!!this.isOptionalCookie(e)&&this.compareCookieValue(a,e.value)}const{key:n,value:o}=this.cookie;let r;switch(t){case Ie.EXACT:r=i===n;break;case Ie.CONTAINS:r=i.includes(n);break;case Ie.REGULAR_EXPRESSION:r=je.parseRegExp(n).test(i);break;default:M.error`Unexpected comparing operation for Cookie condition: ${t}`,g(t)}return r&&this.compareCookieValue(a,o)}compareCookieValue(e,t){const i=this.valueMatchType;switch(i){case me.EXACT:return e===t;case me.CONTAINS:return e.includes(t);case me.REGULAR_EXPRESSION:return je.parseRegExp(t).test(e);default:return M.error`Unexpected comparing operation for Cookie condition: ${i}`,!1}}isOptionalCookie(e){const{value:t}=e;return void 0!==t}}class pt{constructor({os:e}){this.operatingSystem=e}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.OperatingSystem];if(i){const{operatingSystem:e}=i;return l.Ok(e===this.operatingSystem)}return l.Ok(!1)}}class vt{constructor({country:e,region:t,city:i}){this.country=e,this.region=t,this.city=i}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.GeolocationData];if(i){const{country:e,region:t,city:a}=i,[n,o,r]=[this.country,this.region,this.city];if(!n||!e)return l.Ok(!1);const s=!(e.toLowerCase()!==n.toLowerCase()||o&&(null==t?void 0:t.toLowerCase())!==o.toLowerCase()||r&&(null==a?void 0:a.toLowerCase())!==r.toLowerCase());return l.Ok(s)}return l.Ok(!1)}}class mt{constructor({segmentId:e}){this.segmentId=e}evaluate(e){var t;const{segments:i,trees:a}=e;if(!this.segmentId)return l.Ok(!1);const n=null==i?void 0:i.get(this.segmentId.toString());if(!n)return l.Ok(!1);const o=null!==(t=null==a?void 0:a.get(this.segmentId.toString()))&&void 0!==t?t:null==a?void 0:a.get(this.segmentId);return o?o.evaluate(e):new tt(n).evaluate(e)}}class ft{constructor({featureFlagId:e,variationKey:t,ruleId:i,visitCount:a,visitScope:n}){this.featureId=e,this.ruleId=i,this.variationKey=t,this.visitCount=a,this.visitScope=n}evaluate(e){const{variationData:t,ruleMap:i}=e;if(!this.featureId||!i)return l.Ok(!1);const a=it(e,this.visitScope,this.visitCount),n=(e,t)=>!e||e>=t;if(this.featureId&&!this.ruleId&&!this.variationKey){for(const e of i.values()){const{featureId:i,experimentId:o}=e,r=t[o];if(i===this.featureId&&"number"==typeof(null==r?void 0:r.variationId)&&n(null==r?void 0:r.assignedTime,a))return l.Ok(!0)}return l.Ok(!1)}if(this.featureId&&this.ruleId){const e=i.get(this.ruleId);if((null==e?void 0:e.featureId)!==this.featureId)return l.Ok(!1);const{experimentId:o,variations:r}=e,s=t[o];if(this.variationKey){const e=r.get(this.variationKey);return l.Ok(Boolean(e)&&(null==s?void 0:s.variationId)===e&&n(null==s?void 0:s.assignedTime,a))}return l.Ok(Boolean(null==s?void 0:s.variationId)&&n(null==s?void 0:s.assignedTime,a))}if(this.featureId&&!this.ruleId&&this.variationKey)for(const e of i.values()){const{featureId:i,experimentId:o,variations:r}=e;if(i===this.featureId&&r.has(this.variationKey)){const e=r.get(this.variationKey),i=t[o];if(Boolean(e)&&(null==i?void 0:i.variationId)===e&&n(null==i?void 0:i.assignedTime,a))return l.Ok(!0)}}return l.Ok(!1)}}class Ct{constructor({matchType:e,url:t}){this.conditionValue=t,this.matchType=e}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.PageView];if(!i)return l.Ok(!1);const a=this.getSecondLatestPageView(Object.values(i));if(!a)return l.Ok(!1);const n=a.urlAddress;return l.Ok(this.checkCondition(n))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case Ee.CONTAINS:return e.includes(this.conditionValue);case Ee.EXACT:return e===this.conditionValue;case Ee.REGULAR_EXPRESSION:return je.parseRegExp(this.conditionValue).test(e);default:return M.error`Unexpected comparing operation for PreviousPage condition: ${this.matchType}`,!1}}getSecondLatestPageView(e){if(e.length<2)return;let t,i;return e.forEach(e=>{const a=e.timestamps[e.timestamps.length-1].time;if(t)return a>t.timestamps[t.timestamps.length-1].time?(i=t,void(t=e)):void(a>(i?i.timestamps[i.timestamps.length-1].time:0)&&(i=e));t=e}),i}}class yt{constructor({matchType:e,pageCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.PageView];if(!i)return l.Ok(!1);let a=0;return Object.values(i).forEach(e=>{a+=e.timestamps.length}),l.Ok(this.checkCondition(a))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case Ee.EQUAL:return e===this.conditionValue;case Ee.GREATER:return e>this.conditionValue;case Ee.LOWER:return e<this.conditionValue;default:return M.error`Unexpected comparing operation for VisitedPages condition: ${this.matchType}`,!1}}}class Dt{constructor({matchType:e,count:t,unitOfTime:i}){this.matchType=e,this.conditionValue=t,this.timeUnit=i}evaluate({targetingData:t,sdkInfo:i}){const a=null==t?void 0:t[e.KameleoonData.VisitsData];if(i.isServer?!(null==a?void 0:a.visits.length):!(null==a?void 0:a.visits)||a.visits.length<2)return l.Ok(!1);const n=a.visits[0];return l.Ok(this.checkCondition("number"==typeof n?n:n.timeStarted))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue||!this.timeUnit)return!1;const t=Date.now()-e,i=Ke.convertTimeUnit(t,this.timeUnit);switch(this.matchType){case Ee.GREATER:return i>this.conditionValue;case Ee.LOWER:return i<this.conditionValue;default:return M.error`Unexpected comparing operation for FirstVisit condition: ${this.matchType}`,!1}}}class Et{constructor({matchType:e,count:t,unitOfTime:i}){this.matchType=e,this.conditionValue=t,this.timeUnit=i}evaluate({targetingData:t,sdkInfo:i}){const a=null==t?void 0:t[e.KameleoonData.VisitsData];if(i.isServer?!(null==a?void 0:a.visits.length):!(null==a?void 0:a.visits)||a.visits.length<2)return l.Ok(!1);const n=a.visits,o=n[i.isServer?n.length-1:n.length-2];return l.Ok(this.checkCondition("number"==typeof o?o:o.timeStarted))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue||!this.timeUnit)return!1;const t=Date.now()-e,i=Ke.convertTimeUnit(t,this.timeUnit);switch(this.matchType){case Ee.GREATER:return i>this.conditionValue;case Ee.LOWER:return i<this.conditionValue;default:return M.error`Unexpected comparing operation for LastVisit condition: ${this.matchType}`,!1}}}class Tt{constructor({matchType:e,visitCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:t,sdkInfo:i}){const a=null==t?void 0:t[e.KameleoonData.VisitsData];if(!a)return l.Ok(!1);let n=0;const o=(new Date).setHours(0,0,0,0),{visits:r}=a;return r.forEach(e=>{let t;t="number"==typeof e?e:e.timeStarted,t>=o&&n++}),i.isServer&&(n+=1),l.Ok(this.checkCondition(n))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case Ee.EQUAL:return e===this.conditionValue;case Ee.GREATER:return e>this.conditionValue;case Ee.LOWER:return e<this.conditionValue;default:return M.error`Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`,!1}}}class It{constructor({matchType:e,visitCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:t,sdkInfo:i}){const a=null==t?void 0:t[e.KameleoonData.VisitsData];if(!a)return l.Ok(!1);const n=a.visits.length+(i.isServer?1:0);return l.Ok(this.checkCondition(n))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case Ee.EQUAL:return e===this.conditionValue;case Ee.GREATER:return e>this.conditionValue;case Ee.LOWER:return e<this.conditionValue;default:return M.error`Unexpected comparing operation for Visits condition: ${this.matchType}`,!1}}}class kt{constructor({visitorType:e}){this.visitorType=e}evaluate({targetingData:t,sdkInfo:i}){const a=null==t?void 0:t[e.KameleoonData.VisitsData];if(!a||!this.visitorType)return l.Ok(!1);const{visits:n}=a,o=i.isServer?!n.length:n.length<=1;switch(this.visitorType){case fe.NEW:return l.Ok(o);case fe.RETURNING:return l.Ok(!o);default:M.error`Unexpected visitor type for NewVisitor condition: ${this.visitorType}`,g(this.visitorType)}}}class St{constructor({version:e,versionMatchType:t}){this.conditionValue=e,this.versionMatchType=t}evaluate({targetingData:t}){var i;const a=null===(i=null==t?void 0:t[e.KameleoonData.ApplicationVersion])||void 0===i?void 0:i.version;if(!a||!this.conditionValue||!this.versionMatchType)return l.Ok(!1);const n=Ke.compareSemVer({version:a,compareVersion:this.conditionValue,operator:this.versionMatchType});return n.ok?l.Ok(n.data):l.Err(n.error)}}class Vt{constructor({lowerBound:e,upperBound:t,keyMomentId:i,goalId:a}){this.lowerBound=e,this.upperBound=t,this.keyMomentId=i,this.goalId=a}evaluate({targetingData:t}){var i;const a=null==t?void 0:t[e.KameleoonData.KameleoonConversionScore];if("number"!=typeof this.keyMomentId||"number"!=typeof this.goalId||"number"!=typeof this.lowerBound||"number"!=typeof this.upperBound||!a)return l.Ok(!1);const n=null===(i=a.kcs[this.keyMomentId.toString()])||void 0===i?void 0:i[this.goalId.toString()];return"number"!=typeof n?l.Ok(!1):l.Ok(n>=this.lowerBound&&n<=this.upperBound)}}class Rt{constructor({variationMatchType:e,variationId:t,experimentId:i,visitCount:a,visitScope:n}){this.variationMatchType=e,this.variationId=null!=t?t:-1,this.experimentId=null!=i?i:-1,this.visitCount=a,this.visitScope=n}evaluate(e){return l.Ok(this.checkCondition(e))}checkCondition(e){const t=e.variationData[this.experimentId];if(!t)return!1;const i=it(e,this.visitScope,this.visitCount);if(t.assignedTime&&t.assignedTime<i)return!1;switch(this.variationMatchType){case Ce.ANY:return!0;case Ce.EXACT:return t.variationId===this.variationId;default:return!1}}}class wt{constructor({personalizationId:e,visitCount:t,visitScope:i}){this.personalizationId=e,this.visitCount=t,this.visitScope=i}evaluate(e){return e.targetingData?l.Ok(this.checkCondition(e)):l.Ok(!1)}checkCondition(t){var i,a;if(!this.personalizationId)return!1;const n=null===(a=null===(i=t.targetingData)||void 0===i?void 0:i[e.KameleoonData.Personalization])||void 0===a?void 0:a[this.personalizationId];if(!n)return!1;const{assignedTime:o}=n;return!o||o>=it(t,this.visitScope,this.visitCount)}}class bt{createCondition(t){const{targetingType:i}=t;switch(i){case Se.CUSTOM_DATUM:return l.Ok(new st(t));case Se.EXCLUSIVE_EXPERIMENT:return l.Ok(new at(t));case Se.TARGET_EXPERIMENT:return l.Ok(new Rt(t));case Se.TARGET_FEATURE_FLAG:return l.Ok(new ft(t));case Se.TARGET_PERSONALIZATION:return l.Ok(new wt(t));case Se.DEVICE_TYPE:return l.Ok(new nt(t));case Se.BROWSER:return l.Ok(new ot(t));case Se.PAGE_URL:return l.Ok(new dt(t));case Se.PAGE_TITLE:return l.Ok(new lt(t));case Se.CONVERSIONS:return l.Ok(new rt(t));case Se.VISITOR_CODE:return l.Ok(new gt(t));case Se.SDK_LANGUAGE:return l.Ok(new ct(t));case Se.COOKIE:return l.Ok(new ht(t));case Se.OPERATING_SYSTEM:return l.Ok(new pt(t));case Se.GEOLOCATION:return l.Ok(new vt(t));case Se.SEGMENT:return l.Ok(new mt(t));case Se.APPLICATION_VERSION:return l.Ok(new St(t));case Se.PREVIOUS_PAGE:return l.Ok(new Ct(t));case Se.PAGE_VIEWS:return l.Ok(new yt(t));case Se.LAST_VISIT:return l.Ok(new Et(t));case Se.FIRST_VISIT:return l.Ok(new Dt(t));case Se.SAME_DAY_VISITS:return l.Ok(new Tt(t));case Se.VISITS:return l.Ok(new It(t));case Se.NEW_VISITORS:return l.Ok(new kt(t));case Se.HEAT_SLICE:return l.Ok(new Vt(t));default:return M.info`Unsupported targeted condition type found: ${i}`,l.Err(new h(e.KameleoonException.TargetingCondition,i))}}}var At;e.KameleoonStorageKey=void 0,(At=e.KameleoonStorageKey||(e.KameleoonStorageKey={})).ClientData="kameleoonClientData",At.TargetingData="kameleoonTargetingData",At.TrackingData="kameleoonTrackingData",At.VariationData="kameleoonVariationData",At.VisitorCode="kameleoonVisitorCode",At.ConsentData="kameleoonConsentData",At.DataInfo="kameleoonDataInfo",At.KameleoonSimulationFFData="kameleoonSimulationFFData",At.ForcedFeatureVariation="kameleoonForcedFeatureVariation",At.ForcedExperimentVariation="kameleoonForcedExperimentVariation";const Kt={data:ee,lastUpdate:""},xt=29*e.Milliseconds.Minute;class Ot{constructor(e){this.key=e}isDataValid(t){switch(this.key){case e.KameleoonStorageKey.ClientData:return this.checkClientDataIntegrity(t);case e.KameleoonStorageKey.TargetingData:return this.checkTargetingDataIntegrity(t);case e.KameleoonStorageKey.DataInfo:return this.checkDataInfoIntegrity(t);case e.KameleoonStorageKey.VariationData:return this.checkVariationDataIntegrity(t);case e.KameleoonStorageKey.TrackingData:return this.checkTrackingDataIntegrity(t);default:return!0}}getDefaultData(){switch(this.key){case e.KameleoonStorageKey.ClientData:return this.getDefaultClientData();case e.KameleoonStorageKey.DataInfo:return{unsentData:{},nextVisitTime:0,mappingIdentifiers:{}};case e.KameleoonStorageKey.TrackingData:return{scheduledVisitors:{}};case e.KameleoonStorageKey.TargetingData:case e.KameleoonStorageKey.VariationData:case e.KameleoonStorageKey.ConsentData:return{};case e.KameleoonStorageKey.VisitorCode:case e.KameleoonStorageKey.KameleoonSimulationFFData:return"";case e.KameleoonStorageKey.ForcedExperimentVariation:case e.KameleoonStorageKey.ForcedFeatureVariation:return{};default:g(this.key)}}checkTrackingDataIntegrity(e){return this.hasFields(e,["scheduledVisitors"])}checkDataInfoIntegrity(e){return this.hasFields(e,["unsentData","nextVisitTime"])}checkVariationDataIntegrity(e){const t=Object.values(e);if(!t.length)return!0;const i=e=>!this.hasFields(e,["status"])||this.hasFields(e,["isSent"]);for(const e of t)for(const t of Object.values(e))if(i(t))return!1;return!0}checkClientDataIntegrity(e){return this.hasFields(e,Object.keys(Kt))}checkTargetingDataIntegrity(t){const i=Object.values(t);if(!i.length)return!0;for(const t of i){if("string"==typeof t)continue;const i=e=>!this.hasFields(e,["status"])||this.hasFields(e,["sent"])||this.hasFields(e,["timestampList"]);for(const[a,n]of Object.entries(t)){if(Array.isArray(n))return!1;switch(a){case e.KameleoonData.PageView:case e.KameleoonData.Conversion:case e.KameleoonData.Personalization:case e.KameleoonData.TargetedSegment:case e.KameleoonData.CustomData:if(Object.values(n).some(e=>i(e)))return!1;continue;default:if(i(n))return!1}}}return!0}getDefaultClientData(){return Object.assign(Object.assign({},Kt),{lastUpdate:(new Date).toString()})}hasFields(e,t){const i=Object.keys(e);return!(!i.length||!t.length)&&t.every(e=>i.includes(e))}}let $t=class{constructor(t,i){this.externalStorage=t,this.storageKey=i;const a=new Ot(i),n=this.read();if(!n.ok){if(n.error.type===e.KameleoonException.StorageEmpty){const e=a.getDefaultData();this.write(e)}return}const o=n.data;if(!a.isDataValid(o)){const e=a.getDefaultData();this.write(e)}}read(){try{const t=this.externalStorage.read(this.storageKey);return null===t?l.Err(new h(e.KameleoonException.StorageEmpty)):l.Ok(t)}catch(t){return M.error`Failed to read data from storage: ${this.storageKey}`,l.Err(new h(e.KameleoonException.StorageRead,this.storageKey))}}write(t){try{return this.externalStorage.write(this.storageKey,t),l.Ok()}catch(t){return M.error`Failed to write data to storage: ${this.storageKey}`,l.Err(new h(e.KameleoonException.StorageWrite,this.storageKey))}}update(t){const i=this.read();if(!i.ok)return i.error.type===e.KameleoonException.StorageEmpty?this.write(t):i;const a=i.data;let n;return n="string"==typeof a?t:Object.assign(Object.assign({},a),t),this.write(n)}};class Ft{constructor(e,t){this.externalStorage=e,this.cleanupInterval=t,t>0&&this.initCleanupInterval()}initCleanupInterval(){for(const t of Object.values(e.KameleoonStorageKey)){let i=null;try{switch(t){case e.KameleoonStorageKey.ForcedFeatureVariation:case e.KameleoonStorageKey.ForcedExperimentVariation:case e.KameleoonStorageKey.VariationData:case e.KameleoonStorageKey.ConsentData:M.info`Starting cleanup for ${t} with interval ${this.cleanupInterval}`,i=setInterval(()=>this.cleanupData(t),this.cleanupInterval);break;case e.KameleoonStorageKey.ClientData:case e.KameleoonStorageKey.TargetingData:case e.KameleoonStorageKey.TrackingData:case e.KameleoonStorageKey.VisitorCode:case e.KameleoonStorageKey.DataInfo:case e.KameleoonStorageKey.KameleoonSimulationFFData:break;default:M.error`Unknown storage key: ${t} for initCleanupInterval.`}}catch(e){i&&clearInterval(i),M.error`Error while starting cleanup for ${t} with interval ${this.cleanupInterval}`}}}cleanupData(t){const i=this.externalStorage.read(t);if(!i)return;const a=Date.now();switch(t){case e.KameleoonStorageKey.VariationData:this.cleanupVariationData(i,a);break;case e.KameleoonStorageKey.ForcedFeatureVariation:this.cleanupForcedFeatureVariationData(i,a);break;case e.KameleoonStorageKey.ForcedExperimentVariation:this.cleanupForcedExperimentVariationData(i,a);break;case e.KameleoonStorageKey.ConsentData:this.cleanupConsentData(i,a);break;case e.KameleoonStorageKey.ClientData:case e.KameleoonStorageKey.TargetingData:case e.KameleoonStorageKey.TrackingData:case e.KameleoonStorageKey.VisitorCode:case e.KameleoonStorageKey.DataInfo:case e.KameleoonStorageKey.KameleoonSimulationFFData:break;default:M.error`Unknown storage key: ${t} for cleanupData.`}this.externalStorage.write(t,i)}cleanupConsentData(e,t){for(const[i,a]of Object.entries(e)){if("boolean"==typeof a){e[i]={consent:a,expirationTime:t+this.cleanupInterval};continue}const n=a;"number"==typeof n.expirationTime?n.expirationTime<t&&delete e[i]:n.expirationTime=t+this.cleanupInterval}}cleanupVariationData(e,t){for(const[i,a]of Object.entries(e))this.cleanupObjectValues(a,t),0===Object.keys(e[i]).length&&delete e[i]}cleanupForcedFeatureVariationData(e,t){for(const[i,a]of Object.entries(e))for(const[n,o]of Object.entries(a))this.cleanupObjectValues(o,t),0===Object.keys(e[Number(i)][n]).length&&delete e[Number(i)][n]}cleanupForcedExperimentVariationData(e,t){for(const[i,a]of Object.entries(e))this.cleanupObjectValues(a,t),0===Object.keys(e[i]).length&&delete e[i]}cleanupObjectValues(e,t){for(const[i,a]of Object.entries(e))"number"==typeof a.expirationTime?a.expirationTime<t&&delete e[i]:a.expirationTime=t+this.cleanupInterval}}var Nt;!function(e){e[e.Unknown=0]="Unknown",e[e.Given=1]="Given",e[e.NotGiven=2]="NotGiven"}(Nt||(Nt={}));class Mt{constructor(t){this.id=t,this.status=e.TrackingStatus.Unsent}get url(){return"eventType=targetingSegment"+V+this.id}get data(){return{id:this.id,type:e.KameleoonData.TargetedSegment,status:this.status}}static _fromRaw(e){const{id:t,status:i}=e,a=new Mt(t);return a.status=i,a}}class Lt{constructor({dataStorage:e,infoStorage:t,cleanupInterval:i,packageInfo:a}){if(this.targetingTrees=new Map,this.mappingIdentifierCustomDataIndex=null,this.persistentCustomDataIndexes=new Set,this.localCustomDataIndexes=new Set,this.customDataIndexByName=new Map,this.cleanupIntervalId=null,M.debug`CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`,this.dataStorage=e,this.infoStorage=t,this.dataProcessor=new Je(i,a),this.packageInfo=a,i){const e=()=>{this.cleanupData()};try{this.cleanupIntervalId=setInterval(e,i)}catch(e){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),M.error`Failed to set cleanup interval: ${i}`,e}}M.debug`RETURN: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`}getUnsentData(t){const i=this.infoStorage.read();if(!i.ok)return[];const a=i.data,n=this.getVisitorData(t);if(!a.unsentData[t]||!n)return[];const o=a.unsentData[t],r=a.nextVisitTime<=Date.now();return r&&(a.nextVisitTime=Date.now()+xt,this.infoStorage.write(a)),this.getDataFromRaw(n,({status:t,key:i,cdIndex:a})=>!("number"!=typeof a||!this.persistentCustomDataIndexes.has(a)||!r)||o.includes(i)&&t===e.TrackingStatus.Unsent)}getPendingData(t){const i=this.getVisitorData(t);return i?this.getDataFromRaw(i,({status:t})=>t===e.TrackingStatus.Pending):[]}getDataFromRaw(t,i){const a=[];for(const[n,o]of Object.entries(t))if(o)switch(n){case e.KameleoonData.CustomData:for(const e of Object.values(o)){if(!e)continue;const{status:t,index:o}=e;if(i({status:t,key:n,cdIndex:o})){const t=$e._fromRaw(e);a.push(t)}}break;case e.KameleoonData.Conversion:for(const e of Object.values(o))if(e&&i({status:e.status,key:n})){const t=Fe._fromRaw(e);a.push(t)}break;case e.KameleoonData.PageView:{const e=o;for(const t of Object.values(e))if(i({status:t.status,key:n})){const e=Oe._fromRaw(t);a.push(e)}break}case e.KameleoonData.TargetedSegment:{const e=o;for(const t of Object.values(e))if(i({status:t.status,key:n})){const e=Mt._fromRaw(t);a.push(e)}break}case e.KameleoonData.GeolocationData:{const e=o;if(!o)continue;if(i({status:e.status,key:n})){const t=_e._fromRaw(e);a.push(t)}break}case e.KameleoonData.Browser:{const e=o;if(i({status:e.status,key:n})){const t=Ne._fromRaw(e);a.push(t)}break}case e.KameleoonData.Device:{const e=o;if(i({status:e.status,key:n})){const t=Me._fromRaw(e);a.push(t)}break}case e.KameleoonData.OperatingSystem:{const e=o;if(i({status:e.status,key:n})){const t=Le._fromRaw(e);a.push(t)}}}return a}storeTrackedData(t){this.storeDataForVisitors(t,!1);const i=this.infoStorage.read();if(!i.ok)return;const a=i.data.unsentData;for(const[i,n]of Object.entries(t)){if(!a[i])return;const t=new Set(a[i]);n.forEach(({data:e})=>{t.has(e.type)&&t.delete(e.type)});const o=n.some(({data:t})=>{if(t.type!==e.KameleoonData.CustomData)return!1;const{index:i}=t;return this.persistentCustomDataIndexes.has(i)||this.mappingIdentifierCustomDataIndex===i});o&&t.add(e.KameleoonData.CustomData),a[i]=Array.from(t),a[i].length||delete a[i]}this.infoStorage.write(i.data)}storeData({visitorCode:e,data:t,track:i}){M.debug`CALL: DataManager.storeDataForVisitor(vc: ${e}, track: ${i}, data: ${t})`;const a=this.storeDataInternal((a,n)=>{this.mutUpdateTargetingData({infoData:a,targetingData:n,visitorCode:e,kameleoonData:t,extendTtl:!0,track:i})});return M.debug`RETURN: DataManager.storeDataForVisitor(vc: ${e}, track: ${i}, data: ${t}) -> ${a}`,a}storeDataForVisitors(e,t){M.debug`CALL: DataManager.storeDataForVisitors(data: ${e}, extendTtl: ${t})`;const i=this.storeDataInternal((i,a)=>{for(const[n,o]of Object.entries(e))this.mutUpdateTargetingData({infoData:i,targetingData:a,visitorCode:n,kameleoonData:o,extendTtl:t})});return M.debug`RETURN: DataManager.storeDataForVisitors(data: ${e}, extendTtl: ${t}) -> ${i}`,i}storeDataInternal(e){const t=this.dataStorage.read();if(!t.ok)return t;const i=this.infoStorage.read();if(!i.ok)return i;const a=t.data,n=i.data;return e(n,a),this.cleanupData(),this.infoStorage.write(n),this.dataStorage.write(a)}getTree(e){if(this.targetingTrees.has(e.id))return this.targetingTrees.get(e.id);const t=new tt(e);return this.targetingTrees.set(e.id,t),t}clearTrees(){this.targetingTrees.clear()}isPersistentCustomData(e){return!!this.persistentCustomDataIndexes.size&&!!Ke.isCustomData(e)&&this.persistentCustomDataIndexes.has(e.data.index)}isUniqueIdentifier(t){var i;const a=this.getVisitorData(t),n=null==a?void 0:a[e.KameleoonData.UniqueIdentifier];return null!==(i=null==n?void 0:n.value)&&void 0!==i&&i}getVisitorIdentifier(e){var t,i,a;const n=this.infoStorage.read();if(!n.ok)return e;const o=n.data;return null!==(t=o.mappingIdentifiers)&&void 0!==t||(o.mappingIdentifiers={}),null!==(a=null===(i=o.mappingIdentifiers[e])||void 0===i?void 0:i.mappingIdentifier)&&void 0!==a?a:e}getMappingIdentifier(e){const t=this.infoStorage.read();if(!t.ok)return;const i=t.data;return i.mappingIdentifiers?i.mappingIdentifiers[e]:void 0}setMappingIdentifier(e,t){var i;const a=this.infoStorage.read();if(!a.ok)return;const n=a.data;null!==(i=n.mappingIdentifiers)&&void 0!==i||(n.mappingIdentifiers={});const o=n.mappingIdentifiers[e];(!o||o.timestamp<t.timestamp)&&(n.mappingIdentifiers[e]=t,this.infoStorage.write(n))}getVisitorData(e){this.cleanupData();const t=this.dataStorage.read();if(!t.ok)return;let{visitorReference:i,data:a,isReference:n}=this.dataProcessor.dereferenceData(t.data,e);if(this.packageInfo.isServer&&n&&!a[i]){const t=this.infoStorage.read();t.ok&&t.data.mappingIdentifiers&&delete t.data.mappingIdentifiers[e],delete a[e],i=e}return a[i]}getVisitorStoredDataTypes(e){const t=this.getVisitorData(e);return t?new Set(Object.keys(t)):new Set}getLinkedVisitor(t){var i,a,n;const o=this.dataStorage.read();if(!o.ok)return null;const r=o.data[t];if("string"==typeof r)return r;if(null==r||null==this.mappingIdentifierCustomDataIndex)return null;const s=null===(n=null===(a=null===(i=r[e.KameleoonData.CustomData])||void 0===i?void 0:i[this.mappingIdentifierCustomDataIndex])||void 0===a?void 0:a.value)||void 0===n?void 0:n[0];return null!=s?s:null}mutUpdateTargetingData({infoData:t,visitorCode:i,kameleoonData:a,targetingData:n,extendTtl:o,track:r}){var s,u,l;for(const d of a){if(!1===r&&(d.status=e.TrackingStatus.Sent),d.data.type===e.KameleoonData.CustomData&&!this.processCustomData({infoData:t,customData:d,mutData:n,visitorCode:i}))continue;if(d.data.type===e.KameleoonData.Conversion){const e=d;(null!==(u=null===(s=e._metadata)||void 0===s?void 0:s.length)&&void 0!==u?u:0)>0&&(e._metadata=null===(l=e._metadata)||void 0===l?void 0:l.filter(e=>this.trySetCustomDataIndexByName(e)))}const a=this.dataProcessor.mutUpdateData({infoData:t,visitorCode:i,mutData:n,dataItem:d,extendTtl:o}),c=t.nextDataCleanup;(!c||c&&a&&a<c)&&(t.nextDataCleanup=a),d.data.status===e.TrackingStatus.Unsent&&this.dataProcessor.mutAddUnsentData({mutData:t,visitorCode:i,dataType:d.data.type})}}cleanupData(){const e=this.dataStorage.read(),t=this.infoStorage.read();if(!e.ok||!t.ok)return;const i=e.data,a=t.data,n=a.nextDataCleanup;if(n&&n<Date.now()){const e=this.dataProcessor.mutCleanupData(i,a);a.nextDataCleanup=e||void 0,this.infoStorage.write(a),this.dataStorage.write(i)}}processCustomData({infoData:t,mutData:i,customData:a,visitorCode:n}){var o;const{data:r}=a,s=Boolean(r.value.length&&r.value[0].length);if(!this.trySetCustomDataIndexByName(a))return!1;if(r.index==$e.UNDEFINED_INDEX&&(r.index=a.index),this.mappingIdentifierCustomDataIndex===r.index&&s){a._isMappingIdentifier=!0;const e=r.value[0];n!==e&&(M.info`Linked anonymous visitor ${n} with user ${e}`,this.dataProcessor.createReference({infoData:t,mutData:i,visitorCode:n,linkedVisitor:r.value[0]}),null!==(o=t.mappingIdentifiers)&&void 0!==o||(t.mappingIdentifiers={}),t.mappingIdentifiers[e]={mappingIdentifier:n,timestamp:Date.now()})}return this.localCustomDataIndexes.has(r.index)&&(a.status=e.TrackingStatus.Sent),!0}trySetCustomDataIndexByName(e){if(e.index!==$e.UNDEFINED_INDEX)return!0;if(!e.name)return!1;const t=this.customDataIndexByName.get(e.name);return null!=t&&(e.index=t,!0)}get unsentDataVisitors(){const e=this.infoStorage.read();return e.ok?Object.keys(e.data.unsentData):[]}get identifierCustomDataIndex(){return this.mappingIdentifierCustomDataIndex}get trees(){return this.targetingTrees}get storedCustomDataIndexes(){const t=this.dataStorage.read();if(!t.ok)return new Set;const i=t.data;if(!(e.KameleoonData.CustomData in i))return new Set;const a=new Set;for(const t in Object.keys(i[e.KameleoonData.CustomData]))a.add(Number(t));return a}set customDataIndexes(t){var i;const[a,n]=[[],[]],o=new Map;t.forEach(t=>{t.localOnly&&a.push(t.index),t.scope===e.CustomDataScope.Visitor&&n.push(t.index),t.name&&o.set(t.name,t.index)}),this.mappingIdentifierCustomDataIndex=(null===(i=t.find(e=>e.isMappingIdentifier))||void 0===i?void 0:i.index)||null,this.localCustomDataIndexes=new Set(a),this.persistentCustomDataIndexes=new Set(n),this.customDataIndexByName=o}getCustomDataIndexByName(e){return this.customDataIndexByName.get(e)}}const _t=31536e3;let Ut=class{constructor(){this.isConsentRequired=!1}set consentRequired(e){this.isConsentRequired=e}get consentRequired(){return this.isConsentRequired}set getData(e){this.getDataCallback=e}set setData(e){this.setDataCallback=e}get setData(){if(this.setDataCallback)return this.setDataCallback;throw new Error("Missing setDataCallback!")}validateVisitorCode(t){return 0===t.length?l.Err(new h(e.KameleoonException.VisitorCodeEmpty)):t.length>255?l.Err(new h(e.KameleoonException.VisitorCodeMaxLength)):l.Ok()}getVisitorCode(t){if(M.debug`CALL: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${t})`,!this.getDataCallback||!this.setDataCallback)throw new Error("Missing getDataCallback or setDataCallback methods in getVisitorCode!");let i;const a=this.getDataCallback(e.KameleoonStorageKey.VisitorCode);return a&&(i=a),i||(t?(this.validateVisitorCode(t).throw(),i=t,M.debug`Used default visitor code: ${i}`):(i=this.generateVisitorCode(),M.debug`Generated new visitor code: ${i}`)),this.processSimulatedVariations(i),this.isConsentRequired||this.setDataCallback({visitorCode:i,key:e.KameleoonStorageKey.VisitorCode,maxAge:_t,path:"/"}),M.debug`RETURN: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${t}) -> (visitorCode: ${i})`,i}processSimulatedVariations(e){if(this.variationConfiguration){const t=this.getSimulatedVariations(e);try{this.variationConfiguration.clearSimulatedVariations(e).throw(),null!==t&&t.length>0&&this.variationConfiguration.updateForcedFeatureVariations(e,t).throw()}catch(e){e instanceof Error&&M.error`Failed to process simulated variations: ${e.message}`}}}getSimulatedVariations(t){M.debug`CALL: VisitorCodeManager.getSimulatedVariations(visitorCode: ${t})`;const i=this.getDataCallback(e.KameleoonStorageKey.KameleoonSimulationFFData);let a=null;if("string"==typeof i&&i.length>0)try{const e=JSON.parse(decodeURIComponent(i));e&&"object"==typeof e&&(a=Object.entries(e).map(([e,t])=>this.variationConfiguration.simulatedVariationFromJson(e,t)).filter(e=>null!==e))}catch(e){e instanceof Error&&M.error`Failed to parse simulated variations: ${e.message}`}return M.debug`RETURN: VisitorCodeManager.getSimulatedVariations(visitorCode: ${t}) -> (variations: ${a})`,a}generateVisitorCode(){const e=[];for(let t=0;t<16;t++)e.push("abcdefghijklmnopqrstuvwxyz0123456789"[Math.floor(36*Math.random())]);return e.join("")}setVariationConfiguration(e){this.variationConfiguration||(this.variationConfiguration=e)}};var Pt,Gt,Bt={exports:{}},zt={exports:{}},jt=a(Object.freeze({__proto__:null,default:{}}));var qt=(Gt||(Gt=1,function(e){var i;e.exports=(Pt||(Pt=1,function(e){var i;e.exports=(i=i||function(e){var i;if("undefined"!=typeof window&&window.crypto&&(i=window.crypto),"undefined"!=typeof self&&self.crypto&&(i=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(i=globalThis.crypto),!i&&"undefined"!=typeof window&&window.msCrypto&&(i=window.msCrypto),!i&&void 0!==t&&t.crypto&&(i=t.crypto),!i)try{i=jt}catch(e){}var a=function(){if(i){if("function"==typeof i.getRandomValues)try{return i.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof i.randomBytes)try{return i.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},n=Object.create||function(){function e(){}return function(t){var i;return e.prototype=t,i=new e,e.prototype=null,i}}(),o={},r=o.lib={},s=r.Base={extend:function(e){var t=n(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},u=r.WordArray=s.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||d).stringify(this)},concat:function(e){var t=this.words,i=e.words,a=this.sigBytes,n=e.sigBytes;if(this.clamp(),a%4)for(var o=0;o<n;o++){var r=i[o>>>2]>>>24-o%4*8&255;t[a+o>>>2]|=r<<24-(a+o)%4*8}else for(var s=0;s<n;s+=4)t[a+s>>>2]=i[s>>>2];return this.sigBytes+=n,this},clamp:function(){var t=this.words,i=this.sigBytes;t[i>>>2]&=4294967295<<32-i%4*8,t.length=e.ceil(i/4)},clone:function(){var e=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],i=0;i<e;i+=4)t.push(a());return new u.init(t,e)}}),l=o.enc={},d=l.Hex={stringify:function(e){for(var t=e.words,i=e.sigBytes,a=[],n=0;n<i;n++){var o=t[n>>>2]>>>24-n%4*8&255;a.push((o>>>4).toString(16)),a.push((15&o).toString(16))}return a.join("")},parse:function(e){for(var t=e.length,i=[],a=0;a<t;a+=2)i[a>>>3]|=parseInt(e.substr(a,2),16)<<24-a%8*4;return new u.init(i,t/2)}},c=l.Latin1={stringify:function(e){for(var t=e.words,i=e.sigBytes,a=[],n=0;n<i;n++){var o=t[n>>>2]>>>24-n%4*8&255;a.push(String.fromCharCode(o))}return a.join("")},parse:function(e){for(var t=e.length,i=[],a=0;a<t;a++)i[a>>>2]|=(255&e.charCodeAt(a))<<24-a%4*8;return new u.init(i,t)}},g=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},h=r.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new u.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=g.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var i,a=this._data,n=a.words,o=a.sigBytes,r=this.blockSize,s=o/(4*r),l=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*r,d=e.min(4*l,o);if(l){for(var c=0;c<l;c+=r)this._doProcessBlock(n,c);i=n.splice(0,l),a.sigBytes-=d}return new u.init(i,d)},clone:function(){var e=s.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});r.Hasher=h.extend({cfg:s.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){h.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,i){return new e.init(i).finalize(t)}},_createHmacHelper:function(e){return function(t,i){return new p.HMAC.init(e,i).finalize(t)}}});var p=o.algo={};return o}(Math),i)}(zt)),i=zt.exports,function(e){var t=i,a=t.lib,n=a.WordArray,o=a.Hasher,r=t.algo,s=[],u=[];!function(){function t(t){for(var i=e.sqrt(t),a=2;a<=i;a++)if(!(t%a))return!1;return!0}function i(e){return 4294967296*(e-(0|e))|0}for(var a=2,n=0;n<64;)t(a)&&(n<8&&(s[n]=i(e.pow(a,.5))),u[n]=i(e.pow(a,1/3)),n++),a++}();var l=[],d=r.SHA256=o.extend({_doReset:function(){this._hash=new n.init(s.slice(0))},_doProcessBlock:function(e,t){for(var i=this._hash.words,a=i[0],n=i[1],o=i[2],r=i[3],s=i[4],d=i[5],c=i[6],g=i[7],h=0;h<64;h++){if(h<16)l[h]=0|e[t+h];else{var p=l[h-15],v=(p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3,m=l[h-2],f=(m<<15|m>>>17)^(m<<13|m>>>19)^m>>>10;l[h]=v+l[h-7]+f+l[h-16]}var C=a&n^a&o^n&o,y=(a<<30|a>>>2)^(a<<19|a>>>13)^(a<<10|a>>>22),D=g+((s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25))+(s&d^~s&c)+u[h]+l[h];g=c,c=d,d=s,s=r+D|0,r=o,o=n,n=a,a=D+(y+C)|0}i[0]=i[0]+a|0,i[1]=i[1]+n|0,i[2]=i[2]+o|0,i[3]=i[3]+r|0,i[4]=i[4]+s|0,i[5]=i[5]+d|0,i[6]=i[6]+c|0,i[7]=i[7]+g|0},_doFinalize:function(){var t=this._data,i=t.words,a=8*this._nDataBytes,n=8*t.sigBytes;return i[n>>>5]|=128<<24-n%32,i[14+(n+64>>>9<<4)]=e.floor(a/4294967296),i[15+(n+64>>>9<<4)]=a,t.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(d),t.HmacSHA256=o._createHmacHelper(d)}(Math),i.SHA256)}(Bt)),Bt.exports),Ht=i(qt);class Wt{static getHashDoubleForMEGroup(e,t){return this.calculateHash(e+t)}static getHashDouble({visitorIdentifier:e,id:t,respoolTime:i}){let a="";return i&&(a+=String(i)),this.calculateHash(e+t+a)}static calculateHash(e){const t=Ht(e).toString();return parseInt(t,16)/Math.pow(2,256)}}class Yt{constructor(e,t,i,a,n){this.storage=e,this.storageForcedExperimentVariations=t,this.storageForcedFeatureVariations=i,this.visitorCodeManager=a,this.clientConfiguration=n,a.setVariationConfiguration(this)}updateDataStatus({visitorCode:e,experimentIdList:t,status:i}){const a=this.storage.read();if(!a.ok)return a;let n=a.data;n[e]||(n[e]={});for(const a of t)n[e][a]=Object.assign(Object.assign({},n[e][a]),{status:i});return this.storage.write(n)}getUnsentData(t){return this.getVariationData(t,t=>t===e.TrackingStatus.Unsent)}getVisitorsWithUnsentData(){M.debug`CALL: VariationConfiguration.unsentDataVisitors()`;const t=this.storage.read();if(!t.ok)return M.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (result: ${t})`,[];const i=[];for(const[a,n]of Object.entries(t.data))Object.values(n).some(t=>t.status===e.TrackingStatus.Unsent)&&i.push(a);return M.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (visitors: ${i})`,i}getPendingData(t){return this.getVariationData(t,t=>t===e.TrackingStatus.Pending)}getStoredVariations(t){const i=this.storage.read();if(!i.ok)return i;const a=i.data[t];return a?l.Ok(a):l.Err(new h(e.KameleoonException.StorageRead,t))}getVariation({visitorCode:t,visitorIdentifier:i,featureFlag:a,targetingData:n,packageInfo:o,clientConfiguration:r,dataManager:s,legalConsent:u,track:d=!0,withAssignment:c=!1}){M.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c})`;const{rules:g,featureKey:p,id:v,defaultVariationKey:m}=a,f=r.isConsentRequired?u:Nt.Given;for(const u of g){const{segment:g,experimentId:C,id:y,exposition:D,respoolTime:E,variationByExposition:T}=u,I=Date.now(),k=this.getForcedExperimentVariation(t,u.experimentId);let S=null;if(k.ok&&(S=k.data,null==S?void 0:S.forceTargeting)){M.info`Visitor ${t} has been forced targeted for ${u}`;const e=this.createAndSaveForcedTargetedVariation(t,a,u,S,d,c,I);return M.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${e})`,l.Ok(e)}const V=Ke.checkTargeting({segment:g,visitorCode:t,experimentId:C,targetingData:n,packageInfo:o,clientConfiguration:r,dataManager:s,variationConfiguration:this});if(!V.ok)return M.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${V})`,V;if(!V.data)continue;if(M.info`Visitor ${t} has been targeted for ${u}`,S){const e=this.createAndSaveForcedTargetedVariation(t,a,u,S,d,c,I);return M.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${e})`,l.Ok(e)}const R=Wt.getHashDouble({visitorIdentifier:i,respoolTime:E,id:String(y)});if(M.debug`Calculated ruleHash: ${R} for code: ${i}`,R<=D){if(f==Nt.NotGiven&&u.type==z.EXPERIMENTATION){if(r.consentBlockingBehaviour==Y.PartiallyBlocked)break;return l.Err(new h(e.KameleoonException.FeatureFlagEnvironmentDisabled,`Evaluation of ${u} is blocked because consent is not provided for visitor '${t}'`))}let s=this.evaluateCBScores(u,i,n);if(!s){const e=Wt.getHashDouble({visitorIdentifier:i,respoolTime:E,id:String(C)});M.debug`Calculated variationHash: ${e} for code: ${i}`,s=Ke.getVariationByHash(T,e)}if(s){c&&this.updateStoredVariations(t,{[C]:{variationId:s.variationId,isTargetedRule:u.type===z.TARGETED_DELIVERY,status:d?e.TrackingStatus.Unsent:e.TrackingStatus.Sent,assignedTime:I}});const r={variationId:s.variationId,variationKey:s.variationKey,rule:u,featureFlagId:v,featureKey:p,experimentId:C,isTargetedRule:u.type===z.TARGETED_DELIVERY};return M.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${r})`,l.Ok(r)}}if(u.type===z.TARGETED_DELIVERY){const e={featureKey:p,featureFlagId:v,experimentId:null,variationKey:m,variationId:null,rule:null,isTargetedRule:!0};return M.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${e})`,l.Ok(e)}}const C={featureKey:p,featureFlagId:v,experimentId:null,variationKey:m,variationId:null,rule:null,isTargetedRule:!1};return M.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${C})`,l.Ok(C)}createAndSaveForcedTargetedVariation(t,i,a,n,o,r,s){const u={variationKey:n.varByExp.variationKey,variationId:n.varByExp.variationId,rule:a,featureFlagId:i.id,featureKey:i.featureKey,experimentId:a.experimentId,isTargetedRule:a.type===z.TARGETED_DELIVERY};return r&&this.updateStoredVariations(t,{[a.experimentId]:{variationId:u.variationId,isTargetedRule:a.type===z.TARGETED_DELIVERY,status:o?e.TrackingStatus.Unsent:e.TrackingStatus.Sent,assignedTime:s}}),u}updateStoredVariations(e,t){M.debug`CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${e}, variationData: ${t})`;const i=this.storage.read();if(!i.ok)return M.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${e}, variationData: ${t}) -> (result: ${i})`,i;let a=i.data;a[e]||(a[e]={});for(const i in t)a[e][i]=t[i];const n=this.storage.write(a);return M.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${e}, variationData: ${t}) -> (resultWrite: ${n})`,n}getVariationData(e,t){const i=this.getStoredVariations(e);if(!i.ok)return[];const a=[];for(const[e,n]of Object.entries(i.data))t(n.status)&&a.push({experimentId:Number(e),variationId:n.variationId,isTargetedRule:n.isTargetedRule});return a}updateForcedExperimentVariation(e,t,i){M.debug`CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return M.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i}) -> (result: ${a})`,a;let n=a.data;n[e]||(n[e]={}),i?n[e][t]=i:delete n[e][t];const o=this.storageForcedExperimentVariations.write(n);return M.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i}) -> (resultWrite: ${o})`,o}updateForcedFeatureVariations(e,t){M.debug`CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return M.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t}) -> (result: ${i})`,i;let a=i.data;a[0]||(a[0]={}),a[1]||(a[1]={});const n=a[0],o=a[1];n[e]||(n[e]={}),o[e]||(o[e]={}),t.forEach(t=>{(t.simulated?o[e]:n[e])[t.featureKey]=t});const r=this.storageForcedFeatureVariations.write(a);return M.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t}) -> (resultWrite: ${r})`,r}clearSimulatedVariations(e){var t;M.debug`CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return M.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e}) -> (result: ${i})`,i;let a;const n=i.data;return(null===(t=null==n?void 0:n[1])||void 0===t?void 0:t[e])?(delete n[1][e],a=this.storageForcedFeatureVariations.write(n)):a=l.Ok(),M.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e}) -> (resultWrite: ${a})`,a}getForcedFeatureVariation(e,t){var i,a,n,o;M.debug`CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t})`;const r=this.storageForcedFeatureVariations.read();if(!r.ok)return M.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (simulatedResult: ${r})`,r;const s=null===(a=null===(i=r.data[1])||void 0===i?void 0:i[e])||void 0===a?void 0:a[t];if(s)return M.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (simulatedData: ${s})`,l.Ok(s);const u=null===(o=null===(n=r.data[0])||void 0===n?void 0:n[e])||void 0===o?void 0:o[t];return M.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (forcedData: ${u})`,l.Ok(u)}getForcedExperimentVariation(e,t){var i;M.debug`CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return M.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}) -> (forcedResult: ${a})`,a;const n=null===(i=a.data[e])||void 0===i?void 0:i[t];return M.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}) -> (forcedExperiment: ${n})`,l.Ok(n)}parseForcedVariationData(e,t){const i=this.clientConfiguration.featureFlags.get(e.featureKey);if(!i)return M.error`Simulated feature flag '${e.featureKey}' not found`,null;let a=null;if(0===e.experimentId)return a={featureKey:e.featureKey,rule:null,varByExp:null,simulated:t},a;for(const n of i.rules){if(e.experimentId!==n.experimentId)continue;const i=n.variationByExposition.find(t=>t.variationId===e.variationId);if(i)return a={featureKey:e.featureKey,rule:{type:n.type,experimentId:n.experimentId},varByExp:{variationKey:i.variationKey,variationId:i.variationId},simulated:t},a}return M.error`Simulated variation ${e.variationId} not found`,null}simulatedVariationFromJson(e,t){if(M.debug`CALL: VariationConfiguration.simulatedVariationFromJson(featureKey: ${e}, data: ${t})`,!this.isSimulatedVariationJson(t))return null;const i=this.parseForcedVariationData({featureKey:e,variationId:t.varId,experimentId:t.expId},!0);return M.debug`RETURN: VariationConfiguration.simulatedVariationFromJson(featureKey: ${e}, data: ${t}) -> (forcedVariation: ${i})`,i}isSimulatedVariationJson(e){return e&&("number"==typeof e.expId||null===e.expId)}evaluateCBScores(e,t,i){if(!(null==i?void 0:i.cbScores))return null;M.debug`CALL: KameleoonClientImpl.evaluateCBScores(rule: ${e}, targetingData: ${i}, visitorIdentifier: ${t})`;const a=e.experimentId,n=new Be(i.cbScores.cbs).getValues().get(a);let o=null;if(void 0!==n){const i=e.variationByExposition,r=n.map(e=>i.filter(t=>e.ids.includes(t.variationId))).find(e=>e.length>0);if(r){let i=0;if(r.length>1){const n=Wt.getHashDouble({visitorIdentifier:t,respoolTime:e.respoolTime,id:String(a)});M.debug`Calculated cbs hash ${n} for code ${t}`,i=Math.min(Math.floor(n*r.length),r.length-1)}o=r[i]}}return M.debug`RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${e}, targetingData: ${i}, visitorIdentifier: ${t}) -> (variation: ${o})`,o}}let Xt=class{constructor({siteCode:e,externalEventSource:t,urlProvider:i}){this.url=i.getEventSourceUrl(),this.siteCode=e,this.eventSource=t,this.isConnectionOpen=!1}get isOpen(){return this.isConnectionOpen}open(e){this.eventSource.open({onEvent:this.handleMessage(e),url:this.url,eventType:"configuration-update-event"}),this.isConnectionOpen=!0,M.info`Established a new SSE connection with: ${this.url}`}close(){this.eventSource.close(),this.isConnectionOpen=!1,M.info`SSE connection: '${this.url}' was successfully closed`}onError(e){this.eventSource.onError?this.eventSource.onError(e):M.warning("EventSource does not have `onError` method provided. Real-time errors won't be handled.")}handleMessage(e){return t=>{M.debug`Received new message from: ${this.url}`;const i=JSON.parse(t.data),{siteCode:a,ts:n}=i;this.siteCode===a&&e(n)}}};var Jt;!function(e){e[e.Kb=1e3]="Kb",e[e.Mb=1e6]="Mb",e[e.Gb=1e9]="Gb"}(Jt||(Jt={}));const Qt=10*Jt.Mb;class Zt{constructor(e){this.currentSize=0,this.resultBody=[],this.hasUserAgent=!1,this.trackingVisitors={},this.prng=e}getTrackingBody(){const e={body:this.resultBody.join("\n"),hasUserAgent:this.hasUserAgent};return this.cleanup(),e}addData({visitorCode:e,variationData:t,visitorData:i,userAgent:a,isConsentProvided:n,isMappingIdentifier:o}){const r=[],s=this.getVariationDataLines(t),u=this.getVisitorDataLines(i);return r.push(...s,...u),this.addVisitorTrackingLines({visitorCode:e,lines:r,userAgent:a,isConsentProvided:n,isMappingIdentifier:o})}getVisitorDataLines(t){const i=[];for(const a of t){let t;if(!(a instanceof Qe||a.data.type!==e.KameleoonData.Conversion&&a.data.type!==e.KameleoonData.PageView)){const e=a.data.nonce;e?t=e:(t=Ke.getNonce(this.prng),a.data.nonce=t)}t||(t=Ke.getNonce(this.prng)),i.push(a.url+S+t)}return i}getVariationDataLines(e){const t=[];return e.forEach(e=>{t.push("eventType=experiment"+V+e.experimentId+"&variationId="+e.variationId+S+Ke.getNonce(this.prng))}),t}prepareVisitorBody(e){const t=this.trackingVisitors[e];if(!t)return l.Err();const{lines:i,userAgent:a,isMappingIdentifier:n,isConsentProvided:o}=t,r=this.getIdentifier(e,n);if(i.length)i.forEach((e,t)=>{i[t]=e+r}),M.debug`Sending tracking request for unsent data ${i} of visitor ${e} with given (or not required) consent ${o}`;else if(o){const t=this.getActivityLine();i.push(t+r),M.debug`Sending tracking request for activity of visitor ${e} with given consent`}else M.debug`No data to send for visitor ${e} with no consent`;a&&i.length&&(i[0]+="&userAgent="+a,this.hasUserAgent=!0);const s=this.checkSize(i);return s.ok&&this.resultBody.push(...i),s}cleanup(){this.currentSize=0,this.resultBody=[],this.hasUserAgent=!1,this.trackingVisitors={}}checkSize(e){let t=0;return t+=e.reduce((e,t)=>e+4*t.length,0),t+this.currentSize>Qt?l.Err():(this.currentSize+=t,l.Ok())}addVisitorTrackingLines({visitorCode:e,lines:t,userAgent:i,isConsentProvided:a,isMappingIdentifier:n}){return this.trackingVisitors[e]?(i&&(this.trackingVisitors[e].userAgent=i),this.trackingVisitors[e].lines.push(...t)):this.trackingVisitors[e]={isMappingIdentifier:n,isConsentProvided:a,userAgent:i,lines:t},this.prepareVisitorBody(e)}getActivityLine(){return"eventType=activity"+S+Ke.getNonce(this.prng)}getIdentifier(e,t){return(t?K:I)+encodeURIComponent(e)}}class ei{constructor({dataManager:e,trackingStorage:t,variationConfiguration:i,trackingInterval:a,requester:n,prng:o,clientConfiguration:r}){this.intervalId=null,M.debug`CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng, clientConfiguration)`,this.dataManager=e,this.trackingStorage=t,this.variationConfiguration=i,this.requester=n,this.bodyProvider=new Zt(o),this.clientConfiguration=r;try{this.intervalId=setInterval(()=>{this.sendDataAll()},a)}catch(e){throw this.intervalId&&clearInterval(this.intervalId),e}M.debug`RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng, clientConfiguration)`}scheduleVisitor(e,t){M.debug`CALL: Tracker.scheduleVisitor(visitorCode: ${e}, isConsentProvided: ${t})`,this.trackingStorage.read().and(i=>{i.scheduledVisitors[`_${e}`]={isConsentProvided:t},this.trackingStorage.write(i)}),M.debug`RETURN: Tracker.scheduleVisitor(visitorCode: ${e}, isConsentProvided: ${t})`}checkIsIdentifier(e){var t,i;const a=this.dataManager.isUniqueIdentifier(e),n=null!==(i=null===(t=this.dataManager.getMappingIdentifier(e))||void 0===t?void 0:t.mappingIdentifier)&&void 0!==i?i:e;let o=!1;if(a){const t=this.dataManager.getLinkedVisitor(e),i=this.dataManager.identifierCustomDataIndex;t||"number"!=typeof i?o=!0:this.dataManager.storeData({visitorCode:e,data:[new $e(i,e)]})}return o&&e!=n}getUserAgent(t){const i=this.dataManager.getVisitorData(t);if(i){const t=i[e.KameleoonData.UserAgent];if(t)return t.value}}sendDataAll(){return d(this,0,void 0,function*(){const e=this.trackingStorage.read();if(!e.ok)return;const{scheduledVisitors:t}=e.data;yield this.sendData(t)})}sendDataForVisitor(e,t){return d(this,0,void 0,function*(){this.trackingStorage.read().ok&&(yield this.sendData({[`_${e}`]:{isConsentProvided:t}}))})}sendData(t){return d(this,0,void 0,function*(){const i={},a=[],n=[];for(const[e,{isConsentProvided:o}]of Object.entries(t)){let t=e.startsWith("_")?e.substring(1):e;const r=this.checkIsIdentifier(t),s=this.getUserAgent(t),u=this.getUnsentVisitorData(t,o),l=this.getUnsentVariationData(t,o);if(!this.bodyProvider.addData({visitorCode:t,variationData:l,visitorData:u,userAgent:s,isConsentProvided:o,isMappingIdentifier:r}).ok){M.warning("Visitor data to be tracked exceeded the request size limit. Some visitor data is kept to be sent later. If it is not caused by the peak load, decreasing the tracking interval is recommended.");break}i[t]={visitorData:u,variationData:l},n.push({visitorCode:t,isConsentProvided:o}),a.push(e)}const{body:o,hasUserAgent:r}=this.bodyProvider.getTrackingBody();if(0!==a.length&&this.trackingStorage.read().and(e=>{a.forEach(t=>{delete e.scheduledVisitors[t]}),this.trackingStorage.write(e)}),o)if((yield this.requester.track(o,r)).ok)M.info`Successful request for tracking visitors: ${n}, data: ${i}`,this.updateDataStatus(i,e.TrackingStatus.Sent);else{M.error("Tracking request failed"),M.info`Failed request for tracking visitors: ${n}, data: ${i}`,this.updateDataStatus(i,e.TrackingStatus.Unsent);let t={};for(let{visitorCode:e,isConsentProvided:i}of n)e=`_${e}`,t[e]={isConsentProvided:i};this.addNotTrackedVisitors(t)}})}addNotTrackedVisitors(e){const t=this.trackingStorage.read();if(!t.ok)return;const{scheduledVisitors:i}=t.data;Object.entries(e).forEach(([e,{isConsentProvided:t}])=>{i[e]||(i[e]={isConsentProvided:t})}),this.trackingStorage.write({scheduledVisitors:i})}updateDataStatus(t,i){let a={};for(const[e,{visitorData:n,variationData:o}]of Object.entries(t)){const t=n.filter(e=>!(e instanceof Qe)).map(e=>{const t=e;return t.status=i,t});t.length&&(a[e]=t);const r=o.map(e=>String(e.experimentId));this.variationConfiguration.updateDataStatus({visitorCode:e,experimentIdList:r,status:i})}0!==Object.keys(a).length&&(i===e.TrackingStatus.Sent?this.dataManager.storeTrackedData(a):this.dataManager.storeDataForVisitors(a,!1))}getUnsentVisitorData(t,i){const a=this.dataManager.getUnsentData(t),n=[];if(!a.length)return[];for(const t of a)t.url&&(i||this.clientConfiguration.hasAnyTargetedDeliveryRule&&!(t instanceof Qe)&&t.data.type===e.KameleoonData.Conversion)&&n.push(t);if(n.length){const i=n.filter(e=>!(e instanceof Qe)).map(t=>{const i=t;return i.status=e.TrackingStatus.Pending,i});this.dataManager.storeTrackedData({[t]:i})}return n}getUnsentVariationData(t,i){const a=this.variationConfiguration.getUnsentData(t),n=new Set;if(!a.length)return[];const o=a.filter(e=>{const t=e.isTargetedRule||i;return t&&n.add(String(e.experimentId)),t});return this.variationConfiguration.updateDataStatus({visitorCode:t,experimentIdList:Array.from(n),status:e.TrackingStatus.Pending}),o}}let ti=class t{constructor({siteCode:t,dependencies:i,configuration:a,internalConfiguration:n,stubMode:o}){var r;if(this.initialized=!1,this.stubMode=o,o)return this.variationConfiguration={},this.clientConfiguration={},this.dataManager={},this.consentDataStorage={},this.trackingCache={},this.requester={},this.externalPackageInfo={},this.visitorCodeManager={},this.eventManager={},this.tracker={},void(this.environment="");const s=null==n?void 0:n.externals.externalLogger;s&&M.setLogger(s),Ze.setConditionFactoryInstance(new bt),M.debug`CALL: new KameleoonClient(siteCode: ${t}, dependencies: ${i}, configuration: ${a})`;const{settings:u}=new We(t,a);this.environment=u.environment;const{externalStorage:l,externalEventSource:d,externalPackageInfo:c,externalVisitorCodeManager:g,externalRequester:h,externalPRNG:p,customDataManager:v}=n.externals,{useAbortController:m}=n.settings,f=new Q(10),C=new $t(l,e.KameleoonStorageKey.ClientData),y=new $t(l,e.KameleoonStorageKey.VariationData),D=new $t(l,e.KameleoonStorageKey.ForcedExperimentVariation),E=new $t(l,e.KameleoonStorageKey.ForcedFeatureVariation),T=new $t(l,e.KameleoonStorageKey.ConsentData),I=new $t(l,e.KameleoonStorageKey.TrackingData);let k=v;if(!k){const t=new $t(l,e.KameleoonStorageKey.TargetingData),i=new $t(l,e.KameleoonStorageKey.DataInfo);k=new Lt({dataStorage:t,infoStorage:i,cleanupInterval:u.cleanupInterval,packageInfo:c})}const S=null!==(r=null==i?void 0:i.urlProvider)&&void 0!==r?r:new J;S.initialize({domain:u.networkDomain,siteCode:u.siteCode,packageInfo:c,environment:u.environment});const V=new L({urlProvider:S,useAbortController:m,packageInfo:c,externalRequester:h,requestTimeout:u.requestTimeout,trackRetryDelay:u.trackRetryDelay}),R=new Xt({siteCode:u.siteCode,externalEventSource:d,urlProvider:S}),w=new Z,b=new qe({urlProvider:S,storage:C,updateInterval:u.updateInterval,dataManager:k,eventManager:w,requester:V,eventSource:R,externalVisitorCodeManager:g,externalPackageInfo:c,defaultDataFile:null==a?void 0:a.defaultDataFile}),A=new Yt(y,D,E,g,b),K=new ei({dataManager:k,trackingStorage:I,variationConfiguration:A,requester:V,trackingInterval:u.trackingInterval,prng:p,clientConfiguration:b});this.tracker=K,this.variationConfiguration=A,this.requester=V,this.trackingCache=f,this.dataManager=k,this.clientConfiguration=b,this.externalPackageInfo=c,this.consentDataStorage=T,this.visitorCodeManager=g,this.eventManager=w,null!==u.cleanupInterval&&new Ft(l,u.cleanupInterval),M.debug`RETURN: new KameleoonClient(siteCode: ${t}, dependencies: ${i}, configuration: ${a})`}initialize(){return d(this,0,void 0,function*(){if(this.stubMode)return!1;M.info("CALL: KameleoonClient.initialize()");const e=yield this.clientConfiguration.initialize();return e.throw(),this.initialized=!0,M.info`RETURN: KameleoonClient.initialize() -> (result: ${e.ok})`,e.ok})}addData(t,...i){if(this.stubMode)throw new h(e.KameleoonException.Initialization);const a="string"==typeof t?{visitorCode:t,data:i}:t,{visitorCode:n,data:o,track:r=!0}=a;if(M.info`CALL: KameleoonClient.addData(visitorCode: ${n}, track: ${r}, data: ${o})`,this.visitorCodeManager.validateVisitorCode(n).throw(),!this.initialized)throw new h(e.KameleoonException.Initialization);this.dataManager.storeData({visitorCode:n,track:r,data:o}).throw(),M.info`RETURN: KameleoonClient.addData(visitorCode: ${n}, track: ${r}, data: ${o})`}getRemoteVisitorData({visitorCode:t,shouldAddData:i=!0,filters:a=pe}){return d(this,0,void 0,function*(){if(this.stubMode)throw new h(e.KameleoonException.Initialization);if(M.info`CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${t}, shouldAddData: ${i}, filters: ${a})`,!this.initialized)throw new h(e.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const{previousVisitAmount:n}=a;if("number"==typeof n&&(n<1||n>25))throw new h(e.KameleoonException.VisitAmount);const o=this.dataManager.isUniqueIdentifier(t),r=(yield this.requester.getVisitorData({visitorCode:t,filters:a,isMappingIdentifier:o})).throw(),{visitorData:s,storageVisitorData:u,visitsData:l,mappingIdentifier:d}=je.parseVisitorData({data:r,filters:a,visitorCode:t,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});for(const e of u)(i||this.dataManager.isPersistentCustomData(e))&&this.addData(t,e);return l&&i&&this.addData(t,l),(null==a?void 0:a.visitorCode)&&d&&this.dataManager.setMappingIdentifier(t,d),M.info`RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${t}, shouldAddData: ${i}, filters: ${a}) -> (visitorData: ${s})`,s})}trackConversion({visitorCode:e,goalId:t,negative:i,revenue:a,metadata:n}){this.stubMode||(M.info`CALL: KameleoonClient.trackConversion(visitorCode: ${e}, goalId: ${t}, negative: ${i}, revenue: ${a}, metadata: ${n})`,this.addData(e,new Fe({goalId:t,revenue:a,negative:i,metadata:n})),this.flush(e),M.info`RETURN: KameleoonClient.trackConversion(visitorCode: ${e}, goalId: ${t}, negative: ${i}, revenue: ${a}, metadata: ${n})`)}_flushInternal(e,t=!1){return d(this,0,void 0,function*(){if("string"==typeof e)t?yield this.tracker.sendDataForVisitor(e,this._isConsentProvided(e)):this.tracker.scheduleVisitor(e,this._isConsentProvided(e));else{for(const e of this.dataManager.unsentDataVisitors)this.tracker.scheduleVisitor(e,this._isConsentProvided(e));for(const e of this.variationConfiguration.getVisitorsWithUnsentData())this.tracker.scheduleVisitor(e,this._isConsentProvided(e));t&&(yield this.tracker.sendDataAll())}})}flushInstant(t){return d(this,0,void 0,function*(){if(this.stubMode)throw new h(e.KameleoonException.Initialization);const{visitorCode:i}=this._parseFlushParams(t);if(M.info`CALL: KameleoonClient.flushInstant(visitorCode: ${t})`,!this.initialized)throw new h(e.KameleoonException.Initialization);yield this._flushInternal(i,!0),M.info`RETURN: KameleoonClient.flushInstant(visitorCode: ${t})`})}flush(t){if(this.stubMode)throw new h(e.KameleoonException.Initialization);const{visitorCode:i,isInstant:a}=this._parseFlushParams(t);if(M.info`CALL: KameleoonClient.flush(visitorCode: ${i}, instant: ${a})`,!this.initialized)throw new h(e.KameleoonException.Initialization);this._flushInternal(i,a),M.info`RETURN: KameleoonClient.flush(visitorCode: ${i}, instant: ${a})`}_parseFlushParams(e){var t;let i,a=!1;return"string"==typeof e?i=e:e&&(i=e.visitorCode,a=null!==(t=e.instant)&&void 0!==t&&t),void 0!==i&&this.visitorCodeManager.validateVisitorCode(i).throw(),{visitorCode:i,isInstant:a}}getFeatureFlags(){if(this.stubMode)throw new h(e.KameleoonException.Initialization);if(M.info("CALL: KameleoonClient.getFeatureFlags()"),!this.initialized)throw new h(e.KameleoonException.Initialization);const t=this.clientConfiguration.featureFlags,i=[];return t.forEach(({id:e,featureKey:t})=>{i.push({id:e,key:t})}),M.info`RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${i})`,i}getVisitorFeatureFlags(t){if(this.stubMode)throw new h(e.KameleoonException.Initialization);if(M.info`CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${t})`,!this.initialized)throw new h(e.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const i=this._getActiveFeatureVariations(t),a=[];return i.forEach(({featureFlagId:e,featureKey:t})=>{a.push({id:e,key:t})}),M.info`RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${t}) -> (FeatureFlags: ${a})`,a}getVariation({visitorCode:t,featureKey:i,track:a=!0}){if(this.stubMode)throw new h(e.KameleoonException.Initialization);M.info`CALL: KameleoonClient.getVariation(visitorCode: ${t}, featureKey: ${i}, track: ${a})`,this.visitorCodeManager.validateVisitorCode(t).throw();const n=this._getFeatureVariation({visitorCode:t,featureKey:i,track:a}).throw();return M.info`RETURN: KameleoonClient.getVariation(visitorCode: ${t}, featureKey: ${i}, track: ${a}) -> (variation: ${n})`,n}getVariations({visitorCode:t,onlyActive:i=!1,track:a=!0}){if(this.stubMode)throw new h(e.KameleoonException.Initialization);M.info`CALL: KameleoonClient.getVariations(visitorCode: ${t}, onlyActive: ${i}, track: ${a})`,this.visitorCodeManager.validateVisitorCode(t).throw();const n=new Map,o=this.clientConfiguration.featureFlags;for(const r of o.values())try{const e=this._getFeatureVariation({visitorCode:t,featureKey:r.featureKey,track:a});!e.ok||i&&e.data.key===ce||n.set(r.featureKey,e.data)}catch(t){if(t instanceof h&&t.type!==e.KameleoonException.FeatureFlagEnvironmentDisabled)throw t}return M.info`RETURN: KameleoonClient.getVariations(visitorCode: ${t}, onlyActive: ${i}, track: ${a}) -> (variations: ${n})`,n}getActiveFeatureFlags(t){if(this.stubMode)throw new h(e.KameleoonException.Initialization);if(M.info`CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${t})`,!this.initialized)throw new h(e.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const i=this._getActiveFeatureVariations(t),a=new Map;return i.forEach(e=>{const{variationKey:i,featureKey:n,variationId:o,experimentId:r}=e;let s=[];null!==o&&null!==r&&(s=this._getFeatureVariables({visitorCode:t,featureKey:n,variationKey:i}));const u=s.map(e=>je.parseFeatureVariable(e).throw());a.set(e.featureKey,{name:"",key:i,id:o,experimentId:r,variables:u})}),M.info`RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${t}) -> (FeatureFlags: ${a})`,a}getFeatureFlagVariationKey(t,i){if(this.stubMode)throw new h(e.KameleoonException.Initialization);M.info`CALL: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${t}, featureKey: ${i})`,this.visitorCodeManager.validateVisitorCode(t).throw();const{key:a}=this._getFeatureVariation({visitorCode:t,featureKey:i,track:!0}).throw();return M.info`RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${t}, featureKey: ${i}) -> (variationKey: ${a})`,a}getFeatureFlagVariable({visitorCode:t,featureKey:i,variableKey:a}){if(this.stubMode)throw new h(e.KameleoonException.Initialization);M.info`CALL: KameleoonClient.getFeatureFlagVariable(visitorCode: ${t}, featureKey: ${i}, variableKey: ${a})`,this.visitorCodeManager.validateVisitorCode(t).throw();const{key:n}=this._getFeatureVariation({visitorCode:t,featureKey:i,track:!0}).throw(),o=this._getFeatureVariables({visitorCode:t,featureKey:i,variationKey:n}).find(e=>e.key===a);if(!o)throw new h(e.KameleoonException.FeatureFlagVariableNotFound,a,t);const{type:r,value:s}=je.parseFeatureVariable(o).throw(),u={type:r,value:s};return M.info`RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${t}, featureKey: ${i}, variableKey: ${a}) -> (FeatureFlagVariable: ${u})`,u}getFeatureFlagVariables(t,i){if(this.stubMode)throw new h(e.KameleoonException.Initialization);M.info`CALL: KameleoonClient.getFeatureFlagVariables(visitorCode: ${t}, featureKey: ${i})`,this.visitorCodeManager.validateVisitorCode(t).throw();const{key:a}=this._getFeatureVariation({visitorCode:t,featureKey:i,track:!0}).throw(),n=this._getFeatureVariables({visitorCode:t,featureKey:i,variationKey:a}),o=[];for(const e of n){const t=je.parseFeatureVariable(e).throw();o.push(t)}return M.info`RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${t}, featureKey: ${i}) -> (FeatureFlagVariables: ${o})`,o}isFeatureFlagActive(t,i){if(this.stubMode)throw new h(e.KameleoonException.Initialization);let[a,n,o]=["","",!0];"string"==typeof t?(a=t,n=i):([a,n]=[t.visitorCode,t.featureKey],void 0!==t.track&&(o=t.track)),M.info`CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${a}, featureKey: ${n}, track ${o})`,this.visitorCodeManager.validateVisitorCode(a).throw();try{const{key:e}=this._getFeatureVariation({visitorCode:a,featureKey:n,track:o}).throw(),t=e!==ce;return M.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${a}, featureKey: ${n}, track: ${o}) -> (isActive: ${t})`,t}catch(t){if(t instanceof h&&t.type===e.KameleoonException.FeatureFlagEnvironmentDisabled)return M.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${a}, featureKey: ${n}, track: ${o}) -> (isActive: false)`,!1;throw t}}getRemoteData(e){return d(this,0,void 0,function*(){if(this.stubMode)return null;M.info`CALL: KameleoonClient.getRemoteData(key: ${e})`;const t=yield this.requester.getRemoteData(e);return M.info`RETURN: KameleoonClient.getRemoteData(key: ${e}) -> (remoteData: ${t})`,t.throw()})}getVisitorWarehouseAudience({visitorCode:t,customDataIndex:i,warehouseKey:a}){return d(this,0,void 0,function*(){if(this.stubMode)return null;M.info`CALL: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${t}, customDataIndex: ${i}, warehouseKey: ${a})`,this.visitorCodeManager.validateVisitorCode(t).throw();const n=yield this.getRemoteData(a||t);if(!n)throw new h(e.KameleoonException.RemoteData,`No data found for ${a||t} key`);if(!n[ge]||0===Object.keys(n[ge]).length)return M.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${t}, customDataIndex: ${i}, warehouseKey: ${a}) -> (customData: null)`,null;const o=new $e(i,...Object.keys(n[ge]));return this.dataManager.storeData({visitorCode:t,track:!0,data:[o]}),M.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${t}, customDataIndex: ${i}, warehouseKey: ${a}) -> (customData: ${o})`,o})}onEvent(t,i){if(this.stubMode)throw new h(e.KameleoonException.Initialization);if(M.info`CALL: KameleoonClient.onEvent(event: ${t}, callback)`,!this.initialized)throw new h(e.KameleoonException.Initialization);this.eventManager.addEventHandler(t,i),M.info`RETURN: KameleoonClient.onEvent(event: ${t}, callback)`}getEngineTrackingCode(e){if(this.stubMode)return"";M.info`CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${e})`,this.visitorCodeManager.validateVisitorCode(e).throw();const t=Ke.getTrackingCode(this.trackingCache,e);return M.info`RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${e}) -> (trackingCode: ${t})`,t}isInitialized(){return M.debug`CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`,this.initialized}setLogLevel(e){M.setLogLevel(e)}setForcedVariation({visitorCode:e,experimentId:t,variationKey:i,forceTargeting:a=!0}){this.stubMode||(M.info`CALL: KameleoonClient.setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a})`,this.visitorCodeManager.validateVisitorCode(e).throw(),this._setForcedVariation({visitorCode:e,experimentId:t,variationKey:i,forceTargeting:a}).throw(),M.info`RETURN: KameleoonClient.setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a})`)}evaluateAudiences(e){if(this.stubMode)return;M.info`CALL: KameleoonClient.evaluateAudiences(visitorCode: ${e})`,this.visitorCodeManager.validateVisitorCode(e).throw();const t=[],i=this.dataManager.getVisitorData(e);for(let a of this.clientConfiguration.segments.values()){if(!a.audienceTracking)continue;const n=Ke.checkTargeting({segment:a,visitorCode:e,targetingData:i,experimentId:null,clientConfiguration:this.clientConfiguration,packageInfo:this.externalPackageInfo,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});n.ok&&n.data&&(M.info`Visitor ${e} has been targeted for ${a}`,t.push(new Mt(Number(a.id))))}0!==t.length&&this.dataManager.storeData({visitorCode:e,data:t}),this.flush(e),M.info`RETURN: KameleoonClient.evaluateAudiences(visitorCode: ${e})`}getDataFile(){const e={featureFlags:new Map,dateModified:0};if(this.stubMode)return e;M.debug`CALL: KameleoonClient.getDataFile()`;const t=this.clientConfiguration.dataFile;return M.debug`RETURN: KameleoonClient.getDataFile() -> (dataFile: ${t})`,t}setUserConsent({visitorCode:t,consent:i,setData:a}){this.stubMode||(M.info`CALL: KameleoonClient.setUserConsent(visitorCode: ${t}, consent: ${i}, setData: ${a})`,this.visitorCodeManager.validateVisitorCode(t).throw(),this.updateConsentData(t,i),i&&a({visitorCode:t,key:e.KameleoonStorageKey.VisitorCode,maxAge:_t,path:"/"}),M.info`RETURN: KameleoonClient.setUserConsent(visitorCode: ${t}, consent: ${i}, setData: ${a})`)}updateConsentData(t,i){const a=this.consentDataStorage.read(),n=i?Nt.Given:Nt.NotGiven;if(!a.ok)return void(a.error.type===e.KameleoonException.StorageEmpty&&this.consentDataStorage.write({[t]:{consent:n}}));const o=a.data;o[t]={consent:n},this.consentDataStorage.write(o)}getLegalConsent(e){let t;M.debug`CALL: KameleoonClient.getLegalConsent(visitorCode: ${e})`;const i=this.consentDataStorage.read();return t=i.ok?this.extractLegalConsent(i.data[e]):Nt.Unknown,M.debug`RETURN: KameleoonClient.getLegalConsent(visitorCode: ${e}) -> (legalConsent: ${t})`,t}extractLegalConsent(e){if(void 0===e)return Nt.Unknown;if("boolean"==typeof e)return e?Nt.Given:Nt.NotGiven;const t=e.consent;return"boolean"==typeof t?t?Nt.Given:Nt.NotGiven:t}_isConsentProvided(e){M.debug`CALL: KameleoonClient._isConsentProvided(visitorCode: ${e})`;const{isConsentRequired:t}=this.clientConfiguration,i=!t||this.getLegalConsent(e)==Nt.Given;return M.debug`RETURN: KameleoonClient._isConsentProvided(visitorCode: ${e}) -> (isConsentProvided: ${i})`,i}_getFeatureVariables({visitorCode:t,featureKey:i,variationKey:a}){M.debug`CALL: KameleoonClient._getFeatureVariables(visitorCode: ${t}, featureKey: ${i}, variationKey: ${a})`;const n=this.clientConfiguration.featureFlags.get(i);if(!n)throw new h(e.KameleoonException.FeatureFlagConfigurationNotFound,i);const o=n.variations.find(e=>e.key===a);if(!o)throw new h(e.KameleoonException.FeatureFlagVariationNotFound,a,t);return M.debug`RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${t}, featureKey: ${i}, variationKey: ${a}) -> (variables: ${o.variables})`,o.variables}_getActiveFeatureVariations(t){M.debug`CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${t})`;const i=this.clientConfiguration.featureFlags,a=[];for(const n of i.values()){const i=this._getForcedFeatureVariation(t,n.featureKey);if(n.environmentEnabled||(null==i?void 0:i.simulated))try{const e=this._evaluate({visitorCode:t,featureFlag:n,track:!1,save:!1,forcedVariation:i});e.variationKey!==ce&&a.push({variationKey:e.variationKey,variationId:e.variationId,experimentId:e.experimentId,featureFlagId:n.id,featureKey:n.featureKey,rule:null,isTargetedRule:e.ruleType===z.TARGETED_DELIVERY})}catch(t){if(t instanceof h){t.type!=e.KameleoonException.FeatureFlagEnvironmentDisabled&&M.error`Unexpected error: ${t}`;continue}}}return M.debug`RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${t}) -> (activeVariations: ${a})`,a}_evaluate({visitorCode:i,featureFlag:a,track:n,save:o,forcedVariation:r}){let s;M.debug`CALL: KameleoonClient._evaluate(visitorCode: ${i}, featureFlag: ${a}, track: ${n}, save: ${o})`;const u=this.dataManager.getVisitorData(i);if(r)s=t.EvaluatedExperiment.fromForcedFeatureVariation(a.defaultVariationKey,r);else if(this._isVisitorNotInHoldout(i,n,o,a,u)&&this._isFFUnrestrictedByMEGroup(i,a,u)){const e=this._getCodeForHash(i,a.bucketingCustomDataIndex,u),r=this.getLegalConsent(i),l=this.variationConfiguration.getVariation({visitorCode:i,visitorIdentifier:e,featureFlag:a,track:n,withAssignment:o,targetingData:u,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo,legalConsent:r}).throw();s=t.EvaluatedExperiment.fromVariationData(l)}else s=t.EvaluatedExperiment.fromDefaultVariationKey(a.defaultVariationKey);return o&&!s.isSimulated&&null!==s.experimentId&&null!==s.variationId&&this.variationConfiguration.updateStoredVariations(i,{[s.experimentId]:{variationId:s.variationId,isTargetedRule:s.ruleType===z.TARGETED_DELIVERY,status:n?e.TrackingStatus.Unsent:e.TrackingStatus.Sent,assignedTime:Date.now()}}),this.eventManager.fireEvent(e.EventType.Evaluation,{featureKey:a.featureKey,variation:{key:s.variationKey,experimentId:s.experimentId,id:s.variationId}}),M.debug`RETURN: KameleoonClient._evaluate(visitorCode: ${i}, featureFlag: ${a}, track: ${n}, save: ${o}) -> (evalExp: ${s})`,s}_isFFUnrestrictedByMEGroup(e,t,i){const a=t.mutuallyExclusiveGroup;if(!a)return!0;M.debug`CALL: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${e}, featureFlag: ${t}, visitorData: ${i})`;let n=!0;const o=this.clientConfiguration.meGroups.get(a);if(o){const r=this._getCodeForHash(e,t.bucketingCustomDataIndex,i),s=Wt.getHashDoubleForMEGroup(r,a);M.debug`Calculated meGroup hash ${s} for code: ${r}, meGroup: ${a}`,n=o.getFeatureFlagByHash(s)===t}return M.debug`RETURN: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${e}, featureFlag: ${t}, visitorData: ${i}) -> (selected: ${n})`,n}_getFeatureVariation({visitorCode:t,featureKey:i,track:a}){var n,o;if(M.debug`CALL: KameleoonClient._getFeatureVariation(visitorCode: ${t}, featureKey: ${i}, track: ${a})`,!this.initialized)return l.Err(new h(e.KameleoonException.Initialization));const r=this.clientConfiguration.featureFlags.get(i);if(!r)return l.Err(new h(e.KameleoonException.FeatureFlagConfigurationNotFound,i));const s=this._getForcedFeatureVariation(t,i);if(!r.environmentEnabled&&!(null==s?void 0:s.simulated))return l.Err(new h(e.KameleoonException.FeatureFlagEnvironmentDisabled,r.featureKey,this.environment));const u=this._evaluate({visitorCode:t,featureFlag:r,track:a,save:!0,forcedVariation:s}),{experimentId:d,variationId:c,variationKey:g,isSimulated:p}=u;let v=new Map,m=!1;try{this._getFeatureVariables({visitorCode:t,featureKey:i,variationKey:g}).forEach(t=>{m||t.type!==e.VariableType.JS&&t.type!==e.VariableType.CSS||(m=!0);const i=je.parseFeatureVariable(t).throw();v.set(t.key,i)})}catch(e){}d&&"number"==typeof c&&!p&&Ke.updateCache({cacheManager:this.trackingCache,hasJsCssVariables:m,visitorCode:t,experimentId:d,variationId:c}),a&&!p&&this.tracker.scheduleVisitor(t,this._isConsentProvided(t));const f={name:null!==(o=null===(n=r.variations.find(e=>e.key===g))||void 0===n?void 0:n.name)&&void 0!==o?o:"",key:g,id:c,experimentId:d,variables:v};return M.debug`RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${t}, featureKey: ${i}, track: ${a}) -> (variation: ${f})`,l.Ok(f)}_isVisitorNotInHoldout(t,i,a,n,o){const r=this.clientConfiguration.holdout;if(!r)return!0;M.debug`CALL: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${t}, track: ${i}, save: ${a}, featureFlag: ${n}, visitorData: ${o})`;let s=!0;if((this.clientConfiguration.isConsentRequired?this.getLegalConsent(t):Nt.Given)==Nt.NotGiven&&this.clientConfiguration.consentBlockingBehaviour==Y.CompletelyBlocked)throw new h(e.KameleoonException.FeatureFlagEnvironmentDisabled,`Evaluation of holdout is blocked because consent is not provided for visitor '${t}'`);const u=this._getCodeForHash(t,null==n?void 0:n.bucketingCustomDataIndex,o),l=Wt.getHashDouble({visitorIdentifier:u,respoolTime:null,id:String(r.experimentId)});M.debug`Calculated holdoutHash: ${l} for visitorCode: ${u}`;let d=Ke.getVariationByHash(r.variationByExposition,l);return null!==d&&(s="in-holdout"!==d.variationKey,a&&this.variationConfiguration.updateStoredVariations(t,{[r.experimentId]:{variationId:d.variationId,isTargetedRule:!1,status:i?e.TrackingStatus.Unsent:e.TrackingStatus.Sent,assignedTime:Date.now()}})),M.debug`RETURN: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${t}, track: ${i}, save: ${a}, featureFlag: ${n}, visitorData: ${o}) -> (isNotInHoldout: ${s})`,s}_setForcedVariation({visitorCode:t,experimentId:i,variationKey:a,forceTargeting:n=!0}){if(M.debug`CALL: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${i}, variationKey: '${a}', forceTargeting: ${n})`,null===a){const e=this.variationConfiguration.updateForcedExperimentVariation(t,i,null);return M.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${i}, variationKey: '${a}', forceTargeting: ${n}) -> (writeResult: ${e})`,e}let o=null,r=null;if(o=this.clientConfiguration.experimentMap.get(i),!o)return M.error`Experiment with id ${i} not found for visitor ${t}`,l.Err(new h(e.KameleoonException.FeatureFlagExperimentNotFound,i,t));if(r=o.variations.get(a),void 0===r)return M.error`Variation with key ${a} not found in experiment ${o} for visitor ${t}`,l.Err(new h(e.KameleoonException.FeatureFlagVariationNotFound,a,t));o={type:o.type,experimentId:i},r={variationKey:a,variationId:r};const s=this.variationConfiguration.updateForcedExperimentVariation(t,i,{rule:o,varByExp:r,forceTargeting:n});return M.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${i}, variationKey: '${a}', forceTargeting: ${n}) -> (writeResult: ${s})`,s}_getForcedFeatureVariation(e,t){const i=this.variationConfiguration.getForcedFeatureVariation(e,t);return i.ok?i.data:null}_getCodeForHash(e,t,i){var a;let n;if(M.debug`CALL: KameleoonClient._getCodeForHash(visitorCode: ${e}, bucketingCustomDataIndex: ${t}, visitorData: ${i})`,null!=t){const e=null==i?void 0:i.customData;if(e){const i=null===(a=e[t])||void 0===a?void 0:a.value[0];i&&(n=i)}}return n||(n=this.dataManager.getVisitorIdentifier(e)),M.debug`RETURN: KameleoonClient._getCodeForHash(visitorCode: ${e}, bucketingCustomDataIndex: ${t}, visitorData: ${i}) -> (codeForHash: ${n})`,n}_refreshDataFileIfStale(){return d(this,0,void 0,function*(){const e=yield this.clientConfiguration.refreshDataFileIfStale();return e.ok&&e.data})}};ti.EvaluatedExperiment=class{static fromForcedFeatureVariation(e,t){var i,a,n,o;let r=e;return t.varByExp?r=t.varByExp.variationKey:(null===(i=t.rule)||void 0===i?void 0:i.type)===z.EXPERIMENTATION&&(r=ce),{variationKey:r,variationId:(null===(a=t.varByExp)||void 0===a?void 0:a.variationId)||null,experimentId:(null===(n=t.rule)||void 0===n?void 0:n.experimentId)||null,ruleType:(null===(o=t.rule)||void 0===o?void 0:o.type)||null,isSimulated:t.simulated}}static fromVariationData(e){var t,i;return{variationKey:e.variationKey,variationId:e.variationId,experimentId:e.experimentId,ruleType:null!==(i=null===(t=e.rule)||void 0===t?void 0:t.type)&&void 0!==i?i:null,isSimulated:!1}}static fromDefaultVariationKey(e){return{variationKey:e,variationId:null,experimentId:null,ruleType:null,isSimulated:!1}}};class ii{static simulateSuccessRequest(t,i){switch(t){case e.RequestType.Tracking:return new Promise(e=>{e({status:204,json:()=>new Promise(e=>e(null)),text:()=>new Promise(e=>e("")),ok:!0})});case e.RequestType.Configuration:case e.RequestType.RemoteData:return new Promise(e=>{e({status:200,json:()=>new Promise(e=>e(i)),text:()=>new Promise(e=>e("")),ok:!0})});default:g(t)}}static getCookieValue(e,t){const i=e.split("; ").find(e=>{const[i,a]=e.split("=");return i===t&&""!==a});return i?i.split("=")[1]:null}}var ai,ni=l.Err,oi=l.Ok;function ri(e,t,i,a){return new(i||(i=Promise))(function(n,o){function r(e){try{u(a.next(e))}catch(e){o(e)}}function s(e){try{u(a.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(r,s)}u((a=a.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class si{sendRequest({url:e,parameters:t}){return ri(this,void 0,void 0,function*(){return yield fetch(e,t)})}}!function(e){e.PairsDelimiter="; ",e.KeyValueDelimiter="=",e.MaxAge="Max-Age",e.Path="Path",e.Domain="Domain"}(ai||(ai={}));const ui=15*e.Milliseconds.Second,li=30*e.Milliseconds.Minute;class di{getData(e){M.debug`CALL: VisitorCodeManager.getData(key: ${e})`;const t=document.cookie;let i=null;return t&&(i=ii.getCookieValue(t,e)),M.debug`RETURN: VisitorCodeManager.getData(key: ${e}) -> (visitorCode: ${i})`,i}setData({visitorCode:e,domain:t,maxAge:i,key:a,path:n}){const o=this.getResultCookie({domain:t,visitorCode:e,key:a,maxAge:i,path:n});document.cookie=o,M.debug`Cookie ${o} was added for visitor ${e}`}getResultCookie({domain:e,visitorCode:t,maxAge:i,key:a,path:n}){const o=[a+ai.KeyValueDelimiter+t,ai.MaxAge+ai.KeyValueDelimiter+i,ai.Path+ai.KeyValueDelimiter+n];return e&&o.push(ai.Domain+ai.KeyValueDelimiter+e),o.join(ai.PairsDelimiter)}}class ci{read(t){const i=localStorage.getItem(t);return t!==e.KameleoonStorageKey.ConsentData||i&&"{}"!==i?i?JSON.parse(i):null:this.getEngineConsentData()}write(e,t){localStorage.setItem(e,JSON.stringify(t))}getEngineConsentData(){var t;this.visitorCodeManager||(this.visitorCodeManager=new di);const i=this.visitorCodeManager.getData(e.KameleoonStorageKey.VisitorCode);if(!i)return null;try{const e=localStorage.getItem("kameleoonLegalConsent");if(!e)return null;const a=JSON.parse(e),n=null===(t=null==a?void 0:a.value)||void 0===t?void 0:t.AB_TESTING;return"boolean"==typeof n?{[i]:{consent:n?Nt.Given:Nt.NotGiven}}:null}catch(e){return null}}}class gi{open({eventType:e,onEvent:t,url:i}){const a=new EventSource(i);this.eventSource=a,this.eventSource.addEventListener(e,t)}close(){this.eventSource&&this.eventSource.close()}onError(e){this.eventSource&&(this.eventSource.onerror=e)}}class hi{getRandomNumber(){if("undefined"!=typeof window&&(null===window||void 0===window?void 0:window.crypto)){const e=new Uint32Array(1),t=4294967296;return window.crypto.getRandomValues(e),e[0]/t}return Math.random()}}class pi{log(t,i){switch(i=`${(new Date).toLocaleString("en-US",{timeZoneName:"short"})} ${i}`,t){case e.LogLevel.DEBUG:console.debug(i);break;case e.LogLevel.INFO:console.info(i);break;case e.LogLevel.WARNING:console.warn(i);break;case e.LogLevel.ERROR:console.error(i)}}}class vi{constructor(e,t,i,a){M.debug`CALL: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${a})`,this.dataManager=e,this.tracker=t,this.isConsentProvided=i,this.setup(a),M.debug`RETURN: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${a})`}setup(e){setInterval(()=>{this.updateLastActivity()},e),this.updateLastActivity()}updateLastActivity(){M.debug`CALL: VisitorActivityManager.updateLastActivity()`;const e=this.dataManager.updateLastActivity();e&&this.tracker.scheduleVisitor(e,this.isConsentProvided(e)),M.debug`RETURN: VisitorActivityManager.updateLastActivity()`}}class mi extends Lt{constructor({dataStorage:e,infoStorage:t,cleanupInterval:i,packageInfo:a,platformAnalyzer:n}){M.debug`CALL: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${i}, packageInfo: ${a}, platformAnalyzer)`,super({dataStorage:e,infoStorage:t,cleanupInterval:i,packageInfo:a}),this.visitor=null,this.platformAnalyzer=n,this.updateVisitor(),M.debug`RETURN: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${i} packageInfo: ${a}, platformAnalyzer)`}getUnsentData(t){var i,a;const n=super.getUnsentData(t),o=super.getVisitorData(t);if(!o)return n;const r=o[e.KameleoonData.Browser],s=o[e.KameleoonData.Device],u=o[e.KameleoonData.OperatingSystem],l=new Qe({browserType:null==r?void 0:r.browser,browserVersion:null==r?void 0:r.version,visitNumber:null===(i=this.visitor)||void 0===i?void 0:i.visitNumber,timeSincePreviousVisit:null===(a=this.visitor)||void 0===a?void 0:a.timeSincePreviousVisit,os:null==u?void 0:u.operatingSystem,deviceType:null==s?void 0:s.device});return n.push(l),n}storeData(e){const{visitorCode:t,data:i}=e;return i.length&&this.checkVisitor(t),super.storeData(e)}storeDataForVisitors(e){return super.storeDataForVisitors(e,!0)}getVisitorData(e){return this.checkVisitor(e),super.getVisitorData(e)}updateLastActivity(){var t,i,a,n;if(!this.visitor)return null;const o=this.dataStorage.read();if(!o.ok)return null;const r=o.data;let s=null!==(t=r[this.visitor.visitorCode])&&void 0!==t?t:{};"string"==typeof s&&(s=r[s]);let u=s[e.KameleoonData.VisitsData];u||(u={visits:[],visitNumber:0,type:e.KameleoonData.VisitsData,status:e.TrackingStatus.Sent,expirationTime:0},s[e.KameleoonData.VisitsData]=u);const l=this.fetchVisit(u.visits,u.visits.length-1),d=null!==(i=null==l?void 0:l.timeLastActivity)&&void 0!==i?i:0,c=Date.now();let g=null!==(a=u.visitNumber)&&void 0!==a?a:u.visits.length?u.visits.length-1:0;if(c-d>li)g+=d>0?1:0,xe.insertVisitInOrderedListMutably({list:u.visits,visit:{timeStarted:c,timeLastActivity:c}}),this.visitor.timeSincePreviousVisit=l?c-d:0;else if(u.visits.length&&(u.visits[u.visits.length-1]={timeStarted:null!==(n=null==l?void 0:l.timeStarted)&&void 0!==n?n:c,timeLastActivity:c},-1===this.visitor.timeSincePreviousVisit)){const e=this.fetchVisit(u.visits,u.visits.length-2);this.visitor.timeSincePreviousVisit=e?c-e.timeLastActivity:0}return u.visitNumber=g,this.visitor.visitNumber=g,this.dataStorage.write(r),this.visitor.visitorCode}checkVisitor(e){this.visitor&&this.visitor.visitorCode===e||this.createVisitor(e)}createVisitor(e){var t,i,a;M.debug`CALL: ClientDataManager.createVisitor(visitorCode: ${e})`,this.visitor=new fi(e);try{const n=this.platformAnalyzer.getResult(),o=[];(null===(t=n.os)||void 0===t?void 0:t.name)&&o.push(new Le(n.os.name)),(null===(i=n.platform)||void 0===i?void 0:i.type)&&o.push(new Me(n.platform.type)),(null===(a=n.browser)||void 0===a?void 0:a.name)&&o.push(new Ne(n.browser.name,n.browser.version)),n.pageView&&o.push(n.pageView),o.length&&this.storeData({visitorCode:e,data:o})}finally{this.updateLastActivity()}M.debug`RETURN: ClientDataManager.createVisitor(visitorCode: ${e})`}updateVisitor(){var t;M.debug`CALL: ClientDataManager.updateVisitor()`;const i=this.dataStorage.read();if(!i.ok)return;const a=i.data;let n,o=-1;for(const[i,r]of Object.entries(a)){if("string"==typeof r)continue;const a=r[e.KameleoonData.VisitsData];if(!a){n||(n=i);continue}const s=a.visits.length?a.visits[a.visits.length-1]:null;if(s){const e=null!==(t="number"==typeof s?s:null==s?void 0:s.timeLastActivity)&&void 0!==t?t:0;e>o&&(o=e,n=i)}else n||(n=i)}n?this.createVisitor(n):(this.visitor=null,M.debug`ClientDataManager no visitor found`),M.debug`RETURN: ClientDataManager.updateVisitor()`}fetchVisit(e,t){if(t<0||t>=e.length)return null;const i=e[t];return"number"==typeof i?{timeStarted:i,timeLastActivity:i}:i}}class fi{constructor(e){this.visitNumber=0,this.timeSincePreviousVisit=-1,this.visitorCode=e}}class Ci{static getFirstMatch(e,t){const i=t.match(e);return i&&i.length>0&&i[1]||""}static getSecondMatch(e,t){const i=t.match(e);return i&&i.length>1&&i[2]||""}static assign(e,...t){return Object.assign(e,...t)}}class yi{constructor(){this.userAgent=navigator.userAgent||"",M.debug`PlatformParser: userAgent = ${this.userAgent}`,this.parsedResult={},""!==this.userAgent&&this.parse()}parseBrowser(){const t=[{test:[/chrome|crios|crmo/i],describe:t=>({name:e.BrowserType.Chrome,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/firefox|iceweasel|fxios/i],describe:t=>({name:e.BrowserType.Firefox,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/safari|applewebkit/i],describe:t=>({name:e.BrowserType.Safari,version:this.getBrowserVersion(Ci.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/opr\/|opios/i],describe:t=>({name:e.BrowserType.Opera,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,t))})},{test:[/edg([ea]|ios)/i],describe:t=>({name:e.BrowserType.InternetExplorer,version:this.getBrowserVersion(Ci.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/googlebot/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,t)||Ci.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/SamsungBrowser/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/yabrowser/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/ucbrowser/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/vivaldi/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/phantom/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/electron/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/chromium/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/opera/i],describe:t=>({name:e.BrowserType.Opera,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/msie|trident/i],describe:t=>({name:e.BrowserType.InternetExplorer,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,t))})},{test:[/.*/i],describe:t=>{const i=t.includes("(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getSecondMatch(i,t))}}}].find(e=>e.test.some(e=>e.test(this.userAgent)));return t&&(this.parsedResult.browser=t.describe(this.userAgent)),this.parsedResult.browser||{}}parseOS(){const t=[{test:[/windows phone/i],describe:()=>({name:e.OperatingSystemType.WindowsPhone})},{test:[/windows /i],describe:()=>({name:e.OperatingSystemType.Windows})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:t=>({name:e.OperatingSystemType.IOS,version:Ci.getSecondMatch(/(Version\/)(\d[\d.]+)/,t)})},{test:[/macintosh/i],describe:t=>({name:e.OperatingSystemType.Mac,version:Ci.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,t).replace(/[_\s]/g,".")})},{test:[/(ipod|iphone|ipad)/i],describe:t=>({name:e.OperatingSystemType.IOS,version:Ci.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,t).replace(/[_\s]/g,".")})},{test:[/android/i],describe:()=>({name:e.OperatingSystemType.Android})},{test:[/linux/i],describe:()=>({name:e.OperatingSystemType.Linux})}].find(e=>e.test.some(e=>e.test(this.userAgent)));return t&&(this.parsedResult.os=t.describe(this.userAgent)),this.parsedResult.os||{}}parsePlatform(){const t=[{test:()=>{var t,i;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===e.OperatingSystemType.Android&&Number(String(null===(i=this.parsedResult.os)||void 0===i?void 0:i.version).split(".")[0])>=3},describe:t=>({type:e.DeviceType.Tablet})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===e.OperatingSystemType.Android},describe:()=>({type:e.DeviceType.Phone})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===e.OperatingSystemType.Mac},describe:()=>({type:e.DeviceType.Desktop})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===e.OperatingSystemType.Windows},describe:()=>({type:e.DeviceType.Desktop})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===e.OperatingSystemType.Linux},describe:()=>({type:e.DeviceType.Desktop})}],i=[{test:[/huserAgentwei/i],describe:t=>({type:e.DeviceType.Phone})},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:()=>({type:e.DeviceType.Tablet})},{test:[/ipad/i],describe:()=>({type:e.DeviceType.Tablet})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:()=>({type:e.DeviceType.Tablet})},{test:[/kftt build/i],describe:()=>({type:e.DeviceType.Tablet})},{test:[/silk/i],describe:()=>({type:e.DeviceType.Tablet})},{test:[/tablet(?! pc)/i],describe:()=>({type:e.DeviceType.Tablet})},{test:[/ipod|iphone/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/[^-]mobi/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/blackberry/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/bada/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/windows phone/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/android/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/ios/i],describe:()=>({type:e.DeviceType.Desktop})},{test:[/windows/i],describe:()=>({type:e.DeviceType.Desktop})},{test:[/linux/i],describe:()=>({type:e.DeviceType.Desktop})}].find(e=>e.test.some(e=>e.test(this.userAgent)))||t.find(e=>e.test());return i&&(this.parsedResult.platform=i.describe(this.userAgent)),this.parsedResult.platform||{}}parse(){this.userAgent&&(this.parseBrowser(),this.parseOS(),this.parsePlatform())}getBrowserVersion(e){if(!e)return;const t=e.split(".");if(0===t.length)return;const i=t.length>1?`${t[0]}.${t[1]}`:t[0],a=parseFloat(i);return isNaN(a)?void 0:a}parseWebView(){var e;let t=null===(e=window.location)||void 0===e?void 0:e.href;if(t){const e=document?document.title:"";this.parsedResult.pageView=new Oe({urlAddress:t,title:e})}}getResult(){return this.parseWebView(),Ci.assign({},this.parsedResult)}}e.ApplicationVersion=class{constructor(t){this.version=t,this.status=e.TrackingStatus.Sent}get url(){return""}get data(){return{version:this.version,type:e.KameleoonData.ApplicationVersion,status:this.status}}},e.Browser=Ne,e.Conversion=Fe,e.Cookie=Ye,e.CustomData=$e,e.DataManager=Lt,e.DataProcessor=Je,e.DataStorage=$t,e.Device=Me,e.Err=ni,e.GeolocationData=_e,e.KameleoonClient=class extends ti{constructor({siteCode:t,configuration:i,externals:a,_internals:n,stubMode:o}){var r;if(o)return super({siteCode:t,internalConfiguration:{},stubMode:o}),this.internalVisitorCodeManager={},void(this.externalVisitorCodeManager={});const s=(null==n?void 0:n.prng)||new hi,u=(null==a?void 0:a.storage)||new ci,l=(null==a?void 0:a.requester)||new si,d=(null==a?void 0:a.eventSource)||new gi,c=new Ut,g=(null==a?void 0:a.visitorCodeManager)||new di,h=(null==n?void 0:n.packageInfo)||{type:e.SdkLanguageType.JAVASCRIPT,version:"4.22.0",isServer:!1},p=new $t(u,e.KameleoonStorageKey.TargetingData),v=new $t(u,e.KameleoonStorageKey.DataInfo),m=new mi({dataStorage:p,infoStorage:v,cleanupInterval:0,packageInfo:h,platformAnalyzer:null!==(r=null==n?void 0:n.platformAnalyzer)&&void 0!==r?r:new yi});super({siteCode:t,configuration:i,internalConfiguration:{externals:{externalPRNG:s,externalStorage:u,externalRequester:l,externalEventSource:d,externalVisitorCodeManager:c,externalPackageInfo:h,externalLogger:(null==a?void 0:a.logger)||new pi,customDataManager:m},settings:{useAbortController:!0}}});const f=Ae.validateDomain(null==i?void 0:i.cookieDomain);this.domain=f.ok?f.data:void 0,this.internalVisitorCodeManager=c,this.externalVisitorCodeManager=g,this.customDataManager=m}initialize(){const e=Object.create(null,{initialize:{get:()=>super.initialize}});return ri(this,void 0,void 0,function*(){if(this.stubMode)return!1;const t=e.initialize.call(this);return new vi(this.customDataManager,this.tracker,e=>this._isConsentProvided(e),ui),t})}getVisitorCode(e){var t;if(this.stubMode)return"";M.info`CALL KamaleoonClient.getVisitorCode(defaultVisitorCode: ${e})`,this.internalVisitorCodeManager.getData=e=>this.externalVisitorCodeManager.getData(e),this.internalVisitorCodeManager.setData=e=>{this.externalVisitorCodeManager.setData(Object.assign(Object.assign({},e),{domain:this.domain}))};const i=this.internalVisitorCodeManager.getVisitorCode(e);return this.initialized&&(null===(t=this.customDataManager)||void 0===t||t.checkVisitor(i)),M.info`RETURN KamaleoonClient.getVisitorCode(defaultVisitorCode: ${e}) -> (visitorCode: ${i})`,i}setLegalConsent(e,t){this.stubMode||(super.setUserConsent({visitorCode:e,consent:t,setData:e=>{this.externalVisitorCodeManager.setData(Object.assign(Object.assign({},e),{domain:this.domain}))}}),super.flush(e))}},e.KameleoonCore=ti,e.KameleoonError=h,e.KameleoonLogger=M,e.KameleoonUtils=ii,e.ListUtilities=xe,e.NUMBER_OF_RETRIES=1,e.Ok=oi,e.OperatingSystem=Le,e.PageView=Oe,e.Parser=je,e.StaticData=Qe,e.Tree=tt,e.UniqueIdentifier=Xe,e.UserAgent=class{constructor(t){this.value=t,this.status=e.TrackingStatus.Sent}get url(){return""}get data(){return{value:this.value,type:e.KameleoonData.UserAgent,status:this.status}}},e.Utilities=Ke,e.VISITOR_CODE_LENGTH=16,e.VISIT_DURATION=xt,e.Validator=Ae,e.VisitorCodeManager=Ut});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).KameleoonSDK={})}(this,function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function a(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var t=e.default;if("function"==typeof t){var i=function e(){var i=!1;try{i=this instanceof e}catch{}return i?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};i.prototype=t.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(e).forEach(function(t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(i,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}),i}var n,o,r,s,u,l,d,c,g,h,p={},v={},m=(o||(o=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Err=e.Ok=void 0;var t=function(){if(n)return v;function e(e){if(!this.ok){if("string"==typeof this.error||void 0===this.error)throw new Error(e||this.error||"There was an error! No specific error message was provided.");throw e&&(this.error.message=e),this.error}return this.data}function t(e){return this.ok?this.data:e(this.error)}function i(e){return this.ok?this.data:e}function a(e){return this.ok&&e(this.data),this}return n=1,Object.defineProperty(v,"__esModule",{value:!0}),v.Err=v.Ok=void 0,v.Ok=function(n){return{ok:!0,data:n,throw:e,else:t,or:i,and:a}},v.Err=function(n){return{ok:!1,error:n,throw:e,else:t,or:i,and:a}},v}();Object.defineProperty(e,"Ok",{enumerable:!0,get:function(){return t.Ok}}),Object.defineProperty(e,"Err",{enumerable:!0,get:function(){return t.Err}})}(p)),p);function f(e,t,i,a){return new(i||(i=Promise))(function(t,n){function o(e){try{s(a.next(e))}catch(e){n(e)}}function r(e){try{s(a.throw(e))}catch(e){n(e)}}function s(e){var a;e.done?t(e.value):(a=e.value,a instanceof i?a:new i(function(e){e(a)})).then(o,r)}s((a=a.apply(e,[])).next())})}"function"==typeof SuppressedError&&SuppressedError,function(e){e[e.Polling=0]="Polling",e[e.RealTime=1]="RealTime"}(r||(r={})),function(e){e.TARGETED_DELIVERY="TARGETED_DELIVERY",e.EXPERIMENTATION="EXPERIMENTATION"}(s||(s={})),function(e){e.ANDROID="ANDROID",e.SWIFT="SWIFT",e.JAVA="JAVA",e.CSHARP="CSHARP",e.NODEJS="NODEJS",e.PHP="PHP",e.RUBY="RUBY",e.GO="GO",e.FLUTTER="FLUTTER",e.REACTJS="REACTJS"}(u||(u={})),function(e){e.ACTIVATED="ACTIVATED",e.DEACTIVATED="DEACTIVATED",e.SCHEDULED="SCHEDULED"}(l||(l={})),e.CustomDataScope=void 0,(d=e.CustomDataScope||(e.CustomDataScope={})).Visit="VISIT",d.Visitor="VISITOR",d.Page="Page",function(e){e.Required="REQUIRED",e.NotRequired="NOT_REQUIRED"}(c||(c={})),function(e){e.PartiallyBlocked="PARTIALLY_BLOCK",e.CompletelyBlocked="FULLY_BLOCK"}(g||(g={}));class C{addEventHandler(e,t){this.eventHandlers||(this.eventHandlers=new Map),this.eventHandlers.set(e,t)}fireEvent(e,t){var i;const a=null===(i=this.eventHandlers)||void 0===i?void 0:i.get(e);a&&t&&a(t)}}e.EventType=void 0,(h=e.EventType||(e.EventType={})).Evaluation="evaluation",h.ConfigurationUpdate="configurationUpdate";const y={customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:c.NotRequired,dataApiDomain:"data.kameleoon.io",consentOptOutBehavior:g.PartiallyBlocked}};var D;e.LogLevel=void 0,(D=e.LogLevel||(e.LogLevel={}))[D.NONE=0]="NONE",D[D.ERROR=1]="ERROR",D[D.WARNING=2]="WARNING",D[D.INFO=3]="INFO",D[D.DEBUG=4]="DEBUG";const E={[e.LogLevel.NONE]:"NONE",[e.LogLevel.ERROR]:"ERROR",[e.LogLevel.WARNING]:"WARNING",[e.LogLevel.INFO]:"INFO",[e.LogLevel.DEBUG]:"DEBUG"},T=(e,t)=>"credentials"===e?{clientId:"****",clientSecret:"****"}:t instanceof Map?Array.from(t.entries()):t;class I{static setLogger(e){I.logger=e}static setLogLevel(e){I.logLevel=e}static log({level:e,strings:t,keys:i}){if(!I.checkLevel(e))return;let a;if("string"==typeof t)a=t;else if("function"==typeof t)try{a=t()}catch(e){a="Failed to log message"}else a=function(e,t){let i="";if(t)for(let a=0;a<t.length;a++){let n=t[a];if("object"==typeof n)try{i+=e[a]+JSON.stringify(n,T)}catch(t){i+=e[a]+"{object}"}else i+="string"==typeof n?e[a]+"'"+n+"'":e[a]+n}return i+=e[e.length-1],i}(t,i);I.writeMessage(e,a)}static info(t,...i){I.log({level:e.LogLevel.INFO,strings:t,keys:i})}static error(t,...i){I.log({level:e.LogLevel.ERROR,strings:t,keys:i})}static warning(t,...i){I.log({level:e.LogLevel.WARNING,strings:t,keys:i})}static debug(t,...i){I.log({level:e.LogLevel.DEBUG,strings:t,keys:i})}static checkLevel(t){return t<=I.logLevel&&t!==e.LogLevel.NONE}static writeMessage(e,t){I.logger.log(e,`Kameleoon [${E[e]}]: ${t}`)}}I.logger=new class{log(t,i){switch(t){case e.LogLevel.DEBUG:console.debug(i);break;case e.LogLevel.INFO:console.info(i);break;case e.LogLevel.WARNING:console.warn(i);break;case e.LogLevel.ERROR:console.error(i)}}},I.logLevel=e.LogLevel.WARNING;class S{constructor(e){this._featureFlags=e.slice().sort((e,t)=>e.id-t.id)}getFeatureFlagByHash(e){let t=Math.floor(e*this._featureFlags.length);return t=Math.min(t,this._featureFlags.length-1),this._featureFlags[t]}get featureFlags(){return this._featureFlags}}var k;e.KameleoonException=void 0,(k=e.KameleoonException||(e.KameleoonException={})).Credentials="Credentials",k.EventSourceInitialization="EventSourceInitialization",k.FeatureFlagConfigurationNotFound="FeatureFlagConfigurationNotFound",k.FeatureFlagVariableNotFound="FeatureFlagVariableNotFound",k.FeatureFlagVariationNotFound="FeatureFlagVariationNotFound",k.FeatureFlagExperimentNotFound="FeatureFlagExperimentNotFound",k.FeatureFlagEnvironmentDisabled="FeatureFlagEnvironmentDisabled",k.VisitAmount="VisitAmount",k.VisitorCodeMaxLength="VisitorCodeMaxLength",k.VisitorCodeEmpty="VisitorCodeEmpty",k.StorageInitialization="StorageInitialization",k.StorageWrite="StorageWrite",k.StorageRead="StorageRead",k.StorageParse="StorageParse",k.StorageEmpty="StorageEmpty",k.ClientConfiguration="ClientConfiguration",k.TargetingCondition="TargetingCondition",k.AmongValuesCheck="AmongValuesCheck",k.RangeCheck="RangeCheck",k.Initialization="Initialization",k.JSONParse="JSONParse",k.NumberParse="NumberParse",k.VersionParse="VersionParse",k.CookieParse="CookieParse",k.SemanticVersionParse="SemanticVersionParse",k.RemoteData="RemoteData",k.MaximumRetriesReached="MaximumRetriesReached";const V={[e.KameleoonException.CookieParse]:e=>`Couldn't parse cookie string: ${e}`,[e.KameleoonException.JSONParse]:e=>`Couldn't parse JSON variable: ${e}`,[e.KameleoonException.NumberParse]:e=>`It's not possible to parse value ${e} to Number`,[e.KameleoonException.VersionParse]:e=>`It's not possible to parse a version value ${e} to Number, version should be in format x.x`,[e.KameleoonException.SemanticVersionParse]:e=>`It's not possible to parse a version value ${e} to Number, version should be in format x.x.x`,[e.KameleoonException.Initialization]:()=>"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods",[e.KameleoonException.Credentials]:()=>"KameleoonClient can not be created without credentials",[e.KameleoonException.StorageInitialization]:()=>"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed",[e.KameleoonException.EventSourceInitialization]:()=>"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed",[e.KameleoonException.FeatureFlagConfigurationNotFound]:e=>`No feature flag with key ${e} was found.`,[e.KameleoonException.FeatureFlagEnvironmentDisabled]:(e,t)=>`Feature flag with key ${e} is disabled in ${t} environment.`,[e.KameleoonException.FeatureFlagVariableNotFound]:(e,t)=>`No feature flag variable with key ${e} was found for ${t} visitorCode.`,[e.KameleoonException.FeatureFlagVariationNotFound]:(e,t)=>`No feature flag variation with key ${e} was found for ${t} visitorCode.`,[e.KameleoonException.FeatureFlagExperimentNotFound]:(e,t)=>`No feature flag experiment with id ${e} was found for ${t} visitorCode.`,[e.KameleoonException.VisitAmount]:()=>"Visit amount must be a number between 1 and 25",[e.KameleoonException.VisitorCodeMaxLength]:()=>"Visitor code can not be more than 255 characters long",[e.KameleoonException.VisitorCodeEmpty]:()=>"Visitor code can not be empty",[e.KameleoonException.StorageWrite]:e=>`Couldn't update storage for kameleoonClient: ${e}`,[e.KameleoonException.StorageRead]:e=>`No data found in storage under ${e} key`,[e.KameleoonException.StorageEmpty]:()=>"No data found in storage",[e.KameleoonException.StorageParse]:(e,t)=>`Couldn't parse ${t} storage data, the data may be corrupted. Error: ${e}`,[e.KameleoonException.ClientConfiguration]:e=>`Couldn't retrieve client configuration from Kameleoon Api. Error: ${e}`,[e.KameleoonException.TargetingCondition]:e=>`${e} targeting condition is not yet supported.`,[e.KameleoonException.AmongValuesCheck]:(e,t)=>`Couldn't parse value "${t}": ${e}`,[e.KameleoonException.RangeCheck]:e=>`Couldn't parse value "${e}" as a range, value should be in format [x: number, y: number]`,[e.KameleoonException.RemoteData]:e=>`Couldn't retrieve data from Kameleoon server. Error: ${e}`,[e.KameleoonException.MaximumRetriesReached]:e=>`Maximum retries reached, request failed. Reason: ${e}`};function R(e){throw new Error(`Reaching an impossible state because of ${e}`)}class w extends Error{constructor(t,i,a){switch(super(`Error: ${t}`),this.name="KameleoonError",this.errorType=t,t){case e.KameleoonException.Initialization:case e.KameleoonException.Credentials:case e.KameleoonException.VisitorCodeMaxLength:case e.KameleoonException.VisitorCodeEmpty:case e.KameleoonException.StorageInitialization:case e.KameleoonException.VisitAmount:case e.KameleoonException.EventSourceInitialization:case e.KameleoonException.StorageEmpty:this.message=V[t]();break;case e.KameleoonException.CookieParse:case e.KameleoonException.FeatureFlagConfigurationNotFound:case e.KameleoonException.NumberParse:case e.KameleoonException.ClientConfiguration:case e.KameleoonException.MaximumRetriesReached:case e.KameleoonException.RemoteData:case e.KameleoonException.VersionParse:case e.KameleoonException.SemanticVersionParse:this.message=V[t](i);break;case e.KameleoonException.FeatureFlagExperimentNotFound:case e.KameleoonException.FeatureFlagVariationNotFound:case e.KameleoonException.FeatureFlagVariableNotFound:this.message=V[t](i,a);break;case e.KameleoonException.FeatureFlagEnvironmentDisabled:this.message=void 0!==a?V[t](i,a):i;break;case e.KameleoonException.StorageWrite:case e.KameleoonException.JSONParse:case e.KameleoonException.StorageRead:this.message=V[t](i);break;case e.KameleoonException.StorageParse:this.message=V[t](i,a);break;case e.KameleoonException.TargetingCondition:this.message=V[t](i);break;case e.KameleoonException.AmongValuesCheck:this.message=V[t](i,a);break;case e.KameleoonException.RangeCheck:this.message=V[t](i);break;default:R(t)}}get type(){return this.errorType}}var b,A,K,O,x;!function(e){e.DataApi="dataApi",e.AccessToken="accessToken",e.Events="events",e.ClientConfiguration="clientConfiguration"}(b||(b={})),e.HttpMethod=void 0,(A=e.HttpMethod||(e.HttpMethod={})).Get="GET",A.Post="POST",function(e){e[e.VisitEvent=0]="VisitEvent",e[e.VisitData=1]="VisitData",e[e.DataMap=2]="DataMap"}(K||(K={})),e.RequestType=void 0,(O=e.RequestType||(e.RequestType={})).Configuration="configuration",O.Tracking="tracking",O.RemoteData="remoteData",e.Header=void 0,(x=e.Header||(e.Header={})).UserAgent="User-Agent",x.ContentType="Content-Type",x.SdkVersion="X-Kameleoon-SDK-Version",x.SdkType="X-Kameleoon-SDK-Type",x.Authorization="Authorization",x.AcceptEncoding="Accept-Encoding",x.IfModifiedSince="If-Modified-Since",x.LastModified="Last-Modified";const N="eventType=staticData",$="&browserIndex=",F="&browserVersion=",M="&deviceType=",L="&visitorCode=",_="&sdkVersion=",U="&nonce=",P="&id=",G="&maxNumberPreviousVisits=",B="&os=",z="&osIndex=",j="&browser=",H="&mappingValue=",q="visit/",W={[b.DataApi]:"data.kameleoon.io",[b.AccessToken]:"api.kameleoon.com",[b.Events]:"events.kameleoon.eu",[b.ClientConfiguration]:"sdk-config.kameleoon.eu"};let Y=class{constructor({urlProvider:e,packageInfo:t,externalRequester:i,requestTimeout:a,trackRetryDelay:n,useAbortController:o}){I.debug`CALL: new Requester(urlProvider, packageInfo: ${t}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${n}, useAbortController: ${o})`,this.urlProvider=e,this.useAbortController=o,this.externalRequester=i,this.trackRetryDelay=n,this.packageInfo=t,this.timeout=a,I.debug`RETURN: new Requester(urlProvider, packageInfo: ${t}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${n}, useAbortController: ${o})`}getClientConfiguration(t,i){return f(this,0,void 0,function*(){const a=this.urlProvider.getClientConfigurationUrl(t);let n=Object.assign({[e.Header.SdkType]:this.packageInfo.type,[e.Header.SdkVersion]:this.packageInfo.version},i&&{[e.Header.IfModifiedSince]:i});try{let t={message:""};I.debug`Running configuration request Method: ${e.HttpMethod.Get}, Url: ${a}, Headers: ${n}, with retry limit ${2}`;for(let i=0;i<2;i++){const o=yield this.sendRequest({url:a,requestType:e.RequestType.Configuration,retryCount:i,parameters:{method:e.HttpMethod.Get,headers:n}});if(o.ok){const e=yield o.json();this.logReceivedConfigurationResponse(o.status,a,n);const t=this.getLastModifiedHeader(o),i=e;return m.Ok({configuration:i,lastModified:t})}if(304===o.status)return this.logReceivedConfigurationResponse(o.status,a,n),m.Ok({});if(1===i){if(o.text){const e=yield o.text();t=JSON.parse(e)}I.error`Failed to get configuration response ${{status:o.status,message:t.message}} for request Method: ${e.HttpMethod.Get}, Url: ${a}, Headers: ${n}`}else yield this.logRequestError({logLevel:e.LogLevel.WARNING,message:"Failed to get configuration response",response:o,method:e.HttpMethod.Get,url:a})}return m.Err(new w(e.KameleoonException.MaximumRetriesReached,t.message))}catch(t){return yield this.logRequestError({logLevel:e.LogLevel.ERROR,message:"Failed to get configuration response",error:t,method:e.HttpMethod.Get,url:a,headers:n}),m.Err(new w(e.KameleoonException.ClientConfiguration,t))}})}getRemoteData(t){var i;return f(this,0,void 0,function*(){const a=this.urlProvider.getRemoteDataUrl(t);I.debug`Running remote data request Method: ${e.HttpMethod.Get}, Url: ${a}`;try{const t=yield this.sendRequest({url:a,requestType:e.RequestType.RemoteData,retryCount:0,parameters:{method:e.HttpMethod.Get}});if(!t.ok){if(yield this.logRequestError({logLevel:e.LogLevel.ERROR,message:"Failed to get remote data response",response:t,method:e.HttpMethod.Get,url:a}),t.text){const a=yield t.text(),n=null===(i=JSON.parse(a))||void 0===i?void 0:i.message;return m.Err(new w(e.KameleoonException.RemoteData,n))}return m.Err(new w(e.KameleoonException.RemoteData,"Unknown Reason - no `text()` was found for a response"))}const n=yield t.json();return I.debug`Received remote data response: ${{status:t.status}} for request Method: ${e.HttpMethod.Get}, Url: ${a}`,m.Ok(n)}catch(t){return yield this.logRequestError({logLevel:e.LogLevel.ERROR,message:"Failed to get remote data response",error:t,method:e.HttpMethod.Get,url:a}),m.Err(new w(e.KameleoonException.RemoteData,t))}})}getVisitorData({visitorCode:t,filters:i,isMappingIdentifier:a}){var n;return f(this,0,void 0,function*(){const o=this.urlProvider.getVisitorDataUrl({visitorCode:t,filters:i,isMappingIdentifier:a});I.debug`Running visitor data request Method: ${e.HttpMethod.Get}, Url: ${o}`;try{const t=yield this.sendRequest({url:o,requestType:e.RequestType.RemoteData,retryCount:0,parameters:{method:e.HttpMethod.Get}});if(!t.ok){if(yield this.logRequestError({logLevel:e.LogLevel.ERROR,message:"Failed to get visitor data response",response:t,method:e.HttpMethod.Get,url:o}),"function"==typeof t.text){const i=yield t.text();if(i){const t=null===(n=JSON.parse(i))||void 0===n?void 0:n.message;return m.Err(new w(e.KameleoonException.RemoteData,t))}}return t.status?m.Err(new w(e.KameleoonException.RemoteData,`No error message. Error status: ${t.status}`)):m.Err(new w(e.KameleoonException.RemoteData,"Unknown Reason - no text message or error status was found for a response"))}const i=yield t.json();return I.debug`Received visitor data response: ${{status:t.status}} for request Method: ${e.HttpMethod.Get}, Url: ${o}`,m.Ok(i)}catch(t){return yield this.logRequestError({logLevel:e.LogLevel.ERROR,message:"Failed to get visitor data response",error:t,method:e.HttpMethod.Get,url:o}),m.Err(new w(e.KameleoonException.RemoteData,t))}})}track(t,i){return f(this,0,void 0,function*(){const a=this.urlProvider.getTrackingUrl(i);I.debug`Running tracking request Method: ${e.HttpMethod.Post}, Url: ${a}, Body: ${t}, with retry limit ${2}, retry delay ${this.trackRetryDelay} ms`;for(let i=0;i<2;i++){let n;try{if(n=yield this.sendRequest({url:a,retryCount:i,requestType:e.RequestType.Tracking,parameters:{body:t,method:e.HttpMethod.Post,headers:{[e.Header.ContentType]:"*/*"}}}),n.ok)return I.debug`Received tracking response: ${{status:n.status}} for request Method: ${e.HttpMethod.Post}, Url: ${a}, Body: ${t}`,m.Ok();yield this.logRequestError({logLevel:1==i?e.LogLevel.ERROR:e.LogLevel.WARNING,message:"Failed to get tracking response",response:n,method:e.HttpMethod.Post,url:a})}catch(t){yield this.logRequestError({logLevel:1==i?e.LogLevel.ERROR:e.LogLevel.WARNING,message:"Failed to get tracking response",error:t,method:e.HttpMethod.Post,url:a})}i<2&&(yield new Promise(e=>setTimeout(e,this.trackRetryDelay)))}return m.Err()})}sendRequest({url:e,requestType:t,retryCount:i,parameters:a}){return f(this,0,void 0,function*(){let n;if(this.useAbortController){const o=new AbortController,r=setTimeout(()=>o.abort(),this.timeout);n=yield this.externalRequester.sendRequest({url:e,retryCount:i,requestType:t,parameters:Object.assign(Object.assign({},a),{signal:o.signal})}),clearTimeout(r)}else n=yield this.externalRequester.sendRequest({url:e,retryCount:i,requestType:t,parameters:a});return n})}logRequestError({logLevel:e,message:t,error:i,method:a,url:n,response:o,headers:r}){return f(this,0,void 0,function*(){if(i){let o="Unknown error";i instanceof Error&&(o=i.message),I.log({level:e,strings:()=>`${t} with error: ${o} for request Method: ${a}, Url: ${n}`})}else if(o&&I.checkLevel(e)){const i=yield this.parseResponse(o);I.log({level:e,strings:()=>`${t} response: Status: '${i.status}' Message: '${i.message}' for request Method: ${a}, Url: '${n}'`+(r?`, Headers: ${r}`:"")})}})}parseResponse(e){return f(this,0,void 0,function*(){let t="";try{if("function"==typeof e.text){const i=yield e.text();i&&(t=i)}}catch(e){}return{status:e.status,message:t}})}getLastModifiedHeader(t){if(t.headers){const i=e.Header.LastModified.toLowerCase();for(const[e,a]of t.headers)if(e.toLowerCase()===i)return a}}logReceivedConfigurationResponse(t,i,a){I.debug`Received configuration response: ${{status:t}} for request Method: ${e.HttpMethod.Get}, Url: ${i}, Headers: ${a}`}};var X,J,Q,Z,ee,te,ie,ae;e.Environment=void 0,(X=e.Environment||(e.Environment={})).Production="production",X.Staging="staging",X.Development="development";class ne{constructor(){this.ready=!1,this.isCustomDomain=!1,this.domains=W}initialize({domain:e,siteCode:t,packageInfo:i,environment:a}){this.siteCode=t,this.environment=a,this.packageInfo=i,this.ready=!0,this.setDomains(e)}set dataApiDomain(e){if(!this.isCustomDomain)return void(this.domains[b.DataApi]=e);const t=e.split(".")[0],i=this.domains[b.DataApi];this.domains[b.DataApi]=i.replace(/^[^.]+/,t)}get dataApiDomain(){return this.domains[b.DataApi]}getClientConfigurationUrl(t){this.isInitialized();const i=`https://${this.domains[b.ClientConfiguration]}/v3/`,a=this.environment===e.Environment.Production?"":"?environment="+encodeURIComponent(this.environment);let n="";return t&&(n=a?"&ts="+t:"?ts="+t),i+this.siteCode+a+n}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains[b.Events]}:8110/sse?siteCode=${this.siteCode}`}getRemoteDataUrl(e){return this.isInitialized(),this.getDataApiUrl(K.DataMap)+this.siteCode+"&key="+encodeURI(e)}getVisitorDataUrl({visitorCode:e,filters:t,isMappingIdentifier:i}){this.isInitialized();const{customData:a,previousVisitAmount:n,currentVisit:o,conversions:r,geolocation:s,experiments:u,pageViews:l,device:d,browser:c,operatingSystem:g,kcs:h,personalization:p,visitorCode:v,cbs:m}=t,f=i?H:L,C=a||v?"&customData="+!0:"",y=r?"&conversion="+!0:"",D=s?"&geolocation="+!0:"",E=u?"&experiment="+!0:"",T=l?"&page="+!0:"",I="&staticData="+!0,S=o?"¤tVisit="+!0:"",k=h?"&kcs="+!0:"",V=p?"&personalization="+!0:"",R="number"!=typeof n?G+1:G+n,w=m?"&cbs="+!0:"";return this.getDataApiUrl(K.VisitData)+this.siteCode+f+e+R+C+y+D+E+T+I+S+k+V+w}getTrackingUrl(e){this.isInitialized();const{type:t,version:i}=this.packageInfo;let a=this.getDataApiUrl(K.VisitEvent)+this.siteCode+"&sdkName="+t+_+i;return e&&(a+="&bodyUa="+!0),a}getAccessTokenUrl(){this.isInitialized();const{type:e,version:t}=this.packageInfo;return`https://${this.domains[b.AccessToken]}/oauth/token?sdkName=`+e+_+t+"&siteCode="+this.siteCode}isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}getDataApiUrl(e){if(!this.domains[b.DataApi])throw new Error("Data API domain is not set");const t=`https://${this.domains[b.DataApi]}`;switch(e){case K.VisitEvent:return`${t}/${q+"events?siteCode="}`;case K.VisitData:return`${t}/${q+"visitor?siteCode="}`;case K.DataMap:return`${t}/map/map?siteCode=`}}setDomains(e){e&&(this.isCustomDomain=!0,this.domains[b.DataApi]="data."+e,this.domains[b.AccessToken]="api."+e,this.domains[b.Events]="events."+e,this.domains[b.ClientConfiguration]="sdk-config."+e)}}function oe(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e]))}e.VariableType=void 0,(J=e.VariableType||(e.VariableType={})).BOOLEAN="BOOLEAN",J.NUMBER="NUMBER",J.STRING="STRING",J.JSON="JSON",J.JS="JS",J.CSS="CSS",e.TrackingStatus=void 0,(Q=e.TrackingStatus||(e.TrackingStatus={})).Sent="sent",Q.Unsent="unsent",Q.Pending="pending",e.Milliseconds=void 0,(Z=e.Milliseconds||(e.Milliseconds={}))[Z.Second=1e3]="Second",Z[Z.Minute=6e4]="Minute",Z[Z.Hour=36e5]="Hour",Z[Z.Day=864e5]="Day",Z[Z.Week=6048e5]="Week",Z[Z.Month=2592e6]="Month",e.KameleoonData=void 0,(ee=e.KameleoonData||(e.KameleoonData={})).UniqueIdentifier="uniqueIdentifier",ee.CustomData="customData",ee.PageView="pageView",ee.GeolocationData="geolocation",ee.Browser="browser",ee.Conversion="conversion",ee.Cookie="cookie",ee.Device="device",ee.OperatingSystem="operatingSystem",ee.UserAgent="userAgent",ee.ApplicationVersion="applicationVersion",ee.VisitsData="visitsData",ee.KameleoonConversionScore="kameleoonConversionScore",ee.Personalization="personalization",ee.CBScores="cbScores",ee.TargetedSegment="targetedSegment",e.DeviceType=void 0,(te=e.DeviceType||(e.DeviceType={})).Phone="PHONE",te.Tablet="TABLET",te.Desktop="DESKTOP",e.OperatingSystemType=void 0,(ie=e.OperatingSystemType||(e.OperatingSystemType={})).WindowsPhone="WINDOWS_PHONE",ie.Windows="WINDOWS",ie.Android="ANDROID",ie.Linux="LINUX",ie.Mac="MAC",ie.IOS="IOS",e.BrowserType=void 0,(ae=e.BrowserType||(e.BrowserType={})).Chrome="CHROME",ae.InternetExplorer="IE",ae.Firefox="FIREFOX",ae.Safari="SAFARI",ae.Opera="OPERA",ae.Other="OTHER";const re={[e.OperatingSystemType.Windows]:0,[e.OperatingSystemType.Mac]:1,[e.OperatingSystemType.IOS]:2,[e.OperatingSystemType.Linux]:3,[e.OperatingSystemType.Android]:4,[e.OperatingSystemType.WindowsPhone]:5},se=oe(re),ue={[e.BrowserType.Chrome]:0,[e.BrowserType.InternetExplorer]:1,[e.BrowserType.Firefox]:2,[e.BrowserType.Safari]:3,[e.BrowserType.Opera]:4,[e.BrowserType.Other]:5},le=oe(ue);var de,ce,ge,he,pe,ve,me,fe,Ce,ye,De,Ee,Te;!function(e){e.And="AND",e.Or="OR"}(de||(de={})),function(e){e.TRUE="TRUE",e.FALSE="FALSE",e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.EQUAL="EQUAL",e.LOWER="LOWER",e.GREATER="GREATER",e.UNDEFINED="UNDEFINED",e.AMONG_VALUES="AMONG_VALUES",e.RANGE="RANGE"}(ce||(ce={})),function(e){e.NEW="NEW",e.RETURNING="RETURNING"}(ge||(ge={})),function(e){e.ANY="ANY",e.EXACT="EXACT"}(he||(he={})),function(e){e.ALL="ALL",e.TEST="TEST",e.PERSO="PERSO"}(pe||(pe={})),function(e){e.Experiment="EXPERIMENT",e.Personalization="PERSONALIZATION",e.Any="ANY"}(ve||(ve={})),function(e){e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(me||(me={})),function(e){e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(fe||(fe={})),function(e){e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.OPTIONAL="OPTIONAL"}(Ce||(Ce={})),function(e){e.CURRENT_VISIT="CURRENT_VISIT",e.VISITOR="VISITOR"}(ye||(ye={})),function(e){e.PAGE_URL="PAGE_URL",e.PAGE_TITLE="PAGE_TITLE",e.LANDING_PAGE="LANDING_PAGE",e.ORIGIN="ORIGIN",e.ORIGIN_TYPE="ORIGIN_TYPE",e.REFERRERS="REFERRERS",e.NEW_VISITORS="NEW_VISITORS",e.INTERESTS="INTERESTS",e.BROWSER_LANGUAGE="BROWSER_LANGUAGE",e.GEOLOCATION="GEOLOCATION",e.DEVICE_TYPE="DEVICE_TYPE",e.SCREEN_DIMENSION="SCREEN_DIMENSION",e.VISITOR_IP="VISITOR_IP",e.AD_BLOCKER="AD_BLOCKER",e.PREVIOUS_PAGE="PREVIOUS_PAGE",e.KEY_PAGES="KEY_PAGES",e.PAGE_VIEWS="PAGE_VIEWS",e.FIRST_VISIT="FIRST_VISIT",e.LAST_VISIT="LAST_VISIT",e.ACTIVE_SESSION="ACTIVE_SESSION",e.TIME_SINCE_PAGE_LOAD="TIME_SINCE_PAGE_LOAD",e.SAME_DAY_VISITS="SAME_DAY_VISITS",e.VISITS="VISITS",e.VISITS_BY_PAGE="VISITS_BY_PAGE",e.VISITOR_CODE="VISITOR_CODE",e.SDK_LANGUAGE="SDK_LANGUAGE",e.INTERNAL_SEARCH_KEYWORDS="INTERNAL_SEARCH_KEYWORDS",e.TABS_ON_SITE="TABS_ON_SITE",e.CONVERSION_PROBABILITY="CONVERSION_PROBABILITY",e.HEAT_SLICE="HEAT_SLICE",e.SKY_STATUS="SKY_STATUS",e.TEMPERATURE="TEMPERATURE",e.DAY_NIGHT="DAY_NIGHT",e.FORECAST_SKY_STATUS="FORECAST_SKY_STATUS",e.FORECAST_TEMPERATURE="FORECAST_TEMPERATURE",e.DAY_OF_WEEK="DAY_OF_WEEK",e.TIME_RANGE="TIME_RANGE",e.HOUR_MINUTE_RANGE="HOUR_MINUTE_RANGE",e.JS_CODE="JS_CODE",e.COOKIE="COOKIE",e.EVENT="EVENT",e.BROWSER="BROWSER",e.OPERATING_SYSTEM="OPERATING_SYSTEM",e.DOM_ELEMENT="DOM_ELEMENT",e.MOUSE_OUT="MOUSE_OUT",e.TARGET_EXPERIMENT="TARGET_EXPERIMENT",e.TARGET_FEATURE_FLAG="TARGET_FEATURE_FLAG",e.TARGET_PERSONALIZATION="TARGET_PERSONALIZATION",e.EXCLUSIVE_EXPERIMENT="EXCLUSIVE_EXPERIMENT",e.CONVERSIONS="CONVERSIONS",e.CUSTOM_DATUM="CUSTOM_DATUM",e.YSANCE_SEGMENT="YSANCE_SEGMENT",e.SEGMENT="SEGMENT",e.YSANCE_ATTRIBUT="YSANCE_ATTRIBUT",e.TEALIUM_BADGE="TEALIUM_BADGE",e.TEALIUM_AUDIENCE="TEALIUM_AUDIENCE",e.PRICE_OF_DISPLAYED_PAGE="PRICE_OF_DISPLAYED_PAGE",e.NUMBER_OF_VISITED_PAGES="NUMBER_OF_VISITED_PAGES",e.VISITED_PAGES="VISITED_PAGES",e.CUSTOM="CUSTOM",e.EXPLICIT_TRIGGER="EXPLICIT_TRIGGER",e.APPLICATION_VERSION="APPLICATION_VERSION"}(De||(De={})),function(e){e.Minute="MINUTE",e.Hour="HOUR",e.Day="DAY",e.Week="WEEK",e.Month="MONTH"}(Ee||(Ee={})),function(e){e.Ascending="asc",e.Descending="desc"}(Te||(Te={}));const Ie="localhost",Se=/^(\.?(([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}$/;class ke{static validateVersion(t){const i=t.split(".").map(e=>parseInt(e,10));for(;i.length<3;)i.push(0);return i.some(e=>isNaN(e))?m.Err(new w(e.KameleoonException.SemanticVersionParse,t)):m.Ok(i.slice(0,3))}static validateDomain(e){return e?(e=ke.checkAndTrimProtocol(e.toLowerCase()),Se.test(e)||e===Ie||I.error`The top-level domain ${e} 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.`,m.Ok(e)):m.Err()}static validateNetworkDomain(e){return e?(e=(e=ke.checkAndTrimProtocol(e.toLowerCase())).replace(/^\.+|\.+$/g,""),Se.test(e)||e===Ie?m.Ok(e):(I.error`The network domain ${e} is invalid.`,m.Err())):m.Err()}static checkAndTrimProtocol(e){const t=["http://","https://"];for(const i of t)if(e.startsWith(i)){e=e.substring(i.length),I.warning`The domain contains ${i}. Domain after protocol trimming: ${e}`;break}return e}}class Ve{static getNonce(e){let t="";for(let i=0;i<16;i++){const i=e.getRandomNumber(),a=Math.floor(16*i);t+="0123456789ABCDEF".charAt(a)}return t}static checkTargeting({segment:t,visitorCode:i,targetingData:a,experimentId:n,variationConfiguration:o,clientConfiguration:r,packageInfo:s,dataManager:u}){if(I.debug`CALL: checkTargeting(segment, visitorCode: ${i}, targetingData: ${a}, experimentId: ${n}, variationConfiguration, clientConfiguration, packageInfo, dataManager)`,!t||!t.conditionsData.firstLevel.length){const e=m.Ok(!0);return I.debug`RETURN checkTargeting(segment, visitorCode: ${i}, targetingData: ${a}, experimentId: ${n}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${e})`,e}if(!o){const t=m.Err(new w(e.KameleoonException.Initialization));return I.debug`RETURN checkTargeting(segment, visitorCode: ${i}, targetingData: ${a}, experimentId: ${n}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${t})`,t}let l={};const d=o.getStoredVariations(i);d.ok&&(l=d.data);const c=u.getTree(t);let g,h,p;c.hasTargetingType(De.SEGMENT)&&(g=u.trees,p=r.segments),c.hasTargetingType(De.TARGET_FEATURE_FLAG)&&(h=r.ruleMap);const v=c.evaluate({variationData:l,sdkInfo:s,segments:p,ruleMap:h,trees:g,targetingData:a,experimentId:n,visitorCode:i});return I.debug`RETURN checkTargeting(segment, visitorCode: ${i}, targetingData: ${a}, experimentId: ${n}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${v})`,v}static convertTimeUnit(t,i){return t/{[Ee.Minute]:e.Milliseconds.Minute,[Ee.Hour]:e.Milliseconds.Hour,[Ee.Day]:e.Milliseconds.Day,[Ee.Week]:e.Milliseconds.Week,[Ee.Month]:e.Milliseconds.Month}[i]}static isCustomData(t){return t.data.type===e.KameleoonData.CustomData}static compareSemVer({version:e,compareVersion:t,operator:i}){const a=ke.validateVersion(e),n=ke.validateVersion(t);if(!a.ok)return m.Err(a.error);if(!n.ok)return m.Err(n.error);const[o,r,s]=a.data,[u,l,d]=n.data,[c,g,h]=[o===u,r===l,s===d];switch(i){case fe.EQUAL:return m.Ok(c&&g&&h);case fe.GREATER:return m.Ok(o>u||c&&r>l||c&&g&&s>d);case fe.LOWER:return m.Ok(o<u||c&&r<l||c&&g&&s<d);default:I.error`Unknown version match type: ${i}`,R(i)}}static getVariationByHash(e,t){let i=0;for(const a of e)if(i+=a.exposition,i>=t)return a;return null}}class Re{static insertInOrderedListMutably({list:e,element:t,order:i}){if(e.includes(t))return;const a=e.findIndex(e=>i===Te.Ascending?e>=t:e<=t);-1===a?e.push(t):e.splice(a,0,t)}static insertVisitInOrderedListMutably({list:e,visit:t}){if(e.find(e=>"number"==typeof e?e===t.timeStarted:e.timeStarted===t.timeStarted))return;const i=e.findIndex(e=>"number"==typeof e?e>=t.timeStarted:e.timeStarted>=t.timeStarted);-1===i?e.push(t):e.splice(i,0,t),e.length>26&&e.splice(0,e.length-26)}}class we{constructor({urlAddress:t,title:i,referrers:a}){this.urlAddress=t,this.title=i,this.referrers=a,this.timestamps=[{time:Date.now(),status:e.TrackingStatus.Unsent}]}get url(){var e;if(!this.urlAddress)return"";const t=this.title?"&title="+encodeURIComponent(this.title):"",i=(null===(e=this.referrers)||void 0===e?void 0:e.length)?"&referrersIndices="+JSON.stringify(this.referrers):"";return"eventType=page&href="+encodeURIComponent(this.urlAddress)+t+i}get status(){const{[e.TrackingStatus.Sent]:t,[e.TrackingStatus.Unsent]:i,[e.TrackingStatus.Pending]:a}=this.timestamps.reduce((e,{status:t})=>(e[t]=!0,e),{[e.TrackingStatus.Sent]:!1,[e.TrackingStatus.Unsent]:!1,[e.TrackingStatus.Pending]:!1});return!t||i||a?a&&!i?e.TrackingStatus.Pending:e.TrackingStatus.Unsent:e.TrackingStatus.Sent}set status(e){this.timestamps=this.timestamps.map(t=>Object.assign(Object.assign({},t),{status:e}))}set _nonce(e){this.nonce=e}get data(){return{urlAddress:this.urlAddress,title:this.title,referrers:this.referrers,type:e.KameleoonData.PageView,timestamps:this.timestamps,status:this.status,nonce:this.nonce}}static _fromRaw(e){const{urlAddress:t,title:i,referrers:a,timestamps:n,nonce:o}=e,r=new we({urlAddress:t,title:i,referrers:a});return r.timestamps=n,o&&(r._nonce=o),r}static _updateFromVisit(t,i){const a=t.pageEvents;if(a)for(const t of a){let a=[];const{time:n}=t,{href:o,title:r,referrersIndices:s}=t.data;let u;if("number"==typeof s[0]&&(a=s),i.has(o)){const t=i.get(o).timestamps;u=new we({urlAddress:o,title:r,referrers:a}),u.timestamps=[...t,{time:n,status:e.TrackingStatus.Sent}]}else u=new we({urlAddress:o,title:r,referrers:a}),u.timestamps=[{time:n,status:e.TrackingStatus.Sent}];i.set(o,u)}}}let be=class t{constructor(i,a,...n){this._status=e.TrackingStatus.Unsent,this.isIdentifier=!1;const o="boolean"==typeof a;"number"==typeof i?this._index=i:(this._name=i,this._index=t.UNDEFINED_INDEX),this.overwrite=!o||a,this.value=o?n:[a,...n].filter(e=>null!=e)}get url(){if("number"!=typeof this._index)return"";const e=[...new Set(this.value)];let t={};e.forEach(e=>{t[e]=1});let i="";return this.isIdentifier&&(i="&mappingIdentifier="+String(!0)),"eventType=customData&index="+this._index+"&valuesCountMap="+encodeURIComponent(JSON.stringify(t))+"&overwrite="+String(this.overwrite)+i}get data(){return Object.assign(Object.assign({index:this._index},void 0!==this._name?{name:this._name}:{}),{value:this.value,type:e.KameleoonData.CustomData,isIdentifier:this.isIdentifier,status:this.status,overwrite:this.overwrite})}get status(){return this._isMappingIdentifier?e.TrackingStatus.Unsent:this._status}static _fromRaw(e){const{index:i,value:a,status:n,isIdentifier:o,name:r,overwrite:s}=e;let u;return r?(u=new t(r,null==s||s,...a),u.index=i):u=new t(i,null==s||s,...a),u.status=n,u._isMappingIdentifier=o,u}set _isMappingIdentifier(e){this.isIdentifier=e}set status(e){this._status=e}static _updateFromVisit(e,i){var a;if(null===(a=e.customDataEvents)||void 0===a?void 0:a.length)for(let a=e.customDataEvents.length-1;a>=0;a--){const{index:n,valuesCountMap:o}=e.customDataEvents[a].data;i.has(n)||i.set(n,new t(n,...Object.keys(o)))}}set index(e){this._index=e}get index(){return this._index}get name(){return this._name}get values(){return this.value}};be.UNDEFINED_INDEX=-1;let Ae=class t{constructor({goalId:t,revenue:i=0,negative:a=!1,metadata:n}){this.goalId=t,this.revenue=i,this.negative=a,this.status=e.TrackingStatus.Unsent,this.id=Math.floor(1e6*Math.random()),this._metadata=n,this.assignedTime=Date.now()}set _id(e){this.id=e}set _nonce(e){this.nonce=e}static _fromInternal(e){var{assignedTime:i}=e,a=function(e,t){var i={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(i[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(a=Object.getOwnPropertySymbols(e);n<a.length;n++)t.indexOf(a[n])<0&&Object.prototype.propertyIsEnumerable.call(e,a[n])&&(i[a[n]]=e[a[n]])}return i}(e,["assignedTime"]);const n=new t(a);return void 0!==i&&(n.assignedTime=i),n}get url(){var e;return"eventType=conversion&goalId="+String(this.goalId)+"&revenue="+String(this.revenue)+"&negative="+String(this.negative)+((null===(e=this.metadata)||void 0===e?void 0:e.length)?"&metadata="+this._encodeMetadata():"")}get _metadata(){return this.metadata}set _metadata(e){this.metadata=e}get data(){var t;return{goalId:this.goalId,nonce:this.nonce,revenue:this.revenue,negative:this.negative,type:e.KameleoonData.Conversion,status:this.status,id:this.id,metadata:(null===(t=this.metadata)||void 0===t?void 0:t.map(e=>e.data))||void 0,assignedTime:this.assignedTime}}_encodeMetadata(){var e;return(null===(e=this.metadata)||void 0===e?void 0:e.length)?encodeURIComponent(JSON.stringify(this.metadata.reduce((e,t)=>(null==e[t.data.index]&&(e[t.data.index]=t.data.value),e),{}))):""}static _fromRaw(e){const{goalId:i,revenue:a,negative:n,status:o,id:r,nonce:s,metadata:u,assignedTime:l}=e,d=t._fromInternal({goalId:i,revenue:a,negative:n,metadata:t.parseMetadata(u),assignedTime:l});return d._id=r,d.status=o,s&&(d._nonce=s),d}static parseMetadata(e){return(null==e?void 0:e.map(e=>be._fromRaw(e)))||void 0}static _listFromVisit(i){var a,n;const o=[];if(!(null===(a=i.conversionEvents)||void 0===a?void 0:a.length))return[];if(null===(n=null==i?void 0:i.conversionEvents)||void 0===n?void 0:n.length)for(const a of i.conversionEvents){const{goalId:i,revenue:n,negative:r}=a.data,s=t._fromInternal({goalId:i,revenue:n,negative:r,assignedTime:a.time});s.status=e.TrackingStatus.Sent,o.push(s)}return o}static _updateFromVisit(i,a){var n;if(null===(n=i.conversionEvents)||void 0===n?void 0:n.length)for(const n of i.conversionEvents){const{goalId:i}=n.data;if(!a.has(i)){const o=t._fromInternal({goalId:i,assignedTime:n.time});o.status=e.TrackingStatus.Sent,a.set(i,o)}}}},Ke=class t{constructor(t,i){this.browser=t,this.version=i,this.status=e.TrackingStatus.Unsent}get url(){if(!this.browser)return"";const e=this.version?F+this.version:"";return N+j+this.browser+$+ue[this.browser]+e}get data(){return{browser:this.browser,type:e.KameleoonData.Browser,version:this.version,status:this.status}}static _fromRaw(e){const{browser:i,version:a,status:n}=e,o=new t(i,a);return o.status=n,o}static _fromVisit(e){if(!e.staticDataEvent)return;const{browser:i,browserIndex:a,browserVersion:n}=e.staticDataEvent.data;if(i||"number"==typeof a){const e=null!=i?i:le[a];return n?new t(e,n):new t(e)}}},Oe=class t{constructor(t){this.device=t,this.status=e.TrackingStatus.Unsent}get url(){return this.device?N+M+this.device:""}get data(){return{device:this.device,type:e.KameleoonData.Device,status:this.status}}static _fromRaw(e){const{device:i,status:a}=e,n=new t(i);return n.status=a,n}static _fromVisit(e){var i;if(null===(i=e.staticDataEvent)||void 0===i?void 0:i.data.deviceType)return new t(e.staticDataEvent.data.deviceType)}},xe=class t{constructor(t){this.operatingSystem=t,this.status=e.TrackingStatus.Unsent}get url(){return this.operatingSystem?N+B+this.operatingSystem+z+re[this.operatingSystem]:""}get data(){return{operatingSystem:this.operatingSystem,type:e.KameleoonData.OperatingSystem,status:this.status}}static _fromRaw(e){const{operatingSystem:i,status:a}=e,n=new t(i);return n.status=a,n}static _fromVisit(e){if(!e.staticDataEvent)return;const{os:i,osIndex:a}=e.staticDataEvent.data;if(i||"number"==typeof a){const e=null!=i?i:se[a];return new t(e)}}};class Ne{constructor({country:t,region:i,city:a,postalCode:n,coordinates:o}){this.country=t,this.region=i,this.city=a,this.postalCode=n,this.coordinates=o,this.status=e.TrackingStatus.Unsent}get url(){const e=this.region?"®ion="+encodeURIComponent(this.region):"",t=this.city?"&city="+encodeURIComponent(this.city):"",i=this.postalCode?"&postalCode="+encodeURIComponent(this.postalCode):"",a=this.coordinates?"&latitude="+this.coordinates[0]+"&longitude="+this.coordinates[1]:"";return"eventType=geolocation&country="+encodeURIComponent(this.country)+e+t+i+a}get data(){return{type:e.KameleoonData.GeolocationData,country:this.country,region:this.region,city:this.city,postalCode:this.postalCode,coordinates:this.coordinates,status:this.status}}static _fromRaw(e){const{country:t,region:i,city:a,postalCode:n,coordinates:o,status:r}=e,s=new Ne({country:t,region:i,city:a,postalCode:n,coordinates:o});return s.status=r,s}static _fromVisit(e){var t;if(!(null===(t=e.geolocationEvents)||void 0===t?void 0:t.length))return;let i;for(const t of e.geolocationEvents){const{data:e}=t;e.country&&(i=e)}const{country:a,region:n,city:o}=i||{};return a?new Ne(n&&o?{country:a,region:n,city:o}:n?{country:a,region:n}:{country:a}):void 0}}class $e{constructor(t){this.status=e.TrackingStatus.Sent,this.visits=t,this._visitNumber=t.length?t.length-1:0}get visitNumber(){return this._visitNumber}get url(){return""}get data(){return{visits:this.visits,visitNumber:this._visitNumber,type:e.KameleoonData.VisitsData,status:this.status}}get isSent(){return!0}set timestamp(e){Re.insertVisitInOrderedListMutably({list:this.visits,visit:e}),this._visitNumber=this.visits.length?this.visits.length-1:0}updateVisitNumber(e){e>this._visitNumber&&(this._visitNumber=e)}}class Fe{constructor(t){this.kcs=t,this.status=e.TrackingStatus.Sent}get url(){return""}get data(){return{kcs:this.kcs,type:e.KameleoonData.KameleoonConversionScore,status:this.status}}}class Me{constructor(t,i,a=Date.now()){this.id=t,this.variationId=i,this.status=e.TrackingStatus.Sent,this.assignedTime=a}get url(){return""}get data(){return{id:this.id,variationId:this.variationId,type:e.KameleoonData.Personalization,status:e.TrackingStatus.Sent,assignedTime:this.assignedTime}}static _fromRaw(e){return new Me(e.id,e.variationId,e.assignedTime)}static _updateFromVisit(e,t){var i;if(null===(i=e.personalizationEvents)||void 0===i?void 0:i.length)for(const i of e.personalizationEvents){const{id:e,variationId:a}=i.data;if(!t.has(e)){const n=new Me(e,a,i.time);t.set(e,n)}}}}class Le{constructor(t){this.values=new Map(Object.entries(t).map(([e,t])=>[Number(e),this.extractVarIds(t)])),this.cbs=t,this.status=e.TrackingStatus.Sent}extractVarIds(e){const t=new Map;return Object.entries(e).forEach(([e,i])=>{t.has(i)||t.set(i,[]),t.get(i).push(Number(e))}),Array.from(t.entries()).sort(([e],[t])=>t-e).map(([,e])=>({ids:e.sort((e,t)=>e-t)}))}getValues(){return this.values}get url(){return""}get data(){return{cbs:this.cbs,type:e.KameleoonData.CBScores,status:this.status}}static _fromRaw(e){const t=new Le(e.cbs);return t.status=e.status,t}}class _e{constructor({filters:t,dataManager:i,visitorCode:a}){this.visitsData=new $e([]),this.visitorData=[],this.storageVisitorData=[],this.experimentData={},this.singleDataTypes={[e.KameleoonData.Device]:null,[e.KameleoonData.Browser]:null,[e.KameleoonData.GeolocationData]:null,[e.KameleoonData.OperatingSystem]:null,[e.KameleoonData.KameleoonConversionScore]:null,[e.KameleoonData.CBScores]:null},this.multipleDataTypes={[e.KameleoonData.CustomData]:new Map,[e.KameleoonData.PageView]:new Map,[e.KameleoonData.Conversion]:new Map,[e.KameleoonData.Personalization]:new Map},this.filters=t,this.dataManager=i,this.visitorDataTypes=i.getVisitorStoredDataTypes(a)}get data(){return{visitorData:this.visitorData,storageVisitorData:this.storageVisitorData,visitsData:this.visitsData,experimentData:this.experimentData}}processVisit(e){this.processBrowser(e),this.processDevice(e),this.processOperatingSystem(e),this.processGeolocationData(e),this.processCustomData(e),this.processConversion(e),this.processPageView(e),this.processExperiments(e),this.processPersonalization(e)}processMultipleDataTypes(){for(const[t,i]of Object.entries(this.multipleDataTypes))if(i.size)switch(t){case e.KameleoonData.PageView:this.visitorData.push(...i.values()),this.storageVisitorData.push(...i.values());break;case e.KameleoonData.Personalization:case e.KameleoonData.Conversion:this.storageVisitorData.push(...i.values());break;case e.KameleoonData.CustomData:i.forEach(e=>{this.visitorData.push(e),this.dataManager.storedCustomDataIndexes.has(e.data.index)||this.storageVisitorData.push(e)})}}processKcs(e){if(this.filters.kcs&&e){const t=new Fe(e);this.storageVisitorData.push(t)}}processVisitsData(e){var t;this.visitsData.timestamp={timeStarted:e.timeStarted,timeLastActivity:null!==(t=e.timeLastEvent)&&void 0!==t?t:e.timeStarted}}processVisitNumber(e,t){var i,a,n;if(this.visitsData.visitNumber<=t&&(null===(i=e.staticDataEvent)||void 0===i?void 0:i.data.visitNumber)){const i=null!==(n=null===(a=e.staticDataEvent)||void 0===a?void 0:a.data.visitNumber)&&void 0!==n?n:0;this.visitsData.updateVisitNumber(i+t)}}processCbs(e){if(this.filters.cbs&&e){const t=new Le(e);this.storageVisitorData.push(t)}}processBrowser(t){if(this.filters.browser&&!this.singleDataTypes[e.KameleoonData.Browser]){const i=Ke._fromVisit(t);i&&(this.visitorDataTypes.has(e.KameleoonData.Browser)||this.storageVisitorData.push(i),this.visitorData.push(i),this.singleDataTypes[e.KameleoonData.Browser]=i)}}processDevice(t){if(this.filters.device&&!this.singleDataTypes[e.KameleoonData.Device]){const i=Oe._fromVisit(t);i&&(this.visitorDataTypes.has(e.KameleoonData.Device)||this.storageVisitorData.push(i),this.visitorData.push(i),this.singleDataTypes[e.KameleoonData.Device]=i)}}processOperatingSystem(t){if(this.filters.operatingSystem&&!this.singleDataTypes[e.KameleoonData.OperatingSystem]){const i=xe._fromVisit(t);i&&(this.visitorDataTypes.has(e.KameleoonData.OperatingSystem)||this.storageVisitorData.push(i),this.visitorData.push(i),this.singleDataTypes[e.KameleoonData.OperatingSystem]=i)}}processGeolocationData(t){if(this.filters.geolocation&&!this.singleDataTypes[e.KameleoonData.GeolocationData]){const i=Ne._fromVisit(t);i&&(this.visitorDataTypes.has(e.KameleoonData.GeolocationData)||this.storageVisitorData.push(i),this.visitorData.push(i),this.singleDataTypes[e.KameleoonData.GeolocationData]=i)}}processCustomData(t){this.filters.customData&&be._updateFromVisit(t,this.multipleDataTypes[e.KameleoonData.CustomData])}processConversion(t){if(this.filters.conversions){Ae._updateFromVisit(t,this.multipleDataTypes[e.KameleoonData.Conversion]);const i=Ae._listFromVisit(t);i.length&&this.visitorData.push(...i)}}processPageView(t){this.filters.pageViews&&we._updateFromVisit(t,this.multipleDataTypes[e.KameleoonData.PageView])}processExperiments(t){if(this.filters.experiments&&t.experimentEvents)for(const i of t.experimentEvents){const{id:t,variationId:a}=i.data;this.experimentData[t]={variationId:a,isTargetedRule:!1,status:e.TrackingStatus.Unsent,assignedTime:i.time}}}processPersonalization(t){this.filters.personalization&&Me._updateFromVisit(t,this.multipleDataTypes[e.KameleoonData.Personalization])}processMappingIdentifier(e){var t,i;if(!e)return;const a=null===(i=null===(t=e.customDataEvents)||void 0===t?void 0:t.find(e=>e.data.mappingIdentifier))||void 0===i?void 0:i.time;return a&&e.visitorCode?{mappingIdentifier:e.visitorCode,timestamp:a}:void 0}}class Ue{static parseFeatureVariable(t){const{key:i,type:a,value:n}=t;switch(a){case e.VariableType.BOOLEAN:return m.Ok({key:i,type:a,value:Boolean(n)});case e.VariableType.JS:case e.VariableType.CSS:case e.VariableType.STRING:return m.Ok({key:i,type:a,value:String(n)});case e.VariableType.NUMBER:const o=Number(n);return Number.isNaN(o)?m.Err(new w(e.KameleoonException.NumberParse,String(n))):m.Ok({key:i,type:a,value:o});case e.VariableType.JSON:try{const e=JSON.parse(String(t.value));return m.Ok({key:i,type:a,value:e})}catch(t){return m.Err(new w(e.KameleoonException.JSONParse,t))}default:R(a)}}static parseVisitorData({data:e,filters:t,visitorCode:i,dataManager:a,variationConfiguration:n}){const o=new _e({filters:t,dataManager:a,visitorCode:i}),{currentVisit:r,previousVisits:s,kcs:u,cbs:l}=e;if(!(null==s?void 0:s.length)&&!r)return{visitorData:[],storageVisitorData:[],visitsData:new $e([])};r&&(o.processVisit(r),o.processVisitNumber(r,0)),null==s||s.forEach((e,t)=>{o.processVisit(e),o.processVisitsData(e),o.processVisitNumber(e,t+1)}),o.processKcs(u),o.processCbs(l),o.processMultipleDataTypes();const d=o.processMappingIdentifier(null!=r?r:null==s?void 0:s[0]),{visitorData:c,storageVisitorData:g,visitsData:h,experimentData:p}=o.data;return n.updateStoredVariations(i,p),{visitorData:c,storageVisitorData:g,visitsData:h,mappingIdentifier:d}}static parseRegExp(e){if("/"===e[0]){const[t,i,a]=e.split("/");return new RegExp(i,a)}return new RegExp(e)}static parseSecret(e){if(null===e)return"null";const t=e.length;if(t<=4)return"*".repeat(t);const i=Math.max(t-4,4);return e.substring(0,t-i)+"*".repeat(i)}}class Pe{constructor({updateInterval:t,urlProvider:i,storage:a,requester:n,dataManager:o,eventSource:s,externalVisitorCodeManager:u,eventManager:l,externalPackageInfo:d,defaultDataFile:c}){this.updateConfigurationIntervalId=null,this.updateType=r.Polling,this.configurationData=y,this.featureFlagsData=new Map,this.isTargetedDeliveryRule=null,this.segmentsData=null,this.holdoutData=null,this.meGroupsData=new Map,this.mappedRules=null,this.mappedExperiments=null,this.usedDefaultDataFile=!1,this.refreshDataFileIfStalePromise=null,this.blockingBehaviourMode=g.PartiallyBlocked,this.cachedDataFile=null,this.CACHE_REVALIDATE_PERIOD=90*e.Milliseconds.Minute,this.urlProvider=i,this.requester=n,this.updateInterval=t,this.lastUpdate=new Date,this.storage=a,this.dataManager=o,this.eventManager=l,this.visitorCodeManager=u,this.eventSource=s,this.externalPackageInfo=d,this.defaultDataFile=c}initialize(){return f(this,0,void 0,function*(){if(I.debug("CALL: ClientConfiguration.initialize()"),this.readStorageData(),this.checkShouldUpdate()){const e=yield this.updateClientConfiguration();if(!e.ok)return I.error("Error occurred during client configuration update"),e;if(e.data)return I.debug("RETURN: ClientConfiguration.initialize()"),m.Ok()}return this.updateType!==r.RealTime||this.eventSource.isOpen?(this.updateType===r.Polling&&this.handlePollingUpdates(),I.debug("RETURN: ClientConfiguration.initialize()"),m.Ok()):(this.handleRealTimeUpdates(),I.debug("RETURN: ClientConfiguration.initialize()"),m.Ok())})}refreshDataFileIfStale(){if(!this.checkShouldUpdate())return Promise.resolve(m.Ok(!1));if(!this.refreshDataFileIfStalePromise){const e=this.fetchClientConfiguration().then(e=>e.ok?m.Ok(!0):e).finally(()=>{this.refreshDataFileIfStalePromise===e&&(this.refreshDataFileIfStalePromise=null)});this.refreshDataFileIfStalePromise=e}return this.refreshDataFileIfStalePromise}cleanupHandlers(){this.eventSource.isOpen&&this.eventSource.close(),this.updateConfigurationIntervalId&&clearInterval(this.updateConfigurationIntervalId)}handleRealTimeUpdates(){this.cleanupHandlers(),this.eventSource.open(t=>{this.updateClientConfiguration(t).then(i=>{i.ok&&this.eventManager.fireEvent(e.EventType.ConfigurationUpdate,{timestamp:t})})}),this.eventSource.onError(e=>{I.error`Error occurred during real-time update: ${e}. Switching to polling updates while the connection is not restored.`,this.updateType=r.Polling,this.handlePollingUpdates()})}handlePollingUpdates(){this.cleanupHandlers();try{const e=this.lastUpdate.getTime(),t=Date.now(),i=Math.max(this.updateInterval-(t-e),0);setTimeout(()=>f(this,0,void 0,function*(){yield this.updateClientConfiguration(),this.updateConfigurationIntervalId=setInterval(this.updateClientConfiguration.bind(this),this.updateInterval)}),i)}catch(e){throw this.updateConfigurationIntervalId&&clearInterval(this.updateConfigurationIntervalId),e}}get featureFlags(){return this.featureFlagsData}get dataFile(){if(this.cachedDataFile)return this.cachedDataFile;const e={featureFlags:new Map,dateModified:this.dateModified};return this.featureFlagsData.forEach((t,i)=>{const a=new Map;t.variations.forEach(e=>{var i;const n=new Map;e.variables.forEach(e=>{try{const t=Ue.parseFeatureVariable(e).throw();n.set(e.key,t)}catch(i){I.error`Error parsing variable ${e.key} of feature flag ${t.featureKey}: ${i}`}}),a.set(e.key,{name:null!==(i=e.name)&&void 0!==i?i:"",key:e.key,id:null,experimentId:null,variables:n})});const n=t.rules.map(e=>{const t=new Map;return e.variationByExposition.forEach(i=>{const n=a.get(i.variationKey);n&&t.set(n.key,{name:n.name,key:n.key,id:i.variationId,experimentId:e.experimentId,variables:n.variables})}),{variations:t}});e.featureFlags.set(i,{variations:a,environmentEnabled:t.environmentEnabled,rules:n,defaultVariationKey:t.defaultVariationKey})}),this.cachedDataFile=e,e}get configuration(){return this.configurationData.configuration}get dateModified(){var e;return null!==(e=this.configurationData.dateModified)&&void 0!==e?e:0}get segments(){if(this.segmentsData)return this.segmentsData;const e=new Map;return this.featureFlagsData.forEach(t=>{t.rules.forEach(t=>{t.segment&&!e.has(t.segment.id.toString())&&e.set(t.segment.id.toString(),t.segment)})}),this.segmentsData=e,e}get ruleMap(){var e;if(null===(e=this.mappedRules)||void 0===e?void 0:e.size)return this.mappedRules;const t=new Map;for(const e of this.featureFlags.values())for(const i of e.rules){const{id:a,experimentId:n,variationByExposition:o}=i,r=new Map;o.forEach(({variationKey:e,variationId:t})=>{"number"==typeof t&&r.set(e,t)}),t.set(a,{featureId:e.id,experimentId:n,variations:r})}return this.mappedRules=t,t}get experimentMap(){var e;if(null===(e=this.mappedExperiments)||void 0===e?void 0:e.size)return this.mappedExperiments;const t=new Map;for(const e of this.featureFlags.values()){const i=this.hasFeatureFlagVariableJsCss(e);for(const a of e.rules){const{experimentId:e,variationByExposition:n}=a,o=new Map;n.forEach(({variationKey:e,variationId:t})=>{"number"==typeof t&&o.set(e,t)}),t.set(e,{type:a.type,variations:o,hasJsCssVariables:i})}}return this.mappedExperiments=t,t}hasFeatureFlagVariableJsCss(t){var i;return Boolean(null===(i=t.variations[0])||void 0===i?void 0:i.variables.some(({type:t})=>t===e.VariableType.JS||t===e.VariableType.CSS))}get holdout(){return this.holdoutData}get meGroups(){return this.meGroupsData}get isConsentRequired(){return this.configuration.consentType===c.Required}get consentBlockingBehaviour(){return this.blockingBehaviourMode}get hasAnyTargetedDeliveryRule(){if(null!==this.isTargetedDeliveryRule)return this.isTargetedDeliveryRule;for(const e of this.featureFlags.values())if(e.environmentEnabled&&e.rules.some(e=>e.type===s.TARGETED_DELIVERY))return!0;return!1}checkShouldUpdate(){const{configuration:e}=this.configurationData;return this.updateType=e.realTimeUpdate?r.RealTime:r.Polling,!this.featureFlags.size||this.lastUpdate.getTime()<Date.now()-this.updateInterval}readStorageData(){var e,t,i;I.debug("CALL: ClientConfiguration.readStorageData()");const a=this.storage.read();if(a.ok){let{data:n,lastUpdate:o,lastModified:r,requestTime:s}=a.data,u=!1;if(this.defaultDataFile)try{const a=JSON.parse(this.defaultDataFile);this.defaultDataFile=void 0,this.usedDefaultDataFile=!0;const o=null!==(t=null!==(e=n.dateModified)&&void 0!==e?e:s)&&void 0!==t?t:-1,r=null!==(i=a.dateModified)&&void 0!==i?i:0;(!s||r>o)&&(n=a,u=!0)}catch(e){I.error`Error parsing default data file: ${String(e)}`}this.updateConfigurationData(n,u),this.lastUpdate=this.usedDefaultDataFile?new Date(0):new Date(Date.parse(o)),this.lastModified=r,this.requestTime=s}I.debug`RETURN: ClientConfiguration.readStorageData() -> (result: ${a.ok})`}updateClientConfiguration(e){return f(this,0,void 0,function*(){const t=Date.now();if(this.usedDefaultDataFile)return this.updateClientConfigurationInBackground(),m.Ok(!1);if(this.requestTime&&!e&&!this.externalPackageInfo.isServer){if(t-this.requestTime<=this.CACHE_REVALIDATE_PERIOD)return this.updateClientConfigurationInBackground(),m.Ok(!1);I.debug`Cached configuration data has expired. Fetching fresh data.`}return this.fetchClientConfiguration(e)})}fetchClientConfiguration(e){return f(this,0,void 0,function*(){const t=yield this.requester.getClientConfiguration(e,this.lastModified);return this.applyNewConfigurationDataFromResponse(t)})}updateClientConfigurationInBackground(){setTimeout(()=>f(this,0,void 0,function*(){const e=yield this.requester.getClientConfiguration(void 0,this.lastModified);yield this.applyNewConfigurationDataFromResponse(e)}),0)}applyNewConfigurationDataFromResponse(e){var t,i;return f(this,0,void 0,function*(){if(this.requestTime=Date.now(),!e.ok)return this.featureFlags.size?(I.error("Error occurred while updating configuration. Existing configuration will be used as a fallback."),m.Ok(!0)):e;if(void 0===e.data.configuration)return this.updateStorageData(),m.Ok(!1);const a=e.data.configuration;this.updateConfigurationData(a,!0),this.dataManager.clearTrees(),null===(t=this.mappedRules)||void 0===t||t.clear(),null===(i=this.experimentMap)||void 0===i||i.clear(),this.isTargetedDeliveryRule=null,e.data.lastModified&&(this.lastModified=e.data.lastModified);const n=this.updateStorageData();if(!n.ok)return n;const o=a.configuration.realTimeUpdate?r.RealTime:r.Polling,s=o!==this.updateType;return s&&(this.updateType=o,I.info`Configuration update type was toggled to ${r[o]}`,yield this.initialize()),this.blockingBehaviourMode=this.consentBlockingBehaviourFromStr(a.configuration.consentOptOutBehavior),m.Ok(s)})}updateConfigurationData(e,t=!0){const{configuration:i,featureFlags:a,customData:n,holdout:o,segments:r,dateModified:s}=e;let u=r?new Map(r.map(e=>[e.id.toString(),e])):null,l=null;if(t&&(null==n?void 0:n.length)){l=new Map;for(let e of n){if(void 0===e.id){l=null;break}l.set(e.id,e.index)}}const d=new Map;for(const e of a)d.set(e.featureKey,e),t&&(this.updateFeatureFlagSegments(e,u),this.updateFeatureFlagBucketingCustomDataId(e,l));this.featureFlagsData=d,(null==n?void 0:n.length)&&(this.dataManager.customDataIndexes=n),this.meGroupsData=this.makeMEGroups(a),this.holdoutData=null!=o?o:null,this.configurationData={configuration:i,customData:n,holdout:o,dateModified:s},this.urlProvider.dataApiDomain=e.configuration.dataApiDomain,this.updateConsentRequired(),this.segmentsData=u,this.cachedDataFile=null}updateFeatureFlagSegments(e,t){null!==t&&e.rules.forEach(e=>{var i;const a=e.segmentId;e.segment=null==a?null:null!==(i=t.get(a.toString()))&&void 0!==i?i:null})}updateFeatureFlagBucketingCustomDataId(e,t){const i=e.bucketingCustomDataId;null!=i&&t&&(e.bucketingCustomDataIndex=t.get(i))}makeMEGroups(e){const t=new Map;e.forEach(e=>{const i=e.mutuallyExclusiveGroup;if(i){let a=t.get(i);a?a.push(e):t.set(i,[e])}});const i=new Map;return t.forEach((e,t)=>{i.set(t,new S(e))}),i}updateStorageData(){this.lastUpdate=new Date;const e={data:Object.assign(Object.assign({},this.configurationData),{featureFlags:Array.from(this.featureFlags.values()),segments:this.segmentsData?Array.from(this.segmentsData.values()):void 0}),lastUpdate:this.lastUpdate.toString(),lastModified:this.lastModified,requestTime:this.requestTime};return this.storage.write(e)}updateConsentRequired(){this.visitorCodeManager.consentRequired=this.isConsentRequired&&!this.hasAnyTargetedDeliveryRule}consentBlockingBehaviourFromStr(e){return e===g.PartiallyBlocked||e===g.CompletelyBlocked?e:(I.error(`Unexpected consent blocking type '${e}'`),g.PartiallyBlocked)}}var Ge;class Be{constructor(t,i){I.debug`CALL: new ClientSettings(siteCode: ${t}, configuration: ${i})`,this.siteCode=t,this.environment=this.getEnvironment(i),this.networkDomain=this.getNetworkDomain(i),this.updateInterval=this.getUpdateInterval(i),this.cleanupInterval=this.getCleanupInterval(i),this.requestTimeout=this.getRequestTimeout(i),this.trackingInterval=this.getTrackingInterval(i),this.trackRetryDelay=5*e.Milliseconds.Second,I.debug`RETURN: new ClientSettings(siteCode: ${t}, configuration: ${i})`}getTrackingInterval(e){const{MIN_TRACKING_INTERVAL_MS:t,MAX_TRACKING_INTERVAL_MS:i,DEFAULT_TRACKING_INTERVAL_MS:a}=Be;return"number"==typeof(null==e?void 0:e.trackingInterval)?e.trackingInterval<t?(I.warning(`Tracking interval must not be shorter than ${t} ms. Minimum possible interval was applied.`),t):e.trackingInterval>i?(I.warning(`Tracking interval must not be longer than ${i} ms. Maximum possible interval was applied.`),i):e.trackingInterval:a}getEnvironment(t){return(null==t?void 0:t.environment)?t.environment:e.Environment.Production}getCleanupInterval(t){return"number"==typeof(null==t?void 0:t.targetingDataCleanupInterval)?t.targetingDataCleanupInterval<1?(I.warning("Targeting data cleanup interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*e.Milliseconds.Minute):t.targetingDataCleanupInterval*e.Milliseconds.Minute:null}getUpdateInterval(t){return"number"==typeof(null==t?void 0:t.updateInterval)?t.updateInterval<1?(I.warning("Update interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*e.Milliseconds.Minute):t.updateInterval*e.Milliseconds.Minute:60*e.Milliseconds.Minute}getNetworkDomain(e){const t=ke.validateNetworkDomain(null==e?void 0:e.networkDomain);return t.ok?t.data:null}getRequestTimeout(t){return"number"==typeof(null==t?void 0:t.requestTimeout)?t.requestTimeout:10*e.Milliseconds.Second}get settings(){return{trackingInterval:this.trackingInterval,trackRetryDelay:this.trackRetryDelay,cleanupInterval:this.cleanupInterval,updateInterval:this.updateInterval,requestTimeout:this.requestTimeout,networkDomain:this.networkDomain,environment:this.environment,siteCode:this.siteCode}}}Ge=Be,Be.DEFAULT_TRACKING_INTERVAL_MS=1e3,Be.MIN_TRACKING_INTERVAL_MS=Ge.DEFAULT_TRACKING_INTERVAL_MS,Be.MAX_TRACKING_INTERVAL_MS=5e3;const ze="off",je="warehouseAudiences";var He;e.SdkLanguageType=void 0,(He=e.SdkLanguageType||(e.SdkLanguageType={})).ANDROID="ANDROID",He.IOS="IOS",He.JAVA="JAVA",He.CSHARP="CSHARP",He.NODEJS="NODEJS",He.PHP="PHP",He.RUBY="RUBY",He.GO="GO",He.FLUTTER="FLUTTER",He.REACT="REACT",He.PYTHON="PYTHON",He.JAVASCRIPT="JAVASCRIPT",He.RUST="RUST";const qe={previousVisitAmount:1,currentVisit:!0,customData:!0,pageViews:!1,geolocation:!1,device:!1,browser:!1,operatingSystem:!1,conversions:!1,experiments:!1,kcs:!1,visitorCode:!0,personalization:!1};let We=class t{constructor(t){this.cookie=t,this.status=e.TrackingStatus.Sent}static fromString(e){if(!e)return new t([]);const i=e.split(";").map(t=>{const[i,a]=t.trim().split("=");return i?{key:i,value:a}:(I.warning`Cookie string has an empty key: ${e}`,null)}).filter(e=>null!==e);return new t(i)}get url(){return""}get data(){return{cookie:this.cookie,type:e.KameleoonData.Cookie,status:this.status}}};class Ye{constructor(t){this._value=t,this.status=e.TrackingStatus.Sent}get url(){return""}get data(){return{value:this._value,type:e.KameleoonData.UniqueIdentifier,status:e.TrackingStatus.Sent}}static _fromRaw(e){return new Ye(e.value)}}class Xe{constructor(e=null,t){this.cleanupInterval=e,this.packageInfo=t}mutUpdateData({infoData:t,visitorCode:i,mutData:a,dataItem:n,extendTtl:o}){let r,{visitorReference:s,data:u,isReference:l}=this.dereferenceData(a,i);switch(this.packageInfo.isServer&&l&&!a[s]&&(t.mappingIdentifiers&&delete t.mappingIdentifiers[i],delete a[i],s=i),o&&(r=this.cleanupInterval?Date.now()+this.cleanupInterval:0),n.data.type){case e.KameleoonData.CustomData:this.updateCustomData({expirationTime:r,customData:n,visitorCode:s,mutData:u});break;case e.KameleoonData.PageView:this.updatePageView({expirationTime:r,pageView:n,visitorCode:s,mutData:u});break;case e.KameleoonData.Conversion:this.updateConversion({expirationTime:r,conversion:n,visitorCode:s,mutData:u});break;case e.KameleoonData.VisitsData:this.updateVisitsData({expirationTime:r,visitsData:n,visitorCode:s,mutData:u});break;case e.KameleoonData.Personalization:this.updatePersonalization({expirationTime:r,personalization:n,visitorCode:s,mutData:u});break;case e.KameleoonData.TargetedSegment:this.updateTargetedSegment({expirationTime:r,targetedSegment:n,visitorCode:s,mutData:u});break;default:this.updateCommonData({expirationTime:r,commonData:n,visitorCode:s,mutData:u})}return r}mutCleanupData(t,i){var a;if(!this.cleanupInterval)return null;let n=0;for(const[o,r]of Object.entries(t)){if("string"==typeof r){this.removeReference({mutData:t,visitorCode:o,linkedVisitor:r,infoData:i});continue}let s=0;for(const t of Object.keys(r)){const i=t;let a;switch(i){case e.KameleoonData.CustomData:case e.KameleoonData.PageView:case e.KameleoonData.Conversion:case e.KameleoonData.Personalization:a=this.deleteNestedExpiredField(r,i);break;default:a=this.deleteExpiredField(r,i)}(!s||a&&a<s)&&(s=a)}Object.keys(t[o]).length?(!n||s&&s<n)&&(n=s):(delete t[o],this.packageInfo.isServer&&(null!==(a=i.mappingIdentifiers)&&void 0!==a||(i.mappingIdentifiers={}),delete i.mappingIdentifiers[o]))}return n}mutAddUnsentData({mutData:e,visitorCode:t,dataType:i}){const a=e.unsentData[t];if(a&&a.length){const n=new Set([...a]);n.add(i),e.unsentData[t]=Array.from(n)}else e.unsentData[t]=[i]}createReference({mutData:e,visitorCode:t,linkedVisitor:i}){e[i]=t}removeReference({mutData:e,visitorCode:t,linkedVisitor:i,infoData:a}){this.packageInfo.isServer&&(e[i]||(delete e[t],a.mappingIdentifiers&&delete a.mappingIdentifiers[t]))}updatePageView({visitorCode:t,mutData:i,pageView:a,expirationTime:n}){const{data:o}=a,r=i[t]&&e.KameleoonData.PageView in i[t]&&o.urlAddress in i[t][e.KameleoonData.PageView],s={expirationTime:n,visitorCode:t,data:i,key:e.KameleoonData.PageView,nestedKey:o.urlAddress,value:o};if(r){const a=i[t][e.KameleoonData.PageView][o.urlAddress].timestamps;for(const e of a){const{time:t}=e;if(o.timestamps.some(({time:e})=>e===t))continue;const i=o.timestamps.findIndex(({time:e})=>e>=t);-1===i?o.timestamps.push(e):o.timestamps.splice(i,0,e)}this.updateNestedField(s)}else this.createNestedField(s)}updateCustomData({visitorCode:t,customData:i,mutData:a,expirationTime:n}){const{data:o}=i,r=a[t]&&e.KameleoonData.CustomData in a[t],s={expirationTime:n,visitorCode:t,data:a,key:e.KameleoonData.CustomData,nestedKey:o.index.toString(),value:o};r?this.updateNestedField(s):this.createNestedField(s)}updateConversion({conversion:t,mutData:i,visitorCode:a,expirationTime:n}){const{data:o}=t,r=i[a]&&e.KameleoonData.Conversion in i[a],s={expirationTime:n,visitorCode:a,data:i,key:e.KameleoonData.Conversion,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(s):this.createNestedField(s)}updateVisitsData({visitorCode:t,mutData:i,visitsData:a,expirationTime:n}){var o,r;const{data:s}=a,u=i[t]&&e.KameleoonData.VisitsData in i[t],l={expirationTime:n,data:i,key:e.KameleoonData.VisitsData,value:s,visitorCode:t};if(u){const a=i[t][e.KameleoonData.VisitsData];a.visits.forEach(e=>{Re.insertVisitInOrderedListMutably({list:s.visits,visit:e})});const n=Math.max(null!==(o=s.visitNumber)&&void 0!==o?o:s.visits.length-1,s.visits.length-1,null!==(r=a.visitNumber)&&void 0!==r?r:0);this.updateField(Object.assign(Object.assign({},l),{value:Object.assign(Object.assign({},s),{visits:s.visits,visitNumber:n})}))}else this.createField(l)}updatePersonalization({visitorCode:t,mutData:i,personalization:a,expirationTime:n}){const{data:o}=a,r=i[t]&&e.KameleoonData.Personalization in i[t],s={expirationTime:n,visitorCode:t,data:i,key:e.KameleoonData.Personalization,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(s):this.createNestedField(s)}updateTargetedSegment({visitorCode:t,mutData:i,targetedSegment:a,expirationTime:n}){const{data:o}=a,r=i[t]&&e.KameleoonData.TargetedSegment in i[t],s={expirationTime:n,visitorCode:t,data:i,key:e.KameleoonData.TargetedSegment,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(s):this.createNestedField(s)}updateCommonData({visitorCode:e,mutData:t,commonData:i,expirationTime:a}){const{data:n}=i,o=t[e]&&n.type in t[e],r={expirationTime:a,data:t,key:n.type,visitorCode:e,value:n};o?this.updateField(r):this.createField(r)}dereferenceData(e,t){return"string"==typeof e[t]?{visitorReference:e[t],data:e,isReference:!0}:{visitorReference:t,data:e,isReference:!1}}deleteExpiredField(e,t){if(!e)return 0;const i=t;return e[i].expirationTime<Date.now()?(delete e[i],0):e[i].expirationTime}deleteNestedExpiredField(e,t){if(!e[t])return 0;const i=e[t];let a;for(const[e,t]of Object.entries(i))t&&(t.expirationTime<Date.now()?delete i[e]:(!a||t.expirationTime<a)&&(a=t.expirationTime));return Object.keys(i).length||delete e[t],a}updateField({key:e,value:t,data:i,visitorCode:a,expirationTime:n}){var o;const r=i[a][e];i[a][e]=Object.assign(Object.assign({},t),{expirationTime:null!==(o=null!=n?n:r.expirationTime&&r.expirationTime)&&void 0!==o?o:Date.now()})}createField({key:e,value:t,data:i,visitorCode:a,expirationTime:n}){i[a]=Object.assign(Object.assign({},i[a]),{[e]:Object.assign(Object.assign({},t),{expirationTime:n})})}updateNestedField({key:e,nestedKey:t,value:i,data:a,visitorCode:n,expirationTime:o}){var r;const s=a[n][e][t];a[n][e][t]=Object.assign(Object.assign({},i),{expirationTime:null!==(r=null!=o?o:null==s?void 0:s.expirationTime)&&void 0!==r?r:Date.now()})}createNestedField({key:e,nestedKey:t,value:i,data:a,visitorCode:n,expirationTime:o}){var r;(null===(r=a[n])||void 0===r?void 0:r[e])?a[n]=Object.assign(Object.assign({},a[n]),{[e]:Object.assign(Object.assign({},a[n][e]),{[t]:Object.assign(Object.assign({},i),{expirationTime:o})})}):a[n]=Object.assign(Object.assign({},a[n]),{[e]:{[t]:Object.assign(Object.assign({},i),{expirationTime:o})}})}}class Je{constructor({browserType:e,visitNumber:t,timeSincePreviousVisit:i,os:a,deviceType:n,browserVersion:o}){this.browserType=e,this.visitNumber=t,this.timeSincePreviousVisit=i,this.os=a,this.deviceType=n,this.browserVersion=o}get url(){const e=this.browserVersion?F+this.browserVersion:"",t=this.browserType?j+this.browserType:"",i=this.browserType?$+ue[this.browserType]:"",a=this.os?B+this.os:"",n=this.os?z+re[this.os]:"",o=this.deviceType?M+this.deviceType:"",r=void 0!==this.visitNumber?"&visitNumber="+this.visitNumber:"",s=void 0!==this.timeSincePreviousVisit?"&timeSincePreviousVisit="+this.timeSincePreviousVisit:"";return N+t+i+e+r+s+a+n+o}}class Qe{static setConditionFactoryInstance(e){this.conditionFactoryInstance=e}static createCondition(e){return this.conditionFactoryInstance.createCondition(e)}}class Ze{constructor(e,t,i){var a;if(this.inverseResult=!1,this.isOperator(e))this.nodeValue=e;else{const t=Qe.createCondition(e);this.inverseResult=!(null===(a=e.isInclude)||void 0===a||a),t.ok?this.nodeValue=t.data:this.nodeError=t.error}this.leftChild=t,this.rightChild=i}get value(){return this.nodeValue}get error(){return this.nodeError}get left(){return this.leftChild}get right(){return this.rightChild}get inverse(){return this.inverseResult}isOperator(e){return e===de.And||e===de.Or}}class et{constructor(e){this.error=null,this.targetingTypes=new Set,I.debug`CALL: new Tree(segment: ${e})`;const{nestedConditions:t,topLevelOperators:i}=this.flattenSegment(e),a=t.map(({conditions:e,operators:t})=>{const i=e.map(e=>(this.targetingTypes.add(e.targetingType),new Ze(e)));return this.buildTree(i,t)});this.tree=this.buildTree(a,i),I.debug`RETURN: new Tree(segment: ${e})`}evaluate(e){const t=this.evaluateNode(this.tree,e);return this.error?m.Err(this.error):m.Ok(t)}hasTargetingType(e){return this.targetingTypes.has(e)}evaluateNode(t,i){if(this.isLeafNode(t)){if(t.error)return t.error.type===e.KameleoonException.TargetingCondition;const a=t.value.evaluate(i);return a.ok?t.inverse?!a.data:a.data:(this.error=a.error,!1)}if(this.isNonLeafNode(t))switch(t.value){case de.And:return this.evaluateNode(t.left,i)&&this.evaluateNode(t.right,i);case de.Or:return this.evaluateNode(t.left,i)||this.evaluateNode(t.right,i)}return!1}isLeafNode(e){return!Boolean(e.left&&e.right)}isNonLeafNode(e){return Boolean(e.left&&e.right&&(e.value===de.Or||e.value===de.And))}buildTree(e,t){if(1===e.length)return e[0];for(const i of t){const t=e.shift(),a=e.shift(),n=new Ze(i,t,a);e.unshift(n)}return e[0]}flattenSegment(e){const{firstLevel:t,firstLevelOrOperators:i}=e.conditionsData,a=[];return t.forEach(e=>{const{conditions:t,orOperators:i}=e,n={operators:this.convertOperators(i),conditions:t};a.push(n)}),{topLevelOperators:this.convertOperators(i),nestedConditions:a}}convertOperators(e){return e.map(e=>e?de.Or:de.And)}}function tt({targetingData:t,sdkInfo:i},a,n){var o;const r=null==t?void 0:t[e.KameleoonData.VisitsData];if(!(null===(o=null==r?void 0:r.visits)||void 0===o?void 0:o.length)||null==a&&null==n)return 0;const{visits:s}=r;let u=1;a!==ye.CURRENT_VISIT&&(u=null!=n?i.isServer?n-1:n:s.length);const l=s[Math.max(0,s.length-u)];return"number"==typeof l?l:l.timeStarted}class it{constructor({campaignType:e,visitCount:t,visitScope:i}){this.campaignType=e,this.visitCount=t,this.visitScope=i}evaluate(e){return m.Ok(this.checkCondition(e))}checkCondition(e){const t=tt(e,this.visitScope,this.visitCount);switch(this.campaignType){case ve.Experiment:return this.checkExperiment(e,t);case ve.Personalization:return this.checkPersonalization(e,t);case ve.Any:return this.checkPersonalization(e,t)&&this.checkExperiment(e,t);default:return!1}}checkExperiment(e,t){const i=Object.keys(e.variationData);let a=0,n=null;for(const o of i){const i=e.variationData[o];if((!(null==i?void 0:i.assignedTime)||i.assignedTime>=t)&&(a++,n=o,a>1))break}return 0===a||1===a&&null!==e.experimentId&&n===String(e.experimentId)}checkPersonalization(e,t){var i;const a=Object.values((null===(i=e.targetingData)||void 0===i?void 0:i.personalization)||{});for(const e of a)if((null==e?void 0:e.assignedTime)&&e.assignedTime>=t)return!1;return!0}}class at{constructor({device:e}){this.device=e}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.Device];if(i){const{device:e}=i;return m.Ok(e===this.device)}return m.Ok(!1)}}class nt{constructor({browser:e,version:t,versionMatchType:i}){this.browser=e,this.version=t,this.versionMatchType=i}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.Browser];if(i){const e=this.checkCondition(i);return this.error?m.Err(this.error):m.Ok(e)}return m.Ok(!1)}checkCondition(t){const{browser:i,version:a}=t;if("string"!=typeof this.browser)return!1;if(!this.version)return i===this.browser;if(!this.versionMatchType||"number"!=typeof a)return!1;const n=parseFloat(this.version);switch(isNaN(n)&&(I.error`Failed to parse version: ${this.version} in Browser condition`,this.error=new w(e.KameleoonException.VersionParse,this.version)),this.versionMatchType){case fe.EQUAL:return i===this.browser&&a===n;case fe.GREATER:return i===this.browser&&a>n;case fe.LOWER:return i===this.browser&&a<n;default:I.error`Unexpected comparing operation for Browser condition: ${this.versionMatchType}`,R(this.versionMatchType)}}}class ot{constructor({goalId:e,visitCount:t,visitScope:i}){this.goalId=e,this.visitCount=t,this.visitScope=i}evaluate(t){const{targetingData:i}=t,a=null==i?void 0:i[e.KameleoonData.Conversion];if(!a)return m.Ok(!1);const n=Object.values(a);if(!n.length)return m.Ok(!1);const o=tt(t,this.visitScope,this.visitCount);return m.Ok(n.some(e=>!!e&&(null==this.goalId||e.goalId===this.goalId)&&(!e.assignedTime||e.assignedTime>=o)))}}class rt{constructor({customDataIndex:e,valueMatchType:t,value:i,range:a}){this.customDataIndex=e?Number(e):-1,this.matchType=t,this.conditionValue=i,this.range=a}evaluate({targetingData:t}){var i;const a=null===(i=null==t?void 0:t[e.KameleoonData.CustomData])||void 0===i?void 0:i[this.customDataIndex];if(this.matchType===ce.UNDEFINED)return m.Ok(!a);if(a){const{value:e}=a,t=this.checkCondition(e);return this.error?m.Err(this.error):m.Ok(t)}return m.Ok(!1)}checkCondition(e){if("string"!=typeof this.conditionValue&&this.matchType!==ce.TRUE&&this.matchType!==ce.FALSE&&this.matchType!==ce.RANGE)return I.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`,!1;const t=this.conditionValue;if(this.matchType===ce.AMONG_VALUES){const i=this.parseArray(t);if(!i.ok)return this.error=i.error,!1;const a=new Set(i.data);return Array.isArray(e)?e.some(e=>a.has(e)):i.data.includes(e)}if(this.matchType===ce.RANGE){const t=this.parseRange(this.range);if(!t.ok)return this.error=t.error,!1;const[i,a]=t.data,n=e=>e>=i&&e<=a;return Array.isArray(e)?e.some(e=>n(Number(e))):n(Number(e))}if(Array.isArray(e))return e.some(e=>this.checkCondition(e));switch(this.matchType){case ce.CONTAINS:return e.includes(t);case ce.EXACT:return e===this.conditionValue;case ce.REGULAR_EXPRESSION:return Ue.parseRegExp(t).test(e);case ce.LOWER:return Number(e)<Number(this.conditionValue);case ce.EQUAL:return Number(e)===Number(this.conditionValue);case ce.GREATER:return Number(e)>Number(this.conditionValue);case ce.TRUE:return"true"===e.toLowerCase();case ce.FALSE:return"false"===e.toLowerCase();default:return I.error`Unexpected comparing operation for CustomData condition: ${this.matchType}`,!1}}parseArray(t){try{const e=JSON.parse(t);if(Array.isArray(e))return m.Ok(e)}catch(i){return I.error`Failed to parse array: ${t} in CustomData condition`,m.Err(new w(e.KameleoonException.AmongValuesCheck,i,t))}return m.Ok([])}parseRange(t){return t&&2===t.length?m.Ok(t):(I.error`Failed to parse range: ${t} in CustomData condition`,m.Err(new w(e.KameleoonException.RangeCheck,t)))}}class st{static getLatest(e){return Object.values(e).reduce((e,t)=>e.timestamps[e.timestamps.length-1].time>t.timestamps[t.timestamps.length-1].time?e:t)}}class ut{constructor({matchType:e,title:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.PageView];if(!i)return m.Ok(!1);const a=st.getLatest(i);return m.Ok(this.checkCondition(a.title))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case me.CONTAINS:return e.includes(this.conditionValue);case me.EXACT:return e===this.conditionValue;case me.REGULAR_EXPRESSION:return Ue.parseRegExp(this.conditionValue).test(e);default:return I.error`Unexpected comparing operation for PageTitle condition: ${this.matchType}`,!1}}}class lt{constructor({matchType:e,url:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.PageView];if(!i)return m.Ok(!1);const a=st.getLatest(i);return m.Ok(this.checkCondition(a.urlAddress))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case me.CONTAINS:return e.includes(this.conditionValue);case me.EXACT:return e===this.conditionValue;case me.REGULAR_EXPRESSION:return Ue.parseRegExp(this.conditionValue).test(e);default:return I.error`Unexpected comparing operation for PageUrl condition: ${this.matchType}`,!1}}}class dt{constructor({sdkLanguage:e,version:t,versionMatchType:i}){this.sdkLanguage=e,this.conditionValue=t,this.versionMatchType=i}evaluate({sdkInfo:e}){return this.checkCondition(e)}checkCondition(e){const{type:t,version:i}=e;if(!this.sdkLanguage)return m.Ok(!1);if("string"!=typeof this.conditionValue)return m.Ok(t===this.sdkLanguage);if(!this.versionMatchType)return m.Ok(!1);if(t!==this.sdkLanguage)return m.Ok(!1);const a=Ve.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?m.Ok(a.data):m.Err(a.error)}}class ct{constructor({visitorCode:e,matchType:t}){this.matchType=t,this.conditionValue=e}evaluate({visitorCode:e}){return m.Ok(this.checkCondition(e))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case me.CONTAINS:return e.includes(this.conditionValue);case me.EXACT:return e===this.conditionValue;case me.REGULAR_EXPRESSION:return Ue.parseRegExp(this.conditionValue).test(e);default:return I.error`Unexpected comparing operation for VisitorCode condition: ${this.matchType}`,!1}}}class gt{constructor({name:e,value:t,nameMatchType:i,valueMatchType:a}){this.cookie={key:null!=e?e:void 0,value:null!=t?t:void 0},this.keyMatchType=i,this.valueMatchType=a}evaluate({targetingData:t}){var i;const a=!this.cookie.key&&!this.cookie.value,n=Boolean(this.valueMatchType)&&Boolean(this.keyMatchType);if(a||!n)return m.Ok(!1);const o=this.extractCookie(),r=(null===(i=null==t?void 0:t[e.KameleoonData.Cookie])||void 0===i?void 0:i.cookie)||[];return m.Ok(o.some(e=>this.checkCondition(e))||r.some(e=>this.checkCondition(e)))}extractCookie(){return"undefined"!=typeof document&&document.cookie?We.fromString(document.cookie).data.cookie:[]}checkCondition(e){const t=this.keyMatchType,{key:i,value:a}=e;if(t===Ce.OPTIONAL){const e=this.cookie;return!!this.isOptionalCookie(e)&&this.compareCookieValue(a,e.value)}const{key:n,value:o}=this.cookie;let r;switch(t){case Ce.EXACT:r=i===n;break;case Ce.CONTAINS:r=i.includes(n);break;case Ce.REGULAR_EXPRESSION:r=Ue.parseRegExp(n).test(i);break;default:I.error`Unexpected comparing operation for Cookie condition: ${t}`,R(t)}return r&&this.compareCookieValue(a,o)}compareCookieValue(e,t){const i=this.valueMatchType;switch(i){case ce.EXACT:return e===t;case ce.CONTAINS:return e.includes(t);case ce.REGULAR_EXPRESSION:return Ue.parseRegExp(t).test(e);default:return I.error`Unexpected comparing operation for Cookie condition: ${i}`,!1}}isOptionalCookie(e){const{value:t}=e;return void 0!==t}}class ht{constructor({os:e}){this.operatingSystem=e}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.OperatingSystem];if(i){const{operatingSystem:e}=i;return m.Ok(e===this.operatingSystem)}return m.Ok(!1)}}class pt{constructor({country:e,region:t,city:i}){this.country=e,this.region=t,this.city=i}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.GeolocationData];if(i){const{country:e,region:t,city:a}=i,[n,o,r]=[this.country,this.region,this.city];if(!n||!e)return m.Ok(!1);const s=!(e.toLowerCase()!==n.toLowerCase()||o&&(null==t?void 0:t.toLowerCase())!==o.toLowerCase()||r&&(null==a?void 0:a.toLowerCase())!==r.toLowerCase());return m.Ok(s)}return m.Ok(!1)}}class vt{constructor({segmentId:e}){this.segmentId=e}evaluate(e){var t;const{segments:i,trees:a}=e;if(!this.segmentId)return m.Ok(!1);const n=null==i?void 0:i.get(this.segmentId.toString());if(!n)return m.Ok(!1);const o=null!==(t=null==a?void 0:a.get(this.segmentId.toString()))&&void 0!==t?t:null==a?void 0:a.get(this.segmentId);return o?o.evaluate(e):new et(n).evaluate(e)}}class mt{constructor({featureFlagId:e,variationKey:t,ruleId:i,visitCount:a,visitScope:n}){this.featureId=e,this.ruleId=i,this.variationKey=t,this.visitCount=a,this.visitScope=n}evaluate(e){const{variationData:t,ruleMap:i}=e;if(!this.featureId||!i)return m.Ok(!1);const a=tt(e,this.visitScope,this.visitCount),n=(e,t)=>!e||e>=t;if(this.featureId&&!this.ruleId&&!this.variationKey){for(const e of i.values()){const{featureId:i,experimentId:o}=e,r=t[o];if(i===this.featureId&&"number"==typeof(null==r?void 0:r.variationId)&&n(null==r?void 0:r.assignedTime,a))return m.Ok(!0)}return m.Ok(!1)}if(this.featureId&&this.ruleId){const e=i.get(this.ruleId);if((null==e?void 0:e.featureId)!==this.featureId)return m.Ok(!1);const{experimentId:o,variations:r}=e,s=t[o];if(this.variationKey){const e=r.get(this.variationKey);return m.Ok(Boolean(e)&&(null==s?void 0:s.variationId)===e&&n(null==s?void 0:s.assignedTime,a))}return m.Ok(Boolean(null==s?void 0:s.variationId)&&n(null==s?void 0:s.assignedTime,a))}if(this.featureId&&!this.ruleId&&this.variationKey)for(const e of i.values()){const{featureId:i,experimentId:o,variations:r}=e;if(i===this.featureId&&r.has(this.variationKey)){const e=r.get(this.variationKey),i=t[o];if(Boolean(e)&&(null==i?void 0:i.variationId)===e&&n(null==i?void 0:i.assignedTime,a))return m.Ok(!0)}}return m.Ok(!1)}}class ft{constructor({matchType:e,url:t}){this.conditionValue=t,this.matchType=e}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.PageView];if(!i)return m.Ok(!1);const a=this.getSecondLatestPageView(Object.values(i));if(!a)return m.Ok(!1);const n=a.urlAddress;return m.Ok(this.checkCondition(n))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case me.CONTAINS:return e.includes(this.conditionValue);case me.EXACT:return e===this.conditionValue;case me.REGULAR_EXPRESSION:return Ue.parseRegExp(this.conditionValue).test(e);default:return I.error`Unexpected comparing operation for PreviousPage condition: ${this.matchType}`,!1}}getSecondLatestPageView(e){if(e.length<2)return;let t,i;return e.forEach(e=>{const a=e.timestamps[e.timestamps.length-1].time;if(t)return a>t.timestamps[t.timestamps.length-1].time?(i=t,void(t=e)):void(a>(i?i.timestamps[i.timestamps.length-1].time:0)&&(i=e));t=e}),i}}class Ct{constructor({matchType:e,pageCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:t}){const i=null==t?void 0:t[e.KameleoonData.PageView];if(!i)return m.Ok(!1);let a=0;return Object.values(i).forEach(e=>{a+=e.timestamps.length}),m.Ok(this.checkCondition(a))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case me.EQUAL:return e===this.conditionValue;case me.GREATER:return e>this.conditionValue;case me.LOWER:return e<this.conditionValue;default:return I.error`Unexpected comparing operation for VisitedPages condition: ${this.matchType}`,!1}}}class yt{constructor({matchType:e,count:t,unitOfTime:i}){this.matchType=e,this.conditionValue=t,this.timeUnit=i}evaluate({targetingData:t,sdkInfo:i}){const a=null==t?void 0:t[e.KameleoonData.VisitsData];if(i.isServer?!(null==a?void 0:a.visits.length):!(null==a?void 0:a.visits)||a.visits.length<2)return m.Ok(!1);const n=a.visits[0];return m.Ok(this.checkCondition("number"==typeof n?n:n.timeStarted))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue||!this.timeUnit)return!1;const t=Date.now()-e,i=Ve.convertTimeUnit(t,this.timeUnit);switch(this.matchType){case me.GREATER:return i>this.conditionValue;case me.LOWER:return i<this.conditionValue;default:return I.error`Unexpected comparing operation for FirstVisit condition: ${this.matchType}`,!1}}}class Dt{constructor({matchType:e,count:t,unitOfTime:i}){this.matchType=e,this.conditionValue=t,this.timeUnit=i}evaluate({targetingData:t,sdkInfo:i}){const a=null==t?void 0:t[e.KameleoonData.VisitsData];if(i.isServer?!(null==a?void 0:a.visits.length):!(null==a?void 0:a.visits)||a.visits.length<2)return m.Ok(!1);const n=a.visits,o=n[i.isServer?n.length-1:n.length-2];return m.Ok(this.checkCondition("number"==typeof o?o:o.timeStarted))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue||!this.timeUnit)return!1;const t=Date.now()-e,i=Ve.convertTimeUnit(t,this.timeUnit);switch(this.matchType){case me.GREATER:return i>this.conditionValue;case me.LOWER:return i<this.conditionValue;default:return I.error`Unexpected comparing operation for LastVisit condition: ${this.matchType}`,!1}}}class Et{constructor({matchType:e,visitCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:t,sdkInfo:i}){const a=null==t?void 0:t[e.KameleoonData.VisitsData];if(!a)return m.Ok(!1);let n=0;const o=(new Date).setHours(0,0,0,0),{visits:r}=a;return r.forEach(e=>{let t;t="number"==typeof e?e:e.timeStarted,t>=o&&n++}),i.isServer&&(n+=1),m.Ok(this.checkCondition(n))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case me.EQUAL:return e===this.conditionValue;case me.GREATER:return e>this.conditionValue;case me.LOWER:return e<this.conditionValue;default:return I.error`Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`,!1}}}class Tt{constructor({matchType:e,visitCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:t,sdkInfo:i}){const a=null==t?void 0:t[e.KameleoonData.VisitsData];if(!a)return m.Ok(!1);const n=a.visits.length+(i.isServer?1:0);return m.Ok(this.checkCondition(n))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case me.EQUAL:return e===this.conditionValue;case me.GREATER:return e>this.conditionValue;case me.LOWER:return e<this.conditionValue;default:return I.error`Unexpected comparing operation for Visits condition: ${this.matchType}`,!1}}}class It{constructor({visitorType:e}){this.visitorType=e}evaluate({targetingData:t,sdkInfo:i}){const a=null==t?void 0:t[e.KameleoonData.VisitsData];if(!a||!this.visitorType)return m.Ok(!1);const{visits:n}=a,o=i.isServer?!n.length:n.length<=1;switch(this.visitorType){case ge.NEW:return m.Ok(o);case ge.RETURNING:return m.Ok(!o);default:I.error`Unexpected visitor type for NewVisitor condition: ${this.visitorType}`,R(this.visitorType)}}}class St{constructor({version:e,versionMatchType:t}){this.conditionValue=e,this.versionMatchType=t}evaluate({targetingData:t}){var i;const a=null===(i=null==t?void 0:t[e.KameleoonData.ApplicationVersion])||void 0===i?void 0:i.version;if(!a||!this.conditionValue||!this.versionMatchType)return m.Ok(!1);const n=Ve.compareSemVer({version:a,compareVersion:this.conditionValue,operator:this.versionMatchType});return n.ok?m.Ok(n.data):m.Err(n.error)}}class kt{constructor({lowerBound:e,upperBound:t,keyMomentId:i,goalId:a}){this.lowerBound=e,this.upperBound=t,this.keyMomentId=i,this.goalId=a}evaluate({targetingData:t}){var i;const a=null==t?void 0:t[e.KameleoonData.KameleoonConversionScore];if("number"!=typeof this.keyMomentId||"number"!=typeof this.goalId||"number"!=typeof this.lowerBound||"number"!=typeof this.upperBound||!a)return m.Ok(!1);const n=null===(i=a.kcs[this.keyMomentId.toString()])||void 0===i?void 0:i[this.goalId.toString()];return"number"!=typeof n?m.Ok(!1):m.Ok(n>=this.lowerBound&&n<=this.upperBound)}}class Vt{constructor({variationMatchType:e,variationId:t,experimentId:i,visitCount:a,visitScope:n}){this.variationMatchType=e,this.variationId=null!=t?t:-1,this.experimentId=null!=i?i:-1,this.visitCount=a,this.visitScope=n}evaluate(e){return m.Ok(this.checkCondition(e))}checkCondition(e){const t=e.variationData[this.experimentId];if(!t)return!1;const i=tt(e,this.visitScope,this.visitCount);if(t.assignedTime&&t.assignedTime<i)return!1;switch(this.variationMatchType){case he.ANY:return!0;case he.EXACT:return t.variationId===this.variationId;default:return!1}}}class Rt{constructor({personalizationId:e,visitCount:t,visitScope:i}){this.personalizationId=e,this.visitCount=t,this.visitScope=i}evaluate(e){return e.targetingData?m.Ok(this.checkCondition(e)):m.Ok(!1)}checkCondition(t){var i,a;if(!this.personalizationId)return!1;const n=null===(a=null===(i=t.targetingData)||void 0===i?void 0:i[e.KameleoonData.Personalization])||void 0===a?void 0:a[this.personalizationId];if(!n)return!1;const{assignedTime:o}=n;return!o||o>=tt(t,this.visitScope,this.visitCount)}}class wt{createCondition(t){const{targetingType:i}=t;switch(i){case De.CUSTOM_DATUM:return m.Ok(new rt(t));case De.EXCLUSIVE_EXPERIMENT:return m.Ok(new it(t));case De.TARGET_EXPERIMENT:return m.Ok(new Vt(t));case De.TARGET_FEATURE_FLAG:return m.Ok(new mt(t));case De.TARGET_PERSONALIZATION:return m.Ok(new Rt(t));case De.DEVICE_TYPE:return m.Ok(new at(t));case De.BROWSER:return m.Ok(new nt(t));case De.PAGE_URL:return m.Ok(new lt(t));case De.PAGE_TITLE:return m.Ok(new ut(t));case De.CONVERSIONS:return m.Ok(new ot(t));case De.VISITOR_CODE:return m.Ok(new ct(t));case De.SDK_LANGUAGE:return m.Ok(new dt(t));case De.COOKIE:return m.Ok(new gt(t));case De.OPERATING_SYSTEM:return m.Ok(new ht(t));case De.GEOLOCATION:return m.Ok(new pt(t));case De.SEGMENT:return m.Ok(new vt(t));case De.APPLICATION_VERSION:return m.Ok(new St(t));case De.PREVIOUS_PAGE:return m.Ok(new ft(t));case De.PAGE_VIEWS:return m.Ok(new Ct(t));case De.LAST_VISIT:return m.Ok(new Dt(t));case De.FIRST_VISIT:return m.Ok(new yt(t));case De.SAME_DAY_VISITS:return m.Ok(new Et(t));case De.VISITS:return m.Ok(new Tt(t));case De.NEW_VISITORS:return m.Ok(new It(t));case De.HEAT_SLICE:return m.Ok(new kt(t));default:return I.info`Unsupported targeted condition type found: ${i}`,m.Err(new w(e.KameleoonException.TargetingCondition,i))}}}var bt;e.KameleoonStorageKey=void 0,(bt=e.KameleoonStorageKey||(e.KameleoonStorageKey={})).ClientData="kameleoonClientData",bt.TargetingData="kameleoonTargetingData",bt.TrackingData="kameleoonTrackingData",bt.VariationData="kameleoonVariationData",bt.VisitorCode="kameleoonVisitorCode",bt.ConsentData="kameleoonConsentData",bt.DataInfo="kameleoonDataInfo",bt.KameleoonSimulationFFData="kameleoonSimulationFFData",bt.ForcedFeatureVariation="kameleoonForcedFeatureVariation",bt.ForcedExperimentVariation="kameleoonForcedExperimentVariation";const At={data:y,lastUpdate:""},Kt=29*e.Milliseconds.Minute;class Ot{constructor(e){this.key=e}isDataValid(t){switch(this.key){case e.KameleoonStorageKey.ClientData:return this.checkClientDataIntegrity(t);case e.KameleoonStorageKey.TargetingData:return this.checkTargetingDataIntegrity(t);case e.KameleoonStorageKey.DataInfo:return this.checkDataInfoIntegrity(t);case e.KameleoonStorageKey.VariationData:return this.checkVariationDataIntegrity(t);case e.KameleoonStorageKey.TrackingData:return this.checkTrackingDataIntegrity(t);default:return!0}}getDefaultData(){switch(this.key){case e.KameleoonStorageKey.ClientData:return this.getDefaultClientData();case e.KameleoonStorageKey.DataInfo:return{unsentData:{},nextVisitTime:0,mappingIdentifiers:{}};case e.KameleoonStorageKey.TrackingData:return{scheduledVisitors:{}};case e.KameleoonStorageKey.TargetingData:case e.KameleoonStorageKey.VariationData:case e.KameleoonStorageKey.ConsentData:return{};case e.KameleoonStorageKey.VisitorCode:case e.KameleoonStorageKey.KameleoonSimulationFFData:return"";case e.KameleoonStorageKey.ForcedExperimentVariation:case e.KameleoonStorageKey.ForcedFeatureVariation:return{};default:R(this.key)}}checkTrackingDataIntegrity(e){return this.hasFields(e,["scheduledVisitors"])}checkDataInfoIntegrity(e){return this.hasFields(e,["unsentData","nextVisitTime"])}checkVariationDataIntegrity(e){const t=Object.values(e);if(!t.length)return!0;const i=e=>!this.hasFields(e,["status"])||this.hasFields(e,["isSent"]);for(const e of t)for(const t of Object.values(e))if(i(t))return!1;return!0}checkClientDataIntegrity(e){return this.hasFields(e,Object.keys(At))}checkTargetingDataIntegrity(t){const i=Object.values(t);if(!i.length)return!0;for(const t of i){if("string"==typeof t)continue;const i=e=>!this.hasFields(e,["status"])||this.hasFields(e,["sent"])||this.hasFields(e,["timestampList"]);for(const[a,n]of Object.entries(t)){if(Array.isArray(n))return!1;switch(a){case e.KameleoonData.PageView:case e.KameleoonData.Conversion:case e.KameleoonData.Personalization:case e.KameleoonData.TargetedSegment:case e.KameleoonData.CustomData:if(Object.values(n).some(e=>i(e)))return!1;continue;default:if(i(n))return!1}}}return!0}getDefaultClientData(){return Object.assign(Object.assign({},At),{lastUpdate:(new Date).toString()})}hasFields(e,t){const i=Object.keys(e);return!(!i.length||!t.length)&&t.every(e=>i.includes(e))}}let xt=class{constructor(t,i){this.externalStorage=t,this.storageKey=i;const a=new Ot(i),n=this.read();if(!n.ok){if(n.error.type===e.KameleoonException.StorageEmpty){const e=a.getDefaultData();this.write(e)}return}const o=n.data;if(!a.isDataValid(o)){const e=a.getDefaultData();this.write(e)}}read(){try{const t=this.externalStorage.read(this.storageKey);return null===t?m.Err(new w(e.KameleoonException.StorageEmpty)):m.Ok(t)}catch(t){return I.error`Failed to read data from storage: ${this.storageKey}`,m.Err(new w(e.KameleoonException.StorageRead,this.storageKey))}}write(t){try{return this.externalStorage.write(this.storageKey,t),m.Ok()}catch(t){return I.error`Failed to write data to storage: ${this.storageKey}`,m.Err(new w(e.KameleoonException.StorageWrite,this.storageKey))}}update(t){const i=this.read();if(!i.ok)return i.error.type===e.KameleoonException.StorageEmpty?this.write(t):i;const a=i.data;let n;return n="string"==typeof a?t:Object.assign(Object.assign({},a),t),this.write(n)}};class Nt{constructor(e,t){this.externalStorage=e,this.cleanupInterval=t,t>0&&this.initCleanupInterval()}initCleanupInterval(){for(const t of Object.values(e.KameleoonStorageKey)){let i=null;try{switch(t){case e.KameleoonStorageKey.ForcedFeatureVariation:case e.KameleoonStorageKey.ForcedExperimentVariation:case e.KameleoonStorageKey.VariationData:case e.KameleoonStorageKey.ConsentData:I.info`Starting cleanup for ${t} with interval ${this.cleanupInterval}`,i=setInterval(()=>this.cleanupData(t),this.cleanupInterval);break;case e.KameleoonStorageKey.ClientData:case e.KameleoonStorageKey.TargetingData:case e.KameleoonStorageKey.TrackingData:case e.KameleoonStorageKey.VisitorCode:case e.KameleoonStorageKey.DataInfo:case e.KameleoonStorageKey.KameleoonSimulationFFData:break;default:I.error`Unknown storage key: ${t} for initCleanupInterval.`}}catch(e){i&&clearInterval(i),I.error`Error while starting cleanup for ${t} with interval ${this.cleanupInterval}`}}}cleanupData(t){const i=this.externalStorage.read(t);if(!i)return;const a=Date.now();switch(t){case e.KameleoonStorageKey.VariationData:this.cleanupVariationData(i,a);break;case e.KameleoonStorageKey.ForcedFeatureVariation:this.cleanupForcedFeatureVariationData(i,a);break;case e.KameleoonStorageKey.ForcedExperimentVariation:this.cleanupForcedExperimentVariationData(i,a);break;case e.KameleoonStorageKey.ConsentData:this.cleanupConsentData(i,a);break;case e.KameleoonStorageKey.ClientData:case e.KameleoonStorageKey.TargetingData:case e.KameleoonStorageKey.TrackingData:case e.KameleoonStorageKey.VisitorCode:case e.KameleoonStorageKey.DataInfo:case e.KameleoonStorageKey.KameleoonSimulationFFData:break;default:I.error`Unknown storage key: ${t} for cleanupData.`}this.externalStorage.write(t,i)}cleanupConsentData(e,t){for(const[i,a]of Object.entries(e)){if("boolean"==typeof a){e[i]={consent:a,expirationTime:t+this.cleanupInterval};continue}const n=a;"number"==typeof n.expirationTime?n.expirationTime<t&&delete e[i]:n.expirationTime=t+this.cleanupInterval}}cleanupVariationData(e,t){for(const[i,a]of Object.entries(e))this.cleanupObjectValues(a,t),0===Object.keys(e[i]).length&&delete e[i]}cleanupForcedFeatureVariationData(e,t){for(const[i,a]of Object.entries(e))for(const[n,o]of Object.entries(a))this.cleanupObjectValues(o,t),0===Object.keys(e[Number(i)][n]).length&&delete e[Number(i)][n]}cleanupForcedExperimentVariationData(e,t){for(const[i,a]of Object.entries(e))this.cleanupObjectValues(a,t),0===Object.keys(e[i]).length&&delete e[i]}cleanupObjectValues(e,t){for(const[i,a]of Object.entries(e))"number"==typeof a.expirationTime?a.expirationTime<t&&delete e[i]:a.expirationTime=t+this.cleanupInterval}}var $t;!function(e){e[e.Unknown=0]="Unknown",e[e.Given=1]="Given",e[e.NotGiven=2]="NotGiven"}($t||($t={}));class Ft{constructor(t){this.id=t,this.status=e.TrackingStatus.Unsent}get url(){return"eventType=targetingSegment"+P+this.id}get data(){return{id:this.id,type:e.KameleoonData.TargetedSegment,status:this.status}}static _fromRaw(e){const{id:t,status:i}=e,a=new Ft(t);return a.status=i,a}}class Mt{constructor({dataStorage:e,infoStorage:t,cleanupInterval:i,packageInfo:a}){if(this.targetingTrees=new Map,this.mappingIdentifierCustomDataIndex=null,this.persistentCustomDataIndexes=new Set,this.localCustomDataIndexes=new Set,this.customDataIndexByName=new Map,this.cleanupIntervalId=null,I.debug`CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`,this.dataStorage=e,this.infoStorage=t,this.dataProcessor=new Xe(i,a),this.packageInfo=a,i){const e=()=>{this.cleanupData()};try{this.cleanupIntervalId=setInterval(e,i)}catch(e){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),I.error`Failed to set cleanup interval: ${i}`,e}}I.debug`RETURN: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`}getUnsentData(t){const i=this.infoStorage.read();if(!i.ok)return[];const a=i.data,n=this.getVisitorData(t);if(!a.unsentData[t]||!n)return[];const o=a.unsentData[t],r=a.nextVisitTime<=Date.now();return r&&(a.nextVisitTime=Date.now()+Kt,this.infoStorage.write(a)),this.getDataFromRaw(n,({status:t,key:i,cdIndex:a})=>!("number"!=typeof a||!this.persistentCustomDataIndexes.has(a)||!r)||o.includes(i)&&t===e.TrackingStatus.Unsent)}getPendingData(t){const i=this.getVisitorData(t);return i?this.getDataFromRaw(i,({status:t})=>t===e.TrackingStatus.Pending):[]}getDataFromRaw(t,i){const a=[];for(const[n,o]of Object.entries(t))if(o)switch(n){case e.KameleoonData.CustomData:for(const e of Object.values(o)){if(!e)continue;const{status:t,index:o}=e;if(i({status:t,key:n,cdIndex:o})){const t=be._fromRaw(e);a.push(t)}}break;case e.KameleoonData.Conversion:for(const e of Object.values(o))if(e&&i({status:e.status,key:n})){const t=Ae._fromRaw(e);a.push(t)}break;case e.KameleoonData.PageView:{const e=o;for(const t of Object.values(e))if(i({status:t.status,key:n})){const e=we._fromRaw(t);a.push(e)}break}case e.KameleoonData.TargetedSegment:{const e=o;for(const t of Object.values(e))if(i({status:t.status,key:n})){const e=Ft._fromRaw(t);a.push(e)}break}case e.KameleoonData.GeolocationData:{const e=o;if(!o)continue;if(i({status:e.status,key:n})){const t=Ne._fromRaw(e);a.push(t)}break}case e.KameleoonData.Browser:{const e=o;if(i({status:e.status,key:n})){const t=Ke._fromRaw(e);a.push(t)}break}case e.KameleoonData.Device:{const e=o;if(i({status:e.status,key:n})){const t=Oe._fromRaw(e);a.push(t)}break}case e.KameleoonData.OperatingSystem:{const e=o;if(i({status:e.status,key:n})){const t=xe._fromRaw(e);a.push(t)}}}return a}storeTrackedData(t){this.storeDataForVisitors(t,!1);const i=this.infoStorage.read();if(!i.ok)return;const a=i.data.unsentData;for(const[i,n]of Object.entries(t)){if(!a[i])return;const t=new Set(a[i]);n.forEach(({data:e})=>{t.has(e.type)&&t.delete(e.type)});const o=n.some(({data:t})=>{if(t.type!==e.KameleoonData.CustomData)return!1;const{index:i}=t;return this.persistentCustomDataIndexes.has(i)||this.mappingIdentifierCustomDataIndex===i});o&&t.add(e.KameleoonData.CustomData),a[i]=Array.from(t),a[i].length||delete a[i]}this.infoStorage.write(i.data)}storeData({visitorCode:e,data:t,track:i}){I.debug`CALL: DataManager.storeDataForVisitor(vc: ${e}, track: ${i}, data: ${t})`;const a=this.storeDataInternal((a,n)=>{this.mutUpdateTargetingData({infoData:a,targetingData:n,visitorCode:e,kameleoonData:t,extendTtl:!0,track:i})});return I.debug`RETURN: DataManager.storeDataForVisitor(vc: ${e}, track: ${i}, data: ${t}) -> ${a}`,a}storeDataForVisitors(e,t){I.debug`CALL: DataManager.storeDataForVisitors(data: ${e}, extendTtl: ${t})`;const i=this.storeDataInternal((i,a)=>{for(const[n,o]of Object.entries(e))this.mutUpdateTargetingData({infoData:i,targetingData:a,visitorCode:n,kameleoonData:o,extendTtl:t})});return I.debug`RETURN: DataManager.storeDataForVisitors(data: ${e}, extendTtl: ${t}) -> ${i}`,i}storeDataInternal(e){const t=this.dataStorage.read();if(!t.ok)return t;const i=this.infoStorage.read();if(!i.ok)return i;const a=t.data,n=i.data;return e(n,a),this.cleanupData(),this.infoStorage.write(n),this.dataStorage.write(a)}getTree(e){if(this.targetingTrees.has(e.id))return this.targetingTrees.get(e.id);const t=new et(e);return this.targetingTrees.set(e.id,t),t}clearTrees(){this.targetingTrees.clear()}isPersistentCustomData(e){return!!this.persistentCustomDataIndexes.size&&!!Ve.isCustomData(e)&&this.persistentCustomDataIndexes.has(e.data.index)}isUniqueIdentifier(t){var i;const a=this.getVisitorData(t),n=null==a?void 0:a[e.KameleoonData.UniqueIdentifier];return null!==(i=null==n?void 0:n.value)&&void 0!==i&&i}getVisitorIdentifier(e){var t,i,a;const n=this.infoStorage.read();if(!n.ok)return e;const o=n.data;return null!==(t=o.mappingIdentifiers)&&void 0!==t||(o.mappingIdentifiers={}),null!==(a=null===(i=o.mappingIdentifiers[e])||void 0===i?void 0:i.mappingIdentifier)&&void 0!==a?a:e}getMappingIdentifier(e){const t=this.infoStorage.read();if(!t.ok)return;const i=t.data;return i.mappingIdentifiers?i.mappingIdentifiers[e]:void 0}setMappingIdentifier(e,t){var i;const a=this.infoStorage.read();if(!a.ok)return;const n=a.data;null!==(i=n.mappingIdentifiers)&&void 0!==i||(n.mappingIdentifiers={});const o=n.mappingIdentifiers[e];(!o||o.timestamp<t.timestamp)&&(n.mappingIdentifiers[e]=t,this.infoStorage.write(n))}getVisitorData(e){this.cleanupData();const t=this.dataStorage.read();if(!t.ok)return;let{visitorReference:i,data:a,isReference:n}=this.dataProcessor.dereferenceData(t.data,e);if(this.packageInfo.isServer&&n&&!a[i]){const t=this.infoStorage.read();t.ok&&t.data.mappingIdentifiers&&delete t.data.mappingIdentifiers[e],delete a[e],i=e}return a[i]}getVisitorStoredDataTypes(e){const t=this.getVisitorData(e);return t?new Set(Object.keys(t)):new Set}getLinkedVisitor(t){var i,a,n;const o=this.dataStorage.read();if(!o.ok)return null;const r=o.data[t];if("string"==typeof r)return r;if(null==r||null==this.mappingIdentifierCustomDataIndex)return null;const s=null===(n=null===(a=null===(i=r[e.KameleoonData.CustomData])||void 0===i?void 0:i[this.mappingIdentifierCustomDataIndex])||void 0===a?void 0:a.value)||void 0===n?void 0:n[0];return null!=s?s:null}mutUpdateTargetingData({infoData:t,visitorCode:i,kameleoonData:a,targetingData:n,extendTtl:o,track:r}){var s,u,l;for(const d of a){if(!1===r&&(d.status=e.TrackingStatus.Sent),d.data.type===e.KameleoonData.CustomData&&!this.processCustomData({infoData:t,customData:d,mutData:n,visitorCode:i}))continue;if(d.data.type===e.KameleoonData.Conversion){const e=d;(null!==(u=null===(s=e._metadata)||void 0===s?void 0:s.length)&&void 0!==u?u:0)>0&&(e._metadata=null===(l=e._metadata)||void 0===l?void 0:l.filter(e=>this.trySetCustomDataIndexByName(e)))}const a=this.dataProcessor.mutUpdateData({infoData:t,visitorCode:i,mutData:n,dataItem:d,extendTtl:o}),c=t.nextDataCleanup;(!c||c&&a&&a<c)&&(t.nextDataCleanup=a),d.data.status===e.TrackingStatus.Unsent&&this.dataProcessor.mutAddUnsentData({mutData:t,visitorCode:i,dataType:d.data.type})}}cleanupData(){const e=this.dataStorage.read(),t=this.infoStorage.read();if(!e.ok||!t.ok)return;const i=e.data,a=t.data,n=a.nextDataCleanup;if(n&&n<Date.now()){const e=this.dataProcessor.mutCleanupData(i,a);a.nextDataCleanup=e||void 0,this.infoStorage.write(a),this.dataStorage.write(i)}}processCustomData({infoData:t,mutData:i,customData:a,visitorCode:n}){var o;const{data:r}=a,s=Boolean(r.value.length&&r.value[0].length);if(!this.trySetCustomDataIndexByName(a))return!1;if(r.index==be.UNDEFINED_INDEX&&(r.index=a.index),this.mappingIdentifierCustomDataIndex===r.index&&s){a._isMappingIdentifier=!0;const e=r.value[0];n!==e&&(I.info`Linked anonymous visitor ${n} with user ${e}`,this.dataProcessor.createReference({infoData:t,mutData:i,visitorCode:n,linkedVisitor:r.value[0]}),null!==(o=t.mappingIdentifiers)&&void 0!==o||(t.mappingIdentifiers={}),t.mappingIdentifiers[e]={mappingIdentifier:n,timestamp:Date.now()})}return this.localCustomDataIndexes.has(r.index)&&(a.status=e.TrackingStatus.Sent),!0}trySetCustomDataIndexByName(e){if(e.index!==be.UNDEFINED_INDEX)return!0;if(!e.name)return!1;const t=this.customDataIndexByName.get(e.name);return null!=t&&(e.index=t,!0)}get unsentDataVisitors(){const e=this.infoStorage.read();return e.ok?Object.keys(e.data.unsentData):[]}get identifierCustomDataIndex(){return this.mappingIdentifierCustomDataIndex}get trees(){return this.targetingTrees}get storedCustomDataIndexes(){const t=this.dataStorage.read();if(!t.ok)return new Set;const i=t.data;if(!(e.KameleoonData.CustomData in i))return new Set;const a=new Set;for(const t in Object.keys(i[e.KameleoonData.CustomData]))a.add(Number(t));return a}set customDataIndexes(t){var i;const[a,n]=[[],[]],o=new Map;t.forEach(t=>{t.localOnly&&a.push(t.index),t.scope===e.CustomDataScope.Visitor&&n.push(t.index),t.name&&o.set(t.name,t.index)}),this.mappingIdentifierCustomDataIndex=(null===(i=t.find(e=>e.isMappingIdentifier))||void 0===i?void 0:i.index)||null,this.localCustomDataIndexes=new Set(a),this.persistentCustomDataIndexes=new Set(n),this.customDataIndexByName=o}getCustomDataIndexByName(e){return this.customDataIndexByName.get(e)}}const Lt=31536e3;let _t=class{constructor(){this.isConsentRequired=!1}set consentRequired(e){this.isConsentRequired=e}get consentRequired(){return this.isConsentRequired}set getData(e){this.getDataCallback=e}set setData(e){this.setDataCallback=e}get setData(){if(this.setDataCallback)return this.setDataCallback;throw new Error("Missing setDataCallback!")}validateVisitorCode(t){return 0===t.length?m.Err(new w(e.KameleoonException.VisitorCodeEmpty)):t.length>255?m.Err(new w(e.KameleoonException.VisitorCodeMaxLength)):m.Ok()}getVisitorCode(t){if(I.debug`CALL: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${t})`,!this.getDataCallback||!this.setDataCallback)throw new Error("Missing getDataCallback or setDataCallback methods in getVisitorCode!");let i;const a=this.getDataCallback(e.KameleoonStorageKey.VisitorCode);return a&&(i=a),i||(t?(this.validateVisitorCode(t).throw(),i=t,I.debug`Used default visitor code: ${i}`):(i=this.generateVisitorCode(),I.debug`Generated new visitor code: ${i}`)),this.processSimulatedVariations(i),this.isConsentRequired||this.setDataCallback({visitorCode:i,key:e.KameleoonStorageKey.VisitorCode,maxAge:Lt,path:"/"}),I.debug`RETURN: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${t}) -> (visitorCode: ${i})`,i}processSimulatedVariations(e){if(this.variationConfiguration){const t=this.getSimulatedVariations(e);try{this.variationConfiguration.clearSimulatedVariations(e).throw(),null!==t&&t.length>0&&this.variationConfiguration.updateForcedFeatureVariations(e,t).throw()}catch(e){e instanceof Error&&I.error`Failed to process simulated variations: ${e.message}`}}}getSimulatedVariations(t){I.debug`CALL: VisitorCodeManager.getSimulatedVariations(visitorCode: ${t})`;const i=this.getDataCallback(e.KameleoonStorageKey.KameleoonSimulationFFData);let a=null;if("string"==typeof i&&i.length>0)try{const e=JSON.parse(decodeURIComponent(i));e&&"object"==typeof e&&(a=Object.entries(e).map(([e,t])=>this.variationConfiguration.simulatedVariationFromJson(e,t)).filter(e=>null!==e))}catch(e){e instanceof Error&&I.error`Failed to parse simulated variations: ${e.message}`}return I.debug`RETURN: VisitorCodeManager.getSimulatedVariations(visitorCode: ${t}) -> (variations: ${a})`,a}generateVisitorCode(){const e=[];for(let t=0;t<16;t++)e.push("abcdefghijklmnopqrstuvwxyz0123456789"[Math.floor(36*Math.random())]);return e.join("")}setVariationConfiguration(e){this.variationConfiguration||(this.variationConfiguration=e)}};var Ut,Pt,Gt={exports:{}},Bt={exports:{}},zt=a(Object.freeze({__proto__:null,default:{}}));var jt=(Pt||(Pt=1,function(e){var i;e.exports=(Ut||(Ut=1,function(e){var i;e.exports=(i=i||function(e){var i;if("undefined"!=typeof window&&window.crypto&&(i=window.crypto),"undefined"!=typeof self&&self.crypto&&(i=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(i=globalThis.crypto),!i&&"undefined"!=typeof window&&window.msCrypto&&(i=window.msCrypto),!i&&void 0!==t&&t.crypto&&(i=t.crypto),!i)try{i=zt}catch(e){}var a=function(){if(i){if("function"==typeof i.getRandomValues)try{return i.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof i.randomBytes)try{return i.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},n=Object.create||function(){function e(){}return function(t){var i;return e.prototype=t,i=new e,e.prototype=null,i}}(),o={},r=o.lib={},s=r.Base={extend:function(e){var t=n(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},u=r.WordArray=s.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||d).stringify(this)},concat:function(e){var t=this.words,i=e.words,a=this.sigBytes,n=e.sigBytes;if(this.clamp(),a%4)for(var o=0;o<n;o++){var r=i[o>>>2]>>>24-o%4*8&255;t[a+o>>>2]|=r<<24-(a+o)%4*8}else for(var s=0;s<n;s+=4)t[a+s>>>2]=i[s>>>2];return this.sigBytes+=n,this},clamp:function(){var t=this.words,i=this.sigBytes;t[i>>>2]&=4294967295<<32-i%4*8,t.length=e.ceil(i/4)},clone:function(){var e=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],i=0;i<e;i+=4)t.push(a());return new u.init(t,e)}}),l=o.enc={},d=l.Hex={stringify:function(e){for(var t=e.words,i=e.sigBytes,a=[],n=0;n<i;n++){var o=t[n>>>2]>>>24-n%4*8&255;a.push((o>>>4).toString(16)),a.push((15&o).toString(16))}return a.join("")},parse:function(e){for(var t=e.length,i=[],a=0;a<t;a+=2)i[a>>>3]|=parseInt(e.substr(a,2),16)<<24-a%8*4;return new u.init(i,t/2)}},c=l.Latin1={stringify:function(e){for(var t=e.words,i=e.sigBytes,a=[],n=0;n<i;n++){var o=t[n>>>2]>>>24-n%4*8&255;a.push(String.fromCharCode(o))}return a.join("")},parse:function(e){for(var t=e.length,i=[],a=0;a<t;a++)i[a>>>2]|=(255&e.charCodeAt(a))<<24-a%4*8;return new u.init(i,t)}},g=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},h=r.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new u.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=g.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var i,a=this._data,n=a.words,o=a.sigBytes,r=this.blockSize,s=o/(4*r),l=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*r,d=e.min(4*l,o);if(l){for(var c=0;c<l;c+=r)this._doProcessBlock(n,c);i=n.splice(0,l),a.sigBytes-=d}return new u.init(i,d)},clone:function(){var e=s.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});r.Hasher=h.extend({cfg:s.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){h.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,i){return new e.init(i).finalize(t)}},_createHmacHelper:function(e){return function(t,i){return new p.HMAC.init(e,i).finalize(t)}}});var p=o.algo={};return o}(Math),i)}(Bt)),i=Bt.exports,function(e){var t=i,a=t.lib,n=a.WordArray,o=a.Hasher,r=t.algo,s=[],u=[];!function(){function t(t){for(var i=e.sqrt(t),a=2;a<=i;a++)if(!(t%a))return!1;return!0}function i(e){return 4294967296*(e-(0|e))|0}for(var a=2,n=0;n<64;)t(a)&&(n<8&&(s[n]=i(e.pow(a,.5))),u[n]=i(e.pow(a,1/3)),n++),a++}();var l=[],d=r.SHA256=o.extend({_doReset:function(){this._hash=new n.init(s.slice(0))},_doProcessBlock:function(e,t){for(var i=this._hash.words,a=i[0],n=i[1],o=i[2],r=i[3],s=i[4],d=i[5],c=i[6],g=i[7],h=0;h<64;h++){if(h<16)l[h]=0|e[t+h];else{var p=l[h-15],v=(p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3,m=l[h-2],f=(m<<15|m>>>17)^(m<<13|m>>>19)^m>>>10;l[h]=v+l[h-7]+f+l[h-16]}var C=a&n^a&o^n&o,y=(a<<30|a>>>2)^(a<<19|a>>>13)^(a<<10|a>>>22),D=g+((s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25))+(s&d^~s&c)+u[h]+l[h];g=c,c=d,d=s,s=r+D|0,r=o,o=n,n=a,a=D+(y+C)|0}i[0]=i[0]+a|0,i[1]=i[1]+n|0,i[2]=i[2]+o|0,i[3]=i[3]+r|0,i[4]=i[4]+s|0,i[5]=i[5]+d|0,i[6]=i[6]+c|0,i[7]=i[7]+g|0},_doFinalize:function(){var t=this._data,i=t.words,a=8*this._nDataBytes,n=8*t.sigBytes;return i[n>>>5]|=128<<24-n%32,i[14+(n+64>>>9<<4)]=e.floor(a/4294967296),i[15+(n+64>>>9<<4)]=a,t.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(d),t.HmacSHA256=o._createHmacHelper(d)}(Math),i.SHA256)}(Gt)),Gt.exports),Ht=i(jt);class qt{static getHashDoubleForMEGroup(e,t){return this.calculateHash(e+t)}static getHashDouble({visitorIdentifier:e,id:t,respoolTime:i}){let a="";return i&&(a+=String(i)),this.calculateHash(e+t+a)}static calculateHash(e){const t=Ht(e).toString();return parseInt(t,16)/Math.pow(2,256)}}class Wt{constructor(e,t,i,a,n){this.storage=e,this.storageForcedExperimentVariations=t,this.storageForcedFeatureVariations=i,this.visitorCodeManager=a,this.clientConfiguration=n,a.setVariationConfiguration(this)}updateDataStatus({visitorCode:e,experimentIdList:t,status:i}){const a=this.storage.read();if(!a.ok)return a;let n=a.data;n[e]||(n[e]={});for(const a of t)n[e][a]=Object.assign(Object.assign({},n[e][a]),{status:i});return this.storage.write(n)}getUnsentData(t){return this.getVariationData(t,t=>t===e.TrackingStatus.Unsent)}getVisitorsWithUnsentData(){I.debug`CALL: VariationConfiguration.unsentDataVisitors()`;const t=this.storage.read();if(!t.ok)return I.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (result: ${t})`,[];const i=[];for(const[a,n]of Object.entries(t.data))Object.values(n).some(t=>t.status===e.TrackingStatus.Unsent)&&i.push(a);return I.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (visitors: ${i})`,i}getPendingData(t){return this.getVariationData(t,t=>t===e.TrackingStatus.Pending)}getStoredVariations(t){const i=this.storage.read();if(!i.ok)return i;const a=i.data[t];return a?m.Ok(a):m.Err(new w(e.KameleoonException.StorageRead,t))}getVariation({visitorCode:t,visitorIdentifier:i,featureFlag:a,targetingData:n,packageInfo:o,clientConfiguration:r,dataManager:u,legalConsent:l,track:d=!0,withAssignment:c=!1}){I.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c})`;const{rules:h,featureKey:p,id:v,defaultVariationKey:f}=a,C=r.isConsentRequired?l:$t.Given;for(const l of h){const{segment:h,experimentId:y,id:D,exposition:E,respoolTime:T,variationByExposition:S}=l,k=Date.now(),V=this.getForcedExperimentVariation(t,l.experimentId);let R=null;if(V.ok&&(R=V.data,null==R?void 0:R.forceTargeting)){I.info`Visitor ${t} has been forced targeted for ${l}`;const e=this.createAndSaveForcedTargetedVariation(t,a,l,R,d,c,k);return I.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${e})`,m.Ok(e)}const b=Ve.checkTargeting({segment:h,visitorCode:t,experimentId:y,targetingData:n,packageInfo:o,clientConfiguration:r,dataManager:u,variationConfiguration:this});if(!b.ok)return I.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${b})`,b;if(!b.data)continue;if(I.info`Visitor ${t} has been targeted for ${l}`,R){const e=this.createAndSaveForcedTargetedVariation(t,a,l,R,d,c,k);return I.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${e})`,m.Ok(e)}const A=qt.getHashDouble({visitorIdentifier:i,respoolTime:T,id:String(D)});if(I.debug`Calculated ruleHash: ${A} for code: ${i}`,A<=E){if(C==$t.NotGiven&&l.type==s.EXPERIMENTATION){if(r.consentBlockingBehaviour==g.PartiallyBlocked)break;return m.Err(new w(e.KameleoonException.FeatureFlagEnvironmentDisabled,`Evaluation of ${l} is blocked because consent is not provided for visitor '${t}'`))}let u=this.evaluateCBScores(l,i,n);if(!u){const e=qt.getHashDouble({visitorIdentifier:i,respoolTime:T,id:String(y)});I.debug`Calculated variationHash: ${e} for code: ${i}`,u=Ve.getVariationByHash(S,e)}if(u){c&&this.updateStoredVariations(t,{[y]:{variationId:u.variationId,isTargetedRule:l.type===s.TARGETED_DELIVERY,status:d?e.TrackingStatus.Unsent:e.TrackingStatus.Sent,assignedTime:k}});const r={variationId:u.variationId,variationKey:u.variationKey,rule:l,featureFlagId:v,featureKey:p,experimentId:y,isTargetedRule:l.type===s.TARGETED_DELIVERY};return I.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${r})`,m.Ok(r)}}if(l.type===s.TARGETED_DELIVERY){const e={featureKey:p,featureFlagId:v,experimentId:null,variationKey:f,variationId:null,rule:null,isTargetedRule:!0};return I.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${e})`,m.Ok(e)}}const y={featureKey:p,featureFlagId:v,experimentId:null,variationKey:f,variationId:null,rule:null,isTargetedRule:!1};return I.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${i}, featureFlag: ${a}, targetingData: ${n}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${y})`,m.Ok(y)}createAndSaveForcedTargetedVariation(t,i,a,n,o,r,u){const l={variationKey:n.varByExp.variationKey,variationId:n.varByExp.variationId,rule:a,featureFlagId:i.id,featureKey:i.featureKey,experimentId:a.experimentId,isTargetedRule:a.type===s.TARGETED_DELIVERY};return r&&this.updateStoredVariations(t,{[a.experimentId]:{variationId:l.variationId,isTargetedRule:a.type===s.TARGETED_DELIVERY,status:o?e.TrackingStatus.Unsent:e.TrackingStatus.Sent,assignedTime:u}}),l}updateStoredVariations(e,t){I.debug`CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${e}, variationData: ${t})`;const i=this.storage.read();if(!i.ok)return I.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${e}, variationData: ${t}) -> (result: ${i})`,i;let a=i.data;a[e]||(a[e]={});for(const i in t)a[e][i]=t[i];const n=this.storage.write(a);return I.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${e}, variationData: ${t}) -> (resultWrite: ${n})`,n}getVariationData(e,t){const i=this.getStoredVariations(e);if(!i.ok)return[];const a=[];for(const[e,n]of Object.entries(i.data))t(n.status)&&a.push({experimentId:Number(e),variationId:n.variationId,isTargetedRule:n.isTargetedRule});return a}updateForcedExperimentVariation(e,t,i){I.debug`CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return I.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i}) -> (result: ${a})`,a;let n=a.data;n[e]||(n[e]={}),i?n[e][t]=i:delete n[e][t];const o=this.storageForcedExperimentVariations.write(n);return I.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i}) -> (resultWrite: ${o})`,o}updateForcedFeatureVariations(e,t){I.debug`CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return I.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t}) -> (result: ${i})`,i;let a=i.data;a[0]||(a[0]={}),a[1]||(a[1]={});const n=a[0],o=a[1];n[e]||(n[e]={}),o[e]||(o[e]={}),t.forEach(t=>{(t.simulated?o[e]:n[e])[t.featureKey]=t});const r=this.storageForcedFeatureVariations.write(a);return I.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t}) -> (resultWrite: ${r})`,r}clearSimulatedVariations(e){var t;I.debug`CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return I.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e}) -> (result: ${i})`,i;let a;const n=i.data;return(null===(t=null==n?void 0:n[1])||void 0===t?void 0:t[e])?(delete n[1][e],a=this.storageForcedFeatureVariations.write(n)):a=m.Ok(),I.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e}) -> (resultWrite: ${a})`,a}getForcedFeatureVariation(e,t){var i,a,n,o;I.debug`CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t})`;const r=this.storageForcedFeatureVariations.read();if(!r.ok)return I.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (simulatedResult: ${r})`,r;const s=null===(a=null===(i=r.data[1])||void 0===i?void 0:i[e])||void 0===a?void 0:a[t];if(s)return I.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (simulatedData: ${s})`,m.Ok(s);const u=null===(o=null===(n=r.data[0])||void 0===n?void 0:n[e])||void 0===o?void 0:o[t];return I.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (forcedData: ${u})`,m.Ok(u)}getForcedExperimentVariation(e,t){var i;I.debug`CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return I.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}) -> (forcedResult: ${a})`,a;const n=null===(i=a.data[e])||void 0===i?void 0:i[t];return I.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}) -> (forcedExperiment: ${n})`,m.Ok(n)}parseForcedVariationData(e,t){const i=this.clientConfiguration.featureFlags.get(e.featureKey);if(!i)return I.error`Simulated feature flag '${e.featureKey}' not found`,null;let a=null;if(0===e.experimentId)return a={featureKey:e.featureKey,rule:null,varByExp:null,simulated:t},a;for(const n of i.rules){if(e.experimentId!==n.experimentId)continue;const i=n.variationByExposition.find(t=>t.variationId===e.variationId);if(i)return a={featureKey:e.featureKey,rule:{type:n.type,experimentId:n.experimentId},varByExp:{variationKey:i.variationKey,variationId:i.variationId},simulated:t},a}return I.error`Simulated variation ${e.variationId} not found`,null}simulatedVariationFromJson(e,t){if(I.debug`CALL: VariationConfiguration.simulatedVariationFromJson(featureKey: ${e}, data: ${t})`,!this.isSimulatedVariationJson(t))return null;const i=this.parseForcedVariationData({featureKey:e,variationId:t.varId,experimentId:t.expId},!0);return I.debug`RETURN: VariationConfiguration.simulatedVariationFromJson(featureKey: ${e}, data: ${t}) -> (forcedVariation: ${i})`,i}isSimulatedVariationJson(e){return e&&("number"==typeof e.expId||null===e.expId)}evaluateCBScores(e,t,i){if(!(null==i?void 0:i.cbScores))return null;I.debug`CALL: KameleoonClientImpl.evaluateCBScores(rule: ${e}, targetingData: ${i}, visitorIdentifier: ${t})`;const a=e.experimentId,n=new Le(i.cbScores.cbs).getValues().get(a);let o=null;if(void 0!==n){const i=e.variationByExposition,r=n.map(e=>i.filter(t=>e.ids.includes(t.variationId))).find(e=>e.length>0);if(r){let i=0;if(r.length>1){const n=qt.getHashDouble({visitorIdentifier:t,respoolTime:e.respoolTime,id:String(a)});I.debug`Calculated cbs hash ${n} for code ${t}`,i=Math.min(Math.floor(n*r.length),r.length-1)}o=r[i]}}return I.debug`RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${e}, targetingData: ${i}, visitorIdentifier: ${t}) -> (variation: ${o})`,o}}let Yt=class{constructor({siteCode:e,externalEventSource:t,urlProvider:i}){this.url=i.getEventSourceUrl(),this.siteCode=e,this.eventSource=t,this.isConnectionOpen=!1}get isOpen(){return this.isConnectionOpen}open(e){this.eventSource.open({onEvent:this.handleMessage(e),url:this.url,eventType:"configuration-update-event"}),this.isConnectionOpen=!0,I.info`Established a new SSE connection with: ${this.url}`}close(){this.eventSource.close(),this.isConnectionOpen=!1,I.info`SSE connection: '${this.url}' was successfully closed`}onError(e){this.eventSource.onError?this.eventSource.onError(e):I.warning("EventSource does not have `onError` method provided. Real-time errors won't be handled.")}handleMessage(e){return t=>{I.debug`Received new message from: ${this.url}`;const i=JSON.parse(t.data),{siteCode:a,ts:n}=i;this.siteCode===a&&e(n)}}};var Xt;!function(e){e[e.Kb=1e3]="Kb",e[e.Mb=1e6]="Mb",e[e.Gb=1e9]="Gb"}(Xt||(Xt={}));const Jt=10*Xt.Mb;class Qt{constructor(e){this.currentSize=0,this.resultBody=[],this.hasUserAgent=!1,this.trackingVisitors={},this.prng=e}getTrackingBody(){const e={body:this.resultBody.join("\n"),hasUserAgent:this.hasUserAgent};return this.cleanup(),e}addData({visitorCode:e,variationData:t,visitorData:i,userAgent:a,isConsentProvided:n,isMappingIdentifier:o}){const r=[],s=this.getVariationDataLines(t),u=this.getVisitorDataLines(i);return r.push(...s,...u),this.addVisitorTrackingLines({visitorCode:e,lines:r,userAgent:a,isConsentProvided:n,isMappingIdentifier:o})}getVisitorDataLines(t){const i=[];for(const a of t){let t;if(!(a instanceof Je||a.data.type!==e.KameleoonData.Conversion&&a.data.type!==e.KameleoonData.PageView)){const e=a.data.nonce;e?t=e:(t=Ve.getNonce(this.prng),a.data.nonce=t)}t||(t=Ve.getNonce(this.prng)),i.push(a.url+U+t)}return i}getVariationDataLines(e){const t=[];return e.forEach(e=>{t.push("eventType=experiment"+P+e.experimentId+"&variationId="+e.variationId+U+Ve.getNonce(this.prng))}),t}prepareVisitorBody(e){const t=this.trackingVisitors[e];if(!t)return m.Err();const{lines:i,userAgent:a,isMappingIdentifier:n,isConsentProvided:o}=t,r=this.getIdentifier(e,n);if(i.length)i.forEach((e,t)=>{i[t]=e+r}),I.debug`Sending tracking request for unsent data ${i} of visitor ${e} with given (or not required) consent ${o}`;else if(o){const t=this.getActivityLine();i.push(t+r),I.debug`Sending tracking request for activity of visitor ${e} with given consent`}else I.debug`No data to send for visitor ${e} with no consent`;a&&i.length&&(i[0]+="&userAgent="+a,this.hasUserAgent=!0);const s=this.checkSize(i);return s.ok&&this.resultBody.push(...i),s}cleanup(){this.currentSize=0,this.resultBody=[],this.hasUserAgent=!1,this.trackingVisitors={}}checkSize(e){let t=0;return t+=e.reduce((e,t)=>e+4*t.length,0),t+this.currentSize>Jt?m.Err():(this.currentSize+=t,m.Ok())}addVisitorTrackingLines({visitorCode:e,lines:t,userAgent:i,isConsentProvided:a,isMappingIdentifier:n}){return this.trackingVisitors[e]?(i&&(this.trackingVisitors[e].userAgent=i),this.trackingVisitors[e].lines.push(...t)):this.trackingVisitors[e]={isMappingIdentifier:n,isConsentProvided:a,userAgent:i,lines:t},this.prepareVisitorBody(e)}getActivityLine(){return"eventType=activity"+U+Ve.getNonce(this.prng)}getIdentifier(e,t){return(t?H:L)+encodeURIComponent(e)}}class Zt{constructor({dataManager:e,trackingStorage:t,variationConfiguration:i,trackingInterval:a,requester:n,prng:o,clientConfiguration:r}){this.intervalId=null,I.debug`CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng, clientConfiguration)`,this.dataManager=e,this.trackingStorage=t,this.variationConfiguration=i,this.requester=n,this.bodyProvider=new Qt(o),this.clientConfiguration=r;try{this.intervalId=setInterval(()=>{this.sendDataAll()},a)}catch(e){throw this.intervalId&&clearInterval(this.intervalId),e}I.debug`RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng, clientConfiguration)`}scheduleVisitor(e,t){I.debug`CALL: Tracker.scheduleVisitor(visitorCode: ${e}, isConsentProvided: ${t})`,this.trackingStorage.read().and(i=>{i.scheduledVisitors[`_${e}`]={isConsentProvided:t},this.trackingStorage.write(i)}),I.debug`RETURN: Tracker.scheduleVisitor(visitorCode: ${e}, isConsentProvided: ${t})`}checkIsIdentifier(e){var t,i;const a=this.dataManager.isUniqueIdentifier(e),n=null!==(i=null===(t=this.dataManager.getMappingIdentifier(e))||void 0===t?void 0:t.mappingIdentifier)&&void 0!==i?i:e;let o=!1;if(a){const t=this.dataManager.getLinkedVisitor(e),i=this.dataManager.identifierCustomDataIndex;t||"number"!=typeof i?o=!0:this.dataManager.storeData({visitorCode:e,data:[new be(i,e)]})}return o&&e!=n}getUserAgent(t){const i=this.dataManager.getVisitorData(t);if(i){const t=i[e.KameleoonData.UserAgent];if(t)return t.value}}sendDataAll(){return f(this,0,void 0,function*(){const e=this.trackingStorage.read();if(!e.ok)return;const{scheduledVisitors:t}=e.data;yield this.sendData(t)})}sendDataForVisitor(e,t){return f(this,0,void 0,function*(){this.trackingStorage.read().ok&&(yield this.sendData({[`_${e}`]:{isConsentProvided:t}}))})}sendData(t){return f(this,0,void 0,function*(){const i={},a=[],n=[];for(const[e,{isConsentProvided:o}]of Object.entries(t)){let t=e.startsWith("_")?e.substring(1):e;const r=this.checkIsIdentifier(t),s=this.getUserAgent(t),u=this.getUnsentVisitorData(t,o),l=this.getUnsentVariationData(t,o);if(!this.bodyProvider.addData({visitorCode:t,variationData:l,visitorData:u,userAgent:s,isConsentProvided:o,isMappingIdentifier:r}).ok){I.warning("Visitor data to be tracked exceeded the request size limit. Some visitor data is kept to be sent later. If it is not caused by the peak load, decreasing the tracking interval is recommended.");break}i[t]={visitorData:u,variationData:l},n.push({visitorCode:t,isConsentProvided:o}),a.push(e)}const{body:o,hasUserAgent:r}=this.bodyProvider.getTrackingBody();if(0!==a.length&&this.trackingStorage.read().and(e=>{a.forEach(t=>{delete e.scheduledVisitors[t]}),this.trackingStorage.write(e)}),o)if((yield this.requester.track(o,r)).ok)I.info`Successful request for tracking visitors: ${n}, data: ${i}`,this.updateDataStatus(i,e.TrackingStatus.Sent);else{I.error("Tracking request failed"),I.info`Failed request for tracking visitors: ${n}, data: ${i}`,this.updateDataStatus(i,e.TrackingStatus.Unsent);let t={};for(let{visitorCode:e,isConsentProvided:i}of n)e=`_${e}`,t[e]={isConsentProvided:i};this.addNotTrackedVisitors(t)}})}addNotTrackedVisitors(e){const t=this.trackingStorage.read();if(!t.ok)return;const{scheduledVisitors:i}=t.data;Object.entries(e).forEach(([e,{isConsentProvided:t}])=>{i[e]||(i[e]={isConsentProvided:t})}),this.trackingStorage.write({scheduledVisitors:i})}updateDataStatus(t,i){let a={};for(const[e,{visitorData:n,variationData:o}]of Object.entries(t)){const t=n.filter(e=>!(e instanceof Je)).map(e=>{const t=e;return t.status=i,t});t.length&&(a[e]=t);const r=o.map(e=>String(e.experimentId));this.variationConfiguration.updateDataStatus({visitorCode:e,experimentIdList:r,status:i})}0!==Object.keys(a).length&&(i===e.TrackingStatus.Sent?this.dataManager.storeTrackedData(a):this.dataManager.storeDataForVisitors(a,!1))}getUnsentVisitorData(t,i){const a=this.dataManager.getUnsentData(t),n=[];if(!a.length)return[];for(const t of a)t.url&&(i||this.clientConfiguration.hasAnyTargetedDeliveryRule&&!(t instanceof Je)&&t.data.type===e.KameleoonData.Conversion)&&n.push(t);if(n.length){const i=n.filter(e=>!(e instanceof Je)).map(t=>{const i=t;return i.status=e.TrackingStatus.Pending,i});this.dataManager.storeTrackedData({[t]:i})}return n}getUnsentVariationData(t,i){const a=this.variationConfiguration.getUnsentData(t),n=new Set;if(!a.length)return[];const o=a.filter(e=>{const t=e.isTargetedRule||i;return t&&n.add(String(e.experimentId)),t});return this.variationConfiguration.updateDataStatus({visitorCode:t,experimentIdList:Array.from(n),status:e.TrackingStatus.Pending}),o}}class ei{constructor(e,t){if(I.debug`CALL: new HybridManager(expirationPeriod: ${e})`,e<=0)throw new Error("'expirationPeriod' must be positive!");this.expirationPeriod=e,this.clientConfiguration=t,I.debug`RETURN: new HybridManager(expirationPeriod: ${e})`}getEngineTrackingCode(e){var t;I.debug`CALL: HybridManager.getEngineTrackingCode(assignedVariations: ${e})`;let i=ei.TRACKING_CODE_INIT;const a=Date.now()-this.expirationPeriod,n=this.clientConfiguration.experimentMap;for(const[o,r]of Object.entries(e)){if(void 0===r.assignedTime||r.assignedTime<a)continue;const e=Number(o),s=!(null===(t=n.get(e))||void 0===t?void 0:t.hasJsCssVariables);i+=`window.kameleoonQueue.push(['${ei.ASSIGN_VARIATION_COMMAND}',${e},${r.variationId},true]);`,i+=`window.kameleoonQueue.push(['${ei.TRIGGER_COMMAND}',${e},${s}]);`}return I.debug`RETURN: HybridManager.getEngineTrackingCode(assignedVariations: ${e}) -> (trackingCode: ${i})`,i}getAssignedVariationsFromKameleoonQueue(t){if(I.debug`CALL: HybridManager.getAssignedVariationsEngineTrackingCode(queue: ${t})`,!Array.isArray(t))return{};const i={};for(const a of t){if(!this.isAssignVariationCommand(a))continue;const[,t,n]=a;i[t]={variationId:n,isTargetedRule:!1,status:e.TrackingStatus.Unsent,assignedTime:Date.now()}}return I.debug`RETURN: HybridManager.getAssignedVariationsEngineTrackingCode(queue: ${t}) -> (assignedVariations: ${i})`,i}isAssignVariationCommand(e){if(!Array.isArray(e))return!1;const[t,i,a]=e;return t===ei.ASSIGN_VARIATION_COMMAND&&"number"==typeof i&&"number"==typeof a}}ei.TRACKING_CODE_INIT="window.kameleoonQueue=window.kameleoonQueue||[];",ei.ASSIGN_VARIATION_COMMAND="Experiments.assignVariation",ei.TRIGGER_COMMAND="Experiments.trigger";let ti=class t{constructor({siteCode:t,dependencies:i,configuration:a,internalConfiguration:n,stubMode:o}){var r;if(this.initialized=!1,this.stubMode=o,o)return this.variationConfiguration={},this.clientConfiguration={},this.dataManager={},this.consentDataStorage={},this.hybridManager={},this.requester={},this.externalPackageInfo={},this.visitorCodeManager={},this.eventManager={},this.tracker={},void(this.environment="");const s=null==n?void 0:n.externals.externalLogger;s&&I.setLogger(s),Qe.setConditionFactoryInstance(new wt),I.debug`CALL: new KameleoonClient(siteCode: ${t}, dependencies: ${i}, configuration: ${a})`;const{settings:u}=new Be(t,a);this.environment=u.environment;const{externalStorage:l,externalEventSource:d,externalPackageInfo:c,externalVisitorCodeManager:g,externalRequester:h,externalPRNG:p,customDataManager:v}=n.externals,{useAbortController:m}=n.settings,f=new xt(l,e.KameleoonStorageKey.ClientData),y=new xt(l,e.KameleoonStorageKey.VariationData),D=new xt(l,e.KameleoonStorageKey.ForcedExperimentVariation),E=new xt(l,e.KameleoonStorageKey.ForcedFeatureVariation),T=new xt(l,e.KameleoonStorageKey.ConsentData),S=new xt(l,e.KameleoonStorageKey.TrackingData);let k=v;if(!k){const t=new xt(l,e.KameleoonStorageKey.TargetingData),i=new xt(l,e.KameleoonStorageKey.DataInfo);k=new Mt({dataStorage:t,infoStorage:i,cleanupInterval:u.cleanupInterval,packageInfo:c})}const V=null!==(r=null==i?void 0:i.urlProvider)&&void 0!==r?r:new ne;V.initialize({domain:u.networkDomain,siteCode:u.siteCode,packageInfo:c,environment:u.environment});const R=new Y({urlProvider:V,useAbortController:m,packageInfo:c,externalRequester:h,requestTimeout:u.requestTimeout,trackRetryDelay:u.trackRetryDelay}),w=new Yt({siteCode:u.siteCode,externalEventSource:d,urlProvider:V}),b=new C,A=new Pe({urlProvider:V,storage:f,updateInterval:u.updateInterval,dataManager:k,eventManager:b,requester:R,eventSource:w,externalVisitorCodeManager:g,externalPackageInfo:c,defaultDataFile:null==a?void 0:a.defaultDataFile}),K=new ei(5e3,A),O=new Wt(y,D,E,g,A),x=new Zt({dataManager:k,trackingStorage:S,variationConfiguration:O,requester:R,trackingInterval:u.trackingInterval,prng:p,clientConfiguration:A});this.tracker=x,this.variationConfiguration=O,this.requester=R,this.hybridManager=K,this.dataManager=k,this.clientConfiguration=A,this.externalPackageInfo=c,this.consentDataStorage=T,this.visitorCodeManager=g,this.eventManager=b,null!==u.cleanupInterval&&new Nt(l,u.cleanupInterval),I.debug`RETURN: new KameleoonClient(siteCode: ${t}, dependencies: ${i}, configuration: ${a})`}initialize(){return f(this,0,void 0,function*(){if(this.stubMode)return!1;I.info("CALL: KameleoonClient.initialize()");const e=yield this.clientConfiguration.initialize();return e.throw(),this.initialized=!0,I.info`RETURN: KameleoonClient.initialize() -> (result: ${e.ok})`,e.ok})}addData(t,...i){if(this.stubMode)throw new w(e.KameleoonException.Initialization);const a="string"==typeof t?{visitorCode:t,data:i}:t,{visitorCode:n,data:o,track:r=!0}=a;if(I.info`CALL: KameleoonClient.addData(visitorCode: ${n}, track: ${r}, data: ${o})`,this.visitorCodeManager.validateVisitorCode(n).throw(),!this.initialized)throw new w(e.KameleoonException.Initialization);this.dataManager.storeData({visitorCode:n,track:r,data:o}).throw(),I.info`RETURN: KameleoonClient.addData(visitorCode: ${n}, track: ${r}, data: ${o})`}getRemoteVisitorData({visitorCode:t,shouldAddData:i=!0,filters:a=qe}){return f(this,0,void 0,function*(){if(this.stubMode)throw new w(e.KameleoonException.Initialization);if(I.info`CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${t}, shouldAddData: ${i}, filters: ${a})`,!this.initialized)throw new w(e.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const{previousVisitAmount:n}=a;if("number"==typeof n&&(n<1||n>25))throw new w(e.KameleoonException.VisitAmount);const o=this.dataManager.isUniqueIdentifier(t),r=(yield this.requester.getVisitorData({visitorCode:t,filters:a,isMappingIdentifier:o})).throw(),{visitorData:s,storageVisitorData:u,visitsData:l,mappingIdentifier:d}=Ue.parseVisitorData({data:r,filters:a,visitorCode:t,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});for(const e of u)(i||this.dataManager.isPersistentCustomData(e))&&this.addData(t,e);return l&&i&&this.addData(t,l),(null==a?void 0:a.visitorCode)&&d&&this.dataManager.setMappingIdentifier(t,d),I.info`RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${t}, shouldAddData: ${i}, filters: ${a}) -> (visitorData: ${s})`,s})}trackConversion({visitorCode:e,goalId:t,negative:i,revenue:a,metadata:n}){this.stubMode||(I.info`CALL: KameleoonClient.trackConversion(visitorCode: ${e}, goalId: ${t}, negative: ${i}, revenue: ${a}, metadata: ${n})`,this.addData(e,new Ae({goalId:t,revenue:a,negative:i,metadata:n})),this.flush(e),I.info`RETURN: KameleoonClient.trackConversion(visitorCode: ${e}, goalId: ${t}, negative: ${i}, revenue: ${a}, metadata: ${n})`)}_flushInternal(e,t=!1){return f(this,0,void 0,function*(){if("string"==typeof e)t?yield this.tracker.sendDataForVisitor(e,this._isConsentProvided(e)):this.tracker.scheduleVisitor(e,this._isConsentProvided(e));else{for(const e of this.dataManager.unsentDataVisitors)this.tracker.scheduleVisitor(e,this._isConsentProvided(e));for(const e of this.variationConfiguration.getVisitorsWithUnsentData())this.tracker.scheduleVisitor(e,this._isConsentProvided(e));t&&(yield this.tracker.sendDataAll())}})}flushInstant(t){return f(this,0,void 0,function*(){if(this.stubMode)throw new w(e.KameleoonException.Initialization);const{visitorCode:i}=this._parseFlushParams(t);if(I.info`CALL: KameleoonClient.flushInstant(visitorCode: ${t})`,!this.initialized)throw new w(e.KameleoonException.Initialization);yield this._flushInternal(i,!0),I.info`RETURN: KameleoonClient.flushInstant(visitorCode: ${t})`})}flush(t){if(this.stubMode)throw new w(e.KameleoonException.Initialization);const{visitorCode:i,isInstant:a}=this._parseFlushParams(t);if(I.info`CALL: KameleoonClient.flush(visitorCode: ${i}, instant: ${a})`,!this.initialized)throw new w(e.KameleoonException.Initialization);this._flushInternal(i,a),I.info`RETURN: KameleoonClient.flush(visitorCode: ${i}, instant: ${a})`}_parseFlushParams(e){var t;let i,a=!1;return"string"==typeof e?i=e:e&&(i=e.visitorCode,a=null!==(t=e.instant)&&void 0!==t&&t),void 0!==i&&this.visitorCodeManager.validateVisitorCode(i).throw(),{visitorCode:i,isInstant:a}}getFeatureFlags(){if(this.stubMode)throw new w(e.KameleoonException.Initialization);if(I.info("CALL: KameleoonClient.getFeatureFlags()"),!this.initialized)throw new w(e.KameleoonException.Initialization);const t=this.clientConfiguration.featureFlags,i=[];return t.forEach(({id:e,featureKey:t})=>{i.push({id:e,key:t})}),I.info`RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${i})`,i}getVisitorFeatureFlags(t){if(this.stubMode)throw new w(e.KameleoonException.Initialization);if(I.info`CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${t})`,!this.initialized)throw new w(e.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const i=this._getActiveFeatureVariations(t),a=[];return i.forEach(({featureFlagId:e,featureKey:t})=>{a.push({id:e,key:t})}),I.info`RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${t}) -> (FeatureFlags: ${a})`,a}getVariation({visitorCode:t,featureKey:i,track:a=!0}){if(this.stubMode)throw new w(e.KameleoonException.Initialization);I.info`CALL: KameleoonClient.getVariation(visitorCode: ${t}, featureKey: ${i}, track: ${a})`,this.visitorCodeManager.validateVisitorCode(t).throw();const n=this._getFeatureVariation({visitorCode:t,featureKey:i,track:a}).throw();return I.info`RETURN: KameleoonClient.getVariation(visitorCode: ${t}, featureKey: ${i}, track: ${a}) -> (variation: ${n})`,n}getVariations({visitorCode:t,onlyActive:i=!1,track:a=!0}){if(this.stubMode)throw new w(e.KameleoonException.Initialization);I.info`CALL: KameleoonClient.getVariations(visitorCode: ${t}, onlyActive: ${i}, track: ${a})`,this.visitorCodeManager.validateVisitorCode(t).throw();const n=new Map,o=this.clientConfiguration.featureFlags;for(const r of o.values())try{const e=this._getFeatureVariation({visitorCode:t,featureKey:r.featureKey,track:a});!e.ok||i&&e.data.key===ze||n.set(r.featureKey,e.data)}catch(t){if(t instanceof w&&t.type!==e.KameleoonException.FeatureFlagEnvironmentDisabled)throw t}return I.info`RETURN: KameleoonClient.getVariations(visitorCode: ${t}, onlyActive: ${i}, track: ${a}) -> (variations: ${n})`,n}getActiveFeatureFlags(t){if(this.stubMode)throw new w(e.KameleoonException.Initialization);if(I.info`CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${t})`,!this.initialized)throw new w(e.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const i=this._getActiveFeatureVariations(t),a=new Map;return i.forEach(e=>{const{variationKey:i,featureKey:n,variationId:o,experimentId:r}=e;let s=[];null!==o&&null!==r&&(s=this._getFeatureVariables({visitorCode:t,featureKey:n,variationKey:i}));const u=s.map(e=>Ue.parseFeatureVariable(e).throw());a.set(e.featureKey,{name:"",key:i,id:o,experimentId:r,variables:u})}),I.info`RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${t}) -> (FeatureFlags: ${a})`,a}getFeatureFlagVariationKey(t,i){if(this.stubMode)throw new w(e.KameleoonException.Initialization);I.info`CALL: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${t}, featureKey: ${i})`,this.visitorCodeManager.validateVisitorCode(t).throw();const{key:a}=this._getFeatureVariation({visitorCode:t,featureKey:i,track:!0}).throw();return I.info`RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${t}, featureKey: ${i}) -> (variationKey: ${a})`,a}getFeatureFlagVariable({visitorCode:t,featureKey:i,variableKey:a}){if(this.stubMode)throw new w(e.KameleoonException.Initialization);I.info`CALL: KameleoonClient.getFeatureFlagVariable(visitorCode: ${t}, featureKey: ${i}, variableKey: ${a})`,this.visitorCodeManager.validateVisitorCode(t).throw();const{key:n}=this._getFeatureVariation({visitorCode:t,featureKey:i,track:!0}).throw(),o=this._getFeatureVariables({visitorCode:t,featureKey:i,variationKey:n}).find(e=>e.key===a);if(!o)throw new w(e.KameleoonException.FeatureFlagVariableNotFound,a,t);const{type:r,value:s}=Ue.parseFeatureVariable(o).throw(),u={type:r,value:s};return I.info`RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${t}, featureKey: ${i}, variableKey: ${a}) -> (FeatureFlagVariable: ${u})`,u}getFeatureFlagVariables(t,i){if(this.stubMode)throw new w(e.KameleoonException.Initialization);I.info`CALL: KameleoonClient.getFeatureFlagVariables(visitorCode: ${t}, featureKey: ${i})`,this.visitorCodeManager.validateVisitorCode(t).throw();const{key:a}=this._getFeatureVariation({visitorCode:t,featureKey:i,track:!0}).throw(),n=this._getFeatureVariables({visitorCode:t,featureKey:i,variationKey:a}),o=[];for(const e of n){const t=Ue.parseFeatureVariable(e).throw();o.push(t)}return I.info`RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${t}, featureKey: ${i}) -> (FeatureFlagVariables: ${o})`,o}isFeatureFlagActive(t,i){if(this.stubMode)throw new w(e.KameleoonException.Initialization);let[a,n,o]=["","",!0];"string"==typeof t?(a=t,n=i):([a,n]=[t.visitorCode,t.featureKey],void 0!==t.track&&(o=t.track)),I.info`CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${a}, featureKey: ${n}, track ${o})`,this.visitorCodeManager.validateVisitorCode(a).throw();try{const{key:e}=this._getFeatureVariation({visitorCode:a,featureKey:n,track:o}).throw(),t=e!==ze;return I.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${a}, featureKey: ${n}, track: ${o}) -> (isActive: ${t})`,t}catch(t){if(t instanceof w&&t.type===e.KameleoonException.FeatureFlagEnvironmentDisabled)return I.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${a}, featureKey: ${n}, track: ${o}) -> (isActive: false)`,!1;throw t}}getRemoteData(e){return f(this,0,void 0,function*(){if(this.stubMode)return null;I.info`CALL: KameleoonClient.getRemoteData(key: ${e})`;const t=yield this.requester.getRemoteData(e);return I.info`RETURN: KameleoonClient.getRemoteData(key: ${e}) -> (remoteData: ${t})`,t.throw()})}getVisitorWarehouseAudience({visitorCode:t,customDataIndex:i,warehouseKey:a}){return f(this,0,void 0,function*(){if(this.stubMode)return null;I.info`CALL: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${t}, customDataIndex: ${i}, warehouseKey: ${a})`,this.visitorCodeManager.validateVisitorCode(t).throw();const n=yield this.getRemoteData(a||t);if(!n)throw new w(e.KameleoonException.RemoteData,`No data found for ${a||t} key`);if(!n[je]||0===Object.keys(n[je]).length)return I.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${t}, customDataIndex: ${i}, warehouseKey: ${a}) -> (customData: null)`,null;const o=new be(i,...Object.keys(n[je]));return this.dataManager.storeData({visitorCode:t,track:!0,data:[o]}),I.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${t}, customDataIndex: ${i}, warehouseKey: ${a}) -> (customData: ${o})`,o})}onEvent(t,i){if(this.stubMode)throw new w(e.KameleoonException.Initialization);if(I.info`CALL: KameleoonClient.onEvent(event: ${t}, callback)`,!this.initialized)throw new w(e.KameleoonException.Initialization);this.eventManager.addEventHandler(t,i),I.info`RETURN: KameleoonClient.onEvent(event: ${t}, callback)`}getEngineTrackingCode(e){if(this.stubMode)return"";I.info`CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${e})`,this.visitorCodeManager.validateVisitorCode(e).throw();const t=this.variationConfiguration.getStoredVariations(e),i=this.hybridManager.getEngineTrackingCode(t.ok?t.data:{});return I.info`RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${e}) -> (trackingCode: ${i})`,i}_processKameleoonQueue(e,t){if(this.stubMode)return;I.debug`CALL: KameleoonClient._processHybridQueue(visitorCode: ${e}, queue: ${t})`;const i=this.hybridManager.getAssignedVariationsFromKameleoonQueue(t);Object.keys(i).length&&this.variationConfiguration.updateStoredVariations(e,i).ok&&(this.flush(e),I.debug`RETURN: KameleoonClient._processHybridQueue(visitorCode: ${e}, queue: ${t})`)}isInitialized(){return I.debug`CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`,this.initialized}setLogLevel(e){I.setLogLevel(e)}setForcedVariation({visitorCode:e,experimentId:t,variationKey:i,forceTargeting:a=!0}){this.stubMode||(I.info`CALL: KameleoonClient.setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a})`,this.visitorCodeManager.validateVisitorCode(e).throw(),this._setForcedVariation({visitorCode:e,experimentId:t,variationKey:i,forceTargeting:a}).throw(),I.info`RETURN: KameleoonClient.setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a})`)}evaluateAudiences(e){if(this.stubMode)return;I.info`CALL: KameleoonClient.evaluateAudiences(visitorCode: ${e})`,this.visitorCodeManager.validateVisitorCode(e).throw();const t=[],i=this.dataManager.getVisitorData(e);for(let a of this.clientConfiguration.segments.values()){if(!a.audienceTracking)continue;const n=Ve.checkTargeting({segment:a,visitorCode:e,targetingData:i,experimentId:null,clientConfiguration:this.clientConfiguration,packageInfo:this.externalPackageInfo,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});n.ok&&n.data&&(I.info`Visitor ${e} has been targeted for ${a}`,t.push(new Ft(Number(a.id))))}0!==t.length&&this.dataManager.storeData({visitorCode:e,data:t}),this.flush(e),I.info`RETURN: KameleoonClient.evaluateAudiences(visitorCode: ${e})`}getDataFile(){const e={featureFlags:new Map,dateModified:0};if(this.stubMode)return e;I.debug`CALL: KameleoonClient.getDataFile()`;const t=this.clientConfiguration.dataFile;return I.debug`RETURN: KameleoonClient.getDataFile() -> (dataFile: ${t})`,t}setUserConsent({visitorCode:t,consent:i,setData:a}){this.stubMode||(I.info`CALL: KameleoonClient.setUserConsent(visitorCode: ${t}, consent: ${i}, setData: ${a})`,this.visitorCodeManager.validateVisitorCode(t).throw(),this.updateConsentData(t,i),i&&a({visitorCode:t,key:e.KameleoonStorageKey.VisitorCode,maxAge:Lt,path:"/"}),I.info`RETURN: KameleoonClient.setUserConsent(visitorCode: ${t}, consent: ${i}, setData: ${a})`)}updateConsentData(t,i){const a=this.consentDataStorage.read(),n=i?$t.Given:$t.NotGiven;if(!a.ok)return void(a.error.type===e.KameleoonException.StorageEmpty&&this.consentDataStorage.write({[t]:{consent:n}}));const o=a.data;o[t]={consent:n},this.consentDataStorage.write(o)}getLegalConsent(e){let t;I.debug`CALL: KameleoonClient.getLegalConsent(visitorCode: ${e})`;const i=this.consentDataStorage.read();return t=i.ok?this.extractLegalConsent(i.data[e]):$t.Unknown,I.debug`RETURN: KameleoonClient.getLegalConsent(visitorCode: ${e}) -> (legalConsent: ${t})`,t}extractLegalConsent(e){if(void 0===e)return $t.Unknown;if("boolean"==typeof e)return e?$t.Given:$t.NotGiven;const t=e.consent;return"boolean"==typeof t?t?$t.Given:$t.NotGiven:t}_isConsentProvided(e){I.debug`CALL: KameleoonClient._isConsentProvided(visitorCode: ${e})`;const{isConsentRequired:t}=this.clientConfiguration,i=!t||this.getLegalConsent(e)==$t.Given;return I.debug`RETURN: KameleoonClient._isConsentProvided(visitorCode: ${e}) -> (isConsentProvided: ${i})`,i}_getFeatureVariables({visitorCode:t,featureKey:i,variationKey:a}){I.debug`CALL: KameleoonClient._getFeatureVariables(visitorCode: ${t}, featureKey: ${i}, variationKey: ${a})`;const n=this.clientConfiguration.featureFlags.get(i);if(!n)throw new w(e.KameleoonException.FeatureFlagConfigurationNotFound,i);const o=n.variations.find(e=>e.key===a);if(!o)throw new w(e.KameleoonException.FeatureFlagVariationNotFound,a,t);return I.debug`RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${t}, featureKey: ${i}, variationKey: ${a}) -> (variables: ${o.variables})`,o.variables}_getActiveFeatureVariations(t){I.debug`CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${t})`;const i=this.clientConfiguration.featureFlags,a=[];for(const n of i.values()){const i=this._getForcedFeatureVariation(t,n.featureKey);if(n.environmentEnabled||(null==i?void 0:i.simulated))try{const e=this._evaluate({visitorCode:t,featureFlag:n,track:!1,save:!1,forcedVariation:i});e.variationKey!==ze&&a.push({variationKey:e.variationKey,variationId:e.variationId,experimentId:e.experimentId,featureFlagId:n.id,featureKey:n.featureKey,rule:null,isTargetedRule:e.ruleType===s.TARGETED_DELIVERY})}catch(t){if(t instanceof w){t.type!=e.KameleoonException.FeatureFlagEnvironmentDisabled&&I.error`Unexpected error: ${t}`;continue}}}return I.debug`RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${t}) -> (activeVariations: ${a})`,a}_evaluate({visitorCode:i,featureFlag:a,track:n,save:o,forcedVariation:r}){let u;I.debug`CALL: KameleoonClient._evaluate(visitorCode: ${i}, featureFlag: ${a}, track: ${n}, save: ${o})`;const l=this.dataManager.getVisitorData(i);if(r)u=t.EvaluatedExperiment.fromForcedFeatureVariation(a.defaultVariationKey,r);else if(this._isVisitorNotInHoldout(i,n,o,a,l)&&this._isFFUnrestrictedByMEGroup(i,a,l)){const e=this._getCodeForHash(i,a.bucketingCustomDataIndex,l),r=this.getLegalConsent(i),s=this.variationConfiguration.getVariation({visitorCode:i,visitorIdentifier:e,featureFlag:a,track:n,withAssignment:o,targetingData:l,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo,legalConsent:r}).throw();u=t.EvaluatedExperiment.fromVariationData(s)}else u=t.EvaluatedExperiment.fromDefaultVariationKey(a.defaultVariationKey);return o&&!u.isSimulated&&null!==u.experimentId&&null!==u.variationId&&this.variationConfiguration.updateStoredVariations(i,{[u.experimentId]:{variationId:u.variationId,isTargetedRule:u.ruleType===s.TARGETED_DELIVERY,status:n?e.TrackingStatus.Unsent:e.TrackingStatus.Sent,assignedTime:Date.now()}}),this.eventManager.fireEvent(e.EventType.Evaluation,{featureKey:a.featureKey,variation:{key:u.variationKey,experimentId:u.experimentId,id:u.variationId}}),I.debug`RETURN: KameleoonClient._evaluate(visitorCode: ${i}, featureFlag: ${a}, track: ${n}, save: ${o}) -> (evalExp: ${u})`,u}_isFFUnrestrictedByMEGroup(e,t,i){const a=t.mutuallyExclusiveGroup;if(!a)return!0;I.debug`CALL: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${e}, featureFlag: ${t}, visitorData: ${i})`;let n=!0;const o=this.clientConfiguration.meGroups.get(a);if(o){const r=this._getCodeForHash(e,t.bucketingCustomDataIndex,i),s=qt.getHashDoubleForMEGroup(r,a);I.debug`Calculated meGroup hash ${s} for code: ${r}, meGroup: ${a}`,n=o.getFeatureFlagByHash(s)===t}return I.debug`RETURN: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${e}, featureFlag: ${t}, visitorData: ${i}) -> (selected: ${n})`,n}_getFeatureVariation({visitorCode:t,featureKey:i,track:a}){var n,o;if(I.debug`CALL: KameleoonClient._getFeatureVariation(visitorCode: ${t}, featureKey: ${i}, track: ${a})`,!this.initialized)return m.Err(new w(e.KameleoonException.Initialization));const r=this.clientConfiguration.featureFlags.get(i);if(!r)return m.Err(new w(e.KameleoonException.FeatureFlagConfigurationNotFound,i));const s=this._getForcedFeatureVariation(t,i);if(!r.environmentEnabled&&!(null==s?void 0:s.simulated))return m.Err(new w(e.KameleoonException.FeatureFlagEnvironmentDisabled,r.featureKey,this.environment));const u=this._evaluate({visitorCode:t,featureFlag:r,track:a,save:!0,forcedVariation:s}),{experimentId:l,variationId:d,variationKey:c,isSimulated:g}=u;let h=new Map;try{this._getFeatureVariables({visitorCode:t,featureKey:i,variationKey:c}).forEach(e=>{const t=Ue.parseFeatureVariable(e).throw();h.set(e.key,t)})}catch(e){}a&&!g&&this.flush(t);const p={name:null!==(o=null===(n=r.variations.find(e=>e.key===c))||void 0===n?void 0:n.name)&&void 0!==o?o:"",key:c,id:d,experimentId:l,variables:h};return I.debug`RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${t}, featureKey: ${i}, track: ${a}) -> (variation: ${p})`,m.Ok(p)}_isVisitorNotInHoldout(t,i,a,n,o){const r=this.clientConfiguration.holdout;if(!r)return!0;I.debug`CALL: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${t}, track: ${i}, save: ${a}, featureFlag: ${n}, visitorData: ${o})`;let s=!0;if((this.clientConfiguration.isConsentRequired?this.getLegalConsent(t):$t.Given)==$t.NotGiven&&this.clientConfiguration.consentBlockingBehaviour==g.CompletelyBlocked)throw new w(e.KameleoonException.FeatureFlagEnvironmentDisabled,`Evaluation of holdout is blocked because consent is not provided for visitor '${t}'`);const u=this._getCodeForHash(t,null==n?void 0:n.bucketingCustomDataIndex,o),l=qt.getHashDouble({visitorIdentifier:u,respoolTime:null,id:String(r.experimentId)});I.debug`Calculated holdoutHash: ${l} for visitorCode: ${u}`;let d=Ve.getVariationByHash(r.variationByExposition,l);return null!==d&&(s="in-holdout"!==d.variationKey,a&&this.variationConfiguration.updateStoredVariations(t,{[r.experimentId]:{variationId:d.variationId,isTargetedRule:!1,status:i?e.TrackingStatus.Unsent:e.TrackingStatus.Sent,assignedTime:Date.now()}})),I.debug`RETURN: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${t}, track: ${i}, save: ${a}, featureFlag: ${n}, visitorData: ${o}) -> (isNotInHoldout: ${s})`,s}_setForcedVariation({visitorCode:t,experimentId:i,variationKey:a,forceTargeting:n=!0}){if(I.debug`CALL: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${i}, variationKey: '${a}', forceTargeting: ${n})`,null===a){const e=this.variationConfiguration.updateForcedExperimentVariation(t,i,null);return I.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${i}, variationKey: '${a}', forceTargeting: ${n}) -> (writeResult: ${e})`,e}let o=null,r=null;if(o=this.clientConfiguration.experimentMap.get(i),!o)return I.error`Experiment with id ${i} not found for visitor ${t}`,m.Err(new w(e.KameleoonException.FeatureFlagExperimentNotFound,i,t));if(r=o.variations.get(a),void 0===r)return I.error`Variation with key ${a} not found in experiment ${o} for visitor ${t}`,m.Err(new w(e.KameleoonException.FeatureFlagVariationNotFound,a,t));o={type:o.type,experimentId:i},r={variationKey:a,variationId:r};const s=this.variationConfiguration.updateForcedExperimentVariation(t,i,{rule:o,varByExp:r,forceTargeting:n});return I.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${i}, variationKey: '${a}', forceTargeting: ${n}) -> (writeResult: ${s})`,s}_getForcedFeatureVariation(e,t){const i=this.variationConfiguration.getForcedFeatureVariation(e,t);return i.ok?i.data:null}_getCodeForHash(e,t,i){var a;let n;if(I.debug`CALL: KameleoonClient._getCodeForHash(visitorCode: ${e}, bucketingCustomDataIndex: ${t}, visitorData: ${i})`,null!=t){const e=null==i?void 0:i.customData;if(e){const i=null===(a=e[t])||void 0===a?void 0:a.value[0];i&&(n=i)}}return n||(n=this.dataManager.getVisitorIdentifier(e)),I.debug`RETURN: KameleoonClient._getCodeForHash(visitorCode: ${e}, bucketingCustomDataIndex: ${t}, visitorData: ${i}) -> (codeForHash: ${n})`,n}_refreshDataFileIfStale(){return f(this,0,void 0,function*(){const e=yield this.clientConfiguration.refreshDataFileIfStale();return e.ok&&e.data})}};ti.EvaluatedExperiment=class{static fromForcedFeatureVariation(e,t){var i,a,n,o;let r=e;return t.varByExp?r=t.varByExp.variationKey:(null===(i=t.rule)||void 0===i?void 0:i.type)===s.EXPERIMENTATION&&(r=ze),{variationKey:r,variationId:(null===(a=t.varByExp)||void 0===a?void 0:a.variationId)||null,experimentId:(null===(n=t.rule)||void 0===n?void 0:n.experimentId)||null,ruleType:(null===(o=t.rule)||void 0===o?void 0:o.type)||null,isSimulated:t.simulated}}static fromVariationData(e){var t,i;return{variationKey:e.variationKey,variationId:e.variationId,experimentId:e.experimentId,ruleType:null!==(i=null===(t=e.rule)||void 0===t?void 0:t.type)&&void 0!==i?i:null,isSimulated:!1}}static fromDefaultVariationKey(e){return{variationKey:e,variationId:null,experimentId:null,ruleType:null,isSimulated:!1}}};class ii{static simulateSuccessRequest(t,i){switch(t){case e.RequestType.Tracking:return new Promise(e=>{e({status:204,json:()=>new Promise(e=>e(null)),text:()=>new Promise(e=>e("")),ok:!0})});case e.RequestType.Configuration:case e.RequestType.RemoteData:return new Promise(e=>{e({status:200,json:()=>new Promise(e=>e(i)),text:()=>new Promise(e=>e("")),ok:!0})});default:R(t)}}static getCookieValue(e,t){const i=e.split("; ").find(e=>{const[i,a]=e.split("=");return i===t&&""!==a});return i?i.split("=")[1]:null}}var ai,ni=m.Err,oi=m.Ok;function ri(e,t,i,a){return new(i||(i=Promise))(function(n,o){function r(e){try{u(a.next(e))}catch(e){o(e)}}function s(e){try{u(a.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(r,s)}u((a=a.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class si{sendRequest({url:e,parameters:t}){return ri(this,void 0,void 0,function*(){return yield fetch(e,t)})}}!function(e){e.PairsDelimiter="; ",e.KeyValueDelimiter="=",e.MaxAge="Max-Age",e.Path="Path",e.Domain="Domain"}(ai||(ai={}));const ui=15*e.Milliseconds.Second,li=30*e.Milliseconds.Minute;class di{getData(e){I.debug`CALL: VisitorCodeManager.getData(key: ${e})`;const t=document.cookie;let i=null;return t&&(i=ii.getCookieValue(t,e)),I.debug`RETURN: VisitorCodeManager.getData(key: ${e}) -> (visitorCode: ${i})`,i}setData({visitorCode:e,domain:t,maxAge:i,key:a,path:n}){const o=this.getResultCookie({domain:t,visitorCode:e,key:a,maxAge:i,path:n});document.cookie=o,I.debug`Cookie ${o} was added for visitor ${e}`}getResultCookie({domain:e,visitorCode:t,maxAge:i,key:a,path:n}){const o=[a+ai.KeyValueDelimiter+t,ai.MaxAge+ai.KeyValueDelimiter+i,ai.Path+ai.KeyValueDelimiter+n];return e&&o.push(ai.Domain+ai.KeyValueDelimiter+e),o.join(ai.PairsDelimiter)}}class ci{read(t){const i=localStorage.getItem(t);return t!==e.KameleoonStorageKey.ConsentData||i&&"{}"!==i?i?JSON.parse(i):null:this.getEngineConsentData()}write(e,t){localStorage.setItem(e,JSON.stringify(t))}getEngineConsentData(){var t;this.visitorCodeManager||(this.visitorCodeManager=new di);const i=this.visitorCodeManager.getData(e.KameleoonStorageKey.VisitorCode);if(!i)return null;try{const e=localStorage.getItem("kameleoonLegalConsent");if(!e)return null;const a=JSON.parse(e),n=null===(t=null==a?void 0:a.value)||void 0===t?void 0:t.AB_TESTING;return"boolean"==typeof n?{[i]:{consent:n?$t.Given:$t.NotGiven}}:null}catch(e){return null}}}class gi{open({eventType:e,onEvent:t,url:i}){const a=new EventSource(i);this.eventSource=a,this.eventSource.addEventListener(e,t)}close(){this.eventSource&&this.eventSource.close()}onError(e){this.eventSource&&(this.eventSource.onerror=e)}}class hi{getRandomNumber(){if("undefined"!=typeof window&&(null===window||void 0===window?void 0:window.crypto)){const e=new Uint32Array(1),t=4294967296;return window.crypto.getRandomValues(e),e[0]/t}return Math.random()}}class pi{log(t,i){switch(i=`${(new Date).toLocaleString("en-US",{timeZoneName:"short"})} ${i}`,t){case e.LogLevel.DEBUG:console.debug(i);break;case e.LogLevel.INFO:console.info(i);break;case e.LogLevel.WARNING:console.warn(i);break;case e.LogLevel.ERROR:console.error(i)}}}class vi{constructor(e,t,i,a){I.debug`CALL: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${a})`,this.dataManager=e,this.tracker=t,this.isConsentProvided=i,this.setup(a),I.debug`RETURN: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${a})`}setup(e){setInterval(()=>{this.updateLastActivity()},e),this.updateLastActivity()}updateLastActivity(){I.debug`CALL: VisitorActivityManager.updateLastActivity()`;const e=this.dataManager.updateLastActivity();e&&this.tracker.scheduleVisitor(e,this.isConsentProvided(e)),I.debug`RETURN: VisitorActivityManager.updateLastActivity()`}}class mi extends Mt{constructor({dataStorage:e,infoStorage:t,cleanupInterval:i,packageInfo:a,platformAnalyzer:n}){I.debug`CALL: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${i}, packageInfo: ${a}, platformAnalyzer)`,super({dataStorage:e,infoStorage:t,cleanupInterval:i,packageInfo:a}),this.visitor=null,this.platformAnalyzer=n,this.updateVisitor(),I.debug`RETURN: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${i} packageInfo: ${a}, platformAnalyzer)`}getUnsentData(t){var i,a;const n=super.getUnsentData(t),o=super.getVisitorData(t);if(!o)return n;const r=o[e.KameleoonData.Browser],s=o[e.KameleoonData.Device],u=o[e.KameleoonData.OperatingSystem],l=new Je({browserType:null==r?void 0:r.browser,browserVersion:null==r?void 0:r.version,visitNumber:null===(i=this.visitor)||void 0===i?void 0:i.visitNumber,timeSincePreviousVisit:null===(a=this.visitor)||void 0===a?void 0:a.timeSincePreviousVisit,os:null==u?void 0:u.operatingSystem,deviceType:null==s?void 0:s.device});return n.push(l),n}storeData(e){const{visitorCode:t,data:i}=e;return i.length&&this.checkVisitor(t),super.storeData(e)}storeDataForVisitors(e){return super.storeDataForVisitors(e,!0)}getVisitorData(e){return this.checkVisitor(e),super.getVisitorData(e)}updateLastActivity(){var t,i,a,n;if(!this.visitor)return null;const o=this.dataStorage.read();if(!o.ok)return null;const r=o.data;let s=null!==(t=r[this.visitor.visitorCode])&&void 0!==t?t:{};"string"==typeof s&&(s=r[s]);let u=s[e.KameleoonData.VisitsData];u||(u={visits:[],visitNumber:0,type:e.KameleoonData.VisitsData,status:e.TrackingStatus.Sent,expirationTime:0},s[e.KameleoonData.VisitsData]=u);const l=this.fetchVisit(u.visits,u.visits.length-1),d=null!==(i=null==l?void 0:l.timeLastActivity)&&void 0!==i?i:0,c=Date.now();let g=null!==(a=u.visitNumber)&&void 0!==a?a:u.visits.length?u.visits.length-1:0;if(c-d>li)g+=d>0?1:0,Re.insertVisitInOrderedListMutably({list:u.visits,visit:{timeStarted:c,timeLastActivity:c}}),this.visitor.timeSincePreviousVisit=l?c-d:0;else if(u.visits.length&&(u.visits[u.visits.length-1]={timeStarted:null!==(n=null==l?void 0:l.timeStarted)&&void 0!==n?n:c,timeLastActivity:c},-1===this.visitor.timeSincePreviousVisit)){const e=this.fetchVisit(u.visits,u.visits.length-2);this.visitor.timeSincePreviousVisit=e?c-e.timeLastActivity:0}return u.visitNumber=g,this.visitor.visitNumber=g,this.dataStorage.write(r),this.visitor.visitorCode}checkVisitor(e){this.visitor&&this.visitor.visitorCode===e||this.createVisitor(e)}createVisitor(e){var t,i,a;I.debug`CALL: ClientDataManager.createVisitor(visitorCode: ${e})`,this.visitor=new fi(e);try{const n=this.platformAnalyzer.getResult(),o=[];(null===(t=n.os)||void 0===t?void 0:t.name)&&o.push(new xe(n.os.name)),(null===(i=n.platform)||void 0===i?void 0:i.type)&&o.push(new Oe(n.platform.type)),(null===(a=n.browser)||void 0===a?void 0:a.name)&&o.push(new Ke(n.browser.name,n.browser.version)),n.pageView&&o.push(n.pageView),o.length&&this.storeData({visitorCode:e,data:o})}finally{this.updateLastActivity()}I.debug`RETURN: ClientDataManager.createVisitor(visitorCode: ${e})`}updateVisitor(){var t;I.debug`CALL: ClientDataManager.updateVisitor()`;const i=this.dataStorage.read();if(!i.ok)return;const a=i.data;let n,o=-1;for(const[i,r]of Object.entries(a)){if("string"==typeof r)continue;const a=r[e.KameleoonData.VisitsData];if(!a){n||(n=i);continue}const s=a.visits.length?a.visits[a.visits.length-1]:null;if(s){const e=null!==(t="number"==typeof s?s:null==s?void 0:s.timeLastActivity)&&void 0!==t?t:0;e>o&&(o=e,n=i)}else n||(n=i)}n?this.createVisitor(n):(this.visitor=null,I.debug`ClientDataManager no visitor found`),I.debug`RETURN: ClientDataManager.updateVisitor()`}fetchVisit(e,t){if(t<0||t>=e.length)return null;const i=e[t];return"number"==typeof i?{timeStarted:i,timeLastActivity:i}:i}}class fi{constructor(e){this.visitNumber=0,this.timeSincePreviousVisit=-1,this.visitorCode=e}}class Ci{static getFirstMatch(e,t){const i=t.match(e);return i&&i.length>0&&i[1]||""}static getSecondMatch(e,t){const i=t.match(e);return i&&i.length>1&&i[2]||""}static assign(e,...t){return Object.assign(e,...t)}}class yi{constructor(){this.userAgent=navigator.userAgent||"",I.debug`PlatformParser: userAgent = ${this.userAgent}`,this.parsedResult={},""!==this.userAgent&&this.parse()}parseBrowser(){const t=[{test:[/chrome|crios|crmo/i],describe:t=>({name:e.BrowserType.Chrome,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/firefox|iceweasel|fxios/i],describe:t=>({name:e.BrowserType.Firefox,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/safari|applewebkit/i],describe:t=>({name:e.BrowserType.Safari,version:this.getBrowserVersion(Ci.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/opr\/|opios/i],describe:t=>({name:e.BrowserType.Opera,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,t))})},{test:[/edg([ea]|ios)/i],describe:t=>({name:e.BrowserType.InternetExplorer,version:this.getBrowserVersion(Ci.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/googlebot/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,t)||Ci.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/SamsungBrowser/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/yabrowser/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/ucbrowser/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/vivaldi/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/phantom/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/electron/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/chromium/i],describe:t=>({name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/opera/i],describe:t=>({name:e.BrowserType.Opera,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/msie|trident/i],describe:t=>({name:e.BrowserType.InternetExplorer,version:this.getBrowserVersion(Ci.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,t))})},{test:[/.*/i],describe:t=>{const i=t.includes("(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:e.BrowserType.Other,version:this.getBrowserVersion(Ci.getSecondMatch(i,t))}}}].find(e=>e.test.some(e=>e.test(this.userAgent)));return t&&(this.parsedResult.browser=t.describe(this.userAgent)),this.parsedResult.browser||{}}parseOS(){const t=[{test:[/windows phone/i],describe:()=>({name:e.OperatingSystemType.WindowsPhone})},{test:[/windows /i],describe:()=>({name:e.OperatingSystemType.Windows})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:t=>({name:e.OperatingSystemType.IOS,version:Ci.getSecondMatch(/(Version\/)(\d[\d.]+)/,t)})},{test:[/macintosh/i],describe:t=>({name:e.OperatingSystemType.Mac,version:Ci.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,t).replace(/[_\s]/g,".")})},{test:[/(ipod|iphone|ipad)/i],describe:t=>({name:e.OperatingSystemType.IOS,version:Ci.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,t).replace(/[_\s]/g,".")})},{test:[/android/i],describe:()=>({name:e.OperatingSystemType.Android})},{test:[/linux/i],describe:()=>({name:e.OperatingSystemType.Linux})}].find(e=>e.test.some(e=>e.test(this.userAgent)));return t&&(this.parsedResult.os=t.describe(this.userAgent)),this.parsedResult.os||{}}parsePlatform(){const t=[{test:()=>{var t,i;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===e.OperatingSystemType.Android&&Number(String(null===(i=this.parsedResult.os)||void 0===i?void 0:i.version).split(".")[0])>=3},describe:t=>({type:e.DeviceType.Tablet})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===e.OperatingSystemType.Android},describe:()=>({type:e.DeviceType.Phone})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===e.OperatingSystemType.Mac},describe:()=>({type:e.DeviceType.Desktop})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===e.OperatingSystemType.Windows},describe:()=>({type:e.DeviceType.Desktop})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===e.OperatingSystemType.Linux},describe:()=>({type:e.DeviceType.Desktop})}],i=[{test:[/huserAgentwei/i],describe:t=>({type:e.DeviceType.Phone})},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:()=>({type:e.DeviceType.Tablet})},{test:[/ipad/i],describe:()=>({type:e.DeviceType.Tablet})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:()=>({type:e.DeviceType.Tablet})},{test:[/kftt build/i],describe:()=>({type:e.DeviceType.Tablet})},{test:[/silk/i],describe:()=>({type:e.DeviceType.Tablet})},{test:[/tablet(?! pc)/i],describe:()=>({type:e.DeviceType.Tablet})},{test:[/ipod|iphone/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/[^-]mobi/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/blackberry/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/bada/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/windows phone/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/android/i],describe:()=>({type:e.DeviceType.Phone})},{test:[/ios/i],describe:()=>({type:e.DeviceType.Desktop})},{test:[/windows/i],describe:()=>({type:e.DeviceType.Desktop})},{test:[/linux/i],describe:()=>({type:e.DeviceType.Desktop})}].find(e=>e.test.some(e=>e.test(this.userAgent)))||t.find(e=>e.test());return i&&(this.parsedResult.platform=i.describe(this.userAgent)),this.parsedResult.platform||{}}parse(){this.userAgent&&(this.parseBrowser(),this.parseOS(),this.parsePlatform())}getBrowserVersion(e){if(!e)return;const t=e.split(".");if(0===t.length)return;const i=t.length>1?`${t[0]}.${t[1]}`:t[0],a=parseFloat(i);return isNaN(a)?void 0:a}parseWebView(){var e;let t=null===(e=window.location)||void 0===e?void 0:e.href;if(t){const e=document?document.title:"";this.parsedResult.pageView=new we({urlAddress:t,title:e})}}getResult(){return this.parseWebView(),Ci.assign({},this.parsedResult)}}e.ApplicationVersion=class{constructor(t){this.version=t,this.status=e.TrackingStatus.Sent}get url(){return""}get data(){return{version:this.version,type:e.KameleoonData.ApplicationVersion,status:this.status}}},e.Browser=Ke,e.Conversion=Ae,e.Cookie=We,e.CustomData=be,e.DataManager=Mt,e.DataProcessor=Xe,e.DataStorage=xt,e.Device=Oe,e.Err=ni,e.GeolocationData=Ne,e.KameleoonClient=class extends ti{constructor({siteCode:t,configuration:i,externals:a,_internals:n,stubMode:o}){var r;if(o)return super({siteCode:t,internalConfiguration:{},stubMode:o}),this.internalVisitorCodeManager={},this.externalVisitorCodeManager={},void(this.hybridQueueProcessed=!0);const s=(null==n?void 0:n.prng)||new hi,u=(null==a?void 0:a.storage)||new ci,l=(null==a?void 0:a.requester)||new si,d=(null==a?void 0:a.eventSource)||new gi,c=new _t,g=(null==a?void 0:a.visitorCodeManager)||new di,h=(null==n?void 0:n.packageInfo)||{type:e.SdkLanguageType.JAVASCRIPT,version:"4.23.0",isServer:!1},p=new xt(u,e.KameleoonStorageKey.TargetingData),v=new xt(u,e.KameleoonStorageKey.DataInfo),m=new mi({dataStorage:p,infoStorage:v,cleanupInterval:0,packageInfo:h,platformAnalyzer:null!==(r=null==n?void 0:n.platformAnalyzer)&&void 0!==r?r:new yi});super({siteCode:t,configuration:i,internalConfiguration:{externals:{externalPRNG:s,externalStorage:u,externalRequester:l,externalEventSource:d,externalVisitorCodeManager:c,externalPackageInfo:h,externalLogger:(null==a?void 0:a.logger)||new pi,customDataManager:m},settings:{useAbortController:!0}}});const f=ke.validateDomain(null==i?void 0:i.cookieDomain);this.domain=f.ok?f.data:void 0,this.internalVisitorCodeManager=c,this.externalVisitorCodeManager=g,this.customDataManager=m,this.hybridQueueProcessed=!1}initialize(){const e=Object.create(null,{initialize:{get:()=>super.initialize}});return ri(this,void 0,void 0,function*(){if(this.stubMode)return!1;const t=e.initialize.call(this);return new vi(this.customDataManager,this.tracker,e=>this._isConsentProvided(e),ui),t})}getVisitorCode(e){var t;if(this.stubMode)return"";I.info`CALL KamaleoonClient.getVisitorCode(defaultVisitorCode: ${e})`,this.internalVisitorCodeManager.getData=e=>this.externalVisitorCodeManager.getData(e),this.internalVisitorCodeManager.setData=e=>{this.externalVisitorCodeManager.setData(Object.assign(Object.assign({},e),{domain:this.domain}))};const i=this.internalVisitorCodeManager.getVisitorCode(e);return this._handleKameleoonQueue(i),this.initialized&&(null===(t=this.customDataManager)||void 0===t||t.checkVisitor(i)),I.info`RETURN KamaleoonClient.getVisitorCode(defaultVisitorCode: ${e}) -> (visitorCode: ${i})`,i}_handleKameleoonQueue(e){if(this.hybridQueueProcessed)return;const t=this._getKameleoonQueue();t&&(this.hybridQueueProcessed=!0,super._processKameleoonQueue(e,t))}_getKameleoonQueue(){if("undefined"==typeof window)return null;const e=window.kameleoonQueue;return Array.isArray(e)?e:null}setLegalConsent(e,t){this.stubMode||(super.setUserConsent({visitorCode:e,consent:t,setData:e=>{this.externalVisitorCodeManager.setData(Object.assign(Object.assign({},e),{domain:this.domain}))}}),super.flush(e))}},e.KameleoonCore=ti,e.KameleoonError=w,e.KameleoonLogger=I,e.KameleoonUtils=ii,e.ListUtilities=Re,e.NUMBER_OF_RETRIES=1,e.Ok=oi,e.OperatingSystem=xe,e.PageView=we,e.Parser=Ue,e.StaticData=Je,e.Tree=et,e.UniqueIdentifier=Ye,e.UserAgent=class{constructor(t){this.value=t,this.status=e.TrackingStatus.Sent}get url(){return""}get data(){return{value:this.value,type:e.KameleoonData.UserAgent,status:this.status}}},e.Utilities=Ve,e.VISITOR_CODE_LENGTH=16,e.VISIT_DURATION=Kt,e.Validator=ke,e.VisitorCodeManager=_t});
|
|
2
2
|
//# sourceMappingURL=javascript-sdk.umd.min.js.map
|