@kameleoon/react-sdk 10.23.0 → 10.24.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.
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- "use strict";var e,t,i=require("react/jsx-runtime"),a=require("react"),o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};exports.KameleoonException=void 0;var r={},n={},s=(t||(t=1,function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.Err=t.Ok=void 0;var i=function(){if(e)return n;function t(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 i(e){return this.ok?this.data:e(this.error)}function a(e){return this.ok?this.data:e}function o(e){return this.ok&&e(this.data),this}return e=1,Object.defineProperty(n,"__esModule",{value:!0}),n.Err=n.Ok=void 0,n.Ok=function(e){return{ok:!0,data:e,throw:t,else:i,or:a,and:o}},n.Err=function(e){return{ok:!1,error:e,throw:t,else:i,or:a,and:o}},n}();Object.defineProperty(t,"Ok",{enumerable:!0,get:function(){return i.Ok}}),Object.defineProperty(t,"Err",{enumerable:!0,get:function(){return i.Err}})}(r)),r);function u(e,t,i,a){return new(i||(i=Promise))(function(t,o){function r(e){try{s(a.next(e))}catch(e){o(e)}}function n(e){try{s(a.throw(e))}catch(e){o(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(r,n)}s((a=a.apply(e,[])).next())})}"function"==typeof SuppressedError&&SuppressedError,function(e){e.Credentials="Credentials",e.EventSourceInitialization="EventSourceInitialization",e.FeatureFlagConfigurationNotFound="FeatureFlagConfigurationNotFound",e.FeatureFlagVariableNotFound="FeatureFlagVariableNotFound",e.FeatureFlagVariationNotFound="FeatureFlagVariationNotFound",e.FeatureFlagExperimentNotFound="FeatureFlagExperimentNotFound",e.FeatureFlagEnvironmentDisabled="FeatureFlagEnvironmentDisabled",e.VisitAmount="VisitAmount",e.VisitorCodeMaxLength="VisitorCodeMaxLength",e.VisitorCodeEmpty="VisitorCodeEmpty",e.StorageInitialization="StorageInitialization",e.StorageWrite="StorageWrite",e.StorageRead="StorageRead",e.StorageParse="StorageParse",e.StorageEmpty="StorageEmpty",e.ClientConfiguration="ClientConfiguration",e.TargetingCondition="TargetingCondition",e.AmongValuesCheck="AmongValuesCheck",e.RangeCheck="RangeCheck",e.Initialization="Initialization",e.JSONParse="JSONParse",e.NumberParse="NumberParse",e.VersionParse="VersionParse",e.CookieParse="CookieParse",e.SemanticVersionParse="SemanticVersionParse",e.RemoteData="RemoteData",e.MaximumRetriesReached="MaximumRetriesReached"}(exports.KameleoonException||(exports.KameleoonException={}));const l={[exports.KameleoonException.CookieParse]:e=>`Couldn't parse cookie string: ${e}`,[exports.KameleoonException.JSONParse]:e=>`Couldn't parse JSON variable: ${e}`,[exports.KameleoonException.NumberParse]:e=>`It's not possible to parse value ${e} to Number`,[exports.KameleoonException.VersionParse]:e=>`It's not possible to parse a version value ${e} to Number, version should be in format x.x`,[exports.KameleoonException.SemanticVersionParse]:e=>`It's not possible to parse a version value ${e} to Number, version should be in format x.x.x`,[exports.KameleoonException.Initialization]:()=>"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods",[exports.KameleoonException.Credentials]:()=>"KameleoonClient can not be created without credentials",[exports.KameleoonException.StorageInitialization]:()=>"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed",[exports.KameleoonException.EventSourceInitialization]:()=>"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed",[exports.KameleoonException.FeatureFlagConfigurationNotFound]:e=>`No feature flag with key ${e} was found.`,[exports.KameleoonException.FeatureFlagEnvironmentDisabled]:(e,t)=>`Feature flag with key ${e} is disabled in ${t} environment.`,[exports.KameleoonException.FeatureFlagVariableNotFound]:(e,t)=>`No feature flag variable with key ${e} was found for ${t} visitorCode.`,[exports.KameleoonException.FeatureFlagVariationNotFound]:(e,t)=>`No feature flag variation with key ${e} was found for ${t} visitorCode.`,[exports.KameleoonException.FeatureFlagExperimentNotFound]:(e,t)=>`No feature flag experiment with id ${e} was found for ${t} visitorCode.`,[exports.KameleoonException.VisitAmount]:()=>"Visit amount must be a number between 1 and 25",[exports.KameleoonException.VisitorCodeMaxLength]:()=>"Visitor code can not be more than 255 characters long",[exports.KameleoonException.VisitorCodeEmpty]:()=>"Visitor code can not be empty",[exports.KameleoonException.StorageWrite]:e=>`Couldn't update storage for kameleoonClient: ${e}`,[exports.KameleoonException.StorageRead]:e=>`No data found in storage under ${e} key`,[exports.KameleoonException.StorageEmpty]:()=>"No data found in storage",[exports.KameleoonException.StorageParse]:(e,t)=>`Couldn't parse ${t} storage data, the data may be corrupted. Error: ${e}`,[exports.KameleoonException.ClientConfiguration]:e=>`Couldn't retrieve client configuration from Kameleoon Api. Error: ${e}`,[exports.KameleoonException.TargetingCondition]:e=>`${e} targeting condition is not yet supported.`,[exports.KameleoonException.AmongValuesCheck]:(e,t)=>`Couldn't parse value "${t}": ${e}`,[exports.KameleoonException.RangeCheck]:e=>`Couldn't parse value "${e}" as a range, value should be in format [x: number, y: number]`,[exports.KameleoonException.RemoteData]:e=>`Couldn't retrieve data from Kameleoon server. Error: ${e}`,[exports.KameleoonException.MaximumRetriesReached]:e=>`Maximum retries reached, request failed. Reason: ${e}`};function d(e){throw new Error(`Reaching an impossible state because of ${e}`)}class c extends Error{constructor(e,t,i){switch(super(`Error: ${e}`),this.name="KameleoonError",this.errorType=e,e){case exports.KameleoonException.Initialization:case exports.KameleoonException.Credentials:case exports.KameleoonException.VisitorCodeMaxLength:case exports.KameleoonException.VisitorCodeEmpty:case exports.KameleoonException.StorageInitialization:case exports.KameleoonException.VisitAmount:case exports.KameleoonException.EventSourceInitialization:case exports.KameleoonException.StorageEmpty:this.message=l[e]();break;case exports.KameleoonException.CookieParse:case exports.KameleoonException.FeatureFlagConfigurationNotFound:case exports.KameleoonException.NumberParse:case exports.KameleoonException.ClientConfiguration:case exports.KameleoonException.MaximumRetriesReached:case exports.KameleoonException.RemoteData:case exports.KameleoonException.VersionParse:case exports.KameleoonException.SemanticVersionParse:this.message=l[e](t);break;case exports.KameleoonException.FeatureFlagExperimentNotFound:case exports.KameleoonException.FeatureFlagVariationNotFound:case exports.KameleoonException.FeatureFlagVariableNotFound:this.message=l[e](t,i);break;case exports.KameleoonException.FeatureFlagEnvironmentDisabled:this.message=void 0!==i?l[e](t,i):t;break;case exports.KameleoonException.StorageWrite:case exports.KameleoonException.JSONParse:case exports.KameleoonException.StorageRead:this.message=l[e](t);break;case exports.KameleoonException.StorageParse:this.message=l[e](t,i);break;case exports.KameleoonException.TargetingCondition:this.message=l[e](t);break;case exports.KameleoonException.AmongValuesCheck:this.message=l[e](t,i);break;case exports.KameleoonException.RangeCheck:this.message=l[e](t);break;default:d(e)}}get type(){return this.errorType}}var p,g;exports.HttpMethod=void 0,exports.RequestType=void 0,function(e){e.DataApi="dataApi",e.AccessToken="accessToken",e.Events="events",e.ClientConfiguration="clientConfiguration"}(p||(p={})),function(e){e.Get="GET",e.Post="POST"}(exports.HttpMethod||(exports.HttpMethod={})),function(e){e[e.VisitEvent=0]="VisitEvent",e[e.VisitData=1]="VisitData",e[e.DataMap=2]="DataMap"}(g||(g={})),function(e){e.Configuration="configuration",e.Tracking="tracking",e.RemoteData="remoteData"}(exports.RequestType||(exports.RequestType={}));exports.Header=void 0,function(e){e.UserAgent="User-Agent",e.ContentType="Content-Type",e.SdkVersion="X-Kameleoon-SDK-Version",e.SdkType="X-Kameleoon-SDK-Type",e.Authorization="Authorization",e.AcceptEncoding="Accept-Encoding",e.IfModifiedSince="If-Modified-Since",e.LastModified="Last-Modified"}(exports.Header||(exports.Header={}));const h="eventType=staticData",v="&browserIndex=",m="&browserVersion=",f="&deviceType=",C="&visitorCode=",y="&sdkVersion=",x="&nonce=",D="&id=",E="&maxNumberPreviousVisits=",T="&os=",I="&osIndex=",k="&browser=",S="&mappingValue=",V="visit/",w={[p.DataApi]:"data.kameleoon.io",[p.AccessToken]:"api.kameleoon.com",[p.Events]:"events.kameleoon.eu",[p.ClientConfiguration]:"sdk-config.kameleoon.eu"};exports.LogLevel=void 0,function(e){e[e.NONE=0]="NONE",e[e.ERROR=1]="ERROR",e[e.WARNING=2]="WARNING",e[e.INFO=3]="INFO",e[e.DEBUG=4]="DEBUG"}(exports.LogLevel||(exports.LogLevel={}));const R={[exports.LogLevel.NONE]:"NONE",[exports.LogLevel.ERROR]:"ERROR",[exports.LogLevel.WARNING]:"WARNING",[exports.LogLevel.INFO]:"INFO",[exports.LogLevel.DEBUG]:"DEBUG"},b=(e,t)=>"credentials"===e?{clientId:"****",clientSecret:"****"}:t instanceof Map?Array.from(t.entries()):t;class A{static setLogger(e){A.logger=e}static setLogLevel(e){A.logLevel=e}static log({level:e,strings:t,keys:i}){if(!A.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 o=t[a];if("object"==typeof o)try{i+=e[a]+JSON.stringify(o,b)}catch(t){i+=e[a]+"{object}"}else i+="string"==typeof o?e[a]+"'"+o+"'":e[a]+o}return i+=e[e.length-1],i}(t,i);A.writeMessage(e,a)}static info(e,...t){A.log({level:exports.LogLevel.INFO,strings:e,keys:t})}static error(e,...t){A.log({level:exports.LogLevel.ERROR,strings:e,keys:t})}static warning(e,...t){A.log({level:exports.LogLevel.WARNING,strings:e,keys:t})}static debug(e,...t){A.log({level:exports.LogLevel.DEBUG,strings:e,keys:t})}static checkLevel(e){return e<=A.logLevel&&e!==exports.LogLevel.NONE}static writeMessage(e,t){A.logger.log(e,`Kameleoon [${R[e]}]: ${t}`)}}A.logger=new class{log(e,t){switch(e){case exports.LogLevel.DEBUG:console.debug(t);break;case exports.LogLevel.INFO:console.info(t);break;case exports.LogLevel.WARNING:console.warn(t);break;case exports.LogLevel.ERROR:console.error(t)}}},A.logLevel=exports.LogLevel.WARNING;let K=class{constructor({urlProvider:e,packageInfo:t,externalRequester:i,requestTimeout:a,trackRetryDelay:o,useAbortController:r}){A.debug`CALL: new Requester(urlProvider, packageInfo: ${t}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${o}, useAbortController: ${r})`,this.urlProvider=e,this.useAbortController=r,this.externalRequester=i,this.trackRetryDelay=o,this.packageInfo=t,this.timeout=a,A.debug`RETURN: new Requester(urlProvider, packageInfo: ${t}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${o}, useAbortController: ${r})`}getClientConfiguration(e,t){return u(this,0,void 0,function*(){const i=this.urlProvider.getClientConfigurationUrl(e);let a=Object.assign({[exports.Header.SdkType]:this.packageInfo.type,[exports.Header.SdkVersion]:this.packageInfo.version},t&&{[exports.Header.IfModifiedSince]:t});try{let e={message:""};A.debug`Running configuration request Method: ${exports.HttpMethod.Get}, Url: ${i}, Headers: ${a}, with retry limit ${2}`;for(let t=0;t<2;t++){const o=yield this.sendRequest({url:i,requestType:exports.RequestType.Configuration,retryCount:t,parameters:{method:exports.HttpMethod.Get,headers:a}});if(o.ok){const e=yield o.json();this.logReceivedConfigurationResponse(o.status,i,a);const t=this.getLastModifiedHeader(o),r=e;return s.Ok({configuration:r,lastModified:t})}if(304===o.status)return this.logReceivedConfigurationResponse(o.status,i,a),s.Ok({});if(1===t){if(o.text){const t=yield o.text();e=JSON.parse(t)}A.error`Failed to get configuration response ${{status:o.status,message:e.message}} for request Method: ${exports.HttpMethod.Get}, Url: ${i}, Headers: ${a}`}else yield this.logRequestError({logLevel:exports.LogLevel.WARNING,message:"Failed to get configuration response",response:o,method:exports.HttpMethod.Get,url:i})}return s.Err(new c(exports.KameleoonException.MaximumRetriesReached,e.message))}catch(e){return yield this.logRequestError({logLevel:exports.LogLevel.ERROR,message:"Failed to get configuration response",error:e,method:exports.HttpMethod.Get,url:i,headers:a}),s.Err(new c(exports.KameleoonException.ClientConfiguration,e))}})}getRemoteData(e){var t;return u(this,0,void 0,function*(){const i=this.urlProvider.getRemoteDataUrl(e);A.debug`Running remote data request Method: ${exports.HttpMethod.Get}, Url: ${i}`;try{const e=yield this.sendRequest({url:i,requestType:exports.RequestType.RemoteData,retryCount:0,parameters:{method:exports.HttpMethod.Get}});if(!e.ok){if(yield this.logRequestError({logLevel:exports.LogLevel.ERROR,message:"Failed to get remote data response",response:e,method:exports.HttpMethod.Get,url:i}),e.text){const i=yield e.text(),a=null===(t=JSON.parse(i))||void 0===t?void 0:t.message;return s.Err(new c(exports.KameleoonException.RemoteData,a))}return s.Err(new c(exports.KameleoonException.RemoteData,"Unknown Reason - no `text()` was found for a response"))}const a=yield e.json();return A.debug`Received remote data response: ${{status:e.status}} for request Method: ${exports.HttpMethod.Get}, Url: ${i}`,s.Ok(a)}catch(e){return yield this.logRequestError({logLevel:exports.LogLevel.ERROR,message:"Failed to get remote data response",error:e,method:exports.HttpMethod.Get,url:i}),s.Err(new c(exports.KameleoonException.RemoteData,e))}})}getVisitorData({visitorCode:e,filters:t,isMappingIdentifier:i}){var a;return u(this,0,void 0,function*(){const o=this.urlProvider.getVisitorDataUrl({visitorCode:e,filters:t,isMappingIdentifier:i});A.debug`Running visitor data request Method: ${exports.HttpMethod.Get}, Url: ${o}`;try{const e=yield this.sendRequest({url:o,requestType:exports.RequestType.RemoteData,retryCount:0,parameters:{method:exports.HttpMethod.Get}});if(!e.ok){if(yield this.logRequestError({logLevel:exports.LogLevel.ERROR,message:"Failed to get visitor data response",response:e,method:exports.HttpMethod.Get,url:o}),"function"==typeof e.text){const t=yield e.text();if(t){const e=null===(a=JSON.parse(t))||void 0===a?void 0:a.message;return s.Err(new c(exports.KameleoonException.RemoteData,e))}}return e.status?s.Err(new c(exports.KameleoonException.RemoteData,`No error message. Error status: ${e.status}`)):s.Err(new c(exports.KameleoonException.RemoteData,"Unknown Reason - no text message or error status was found for a response"))}const t=yield e.json();return A.debug`Received visitor data response: ${{status:e.status}} for request Method: ${exports.HttpMethod.Get}, Url: ${o}`,s.Ok(t)}catch(e){return yield this.logRequestError({logLevel:exports.LogLevel.ERROR,message:"Failed to get visitor data response",error:e,method:exports.HttpMethod.Get,url:o}),s.Err(new c(exports.KameleoonException.RemoteData,e))}})}track(e,t){return u(this,0,void 0,function*(){const i=this.urlProvider.getTrackingUrl(t);A.debug`Running tracking request Method: ${exports.HttpMethod.Post}, Url: ${i}, Body: ${e}, with retry limit ${2}, retry delay ${this.trackRetryDelay} ms`;for(let t=0;t<2;t++){let a;try{if(a=yield this.sendRequest({url:i,retryCount:t,requestType:exports.RequestType.Tracking,parameters:{body:e,method:exports.HttpMethod.Post,headers:{[exports.Header.ContentType]:"*/*"}}}),a.ok)return A.debug`Received tracking response: ${{status:a.status}} for request Method: ${exports.HttpMethod.Post}, Url: ${i}, Body: ${e}`,s.Ok();yield this.logRequestError({logLevel:1==t?exports.LogLevel.ERROR:exports.LogLevel.WARNING,message:"Failed to get tracking response",response:a,method:exports.HttpMethod.Post,url:i})}catch(e){yield this.logRequestError({logLevel:1==t?exports.LogLevel.ERROR:exports.LogLevel.WARNING,message:"Failed to get tracking response",error:e,method:exports.HttpMethod.Post,url:i})}t<2&&(yield new Promise(e=>setTimeout(e,this.trackRetryDelay)))}return s.Err()})}sendRequest({url:e,requestType:t,retryCount:i,parameters:a}){return u(this,0,void 0,function*(){let o;if(this.useAbortController){const r=new AbortController,n=setTimeout(()=>r.abort(),this.timeout);o=yield this.externalRequester.sendRequest({url:e,retryCount:i,requestType:t,parameters:Object.assign(Object.assign({},a),{signal:r.signal})}),clearTimeout(n)}else o=yield this.externalRequester.sendRequest({url:e,retryCount:i,requestType:t,parameters:a});return o})}logRequestError({logLevel:e,message:t,error:i,method:a,url:o,response:r,headers:n}){return u(this,0,void 0,function*(){if(i){let r="Unknown error";i instanceof Error&&(r=i.message),A.log({level:e,strings:()=>`${t} with error: ${r} for request Method: ${a}, Url: ${o}`})}else if(r&&A.checkLevel(e)){const i=yield this.parseResponse(r);A.log({level:e,strings:()=>`${t} response: Status: '${i.status}' Message: '${i.message}' for request Method: ${a}, Url: '${o}'`+(n?`, Headers: ${n}`:"")})}})}parseResponse(e){return u(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(e){if(e.headers){const t=exports.Header.LastModified.toLowerCase();for(const[i,a]of e.headers)if(i.toLowerCase()===t)return a}}logReceivedConfigurationResponse(e,t,i){A.debug`Received configuration response: ${{status:e}} for request Method: ${exports.HttpMethod.Get}, Url: ${t}, Headers: ${i}`}};var O,F,$,M,N,L;exports.Environment=void 0,exports.VariableType=void 0,exports.TrackingStatus=void 0,exports.Milliseconds=void 0,exports.CustomDataScope=void 0,exports.EventType=void 0,function(e){e.Production="production",e.Staging="staging",e.Development="development"}(exports.Environment||(exports.Environment={}));class _{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[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(e){this.isInitialized();const t=`https://${this.domains[p.ClientConfiguration]}/v3/`,i=this.environment===exports.Environment.Production?"":"?environment="+encodeURIComponent(this.environment);let a="";return e&&(a=i?"&ts="+e:"?ts="+e),t+this.siteCode+i+a}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains[p.Events]}:8110/sse?siteCode=${this.siteCode}`}getRemoteDataUrl(e){return this.isInitialized(),this.getDataApiUrl(g.DataMap)+this.siteCode+"&key="+encodeURI(e)}getVisitorDataUrl({visitorCode:e,filters:t,isMappingIdentifier:i}){this.isInitialized();const{customData:a,previousVisitAmount:o,currentVisit:r,conversions:n,geolocation:s,experiments:u,pageViews:l,device:d,browser:c,operatingSystem:p,kcs:h,personalization:v,visitorCode:m,cbs:f}=t,y=i?S:C,x=a||m?"&customData="+!0:"",D=n?"&conversion="+!0:"",T=s?"&geolocation="+!0:"",I=u?"&experiment="+!0:"",k=l?"&page="+!0:"",V=r?"&currentVisit="+!0:"",w=h?"&kcs="+!0:"",R=v?"&personalization="+!0:"",b="number"!=typeof o?E+1:E+o,A=f?"&cbs="+!0:"";return this.getDataApiUrl(g.VisitData)+this.siteCode+y+e+b+x+D+T+I+k+"&staticData="+!0+V+w+R+A}getTrackingUrl(e){this.isInitialized();const{type:t,version:i}=this.packageInfo;let a=this.getDataApiUrl(g.VisitEvent)+this.siteCode+"&sdkName="+t+y+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+y+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 g.VisitEvent:return`${t}/${V+"events?siteCode="}`;case g.VisitData:return`${t}/${V+"visitor?siteCode="}`;case g.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)}}!function(e){e.BOOLEAN="BOOLEAN",e.NUMBER="NUMBER",e.STRING="STRING",e.JSON="JSON",e.JS="JS",e.CSS="CSS"}(exports.VariableType||(exports.VariableType={})),function(e){e.Sent="sent",e.Unsent="unsent",e.Pending="pending"}(exports.TrackingStatus||(exports.TrackingStatus={})),function(e){e[e.Second=1e3]="Second",e[e.Minute=6e4]="Minute",e[e.Hour=36e5]="Hour",e[e.Day=864e5]="Day",e[e.Week=6048e5]="Week",e[e.Month=2592e6]="Month"}(exports.Milliseconds||(exports.Milliseconds={}));class U{constructor(e){this.cacheMap=new Map,this.intervalId=null,this.cleanupTimeout=e*exports.Milliseconds.Second}add({key:e,data:t,lifetime:i}){A.debug`CALL: CacheManager.add(key: ${e}, data: ${t}, lifetime: ${i})`,null===this.intervalId&&this.activate();const a=i*exports.Milliseconds.Second,o={data:t,expirationTime:Date.now()+a};this.cacheMap.set(e,o),A.debug`RETURN: CacheManager.add(key: ${e}, data: ${t}, lifetime: ${i})`}getAliveItem(e){A.debug`CALL: CacheManager.getAliveItem(key: ${e})`;const t=this.cacheMap.get(e);if(t&&t.expirationTime>=Date.now()){const i=t.data;return A.debug`RETURN: CacheManager.getAliveItem(key: ${e}) -> (item: ${i})`,i}return t&&this.cacheMap.delete(e),A.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"}(O||(O={})),function(e){e.TARGETED_DELIVERY="TARGETED_DELIVERY",e.EXPERIMENTATION="EXPERIMENTATION"}(F||(F={})),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"}($||($={})),function(e){e.ACTIVATED="ACTIVATED",e.DEACTIVATED="DEACTIVATED",e.SCHEDULED="SCHEDULED"}(M||(M={})),function(e){e.Visit="VISIT",e.Visitor="VISITOR",e.Page="Page"}(exports.CustomDataScope||(exports.CustomDataScope={})),function(e){e.Required="REQUIRED",e.NotRequired="NOT_REQUIRED"}(N||(N={})),function(e){e.PartiallyBlocked="PARTIALLY_BLOCK",e.CompletelyBlocked="FULLY_BLOCK"}(L||(L={}));class P{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)}}!function(e){e.Evaluation="evaluation",e.ConfigurationUpdate="configurationUpdate"}(exports.EventType||(exports.EventType={}));const G={customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:N.NotRequired,dataApiDomain:"data.kameleoon.io",consentOptOutBehavior:L.PartiallyBlocked}};class B{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 z(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e]))}exports.KameleoonData=void 0,exports.DeviceType=void 0,exports.OperatingSystemType=void 0,exports.BrowserType=void 0,function(e){e.UniqueIdentifier="uniqueIdentifier",e.CustomData="customData",e.PageView="pageView",e.GeolocationData="geolocation",e.Browser="browser",e.Conversion="conversion",e.Cookie="cookie",e.Device="device",e.OperatingSystem="operatingSystem",e.UserAgent="userAgent",e.ApplicationVersion="applicationVersion",e.VisitsData="visitsData",e.KameleoonConversionScore="kameleoonConversionScore",e.Personalization="personalization",e.CBScores="cbScores",e.TargetedSegment="targetedSegment"}(exports.KameleoonData||(exports.KameleoonData={})),function(e){e.Phone="PHONE",e.Tablet="TABLET",e.Desktop="DESKTOP"}(exports.DeviceType||(exports.DeviceType={})),function(e){e.WindowsPhone="WINDOWS_PHONE",e.Windows="WINDOWS",e.Android="ANDROID",e.Linux="LINUX",e.Mac="MAC",e.IOS="IOS"}(exports.OperatingSystemType||(exports.OperatingSystemType={})),function(e){e.Chrome="CHROME",e.InternetExplorer="IE",e.Firefox="FIREFOX",e.Safari="SAFARI",e.Opera="OPERA",e.Other="OTHER"}(exports.BrowserType||(exports.BrowserType={}));const j={[exports.OperatingSystemType.Windows]:0,[exports.OperatingSystemType.Mac]:1,[exports.OperatingSystemType.IOS]:2,[exports.OperatingSystemType.Linux]:3,[exports.OperatingSystemType.Android]:4,[exports.OperatingSystemType.WindowsPhone]:5},q=z(j),H={[exports.BrowserType.Chrome]:0,[exports.BrowserType.InternetExplorer]:1,[exports.BrowserType.Firefox]:2,[exports.BrowserType.Safari]:3,[exports.BrowserType.Opera]:4,[exports.BrowserType.Other]:5},W=z(H),Y="off",X="warehouseAudiences";exports.SdkLanguageType=void 0,function(e){e.ANDROID="ANDROID",e.IOS="IOS",e.JAVA="JAVA",e.CSHARP="CSHARP",e.NODEJS="NODEJS",e.PHP="PHP",e.RUBY="RUBY",e.GO="GO",e.FLUTTER="FLUTTER",e.REACT="REACT",e.PYTHON="PYTHON",e.JAVASCRIPT="JAVASCRIPT",e.RUST="RUST"}(exports.SdkLanguageType||(exports.SdkLanguageType={}));const J={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 Q,Z,ee,te,ie,ae,oe,re,ne,se,ue,le;!function(e){e.And="AND",e.Or="OR"}(Q||(Q={})),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"}(Z||(Z={})),function(e){e.NEW="NEW",e.RETURNING="RETURNING"}(ee||(ee={})),function(e){e.ANY="ANY",e.EXACT="EXACT"}(te||(te={})),function(e){e.ALL="ALL",e.TEST="TEST",e.PERSO="PERSO"}(ie||(ie={})),function(e){e.Experiment="EXPERIMENT",e.Personalization="PERSONALIZATION",e.Any="ANY"}(ae||(ae={})),function(e){e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(oe||(oe={})),function(e){e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(re||(re={})),function(e){e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.OPTIONAL="OPTIONAL"}(ne||(ne={})),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"}(ue||(ue={})),function(e){e.Ascending="asc",e.Descending="desc"}(le||(le={}));const de="localhost",ce=/^(\.?(([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 pe{static validateVersion(e){const t=e.split(".").map(e=>parseInt(e,10));for(;t.length<3;)t.push(0);return t.some(e=>isNaN(e))?s.Err(new c(exports.KameleoonException.SemanticVersionParse,e)):s.Ok(t.slice(0,3))}static validateDomain(e){return e?(e=pe.checkAndTrimProtocol(e.toLowerCase()),ce.test(e)||e===de||A.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.`,s.Ok(e)):s.Err()}static validateNetworkDomain(e){return e?(e=(e=pe.checkAndTrimProtocol(e.toLowerCase())).replace(/^\.+|\.+$/g,""),ce.test(e)||e===de?s.Ok(e):(A.error`The network domain ${e} is invalid.`,s.Err())):s.Err()}static checkAndTrimProtocol(e){const t=["http://","https://"];for(const i of t)if(e.startsWith(i)){e=e.substring(i.length),A.warning`The domain contains ${i}. Domain after protocol trimming: ${e}`;break}return e}}class ge{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:e,visitorCode:t,targetingData:i,experimentId:a,variationConfiguration:o,clientConfiguration:r,packageInfo:n,dataManager:u}){if(A.debug`CALL: checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager)`,!e||!e.conditionsData.firstLevel.length){const e=s.Ok(!0);return A.debug`RETURN checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${e})`,e}if(!o){const e=s.Err(new c(exports.KameleoonException.Initialization));return A.debug`RETURN checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${e})`,e}let l={};const d=o.getStoredVariations(t);d.ok&&(l=d.data);const p=u.getTree(e);let g,h,v;p.hasTargetingType(se.SEGMENT)&&(g=u.trees,v=r.segments),p.hasTargetingType(se.TARGET_FEATURE_FLAG)&&(h=r.ruleMap);const m=p.evaluate({variationData:l,sdkInfo:n,segments:v,ruleMap:h,trees:g,targetingData:i,experimentId:a,visitorCode:t});return A.debug`RETURN checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${m})`,m}static convertTimeUnit(e,t){return e/{[ue.Minute]:exports.Milliseconds.Minute,[ue.Hour]:exports.Milliseconds.Hour,[ue.Day]:exports.Milliseconds.Day,[ue.Week]:exports.Milliseconds.Week,[ue.Month]:exports.Milliseconds.Month}[t]}static isCustomData(e){return e.data.type===exports.KameleoonData.CustomData}static updateCache({hasJsCssVariables:e,cacheManager:t,visitorCode:i,experimentId:a,variationId:o}){const r=t.getAliveItem(i),n=r?Object.assign({},r):{};n[a]={variationId:o,hasJsCssVariables:e,expirationTime:Date.now()+5*exports.Milliseconds.Second},t.add({key:i,data:n,lifetime:5})}static getTrackingCode(e,t){let i="window.kameleoonQueue=window.kameleoonQueue||[];";const a=e.getAliveItem(t);if(!a)return i;const o={};return Object.entries(a).forEach(([e,{variationId:t,expirationTime:a,hasJsCssVariables:r}])=>{const n=!r;a>Date.now()&&(i+=`window.kameleoonQueue.push(['Experiments.assignVariation',${e},${t},true]);`,i+=`window.kameleoonQueue.push(['Experiments.trigger',${e},${n}]);`,o[Number(e)]={variationId:t,expirationTime:a,hasJsCssVariables:r})}),e.add({key:t,data:o,lifetime:5}),i}static compareSemVer({version:e,compareVersion:t,operator:i}){const a=pe.validateVersion(e),o=pe.validateVersion(t);if(!a.ok)return s.Err(a.error);if(!o.ok)return s.Err(o.error);const[r,n,u]=a.data,[l,c,p]=o.data,[g,h,v]=[r===l,n===c,u===p];switch(i){case re.EQUAL:return s.Ok(g&&h&&v);case re.GREATER:return s.Ok(r>l||g&&n>c||g&&h&&u>p);case re.LOWER:return s.Ok(r<l||g&&n<c||g&&h&&u<p);default:A.error`Unknown version match type: ${i}`,d(i)}}static getVariationByHash(e,t){let i=0;for(const a of e)if(i+=a.exposition,i>=t)return a;return null}}class he{static insertInOrderedListMutably({list:e,element:t,order:i}){if(e.includes(t))return;const a=e.findIndex(e=>i===le.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 ve{constructor({urlAddress:e,title:t,referrers:i}){this.urlAddress=e,this.title=t,this.referrers=i,this.timestamps=[{time:Date.now(),status:exports.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{[exports.TrackingStatus.Sent]:e,[exports.TrackingStatus.Unsent]:t,[exports.TrackingStatus.Pending]:i}=this.timestamps.reduce((e,{status:t})=>(e[t]=!0,e),{[exports.TrackingStatus.Sent]:!1,[exports.TrackingStatus.Unsent]:!1,[exports.TrackingStatus.Pending]:!1});return!e||t||i?i&&!t?exports.TrackingStatus.Pending:exports.TrackingStatus.Unsent:exports.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:exports.KameleoonData.PageView,timestamps:this.timestamps,status:this.status,nonce:this.nonce}}static _fromRaw(e){const{urlAddress:t,title:i,referrers:a,timestamps:o,nonce:r}=e,n=new ve({urlAddress:t,title:i,referrers:a});return n.timestamps=o,r&&(n._nonce=r),n}static _updateFromVisit(e,t){const i=e.pageEvents;if(i)for(const e of i){let i=[];const{time:a}=e,{href:o,title:r,referrersIndices:n}=e.data;let s;if("number"==typeof n[0]&&(i=n),t.has(o)){const e=t.get(o).timestamps;s=new ve({urlAddress:o,title:r,referrers:i}),s.timestamps=[...e,{time:a,status:exports.TrackingStatus.Sent}]}else s=new ve({urlAddress:o,title:r,referrers:i}),s.timestamps=[{time:a,status:exports.TrackingStatus.Sent}];t.set(o,s)}}}let me=class e{constructor(t,i,...a){this._status=exports.TrackingStatus.Unsent,this.isIdentifier=!1;const o="boolean"==typeof i;"number"==typeof t?this._index=t:(this._name=t,this._index=e.UNDEFINED_INDEX),this.overwrite=!o||i,this.value=o?a:[i,...a].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:exports.KameleoonData.CustomData,isIdentifier:this.isIdentifier,status:this.status,overwrite:this.overwrite})}get status(){return this._isMappingIdentifier?exports.TrackingStatus.Unsent:this._status}static _fromRaw(t){const{index:i,value:a,status:o,isIdentifier:r,name:n,overwrite:s}=t;let u;return n?(u=new e(n,null==s||s,...a),u.index=i):u=new e(i,null==s||s,...a),u.status=o,u._isMappingIdentifier=r,u}set _isMappingIdentifier(e){this.isIdentifier=e}set status(e){this._status=e}static _updateFromVisit(t,i){var a;if(null===(a=t.customDataEvents)||void 0===a?void 0:a.length)for(let a=t.customDataEvents.length-1;a>=0;a--){const{index:o,valuesCountMap:r}=t.customDataEvents[a].data;i.has(o)||i.set(o,new e(o,...Object.keys(r)))}}set index(e){this._index=e}get index(){return this._index}get name(){return this._name}get values(){return this.value}};me.UNDEFINED_INDEX=-1;let fe=class e{constructor({goalId:e,revenue:t=0,negative:i=!1,metadata:a}){this.goalId=e,this.revenue=t,this.negative=i,this.status=exports.TrackingStatus.Unsent,this.id=Math.floor(1e6*Math.random()),this._metadata=a}set _id(e){this.id=e}set _nonce(e){this.nonce=e}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 e;return{goalId:this.goalId,nonce:this.nonce,revenue:this.revenue,negative:this.negative,type:exports.KameleoonData.Conversion,status:this.status,id:this.id,metadata:(null===(e=this.metadata)||void 0===e?void 0:e.map(e=>e.data))||void 0}}_encodeMetadata(){var e;if(!(null===(e=this.metadata)||void 0===e?void 0:e.length))return"";const t=new Set;return encodeURIComponent(JSON.stringify(this.metadata.reduce((e,i)=>(t.has(i.data.index)||(t.add(i.data.index),e[i.data.index]=i.data.value),e),{})))}static _fromRaw(t){const{goalId:i,revenue:a,negative:o,status:r,id:n,nonce:s,metadata:u}=t,l=new e({goalId:i,revenue:a,negative:o,metadata:e.parseMetadata(u)});return l._id=n,l.status=r,s&&(l._nonce=s),l}static parseMetadata(e){return(null==e?void 0:e.map(e=>me._fromRaw(e)))||void 0}static _listFromVisit(t){var i,a;const o=[];if(!(null===(i=t.conversionEvents)||void 0===i?void 0:i.length))return[];if(null===(a=t.conversionEvents)||void 0===a?void 0:a.length)for(const i of t.conversionEvents){const{goalId:t,revenue:a,negative:r}=i.data,n=new e({goalId:t,revenue:a,negative:r});n.status=exports.TrackingStatus.Sent,o.push(n)}return o}static _updateFromVisit(t,i){var a;if(null===(a=t.conversionEvents)||void 0===a?void 0:a.length)for(const a of t.conversionEvents){const{goalId:t}=a.data;if(!i.has(t)){const a=new e({goalId:t});a.status=exports.TrackingStatus.Sent,i.set(t,a)}}}},Ce=class e{constructor(e,t){this.browser=e,this.version=t,this.status=exports.TrackingStatus.Unsent}get url(){if(!this.browser)return"";const e=this.version?m+this.version:"";return h+k+this.browser+v+H[this.browser]+e}get data(){return{browser:this.browser,type:exports.KameleoonData.Browser,version:this.version,status:this.status}}static _fromRaw(t){const{browser:i,version:a,status:o}=t,r=new e(i,a);return r.status=o,r}static _fromVisit(t){if(!t.staticDataEvent)return;const{browser:i,browserIndex:a,browserVersion:o}=t.staticDataEvent.data;if(i||"number"==typeof a){const t=null!=i?i:W[a];return o?new e(t,o):new e(t)}}},ye=class e{constructor(e){this.device=e,this.status=exports.TrackingStatus.Unsent}get url(){return this.device?h+f+this.device:""}get data(){return{device:this.device,type:exports.KameleoonData.Device,status:this.status}}static _fromRaw(t){const{device:i,status:a}=t,o=new e(i);return o.status=a,o}static _fromVisit(t){var i;if(null===(i=t.staticDataEvent)||void 0===i?void 0:i.data.deviceType)return new e(t.staticDataEvent.data.deviceType)}},xe=class e{constructor(e){this.operatingSystem=e,this.status=exports.TrackingStatus.Unsent}get url(){return this.operatingSystem?h+T+this.operatingSystem+I+j[this.operatingSystem]:""}get data(){return{operatingSystem:this.operatingSystem,type:exports.KameleoonData.OperatingSystem,status:this.status}}static _fromRaw(t){const{operatingSystem:i,status:a}=t,o=new e(i);return o.status=a,o}static _fromVisit(t){if(!t.staticDataEvent)return;const{os:i,osIndex:a}=t.staticDataEvent.data;if(i||"number"==typeof a){const t=null!=i?i:q[a];return new e(t)}}};class De{constructor({country:e,region:t,city:i,postalCode:a,coordinates:o}){this.country=e,this.region=t,this.city=i,this.postalCode=a,this.coordinates=o,this.status=exports.TrackingStatus.Unsent}get url(){const e=this.region?"&region="+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:exports.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:o,coordinates:r,status:n}=e,s=new De({country:t,region:i,city:a,postalCode:o,coordinates:r});return s.status=n,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:o,city:r}=i||{};return a?new De(o&&r?{country:a,region:o,city:r}:o?{country:a,region:o}:{country:a}):void 0}}class Ee{constructor(e){this.status=exports.TrackingStatus.Sent,this.visits=e,this._visitNumber=e.length?e.length-1:0}get visitNumber(){return this._visitNumber}get url(){return""}get data(){return{visits:this.visits,visitNumber:this._visitNumber,type:exports.KameleoonData.VisitsData,status:this.status}}get isSent(){return!0}set timestamp(e){he.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 Te{constructor(e){this.kcs=e,this.status=exports.TrackingStatus.Sent}get url(){return""}get data(){return{kcs:this.kcs,type:exports.KameleoonData.KameleoonConversionScore,status:this.status}}}class Ie{constructor(e,t){this.id=e,this.variationId=t,this.status=exports.TrackingStatus.Sent}get url(){return""}get data(){return{id:this.id,variationId:this.variationId,type:exports.KameleoonData.Personalization,status:exports.TrackingStatus.Sent}}static _fromRaw(e){return new Ie(e.id,e.variationId)}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 i=new Ie(e,a);t.set(e,i)}}}}class ke{constructor(e){this.values=new Map(Object.entries(e).map(([e,t])=>[Number(e),this.extractVarIds(t)])),this.cbs=e,this.status=exports.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:exports.KameleoonData.CBScores,status:this.status}}static _fromRaw(e){const t=new ke(e.cbs);return t.status=e.status,t}}class Se{constructor({filters:e,dataManager:t,visitorCode:i}){this.visitsData=new Ee([]),this.visitorData=[],this.storageVisitorData=[],this.experimentData={},this.singleDataTypes={[exports.KameleoonData.Device]:null,[exports.KameleoonData.Browser]:null,[exports.KameleoonData.GeolocationData]:null,[exports.KameleoonData.OperatingSystem]:null,[exports.KameleoonData.KameleoonConversionScore]:null,[exports.KameleoonData.CBScores]:null},this.multipleDataTypes={[exports.KameleoonData.CustomData]:new Map,[exports.KameleoonData.PageView]:new Map,[exports.KameleoonData.Conversion]:new Map,[exports.KameleoonData.Personalization]:new Map},this.filters=e,this.dataManager=t,this.visitorDataTypes=t.getVisitorStoredDataTypes(i)}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[e,t]of Object.entries(this.multipleDataTypes))if(t.size)switch(e){case exports.KameleoonData.PageView:this.visitorData.push(...t.values()),this.storageVisitorData.push(...t.values());break;case exports.KameleoonData.Personalization:case exports.KameleoonData.Conversion:this.storageVisitorData.push(...t.values());break;case exports.KameleoonData.CustomData:t.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 Te(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,o;if(this.visitsData.visitNumber<=t&&(null===(i=e.staticDataEvent)||void 0===i?void 0:i.data.visitNumber)){const i=null!==(o=null===(a=e.staticDataEvent)||void 0===a?void 0:a.data.visitNumber)&&void 0!==o?o:0;this.visitsData.updateVisitNumber(i+t)}}processCbs(e){if(this.filters.cbs&&e){const t=new ke(e);this.storageVisitorData.push(t)}}processBrowser(e){if(this.filters.browser&&!this.singleDataTypes[exports.KameleoonData.Browser]){const t=Ce._fromVisit(e);t&&(this.visitorDataTypes.has(exports.KameleoonData.Browser)||this.storageVisitorData.push(t),this.visitorData.push(t),this.singleDataTypes[exports.KameleoonData.Browser]=t)}}processDevice(e){if(this.filters.device&&!this.singleDataTypes[exports.KameleoonData.Device]){const t=ye._fromVisit(e);t&&(this.visitorDataTypes.has(exports.KameleoonData.Device)||this.storageVisitorData.push(t),this.visitorData.push(t),this.singleDataTypes[exports.KameleoonData.Device]=t)}}processOperatingSystem(e){if(this.filters.operatingSystem&&!this.singleDataTypes[exports.KameleoonData.OperatingSystem]){const t=xe._fromVisit(e);t&&(this.visitorDataTypes.has(exports.KameleoonData.OperatingSystem)||this.storageVisitorData.push(t),this.visitorData.push(t),this.singleDataTypes[exports.KameleoonData.OperatingSystem]=t)}}processGeolocationData(e){if(this.filters.geolocation&&!this.singleDataTypes[exports.KameleoonData.GeolocationData]){const t=De._fromVisit(e);t&&(this.visitorDataTypes.has(exports.KameleoonData.GeolocationData)||this.storageVisitorData.push(t),this.visitorData.push(t),this.singleDataTypes[exports.KameleoonData.GeolocationData]=t)}}processCustomData(e){this.filters.customData&&me._updateFromVisit(e,this.multipleDataTypes[exports.KameleoonData.CustomData])}processConversion(e){if(this.filters.conversions){fe._updateFromVisit(e,this.multipleDataTypes[exports.KameleoonData.Conversion]);const t=fe._listFromVisit(e);t.length&&this.visitorData.push(...t)}}processPageView(e){this.filters.pageViews&&ve._updateFromVisit(e,this.multipleDataTypes[exports.KameleoonData.PageView])}processExperiments(e){if(this.filters.experiments&&e.experimentEvents)for(const t of e.experimentEvents){const{id:e,variationId:i}=t.data;this.experimentData[e]={variationId:i,isTargetedRule:!1,status:exports.TrackingStatus.Unsent}}}processPersonalization(e){this.filters.personalization&&Ie._updateFromVisit(e,this.multipleDataTypes[exports.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 Ve{static parseFeatureVariable(e){const{key:t,type:i,value:a}=e;switch(i){case exports.VariableType.BOOLEAN:return s.Ok({key:t,type:i,value:Boolean(a)});case exports.VariableType.JS:case exports.VariableType.CSS:case exports.VariableType.STRING:return s.Ok({key:t,type:i,value:String(a)});case exports.VariableType.NUMBER:const o=Number(a);return Number.isNaN(o)?s.Err(new c(exports.KameleoonException.NumberParse,String(a))):s.Ok({key:t,type:i,value:o});case exports.VariableType.JSON:try{const a=JSON.parse(String(e.value));return s.Ok({key:t,type:i,value:a})}catch(e){return s.Err(new c(exports.KameleoonException.JSONParse,e))}default:d(i)}}static parseVisitorData({data:e,filters:t,visitorCode:i,dataManager:a,variationConfiguration:o}){const r=new Se({filters:t,dataManager:a,visitorCode:i}),{currentVisit:n,previousVisits:s,kcs:u,cbs:l}=e;if(!(null==s?void 0:s.length)&&!n)return{visitorData:[],storageVisitorData:[],visitsData:new Ee([])};n&&(r.processVisit(n),r.processVisitNumber(n,0)),null==s||s.forEach((e,t)=>{r.processVisit(e),r.processVisitsData(e),r.processVisitNumber(e,t+1)}),r.processKcs(u),r.processCbs(l),r.processMultipleDataTypes();const d=r.processMappingIdentifier(null!=n?n:null==s?void 0:s[0]),{visitorData:c,storageVisitorData:p,visitsData:g,experimentData:h}=r.data;return o.updateStoredVariations(i,h),{visitorData:c,storageVisitorData:p,visitsData:g,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 we{constructor({updateInterval:e,urlProvider:t,storage:i,requester:a,dataManager:o,eventSource:r,externalVisitorCodeManager:n,eventManager:s,externalPackageInfo:u,defaultDataFile:l}){this.updateConfigurationIntervalId=null,this.updateType=O.Polling,this.configurationData=G,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=L.PartiallyBlocked,this.cachedDataFile=null,this.CACHE_REVALIDATE_PERIOD=90*exports.Milliseconds.Minute,this.urlProvider=t,this.requester=a,this.updateInterval=e,this.lastUpdate=new Date,this.storage=i,this.dataManager=o,this.eventManager=s,this.visitorCodeManager=n,this.eventSource=r,this.externalPackageInfo=u,this.defaultDataFile=l}initialize(){return u(this,0,void 0,function*(){if(A.debug("CALL: ClientConfiguration.initialize()"),this.readStorageData(),this.checkShouldUpdate()){const e=yield this.updateClientConfiguration();if(!e.ok)return A.error("Error occurred during client configuration update"),e;if(e.data)return A.debug("RETURN: ClientConfiguration.initialize()"),s.Ok()}return this.updateType!==O.RealTime||this.eventSource.isOpen?(this.updateType===O.Polling&&this.handlePollingUpdates(),A.debug("RETURN: ClientConfiguration.initialize()"),s.Ok()):(this.handleRealTimeUpdates(),A.debug("RETURN: ClientConfiguration.initialize()"),s.Ok())})}refreshDataFileIfStale(){if(!this.checkShouldUpdate())return Promise.resolve(s.Ok(!1));if(!this.refreshDataFileIfStalePromise){const e=this.fetchClientConfiguration().then(e=>e.ok?s.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(e=>{this.updateClientConfiguration(e).then(t=>{t.ok&&this.eventManager.fireEvent(exports.EventType.ConfigurationUpdate,{timestamp:e})})}),this.eventSource.onError(e=>{A.error`Error occurred during real-time update: ${e}. Switching to polling updates while the connection is not restored.`,this.updateType=O.Polling,this.handlePollingUpdates()})}handlePollingUpdates(){this.cleanupHandlers();try{const e=this.lastUpdate.getTime(),t=Date.now(),i=Math.max(this.updateInterval-(t-e),0);setTimeout(()=>u(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 o=new Map;e.variables.forEach(e=>{try{const t=Ve.parseFeatureVariable(e).throw();o.set(e.key,t)}catch(i){A.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:o})});const o=t.rules.map(e=>{const t=new Map;return e.variationByExposition.forEach(i=>{const o=a.get(i.variationKey);o&&t.set(o.key,{name:o.name,key:o.key,id:i.variationId,experimentId:e.experimentId,variables:o.variables})}),{variations:t}});e.featureFlags.set(i,{variations:a,environmentEnabled:t.environmentEnabled,rules:o,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:o,variationByExposition:r}=i,n=new Map;r.forEach(({variationKey:e,variationId:t})=>{"number"==typeof t&&n.set(e,t)}),t.set(a,{featureId:e.id,experimentId:o,variations:n})}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,o=new Map;a.forEach(({variationKey:e,variationId:t})=>{"number"==typeof t&&o.set(e,t)}),t.set(e,{type:i.type,variations:o})}return this.mappedExperiments=t,t}get holdout(){return this.holdoutData}get meGroups(){return this.meGroupsData}get isConsentRequired(){return this.configuration.consentType===N.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===F.TARGETED_DELIVERY))return!0;return!1}checkShouldUpdate(){const{configuration:e}=this.configurationData;return this.updateType=e.realTimeUpdate?O.RealTime:O.Polling,!this.featureFlags.size||this.lastUpdate.getTime()<Date.now()-this.updateInterval}readStorageData(){var e,t,i;A.debug("CALL: ClientConfiguration.readStorageData()");const a=this.storage.read();if(a.ok){let{data:o,lastUpdate:r,lastModified:n,requestTime:s}=a.data,u=!1;if(this.defaultDataFile)try{const a=JSON.parse(this.defaultDataFile);this.defaultDataFile=void 0,this.usedDefaultDataFile=!0;const r=null!==(t=null!==(e=o.dateModified)&&void 0!==e?e:s)&&void 0!==t?t:-1,n=null!==(i=a.dateModified)&&void 0!==i?i:0;(!s||n>r)&&(o=a,u=!0)}catch(e){A.error`Error parsing default data file: ${String(e)}`}this.updateConfigurationData(o,u),this.lastUpdate=this.usedDefaultDataFile?new Date(0):new Date(Date.parse(r)),this.lastModified=n,this.requestTime=s}A.debug`RETURN: ClientConfiguration.readStorageData() -> (result: ${a.ok})`}updateClientConfiguration(e){return u(this,0,void 0,function*(){const t=Date.now();if(this.usedDefaultDataFile)return this.updateClientConfigurationInBackground(),s.Ok(!1);if(this.requestTime&&!e&&!this.externalPackageInfo.isServer){if(t-this.requestTime<=this.CACHE_REVALIDATE_PERIOD)return this.updateClientConfigurationInBackground(),s.Ok(!1);A.debug`Cached configuration data has expired. Fetching fresh data.`}return this.fetchClientConfiguration(e)})}fetchClientConfiguration(e){return u(this,0,void 0,function*(){const t=yield this.requester.getClientConfiguration(e,this.lastModified);return this.applyNewConfigurationDataFromResponse(t)})}updateClientConfigurationInBackground(){setTimeout(()=>u(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 u(this,0,void 0,function*(){if(this.requestTime=Date.now(),!e.ok)return this.featureFlags.size?(A.error("Error occurred while updating configuration. Existing configuration will be used as a fallback."),s.Ok(!0)):e;if(void 0===e.data.configuration)return this.updateStorageData(),s.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 o=this.updateStorageData();if(!o.ok)return o;const r=a.configuration.realTimeUpdate?O.RealTime:O.Polling,n=r!==this.updateType;return n&&(this.updateType=r,A.info`Configuration update type was toggled to ${O[r]}`,yield this.initialize()),this.blockingBehaviourMode=this.consentBlockingBehaviourFromStr(a.configuration.consentOptOutBehavior),s.Ok(n)})}updateConfigurationData(e,t=!0){const{configuration:i,featureFlags:a,customData:o,holdout:r,segments:n,dateModified:s}=e;let u=n?new Map(n.map(e=>[e.id.toString(),e])):null,l=null;if(t&&(null==o?void 0:o.length)){l=new Map;for(let e of o){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==o?void 0:o.length)&&(this.dataManager.customDataIndexes=o),this.meGroupsData=this.makeMEGroups(a),this.holdoutData=null!=r?r:null,this.configurationData={configuration:i,customData:o,holdout:r,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 B(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===L.PartiallyBlocked||e===L.CompletelyBlocked?e:(A.error(`Unexpected consent blocking type '${e}'`),L.PartiallyBlocked)}}var Re;class be{constructor(e,t){A.debug`CALL: new ClientSettings(siteCode: ${e}, configuration: ${t})`,this.siteCode=e,this.environment=this.getEnvironment(t),this.networkDomain=this.getNetworkDomain(t),this.updateInterval=this.getUpdateInterval(t),this.cleanupInterval=this.getCleanupInterval(t),this.requestTimeout=this.getRequestTimeout(t),this.trackingInterval=this.getTrackingInterval(t),this.trackRetryDelay=5*exports.Milliseconds.Second,A.debug`RETURN: new ClientSettings(siteCode: ${e}, configuration: ${t})`}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?(A.warning(`Tracking interval must not be shorter than ${t} ms. Minimum possible interval was applied.`),t):e.trackingInterval>i?(A.warning(`Tracking interval must not be longer than ${i} ms. Maximum possible interval was applied.`),i):e.trackingInterval:a}getEnvironment(e){return(null==e?void 0:e.environment)?e.environment:exports.Environment.Production}getCleanupInterval(e){return"number"==typeof(null==e?void 0:e.targetingDataCleanupInterval)?e.targetingDataCleanupInterval<1?(A.warning("Targeting data cleanup interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*exports.Milliseconds.Minute):e.targetingDataCleanupInterval*exports.Milliseconds.Minute:null}getUpdateInterval(e){return"number"==typeof(null==e?void 0:e.updateInterval)?e.updateInterval<1?(A.warning("Update interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*exports.Milliseconds.Minute):e.updateInterval*exports.Milliseconds.Minute:60*exports.Milliseconds.Minute}getNetworkDomain(e){const t=pe.validateNetworkDomain(null==e?void 0:e.networkDomain);return t.ok?t.data:null}getRequestTimeout(e){return"number"==typeof(null==e?void 0:e.requestTimeout)?e.requestTimeout:10*exports.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}}}Re=be,be.DEFAULT_TRACKING_INTERVAL_MS=1e3,be.MIN_TRACKING_INTERVAL_MS=Re.DEFAULT_TRACKING_INTERVAL_MS,be.MAX_TRACKING_INTERVAL_MS=5e3;let Ae=class e{constructor(e){this.cookie=e,this.status=exports.TrackingStatus.Sent}static fromString(t){if(!t)return new e([]);const i=t.split(";").map(e=>{const[i,a]=e.trim().split("=");return i?{key:i,value:a}:(A.warning`Cookie string has an empty key: ${t}`,null)}).filter(e=>null!==e);return new e(i)}get url(){return""}get data(){return{cookie:this.cookie,type:exports.KameleoonData.Cookie,status:this.status}}};class Ke{constructor(e){this._value=e,this.status=exports.TrackingStatus.Sent}get url(){return""}get data(){return{value:this._value,type:exports.KameleoonData.UniqueIdentifier,status:exports.TrackingStatus.Sent}}static _fromRaw(e){return new Ke(e.value)}}class Oe{constructor(e=null,t){this.cleanupInterval=e,this.packageInfo=t}mutUpdateData({infoData:e,visitorCode:t,mutData:i,dataItem:a,extendTtl:o}){let r,{visitorReference:n,data:s,isReference:u}=this.dereferenceData(i,t);switch(this.packageInfo.isServer&&u&&!i[n]&&(e.mappingIdentifiers&&delete e.mappingIdentifiers[t],delete i[t],n=t),o&&(r=this.cleanupInterval?Date.now()+this.cleanupInterval:0),a.data.type){case exports.KameleoonData.CustomData:this.updateCustomData({expirationTime:r,customData:a,visitorCode:n,mutData:s});break;case exports.KameleoonData.PageView:this.updatePageView({expirationTime:r,pageView:a,visitorCode:n,mutData:s});break;case exports.KameleoonData.Conversion:this.updateConversion({expirationTime:r,conversion:a,visitorCode:n,mutData:s});break;case exports.KameleoonData.VisitsData:this.updateVisitsData({expirationTime:r,visitsData:a,visitorCode:n,mutData:s});break;case exports.KameleoonData.Personalization:this.updatePersonalization({expirationTime:r,personalization:a,visitorCode:n,mutData:s});break;case exports.KameleoonData.TargetedSegment:this.updateTargetedSegment({expirationTime:r,targetedSegment:a,visitorCode:n,mutData:s});break;default:this.updateCommonData({expirationTime:r,commonData:a,visitorCode:n,mutData:s})}return r}mutCleanupData(e,t){var i;if(!this.cleanupInterval)return null;let a=0;for(const[o,r]of Object.entries(e)){if("string"==typeof r){this.removeReference({mutData:e,visitorCode:o,linkedVisitor:r,infoData:t});continue}let n=0;for(const e of Object.keys(r)){const t=e;let i;switch(t){case exports.KameleoonData.CustomData:case exports.KameleoonData.PageView:case exports.KameleoonData.Conversion:case exports.KameleoonData.Personalization:i=this.deleteNestedExpiredField(r,t);break;default:i=this.deleteExpiredField(r,t)}(!n||i&&i<n)&&(n=i)}Object.keys(e[o]).length?(!a||n&&n<a)&&(a=n):(delete e[o],this.packageInfo.isServer&&(null!==(i=t.mappingIdentifiers)&&void 0!==i||(t.mappingIdentifiers={}),delete t.mappingIdentifiers[o]))}return a}mutAddUnsentData({mutData:e,visitorCode:t,dataType:i}){const a=e.unsentData[t];if(a&&a.length){const o=new Set([...a]);o.add(i),e.unsentData[t]=Array.from(o)}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:e,mutData:t,pageView:i,expirationTime:a}){const{data:o}=i,r=t[e]&&exports.KameleoonData.PageView in t[e]&&o.urlAddress in t[e][exports.KameleoonData.PageView],n={expirationTime:a,visitorCode:e,data:t,key:exports.KameleoonData.PageView,nestedKey:o.urlAddress,value:o};if(r){const i=t[e][exports.KameleoonData.PageView][o.urlAddress].timestamps;for(const e of i){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(n)}else this.createNestedField(n)}updateCustomData({visitorCode:e,customData:t,mutData:i,expirationTime:a}){const{data:o}=t,r=i[e]&&exports.KameleoonData.CustomData in i[e],n={expirationTime:a,visitorCode:e,data:i,key:exports.KameleoonData.CustomData,nestedKey:o.index.toString(),value:o};r?this.updateNestedField(n):this.createNestedField(n)}updateConversion({conversion:e,mutData:t,visitorCode:i,expirationTime:a}){const{data:o}=e,r=t[i]&&exports.KameleoonData.Conversion in t[i],n={expirationTime:a,visitorCode:i,data:t,key:exports.KameleoonData.Conversion,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(n):this.createNestedField(n)}updateVisitsData({visitorCode:e,mutData:t,visitsData:i,expirationTime:a}){var o,r;const{data:n}=i,s=t[e]&&exports.KameleoonData.VisitsData in t[e],u={expirationTime:a,data:t,key:exports.KameleoonData.VisitsData,value:n,visitorCode:e};if(s){const i=t[e][exports.KameleoonData.VisitsData];i.visits.forEach(e=>{he.insertVisitInOrderedListMutably({list:n.visits,visit:e})});const a=Math.max(null!==(o=n.visitNumber)&&void 0!==o?o:n.visits.length-1,n.visits.length-1,null!==(r=i.visitNumber)&&void 0!==r?r:0);this.updateField(Object.assign(Object.assign({},u),{value:Object.assign(Object.assign({},n),{visits:n.visits,visitNumber:a})}))}else this.createField(u)}updatePersonalization({visitorCode:e,mutData:t,personalization:i,expirationTime:a}){const{data:o}=i,r=t[e]&&exports.KameleoonData.Personalization in t[e],n={expirationTime:a,visitorCode:e,data:t,key:exports.KameleoonData.Personalization,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(n):this.createNestedField(n)}updateTargetedSegment({visitorCode:e,mutData:t,targetedSegment:i,expirationTime:a}){const{data:o}=i,r=t[e]&&exports.KameleoonData.TargetedSegment in t[e],n={expirationTime:a,visitorCode:e,data:t,key:exports.KameleoonData.TargetedSegment,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(n):this.createNestedField(n)}updateCommonData({visitorCode:e,mutData:t,commonData:i,expirationTime:a}){const{data:o}=i,r=t[e]&&o.type in t[e],n={expirationTime:a,data:t,key:o.type,visitorCode:e,value:o};r?this.updateField(n):this.createField(n)}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:o}){var r;const n=i[a][e];i[a][e]=Object.assign(Object.assign({},t),{expirationTime:null!==(r=null!=o?o:n.expirationTime&&n.expirationTime)&&void 0!==r?r:Date.now()})}createField({key:e,value:t,data:i,visitorCode:a,expirationTime:o}){i[a]=Object.assign(Object.assign({},i[a]),{[e]:Object.assign(Object.assign({},t),{expirationTime:o})})}updateNestedField({key:e,nestedKey:t,value:i,data:a,visitorCode:o,expirationTime:r}){var n;const s=a[o][e][t];a[o][e][t]=Object.assign(Object.assign({},i),{expirationTime:null!==(n=null!=r?r:null==s?void 0:s.expirationTime)&&void 0!==n?n:Date.now()})}createNestedField({key:e,nestedKey:t,value:i,data:a,visitorCode:o,expirationTime:r}){var n;(null===(n=a[o])||void 0===n?void 0:n[e])?a[o]=Object.assign(Object.assign({},a[o]),{[e]:Object.assign(Object.assign({},a[o][e]),{[t]:Object.assign(Object.assign({},i),{expirationTime:r})})}):a[o]=Object.assign(Object.assign({},a[o]),{[e]:{[t]:Object.assign(Object.assign({},i),{expirationTime:r})}})}}class Fe{constructor({browserType:e,visitNumber:t,timeSincePreviousVisit:i,os:a,deviceType:o,browserVersion:r}){this.browserType=e,this.visitNumber=t,this.timeSincePreviousVisit=i,this.os=a,this.deviceType=o,this.browserVersion=r}get url(){const e=this.browserVersion?m+this.browserVersion:"",t=this.browserType?k+this.browserType:"",i=this.browserType?v+H[this.browserType]:"",a=this.os?T+this.os:"",o=this.os?I+j[this.os]:"",r=this.deviceType?f+this.deviceType:"",n=void 0!==this.visitNumber?"&visitNumber="+this.visitNumber:"",s=void 0!==this.timeSincePreviousVisit?"&timeSincePreviousVisit="+this.timeSincePreviousVisit:"";return h+t+i+e+n+s+a+o+r}}class $e{static setConditionFactoryInstance(e){this.conditionFactoryInstance=e}static createCondition(e){return this.conditionFactoryInstance.createCondition(e)}}class Me{constructor(e,t,i){var a;if(this.inverseResult=!1,this.isOperator(e))this.nodeValue=e;else{const t=$e.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===Q.And||e===Q.Or}}class Ne{constructor(e){this.error=null,this.targetingTypes=new Set,A.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 Me(e)));return this.buildTree(i,t)});this.tree=this.buildTree(a,i),A.debug`RETURN: new Tree(segment: ${e})`}evaluate(e){const t=this.evaluateNode(this.tree,e);return this.error?s.Err(this.error):s.Ok(t)}hasTargetingType(e){return this.targetingTypes.has(e)}evaluateNode(e,t){if(this.isLeafNode(e)){if(e.error)return e.error.type===exports.KameleoonException.TargetingCondition;const i=e.value.evaluate(t);return i.ok?e.inverse?!i.data:i.data:(this.error=i.error,!1)}if(this.isNonLeafNode(e))switch(e.value){case Q.And:return this.evaluateNode(e.left,t)&&this.evaluateNode(e.right,t);case Q.Or:return this.evaluateNode(e.left,t)||this.evaluateNode(e.right,t)}return!1}isLeafNode(e){return!Boolean(e.left&&e.right)}isNonLeafNode(e){return Boolean(e.left&&e.right&&(e.value===Q.Or||e.value===Q.And))}buildTree(e,t){if(1===e.length)return e[0];for(const i of t){const t=e.shift(),a=e.shift(),o=new Me(i,t,a);e.unshift(o)}return e[0]}flattenSegment(e){const{firstLevel:t,firstLevelOrOperators:i}=e.conditionsData,a=[];return t.forEach(e=>{const{conditions:t,orOperators:i}=e,o={operators:this.convertOperators(i),conditions:t};a.push(o)}),{topLevelOperators:this.convertOperators(i),nestedConditions:a}}convertOperators(e){return e.map(e=>e?Q.Or:Q.And)}}class Le{constructor({device:e}){this.device=e}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.Device];if(t){const{device:e}=t;return s.Ok(e===this.device)}return s.Ok(!1)}}class _e{constructor({browser:e,version:t,versionMatchType:i}){this.browser=e,this.version=t,this.versionMatchType=i}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.Browser];if(t){const e=this.checkCondition(t);return this.error?s.Err(this.error):s.Ok(e)}return s.Ok(!1)}checkCondition(e){const{browser:t,version:i}=e;if("string"!=typeof this.browser)return!1;if(!this.version)return t===this.browser;if(!this.versionMatchType||"number"!=typeof i)return!1;const a=parseFloat(this.version);switch(isNaN(a)&&(A.error`Failed to parse version: ${this.version} in Browser condition`,this.error=new c(exports.KameleoonException.VersionParse,this.version)),this.versionMatchType){case re.EQUAL:return t===this.browser&&i===a;case re.GREATER:return t===this.browser&&i>a;case re.LOWER:return t===this.browser&&i<a;default:A.error`Unexpected comparing operation for Browser condition: ${this.versionMatchType}`,d(this.versionMatchType)}}}class Ue{constructor({goalId:e}){this.conditionValue=e}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.Conversion];if(!this.conditionValue)return s.Ok(!1);if(t){if(Object.keys(t).length&&-1===this.conditionValue)return s.Ok(!0);const e=Object.values(t);return s.Ok(e.some(e=>!!e&&e.goalId===this.conditionValue))}return s.Ok(!1)}}class Pe{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:e}){var t;const i=null===(t=null==e?void 0:e[exports.KameleoonData.CustomData])||void 0===t?void 0:t[this.customDataIndex];if(this.matchType===Z.UNDEFINED)return s.Ok(!i);if(i){const{value:e}=i,t=this.checkCondition(e);return this.error?s.Err(this.error):s.Ok(t)}return s.Ok(!1)}checkCondition(e){if("string"!=typeof this.conditionValue&&this.matchType!==Z.TRUE&&this.matchType!==Z.FALSE&&this.matchType!==Z.RANGE)return A.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`,!1;const t=this.conditionValue;if(this.matchType===Z.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===Z.RANGE){const t=this.parseRange(this.range);if(!t.ok)return this.error=t.error,!1;const[i,a]=t.data,o=e=>e>=i&&e<=a;return Array.isArray(e)?e.some(e=>o(Number(e))):o(Number(e))}if(Array.isArray(e))return e.some(e=>this.checkCondition(e));switch(this.matchType){case Z.CONTAINS:return e.includes(t);case Z.EXACT:return e===this.conditionValue;case Z.REGULAR_EXPRESSION:return Ve.parseRegExp(t).test(e);case Z.LOWER:return Number(e)<Number(this.conditionValue);case Z.EQUAL:return Number(e)===Number(this.conditionValue);case Z.GREATER:return Number(e)>Number(this.conditionValue);case Z.TRUE:return"true"===e.toLowerCase();case Z.FALSE:return"false"===e.toLowerCase();default:return A.error`Unexpected comparing operation for CustomData condition: ${this.matchType}`,!1}}parseArray(e){try{const t=JSON.parse(e);if(Array.isArray(t))return s.Ok(t)}catch(t){return A.error`Failed to parse array: ${e} in CustomData condition`,s.Err(new c(exports.KameleoonException.AmongValuesCheck,t,e))}return s.Ok([])}parseRange(e){return e&&2===e.length?s.Ok(e):(A.error`Failed to parse range: ${e} in CustomData condition`,s.Err(new c(exports.KameleoonException.RangeCheck,e)))}}class Ge{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 Be{constructor({matchType:e,title:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.PageView];if(!t)return s.Ok(!1);const i=Ge.getLatest(t);return s.Ok(this.checkCondition(i.title))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case oe.CONTAINS:return e.includes(this.conditionValue);case oe.EXACT:return e===this.conditionValue;case oe.REGULAR_EXPRESSION:return Ve.parseRegExp(this.conditionValue).test(e);default:return A.error`Unexpected comparing operation for PageTitle condition: ${this.matchType}`,!1}}}class ze{constructor({matchType:e,url:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.PageView];if(!t)return s.Ok(!1);const i=Ge.getLatest(t);return s.Ok(this.checkCondition(i.urlAddress))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case oe.CONTAINS:return e.includes(this.conditionValue);case oe.EXACT:return e===this.conditionValue;case oe.REGULAR_EXPRESSION:return Ve.parseRegExp(this.conditionValue).test(e);default:return A.error`Unexpected comparing operation for PageUrl condition: ${this.matchType}`,!1}}}class je{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 s.Ok(!1);if("string"!=typeof this.conditionValue)return s.Ok(t===this.sdkLanguage);if(!this.versionMatchType)return s.Ok(!1);if(t!==this.sdkLanguage)return s.Ok(!1);const a=ge.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?s.Ok(a.data):s.Err(a.error)}}class qe{constructor({visitorCode:e,matchType:t}){this.matchType=t,this.conditionValue=e}evaluate({visitorCode:e}){return s.Ok(this.checkCondition(e))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case oe.CONTAINS:return e.includes(this.conditionValue);case oe.EXACT:return e===this.conditionValue;case oe.REGULAR_EXPRESSION:return Ve.parseRegExp(this.conditionValue).test(e);default:return A.error`Unexpected comparing operation for VisitorCode condition: ${this.matchType}`,!1}}}class He{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:e}){var t;const i=!this.cookie.key&&!this.cookie.value,a=Boolean(this.valueMatchType)&&Boolean(this.keyMatchType);if(i||!a)return s.Ok(!1);const o=this.extractCookie(),r=(null===(t=null==e?void 0:e[exports.KameleoonData.Cookie])||void 0===t?void 0:t.cookie)||[];return s.Ok(o.some(e=>this.checkCondition(e))||r.some(e=>this.checkCondition(e)))}extractCookie(){return"undefined"!=typeof document&&document.cookie?Ae.fromString(document.cookie).data.cookie:[]}checkCondition(e){const t=this.keyMatchType,{key:i,value:a}=e;if(t===ne.OPTIONAL){const e=this.cookie;return!!this.isOptionalCookie(e)&&this.compareCookieValue(a,e.value)}const{key:o,value:r}=this.cookie;let n;switch(t){case ne.EXACT:n=i===o;break;case ne.CONTAINS:n=i.includes(o);break;case ne.REGULAR_EXPRESSION:n=Ve.parseRegExp(o).test(i);break;default:A.error`Unexpected comparing operation for Cookie condition: ${t}`,d(t)}return n&&this.compareCookieValue(a,r)}compareCookieValue(e,t){const i=this.valueMatchType;switch(i){case Z.EXACT:return e===t;case Z.CONTAINS:return e.includes(t);case Z.REGULAR_EXPRESSION:return Ve.parseRegExp(t).test(e);default:return A.error`Unexpected comparing operation for Cookie condition: ${i}`,!1}}isOptionalCookie(e){const{value:t}=e;return void 0!==t}}class We{constructor({os:e}){this.operatingSystem=e}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.OperatingSystem];if(t){const{operatingSystem:e}=t;return s.Ok(e===this.operatingSystem)}return s.Ok(!1)}}class Ye{constructor({country:e,region:t,city:i}){this.country=e,this.region=t,this.city=i}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.GeolocationData];if(t){const{country:e,region:i,city:a}=t,[o,r,n]=[this.country,this.region,this.city];if(!o||!e)return s.Ok(!1);const u=!(e.toLowerCase()!==o.toLowerCase()||r&&(null==i?void 0:i.toLowerCase())!==r.toLowerCase()||n&&(null==a?void 0:a.toLowerCase())!==n.toLowerCase());return s.Ok(u)}return s.Ok(!1)}}class Xe{constructor({segmentId:e}){this.segmentId=e}evaluate(e){const{segments:t,trees:i}=e;if(!this.segmentId)return s.Ok(!1);const a=null==t?void 0:t.get(this.segmentId.toString());if(!a)return s.Ok(!1);const o=null==i?void 0:i.get(this.segmentId.toString());return o?o.evaluate(e):new Ne(a).evaluate(e)}}class Je{constructor({featureFlagId:e,variationKey:t,ruleId:i}){this.featureId=e,this.ruleId=i,this.variationKey=t}evaluate({variationData:e,ruleMap:t}){var i,a,o,r;if(!this.featureId||!t)return s.Ok(!1);if(this.featureId&&!this.ruleId&&!this.variationKey){for(const[a,o]of t){const{featureId:t,experimentId:a}=o;if(t===this.featureId&&"number"==typeof(null===(i=e[a])||void 0===i?void 0:i.variationId))return s.Ok(!0)}return s.Ok(!1)}if(this.featureId&&this.ruleId){const i=t.get(this.ruleId);if(!i)return s.Ok(!1);const{experimentId:r,variations:n}=i;if(this.variationKey){const t=n.get(this.variationKey);return s.Ok(Boolean(t)&&(null===(a=e[r])||void 0===a?void 0:a.variationId)===t)}return s.Ok(Boolean(null===(o=e[i.experimentId])||void 0===o?void 0:o.variationId))}if(this.featureId&&!this.ruleId&&this.variationKey)for(const[i,a]of t){const{featureId:t,experimentId:i,variations:o}=a;if(t===this.featureId&&o.has(this.variationKey)){const t=o.get(this.variationKey);return s.Ok(Boolean(t)&&(null===(r=e[i])||void 0===r?void 0:r.variationId)===t)}}return s.Ok(!1)}}class Qe{constructor({matchType:e,url:t}){this.conditionValue=t,this.matchType=e}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.PageView];if(!t)return s.Ok(!1);const i=this.getSecondLatestPageView(Object.values(t));if(!i)return s.Ok(!1);const a=i.urlAddress;return s.Ok(this.checkCondition(a))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case oe.CONTAINS:return e.includes(this.conditionValue);case oe.EXACT:return e===this.conditionValue;case oe.REGULAR_EXPRESSION:return Ve.parseRegExp(this.conditionValue).test(e);default:return A.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 Ze{constructor({matchType:e,pageCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.PageView];if(!t)return s.Ok(!1);let i=0;return Object.values(t).forEach(e=>{i+=e.timestamps.length}),s.Ok(this.checkCondition(i))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case oe.EQUAL:return e===this.conditionValue;case oe.GREATER:return e>this.conditionValue;case oe.LOWER:return e<this.conditionValue;default:return A.error`Unexpected comparing operation for VisitedPages condition: ${this.matchType}`,!1}}}class et{constructor({matchType:e,count:t,unitOfTime:i}){this.matchType=e,this.conditionValue=t,this.timeUnit=i}evaluate({targetingData:e,sdkInfo:t}){const i=null==e?void 0:e[exports.KameleoonData.VisitsData];if(t.isServer?!(null==i?void 0:i.visits.length):!(null==i?void 0:i.visits)||i.visits.length<2)return s.Ok(!1);const a=i.visits[0];return s.Ok(this.checkCondition("number"==typeof a?a:a.timeStarted))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue||!this.timeUnit)return!1;const t=Date.now()-e,i=ge.convertTimeUnit(t,this.timeUnit);switch(this.matchType){case oe.GREATER:return i>this.conditionValue;case oe.LOWER:return i<this.conditionValue;default:return A.error`Unexpected comparing operation for FirstVisit condition: ${this.matchType}`,!1}}}class tt{constructor({matchType:e,count:t,unitOfTime:i}){this.matchType=e,this.conditionValue=t,this.timeUnit=i}evaluate({targetingData:e,sdkInfo:t}){const i=null==e?void 0:e[exports.KameleoonData.VisitsData];if(t.isServer?!(null==i?void 0:i.visits.length):!(null==i?void 0:i.visits)||i.visits.length<2)return s.Ok(!1);const a=i.visits,o=a[t.isServer?a.length-1:a.length-2];return s.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=ge.convertTimeUnit(t,this.timeUnit);switch(this.matchType){case oe.GREATER:return i>this.conditionValue;case oe.LOWER:return i<this.conditionValue;default:return A.error`Unexpected comparing operation for LastVisit condition: ${this.matchType}`,!1}}}class it{constructor({matchType:e,visitCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:e,sdkInfo:t}){const i=null==e?void 0:e[exports.KameleoonData.VisitsData];if(!i)return s.Ok(!1);let a=0;const o=(new Date).setHours(0,0,0,0),{visits:r}=i;return r.forEach(e=>{let t;t="number"==typeof e?e:e.timeStarted,t>=o&&a++}),t.isServer&&(a+=1),s.Ok(this.checkCondition(a))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case oe.EQUAL:return e===this.conditionValue;case oe.GREATER:return e>this.conditionValue;case oe.LOWER:return e<this.conditionValue;default:return A.error`Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`,!1}}}class at{constructor({matchType:e,visitCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:e,sdkInfo:t}){const i=null==e?void 0:e[exports.KameleoonData.VisitsData];if(!i)return s.Ok(!1);const a=i.visits.length+(t.isServer?1:0);return s.Ok(this.checkCondition(a))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case oe.EQUAL:return e===this.conditionValue;case oe.GREATER:return e>this.conditionValue;case oe.LOWER:return e<this.conditionValue;default:return A.error`Unexpected comparing operation for Visits condition: ${this.matchType}`,!1}}}class ot{constructor({visitorType:e}){this.visitorType=e}evaluate({targetingData:e,sdkInfo:t}){const i=null==e?void 0:e[exports.KameleoonData.VisitsData];if(!i||!this.visitorType)return s.Ok(!1);const{visits:a}=i,o=t.isServer?!a.length:a.length<=1;switch(this.visitorType){case ee.NEW:return s.Ok(o);case ee.RETURNING:return s.Ok(!o);default:A.error`Unexpected visitor type for NewVisitor condition: ${this.visitorType}`,d(this.visitorType)}}}class rt{constructor({version:e,versionMatchType:t}){this.conditionValue=e,this.versionMatchType=t}evaluate({targetingData:e}){var t;const i=null===(t=null==e?void 0:e[exports.KameleoonData.ApplicationVersion])||void 0===t?void 0:t.version;if(!i||!this.conditionValue||!this.versionMatchType)return s.Ok(!1);const a=ge.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?s.Ok(a.data):s.Err(a.error)}}class nt{constructor({lowerBound:e,upperBound:t,keyMomentId:i,goalId:a}){this.lowerBound=e,this.upperBound=t,this.keyMomentId=i,this.goalId=a}evaluate({targetingData:e}){var t;const i=null==e?void 0:e[exports.KameleoonData.KameleoonConversionScore];if("number"!=typeof this.keyMomentId||"number"!=typeof this.goalId||"number"!=typeof this.lowerBound||"number"!=typeof this.upperBound||!i)return s.Ok(!1);const a=null===(t=i.kcs[this.keyMomentId.toString()])||void 0===t?void 0:t[this.goalId.toString()];return"number"!=typeof a?s.Ok(!1):s.Ok(a>=this.lowerBound&&a<=this.upperBound)}}class st{constructor({campaignType:e}){this.campaignType=e}evaluate(e){return s.Ok(this.checkCondition(e))}checkCondition(e){var t;const i=Object.values(e.variationData),a=Object.values((null===(t=e.targetingData)||void 0===t?void 0:t.personalization)||{}),o=1===i.length&&null!==e.experimentId&&void 0!==e.variationData[e.experimentId],r=0===i.length,n=0===a.length;switch(this.campaignType){case ae.Experiment:return r||o;case ae.Personalization:return n;case ae.Any:return n&&(r||o);default:return!1}}}class ut{constructor({variationMatchType:e,variation:t,experiment:i}){this.variationMatchType=e,this.variationId=t||-1,this.experimentId=i||-1}evaluate(e){return s.Ok(this.checkCondition(e))}checkCondition(e){const t=e.variationData[this.experimentId];if(!t)return!1;switch(this.variationMatchType){case te.ANY:return!0;case te.EXACT:return t.variationId===this.variationId;default:return!1}}}class lt{constructor({personalizationId:e}){this.personalizationId=e}evaluate(e){return e.targetingData?s.Ok(this.checkCondition(e)):s.Ok(!1)}checkCondition(e){var t;if(!this.personalizationId)return!1;const i=null===(t=e.targetingData)||void 0===t?void 0:t[exports.KameleoonData.Personalization];return void 0!==(null==i?void 0:i[this.personalizationId])}}class dt{createCondition(e){const{targetingType:t}=e;switch(t){case se.CUSTOM_DATUM:return s.Ok(new Pe(e));case se.EXCLUSIVE_EXPERIMENT:return s.Ok(new st(e));case se.TARGET_EXPERIMENT:return s.Ok(new ut(e));case se.TARGET_FEATURE_FLAG:return s.Ok(new Je(e));case se.TARGET_PERSONALIZATION:return s.Ok(new lt(e));case se.DEVICE_TYPE:return s.Ok(new Le(e));case se.BROWSER:return s.Ok(new _e(e));case se.PAGE_URL:return s.Ok(new ze(e));case se.PAGE_TITLE:return s.Ok(new Be(e));case se.CONVERSIONS:return s.Ok(new Ue(e));case se.VISITOR_CODE:return s.Ok(new qe(e));case se.SDK_LANGUAGE:return s.Ok(new je(e));case se.COOKIE:return s.Ok(new He(e));case se.OPERATING_SYSTEM:return s.Ok(new We(e));case se.GEOLOCATION:return s.Ok(new Ye(e));case se.SEGMENT:return s.Ok(new Xe(e));case se.APPLICATION_VERSION:return s.Ok(new rt(e));case se.PREVIOUS_PAGE:return s.Ok(new Qe(e));case se.PAGE_VIEWS:return s.Ok(new Ze(e));case se.LAST_VISIT:return s.Ok(new tt(e));case se.FIRST_VISIT:return s.Ok(new et(e));case se.SAME_DAY_VISITS:return s.Ok(new it(e));case se.VISITS:return s.Ok(new at(e));case se.NEW_VISITORS:return s.Ok(new ot(e));case se.HEAT_SLICE:return s.Ok(new nt(e));default:return A.info`Unsupported targeted condition type found: ${t}`,s.Err(new c(exports.KameleoonException.TargetingCondition,t))}}}exports.KameleoonStorageKey=void 0,function(e){e.ClientData="kameleoonClientData",e.TargetingData="kameleoonTargetingData",e.TrackingData="kameleoonTrackingData",e.VariationData="kameleoonVariationData",e.VisitorCode="kameleoonVisitorCode",e.ConsentData="kameleoonConsentData",e.DataInfo="kameleoonDataInfo",e.KameleoonSimulationFFData="kameleoonSimulationFFData",e.ForcedFeatureVariation="kameleoonForcedFeatureVariation",e.ForcedExperimentVariation="kameleoonForcedExperimentVariation"}(exports.KameleoonStorageKey||(exports.KameleoonStorageKey={}));const ct={data:G,lastUpdate:""},pt=29*exports.Milliseconds.Minute;class gt{constructor(e){this.key=e}isDataValid(e){switch(this.key){case exports.KameleoonStorageKey.ClientData:return this.checkClientDataIntegrity(e);case exports.KameleoonStorageKey.TargetingData:return this.checkTargetingDataIntegrity(e);case exports.KameleoonStorageKey.DataInfo:return this.checkDataInfoIntegrity(e);case exports.KameleoonStorageKey.VariationData:return this.checkVariationDataIntegrity(e);case exports.KameleoonStorageKey.TrackingData:return this.checkTrackingDataIntegrity(e);default:return!0}}getDefaultData(){switch(this.key){case exports.KameleoonStorageKey.ClientData:return this.getDefaultClientData();case exports.KameleoonStorageKey.DataInfo:return{unsentData:{},nextVisitTime:0,mappingIdentifiers:{}};case exports.KameleoonStorageKey.TrackingData:return{scheduledVisitors:{}};case exports.KameleoonStorageKey.TargetingData:case exports.KameleoonStorageKey.VariationData:case exports.KameleoonStorageKey.ConsentData:return{};case exports.KameleoonStorageKey.VisitorCode:case exports.KameleoonStorageKey.KameleoonSimulationFFData:return"";case exports.KameleoonStorageKey.ForcedExperimentVariation:case exports.KameleoonStorageKey.ForcedFeatureVariation:return{};default:d(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(ct))}checkTargetingDataIntegrity(e){const t=Object.values(e);if(!t.length)return!0;for(const e of t){if("string"==typeof e)continue;const t=e=>!this.hasFields(e,["status"])||this.hasFields(e,["sent"])||this.hasFields(e,["timestampList"]);for(const[i,a]of Object.entries(e)){if(Array.isArray(a))return!1;switch(i){case exports.KameleoonData.PageView:case exports.KameleoonData.Conversion:case exports.KameleoonData.Personalization:case exports.KameleoonData.TargetedSegment:case exports.KameleoonData.CustomData:if(Object.values(a).some(e=>t(e)))return!1;continue;default:if(t(a))return!1}}}return!0}getDefaultClientData(){return Object.assign(Object.assign({},ct),{lastUpdate:(new Date).toString()})}hasFields(e,t){const i=Object.keys(e);return!(!i.length||!t.length)&&t.every(e=>i.includes(e))}}let ht=class{constructor(e,t){this.externalStorage=e,this.storageKey=t;const i=new gt(t),a=this.read();if(!a.ok){if(a.error.type===exports.KameleoonException.StorageEmpty){const e=i.getDefaultData();this.write(e)}return}const o=a.data;if(!i.isDataValid(o)){const e=i.getDefaultData();this.write(e)}}read(){try{const e=this.externalStorage.read(this.storageKey);return null===e?s.Err(new c(exports.KameleoonException.StorageEmpty)):s.Ok(e)}catch(e){return A.error`Failed to read data from storage: ${this.storageKey}`,s.Err(new c(exports.KameleoonException.StorageRead,this.storageKey))}}write(e){try{return this.externalStorage.write(this.storageKey,e),s.Ok()}catch(e){return A.error`Failed to write data to storage: ${this.storageKey}`,s.Err(new c(exports.KameleoonException.StorageWrite,this.storageKey))}}update(e){const t=this.read();if(!t.ok)return t.error.type===exports.KameleoonException.StorageEmpty?this.write(e):t;const i=t.data;let a;return a="string"==typeof i?e:Object.assign(Object.assign({},i),e),this.write(a)}};class vt{constructor(e,t){this.externalStorage=e,this.cleanupInterval=t,t>0&&this.initCleanupInterval()}initCleanupInterval(){for(const e of Object.values(exports.KameleoonStorageKey)){let t=null;try{switch(e){case exports.KameleoonStorageKey.ForcedFeatureVariation:case exports.KameleoonStorageKey.ForcedExperimentVariation:case exports.KameleoonStorageKey.VariationData:case exports.KameleoonStorageKey.ConsentData:A.info`Starting cleanup for ${e} with interval ${this.cleanupInterval}`,t=setInterval(()=>this.cleanupData(e),this.cleanupInterval);break;case exports.KameleoonStorageKey.ClientData:case exports.KameleoonStorageKey.TargetingData:case exports.KameleoonStorageKey.TrackingData:case exports.KameleoonStorageKey.VisitorCode:case exports.KameleoonStorageKey.DataInfo:case exports.KameleoonStorageKey.KameleoonSimulationFFData:break;default:A.error`Unknown storage key: ${e} for initCleanupInterval.`}}catch(i){t&&clearInterval(t),A.error`Error while starting cleanup for ${e} with interval ${this.cleanupInterval}`}}}cleanupData(e){const t=this.externalStorage.read(e);if(!t)return;const i=Date.now();switch(e){case exports.KameleoonStorageKey.VariationData:this.cleanupVariationData(t,i);break;case exports.KameleoonStorageKey.ForcedFeatureVariation:this.cleanupForcedFeatureVariationData(t,i);break;case exports.KameleoonStorageKey.ForcedExperimentVariation:this.cleanupForcedExperimentVariationData(t,i);break;case exports.KameleoonStorageKey.ConsentData:this.cleanupConsentData(t,i);break;case exports.KameleoonStorageKey.ClientData:case exports.KameleoonStorageKey.TargetingData:case exports.KameleoonStorageKey.TrackingData:case exports.KameleoonStorageKey.VisitorCode:case exports.KameleoonStorageKey.DataInfo:case exports.KameleoonStorageKey.KameleoonSimulationFFData:break;default:A.error`Unknown storage key: ${e} for cleanupData.`}this.externalStorage.write(e,t)}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 o=a;"number"==typeof o.expirationTime?o.expirationTime<t&&delete e[i]:o.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[o,r]of Object.entries(a))this.cleanupObjectValues(r,t),0===Object.keys(e[Number(i)][o]).length&&delete e[Number(i)][o]}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 mt;!function(e){e[e.Unknown=0]="Unknown",e[e.Given=1]="Given",e[e.NotGiven=2]="NotGiven"}(mt||(mt={}));class ft{constructor(e){this.id=e,this.status=exports.TrackingStatus.Unsent}get url(){return"eventType=targetingSegment"+D+this.id}get data(){return{id:this.id,type:exports.KameleoonData.TargetedSegment,status:this.status}}static _fromRaw(e){const{id:t,status:i}=e,a=new ft(t);return a.status=i,a}}class Ct{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,A.debug`CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`,this.dataStorage=e,this.infoStorage=t,this.dataProcessor=new Oe(i,a),this.packageInfo=a,i){const t=()=>{this.cleanupData()};try{this.cleanupIntervalId=setInterval(t,i)}catch(e){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),A.error`Failed to set cleanup interval: ${i}`,e}}A.debug`RETURN: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`}getUnsentData(e){const t=this.infoStorage.read();if(!t.ok)return[];const i=t.data,a=this.getVisitorData(e);if(!i.unsentData[e]||!a)return[];const o=i.unsentData[e],r=i.nextVisitTime<=Date.now();return r&&(i.nextVisitTime=Date.now()+pt,this.infoStorage.write(i)),this.getDataFromRaw(a,({status:e,key:t,cdIndex:i})=>!("number"!=typeof i||!this.persistentCustomDataIndexes.has(i)||!r)||o.includes(t)&&e===exports.TrackingStatus.Unsent)}getPendingData(e){const t=this.getVisitorData(e);return t?this.getDataFromRaw(t,({status:e})=>e===exports.TrackingStatus.Pending):[]}getDataFromRaw(e,t){const i=[];for(const[a,o]of Object.entries(e))if(o)switch(a){case exports.KameleoonData.CustomData:for(const e of Object.values(o)){if(!e)continue;const{status:o,index:r}=e;if(t({status:o,key:a,cdIndex:r})){const t=me._fromRaw(e);i.push(t)}}break;case exports.KameleoonData.Conversion:for(const e of Object.values(o))if(e&&t({status:e.status,key:a})){const t=fe._fromRaw(e);i.push(t)}break;case exports.KameleoonData.PageView:{const e=o;for(const o of Object.values(e))if(t({status:o.status,key:a})){const e=ve._fromRaw(o);i.push(e)}break}case exports.KameleoonData.TargetedSegment:{const e=o;for(const o of Object.values(e))if(t({status:o.status,key:a})){const e=ft._fromRaw(o);i.push(e)}break}case exports.KameleoonData.GeolocationData:{const e=o;if(!o)continue;if(t({status:e.status,key:a})){const t=De._fromRaw(e);i.push(t)}break}case exports.KameleoonData.Browser:{const e=o;if(t({status:e.status,key:a})){const t=Ce._fromRaw(e);i.push(t)}break}case exports.KameleoonData.Device:{const e=o;if(t({status:e.status,key:a})){const t=ye._fromRaw(e);i.push(t)}break}case exports.KameleoonData.OperatingSystem:{const e=o;if(t({status:e.status,key:a})){const t=xe._fromRaw(e);i.push(t)}}}return i}storeTrackedData(e){this.storeDataForVisitors(e,!1);const t=this.infoStorage.read();if(!t.ok)return;const i=t.data.unsentData;for(const[t,a]of Object.entries(e)){if(!i[t])return;const e=new Set(i[t]);a.forEach(({data:t})=>{e.has(t.type)&&e.delete(t.type)});const o=a.some(({data:e})=>{if(e.type!==exports.KameleoonData.CustomData)return!1;const{index:t}=e;return this.persistentCustomDataIndexes.has(t)||this.mappingIdentifierCustomDataIndex===t});o&&e.add(exports.KameleoonData.CustomData),i[t]=Array.from(e),i[t].length||delete i[t]}this.infoStorage.write(t.data)}storeData({visitorCode:e,data:t,track:i}){A.debug`CALL: DataManager.storeDataForVisitor(vc: ${e}, track: ${i}, data: ${t})`;const a=this.storeDataInternal((a,o)=>{this.mutUpdateTargetingData({infoData:a,targetingData:o,visitorCode:e,kameleoonData:t,extendTtl:!0,track:i})});return A.debug`RETURN: DataManager.storeDataForVisitor(vc: ${e}, track: ${i}, data: ${t}) -> ${a}`,a}storeDataForVisitors(e,t){A.debug`CALL: DataManager.storeDataForVisitors(data: ${e}, extendTtl: ${t})`;const i=this.storeDataInternal((i,a)=>{for(const[o,r]of Object.entries(e))this.mutUpdateTargetingData({infoData:i,targetingData:a,visitorCode:o,kameleoonData:r,extendTtl:t})});return A.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,o=i.data;return e(o,a),this.cleanupData(),this.infoStorage.write(o),this.dataStorage.write(a)}getTree(e){if(this.targetingTrees.has(e.id))return this.targetingTrees.get(e.id);const t=new Ne(e);return this.targetingTrees.set(e.id,t),t}clearTrees(){this.targetingTrees.clear()}isPersistentCustomData(e){return!!this.persistentCustomDataIndexes.size&&!!ge.isCustomData(e)&&this.persistentCustomDataIndexes.has(e.data.index)}isUniqueIdentifier(e){var t;const i=this.getVisitorData(e),a=null==i?void 0:i[exports.KameleoonData.UniqueIdentifier];return null!==(t=null==a?void 0:a.value)&&void 0!==t&&t}getVisitorIdentifier(e){var t,i,a;const o=this.infoStorage.read();if(!o.ok)return e;const r=o.data;return null!==(t=r.mappingIdentifiers)&&void 0!==t||(r.mappingIdentifiers={}),null!==(a=null===(i=r.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 o=a.data;null!==(i=o.mappingIdentifiers)&&void 0!==i||(o.mappingIdentifiers={});const r=o.mappingIdentifiers[e];(!r||r.timestamp<t.timestamp)&&(o.mappingIdentifiers[e]=t,this.infoStorage.write(o))}getVisitorData(e){this.cleanupData();const t=this.dataStorage.read();if(!t.ok)return;let{visitorReference:i,data:a,isReference:o}=this.dataProcessor.dereferenceData(t.data,e);if(this.packageInfo.isServer&&o&&!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(e){var t,i,a;const o=this.dataStorage.read();if(!o.ok)return null;const r=o.data[e];if("string"==typeof r)return r;if(null==r||null==this.mappingIdentifierCustomDataIndex)return null;const n=null===(a=null===(i=null===(t=r[exports.KameleoonData.CustomData])||void 0===t?void 0:t[this.mappingIdentifierCustomDataIndex])||void 0===i?void 0:i.value)||void 0===a?void 0:a[0];return null!=n?n:null}mutUpdateTargetingData({infoData:e,visitorCode:t,kameleoonData:i,targetingData:a,extendTtl:o,track:r}){var n,s,u;for(const l of i){if(!1===r&&(l.status=exports.TrackingStatus.Sent),l.data.type===exports.KameleoonData.CustomData&&!this.processCustomData({infoData:e,customData:l,mutData:a,visitorCode:t}))continue;if(l.data.type===exports.KameleoonData.Conversion){const e=l;(null!==(s=null===(n=e._metadata)||void 0===n?void 0:n.length)&&void 0!==s?s:0)>0&&(e._metadata=null===(u=e._metadata)||void 0===u?void 0:u.filter(e=>this.trySetCustomDataIndexByName(e)))}const i=this.dataProcessor.mutUpdateData({infoData:e,visitorCode:t,mutData:a,dataItem:l,extendTtl:o}),d=e.nextDataCleanup;(!d||d&&i&&i<d)&&(e.nextDataCleanup=i),l.data.status===exports.TrackingStatus.Unsent&&this.dataProcessor.mutAddUnsentData({mutData:e,visitorCode:t,dataType:l.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,o=a.nextDataCleanup;if(o&&o<Date.now()){const e=this.dataProcessor.mutCleanupData(i,a);a.nextDataCleanup=e||void 0,this.infoStorage.write(a),this.dataStorage.write(i)}}processCustomData({infoData:e,mutData:t,customData:i,visitorCode:a}){var o;const{data:r}=i,n=Boolean(r.value.length&&r.value[0].length);if(!this.trySetCustomDataIndexByName(i))return!1;if(r.index==me.UNDEFINED_INDEX&&(r.index=i.index),this.mappingIdentifierCustomDataIndex===r.index&&n){i._isMappingIdentifier=!0;const n=r.value[0];a!==n&&(A.info`Linked anonymous visitor ${a} with user ${n}`,this.dataProcessor.createReference({infoData:e,mutData:t,visitorCode:a,linkedVisitor:r.value[0]}),null!==(o=e.mappingIdentifiers)&&void 0!==o||(e.mappingIdentifiers={}),e.mappingIdentifiers[n]={mappingIdentifier:a,timestamp:Date.now()})}return this.localCustomDataIndexes.has(r.index)&&(i.status=exports.TrackingStatus.Sent),!0}trySetCustomDataIndexByName(e){if(e.index!==me.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 e=this.dataStorage.read();if(!e.ok)return new Set;const t=e.data;if(!(exports.KameleoonData.CustomData in t))return new Set;const i=new Set;for(const e in Object.keys(t[exports.KameleoonData.CustomData]))i.add(Number(e));return i}set customDataIndexes(e){var t;const[i,a]=[[],[]],o=new Map;e.forEach(e=>{e.localOnly&&i.push(e.index),e.scope===exports.CustomDataScope.Visitor&&a.push(e.index),e.name&&o.set(e.name,e.index)}),this.mappingIdentifierCustomDataIndex=(null===(t=e.find(e=>e.isMappingIdentifier))||void 0===t?void 0:t.index)||null,this.localCustomDataIndexes=new Set(i),this.persistentCustomDataIndexes=new Set(a),this.customDataIndexByName=o}getCustomDataIndexByName(e){return this.customDataIndexByName.get(e)}}const yt=31536e3;let xt=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(e){return 0===e.length?s.Err(new c(exports.KameleoonException.VisitorCodeEmpty)):e.length>255?s.Err(new c(exports.KameleoonException.VisitorCodeMaxLength)):s.Ok()}getVisitorCode(e){if(A.debug`CALL: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${e})`,!this.getDataCallback||!this.setDataCallback)throw new Error("Missing getDataCallback or setDataCallback methods in getVisitorCode!");let t;const i=this.getDataCallback(exports.KameleoonStorageKey.VisitorCode);return i&&(t=i),t||(e?(this.validateVisitorCode(e).throw(),t=e,A.debug`Used default visitor code: ${t}`):(t=this.generateVisitorCode(),A.debug`Generated new visitor code: ${t}`)),this.processSimulatedVariations(t),this.isConsentRequired||this.setDataCallback({visitorCode:t,key:exports.KameleoonStorageKey.VisitorCode,maxAge:yt,path:"/"}),A.debug`RETURN: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${e}) -> (visitorCode: ${t})`,t}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&&A.error`Failed to process simulated variations: ${e.message}`}}}getSimulatedVariations(e){A.debug`CALL: VisitorCodeManager.getSimulatedVariations(visitorCode: ${e})`;const t=this.getDataCallback(exports.KameleoonStorageKey.KameleoonSimulationFFData);let i=null;if("string"==typeof t&&t.length>0)try{const e=JSON.parse(decodeURIComponent(t));e&&"object"==typeof e&&(i=Object.entries(e).map(([e,t])=>this.variationConfiguration.simulatedVariationFromJson(e,t)).filter(e=>null!==e))}catch(e){e instanceof Error&&A.error`Failed to parse simulated variations: ${e.message}`}return A.debug`RETURN: VisitorCodeManager.getSimulatedVariations(visitorCode: ${e}) -> (variations: ${i})`,i}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 Dt,Et,Tt,It={exports:{}},kt={exports:{}},St=function(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}(Object.freeze({__proto__:null,default:{}})),Vt=(Et||(Et=1,It.exports=(Tt=function(){return Dt||(Dt=1,kt.exports=(e=e||function(e){var t;if("undefined"!=typeof window&&window.crypto&&(t=window.crypto),"undefined"!=typeof self&&self.crypto&&(t=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(t=globalThis.crypto),!t&&"undefined"!=typeof window&&window.msCrypto&&(t=window.msCrypto),!t&&void 0!==o&&o.crypto&&(t=o.crypto),!t)try{t=St}catch(e){}var i=function(){if(t){if("function"==typeof t.getRandomValues)try{return t.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof t.randomBytes)try{return t.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},a=Object.create||function(){function e(){}return function(t){var i;return e.prototype=t,i=new e,e.prototype=null,i}}(),r={},n=r.lib={},s=n.Base={extend:function(e){var t=a(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=n.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,o=e.sigBytes;if(this.clamp(),a%4)for(var r=0;r<o;r++){var n=i[r>>>2]>>>24-r%4*8&255;t[a+r>>>2]|=n<<24-(a+r)%4*8}else for(var s=0;s<o;s+=4)t[a+s>>>2]=i[s>>>2];return this.sigBytes+=o,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=[],a=0;a<e;a+=4)t.push(i());return new u.init(t,e)}}),l=r.enc={},d=l.Hex={stringify:function(e){for(var t=e.words,i=e.sigBytes,a=[],o=0;o<i;o++){var r=t[o>>>2]>>>24-o%4*8&255;a.push((r>>>4).toString(16)),a.push((15&r).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=[],o=0;o<i;o++){var r=t[o>>>2]>>>24-o%4*8&255;a.push(String.fromCharCode(r))}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)}},p=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)))}},g=n.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new u.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=p.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var i,a=this._data,o=a.words,r=a.sigBytes,n=this.blockSize,s=r/(4*n),l=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*n,d=e.min(4*l,r);if(l){for(var c=0;c<l;c+=n)this._doProcessBlock(o,c);i=o.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});n.Hasher=g.extend({cfg:s.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){g.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 h.HMAC.init(e,i).finalize(t)}}});var h=r.algo={};return r}(Math),e)),kt.exports;var e}(),function(e){var t=Tt,i=t.lib,a=i.WordArray,o=i.Hasher,r=t.algo,n=[],s=[];!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,o=0;o<64;)t(a)&&(o<8&&(n[o]=i(e.pow(a,.5))),s[o]=i(e.pow(a,1/3)),o++),a++}();var u=[],l=r.SHA256=o.extend({_doReset:function(){this._hash=new a.init(n.slice(0))},_doProcessBlock:function(e,t){for(var i=this._hash.words,a=i[0],o=i[1],r=i[2],n=i[3],l=i[4],d=i[5],c=i[6],p=i[7],g=0;g<64;g++){if(g<16)u[g]=0|e[t+g];else{var h=u[g-15],v=(h<<25|h>>>7)^(h<<14|h>>>18)^h>>>3,m=u[g-2],f=(m<<15|m>>>17)^(m<<13|m>>>19)^m>>>10;u[g]=v+u[g-7]+f+u[g-16]}var C=a&o^a&r^o&r,y=(a<<30|a>>>2)^(a<<19|a>>>13)^(a<<10|a>>>22),x=p+((l<<26|l>>>6)^(l<<21|l>>>11)^(l<<7|l>>>25))+(l&d^~l&c)+s[g]+u[g];p=c,c=d,d=l,l=n+x|0,n=r,r=o,o=a,a=x+(y+C)|0}i[0]=i[0]+a|0,i[1]=i[1]+o|0,i[2]=i[2]+r|0,i[3]=i[3]+n|0,i[4]=i[4]+l|0,i[5]=i[5]+d|0,i[6]=i[6]+c|0,i[7]=i[7]+p|0},_doFinalize:function(){var t=this._data,i=t.words,a=8*this._nDataBytes,o=8*t.sigBytes;return i[o>>>5]|=128<<24-o%32,i[14+(o+64>>>9<<4)]=e.floor(a/4294967296),i[15+(o+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(l),t.HmacSHA256=o._createHmacHelper(l)}(Math),Tt.SHA256)),It.exports),wt=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}(Vt);class Rt{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=wt(e).toString();return parseInt(t,16)/Math.pow(2,256)}}class bt{constructor(e,t,i,a,o){this.storage=e,this.storageForcedExperimentVariations=t,this.storageForcedFeatureVariations=i,this.visitorCodeManager=a,this.clientConfiguration=o,a.setVariationConfiguration(this)}updateDataStatus({visitorCode:e,experimentIdList:t,status:i}){const a=this.storage.read();if(!a.ok)return a;let o=a.data;o[e]||(o[e]={});for(const a of t)o[e][a]=Object.assign(Object.assign({},o[e][a]),{status:i});return this.storage.write(o)}getUnsentData(e){return this.getVariationData(e,e=>e===exports.TrackingStatus.Unsent)}getVisitorsWithUnsentData(){A.debug`CALL: VariationConfiguration.unsentDataVisitors()`;const e=this.storage.read();if(!e.ok)return A.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (result: ${e})`,[];const t=[];for(const[i,a]of Object.entries(e.data))Object.values(a).some(e=>e.status===exports.TrackingStatus.Unsent)&&t.push(i);return A.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (visitors: ${t})`,t}getPendingData(e){return this.getVariationData(e,e=>e===exports.TrackingStatus.Pending)}getStoredVariations(e){const t=this.storage.read();if(!t.ok)return t;const i=t.data[e];return i?s.Ok(i):s.Err(new c(exports.KameleoonException.StorageRead,e))}getVariation({visitorCode:e,visitorIdentifier:t,featureFlag:i,targetingData:a,packageInfo:o,clientConfiguration:r,dataManager:n,legalConsent:u,track:l=!0,withAssignment:d=!1}){A.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d})`;const{rules:p,featureKey:g,id:h,defaultVariationKey:v}=i,m=r.isConsentRequired?u:mt.Given;for(const u of p){const{segment:p,experimentId:f,id:C,exposition:y,respoolTime:x,variationByExposition:D}=u,E=this.getForcedExperimentVariation(e,u.experimentId);let T=null;if(E.ok&&(T=E.data,null==T?void 0:T.forceTargeting)){A.info`Visitor ${e} has been forced targeted for ${u}`;const r=this.createAndSaveForcedTargetedVariation(e,i,u,T,l,d);return A.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${r})`,s.Ok(r)}const I=ge.checkTargeting({segment:p,visitorCode:e,experimentId:f,targetingData:a,packageInfo:o,clientConfiguration:r,dataManager:n,variationConfiguration:this});if(!I.ok)return A.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${I})`,I;if(!I.data)continue;if(A.info`Visitor ${e} has been targeted for ${u}`,T){const r=this.createAndSaveForcedTargetedVariation(e,i,u,T,l,d);return A.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${r})`,s.Ok(r)}const k=Rt.getHashDouble({visitorIdentifier:t,respoolTime:x,id:String(C)});if(A.debug`Calculated ruleHash: ${k} for code: ${t}`,k<=y){if(m==mt.NotGiven&&u.type==F.EXPERIMENTATION){if(r.consentBlockingBehaviour==L.PartiallyBlocked)break;return s.Err(new c(exports.KameleoonException.FeatureFlagEnvironmentDisabled,`Evaluation of ${u} is blocked because consent is not provided for visitor '${e}'`))}let n=this.evaluateCBScores(u,t,a);if(!n){const e=Rt.getHashDouble({visitorIdentifier:t,respoolTime:x,id:String(f)});A.debug`Calculated variationHash: ${e} for code: ${t}`,n=ge.getVariationByHash(D,e)}if(n){d&&this.updateStoredVariations(e,{[f]:{variationId:n.variationId,isTargetedRule:u.type===F.TARGETED_DELIVERY,status:l?exports.TrackingStatus.Unsent:exports.TrackingStatus.Sent}});const r={variationId:n.variationId,variationKey:n.variationKey,rule:u,featureFlagId:h,featureKey:g,experimentId:f,isTargetedRule:u.type===F.TARGETED_DELIVERY};return A.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${r})`,s.Ok(r)}}if(u.type===F.TARGETED_DELIVERY){const r={featureKey:g,featureFlagId:h,experimentId:null,variationKey:v,variationId:null,rule:null,isTargetedRule:!0};return A.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${r})`,s.Ok(r)}}const f={featureKey:g,featureFlagId:h,experimentId:null,variationKey:v,variationId:null,rule:null,isTargetedRule:!1};return A.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${f})`,s.Ok(f)}createAndSaveForcedTargetedVariation(e,t,i,a,o,r){const n={variationKey:a.varByExp.variationKey,variationId:a.varByExp.variationId,rule:i,featureFlagId:t.id,featureKey:t.featureKey,experimentId:i.experimentId,isTargetedRule:i.type===F.TARGETED_DELIVERY};return r&&this.updateStoredVariations(e,{[i.experimentId]:{variationId:n.variationId,isTargetedRule:i.type===F.TARGETED_DELIVERY,status:o?exports.TrackingStatus.Unsent:exports.TrackingStatus.Sent}}),n}updateStoredVariations(e,t){A.debug`CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${e}, variationData: ${t})`;const i=this.storage.read();if(!i.ok)return A.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 o=this.storage.write(a);return A.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${e}, variationData: ${t}) -> (resultWrite: ${o})`,o}getVariationData(e,t){const i=this.getStoredVariations(e);if(!i.ok)return[];const a=[];for(const[e,o]of Object.entries(i.data))t(o.status)&&a.push({experimentId:Number(e),variationId:o.variationId,isTargetedRule:o.isTargetedRule});return a}updateForcedExperimentVariation(e,t,i){A.debug`CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return A.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i}) -> (result: ${a})`,a;let o=a.data;o[e]||(o[e]={}),i?o[e][t]=i:delete o[e][t];const r=this.storageForcedExperimentVariations.write(o);return A.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i}) -> (resultWrite: ${r})`,r}updateForcedFeatureVariations(e,t){A.debug`CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return A.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t}) -> (result: ${i})`,i;let a=i.data;a[0]||(a[0]={}),a[1]||(a[1]={});const o=a[0],r=a[1];o[e]||(o[e]={}),r[e]||(r[e]={}),t.forEach(t=>{(t.simulated?r[e]:o[e])[t.featureKey]=t});const n=this.storageForcedFeatureVariations.write(a);return A.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t}) -> (resultWrite: ${n})`,n}clearSimulatedVariations(e){var t;A.debug`CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return A.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e}) -> (result: ${i})`,i;let a;const o=i.data;return(null===(t=null==o?void 0:o[1])||void 0===t?void 0:t[e])?(delete o[1][e],a=this.storageForcedFeatureVariations.write(o)):a=s.Ok(),A.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e}) -> (resultWrite: ${a})`,a}getForcedFeatureVariation(e,t){var i,a,o,r;A.debug`CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t})`;const n=this.storageForcedFeatureVariations.read();if(!n.ok)return A.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (simulatedResult: ${n})`,n;const u=null===(a=null===(i=n.data[1])||void 0===i?void 0:i[e])||void 0===a?void 0:a[t];if(u)return A.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (simulatedData: ${u})`,s.Ok(u);const l=null===(r=null===(o=n.data[0])||void 0===o?void 0:o[e])||void 0===r?void 0:r[t];return A.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (forcedData: ${l})`,s.Ok(l)}getForcedExperimentVariation(e,t){var i;A.debug`CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return A.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}) -> (forcedResult: ${a})`,a;const o=null===(i=a.data[e])||void 0===i?void 0:i[t];return A.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}) -> (forcedExperiment: ${o})`,s.Ok(o)}parseForcedVariationData(e,t){const i=this.clientConfiguration.featureFlags.get(e.featureKey);if(!i)return A.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 o of i.rules){if(e.experimentId!==o.experimentId)continue;const i=o.variationByExposition.find(t=>t.variationId===e.variationId);if(i)return a={featureKey:e.featureKey,rule:{type:o.type,experimentId:o.experimentId},varByExp:{variationKey:i.variationKey,variationId:i.variationId},simulated:t},a}return A.error`Simulated variation ${e.variationId} not found`,null}simulatedVariationFromJson(e,t){if(A.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 A.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;A.debug`CALL: KameleoonClientImpl.evaluateCBScores(rule: ${e}, targetingData: ${i}, visitorIdentifier: ${t})`;const a=e.experimentId,o=new ke(i.cbScores.cbs).getValues().get(a);let r=null;if(void 0!==o){const i=e.variationByExposition,n=o.map(e=>i.filter(t=>e.ids.includes(t.variationId))).find(e=>e.length>0);if(n){let i=0;if(n.length>1){const o=Rt.getHashDouble({visitorIdentifier:t,respoolTime:e.respoolTime,id:String(a)});A.debug`Calculated cbs hash ${o} for code ${t}`,i=Math.min(Math.floor(o*n.length),n.length-1)}r=n[i]}}return A.debug`RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${e}, targetingData: ${i}, visitorIdentifier: ${t}) -> (variation: ${r})`,r}}let At=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,A.info`Established a new SSE connection with: ${this.url}`}close(){this.eventSource.close(),this.isConnectionOpen=!1,A.info`SSE connection: '${this.url}' was successfully closed`}onError(e){this.eventSource.onError?this.eventSource.onError(e):A.warning("EventSource does not have `onError` method provided. Real-time errors won't be handled.")}handleMessage(e){return t=>{A.debug`Received new message from: ${this.url}`;const i=JSON.parse(t.data),{siteCode:a,ts:o}=i;this.siteCode===a&&e(o)}}};var Kt;!function(e){e[e.Kb=1e3]="Kb",e[e.Mb=1e6]="Mb",e[e.Gb=1e9]="Gb"}(Kt||(Kt={}));const Ot=10*Kt.Mb;class Ft{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:o,isMappingIdentifier:r}){const n=[],s=this.getVariationDataLines(t),u=this.getVisitorDataLines(i);return n.push(...s,...u),this.addVisitorTrackingLines({visitorCode:e,lines:n,userAgent:a,isConsentProvided:o,isMappingIdentifier:r})}getVisitorDataLines(e){const t=[];for(const i of e){let e;if(!(i instanceof Fe||i.data.type!==exports.KameleoonData.Conversion&&i.data.type!==exports.KameleoonData.PageView)){const t=i.data.nonce;t?e=t:(e=ge.getNonce(this.prng),i.data.nonce=e)}e||(e=ge.getNonce(this.prng)),t.push(i.url+x+e)}return t}getVariationDataLines(e){const t=[];return e.forEach(e=>{t.push("eventType=experiment"+D+e.experimentId+"&variationId="+e.variationId+x+ge.getNonce(this.prng))}),t}prepareVisitorBody(e){const t=this.trackingVisitors[e];if(!t)return s.Err();const{lines:i,userAgent:a,isMappingIdentifier:o,isConsentProvided:r}=t,n=this.getIdentifier(e,o);if(i.length)i.forEach((e,t)=>{i[t]=e+n}),A.debug`Sending tracking request for unsent data ${i} of visitor ${e} with given (or not required) consent ${r}`;else if(r){const t=this.getActivityLine();i.push(t+n),A.debug`Sending tracking request for activity of visitor ${e} with given consent`}else A.debug`No data to send for visitor ${e} with no consent`;a&&i.length&&(i[0]+="&userAgent="+a,this.hasUserAgent=!0);const u=this.checkSize(i);return u.ok&&this.resultBody.push(...i),u}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>Ot?s.Err():(this.currentSize+=t,s.Ok())}addVisitorTrackingLines({visitorCode:e,lines:t,userAgent:i,isConsentProvided:a,isMappingIdentifier:o}){return this.trackingVisitors[e]?(i&&(this.trackingVisitors[e].userAgent=i),this.trackingVisitors[e].lines.push(...t)):this.trackingVisitors[e]={isMappingIdentifier:o,isConsentProvided:a,userAgent:i,lines:t},this.prepareVisitorBody(e)}getActivityLine(){return"eventType=activity"+x+ge.getNonce(this.prng)}getIdentifier(e,t){return(t?S:C)+encodeURIComponent(e)}}class $t{constructor({dataManager:e,trackingStorage:t,variationConfiguration:i,trackingInterval:a,requester:o,prng:r,clientConfiguration:n}){this.intervalId=null,A.debug`CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng, clientConfiguration)`,this.dataManager=e,this.trackingStorage=t,this.variationConfiguration=i,this.requester=o,this.bodyProvider=new Ft(r),this.clientConfiguration=n;try{this.intervalId=setInterval(()=>{this.sendDataAll()},a)}catch(e){throw this.intervalId&&clearInterval(this.intervalId),e}A.debug`RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng, clientConfiguration)`}scheduleVisitor(e,t){A.debug`CALL: Tracker.scheduleVisitor(visitorCode: ${e}, isConsentProvided: ${t})`,this.trackingStorage.read().and(i=>{i.scheduledVisitors[`_${e}`]={isConsentProvided:t},this.trackingStorage.write(i)}),A.debug`RETURN: Tracker.scheduleVisitor(visitorCode: ${e}, isConsentProvided: ${t})`}checkIsIdentifier(e){var t,i;const a=this.dataManager.isUniqueIdentifier(e),o=null!==(i=null===(t=this.dataManager.getMappingIdentifier(e))||void 0===t?void 0:t.mappingIdentifier)&&void 0!==i?i:e;let r=!1;if(a){const t=this.dataManager.getLinkedVisitor(e),i=this.dataManager.identifierCustomDataIndex;t||"number"!=typeof i?r=!0:this.dataManager.storeData({visitorCode:e,data:[new me(i,e)]})}return r&&e!=o}getUserAgent(e){const t=this.dataManager.getVisitorData(e);if(t){const e=t[exports.KameleoonData.UserAgent];if(e)return e.value}}sendDataAll(){return u(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 u(this,0,void 0,function*(){this.trackingStorage.read().ok&&(yield this.sendData({[`_${e}`]:{isConsentProvided:t}}))})}sendData(e){return u(this,0,void 0,function*(){const t={},i=[],a=[];for(const[o,{isConsentProvided:r}]of Object.entries(e)){let e=o.startsWith("_")?o.substring(1):o;const n=this.checkIsIdentifier(e),s=this.getUserAgent(e),u=this.getUnsentVisitorData(e,r),l=this.getUnsentVariationData(e,r);if(!this.bodyProvider.addData({visitorCode:e,variationData:l,visitorData:u,userAgent:s,isConsentProvided:r,isMappingIdentifier:n}).ok){A.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}t[e]={visitorData:u,variationData:l},a.push({visitorCode:e,isConsentProvided:r}),i.push(o)}const{body:o,hasUserAgent:r}=this.bodyProvider.getTrackingBody();if(0!==i.length&&this.trackingStorage.read().and(e=>{i.forEach(t=>{delete e.scheduledVisitors[t]}),this.trackingStorage.write(e)}),o)if((yield this.requester.track(o,r)).ok)A.info`Successful request for tracking visitors: ${a}, data: ${t}`,this.updateDataStatus(t,exports.TrackingStatus.Sent);else{A.error("Tracking request failed"),A.info`Failed request for tracking visitors: ${a}, data: ${t}`,this.updateDataStatus(t,exports.TrackingStatus.Unsent);let e={};for(let{visitorCode:t,isConsentProvided:i}of a)t=`_${t}`,e[t]={isConsentProvided:i};this.addNotTrackedVisitors(e)}})}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(e,t){let i={};for(const[a,{visitorData:o,variationData:r}]of Object.entries(e)){const e=o.filter(e=>!(e instanceof Fe)).map(e=>{const i=e;return i.status=t,i});e.length&&(i[a]=e);const n=r.map(e=>String(e.experimentId));this.variationConfiguration.updateDataStatus({visitorCode:a,experimentIdList:n,status:t})}0!==Object.keys(i).length&&(t===exports.TrackingStatus.Sent?this.dataManager.storeTrackedData(i):this.dataManager.storeDataForVisitors(i,!1))}getUnsentVisitorData(e,t){const i=this.dataManager.getUnsentData(e),a=[];if(!i.length)return[];for(const e of i)e.url&&(t||this.clientConfiguration.hasAnyTargetedDeliveryRule&&!(e instanceof Fe)&&e.data.type===exports.KameleoonData.Conversion)&&a.push(e);if(a.length){const t=a.filter(e=>!(e instanceof Fe)).map(e=>{const t=e;return t.status=exports.TrackingStatus.Pending,t});this.dataManager.storeTrackedData({[e]:t})}return a}getUnsentVariationData(e,t){const i=this.variationConfiguration.getUnsentData(e),a=new Set;if(!i.length)return[];const o=i.filter(e=>{const i=e.isTargetedRule||t;return i&&a.add(String(e.experimentId)),i});return this.variationConfiguration.updateDataStatus({visitorCode:e,experimentIdList:Array.from(a),status:exports.TrackingStatus.Pending}),o}}let Mt=class e{constructor({siteCode:e,dependencies:t,configuration:i,internalConfiguration:a,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 n=null==a?void 0:a.externals.externalLogger;n&&A.setLogger(n),$e.setConditionFactoryInstance(new dt),A.debug`CALL: new KameleoonClient(siteCode: ${e}, dependencies: ${t}, configuration: ${i})`;const{settings:s}=new be(e,i);this.environment=s.environment;const{externalStorage:u,externalEventSource:l,externalPackageInfo:d,externalVisitorCodeManager:c,externalRequester:p,externalPRNG:g,customDataManager:h}=a.externals,{useAbortController:v}=a.settings,m=new U(10),f=new ht(u,exports.KameleoonStorageKey.ClientData),C=new ht(u,exports.KameleoonStorageKey.VariationData),y=new ht(u,exports.KameleoonStorageKey.ForcedExperimentVariation),x=new ht(u,exports.KameleoonStorageKey.ForcedFeatureVariation),D=new ht(u,exports.KameleoonStorageKey.ConsentData),E=new ht(u,exports.KameleoonStorageKey.TrackingData);let T=h;if(!T){const e=new ht(u,exports.KameleoonStorageKey.TargetingData),t=new ht(u,exports.KameleoonStorageKey.DataInfo);T=new Ct({dataStorage:e,infoStorage:t,cleanupInterval:s.cleanupInterval,packageInfo:d})}const I=null!==(r=null==t?void 0:t.urlProvider)&&void 0!==r?r:new _;I.initialize({domain:s.networkDomain,siteCode:s.siteCode,packageInfo:d,environment:s.environment});const k=new K({urlProvider:I,useAbortController:v,packageInfo:d,externalRequester:p,requestTimeout:s.requestTimeout,trackRetryDelay:s.trackRetryDelay}),S=new At({siteCode:s.siteCode,externalEventSource:l,urlProvider:I}),V=new P,w=new we({urlProvider:I,storage:f,updateInterval:s.updateInterval,dataManager:T,eventManager:V,requester:k,eventSource:S,externalVisitorCodeManager:c,externalPackageInfo:d,defaultDataFile:null==i?void 0:i.defaultDataFile}),R=new bt(C,y,x,c,w),b=new $t({dataManager:T,trackingStorage:E,variationConfiguration:R,requester:k,trackingInterval:s.trackingInterval,prng:g,clientConfiguration:w});this.tracker=b,this.variationConfiguration=R,this.requester=k,this.trackingCache=m,this.dataManager=T,this.clientConfiguration=w,this.externalPackageInfo=d,this.consentDataStorage=D,this.visitorCodeManager=c,this.eventManager=V,null!==s.cleanupInterval&&new vt(u,s.cleanupInterval),A.debug`RETURN: new KameleoonClient(siteCode: ${e}, dependencies: ${t}, configuration: ${i})`}initialize(){return u(this,0,void 0,function*(){if(this.stubMode)return!1;A.info("CALL: KameleoonClient.initialize()");const e=yield this.clientConfiguration.initialize();return e.throw(),this.initialized=!0,A.info`RETURN: KameleoonClient.initialize() -> (result: ${e.ok})`,e.ok})}addData(e,...t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);const i="string"==typeof e?{visitorCode:e,data:t}:e,{visitorCode:a,data:o,track:r=!0}=i;if(A.info`CALL: KameleoonClient.addData(visitorCode: ${a}, track: ${r}, data: ${o})`,this.visitorCodeManager.validateVisitorCode(a).throw(),!this.initialized)throw new c(exports.KameleoonException.Initialization);this.dataManager.storeData({visitorCode:a,track:r,data:o}).throw(),A.info`RETURN: KameleoonClient.addData(visitorCode: ${a}, track: ${r}, data: ${o})`}getRemoteVisitorData({visitorCode:e,shouldAddData:t=!0,filters:i=J}){return u(this,0,void 0,function*(){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(A.info`CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${e}, shouldAddData: ${t}, filters: ${i})`,!this.initialized)throw new c(exports.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(e).throw();const{previousVisitAmount:a}=i;if("number"==typeof a&&(a<1||a>25))throw new c(exports.KameleoonException.VisitAmount);const o=this.dataManager.isUniqueIdentifier(e),r=(yield this.requester.getVisitorData({visitorCode:e,filters:i,isMappingIdentifier:o})).throw(),{visitorData:n,storageVisitorData:s,visitsData:u,mappingIdentifier:l}=Ve.parseVisitorData({data:r,filters:i,visitorCode:e,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});for(const i of s)(t||this.dataManager.isPersistentCustomData(i))&&this.addData(e,i);return u&&t&&this.addData(e,u),(null==i?void 0:i.visitorCode)&&l&&this.dataManager.setMappingIdentifier(e,l),A.info`RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${e}, shouldAddData: ${t}, filters: ${i}) -> (visitorData: ${n})`,n})}trackConversion({visitorCode:e,goalId:t,negative:i,revenue:a,metadata:o}){this.stubMode||(A.info`CALL: KameleoonClient.trackConversion(visitorCode: ${e}, goalId: ${t}, negative: ${i}, revenue: ${a}, metadata: ${o})`,this.addData(e,new fe({goalId:t,revenue:a,negative:i,metadata:o})),this.flush(e),A.info`RETURN: KameleoonClient.trackConversion(visitorCode: ${e}, goalId: ${t}, negative: ${i}, revenue: ${a}, metadata: ${o})`)}_flushInternal(e,t=!1){return u(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(e){return u(this,0,void 0,function*(){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);const{visitorCode:t}=this._parseFlushParams(e);if(A.info`CALL: KameleoonClient.flushInstant(visitorCode: ${e})`,!this.initialized)throw new c(exports.KameleoonException.Initialization);yield this._flushInternal(t,!0),A.info`RETURN: KameleoonClient.flushInstant(visitorCode: ${e})`})}flush(e){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);const{visitorCode:t,isInstant:i}=this._parseFlushParams(e);if(A.info`CALL: KameleoonClient.flush(visitorCode: ${t}, instant: ${i})`,!this.initialized)throw new c(exports.KameleoonException.Initialization);this._flushInternal(t,i),A.info`RETURN: KameleoonClient.flush(visitorCode: ${t}, instant: ${i})`}_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 c(exports.KameleoonException.Initialization);if(A.info("CALL: KameleoonClient.getFeatureFlags()"),!this.initialized)throw new c(exports.KameleoonException.Initialization);const e=this.clientConfiguration.featureFlags,t=[];return e.forEach(({id:e,featureKey:i})=>{t.push({id:e,key:i})}),A.info`RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${t})`,t}getVisitorFeatureFlags(e){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(A.info`CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${e})`,!this.initialized)throw new c(exports.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(e).throw();const t=this._getActiveFeatureVariations(e),i=[];return t.forEach(({featureFlagId:e,featureKey:t})=>{i.push({id:e,key:t})}),A.info`RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${e}) -> (FeatureFlags: ${i})`,i}getVariation({visitorCode:e,featureKey:t,track:i=!0}){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);A.info`CALL: KameleoonClient.getVariation(visitorCode: ${e}, featureKey: ${t}, track: ${i})`,this.visitorCodeManager.validateVisitorCode(e).throw();const a=this._getFeatureVariation({visitorCode:e,featureKey:t,track:i}).throw();return A.info`RETURN: KameleoonClient.getVariation(visitorCode: ${e}, featureKey: ${t}, track: ${i}) -> (variation: ${a})`,a}getVariations({visitorCode:e,onlyActive:t=!1,track:i=!0}){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);A.info`CALL: KameleoonClient.getVariations(visitorCode: ${e}, onlyActive: ${t}, track: ${i})`,this.visitorCodeManager.validateVisitorCode(e).throw();const a=new Map,o=this.clientConfiguration.featureFlags;for(const r of o.values())try{const o=this._getFeatureVariation({visitorCode:e,featureKey:r.featureKey,track:i});!o.ok||t&&o.data.key===Y||a.set(r.featureKey,o.data)}catch(e){if(e instanceof c&&e.type!==exports.KameleoonException.FeatureFlagEnvironmentDisabled)throw e}return A.info`RETURN: KameleoonClient.getVariations(visitorCode: ${e}, onlyActive: ${t}, track: ${i}) -> (variations: ${a})`,a}getActiveFeatureFlags(e){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(A.info`CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${e})`,!this.initialized)throw new c(exports.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(e).throw();const t=this._getActiveFeatureVariations(e),i=new Map;return t.forEach(t=>{const{variationKey:a,featureKey:o,variationId:r,experimentId:n}=t;let s=[];null!==r&&null!==n&&(s=this._getFeatureVariables({visitorCode:e,featureKey:o,variationKey:a}));const u=s.map(e=>Ve.parseFeatureVariable(e).throw());i.set(t.featureKey,{name:"",key:a,id:r,experimentId:n,variables:u})}),A.info`RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${e}) -> (FeatureFlags: ${i})`,i}getFeatureFlagVariationKey(e,t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);A.info`CALL: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${e}, featureKey: ${t})`,this.visitorCodeManager.validateVisitorCode(e).throw();const{key:i}=this._getFeatureVariation({visitorCode:e,featureKey:t,track:!0}).throw();return A.info`RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${e}, featureKey: ${t}) -> (variationKey: ${i})`,i}getFeatureFlagVariable({visitorCode:e,featureKey:t,variableKey:i}){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);A.info`CALL: KameleoonClient.getFeatureFlagVariable(visitorCode: ${e}, featureKey: ${t}, variableKey: ${i})`,this.visitorCodeManager.validateVisitorCode(e).throw();const{key:a}=this._getFeatureVariation({visitorCode:e,featureKey:t,track:!0}).throw(),o=this._getFeatureVariables({visitorCode:e,featureKey:t,variationKey:a}).find(e=>e.key===i);if(!o)throw new c(exports.KameleoonException.FeatureFlagVariableNotFound,i,e);const{type:r,value:n}=Ve.parseFeatureVariable(o).throw(),s={type:r,value:n};return A.info`RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${e}, featureKey: ${t}, variableKey: ${i}) -> (FeatureFlagVariable: ${s})`,s}getFeatureFlagVariables(e,t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);A.info`CALL: KameleoonClient.getFeatureFlagVariables(visitorCode: ${e}, featureKey: ${t})`,this.visitorCodeManager.validateVisitorCode(e).throw();const{key:i}=this._getFeatureVariation({visitorCode:e,featureKey:t,track:!0}).throw(),a=this._getFeatureVariables({visitorCode:e,featureKey:t,variationKey:i}),o=[];for(const e of a){const t=Ve.parseFeatureVariable(e).throw();o.push(t)}return A.info`RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${e}, featureKey: ${t}) -> (FeatureFlagVariables: ${o})`,o}isFeatureFlagActive(e,t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);let[i,a,o]=["","",!0];"string"==typeof e?(i=e,a=t):([i,a]=[e.visitorCode,e.featureKey],void 0!==e.track&&(o=e.track)),A.info`CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track ${o})`,this.visitorCodeManager.validateVisitorCode(i).throw();try{const{key:e}=this._getFeatureVariation({visitorCode:i,featureKey:a,track:o}).throw(),t=e!==Y;return A.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track: ${o}) -> (isActive: ${t})`,t}catch(e){if(e instanceof c&&e.type===exports.KameleoonException.FeatureFlagEnvironmentDisabled)return A.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track: ${o}) -> (isActive: false)`,!1;throw e}}getRemoteData(e){return u(this,0,void 0,function*(){if(this.stubMode)return null;A.info`CALL: KameleoonClient.getRemoteData(key: ${e})`;const t=yield this.requester.getRemoteData(e);return A.info`RETURN: KameleoonClient.getRemoteData(key: ${e}) -> (remoteData: ${t})`,t.throw()})}getVisitorWarehouseAudience({visitorCode:e,customDataIndex:t,warehouseKey:i}){return u(this,0,void 0,function*(){if(this.stubMode)return null;A.info`CALL: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${e}, customDataIndex: ${t}, warehouseKey: ${i})`,this.visitorCodeManager.validateVisitorCode(e).throw();const a=yield this.getRemoteData(i||e);if(!a)throw new c(exports.KameleoonException.RemoteData,`No data found for ${i||e} key`);if(!a[X]||0===Object.keys(a[X]).length)return A.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${e}, customDataIndex: ${t}, warehouseKey: ${i}) -> (customData: null)`,null;const o=new me(t,...Object.keys(a[X]));return this.dataManager.storeData({visitorCode:e,track:!0,data:[o]}),A.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${e}, customDataIndex: ${t}, warehouseKey: ${i}) -> (customData: ${o})`,o})}onEvent(e,t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(A.info`CALL: KameleoonClient.onEvent(event: ${e}, callback)`,!this.initialized)throw new c(exports.KameleoonException.Initialization);this.eventManager.addEventHandler(e,t),A.info`RETURN: KameleoonClient.onEvent(event: ${e}, callback)`}getEngineTrackingCode(e){if(this.stubMode)return"";A.info`CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${e})`,this.visitorCodeManager.validateVisitorCode(e).throw();const t=ge.getTrackingCode(this.trackingCache,e);return A.info`RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${e}) -> (trackingCode: ${t})`,t}isInitialized(){return A.debug`CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`,this.initialized}setLogLevel(e){A.setLogLevel(e)}setForcedVariation({visitorCode:e,experimentId:t,variationKey:i,forceTargeting:a=!0}){this.stubMode||(A.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(),A.info`RETURN: KameleoonClient.setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a})`)}evaluateAudiences(e){if(this.stubMode)return;A.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 o=ge.checkTargeting({segment:a,visitorCode:e,targetingData:i,experimentId:null,clientConfiguration:this.clientConfiguration,packageInfo:this.externalPackageInfo,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});o.ok&&o.data&&(A.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),A.info`RETURN: KameleoonClient.evaluateAudiences(visitorCode: ${e})`}getDataFile(){const e={featureFlags:new Map,dateModified:0};if(this.stubMode)return e;A.debug`CALL: KameleoonClient.getDataFile()`;const t=this.clientConfiguration.dataFile;return A.debug`RETURN: KameleoonClient.getDataFile() -> (dataFile: ${t})`,t}setUserConsent({visitorCode:e,consent:t,setData:i}){this.stubMode||(A.info`CALL: KameleoonClient.setUserConsent(visitorCode: ${e}, consent: ${t}, setData: ${i})`,this.visitorCodeManager.validateVisitorCode(e).throw(),this.updateConsentData(e,t),t&&i({visitorCode:e,key:exports.KameleoonStorageKey.VisitorCode,maxAge:yt,path:"/"}),A.info`RETURN: KameleoonClient.setUserConsent(visitorCode: ${e}, consent: ${t}, setData: ${i})`)}updateConsentData(e,t){const i=this.consentDataStorage.read(),a=t?mt.Given:mt.NotGiven;if(!i.ok)return void(i.error.type===exports.KameleoonException.StorageEmpty&&this.consentDataStorage.write({[e]:{consent:a}}));const o=i.data;o[e]={consent:a},this.consentDataStorage.write(o)}getLegalConsent(e){let t;A.debug`CALL: KameleoonClient.getLegalConsent(visitorCode: ${e})`;const i=this.consentDataStorage.read();return t=i.ok?this.extractLegalConsent(i.data[e]):mt.Unknown,A.debug`RETURN: KameleoonClient.getLegalConsent(visitorCode: ${e}) -> (legalConsent: ${t})`,t}extractLegalConsent(e){if(void 0===e)return mt.Unknown;if("boolean"==typeof e)return e?mt.Given:mt.NotGiven;const t=e.consent;return"boolean"==typeof t?t?mt.Given:mt.NotGiven:t}_isConsentProvided(e){A.debug`CALL: KameleoonClient._isConsentProvided(visitorCode: ${e})`;const{isConsentRequired:t}=this.clientConfiguration,i=!t||this.getLegalConsent(e)==mt.Given;return A.debug`RETURN: KameleoonClient._isConsentProvided(visitorCode: ${e}) -> (isConsentProvided: ${i})`,i}_getFeatureVariables({visitorCode:e,featureKey:t,variationKey:i}){A.debug`CALL: KameleoonClient._getFeatureVariables(visitorCode: ${e}, featureKey: ${t}, variationKey: ${i})`;const a=this.clientConfiguration.featureFlags.get(t);if(!a)throw new c(exports.KameleoonException.FeatureFlagConfigurationNotFound,t);const o=a.variations.find(e=>e.key===i);if(!o)throw new c(exports.KameleoonException.FeatureFlagVariationNotFound,i,e);return A.debug`RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${e}, featureKey: ${t}, variationKey: ${i}) -> (variables: ${o.variables})`,o.variables}_getActiveFeatureVariations(e){A.debug`CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${e})`;const t=this.clientConfiguration.featureFlags,i=[];for(const a of t.values()){const t=this._getForcedFeatureVariation(e,a.featureKey);if(a.environmentEnabled||(null==t?void 0:t.simulated))try{const o=this._evaluate({visitorCode:e,featureFlag:a,track:!1,save:!1,forcedVariation:t});o.variationKey!==Y&&i.push({variationKey:o.variationKey,variationId:o.variationId,experimentId:o.experimentId,featureFlagId:a.id,featureKey:a.featureKey,rule:null,isTargetedRule:o.ruleType===F.TARGETED_DELIVERY})}catch(e){if(e instanceof c){e.type!=exports.KameleoonException.FeatureFlagEnvironmentDisabled&&A.error`Unexpected error: ${e}`;continue}}}return A.debug`RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${e}) -> (activeVariations: ${i})`,i}_evaluate({visitorCode:t,featureFlag:i,track:a,save:o,forcedVariation:r}){let n;A.debug`CALL: KameleoonClient._evaluate(visitorCode: ${t}, featureFlag: ${i}, track: ${a}, save: ${o})`;const s=this.dataManager.getVisitorData(t);if(r)n=e.EvaluatedExperiment.fromForcedFeatureVariation(i.defaultVariationKey,r);else if(this._isVisitorNotInHoldout(t,a,o,i,s)&&this._isFFUnrestrictedByMEGroup(t,i,s)){const r=this._getCodeForHash(t,i.bucketingCustomDataIndex,s),u=this.getLegalConsent(t),l=this.variationConfiguration.getVariation({visitorCode:t,visitorIdentifier:r,featureFlag:i,track:a,withAssignment:o,targetingData:s,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo,legalConsent:u}).throw();n=e.EvaluatedExperiment.fromVariationData(l)}else n=e.EvaluatedExperiment.fromDefaultVariationKey(i.defaultVariationKey);return o&&!n.isSimulated&&null!==n.experimentId&&null!==n.variationId&&this.variationConfiguration.updateStoredVariations(t,{[n.experimentId]:{variationId:n.variationId,isTargetedRule:n.ruleType===F.TARGETED_DELIVERY,status:a?exports.TrackingStatus.Unsent:exports.TrackingStatus.Sent}}),this.eventManager.fireEvent(exports.EventType.Evaluation,{featureKey:i.featureKey,variation:{key:n.variationKey,experimentId:n.experimentId,id:n.variationId}}),A.debug`RETURN: KameleoonClient._evaluate(visitorCode: ${t}, featureFlag: ${i}, track: ${a}, save: ${o}) -> (evalExp: ${n})`,n}_isFFUnrestrictedByMEGroup(e,t,i){const a=t.mutuallyExclusiveGroup;if(!a)return!0;A.debug`CALL: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${e}, featureFlag: ${t}, visitorData: ${i})`;let o=!0;const r=this.clientConfiguration.meGroups.get(a);if(r){const n=this._getCodeForHash(e,t.bucketingCustomDataIndex,i),s=Rt.getHashDoubleForMEGroup(n,a);A.debug`Calculated meGroup hash ${s} for code: ${n}, meGroup: ${a}`,o=r.getFeatureFlagByHash(s)===t}return A.debug`RETURN: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${e}, featureFlag: ${t}, visitorData: ${i}) -> (selected: ${o})`,o}_getFeatureVariation({visitorCode:e,featureKey:t,track:i}){var a,o;if(A.debug`CALL: KameleoonClient._getFeatureVariation(visitorCode: ${e}, featureKey: ${t}, track: ${i})`,!this.initialized)return s.Err(new c(exports.KameleoonException.Initialization));const r=this.clientConfiguration.featureFlags.get(t);if(!r)return s.Err(new c(exports.KameleoonException.FeatureFlagConfigurationNotFound,t));const n=this._getForcedFeatureVariation(e,t);if(!r.environmentEnabled&&!(null==n?void 0:n.simulated))return s.Err(new c(exports.KameleoonException.FeatureFlagEnvironmentDisabled,r.featureKey,this.environment));const u=this._evaluate({visitorCode:e,featureFlag:r,track:i,save:!0,forcedVariation:n}),{experimentId:l,variationId:d,variationKey:p,isSimulated:g}=u;let h=new Map,v=!1;try{this._getFeatureVariables({visitorCode:e,featureKey:t,variationKey:p}).forEach(e=>{v||e.type!==exports.VariableType.JS&&e.type!==exports.VariableType.CSS||(v=!0);const t=Ve.parseFeatureVariable(e).throw();h.set(e.key,t)})}catch(e){}l&&"number"==typeof d&&!g&&ge.updateCache({cacheManager:this.trackingCache,hasJsCssVariables:v,visitorCode:e,experimentId:l,variationId:d}),i&&!g&&this.tracker.scheduleVisitor(e,this._isConsentProvided(e));const m={name:null!==(o=null===(a=r.variations.find(e=>e.key===p))||void 0===a?void 0:a.name)&&void 0!==o?o:"",key:p,id:d,experimentId:l,variables:h};return A.debug`RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${e}, featureKey: ${t}, track: ${i}) -> (variation: ${m})`,s.Ok(m)}_isVisitorNotInHoldout(e,t,i,a,o){const r=this.clientConfiguration.holdout;if(!r)return!0;A.debug`CALL: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${e}, track: ${t}, save: ${i}, featureFlag: ${a}, visitorData: ${o})`;let n=!0;if((this.clientConfiguration.isConsentRequired?this.getLegalConsent(e):mt.Given)==mt.NotGiven&&this.clientConfiguration.consentBlockingBehaviour==L.CompletelyBlocked)throw new c(exports.KameleoonException.FeatureFlagEnvironmentDisabled,`Evaluation of holdout is blocked because consent is not provided for visitor '${e}'`);const s=this._getCodeForHash(e,null==a?void 0:a.bucketingCustomDataIndex,o),u=Rt.getHashDouble({visitorIdentifier:s,respoolTime:null,id:String(r.experimentId)});A.debug`Calculated holdoutHash: ${u} for visitorCode: ${s}`;let l=ge.getVariationByHash(r.variationByExposition,u);return null!==l&&(n="in-holdout"!==l.variationKey,i&&this.variationConfiguration.updateStoredVariations(e,{[r.experimentId]:{variationId:l.variationId,isTargetedRule:!1,status:t?exports.TrackingStatus.Unsent:exports.TrackingStatus.Sent}})),A.debug`RETURN: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${e}, track: ${t}, save: ${i}, featureFlag: ${a}, visitorData: ${o}) -> (isNotInHoldout: ${n})`,n}_setForcedVariation({visitorCode:e,experimentId:t,variationKey:i,forceTargeting:a=!0}){if(A.debug`CALL: KameleoonClient._setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a})`,null===i){const o=this.variationConfiguration.updateForcedExperimentVariation(e,t,null);return A.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a}) -> (writeResult: ${o})`,o}let o=null,r=null;if(o=this.clientConfiguration.experimentMap.get(t),!o)return A.error`Experiment with id ${t} not found for visitor ${e}`,s.Err(new c(exports.KameleoonException.FeatureFlagExperimentNotFound,t,e));if(r=o.variations.get(i),void 0===r)return A.error`Variation with key ${i} not found in experiment ${o} for visitor ${e}`,s.Err(new c(exports.KameleoonException.FeatureFlagVariationNotFound,i,e));o={type:o.type,experimentId:t},r={variationKey:i,variationId:r};const n=this.variationConfiguration.updateForcedExperimentVariation(e,t,{rule:o,varByExp:r,forceTargeting:a});return A.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a}) -> (writeResult: ${n})`,n}_getForcedFeatureVariation(e,t){const i=this.variationConfiguration.getForcedFeatureVariation(e,t);return i.ok?i.data:null}_getCodeForHash(e,t,i){var a;let o;if(A.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&&(o=i)}}return o||(o=this.dataManager.getVisitorIdentifier(e)),A.debug`RETURN: KameleoonClient._getCodeForHash(visitorCode: ${e}, bucketingCustomDataIndex: ${t}, visitorData: ${i}) -> (codeForHash: ${o})`,o}_refreshDataFileIfStale(){return u(this,0,void 0,function*(){const e=yield this.clientConfiguration.refreshDataFileIfStale();return e.ok&&e.data})}};Mt.EvaluatedExperiment=class{static fromForcedFeatureVariation(e,t){var i,a,o,r;let n=e;return t.varByExp?n=t.varByExp.variationKey:(null===(i=t.rule)||void 0===i?void 0:i.type)===F.EXPERIMENTATION&&(n=Y),{variationKey:n,variationId:(null===(a=t.varByExp)||void 0===a?void 0:a.variationId)||null,experimentId:(null===(o=t.rule)||void 0===o?void 0:o.experimentId)||null,ruleType:(null===(r=t.rule)||void 0===r?void 0:r.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 Nt{static simulateSuccessRequest(e,t){switch(e){case exports.RequestType.Tracking:return new Promise(e=>{e({status:204,json:()=>new Promise(e=>e(null)),text:()=>new Promise(e=>e("")),ok:!0})});case exports.RequestType.Configuration:case exports.RequestType.RemoteData:return new Promise(e=>{e({status:200,json:()=>new Promise(e=>e(t)),text:()=>new Promise(e=>e("")),ok:!0})});default:d(e)}}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 Lt,_t=s.Err,Ut=s.Ok;function Pt(e,t,i,a){return new(i||(i=Promise))(function(t,o){function r(e){try{s(a.next(e))}catch(e){o(e)}}function n(e){try{s(a.throw(e))}catch(e){o(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(r,n)}s((a=a.apply(e,[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class Gt{sendRequest({url:e,parameters:t}){return Pt(this,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"}(Lt||(Lt={}));const Bt=15*exports.Milliseconds.Second,zt=30*exports.Milliseconds.Minute;class jt{getData(e){A.debug`CALL: VisitorCodeManager.getData(key: ${e})`;const t=document.cookie;let i=null;return t&&(i=Nt.getCookieValue(t,e)),A.debug`RETURN: VisitorCodeManager.getData(key: ${e}) -> (visitorCode: ${i})`,i}setData({visitorCode:e,domain:t,maxAge:i,key:a,path:o}){const r=this.getResultCookie({domain:t,visitorCode:e,key:a,maxAge:i,path:o});document.cookie=r,A.debug`Cookie ${r} was added for visitor ${e}`}getResultCookie({domain:e,visitorCode:t,maxAge:i,key:a,path:o}){const r=[a+Lt.KeyValueDelimiter+t,Lt.MaxAge+Lt.KeyValueDelimiter+i,Lt.Path+Lt.KeyValueDelimiter+o];return e&&r.push(Lt.Domain+Lt.KeyValueDelimiter+e),r.join(Lt.PairsDelimiter)}}class qt{read(e){const t=localStorage.getItem(e);return e!==exports.KameleoonStorageKey.ConsentData||t&&"{}"!==t?t?JSON.parse(t):null:this.getEngineConsentData()}write(e,t){localStorage.setItem(e,JSON.stringify(t))}getEngineConsentData(){var e;this.visitorCodeManager||(this.visitorCodeManager=new jt);const t=this.visitorCodeManager.getData(exports.KameleoonStorageKey.VisitorCode);if(!t)return null;try{const i=localStorage.getItem("kameleoonLegalConsent");if(!i)return null;const a=JSON.parse(i),o=null===(e=null==a?void 0:a.value)||void 0===e?void 0:e.AB_TESTING;return"boolean"==typeof o?{[t]:{consent:o?mt.Given:mt.NotGiven}}:null}catch(e){return null}}}class Ht{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 Wt{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 Yt{log(e,t){switch(t=`${(new Date).toLocaleString("en-US",{timeZoneName:"short"})} ${t}`,e){case exports.LogLevel.DEBUG:console.debug(t);break;case exports.LogLevel.INFO:console.info(t);break;case exports.LogLevel.WARNING:console.warn(t);break;case exports.LogLevel.ERROR:console.error(t)}}}class Xt{constructor(e,t,i,a){A.debug`CALL: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${a})`,this.dataManager=e,this.tracker=t,this.isConsentProvided=i,this.setup(a),A.debug`RETURN: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${a})`}setup(e){setInterval(()=>{this.updateLastActivity()},e),this.updateLastActivity()}updateLastActivity(){A.debug`CALL: VisitorActivityManager.updateLastActivity()`;const e=this.dataManager.updateLastActivity();e&&this.tracker.scheduleVisitor(e,this.isConsentProvided(e)),A.debug`RETURN: VisitorActivityManager.updateLastActivity()`}}class Jt extends Ct{constructor({dataStorage:e,infoStorage:t,cleanupInterval:i,packageInfo:a,platformAnalyzer:o}){A.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=o,this.updateVisitor(),A.debug`RETURN: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${i} packageInfo: ${a}, platformAnalyzer)`}getUnsentData(e){var t,i;const a=super.getUnsentData(e),o=super.getVisitorData(e);if(!o)return a;const r=o[exports.KameleoonData.Browser],n=o[exports.KameleoonData.Device],s=o[exports.KameleoonData.OperatingSystem],u=new Fe({browserType:null==r?void 0:r.browser,browserVersion:null==r?void 0:r.version,visitNumber:null===(t=this.visitor)||void 0===t?void 0:t.visitNumber,timeSincePreviousVisit:null===(i=this.visitor)||void 0===i?void 0:i.timeSincePreviousVisit,os:null==s?void 0:s.operatingSystem,deviceType:null==n?void 0:n.device});return a.push(u),a}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 e,t,i,a;if(!this.visitor)return null;const o=this.dataStorage.read();if(!o.ok)return null;const r=o.data;let n=null!==(e=r[this.visitor.visitorCode])&&void 0!==e?e:{};"string"==typeof n&&(n=r[n]);let s=n[exports.KameleoonData.VisitsData];s||(s={visits:[],visitNumber:0,type:exports.KameleoonData.VisitsData,status:exports.TrackingStatus.Sent,expirationTime:0},n[exports.KameleoonData.VisitsData]=s);const u=this.fetchVisit(s.visits,s.visits.length-1),l=null!==(t=null==u?void 0:u.timeLastActivity)&&void 0!==t?t:0,d=Date.now();let c=null!==(i=s.visitNumber)&&void 0!==i?i:s.visits.length?s.visits.length-1:0;if(d-l>zt)c+=l>0?1:0,he.insertVisitInOrderedListMutably({list:s.visits,visit:{timeStarted:d,timeLastActivity:d}}),this.visitor.timeSincePreviousVisit=u?d-l:0;else if(s.visits.length&&(s.visits[s.visits.length-1]={timeStarted:null!==(a=null==u?void 0:u.timeStarted)&&void 0!==a?a:d,timeLastActivity:d},-1===this.visitor.timeSincePreviousVisit)){const e=this.fetchVisit(s.visits,s.visits.length-2);this.visitor.timeSincePreviousVisit=e?d-e.timeLastActivity:0}return s.visitNumber=c,this.visitor.visitNumber=c,this.dataStorage.write(r),this.visitor.visitorCode}checkVisitor(e){this.visitor&&this.visitor.visitorCode===e||this.createVisitor(e)}createVisitor(e){var t,i,a;A.debug`CALL: ClientDataManager.createVisitor(visitorCode: ${e})`,this.visitor=new Qt(e);try{const o=this.platformAnalyzer.getResult(),r=[];(null===(t=o.os)||void 0===t?void 0:t.name)&&r.push(new xe(o.os.name)),(null===(i=o.platform)||void 0===i?void 0:i.type)&&r.push(new ye(o.platform.type)),(null===(a=o.browser)||void 0===a?void 0:a.name)&&r.push(new Ce(o.browser.name,o.browser.version)),o.pageView&&r.push(o.pageView),r.length&&this.storeData({visitorCode:e,data:r})}finally{this.updateLastActivity()}A.debug`RETURN: ClientDataManager.createVisitor(visitorCode: ${e})`}updateVisitor(){var e;A.debug`CALL: ClientDataManager.updateVisitor()`;const t=this.dataStorage.read();if(!t.ok)return;const i=t.data;let a,o=-1;for(const[t,r]of Object.entries(i)){if("string"==typeof r)continue;const i=r[exports.KameleoonData.VisitsData];if(!i){a||(a=t);continue}const n=i.visits.length?i.visits[i.visits.length-1]:null;if(n){const i=null!==(e="number"==typeof n?n:null==n?void 0:n.timeLastActivity)&&void 0!==e?e:0;i>o&&(o=i,a=t)}else a||(a=t)}a?this.createVisitor(a):(this.visitor=null,A.debug`ClientDataManager no visitor found`),A.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 Qt{constructor(e){this.visitNumber=0,this.timeSincePreviousVisit=-1,this.visitorCode=e}}class Zt{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 ei{constructor(){this.userAgent=navigator.userAgent||"",A.debug`PlatformParser: userAgent = ${this.userAgent}`,this.parsedResult={},""!==this.userAgent&&this.parse()}parseBrowser(){const e=[{test:[/chrome|crios|crmo/i],describe:e=>({name:exports.BrowserType.Chrome,version:this.getBrowserVersion(Zt.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/firefox|iceweasel|fxios/i],describe:e=>({name:exports.BrowserType.Firefox,version:this.getBrowserVersion(Zt.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/safari|applewebkit/i],describe:e=>({name:exports.BrowserType.Safari,version:this.getBrowserVersion(Zt.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/opr\/|opios/i],describe:e=>({name:exports.BrowserType.Opera,version:this.getBrowserVersion(Zt.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e))})},{test:[/edg([ea]|ios)/i],describe:e=>({name:exports.BrowserType.InternetExplorer,version:this.getBrowserVersion(Zt.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/googlebot/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(Zt.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||Zt.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/SamsungBrowser/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(Zt.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/yabrowser/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(Zt.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/ucbrowser/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(Zt.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/vivaldi/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(Zt.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/phantom/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(Zt.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/electron/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(Zt.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/chromium/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(Zt.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/opera/i],describe:e=>({name:exports.BrowserType.Opera,version:this.getBrowserVersion(Zt.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/msie|trident/i],describe:e=>({name:exports.BrowserType.InternetExplorer,version:this.getBrowserVersion(Zt.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e))})},{test:[/.*/i],describe:e=>{const t=e.includes("(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:exports.BrowserType.Other,version:this.getBrowserVersion(Zt.getSecondMatch(t,e))}}}].find(e=>e.test.some(e=>e.test(this.userAgent)));return e&&(this.parsedResult.browser=e.describe(this.userAgent)),this.parsedResult.browser||{}}parseOS(){const e=[{test:[/windows phone/i],describe:()=>({name:exports.OperatingSystemType.WindowsPhone})},{test:[/windows /i],describe:()=>({name:exports.OperatingSystemType.Windows})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:e=>({name:exports.OperatingSystemType.IOS,version:Zt.getSecondMatch(/(Version\/)(\d[\d.]+)/,e)})},{test:[/macintosh/i],describe:e=>({name:exports.OperatingSystemType.Mac,version:Zt.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,".")})},{test:[/(ipod|iphone|ipad)/i],describe:e=>({name:exports.OperatingSystemType.IOS,version:Zt.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".")})},{test:[/android/i],describe:()=>({name:exports.OperatingSystemType.Android})},{test:[/linux/i],describe:()=>({name:exports.OperatingSystemType.Linux})}].find(e=>e.test.some(e=>e.test(this.userAgent)));return e&&(this.parsedResult.os=e.describe(this.userAgent)),this.parsedResult.os||{}}parsePlatform(){const e=[{test:()=>{var e,t;return(null===(e=this.parsedResult.os)||void 0===e?void 0:e.name)===exports.OperatingSystemType.Android&&Number(String(null===(t=this.parsedResult.os)||void 0===t?void 0:t.version).split(".")[0])>=3},describe:e=>({type:exports.DeviceType.Tablet})},{test:()=>{var e;return(null===(e=this.parsedResult.os)||void 0===e?void 0:e.name)===exports.OperatingSystemType.Android},describe:()=>({type:exports.DeviceType.Phone})},{test:()=>{var e;return(null===(e=this.parsedResult.os)||void 0===e?void 0:e.name)===exports.OperatingSystemType.Mac},describe:()=>({type:exports.DeviceType.Desktop})},{test:()=>{var e;return(null===(e=this.parsedResult.os)||void 0===e?void 0:e.name)===exports.OperatingSystemType.Windows},describe:()=>({type:exports.DeviceType.Desktop})},{test:()=>{var e;return(null===(e=this.parsedResult.os)||void 0===e?void 0:e.name)===exports.OperatingSystemType.Linux},describe:()=>({type:exports.DeviceType.Desktop})}],t=[{test:[/huserAgentwei/i],describe:e=>({type:exports.DeviceType.Phone})},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/ipad/i],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/kftt build/i],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/silk/i],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/tablet(?! pc)/i],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/ipod|iphone/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/[^-]mobi/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/blackberry/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/bada/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/windows phone/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/android/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/ios/i],describe:()=>({type:exports.DeviceType.Desktop})},{test:[/windows/i],describe:()=>({type:exports.DeviceType.Desktop})},{test:[/linux/i],describe:()=>({type:exports.DeviceType.Desktop})}].find(e=>e.test.some(e=>e.test(this.userAgent)))||e.find(e=>e.test());return t&&(this.parsedResult.platform=t.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 ve({urlAddress:t,title:e})}}getResult(){return this.parseWebView(),Zt.assign({},this.parsedResult)}}class ti extends Mt{constructor({siteCode:e,configuration:t,externals:i,_internals:a,stubMode:o}){var r;if(o)return super({siteCode:e,internalConfiguration:{},stubMode:o}),this.internalVisitorCodeManager={},void(this.externalVisitorCodeManager={});const n=(null==a?void 0:a.prng)||new Wt,s=(null==i?void 0:i.storage)||new qt,u=(null==i?void 0:i.requester)||new Gt,l=(null==i?void 0:i.eventSource)||new Ht,d=new xt,c=(null==i?void 0:i.visitorCodeManager)||new jt,p=(null==a?void 0:a.packageInfo)||{type:exports.SdkLanguageType.JAVASCRIPT,version:"4.21.0",isServer:!1},g=new ht(s,exports.KameleoonStorageKey.TargetingData),h=new ht(s,exports.KameleoonStorageKey.DataInfo),v=new Jt({dataStorage:g,infoStorage:h,cleanupInterval:0,packageInfo:p,platformAnalyzer:null!==(r=null==a?void 0:a.platformAnalyzer)&&void 0!==r?r:new ei});super({siteCode:e,configuration:t,internalConfiguration:{externals:{externalPRNG:n,externalStorage:s,externalRequester:u,externalEventSource:l,externalVisitorCodeManager:d,externalPackageInfo:p,externalLogger:(null==i?void 0:i.logger)||new Yt,customDataManager:v},settings:{useAbortController:!0}}});const m=pe.validateDomain(null==t?void 0:t.cookieDomain);this.domain=m.ok?m.data:void 0,this.internalVisitorCodeManager=d,this.externalVisitorCodeManager=c,this.customDataManager=v}initialize(){const e=Object.create(null,{initialize:{get:()=>super.initialize}});return Pt(this,0,void 0,function*(){if(this.stubMode)return!1;const t=e.initialize.call(this);return new Xt(this.customDataManager,this.tracker,e=>this._isConsentProvided(e),Bt),t})}getVisitorCode(e){var t;if(this.stubMode)return"";A.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)),A.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))}}const ii=a.createContext(null);var ai=a.memo(function({client:e,children:t}){return i.jsx(ii.Provider,Object.assign({value:{kameleoonClient:e,sdkParameters:null}},{children:t}))});var oi=a.memo(function({sdkParameters:e,children:t}){return i.jsx(ii.Provider,Object.assign({value:{kameleoonClient:null,sdkParameters:e}},{children:t}))});function ri(e,t,i,a){return new(i||(i=Promise))(function(o,r){function n(e){try{u(a.next(e))}catch(e){r(e)}}function s(e){try{u(a.throw(e))}catch(e){r(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(n,s)}u((a=a.apply(e,t||[])).next())})}function ni({siteCode:e,configuration:t,externals:i,stubMode:a}){return new ti({siteCode:e,configuration:t,externals:i,_internals:{packageInfo:{type:exports.SdkLanguageType.REACT,version:"10.23.0",isServer:!1},prng:null==i?void 0:i.prng,platformAnalyzer:null==i?void 0:i.platformAnalyzer},stubMode:a})}function si(){const e=a.useContext(ii);if(!e)throw new Error("Kameleoon SDK hooks must be used within a KameleoonProvider");return e}function ui(e){if(!e)throw new Error("Kameleoon SDK hooks must be used within a KameleoonProvider");if(!e.kameleoonClient){const t=e.sdkParameters;if(t)return t.stubMode=!1,e.kameleoonClient=ni(t),e.kameleoonClient;throw new Error("Kameleoon SDK hooks must be used within a KameleoonProvider")}return e.kameleoonClient}"function"==typeof SuppressedError&&SuppressedError,exports.ApplicationVersion=class{constructor(e){this.version=e,this.status=exports.TrackingStatus.Sent}get url(){return""}get data(){return{version:this.version,type:exports.KameleoonData.ApplicationVersion,status:this.status}}},exports.Browser=Ce,exports.Conversion=fe,exports.Cookie=Ae,exports.CustomData=me,exports.DataManager=Ct,exports.DataProcessor=Oe,exports.DataStorage=ht,exports.Device=ye,exports.Err=_t,exports.GeolocationData=De,exports.KameleoonClient=ti,exports.KameleoonContext=ii,exports.KameleoonCore=Mt,exports.KameleoonError=c,exports.KameleoonLogger=A,exports.KameleoonProvider=ai,exports.KameleoonProviderSSR=oi,exports.KameleoonUtils=Nt,exports.ListUtilities=he,exports.NUMBER_OF_RETRIES=1,exports.Ok=Ut,exports.OperatingSystem=xe,exports.PageView=ve,exports.Parser=Ve,exports.StaticData=Fe,exports.Tree=Ne,exports.UniqueIdentifier=Ke,exports.UserAgent=class{constructor(e){this.value=e,this.status=exports.TrackingStatus.Sent}get url(){return""}get data(){return{value:this.value,type:exports.KameleoonData.UserAgent,status:this.status}}},exports.Utilities=ge,exports.VISITOR_CODE_LENGTH=16,exports.VISIT_DURATION=pt,exports.Validator=pe,exports.VisitorCodeManager=xt,exports.createClient=ni,exports.useData=function(){const e=si();let t=e?e.kameleoonClient:null;const i=a.useCallback((t,...i)=>{const a=ui(e);"string"!=typeof t?a.addData(t):a.addData(t,...i)},[e]),o=a.useCallback(i=>{t=ui(e),t.flush(i)},[e]),r=a.useCallback(i=>ri(this,void 0,void 0,function*(){return t=ui(e),t.flushInstant(i)}),[e]),n=a.useCallback(({visitorCode:i,goalId:a,revenue:o,negative:r,metadata:n})=>{t=ui(e),t.trackConversion({visitorCode:i,goalId:a,revenue:o,negative:r,metadata:n})},[e]);return{getRemoteData:a.useCallback(i=>ri(this,void 0,void 0,function*(){return t=ui(e),yield t.getRemoteData(i)}),[e]),getRemoteVisitorData:a.useCallback(i=>ri(this,void 0,void 0,function*(){return t=ui(e),yield t.getRemoteVisitorData(i)}),[e]),getVisitorWarehouseAudience:a.useCallback(i=>ri(this,void 0,void 0,function*(){return t=ui(e),yield t.getVisitorWarehouseAudience(i)}),[e]),trackConversion:n,addData:i,flush:o,flushInstant:r}},exports.useFeatureFlag=function(){const e=si();let t=e?e.kameleoonClient:null;const i=a.useCallback((i,a)=>{if(t=ui(e),"string"==typeof i){if(!a)throw new Error("[Kameleoon React SDK Error]: Overload is not used correctly. The second parameter must be provided when the first parameter is a string");return t.isFeatureFlagActive(i,a)}return t.isFeatureFlagActive(i)},[e]),o=a.useCallback(()=>(t=ui(e),t.getDataFile()),[e]),r=a.useCallback(({visitorCode:i,featureKey:a,track:o})=>(t=ui(e),t.getVariation({visitorCode:i,featureKey:a,track:o})),[e]),n=a.useCallback(({visitorCode:i,onlyActive:a,track:o})=>(t=ui(e),t.getVariations({visitorCode:i,onlyActive:a,track:o})),[e]),s=a.useCallback((i,a)=>(t=ui(e),t.getFeatureFlagVariationKey(i,a)),[e]),u=a.useCallback(({visitorCode:i,featureKey:a,variableKey:o})=>(t=ui(e),t.getFeatureFlagVariable({visitorCode:i,featureKey:a,variableKey:o})),[e]),l=a.useCallback(i=>(t=ui(e),t.getVisitorFeatureFlags(i)),[e]),d=a.useCallback(i=>(t=ui(e),t.getActiveFeatureFlags(i)),[e]),c=a.useCallback(()=>(t=ui(e),t.getFeatureFlags()),[e]),p=a.useCallback((i,a)=>(t=ui(e),t.getFeatureFlagVariables(i,a)),[e]);return{getActiveFeatureFlags:d,getDataFile:o,getVariation:r,getVariations:n,getFeatureFlags:c,isFeatureFlagActive:i,getEngineTrackingCode:a.useCallback(i=>(t=ui(e),t.getEngineTrackingCode(i)),[e]),getVisitorFeatureFlags:l,getFeatureFlagVariable:u,getFeatureFlagVariables:p,getFeatureFlagVariationKey:s,setForcedVariation:a.useCallback(({visitorCode:i,experimentId:a,variationKey:o,forceTargeting:r})=>(t=ui(e),t.setForcedVariation({visitorCode:i,experimentId:a,variationKey:o,forceTargeting:r})),[e]),evaluateAudiences:a.useCallback(i=>(t=ui(e),t.evaluateAudiences(i)),[e])}},exports.useInitialize=function(){const e=si();let t=e?e.kameleoonClient:null;const i=a.useCallback(()=>ri(this,void 0,void 0,function*(){return t=ui(e),yield t.initialize()}),[e]);return{onEvent:a.useCallback((i,a)=>{t=ui(e),t.onEvent(i,a)},[e]),initialize:i,isInitialized:a.useCallback(()=>(t=ui(e),t.isInitialized()),[e])}},exports.useKameleoon=function(){const e=a.useContext(ii);if(!e)throw new Error("Kameleoon SDK hooks must be used within a KameleoonProvider");return ui(e)},exports.useLog=function(){const e=si();let t=e?e.kameleoonClient:null;return{setLogLevel:a.useCallback(i=>{t=ui(e),t.setLogLevel(i)},[e])}},exports.useVisitorCode=function(){const e=si();let t=e?e.kameleoonClient:null;return{setLegalConsent:a.useCallback((i,a)=>{t=ui(e),t.setLegalConsent(i,a),t.flush(i)},[e]),getVisitorCode:a.useCallback(i=>(t=ui(e),t.getVisitorCode(i)),[e])}};
2
+ "use strict";var e,t,i=require("react/jsx-runtime"),a=require("react"),o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};exports.KameleoonException=void 0;var r={},n={},s=(t||(t=1,function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.Err=t.Ok=void 0;var i=function(){if(e)return n;function t(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 i(e){return this.ok?this.data:e(this.error)}function a(e){return this.ok?this.data:e}function o(e){return this.ok&&e(this.data),this}return e=1,Object.defineProperty(n,"__esModule",{value:!0}),n.Err=n.Ok=void 0,n.Ok=function(e){return{ok:!0,data:e,throw:t,else:i,or:a,and:o}},n.Err=function(e){return{ok:!1,error:e,throw:t,else:i,or:a,and:o}},n}();Object.defineProperty(t,"Ok",{enumerable:!0,get:function(){return i.Ok}}),Object.defineProperty(t,"Err",{enumerable:!0,get:function(){return i.Err}})}(r)),r);function l(e,t,i,a){return new(i||(i=Promise))(function(t,o){function r(e){try{s(a.next(e))}catch(e){o(e)}}function n(e){try{s(a.throw(e))}catch(e){o(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(r,n)}s((a=a.apply(e,[])).next())})}"function"==typeof SuppressedError&&SuppressedError,function(e){e.Credentials="Credentials",e.EventSourceInitialization="EventSourceInitialization",e.FeatureFlagConfigurationNotFound="FeatureFlagConfigurationNotFound",e.FeatureFlagVariableNotFound="FeatureFlagVariableNotFound",e.FeatureFlagVariationNotFound="FeatureFlagVariationNotFound",e.FeatureFlagExperimentNotFound="FeatureFlagExperimentNotFound",e.FeatureFlagEnvironmentDisabled="FeatureFlagEnvironmentDisabled",e.VisitAmount="VisitAmount",e.VisitorCodeMaxLength="VisitorCodeMaxLength",e.VisitorCodeEmpty="VisitorCodeEmpty",e.StorageInitialization="StorageInitialization",e.StorageWrite="StorageWrite",e.StorageRead="StorageRead",e.StorageParse="StorageParse",e.StorageEmpty="StorageEmpty",e.ClientConfiguration="ClientConfiguration",e.TargetingCondition="TargetingCondition",e.AmongValuesCheck="AmongValuesCheck",e.RangeCheck="RangeCheck",e.Initialization="Initialization",e.JSONParse="JSONParse",e.NumberParse="NumberParse",e.VersionParse="VersionParse",e.CookieParse="CookieParse",e.SemanticVersionParse="SemanticVersionParse",e.RemoteData="RemoteData",e.MaximumRetriesReached="MaximumRetriesReached"}(exports.KameleoonException||(exports.KameleoonException={}));const u={[exports.KameleoonException.CookieParse]:e=>`Couldn't parse cookie string: ${e}`,[exports.KameleoonException.JSONParse]:e=>`Couldn't parse JSON variable: ${e}`,[exports.KameleoonException.NumberParse]:e=>`It's not possible to parse value ${e} to Number`,[exports.KameleoonException.VersionParse]:e=>`It's not possible to parse a version value ${e} to Number, version should be in format x.x`,[exports.KameleoonException.SemanticVersionParse]:e=>`It's not possible to parse a version value ${e} to Number, version should be in format x.x.x`,[exports.KameleoonException.Initialization]:()=>"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods",[exports.KameleoonException.Credentials]:()=>"KameleoonClient can not be created without credentials",[exports.KameleoonException.StorageInitialization]:()=>"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed",[exports.KameleoonException.EventSourceInitialization]:()=>"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed",[exports.KameleoonException.FeatureFlagConfigurationNotFound]:e=>`No feature flag with key ${e} was found.`,[exports.KameleoonException.FeatureFlagEnvironmentDisabled]:(e,t)=>`Feature flag with key ${e} is disabled in ${t} environment.`,[exports.KameleoonException.FeatureFlagVariableNotFound]:(e,t)=>`No feature flag variable with key ${e} was found for ${t} visitorCode.`,[exports.KameleoonException.FeatureFlagVariationNotFound]:(e,t)=>`No feature flag variation with key ${e} was found for ${t} visitorCode.`,[exports.KameleoonException.FeatureFlagExperimentNotFound]:(e,t)=>`No feature flag experiment with id ${e} was found for ${t} visitorCode.`,[exports.KameleoonException.VisitAmount]:()=>"Visit amount must be a number between 1 and 25",[exports.KameleoonException.VisitorCodeMaxLength]:()=>"Visitor code can not be more than 255 characters long",[exports.KameleoonException.VisitorCodeEmpty]:()=>"Visitor code can not be empty",[exports.KameleoonException.StorageWrite]:e=>`Couldn't update storage for kameleoonClient: ${e}`,[exports.KameleoonException.StorageRead]:e=>`No data found in storage under ${e} key`,[exports.KameleoonException.StorageEmpty]:()=>"No data found in storage",[exports.KameleoonException.StorageParse]:(e,t)=>`Couldn't parse ${t} storage data, the data may be corrupted. Error: ${e}`,[exports.KameleoonException.ClientConfiguration]:e=>`Couldn't retrieve client configuration from Kameleoon Api. Error: ${e}`,[exports.KameleoonException.TargetingCondition]:e=>`${e} targeting condition is not yet supported.`,[exports.KameleoonException.AmongValuesCheck]:(e,t)=>`Couldn't parse value "${t}": ${e}`,[exports.KameleoonException.RangeCheck]:e=>`Couldn't parse value "${e}" as a range, value should be in format [x: number, y: number]`,[exports.KameleoonException.RemoteData]:e=>`Couldn't retrieve data from Kameleoon server. Error: ${e}`,[exports.KameleoonException.MaximumRetriesReached]:e=>`Maximum retries reached, request failed. Reason: ${e}`};function d(e){throw new Error(`Reaching an impossible state because of ${e}`)}class c extends Error{constructor(e,t,i){switch(super(`Error: ${e}`),this.name="KameleoonError",this.errorType=e,e){case exports.KameleoonException.Initialization:case exports.KameleoonException.Credentials:case exports.KameleoonException.VisitorCodeMaxLength:case exports.KameleoonException.VisitorCodeEmpty:case exports.KameleoonException.StorageInitialization:case exports.KameleoonException.VisitAmount:case exports.KameleoonException.EventSourceInitialization:case exports.KameleoonException.StorageEmpty:this.message=u[e]();break;case exports.KameleoonException.CookieParse:case exports.KameleoonException.FeatureFlagConfigurationNotFound:case exports.KameleoonException.NumberParse:case exports.KameleoonException.ClientConfiguration:case exports.KameleoonException.MaximumRetriesReached:case exports.KameleoonException.RemoteData:case exports.KameleoonException.VersionParse:case exports.KameleoonException.SemanticVersionParse:this.message=u[e](t);break;case exports.KameleoonException.FeatureFlagExperimentNotFound:case exports.KameleoonException.FeatureFlagVariationNotFound:case exports.KameleoonException.FeatureFlagVariableNotFound:this.message=u[e](t,i);break;case exports.KameleoonException.FeatureFlagEnvironmentDisabled:this.message=void 0!==i?u[e](t,i):t;break;case exports.KameleoonException.StorageWrite:case exports.KameleoonException.JSONParse:case exports.KameleoonException.StorageRead:this.message=u[e](t);break;case exports.KameleoonException.StorageParse:this.message=u[e](t,i);break;case exports.KameleoonException.TargetingCondition:this.message=u[e](t);break;case exports.KameleoonException.AmongValuesCheck:this.message=u[e](t,i);break;case exports.KameleoonException.RangeCheck:this.message=u[e](t);break;default:d(e)}}get type(){return this.errorType}}var p,g;exports.HttpMethod=void 0,exports.RequestType=void 0,function(e){e.DataApi="dataApi",e.AccessToken="accessToken",e.Events="events",e.ClientConfiguration="clientConfiguration"}(p||(p={})),function(e){e.Get="GET",e.Post="POST"}(exports.HttpMethod||(exports.HttpMethod={})),function(e){e[e.VisitEvent=0]="VisitEvent",e[e.VisitData=1]="VisitData",e[e.DataMap=2]="DataMap"}(g||(g={})),function(e){e.Configuration="configuration",e.Tracking="tracking",e.RemoteData="remoteData"}(exports.RequestType||(exports.RequestType={}));exports.Header=void 0,function(e){e.UserAgent="User-Agent",e.ContentType="Content-Type",e.SdkVersion="X-Kameleoon-SDK-Version",e.SdkType="X-Kameleoon-SDK-Type",e.Authorization="Authorization",e.AcceptEncoding="Accept-Encoding",e.IfModifiedSince="If-Modified-Since",e.LastModified="Last-Modified"}(exports.Header||(exports.Header={}));const h="eventType=staticData",v="&browserIndex=",m="&browserVersion=",f="&deviceType=",C="&visitorCode=",y="&sdkVersion=",x="&nonce=",D="&id=",E="&maxNumberPreviousVisits=",T="&os=",I="&osIndex=",k="&browser=",S="&mappingValue=",V="visit/",w={[p.DataApi]:"data.kameleoon.io",[p.AccessToken]:"api.kameleoon.com",[p.Events]:"events.kameleoon.eu",[p.ClientConfiguration]:"sdk-config.kameleoon.eu"};exports.LogLevel=void 0,function(e){e[e.NONE=0]="NONE",e[e.ERROR=1]="ERROR",e[e.WARNING=2]="WARNING",e[e.INFO=3]="INFO",e[e.DEBUG=4]="DEBUG"}(exports.LogLevel||(exports.LogLevel={}));const R={[exports.LogLevel.NONE]:"NONE",[exports.LogLevel.ERROR]:"ERROR",[exports.LogLevel.WARNING]:"WARNING",[exports.LogLevel.INFO]:"INFO",[exports.LogLevel.DEBUG]:"DEBUG"},b=(e,t)=>"credentials"===e?{clientId:"****",clientSecret:"****"}:t instanceof Map?Array.from(t.entries()):t;class K{static setLogger(e){K.logger=e}static setLogLevel(e){K.logLevel=e}static log({level:e,strings:t,keys:i}){if(!K.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 o=t[a];if("object"==typeof o)try{i+=e[a]+JSON.stringify(o,b)}catch(t){i+=e[a]+"{object}"}else i+="string"==typeof o?e[a]+"'"+o+"'":e[a]+o}return i+=e[e.length-1],i}(t,i);K.writeMessage(e,a)}static info(e,...t){K.log({level:exports.LogLevel.INFO,strings:e,keys:t})}static error(e,...t){K.log({level:exports.LogLevel.ERROR,strings:e,keys:t})}static warning(e,...t){K.log({level:exports.LogLevel.WARNING,strings:e,keys:t})}static debug(e,...t){K.log({level:exports.LogLevel.DEBUG,strings:e,keys:t})}static checkLevel(e){return e<=K.logLevel&&e!==exports.LogLevel.NONE}static writeMessage(e,t){K.logger.log(e,`Kameleoon [${R[e]}]: ${t}`)}}K.logger=new class{log(e,t){switch(e){case exports.LogLevel.DEBUG:console.debug(t);break;case exports.LogLevel.INFO:console.info(t);break;case exports.LogLevel.WARNING:console.warn(t);break;case exports.LogLevel.ERROR:console.error(t)}}},K.logLevel=exports.LogLevel.WARNING;let A=class{constructor({urlProvider:e,packageInfo:t,externalRequester:i,requestTimeout:a,trackRetryDelay:o,useAbortController:r}){K.debug`CALL: new Requester(urlProvider, packageInfo: ${t}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${o}, useAbortController: ${r})`,this.urlProvider=e,this.useAbortController=r,this.externalRequester=i,this.trackRetryDelay=o,this.packageInfo=t,this.timeout=a,K.debug`RETURN: new Requester(urlProvider, packageInfo: ${t}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${o}, useAbortController: ${r})`}getClientConfiguration(e,t){return l(this,0,void 0,function*(){const i=this.urlProvider.getClientConfigurationUrl(e);let a=Object.assign({[exports.Header.SdkType]:this.packageInfo.type,[exports.Header.SdkVersion]:this.packageInfo.version},t&&{[exports.Header.IfModifiedSince]:t});try{let e={message:""};K.debug`Running configuration request Method: ${exports.HttpMethod.Get}, Url: ${i}, Headers: ${a}, with retry limit ${2}`;for(let t=0;t<2;t++){const o=yield this.sendRequest({url:i,requestType:exports.RequestType.Configuration,retryCount:t,parameters:{method:exports.HttpMethod.Get,headers:a}});if(o.ok){const e=yield o.json();this.logReceivedConfigurationResponse(o.status,i,a);const t=this.getLastModifiedHeader(o),r=e;return s.Ok({configuration:r,lastModified:t})}if(304===o.status)return this.logReceivedConfigurationResponse(o.status,i,a),s.Ok({});if(1===t){if(o.text){const t=yield o.text();e=JSON.parse(t)}K.error`Failed to get configuration response ${{status:o.status,message:e.message}} for request Method: ${exports.HttpMethod.Get}, Url: ${i}, Headers: ${a}`}else yield this.logRequestError({logLevel:exports.LogLevel.WARNING,message:"Failed to get configuration response",response:o,method:exports.HttpMethod.Get,url:i})}return s.Err(new c(exports.KameleoonException.MaximumRetriesReached,e.message))}catch(e){return yield this.logRequestError({logLevel:exports.LogLevel.ERROR,message:"Failed to get configuration response",error:e,method:exports.HttpMethod.Get,url:i,headers:a}),s.Err(new c(exports.KameleoonException.ClientConfiguration,e))}})}getRemoteData(e){var t;return l(this,0,void 0,function*(){const i=this.urlProvider.getRemoteDataUrl(e);K.debug`Running remote data request Method: ${exports.HttpMethod.Get}, Url: ${i}`;try{const e=yield this.sendRequest({url:i,requestType:exports.RequestType.RemoteData,retryCount:0,parameters:{method:exports.HttpMethod.Get}});if(!e.ok){if(yield this.logRequestError({logLevel:exports.LogLevel.ERROR,message:"Failed to get remote data response",response:e,method:exports.HttpMethod.Get,url:i}),e.text){const i=yield e.text(),a=null===(t=JSON.parse(i))||void 0===t?void 0:t.message;return s.Err(new c(exports.KameleoonException.RemoteData,a))}return s.Err(new c(exports.KameleoonException.RemoteData,"Unknown Reason - no `text()` was found for a response"))}const a=yield e.json();return K.debug`Received remote data response: ${{status:e.status}} for request Method: ${exports.HttpMethod.Get}, Url: ${i}`,s.Ok(a)}catch(e){return yield this.logRequestError({logLevel:exports.LogLevel.ERROR,message:"Failed to get remote data response",error:e,method:exports.HttpMethod.Get,url:i}),s.Err(new c(exports.KameleoonException.RemoteData,e))}})}getVisitorData({visitorCode:e,filters:t,isMappingIdentifier:i}){var a;return l(this,0,void 0,function*(){const o=this.urlProvider.getVisitorDataUrl({visitorCode:e,filters:t,isMappingIdentifier:i});K.debug`Running visitor data request Method: ${exports.HttpMethod.Get}, Url: ${o}`;try{const e=yield this.sendRequest({url:o,requestType:exports.RequestType.RemoteData,retryCount:0,parameters:{method:exports.HttpMethod.Get}});if(!e.ok){if(yield this.logRequestError({logLevel:exports.LogLevel.ERROR,message:"Failed to get visitor data response",response:e,method:exports.HttpMethod.Get,url:o}),"function"==typeof e.text){const t=yield e.text();if(t){const e=null===(a=JSON.parse(t))||void 0===a?void 0:a.message;return s.Err(new c(exports.KameleoonException.RemoteData,e))}}return e.status?s.Err(new c(exports.KameleoonException.RemoteData,`No error message. Error status: ${e.status}`)):s.Err(new c(exports.KameleoonException.RemoteData,"Unknown Reason - no text message or error status was found for a response"))}const t=yield e.json();return K.debug`Received visitor data response: ${{status:e.status}} for request Method: ${exports.HttpMethod.Get}, Url: ${o}`,s.Ok(t)}catch(e){return yield this.logRequestError({logLevel:exports.LogLevel.ERROR,message:"Failed to get visitor data response",error:e,method:exports.HttpMethod.Get,url:o}),s.Err(new c(exports.KameleoonException.RemoteData,e))}})}track(e,t){return l(this,0,void 0,function*(){const i=this.urlProvider.getTrackingUrl(t);K.debug`Running tracking request Method: ${exports.HttpMethod.Post}, Url: ${i}, Body: ${e}, with retry limit ${2}, retry delay ${this.trackRetryDelay} ms`;for(let t=0;t<2;t++){let a;try{if(a=yield this.sendRequest({url:i,retryCount:t,requestType:exports.RequestType.Tracking,parameters:{body:e,method:exports.HttpMethod.Post,headers:{[exports.Header.ContentType]:"*/*"}}}),a.ok)return K.debug`Received tracking response: ${{status:a.status}} for request Method: ${exports.HttpMethod.Post}, Url: ${i}, Body: ${e}`,s.Ok();yield this.logRequestError({logLevel:1==t?exports.LogLevel.ERROR:exports.LogLevel.WARNING,message:"Failed to get tracking response",response:a,method:exports.HttpMethod.Post,url:i})}catch(e){yield this.logRequestError({logLevel:1==t?exports.LogLevel.ERROR:exports.LogLevel.WARNING,message:"Failed to get tracking response",error:e,method:exports.HttpMethod.Post,url:i})}t<2&&(yield new Promise(e=>setTimeout(e,this.trackRetryDelay)))}return s.Err()})}sendRequest({url:e,requestType:t,retryCount:i,parameters:a}){return l(this,0,void 0,function*(){let o;if(this.useAbortController){const r=new AbortController,n=setTimeout(()=>r.abort(),this.timeout);o=yield this.externalRequester.sendRequest({url:e,retryCount:i,requestType:t,parameters:Object.assign(Object.assign({},a),{signal:r.signal})}),clearTimeout(n)}else o=yield this.externalRequester.sendRequest({url:e,retryCount:i,requestType:t,parameters:a});return o})}logRequestError({logLevel:e,message:t,error:i,method:a,url:o,response:r,headers:n}){return l(this,0,void 0,function*(){if(i){let r="Unknown error";i instanceof Error&&(r=i.message),K.log({level:e,strings:()=>`${t} with error: ${r} for request Method: ${a}, Url: ${o}`})}else if(r&&K.checkLevel(e)){const i=yield this.parseResponse(r);K.log({level:e,strings:()=>`${t} response: Status: '${i.status}' Message: '${i.message}' for request Method: ${a}, Url: '${o}'`+(n?`, Headers: ${n}`:"")})}})}parseResponse(e){return l(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(e){if(e.headers){const t=exports.Header.LastModified.toLowerCase();for(const[i,a]of e.headers)if(i.toLowerCase()===t)return a}}logReceivedConfigurationResponse(e,t,i){K.debug`Received configuration response: ${{status:e}} for request Method: ${exports.HttpMethod.Get}, Url: ${t}, Headers: ${i}`}};var O,F,$,M,N,L;exports.Environment=void 0,exports.VariableType=void 0,exports.TrackingStatus=void 0,exports.Milliseconds=void 0,exports.CustomDataScope=void 0,exports.EventType=void 0,function(e){e.Production="production",e.Staging="staging",e.Development="development"}(exports.Environment||(exports.Environment={}));class _{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[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(e){this.isInitialized();const t=`https://${this.domains[p.ClientConfiguration]}/v3/`,i=this.environment===exports.Environment.Production?"":"?environment="+encodeURIComponent(this.environment);let a="";return e&&(a=i?"&ts="+e:"?ts="+e),t+this.siteCode+i+a}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains[p.Events]}:8110/sse?siteCode=${this.siteCode}`}getRemoteDataUrl(e){return this.isInitialized(),this.getDataApiUrl(g.DataMap)+this.siteCode+"&key="+encodeURI(e)}getVisitorDataUrl({visitorCode:e,filters:t,isMappingIdentifier:i}){this.isInitialized();const{customData:a,previousVisitAmount:o,currentVisit:r,conversions:n,geolocation:s,experiments:l,pageViews:u,device:d,browser:c,operatingSystem:p,kcs:h,personalization:v,visitorCode:m,cbs:f}=t,y=i?S:C,x=a||m?"&customData="+!0:"",D=n?"&conversion="+!0:"",T=s?"&geolocation="+!0:"",I=l?"&experiment="+!0:"",k=u?"&page="+!0:"",V=r?"&currentVisit="+!0:"",w=h?"&kcs="+!0:"",R=v?"&personalization="+!0:"",b="number"!=typeof o?E+1:E+o,K=f?"&cbs="+!0:"";return this.getDataApiUrl(g.VisitData)+this.siteCode+y+e+b+x+D+T+I+k+"&staticData="+!0+V+w+R+K}getTrackingUrl(e){this.isInitialized();const{type:t,version:i}=this.packageInfo;let a=this.getDataApiUrl(g.VisitEvent)+this.siteCode+"&sdkName="+t+y+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+y+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 g.VisitEvent:return`${t}/${V+"events?siteCode="}`;case g.VisitData:return`${t}/${V+"visitor?siteCode="}`;case g.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)}}!function(e){e.BOOLEAN="BOOLEAN",e.NUMBER="NUMBER",e.STRING="STRING",e.JSON="JSON",e.JS="JS",e.CSS="CSS"}(exports.VariableType||(exports.VariableType={})),function(e){e.Sent="sent",e.Unsent="unsent",e.Pending="pending"}(exports.TrackingStatus||(exports.TrackingStatus={})),function(e){e[e.Second=1e3]="Second",e[e.Minute=6e4]="Minute",e[e.Hour=36e5]="Hour",e[e.Day=864e5]="Day",e[e.Week=6048e5]="Week",e[e.Month=2592e6]="Month"}(exports.Milliseconds||(exports.Milliseconds={}));class U{constructor(e){this.cacheMap=new Map,this.intervalId=null,this.cleanupTimeout=e*exports.Milliseconds.Second}add({key:e,data:t,lifetime:i}){K.debug`CALL: CacheManager.add(key: ${e}, data: ${t}, lifetime: ${i})`,null===this.intervalId&&this.activate();const a=i*exports.Milliseconds.Second,o={data:t,expirationTime:Date.now()+a};this.cacheMap.set(e,o),K.debug`RETURN: CacheManager.add(key: ${e}, data: ${t}, lifetime: ${i})`}getAliveItem(e){K.debug`CALL: CacheManager.getAliveItem(key: ${e})`;const t=this.cacheMap.get(e);if(t&&t.expirationTime>=Date.now()){const i=t.data;return K.debug`RETURN: CacheManager.getAliveItem(key: ${e}) -> (item: ${i})`,i}return t&&this.cacheMap.delete(e),K.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"}(O||(O={})),function(e){e.TARGETED_DELIVERY="TARGETED_DELIVERY",e.EXPERIMENTATION="EXPERIMENTATION"}(F||(F={})),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"}($||($={})),function(e){e.ACTIVATED="ACTIVATED",e.DEACTIVATED="DEACTIVATED",e.SCHEDULED="SCHEDULED"}(M||(M={})),function(e){e.Visit="VISIT",e.Visitor="VISITOR",e.Page="Page"}(exports.CustomDataScope||(exports.CustomDataScope={})),function(e){e.Required="REQUIRED",e.NotRequired="NOT_REQUIRED"}(N||(N={})),function(e){e.PartiallyBlocked="PARTIALLY_BLOCK",e.CompletelyBlocked="FULLY_BLOCK"}(L||(L={}));class P{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)}}!function(e){e.Evaluation="evaluation",e.ConfigurationUpdate="configurationUpdate"}(exports.EventType||(exports.EventType={}));const G={customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:N.NotRequired,dataApiDomain:"data.kameleoon.io",consentOptOutBehavior:L.PartiallyBlocked}};class B{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 z(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e]))}exports.KameleoonData=void 0,exports.DeviceType=void 0,exports.OperatingSystemType=void 0,exports.BrowserType=void 0,function(e){e.UniqueIdentifier="uniqueIdentifier",e.CustomData="customData",e.PageView="pageView",e.GeolocationData="geolocation",e.Browser="browser",e.Conversion="conversion",e.Cookie="cookie",e.Device="device",e.OperatingSystem="operatingSystem",e.UserAgent="userAgent",e.ApplicationVersion="applicationVersion",e.VisitsData="visitsData",e.KameleoonConversionScore="kameleoonConversionScore",e.Personalization="personalization",e.CBScores="cbScores",e.TargetedSegment="targetedSegment"}(exports.KameleoonData||(exports.KameleoonData={})),function(e){e.Phone="PHONE",e.Tablet="TABLET",e.Desktop="DESKTOP"}(exports.DeviceType||(exports.DeviceType={})),function(e){e.WindowsPhone="WINDOWS_PHONE",e.Windows="WINDOWS",e.Android="ANDROID",e.Linux="LINUX",e.Mac="MAC",e.IOS="IOS"}(exports.OperatingSystemType||(exports.OperatingSystemType={})),function(e){e.Chrome="CHROME",e.InternetExplorer="IE",e.Firefox="FIREFOX",e.Safari="SAFARI",e.Opera="OPERA",e.Other="OTHER"}(exports.BrowserType||(exports.BrowserType={}));const j={[exports.OperatingSystemType.Windows]:0,[exports.OperatingSystemType.Mac]:1,[exports.OperatingSystemType.IOS]:2,[exports.OperatingSystemType.Linux]:3,[exports.OperatingSystemType.Android]:4,[exports.OperatingSystemType.WindowsPhone]:5},q=z(j),H={[exports.BrowserType.Chrome]:0,[exports.BrowserType.InternetExplorer]:1,[exports.BrowserType.Firefox]:2,[exports.BrowserType.Safari]:3,[exports.BrowserType.Opera]:4,[exports.BrowserType.Other]:5},W=z(H),Y="off",X="warehouseAudiences";exports.SdkLanguageType=void 0,function(e){e.ANDROID="ANDROID",e.IOS="IOS",e.JAVA="JAVA",e.CSHARP="CSHARP",e.NODEJS="NODEJS",e.PHP="PHP",e.RUBY="RUBY",e.GO="GO",e.FLUTTER="FLUTTER",e.REACT="REACT",e.PYTHON="PYTHON",e.JAVASCRIPT="JAVASCRIPT",e.RUST="RUST"}(exports.SdkLanguageType||(exports.SdkLanguageType={}));const J={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 Q,Z,ee,te,ie,ae,oe,re,ne,se,le,ue,de;!function(e){e.And="AND",e.Or="OR"}(Q||(Q={})),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"}(Z||(Z={})),function(e){e.NEW="NEW",e.RETURNING="RETURNING"}(ee||(ee={})),function(e){e.ANY="ANY",e.EXACT="EXACT"}(te||(te={})),function(e){e.ALL="ALL",e.TEST="TEST",e.PERSO="PERSO"}(ie||(ie={})),function(e){e.Experiment="EXPERIMENT",e.Personalization="PERSONALIZATION",e.Any="ANY"}(ae||(ae={})),function(e){e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(oe||(oe={})),function(e){e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(re||(re={})),function(e){e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.OPTIONAL="OPTIONAL"}(ne||(ne={})),function(e){e.CURRENT_VISIT="CURRENT_VISIT",e.VISITOR="VISITOR"}(se||(se={})),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"}(le||(le={})),function(e){e.Minute="MINUTE",e.Hour="HOUR",e.Day="DAY",e.Week="WEEK",e.Month="MONTH"}(ue||(ue={})),function(e){e.Ascending="asc",e.Descending="desc"}(de||(de={}));const ce="localhost",pe=/^(\.?(([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 ge{static validateVersion(e){const t=e.split(".").map(e=>parseInt(e,10));for(;t.length<3;)t.push(0);return t.some(e=>isNaN(e))?s.Err(new c(exports.KameleoonException.SemanticVersionParse,e)):s.Ok(t.slice(0,3))}static validateDomain(e){return e?(e=ge.checkAndTrimProtocol(e.toLowerCase()),pe.test(e)||e===ce||K.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.`,s.Ok(e)):s.Err()}static validateNetworkDomain(e){return e?(e=(e=ge.checkAndTrimProtocol(e.toLowerCase())).replace(/^\.+|\.+$/g,""),pe.test(e)||e===ce?s.Ok(e):(K.error`The network domain ${e} is invalid.`,s.Err())):s.Err()}static checkAndTrimProtocol(e){const t=["http://","https://"];for(const i of t)if(e.startsWith(i)){e=e.substring(i.length),K.warning`The domain contains ${i}. Domain after protocol trimming: ${e}`;break}return e}}class he{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:e,visitorCode:t,targetingData:i,experimentId:a,variationConfiguration:o,clientConfiguration:r,packageInfo:n,dataManager:l}){if(K.debug`CALL: checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager)`,!e||!e.conditionsData.firstLevel.length){const e=s.Ok(!0);return K.debug`RETURN checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${e})`,e}if(!o){const e=s.Err(new c(exports.KameleoonException.Initialization));return K.debug`RETURN checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${e})`,e}let u={};const d=o.getStoredVariations(t);d.ok&&(u=d.data);const p=l.getTree(e);let g,h,v;p.hasTargetingType(le.SEGMENT)&&(g=l.trees,v=r.segments),p.hasTargetingType(le.TARGET_FEATURE_FLAG)&&(h=r.ruleMap);const m=p.evaluate({variationData:u,sdkInfo:n,segments:v,ruleMap:h,trees:g,targetingData:i,experimentId:a,visitorCode:t});return K.debug`RETURN checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${m})`,m}static convertTimeUnit(e,t){return e/{[ue.Minute]:exports.Milliseconds.Minute,[ue.Hour]:exports.Milliseconds.Hour,[ue.Day]:exports.Milliseconds.Day,[ue.Week]:exports.Milliseconds.Week,[ue.Month]:exports.Milliseconds.Month}[t]}static isCustomData(e){return e.data.type===exports.KameleoonData.CustomData}static updateCache({hasJsCssVariables:e,cacheManager:t,visitorCode:i,experimentId:a,variationId:o}){const r=t.getAliveItem(i),n=r?Object.assign({},r):{};n[a]={variationId:o,hasJsCssVariables:e,expirationTime:Date.now()+5*exports.Milliseconds.Second},t.add({key:i,data:n,lifetime:5})}static getTrackingCode(e,t){let i="window.kameleoonQueue=window.kameleoonQueue||[];";const a=e.getAliveItem(t);if(!a)return i;const o={};return Object.entries(a).forEach(([e,{variationId:t,expirationTime:a,hasJsCssVariables:r}])=>{const n=!r;a>Date.now()&&(i+=`window.kameleoonQueue.push(['Experiments.assignVariation',${e},${t},true]);`,i+=`window.kameleoonQueue.push(['Experiments.trigger',${e},${n}]);`,o[Number(e)]={variationId:t,expirationTime:a,hasJsCssVariables:r})}),e.add({key:t,data:o,lifetime:5}),i}static compareSemVer({version:e,compareVersion:t,operator:i}){const a=ge.validateVersion(e),o=ge.validateVersion(t);if(!a.ok)return s.Err(a.error);if(!o.ok)return s.Err(o.error);const[r,n,l]=a.data,[u,c,p]=o.data,[g,h,v]=[r===u,n===c,l===p];switch(i){case re.EQUAL:return s.Ok(g&&h&&v);case re.GREATER:return s.Ok(r>u||g&&n>c||g&&h&&l>p);case re.LOWER:return s.Ok(r<u||g&&n<c||g&&h&&l<p);default:K.error`Unknown version match type: ${i}`,d(i)}}static getVariationByHash(e,t){let i=0;for(const a of e)if(i+=a.exposition,i>=t)return a;return null}}class ve{static insertInOrderedListMutably({list:e,element:t,order:i}){if(e.includes(t))return;const a=e.findIndex(e=>i===de.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 me{constructor({urlAddress:e,title:t,referrers:i}){this.urlAddress=e,this.title=t,this.referrers=i,this.timestamps=[{time:Date.now(),status:exports.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{[exports.TrackingStatus.Sent]:e,[exports.TrackingStatus.Unsent]:t,[exports.TrackingStatus.Pending]:i}=this.timestamps.reduce((e,{status:t})=>(e[t]=!0,e),{[exports.TrackingStatus.Sent]:!1,[exports.TrackingStatus.Unsent]:!1,[exports.TrackingStatus.Pending]:!1});return!e||t||i?i&&!t?exports.TrackingStatus.Pending:exports.TrackingStatus.Unsent:exports.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:exports.KameleoonData.PageView,timestamps:this.timestamps,status:this.status,nonce:this.nonce}}static _fromRaw(e){const{urlAddress:t,title:i,referrers:a,timestamps:o,nonce:r}=e,n=new me({urlAddress:t,title:i,referrers:a});return n.timestamps=o,r&&(n._nonce=r),n}static _updateFromVisit(e,t){const i=e.pageEvents;if(i)for(const e of i){let i=[];const{time:a}=e,{href:o,title:r,referrersIndices:n}=e.data;let s;if("number"==typeof n[0]&&(i=n),t.has(o)){const e=t.get(o).timestamps;s=new me({urlAddress:o,title:r,referrers:i}),s.timestamps=[...e,{time:a,status:exports.TrackingStatus.Sent}]}else s=new me({urlAddress:o,title:r,referrers:i}),s.timestamps=[{time:a,status:exports.TrackingStatus.Sent}];t.set(o,s)}}}let fe=class e{constructor(t,i,...a){this._status=exports.TrackingStatus.Unsent,this.isIdentifier=!1;const o="boolean"==typeof i;"number"==typeof t?this._index=t:(this._name=t,this._index=e.UNDEFINED_INDEX),this.overwrite=!o||i,this.value=o?a:[i,...a].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:exports.KameleoonData.CustomData,isIdentifier:this.isIdentifier,status:this.status,overwrite:this.overwrite})}get status(){return this._isMappingIdentifier?exports.TrackingStatus.Unsent:this._status}static _fromRaw(t){const{index:i,value:a,status:o,isIdentifier:r,name:n,overwrite:s}=t;let l;return n?(l=new e(n,null==s||s,...a),l.index=i):l=new e(i,null==s||s,...a),l.status=o,l._isMappingIdentifier=r,l}set _isMappingIdentifier(e){this.isIdentifier=e}set status(e){this._status=e}static _updateFromVisit(t,i){var a;if(null===(a=t.customDataEvents)||void 0===a?void 0:a.length)for(let a=t.customDataEvents.length-1;a>=0;a--){const{index:o,valuesCountMap:r}=t.customDataEvents[a].data;i.has(o)||i.set(o,new e(o,...Object.keys(r)))}}set index(e){this._index=e}get index(){return this._index}get name(){return this._name}get values(){return this.value}};fe.UNDEFINED_INDEX=-1;let Ce=class e{constructor({goalId:e,revenue:t=0,negative:i=!1,metadata:a}){this.goalId=e,this.revenue=t,this.negative=i,this.status=exports.TrackingStatus.Unsent,this.id=Math.floor(1e6*Math.random()),this._metadata=a,this.assignedTime=Date.now()}set _id(e){this.id=e}set _nonce(e){this.nonce=e}static _fromInternal(t){var{assignedTime:i}=t,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 o=0;for(a=Object.getOwnPropertySymbols(e);o<a.length;o++)t.indexOf(a[o])<0&&Object.prototype.propertyIsEnumerable.call(e,a[o])&&(i[a[o]]=e[a[o]])}return i}(t,["assignedTime"]);const o=new e(a);return void 0!==i&&(o.assignedTime=i),o}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 e;return{goalId:this.goalId,nonce:this.nonce,revenue:this.revenue,negative:this.negative,type:exports.KameleoonData.Conversion,status:this.status,id:this.id,metadata:(null===(e=this.metadata)||void 0===e?void 0:e.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(t){const{goalId:i,revenue:a,negative:o,status:r,id:n,nonce:s,metadata:l,assignedTime:u}=t,d=e._fromInternal({goalId:i,revenue:a,negative:o,metadata:e.parseMetadata(l),assignedTime:u});return d._id=n,d.status=r,s&&(d._nonce=s),d}static parseMetadata(e){return(null==e?void 0:e.map(e=>fe._fromRaw(e)))||void 0}static _listFromVisit(t){var i,a;const o=[];if(!(null===(i=t.conversionEvents)||void 0===i?void 0:i.length))return[];if(null===(a=null==t?void 0:t.conversionEvents)||void 0===a?void 0:a.length)for(const i of t.conversionEvents){const{goalId:t,revenue:a,negative:r}=i.data,n=e._fromInternal({goalId:t,revenue:a,negative:r,assignedTime:i.time});n.status=exports.TrackingStatus.Sent,o.push(n)}return o}static _updateFromVisit(t,i){var a;if(null===(a=t.conversionEvents)||void 0===a?void 0:a.length)for(const a of t.conversionEvents){const{goalId:t}=a.data;if(!i.has(t)){const o=e._fromInternal({goalId:t,assignedTime:a.time});o.status=exports.TrackingStatus.Sent,i.set(t,o)}}}},ye=class e{constructor(e,t){this.browser=e,this.version=t,this.status=exports.TrackingStatus.Unsent}get url(){if(!this.browser)return"";const e=this.version?m+this.version:"";return h+k+this.browser+v+H[this.browser]+e}get data(){return{browser:this.browser,type:exports.KameleoonData.Browser,version:this.version,status:this.status}}static _fromRaw(t){const{browser:i,version:a,status:o}=t,r=new e(i,a);return r.status=o,r}static _fromVisit(t){if(!t.staticDataEvent)return;const{browser:i,browserIndex:a,browserVersion:o}=t.staticDataEvent.data;if(i||"number"==typeof a){const t=null!=i?i:W[a];return o?new e(t,o):new e(t)}}},xe=class e{constructor(e){this.device=e,this.status=exports.TrackingStatus.Unsent}get url(){return this.device?h+f+this.device:""}get data(){return{device:this.device,type:exports.KameleoonData.Device,status:this.status}}static _fromRaw(t){const{device:i,status:a}=t,o=new e(i);return o.status=a,o}static _fromVisit(t){var i;if(null===(i=t.staticDataEvent)||void 0===i?void 0:i.data.deviceType)return new e(t.staticDataEvent.data.deviceType)}},De=class e{constructor(e){this.operatingSystem=e,this.status=exports.TrackingStatus.Unsent}get url(){return this.operatingSystem?h+T+this.operatingSystem+I+j[this.operatingSystem]:""}get data(){return{operatingSystem:this.operatingSystem,type:exports.KameleoonData.OperatingSystem,status:this.status}}static _fromRaw(t){const{operatingSystem:i,status:a}=t,o=new e(i);return o.status=a,o}static _fromVisit(t){if(!t.staticDataEvent)return;const{os:i,osIndex:a}=t.staticDataEvent.data;if(i||"number"==typeof a){const t=null!=i?i:q[a];return new e(t)}}};class Ee{constructor({country:e,region:t,city:i,postalCode:a,coordinates:o}){this.country=e,this.region=t,this.city=i,this.postalCode=a,this.coordinates=o,this.status=exports.TrackingStatus.Unsent}get url(){const e=this.region?"&region="+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:exports.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:o,coordinates:r,status:n}=e,s=new Ee({country:t,region:i,city:a,postalCode:o,coordinates:r});return s.status=n,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:o,city:r}=i||{};return a?new Ee(o&&r?{country:a,region:o,city:r}:o?{country:a,region:o}:{country:a}):void 0}}class Te{constructor(e){this.status=exports.TrackingStatus.Sent,this.visits=e,this._visitNumber=e.length?e.length-1:0}get visitNumber(){return this._visitNumber}get url(){return""}get data(){return{visits:this.visits,visitNumber:this._visitNumber,type:exports.KameleoonData.VisitsData,status:this.status}}get isSent(){return!0}set timestamp(e){ve.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 Ie{constructor(e){this.kcs=e,this.status=exports.TrackingStatus.Sent}get url(){return""}get data(){return{kcs:this.kcs,type:exports.KameleoonData.KameleoonConversionScore,status:this.status}}}class ke{constructor(e,t,i=Date.now()){this.id=e,this.variationId=t,this.status=exports.TrackingStatus.Sent,this.assignedTime=i}get url(){return""}get data(){return{id:this.id,variationId:this.variationId,type:exports.KameleoonData.Personalization,status:exports.TrackingStatus.Sent,assignedTime:this.assignedTime}}static _fromRaw(e){return new ke(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 o=new ke(e,a,i.time);t.set(e,o)}}}}class Se{constructor(e){this.values=new Map(Object.entries(e).map(([e,t])=>[Number(e),this.extractVarIds(t)])),this.cbs=e,this.status=exports.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:exports.KameleoonData.CBScores,status:this.status}}static _fromRaw(e){const t=new Se(e.cbs);return t.status=e.status,t}}class Ve{constructor({filters:e,dataManager:t,visitorCode:i}){this.visitsData=new Te([]),this.visitorData=[],this.storageVisitorData=[],this.experimentData={},this.singleDataTypes={[exports.KameleoonData.Device]:null,[exports.KameleoonData.Browser]:null,[exports.KameleoonData.GeolocationData]:null,[exports.KameleoonData.OperatingSystem]:null,[exports.KameleoonData.KameleoonConversionScore]:null,[exports.KameleoonData.CBScores]:null},this.multipleDataTypes={[exports.KameleoonData.CustomData]:new Map,[exports.KameleoonData.PageView]:new Map,[exports.KameleoonData.Conversion]:new Map,[exports.KameleoonData.Personalization]:new Map},this.filters=e,this.dataManager=t,this.visitorDataTypes=t.getVisitorStoredDataTypes(i)}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[e,t]of Object.entries(this.multipleDataTypes))if(t.size)switch(e){case exports.KameleoonData.PageView:this.visitorData.push(...t.values()),this.storageVisitorData.push(...t.values());break;case exports.KameleoonData.Personalization:case exports.KameleoonData.Conversion:this.storageVisitorData.push(...t.values());break;case exports.KameleoonData.CustomData:t.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 Ie(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,o;if(this.visitsData.visitNumber<=t&&(null===(i=e.staticDataEvent)||void 0===i?void 0:i.data.visitNumber)){const i=null!==(o=null===(a=e.staticDataEvent)||void 0===a?void 0:a.data.visitNumber)&&void 0!==o?o:0;this.visitsData.updateVisitNumber(i+t)}}processCbs(e){if(this.filters.cbs&&e){const t=new Se(e);this.storageVisitorData.push(t)}}processBrowser(e){if(this.filters.browser&&!this.singleDataTypes[exports.KameleoonData.Browser]){const t=ye._fromVisit(e);t&&(this.visitorDataTypes.has(exports.KameleoonData.Browser)||this.storageVisitorData.push(t),this.visitorData.push(t),this.singleDataTypes[exports.KameleoonData.Browser]=t)}}processDevice(e){if(this.filters.device&&!this.singleDataTypes[exports.KameleoonData.Device]){const t=xe._fromVisit(e);t&&(this.visitorDataTypes.has(exports.KameleoonData.Device)||this.storageVisitorData.push(t),this.visitorData.push(t),this.singleDataTypes[exports.KameleoonData.Device]=t)}}processOperatingSystem(e){if(this.filters.operatingSystem&&!this.singleDataTypes[exports.KameleoonData.OperatingSystem]){const t=De._fromVisit(e);t&&(this.visitorDataTypes.has(exports.KameleoonData.OperatingSystem)||this.storageVisitorData.push(t),this.visitorData.push(t),this.singleDataTypes[exports.KameleoonData.OperatingSystem]=t)}}processGeolocationData(e){if(this.filters.geolocation&&!this.singleDataTypes[exports.KameleoonData.GeolocationData]){const t=Ee._fromVisit(e);t&&(this.visitorDataTypes.has(exports.KameleoonData.GeolocationData)||this.storageVisitorData.push(t),this.visitorData.push(t),this.singleDataTypes[exports.KameleoonData.GeolocationData]=t)}}processCustomData(e){this.filters.customData&&fe._updateFromVisit(e,this.multipleDataTypes[exports.KameleoonData.CustomData])}processConversion(e){if(this.filters.conversions){Ce._updateFromVisit(e,this.multipleDataTypes[exports.KameleoonData.Conversion]);const t=Ce._listFromVisit(e);t.length&&this.visitorData.push(...t)}}processPageView(e){this.filters.pageViews&&me._updateFromVisit(e,this.multipleDataTypes[exports.KameleoonData.PageView])}processExperiments(e){if(this.filters.experiments&&e.experimentEvents)for(const t of e.experimentEvents){const{id:e,variationId:i}=t.data;this.experimentData[e]={variationId:i,isTargetedRule:!1,status:exports.TrackingStatus.Unsent,assignedTime:t.time}}}processPersonalization(e){this.filters.personalization&&ke._updateFromVisit(e,this.multipleDataTypes[exports.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 we{static parseFeatureVariable(e){const{key:t,type:i,value:a}=e;switch(i){case exports.VariableType.BOOLEAN:return s.Ok({key:t,type:i,value:Boolean(a)});case exports.VariableType.JS:case exports.VariableType.CSS:case exports.VariableType.STRING:return s.Ok({key:t,type:i,value:String(a)});case exports.VariableType.NUMBER:const o=Number(a);return Number.isNaN(o)?s.Err(new c(exports.KameleoonException.NumberParse,String(a))):s.Ok({key:t,type:i,value:o});case exports.VariableType.JSON:try{const a=JSON.parse(String(e.value));return s.Ok({key:t,type:i,value:a})}catch(e){return s.Err(new c(exports.KameleoonException.JSONParse,e))}default:d(i)}}static parseVisitorData({data:e,filters:t,visitorCode:i,dataManager:a,variationConfiguration:o}){const r=new Ve({filters:t,dataManager:a,visitorCode:i}),{currentVisit:n,previousVisits:s,kcs:l,cbs:u}=e;if(!(null==s?void 0:s.length)&&!n)return{visitorData:[],storageVisitorData:[],visitsData:new Te([])};n&&(r.processVisit(n),r.processVisitNumber(n,0)),null==s||s.forEach((e,t)=>{r.processVisit(e),r.processVisitsData(e),r.processVisitNumber(e,t+1)}),r.processKcs(l),r.processCbs(u),r.processMultipleDataTypes();const d=r.processMappingIdentifier(null!=n?n:null==s?void 0:s[0]),{visitorData:c,storageVisitorData:p,visitsData:g,experimentData:h}=r.data;return o.updateStoredVariations(i,h),{visitorData:c,storageVisitorData:p,visitsData:g,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 Re{constructor({updateInterval:e,urlProvider:t,storage:i,requester:a,dataManager:o,eventSource:r,externalVisitorCodeManager:n,eventManager:s,externalPackageInfo:l,defaultDataFile:u}){this.updateConfigurationIntervalId=null,this.updateType=O.Polling,this.configurationData=G,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=L.PartiallyBlocked,this.cachedDataFile=null,this.CACHE_REVALIDATE_PERIOD=90*exports.Milliseconds.Minute,this.urlProvider=t,this.requester=a,this.updateInterval=e,this.lastUpdate=new Date,this.storage=i,this.dataManager=o,this.eventManager=s,this.visitorCodeManager=n,this.eventSource=r,this.externalPackageInfo=l,this.defaultDataFile=u}initialize(){return l(this,0,void 0,function*(){if(K.debug("CALL: ClientConfiguration.initialize()"),this.readStorageData(),this.checkShouldUpdate()){const e=yield this.updateClientConfiguration();if(!e.ok)return K.error("Error occurred during client configuration update"),e;if(e.data)return K.debug("RETURN: ClientConfiguration.initialize()"),s.Ok()}return this.updateType!==O.RealTime||this.eventSource.isOpen?(this.updateType===O.Polling&&this.handlePollingUpdates(),K.debug("RETURN: ClientConfiguration.initialize()"),s.Ok()):(this.handleRealTimeUpdates(),K.debug("RETURN: ClientConfiguration.initialize()"),s.Ok())})}refreshDataFileIfStale(){if(!this.checkShouldUpdate())return Promise.resolve(s.Ok(!1));if(!this.refreshDataFileIfStalePromise){const e=this.fetchClientConfiguration().then(e=>e.ok?s.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(e=>{this.updateClientConfiguration(e).then(t=>{t.ok&&this.eventManager.fireEvent(exports.EventType.ConfigurationUpdate,{timestamp:e})})}),this.eventSource.onError(e=>{K.error`Error occurred during real-time update: ${e}. Switching to polling updates while the connection is not restored.`,this.updateType=O.Polling,this.handlePollingUpdates()})}handlePollingUpdates(){this.cleanupHandlers();try{const e=this.lastUpdate.getTime(),t=Date.now(),i=Math.max(this.updateInterval-(t-e),0);setTimeout(()=>l(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 o=new Map;e.variables.forEach(e=>{try{const t=we.parseFeatureVariable(e).throw();o.set(e.key,t)}catch(i){K.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:o})});const o=t.rules.map(e=>{const t=new Map;return e.variationByExposition.forEach(i=>{const o=a.get(i.variationKey);o&&t.set(o.key,{name:o.name,key:o.key,id:i.variationId,experimentId:e.experimentId,variables:o.variables})}),{variations:t}});e.featureFlags.set(i,{variations:a,environmentEnabled:t.environmentEnabled,rules:o,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:o,variationByExposition:r}=i,n=new Map;r.forEach(({variationKey:e,variationId:t})=>{"number"==typeof t&&n.set(e,t)}),t.set(a,{featureId:e.id,experimentId:o,variations:n})}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,o=new Map;a.forEach(({variationKey:e,variationId:t})=>{"number"==typeof t&&o.set(e,t)}),t.set(e,{type:i.type,variations:o})}return this.mappedExperiments=t,t}get holdout(){return this.holdoutData}get meGroups(){return this.meGroupsData}get isConsentRequired(){return this.configuration.consentType===N.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===F.TARGETED_DELIVERY))return!0;return!1}checkShouldUpdate(){const{configuration:e}=this.configurationData;return this.updateType=e.realTimeUpdate?O.RealTime:O.Polling,!this.featureFlags.size||this.lastUpdate.getTime()<Date.now()-this.updateInterval}readStorageData(){var e,t,i;K.debug("CALL: ClientConfiguration.readStorageData()");const a=this.storage.read();if(a.ok){let{data:o,lastUpdate:r,lastModified:n,requestTime:s}=a.data,l=!1;if(this.defaultDataFile)try{const a=JSON.parse(this.defaultDataFile);this.defaultDataFile=void 0,this.usedDefaultDataFile=!0;const r=null!==(t=null!==(e=o.dateModified)&&void 0!==e?e:s)&&void 0!==t?t:-1,n=null!==(i=a.dateModified)&&void 0!==i?i:0;(!s||n>r)&&(o=a,l=!0)}catch(e){K.error`Error parsing default data file: ${String(e)}`}this.updateConfigurationData(o,l),this.lastUpdate=this.usedDefaultDataFile?new Date(0):new Date(Date.parse(r)),this.lastModified=n,this.requestTime=s}K.debug`RETURN: ClientConfiguration.readStorageData() -> (result: ${a.ok})`}updateClientConfiguration(e){return l(this,0,void 0,function*(){const t=Date.now();if(this.usedDefaultDataFile)return this.updateClientConfigurationInBackground(),s.Ok(!1);if(this.requestTime&&!e&&!this.externalPackageInfo.isServer){if(t-this.requestTime<=this.CACHE_REVALIDATE_PERIOD)return this.updateClientConfigurationInBackground(),s.Ok(!1);K.debug`Cached configuration data has expired. Fetching fresh data.`}return this.fetchClientConfiguration(e)})}fetchClientConfiguration(e){return l(this,0,void 0,function*(){const t=yield this.requester.getClientConfiguration(e,this.lastModified);return this.applyNewConfigurationDataFromResponse(t)})}updateClientConfigurationInBackground(){setTimeout(()=>l(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 l(this,0,void 0,function*(){if(this.requestTime=Date.now(),!e.ok)return this.featureFlags.size?(K.error("Error occurred while updating configuration. Existing configuration will be used as a fallback."),s.Ok(!0)):e;if(void 0===e.data.configuration)return this.updateStorageData(),s.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 o=this.updateStorageData();if(!o.ok)return o;const r=a.configuration.realTimeUpdate?O.RealTime:O.Polling,n=r!==this.updateType;return n&&(this.updateType=r,K.info`Configuration update type was toggled to ${O[r]}`,yield this.initialize()),this.blockingBehaviourMode=this.consentBlockingBehaviourFromStr(a.configuration.consentOptOutBehavior),s.Ok(n)})}updateConfigurationData(e,t=!0){const{configuration:i,featureFlags:a,customData:o,holdout:r,segments:n,dateModified:s}=e;let l=n?new Map(n.map(e=>[e.id.toString(),e])):null,u=null;if(t&&(null==o?void 0:o.length)){u=new Map;for(let e of o){if(void 0===e.id){u=null;break}u.set(e.id,e.index)}}const d=new Map;for(const e of a)d.set(e.featureKey,e),t&&(this.updateFeatureFlagSegments(e,l),this.updateFeatureFlagBucketingCustomDataId(e,u));this.featureFlagsData=d,(null==o?void 0:o.length)&&(this.dataManager.customDataIndexes=o),this.meGroupsData=this.makeMEGroups(a),this.holdoutData=null!=r?r:null,this.configurationData={configuration:i,customData:o,holdout:r,dateModified:s},this.urlProvider.dataApiDomain=e.configuration.dataApiDomain,this.updateConsentRequired(),this.segmentsData=l,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 B(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===L.PartiallyBlocked||e===L.CompletelyBlocked?e:(K.error(`Unexpected consent blocking type '${e}'`),L.PartiallyBlocked)}}var be;class Ke{constructor(e,t){K.debug`CALL: new ClientSettings(siteCode: ${e}, configuration: ${t})`,this.siteCode=e,this.environment=this.getEnvironment(t),this.networkDomain=this.getNetworkDomain(t),this.updateInterval=this.getUpdateInterval(t),this.cleanupInterval=this.getCleanupInterval(t),this.requestTimeout=this.getRequestTimeout(t),this.trackingInterval=this.getTrackingInterval(t),this.trackRetryDelay=5*exports.Milliseconds.Second,K.debug`RETURN: new ClientSettings(siteCode: ${e}, configuration: ${t})`}getTrackingInterval(e){const{MIN_TRACKING_INTERVAL_MS:t,MAX_TRACKING_INTERVAL_MS:i,DEFAULT_TRACKING_INTERVAL_MS:a}=Ke;return"number"==typeof(null==e?void 0:e.trackingInterval)?e.trackingInterval<t?(K.warning(`Tracking interval must not be shorter than ${t} ms. Minimum possible interval was applied.`),t):e.trackingInterval>i?(K.warning(`Tracking interval must not be longer than ${i} ms. Maximum possible interval was applied.`),i):e.trackingInterval:a}getEnvironment(e){return(null==e?void 0:e.environment)?e.environment:exports.Environment.Production}getCleanupInterval(e){return"number"==typeof(null==e?void 0:e.targetingDataCleanupInterval)?e.targetingDataCleanupInterval<1?(K.warning("Targeting data cleanup interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*exports.Milliseconds.Minute):e.targetingDataCleanupInterval*exports.Milliseconds.Minute:null}getUpdateInterval(e){return"number"==typeof(null==e?void 0:e.updateInterval)?e.updateInterval<1?(K.warning("Update interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*exports.Milliseconds.Minute):e.updateInterval*exports.Milliseconds.Minute:60*exports.Milliseconds.Minute}getNetworkDomain(e){const t=ge.validateNetworkDomain(null==e?void 0:e.networkDomain);return t.ok?t.data:null}getRequestTimeout(e){return"number"==typeof(null==e?void 0:e.requestTimeout)?e.requestTimeout:10*exports.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}}}be=Ke,Ke.DEFAULT_TRACKING_INTERVAL_MS=1e3,Ke.MIN_TRACKING_INTERVAL_MS=be.DEFAULT_TRACKING_INTERVAL_MS,Ke.MAX_TRACKING_INTERVAL_MS=5e3;let Ae=class e{constructor(e){this.cookie=e,this.status=exports.TrackingStatus.Sent}static fromString(t){if(!t)return new e([]);const i=t.split(";").map(e=>{const[i,a]=e.trim().split("=");return i?{key:i,value:a}:(K.warning`Cookie string has an empty key: ${t}`,null)}).filter(e=>null!==e);return new e(i)}get url(){return""}get data(){return{cookie:this.cookie,type:exports.KameleoonData.Cookie,status:this.status}}};class Oe{constructor(e){this._value=e,this.status=exports.TrackingStatus.Sent}get url(){return""}get data(){return{value:this._value,type:exports.KameleoonData.UniqueIdentifier,status:exports.TrackingStatus.Sent}}static _fromRaw(e){return new Oe(e.value)}}class Fe{constructor(e=null,t){this.cleanupInterval=e,this.packageInfo=t}mutUpdateData({infoData:e,visitorCode:t,mutData:i,dataItem:a,extendTtl:o}){let r,{visitorReference:n,data:s,isReference:l}=this.dereferenceData(i,t);switch(this.packageInfo.isServer&&l&&!i[n]&&(e.mappingIdentifiers&&delete e.mappingIdentifiers[t],delete i[t],n=t),o&&(r=this.cleanupInterval?Date.now()+this.cleanupInterval:0),a.data.type){case exports.KameleoonData.CustomData:this.updateCustomData({expirationTime:r,customData:a,visitorCode:n,mutData:s});break;case exports.KameleoonData.PageView:this.updatePageView({expirationTime:r,pageView:a,visitorCode:n,mutData:s});break;case exports.KameleoonData.Conversion:this.updateConversion({expirationTime:r,conversion:a,visitorCode:n,mutData:s});break;case exports.KameleoonData.VisitsData:this.updateVisitsData({expirationTime:r,visitsData:a,visitorCode:n,mutData:s});break;case exports.KameleoonData.Personalization:this.updatePersonalization({expirationTime:r,personalization:a,visitorCode:n,mutData:s});break;case exports.KameleoonData.TargetedSegment:this.updateTargetedSegment({expirationTime:r,targetedSegment:a,visitorCode:n,mutData:s});break;default:this.updateCommonData({expirationTime:r,commonData:a,visitorCode:n,mutData:s})}return r}mutCleanupData(e,t){var i;if(!this.cleanupInterval)return null;let a=0;for(const[o,r]of Object.entries(e)){if("string"==typeof r){this.removeReference({mutData:e,visitorCode:o,linkedVisitor:r,infoData:t});continue}let n=0;for(const e of Object.keys(r)){const t=e;let i;switch(t){case exports.KameleoonData.CustomData:case exports.KameleoonData.PageView:case exports.KameleoonData.Conversion:case exports.KameleoonData.Personalization:i=this.deleteNestedExpiredField(r,t);break;default:i=this.deleteExpiredField(r,t)}(!n||i&&i<n)&&(n=i)}Object.keys(e[o]).length?(!a||n&&n<a)&&(a=n):(delete e[o],this.packageInfo.isServer&&(null!==(i=t.mappingIdentifiers)&&void 0!==i||(t.mappingIdentifiers={}),delete t.mappingIdentifiers[o]))}return a}mutAddUnsentData({mutData:e,visitorCode:t,dataType:i}){const a=e.unsentData[t];if(a&&a.length){const o=new Set([...a]);o.add(i),e.unsentData[t]=Array.from(o)}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:e,mutData:t,pageView:i,expirationTime:a}){const{data:o}=i,r=t[e]&&exports.KameleoonData.PageView in t[e]&&o.urlAddress in t[e][exports.KameleoonData.PageView],n={expirationTime:a,visitorCode:e,data:t,key:exports.KameleoonData.PageView,nestedKey:o.urlAddress,value:o};if(r){const i=t[e][exports.KameleoonData.PageView][o.urlAddress].timestamps;for(const e of i){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(n)}else this.createNestedField(n)}updateCustomData({visitorCode:e,customData:t,mutData:i,expirationTime:a}){const{data:o}=t,r=i[e]&&exports.KameleoonData.CustomData in i[e],n={expirationTime:a,visitorCode:e,data:i,key:exports.KameleoonData.CustomData,nestedKey:o.index.toString(),value:o};r?this.updateNestedField(n):this.createNestedField(n)}updateConversion({conversion:e,mutData:t,visitorCode:i,expirationTime:a}){const{data:o}=e,r=t[i]&&exports.KameleoonData.Conversion in t[i],n={expirationTime:a,visitorCode:i,data:t,key:exports.KameleoonData.Conversion,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(n):this.createNestedField(n)}updateVisitsData({visitorCode:e,mutData:t,visitsData:i,expirationTime:a}){var o,r;const{data:n}=i,s=t[e]&&exports.KameleoonData.VisitsData in t[e],l={expirationTime:a,data:t,key:exports.KameleoonData.VisitsData,value:n,visitorCode:e};if(s){const i=t[e][exports.KameleoonData.VisitsData];i.visits.forEach(e=>{ve.insertVisitInOrderedListMutably({list:n.visits,visit:e})});const a=Math.max(null!==(o=n.visitNumber)&&void 0!==o?o:n.visits.length-1,n.visits.length-1,null!==(r=i.visitNumber)&&void 0!==r?r:0);this.updateField(Object.assign(Object.assign({},l),{value:Object.assign(Object.assign({},n),{visits:n.visits,visitNumber:a})}))}else this.createField(l)}updatePersonalization({visitorCode:e,mutData:t,personalization:i,expirationTime:a}){const{data:o}=i,r=t[e]&&exports.KameleoonData.Personalization in t[e],n={expirationTime:a,visitorCode:e,data:t,key:exports.KameleoonData.Personalization,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(n):this.createNestedField(n)}updateTargetedSegment({visitorCode:e,mutData:t,targetedSegment:i,expirationTime:a}){const{data:o}=i,r=t[e]&&exports.KameleoonData.TargetedSegment in t[e],n={expirationTime:a,visitorCode:e,data:t,key:exports.KameleoonData.TargetedSegment,nestedKey:o.id.toString(),value:o};r?this.updateNestedField(n):this.createNestedField(n)}updateCommonData({visitorCode:e,mutData:t,commonData:i,expirationTime:a}){const{data:o}=i,r=t[e]&&o.type in t[e],n={expirationTime:a,data:t,key:o.type,visitorCode:e,value:o};r?this.updateField(n):this.createField(n)}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:o}){var r;const n=i[a][e];i[a][e]=Object.assign(Object.assign({},t),{expirationTime:null!==(r=null!=o?o:n.expirationTime&&n.expirationTime)&&void 0!==r?r:Date.now()})}createField({key:e,value:t,data:i,visitorCode:a,expirationTime:o}){i[a]=Object.assign(Object.assign({},i[a]),{[e]:Object.assign(Object.assign({},t),{expirationTime:o})})}updateNestedField({key:e,nestedKey:t,value:i,data:a,visitorCode:o,expirationTime:r}){var n;const s=a[o][e][t];a[o][e][t]=Object.assign(Object.assign({},i),{expirationTime:null!==(n=null!=r?r:null==s?void 0:s.expirationTime)&&void 0!==n?n:Date.now()})}createNestedField({key:e,nestedKey:t,value:i,data:a,visitorCode:o,expirationTime:r}){var n;(null===(n=a[o])||void 0===n?void 0:n[e])?a[o]=Object.assign(Object.assign({},a[o]),{[e]:Object.assign(Object.assign({},a[o][e]),{[t]:Object.assign(Object.assign({},i),{expirationTime:r})})}):a[o]=Object.assign(Object.assign({},a[o]),{[e]:{[t]:Object.assign(Object.assign({},i),{expirationTime:r})}})}}class $e{constructor({browserType:e,visitNumber:t,timeSincePreviousVisit:i,os:a,deviceType:o,browserVersion:r}){this.browserType=e,this.visitNumber=t,this.timeSincePreviousVisit=i,this.os=a,this.deviceType=o,this.browserVersion=r}get url(){const e=this.browserVersion?m+this.browserVersion:"",t=this.browserType?k+this.browserType:"",i=this.browserType?v+H[this.browserType]:"",a=this.os?T+this.os:"",o=this.os?I+j[this.os]:"",r=this.deviceType?f+this.deviceType:"",n=void 0!==this.visitNumber?"&visitNumber="+this.visitNumber:"",s=void 0!==this.timeSincePreviousVisit?"&timeSincePreviousVisit="+this.timeSincePreviousVisit:"";return h+t+i+e+n+s+a+o+r}}class Me{static setConditionFactoryInstance(e){this.conditionFactoryInstance=e}static createCondition(e){return this.conditionFactoryInstance.createCondition(e)}}class Ne{constructor(e,t,i){var a;if(this.inverseResult=!1,this.isOperator(e))this.nodeValue=e;else{const t=Me.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===Q.And||e===Q.Or}}class Le{constructor(e){this.error=null,this.targetingTypes=new Set,K.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 Ne(e)));return this.buildTree(i,t)});this.tree=this.buildTree(a,i),K.debug`RETURN: new Tree(segment: ${e})`}evaluate(e){const t=this.evaluateNode(this.tree,e);return this.error?s.Err(this.error):s.Ok(t)}hasTargetingType(e){return this.targetingTypes.has(e)}evaluateNode(e,t){if(this.isLeafNode(e)){if(e.error)return e.error.type===exports.KameleoonException.TargetingCondition;const i=e.value.evaluate(t);return i.ok?e.inverse?!i.data:i.data:(this.error=i.error,!1)}if(this.isNonLeafNode(e))switch(e.value){case Q.And:return this.evaluateNode(e.left,t)&&this.evaluateNode(e.right,t);case Q.Or:return this.evaluateNode(e.left,t)||this.evaluateNode(e.right,t)}return!1}isLeafNode(e){return!Boolean(e.left&&e.right)}isNonLeafNode(e){return Boolean(e.left&&e.right&&(e.value===Q.Or||e.value===Q.And))}buildTree(e,t){if(1===e.length)return e[0];for(const i of t){const t=e.shift(),a=e.shift(),o=new Ne(i,t,a);e.unshift(o)}return e[0]}flattenSegment(e){const{firstLevel:t,firstLevelOrOperators:i}=e.conditionsData,a=[];return t.forEach(e=>{const{conditions:t,orOperators:i}=e,o={operators:this.convertOperators(i),conditions:t};a.push(o)}),{topLevelOperators:this.convertOperators(i),nestedConditions:a}}convertOperators(e){return e.map(e=>e?Q.Or:Q.And)}}function _e({targetingData:e,sdkInfo:t},i,a){var o;const r=null==e?void 0:e[exports.KameleoonData.VisitsData];if(!(null===(o=null==r?void 0:r.visits)||void 0===o?void 0:o.length)||null==i&&null==a)return 0;const{visits:n}=r;let s=1;i!==se.CURRENT_VISIT&&(s=null!=a?t.isServer?a-1:a:n.length);const l=n[Math.max(0,n.length-s)];return"number"==typeof l?l:l.timeStarted}class Ue{constructor({campaignType:e,visitCount:t,visitScope:i}){this.campaignType=e,this.visitCount=t,this.visitScope=i}evaluate(e){return s.Ok(this.checkCondition(e))}checkCondition(e){const t=_e(e,this.visitScope,this.visitCount);switch(this.campaignType){case ae.Experiment:return this.checkExperiment(e,t);case ae.Personalization:return this.checkPersonalization(e,t);case ae.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,o=null;for(const r of i){const i=e.variationData[r];if((!(null==i?void 0:i.assignedTime)||i.assignedTime>=t)&&(a++,o=r,a>1))break}return 0===a||1===a&&null!==e.experimentId&&o===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 Pe{constructor({device:e}){this.device=e}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.Device];if(t){const{device:e}=t;return s.Ok(e===this.device)}return s.Ok(!1)}}class Ge{constructor({browser:e,version:t,versionMatchType:i}){this.browser=e,this.version=t,this.versionMatchType=i}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.Browser];if(t){const e=this.checkCondition(t);return this.error?s.Err(this.error):s.Ok(e)}return s.Ok(!1)}checkCondition(e){const{browser:t,version:i}=e;if("string"!=typeof this.browser)return!1;if(!this.version)return t===this.browser;if(!this.versionMatchType||"number"!=typeof i)return!1;const a=parseFloat(this.version);switch(isNaN(a)&&(K.error`Failed to parse version: ${this.version} in Browser condition`,this.error=new c(exports.KameleoonException.VersionParse,this.version)),this.versionMatchType){case re.EQUAL:return t===this.browser&&i===a;case re.GREATER:return t===this.browser&&i>a;case re.LOWER:return t===this.browser&&i<a;default:K.error`Unexpected comparing operation for Browser condition: ${this.versionMatchType}`,d(this.versionMatchType)}}}class Be{constructor({goalId:e,visitCount:t,visitScope:i}){this.goalId=e,this.visitCount=t,this.visitScope=i}evaluate(e){const{targetingData:t}=e,i=null==t?void 0:t[exports.KameleoonData.Conversion];if(!i)return s.Ok(!1);const a=Object.values(i);if(!a.length)return s.Ok(!1);const o=_e(e,this.visitScope,this.visitCount);return s.Ok(a.some(e=>!!e&&(null==this.goalId||e.goalId===this.goalId)&&(!e.assignedTime||e.assignedTime>=o)))}}class ze{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:e}){var t;const i=null===(t=null==e?void 0:e[exports.KameleoonData.CustomData])||void 0===t?void 0:t[this.customDataIndex];if(this.matchType===Z.UNDEFINED)return s.Ok(!i);if(i){const{value:e}=i,t=this.checkCondition(e);return this.error?s.Err(this.error):s.Ok(t)}return s.Ok(!1)}checkCondition(e){if("string"!=typeof this.conditionValue&&this.matchType!==Z.TRUE&&this.matchType!==Z.FALSE&&this.matchType!==Z.RANGE)return K.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`,!1;const t=this.conditionValue;if(this.matchType===Z.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===Z.RANGE){const t=this.parseRange(this.range);if(!t.ok)return this.error=t.error,!1;const[i,a]=t.data,o=e=>e>=i&&e<=a;return Array.isArray(e)?e.some(e=>o(Number(e))):o(Number(e))}if(Array.isArray(e))return e.some(e=>this.checkCondition(e));switch(this.matchType){case Z.CONTAINS:return e.includes(t);case Z.EXACT:return e===this.conditionValue;case Z.REGULAR_EXPRESSION:return we.parseRegExp(t).test(e);case Z.LOWER:return Number(e)<Number(this.conditionValue);case Z.EQUAL:return Number(e)===Number(this.conditionValue);case Z.GREATER:return Number(e)>Number(this.conditionValue);case Z.TRUE:return"true"===e.toLowerCase();case Z.FALSE:return"false"===e.toLowerCase();default:return K.error`Unexpected comparing operation for CustomData condition: ${this.matchType}`,!1}}parseArray(e){try{const t=JSON.parse(e);if(Array.isArray(t))return s.Ok(t)}catch(t){return K.error`Failed to parse array: ${e} in CustomData condition`,s.Err(new c(exports.KameleoonException.AmongValuesCheck,t,e))}return s.Ok([])}parseRange(e){return e&&2===e.length?s.Ok(e):(K.error`Failed to parse range: ${e} in CustomData condition`,s.Err(new c(exports.KameleoonException.RangeCheck,e)))}}class je{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 qe{constructor({matchType:e,title:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.PageView];if(!t)return s.Ok(!1);const i=je.getLatest(t);return s.Ok(this.checkCondition(i.title))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case oe.CONTAINS:return e.includes(this.conditionValue);case oe.EXACT:return e===this.conditionValue;case oe.REGULAR_EXPRESSION:return we.parseRegExp(this.conditionValue).test(e);default:return K.error`Unexpected comparing operation for PageTitle condition: ${this.matchType}`,!1}}}class He{constructor({matchType:e,url:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.PageView];if(!t)return s.Ok(!1);const i=je.getLatest(t);return s.Ok(this.checkCondition(i.urlAddress))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case oe.CONTAINS:return e.includes(this.conditionValue);case oe.EXACT:return e===this.conditionValue;case oe.REGULAR_EXPRESSION:return we.parseRegExp(this.conditionValue).test(e);default:return K.error`Unexpected comparing operation for PageUrl condition: ${this.matchType}`,!1}}}class We{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 s.Ok(!1);if("string"!=typeof this.conditionValue)return s.Ok(t===this.sdkLanguage);if(!this.versionMatchType)return s.Ok(!1);if(t!==this.sdkLanguage)return s.Ok(!1);const a=he.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?s.Ok(a.data):s.Err(a.error)}}class Ye{constructor({visitorCode:e,matchType:t}){this.matchType=t,this.conditionValue=e}evaluate({visitorCode:e}){return s.Ok(this.checkCondition(e))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case oe.CONTAINS:return e.includes(this.conditionValue);case oe.EXACT:return e===this.conditionValue;case oe.REGULAR_EXPRESSION:return we.parseRegExp(this.conditionValue).test(e);default:return K.error`Unexpected comparing operation for VisitorCode condition: ${this.matchType}`,!1}}}class Xe{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:e}){var t;const i=!this.cookie.key&&!this.cookie.value,a=Boolean(this.valueMatchType)&&Boolean(this.keyMatchType);if(i||!a)return s.Ok(!1);const o=this.extractCookie(),r=(null===(t=null==e?void 0:e[exports.KameleoonData.Cookie])||void 0===t?void 0:t.cookie)||[];return s.Ok(o.some(e=>this.checkCondition(e))||r.some(e=>this.checkCondition(e)))}extractCookie(){return"undefined"!=typeof document&&document.cookie?Ae.fromString(document.cookie).data.cookie:[]}checkCondition(e){const t=this.keyMatchType,{key:i,value:a}=e;if(t===ne.OPTIONAL){const e=this.cookie;return!!this.isOptionalCookie(e)&&this.compareCookieValue(a,e.value)}const{key:o,value:r}=this.cookie;let n;switch(t){case ne.EXACT:n=i===o;break;case ne.CONTAINS:n=i.includes(o);break;case ne.REGULAR_EXPRESSION:n=we.parseRegExp(o).test(i);break;default:K.error`Unexpected comparing operation for Cookie condition: ${t}`,d(t)}return n&&this.compareCookieValue(a,r)}compareCookieValue(e,t){const i=this.valueMatchType;switch(i){case Z.EXACT:return e===t;case Z.CONTAINS:return e.includes(t);case Z.REGULAR_EXPRESSION:return we.parseRegExp(t).test(e);default:return K.error`Unexpected comparing operation for Cookie condition: ${i}`,!1}}isOptionalCookie(e){const{value:t}=e;return void 0!==t}}class Je{constructor({os:e}){this.operatingSystem=e}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.OperatingSystem];if(t){const{operatingSystem:e}=t;return s.Ok(e===this.operatingSystem)}return s.Ok(!1)}}class Qe{constructor({country:e,region:t,city:i}){this.country=e,this.region=t,this.city=i}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.GeolocationData];if(t){const{country:e,region:i,city:a}=t,[o,r,n]=[this.country,this.region,this.city];if(!o||!e)return s.Ok(!1);const l=!(e.toLowerCase()!==o.toLowerCase()||r&&(null==i?void 0:i.toLowerCase())!==r.toLowerCase()||n&&(null==a?void 0:a.toLowerCase())!==n.toLowerCase());return s.Ok(l)}return s.Ok(!1)}}class Ze{constructor({segmentId:e}){this.segmentId=e}evaluate(e){var t;const{segments:i,trees:a}=e;if(!this.segmentId)return s.Ok(!1);const o=null==i?void 0:i.get(this.segmentId.toString());if(!o)return s.Ok(!1);const r=null!==(t=null==a?void 0:a.get(this.segmentId.toString()))&&void 0!==t?t:null==a?void 0:a.get(this.segmentId);return r?r.evaluate(e):new Le(o).evaluate(e)}}class et{constructor({featureFlagId:e,variationKey:t,ruleId:i,visitCount:a,visitScope:o}){this.featureId=e,this.ruleId=i,this.variationKey=t,this.visitCount=a,this.visitScope=o}evaluate(e){const{variationData:t,ruleMap:i}=e;if(!this.featureId||!i)return s.Ok(!1);const a=_e(e,this.visitScope,this.visitCount),o=(e,t)=>!e||e>=t;if(this.featureId&&!this.ruleId&&!this.variationKey){for(const e of i.values()){const{featureId:i,experimentId:r}=e,n=t[r];if(i===this.featureId&&"number"==typeof(null==n?void 0:n.variationId)&&o(null==n?void 0:n.assignedTime,a))return s.Ok(!0)}return s.Ok(!1)}if(this.featureId&&this.ruleId){const e=i.get(this.ruleId);if((null==e?void 0:e.featureId)!==this.featureId)return s.Ok(!1);const{experimentId:r,variations:n}=e,l=t[r];if(this.variationKey){const e=n.get(this.variationKey);return s.Ok(Boolean(e)&&(null==l?void 0:l.variationId)===e&&o(null==l?void 0:l.assignedTime,a))}return s.Ok(Boolean(null==l?void 0:l.variationId)&&o(null==l?void 0:l.assignedTime,a))}if(this.featureId&&!this.ruleId&&this.variationKey)for(const e of i.values()){const{featureId:i,experimentId:r,variations:n}=e;if(i===this.featureId&&n.has(this.variationKey)){const e=n.get(this.variationKey),i=t[r];if(Boolean(e)&&(null==i?void 0:i.variationId)===e&&o(null==i?void 0:i.assignedTime,a))return s.Ok(!0)}}return s.Ok(!1)}}class tt{constructor({matchType:e,url:t}){this.conditionValue=t,this.matchType=e}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.PageView];if(!t)return s.Ok(!1);const i=this.getSecondLatestPageView(Object.values(t));if(!i)return s.Ok(!1);const a=i.urlAddress;return s.Ok(this.checkCondition(a))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case oe.CONTAINS:return e.includes(this.conditionValue);case oe.EXACT:return e===this.conditionValue;case oe.REGULAR_EXPRESSION:return we.parseRegExp(this.conditionValue).test(e);default:return K.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 it{constructor({matchType:e,pageCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:e}){const t=null==e?void 0:e[exports.KameleoonData.PageView];if(!t)return s.Ok(!1);let i=0;return Object.values(t).forEach(e=>{i+=e.timestamps.length}),s.Ok(this.checkCondition(i))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case oe.EQUAL:return e===this.conditionValue;case oe.GREATER:return e>this.conditionValue;case oe.LOWER:return e<this.conditionValue;default:return K.error`Unexpected comparing operation for VisitedPages condition: ${this.matchType}`,!1}}}class at{constructor({matchType:e,count:t,unitOfTime:i}){this.matchType=e,this.conditionValue=t,this.timeUnit=i}evaluate({targetingData:e,sdkInfo:t}){const i=null==e?void 0:e[exports.KameleoonData.VisitsData];if(t.isServer?!(null==i?void 0:i.visits.length):!(null==i?void 0:i.visits)||i.visits.length<2)return s.Ok(!1);const a=i.visits[0];return s.Ok(this.checkCondition("number"==typeof a?a:a.timeStarted))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue||!this.timeUnit)return!1;const t=Date.now()-e,i=he.convertTimeUnit(t,this.timeUnit);switch(this.matchType){case oe.GREATER:return i>this.conditionValue;case oe.LOWER:return i<this.conditionValue;default:return K.error`Unexpected comparing operation for FirstVisit condition: ${this.matchType}`,!1}}}class ot{constructor({matchType:e,count:t,unitOfTime:i}){this.matchType=e,this.conditionValue=t,this.timeUnit=i}evaluate({targetingData:e,sdkInfo:t}){const i=null==e?void 0:e[exports.KameleoonData.VisitsData];if(t.isServer?!(null==i?void 0:i.visits.length):!(null==i?void 0:i.visits)||i.visits.length<2)return s.Ok(!1);const a=i.visits,o=a[t.isServer?a.length-1:a.length-2];return s.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=he.convertTimeUnit(t,this.timeUnit);switch(this.matchType){case oe.GREATER:return i>this.conditionValue;case oe.LOWER:return i<this.conditionValue;default:return K.error`Unexpected comparing operation for LastVisit condition: ${this.matchType}`,!1}}}class rt{constructor({matchType:e,visitCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:e,sdkInfo:t}){const i=null==e?void 0:e[exports.KameleoonData.VisitsData];if(!i)return s.Ok(!1);let a=0;const o=(new Date).setHours(0,0,0,0),{visits:r}=i;return r.forEach(e=>{let t;t="number"==typeof e?e:e.timeStarted,t>=o&&a++}),t.isServer&&(a+=1),s.Ok(this.checkCondition(a))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case oe.EQUAL:return e===this.conditionValue;case oe.GREATER:return e>this.conditionValue;case oe.LOWER:return e<this.conditionValue;default:return K.error`Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`,!1}}}class nt{constructor({matchType:e,visitCount:t}){this.matchType=e,this.conditionValue=t}evaluate({targetingData:e,sdkInfo:t}){const i=null==e?void 0:e[exports.KameleoonData.VisitsData];if(!i)return s.Ok(!1);const a=i.visits.length+(t.isServer?1:0);return s.Ok(this.checkCondition(a))}checkCondition(e){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case oe.EQUAL:return e===this.conditionValue;case oe.GREATER:return e>this.conditionValue;case oe.LOWER:return e<this.conditionValue;default:return K.error`Unexpected comparing operation for Visits condition: ${this.matchType}`,!1}}}class st{constructor({visitorType:e}){this.visitorType=e}evaluate({targetingData:e,sdkInfo:t}){const i=null==e?void 0:e[exports.KameleoonData.VisitsData];if(!i||!this.visitorType)return s.Ok(!1);const{visits:a}=i,o=t.isServer?!a.length:a.length<=1;switch(this.visitorType){case ee.NEW:return s.Ok(o);case ee.RETURNING:return s.Ok(!o);default:K.error`Unexpected visitor type for NewVisitor condition: ${this.visitorType}`,d(this.visitorType)}}}class lt{constructor({version:e,versionMatchType:t}){this.conditionValue=e,this.versionMatchType=t}evaluate({targetingData:e}){var t;const i=null===(t=null==e?void 0:e[exports.KameleoonData.ApplicationVersion])||void 0===t?void 0:t.version;if(!i||!this.conditionValue||!this.versionMatchType)return s.Ok(!1);const a=he.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?s.Ok(a.data):s.Err(a.error)}}class ut{constructor({lowerBound:e,upperBound:t,keyMomentId:i,goalId:a}){this.lowerBound=e,this.upperBound=t,this.keyMomentId=i,this.goalId=a}evaluate({targetingData:e}){var t;const i=null==e?void 0:e[exports.KameleoonData.KameleoonConversionScore];if("number"!=typeof this.keyMomentId||"number"!=typeof this.goalId||"number"!=typeof this.lowerBound||"number"!=typeof this.upperBound||!i)return s.Ok(!1);const a=null===(t=i.kcs[this.keyMomentId.toString()])||void 0===t?void 0:t[this.goalId.toString()];return"number"!=typeof a?s.Ok(!1):s.Ok(a>=this.lowerBound&&a<=this.upperBound)}}class dt{constructor({variationMatchType:e,variationId:t,experimentId:i,visitCount:a,visitScope:o}){this.variationMatchType=e,this.variationId=null!=t?t:-1,this.experimentId=null!=i?i:-1,this.visitCount=a,this.visitScope=o}evaluate(e){return s.Ok(this.checkCondition(e))}checkCondition(e){const t=e.variationData[this.experimentId];if(!t)return!1;const i=_e(e,this.visitScope,this.visitCount);if(t.assignedTime&&t.assignedTime<i)return!1;switch(this.variationMatchType){case te.ANY:return!0;case te.EXACT:return t.variationId===this.variationId;default:return!1}}}class ct{constructor({personalizationId:e,visitCount:t,visitScope:i}){this.personalizationId=e,this.visitCount=t,this.visitScope=i}evaluate(e){return e.targetingData?s.Ok(this.checkCondition(e)):s.Ok(!1)}checkCondition(e){var t,i;if(!this.personalizationId)return!1;const a=null===(i=null===(t=e.targetingData)||void 0===t?void 0:t[exports.KameleoonData.Personalization])||void 0===i?void 0:i[this.personalizationId];if(!a)return!1;const{assignedTime:o}=a;return!o||o>=_e(e,this.visitScope,this.visitCount)}}class pt{createCondition(e){const{targetingType:t}=e;switch(t){case le.CUSTOM_DATUM:return s.Ok(new ze(e));case le.EXCLUSIVE_EXPERIMENT:return s.Ok(new Ue(e));case le.TARGET_EXPERIMENT:return s.Ok(new dt(e));case le.TARGET_FEATURE_FLAG:return s.Ok(new et(e));case le.TARGET_PERSONALIZATION:return s.Ok(new ct(e));case le.DEVICE_TYPE:return s.Ok(new Pe(e));case le.BROWSER:return s.Ok(new Ge(e));case le.PAGE_URL:return s.Ok(new He(e));case le.PAGE_TITLE:return s.Ok(new qe(e));case le.CONVERSIONS:return s.Ok(new Be(e));case le.VISITOR_CODE:return s.Ok(new Ye(e));case le.SDK_LANGUAGE:return s.Ok(new We(e));case le.COOKIE:return s.Ok(new Xe(e));case le.OPERATING_SYSTEM:return s.Ok(new Je(e));case le.GEOLOCATION:return s.Ok(new Qe(e));case le.SEGMENT:return s.Ok(new Ze(e));case le.APPLICATION_VERSION:return s.Ok(new lt(e));case le.PREVIOUS_PAGE:return s.Ok(new tt(e));case le.PAGE_VIEWS:return s.Ok(new it(e));case le.LAST_VISIT:return s.Ok(new ot(e));case le.FIRST_VISIT:return s.Ok(new at(e));case le.SAME_DAY_VISITS:return s.Ok(new rt(e));case le.VISITS:return s.Ok(new nt(e));case le.NEW_VISITORS:return s.Ok(new st(e));case le.HEAT_SLICE:return s.Ok(new ut(e));default:return K.info`Unsupported targeted condition type found: ${t}`,s.Err(new c(exports.KameleoonException.TargetingCondition,t))}}}exports.KameleoonStorageKey=void 0,function(e){e.ClientData="kameleoonClientData",e.TargetingData="kameleoonTargetingData",e.TrackingData="kameleoonTrackingData",e.VariationData="kameleoonVariationData",e.VisitorCode="kameleoonVisitorCode",e.ConsentData="kameleoonConsentData",e.DataInfo="kameleoonDataInfo",e.KameleoonSimulationFFData="kameleoonSimulationFFData",e.ForcedFeatureVariation="kameleoonForcedFeatureVariation",e.ForcedExperimentVariation="kameleoonForcedExperimentVariation"}(exports.KameleoonStorageKey||(exports.KameleoonStorageKey={}));const gt={data:G,lastUpdate:""},ht=29*exports.Milliseconds.Minute;class vt{constructor(e){this.key=e}isDataValid(e){switch(this.key){case exports.KameleoonStorageKey.ClientData:return this.checkClientDataIntegrity(e);case exports.KameleoonStorageKey.TargetingData:return this.checkTargetingDataIntegrity(e);case exports.KameleoonStorageKey.DataInfo:return this.checkDataInfoIntegrity(e);case exports.KameleoonStorageKey.VariationData:return this.checkVariationDataIntegrity(e);case exports.KameleoonStorageKey.TrackingData:return this.checkTrackingDataIntegrity(e);default:return!0}}getDefaultData(){switch(this.key){case exports.KameleoonStorageKey.ClientData:return this.getDefaultClientData();case exports.KameleoonStorageKey.DataInfo:return{unsentData:{},nextVisitTime:0,mappingIdentifiers:{}};case exports.KameleoonStorageKey.TrackingData:return{scheduledVisitors:{}};case exports.KameleoonStorageKey.TargetingData:case exports.KameleoonStorageKey.VariationData:case exports.KameleoonStorageKey.ConsentData:return{};case exports.KameleoonStorageKey.VisitorCode:case exports.KameleoonStorageKey.KameleoonSimulationFFData:return"";case exports.KameleoonStorageKey.ForcedExperimentVariation:case exports.KameleoonStorageKey.ForcedFeatureVariation:return{};default:d(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(gt))}checkTargetingDataIntegrity(e){const t=Object.values(e);if(!t.length)return!0;for(const e of t){if("string"==typeof e)continue;const t=e=>!this.hasFields(e,["status"])||this.hasFields(e,["sent"])||this.hasFields(e,["timestampList"]);for(const[i,a]of Object.entries(e)){if(Array.isArray(a))return!1;switch(i){case exports.KameleoonData.PageView:case exports.KameleoonData.Conversion:case exports.KameleoonData.Personalization:case exports.KameleoonData.TargetedSegment:case exports.KameleoonData.CustomData:if(Object.values(a).some(e=>t(e)))return!1;continue;default:if(t(a))return!1}}}return!0}getDefaultClientData(){return Object.assign(Object.assign({},gt),{lastUpdate:(new Date).toString()})}hasFields(e,t){const i=Object.keys(e);return!(!i.length||!t.length)&&t.every(e=>i.includes(e))}}let mt=class{constructor(e,t){this.externalStorage=e,this.storageKey=t;const i=new vt(t),a=this.read();if(!a.ok){if(a.error.type===exports.KameleoonException.StorageEmpty){const e=i.getDefaultData();this.write(e)}return}const o=a.data;if(!i.isDataValid(o)){const e=i.getDefaultData();this.write(e)}}read(){try{const e=this.externalStorage.read(this.storageKey);return null===e?s.Err(new c(exports.KameleoonException.StorageEmpty)):s.Ok(e)}catch(e){return K.error`Failed to read data from storage: ${this.storageKey}`,s.Err(new c(exports.KameleoonException.StorageRead,this.storageKey))}}write(e){try{return this.externalStorage.write(this.storageKey,e),s.Ok()}catch(e){return K.error`Failed to write data to storage: ${this.storageKey}`,s.Err(new c(exports.KameleoonException.StorageWrite,this.storageKey))}}update(e){const t=this.read();if(!t.ok)return t.error.type===exports.KameleoonException.StorageEmpty?this.write(e):t;const i=t.data;let a;return a="string"==typeof i?e:Object.assign(Object.assign({},i),e),this.write(a)}};class ft{constructor(e,t){this.externalStorage=e,this.cleanupInterval=t,t>0&&this.initCleanupInterval()}initCleanupInterval(){for(const e of Object.values(exports.KameleoonStorageKey)){let t=null;try{switch(e){case exports.KameleoonStorageKey.ForcedFeatureVariation:case exports.KameleoonStorageKey.ForcedExperimentVariation:case exports.KameleoonStorageKey.VariationData:case exports.KameleoonStorageKey.ConsentData:K.info`Starting cleanup for ${e} with interval ${this.cleanupInterval}`,t=setInterval(()=>this.cleanupData(e),this.cleanupInterval);break;case exports.KameleoonStorageKey.ClientData:case exports.KameleoonStorageKey.TargetingData:case exports.KameleoonStorageKey.TrackingData:case exports.KameleoonStorageKey.VisitorCode:case exports.KameleoonStorageKey.DataInfo:case exports.KameleoonStorageKey.KameleoonSimulationFFData:break;default:K.error`Unknown storage key: ${e} for initCleanupInterval.`}}catch(i){t&&clearInterval(t),K.error`Error while starting cleanup for ${e} with interval ${this.cleanupInterval}`}}}cleanupData(e){const t=this.externalStorage.read(e);if(!t)return;const i=Date.now();switch(e){case exports.KameleoonStorageKey.VariationData:this.cleanupVariationData(t,i);break;case exports.KameleoonStorageKey.ForcedFeatureVariation:this.cleanupForcedFeatureVariationData(t,i);break;case exports.KameleoonStorageKey.ForcedExperimentVariation:this.cleanupForcedExperimentVariationData(t,i);break;case exports.KameleoonStorageKey.ConsentData:this.cleanupConsentData(t,i);break;case exports.KameleoonStorageKey.ClientData:case exports.KameleoonStorageKey.TargetingData:case exports.KameleoonStorageKey.TrackingData:case exports.KameleoonStorageKey.VisitorCode:case exports.KameleoonStorageKey.DataInfo:case exports.KameleoonStorageKey.KameleoonSimulationFFData:break;default:K.error`Unknown storage key: ${e} for cleanupData.`}this.externalStorage.write(e,t)}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 o=a;"number"==typeof o.expirationTime?o.expirationTime<t&&delete e[i]:o.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[o,r]of Object.entries(a))this.cleanupObjectValues(r,t),0===Object.keys(e[Number(i)][o]).length&&delete e[Number(i)][o]}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 Ct;!function(e){e[e.Unknown=0]="Unknown",e[e.Given=1]="Given",e[e.NotGiven=2]="NotGiven"}(Ct||(Ct={}));class yt{constructor(e){this.id=e,this.status=exports.TrackingStatus.Unsent}get url(){return"eventType=targetingSegment"+D+this.id}get data(){return{id:this.id,type:exports.KameleoonData.TargetedSegment,status:this.status}}static _fromRaw(e){const{id:t,status:i}=e,a=new yt(t);return a.status=i,a}}class xt{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,K.debug`CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`,this.dataStorage=e,this.infoStorage=t,this.dataProcessor=new Fe(i,a),this.packageInfo=a,i){const t=()=>{this.cleanupData()};try{this.cleanupIntervalId=setInterval(t,i)}catch(e){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),K.error`Failed to set cleanup interval: ${i}`,e}}K.debug`RETURN: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`}getUnsentData(e){const t=this.infoStorage.read();if(!t.ok)return[];const i=t.data,a=this.getVisitorData(e);if(!i.unsentData[e]||!a)return[];const o=i.unsentData[e],r=i.nextVisitTime<=Date.now();return r&&(i.nextVisitTime=Date.now()+ht,this.infoStorage.write(i)),this.getDataFromRaw(a,({status:e,key:t,cdIndex:i})=>!("number"!=typeof i||!this.persistentCustomDataIndexes.has(i)||!r)||o.includes(t)&&e===exports.TrackingStatus.Unsent)}getPendingData(e){const t=this.getVisitorData(e);return t?this.getDataFromRaw(t,({status:e})=>e===exports.TrackingStatus.Pending):[]}getDataFromRaw(e,t){const i=[];for(const[a,o]of Object.entries(e))if(o)switch(a){case exports.KameleoonData.CustomData:for(const e of Object.values(o)){if(!e)continue;const{status:o,index:r}=e;if(t({status:o,key:a,cdIndex:r})){const t=fe._fromRaw(e);i.push(t)}}break;case exports.KameleoonData.Conversion:for(const e of Object.values(o))if(e&&t({status:e.status,key:a})){const t=Ce._fromRaw(e);i.push(t)}break;case exports.KameleoonData.PageView:{const e=o;for(const o of Object.values(e))if(t({status:o.status,key:a})){const e=me._fromRaw(o);i.push(e)}break}case exports.KameleoonData.TargetedSegment:{const e=o;for(const o of Object.values(e))if(t({status:o.status,key:a})){const e=yt._fromRaw(o);i.push(e)}break}case exports.KameleoonData.GeolocationData:{const e=o;if(!o)continue;if(t({status:e.status,key:a})){const t=Ee._fromRaw(e);i.push(t)}break}case exports.KameleoonData.Browser:{const e=o;if(t({status:e.status,key:a})){const t=ye._fromRaw(e);i.push(t)}break}case exports.KameleoonData.Device:{const e=o;if(t({status:e.status,key:a})){const t=xe._fromRaw(e);i.push(t)}break}case exports.KameleoonData.OperatingSystem:{const e=o;if(t({status:e.status,key:a})){const t=De._fromRaw(e);i.push(t)}}}return i}storeTrackedData(e){this.storeDataForVisitors(e,!1);const t=this.infoStorage.read();if(!t.ok)return;const i=t.data.unsentData;for(const[t,a]of Object.entries(e)){if(!i[t])return;const e=new Set(i[t]);a.forEach(({data:t})=>{e.has(t.type)&&e.delete(t.type)});const o=a.some(({data:e})=>{if(e.type!==exports.KameleoonData.CustomData)return!1;const{index:t}=e;return this.persistentCustomDataIndexes.has(t)||this.mappingIdentifierCustomDataIndex===t});o&&e.add(exports.KameleoonData.CustomData),i[t]=Array.from(e),i[t].length||delete i[t]}this.infoStorage.write(t.data)}storeData({visitorCode:e,data:t,track:i}){K.debug`CALL: DataManager.storeDataForVisitor(vc: ${e}, track: ${i}, data: ${t})`;const a=this.storeDataInternal((a,o)=>{this.mutUpdateTargetingData({infoData:a,targetingData:o,visitorCode:e,kameleoonData:t,extendTtl:!0,track:i})});return K.debug`RETURN: DataManager.storeDataForVisitor(vc: ${e}, track: ${i}, data: ${t}) -> ${a}`,a}storeDataForVisitors(e,t){K.debug`CALL: DataManager.storeDataForVisitors(data: ${e}, extendTtl: ${t})`;const i=this.storeDataInternal((i,a)=>{for(const[o,r]of Object.entries(e))this.mutUpdateTargetingData({infoData:i,targetingData:a,visitorCode:o,kameleoonData:r,extendTtl:t})});return K.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,o=i.data;return e(o,a),this.cleanupData(),this.infoStorage.write(o),this.dataStorage.write(a)}getTree(e){if(this.targetingTrees.has(e.id))return this.targetingTrees.get(e.id);const t=new Le(e);return this.targetingTrees.set(e.id,t),t}clearTrees(){this.targetingTrees.clear()}isPersistentCustomData(e){return!!this.persistentCustomDataIndexes.size&&!!he.isCustomData(e)&&this.persistentCustomDataIndexes.has(e.data.index)}isUniqueIdentifier(e){var t;const i=this.getVisitorData(e),a=null==i?void 0:i[exports.KameleoonData.UniqueIdentifier];return null!==(t=null==a?void 0:a.value)&&void 0!==t&&t}getVisitorIdentifier(e){var t,i,a;const o=this.infoStorage.read();if(!o.ok)return e;const r=o.data;return null!==(t=r.mappingIdentifiers)&&void 0!==t||(r.mappingIdentifiers={}),null!==(a=null===(i=r.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 o=a.data;null!==(i=o.mappingIdentifiers)&&void 0!==i||(o.mappingIdentifiers={});const r=o.mappingIdentifiers[e];(!r||r.timestamp<t.timestamp)&&(o.mappingIdentifiers[e]=t,this.infoStorage.write(o))}getVisitorData(e){this.cleanupData();const t=this.dataStorage.read();if(!t.ok)return;let{visitorReference:i,data:a,isReference:o}=this.dataProcessor.dereferenceData(t.data,e);if(this.packageInfo.isServer&&o&&!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(e){var t,i,a;const o=this.dataStorage.read();if(!o.ok)return null;const r=o.data[e];if("string"==typeof r)return r;if(null==r||null==this.mappingIdentifierCustomDataIndex)return null;const n=null===(a=null===(i=null===(t=r[exports.KameleoonData.CustomData])||void 0===t?void 0:t[this.mappingIdentifierCustomDataIndex])||void 0===i?void 0:i.value)||void 0===a?void 0:a[0];return null!=n?n:null}mutUpdateTargetingData({infoData:e,visitorCode:t,kameleoonData:i,targetingData:a,extendTtl:o,track:r}){var n,s,l;for(const u of i){if(!1===r&&(u.status=exports.TrackingStatus.Sent),u.data.type===exports.KameleoonData.CustomData&&!this.processCustomData({infoData:e,customData:u,mutData:a,visitorCode:t}))continue;if(u.data.type===exports.KameleoonData.Conversion){const e=u;(null!==(s=null===(n=e._metadata)||void 0===n?void 0:n.length)&&void 0!==s?s:0)>0&&(e._metadata=null===(l=e._metadata)||void 0===l?void 0:l.filter(e=>this.trySetCustomDataIndexByName(e)))}const i=this.dataProcessor.mutUpdateData({infoData:e,visitorCode:t,mutData:a,dataItem:u,extendTtl:o}),d=e.nextDataCleanup;(!d||d&&i&&i<d)&&(e.nextDataCleanup=i),u.data.status===exports.TrackingStatus.Unsent&&this.dataProcessor.mutAddUnsentData({mutData:e,visitorCode:t,dataType:u.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,o=a.nextDataCleanup;if(o&&o<Date.now()){const e=this.dataProcessor.mutCleanupData(i,a);a.nextDataCleanup=e||void 0,this.infoStorage.write(a),this.dataStorage.write(i)}}processCustomData({infoData:e,mutData:t,customData:i,visitorCode:a}){var o;const{data:r}=i,n=Boolean(r.value.length&&r.value[0].length);if(!this.trySetCustomDataIndexByName(i))return!1;if(r.index==fe.UNDEFINED_INDEX&&(r.index=i.index),this.mappingIdentifierCustomDataIndex===r.index&&n){i._isMappingIdentifier=!0;const n=r.value[0];a!==n&&(K.info`Linked anonymous visitor ${a} with user ${n}`,this.dataProcessor.createReference({infoData:e,mutData:t,visitorCode:a,linkedVisitor:r.value[0]}),null!==(o=e.mappingIdentifiers)&&void 0!==o||(e.mappingIdentifiers={}),e.mappingIdentifiers[n]={mappingIdentifier:a,timestamp:Date.now()})}return this.localCustomDataIndexes.has(r.index)&&(i.status=exports.TrackingStatus.Sent),!0}trySetCustomDataIndexByName(e){if(e.index!==fe.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 e=this.dataStorage.read();if(!e.ok)return new Set;const t=e.data;if(!(exports.KameleoonData.CustomData in t))return new Set;const i=new Set;for(const e in Object.keys(t[exports.KameleoonData.CustomData]))i.add(Number(e));return i}set customDataIndexes(e){var t;const[i,a]=[[],[]],o=new Map;e.forEach(e=>{e.localOnly&&i.push(e.index),e.scope===exports.CustomDataScope.Visitor&&a.push(e.index),e.name&&o.set(e.name,e.index)}),this.mappingIdentifierCustomDataIndex=(null===(t=e.find(e=>e.isMappingIdentifier))||void 0===t?void 0:t.index)||null,this.localCustomDataIndexes=new Set(i),this.persistentCustomDataIndexes=new Set(a),this.customDataIndexByName=o}getCustomDataIndexByName(e){return this.customDataIndexByName.get(e)}}const Dt=31536e3;let Et=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(e){return 0===e.length?s.Err(new c(exports.KameleoonException.VisitorCodeEmpty)):e.length>255?s.Err(new c(exports.KameleoonException.VisitorCodeMaxLength)):s.Ok()}getVisitorCode(e){if(K.debug`CALL: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${e})`,!this.getDataCallback||!this.setDataCallback)throw new Error("Missing getDataCallback or setDataCallback methods in getVisitorCode!");let t;const i=this.getDataCallback(exports.KameleoonStorageKey.VisitorCode);return i&&(t=i),t||(e?(this.validateVisitorCode(e).throw(),t=e,K.debug`Used default visitor code: ${t}`):(t=this.generateVisitorCode(),K.debug`Generated new visitor code: ${t}`)),this.processSimulatedVariations(t),this.isConsentRequired||this.setDataCallback({visitorCode:t,key:exports.KameleoonStorageKey.VisitorCode,maxAge:Dt,path:"/"}),K.debug`RETURN: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${e}) -> (visitorCode: ${t})`,t}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&&K.error`Failed to process simulated variations: ${e.message}`}}}getSimulatedVariations(e){K.debug`CALL: VisitorCodeManager.getSimulatedVariations(visitorCode: ${e})`;const t=this.getDataCallback(exports.KameleoonStorageKey.KameleoonSimulationFFData);let i=null;if("string"==typeof t&&t.length>0)try{const e=JSON.parse(decodeURIComponent(t));e&&"object"==typeof e&&(i=Object.entries(e).map(([e,t])=>this.variationConfiguration.simulatedVariationFromJson(e,t)).filter(e=>null!==e))}catch(e){e instanceof Error&&K.error`Failed to parse simulated variations: ${e.message}`}return K.debug`RETURN: VisitorCodeManager.getSimulatedVariations(visitorCode: ${e}) -> (variations: ${i})`,i}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 Tt,It,kt,St={exports:{}},Vt={exports:{}},wt=function(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}(Object.freeze({__proto__:null,default:{}})),Rt=(It||(It=1,St.exports=(kt=function(){return Tt||(Tt=1,Vt.exports=(e=e||function(e){var t;if("undefined"!=typeof window&&window.crypto&&(t=window.crypto),"undefined"!=typeof self&&self.crypto&&(t=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(t=globalThis.crypto),!t&&"undefined"!=typeof window&&window.msCrypto&&(t=window.msCrypto),!t&&void 0!==o&&o.crypto&&(t=o.crypto),!t)try{t=wt}catch(e){}var i=function(){if(t){if("function"==typeof t.getRandomValues)try{return t.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof t.randomBytes)try{return t.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},a=Object.create||function(){function e(){}return function(t){var i;return e.prototype=t,i=new e,e.prototype=null,i}}(),r={},n=r.lib={},s=n.Base={extend:function(e){var t=a(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)}},l=n.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,o=e.sigBytes;if(this.clamp(),a%4)for(var r=0;r<o;r++){var n=i[r>>>2]>>>24-r%4*8&255;t[a+r>>>2]|=n<<24-(a+r)%4*8}else for(var s=0;s<o;s+=4)t[a+s>>>2]=i[s>>>2];return this.sigBytes+=o,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=[],a=0;a<e;a+=4)t.push(i());return new l.init(t,e)}}),u=r.enc={},d=u.Hex={stringify:function(e){for(var t=e.words,i=e.sigBytes,a=[],o=0;o<i;o++){var r=t[o>>>2]>>>24-o%4*8&255;a.push((r>>>4).toString(16)),a.push((15&r).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 l.init(i,t/2)}},c=u.Latin1={stringify:function(e){for(var t=e.words,i=e.sigBytes,a=[],o=0;o<i;o++){var r=t[o>>>2]>>>24-o%4*8&255;a.push(String.fromCharCode(r))}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 l.init(i,t)}},p=u.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)))}},g=n.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new l.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=p.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var i,a=this._data,o=a.words,r=a.sigBytes,n=this.blockSize,s=r/(4*n),u=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*n,d=e.min(4*u,r);if(u){for(var c=0;c<u;c+=n)this._doProcessBlock(o,c);i=o.splice(0,u),a.sigBytes-=d}return new l.init(i,d)},clone:function(){var e=s.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});n.Hasher=g.extend({cfg:s.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){g.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 h.HMAC.init(e,i).finalize(t)}}});var h=r.algo={};return r}(Math),e)),Vt.exports;var e}(),function(e){var t=kt,i=t.lib,a=i.WordArray,o=i.Hasher,r=t.algo,n=[],s=[];!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,o=0;o<64;)t(a)&&(o<8&&(n[o]=i(e.pow(a,.5))),s[o]=i(e.pow(a,1/3)),o++),a++}();var l=[],u=r.SHA256=o.extend({_doReset:function(){this._hash=new a.init(n.slice(0))},_doProcessBlock:function(e,t){for(var i=this._hash.words,a=i[0],o=i[1],r=i[2],n=i[3],u=i[4],d=i[5],c=i[6],p=i[7],g=0;g<64;g++){if(g<16)l[g]=0|e[t+g];else{var h=l[g-15],v=(h<<25|h>>>7)^(h<<14|h>>>18)^h>>>3,m=l[g-2],f=(m<<15|m>>>17)^(m<<13|m>>>19)^m>>>10;l[g]=v+l[g-7]+f+l[g-16]}var C=a&o^a&r^o&r,y=(a<<30|a>>>2)^(a<<19|a>>>13)^(a<<10|a>>>22),x=p+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&d^~u&c)+s[g]+l[g];p=c,c=d,d=u,u=n+x|0,n=r,r=o,o=a,a=x+(y+C)|0}i[0]=i[0]+a|0,i[1]=i[1]+o|0,i[2]=i[2]+r|0,i[3]=i[3]+n|0,i[4]=i[4]+u|0,i[5]=i[5]+d|0,i[6]=i[6]+c|0,i[7]=i[7]+p|0},_doFinalize:function(){var t=this._data,i=t.words,a=8*this._nDataBytes,o=8*t.sigBytes;return i[o>>>5]|=128<<24-o%32,i[14+(o+64>>>9<<4)]=e.floor(a/4294967296),i[15+(o+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(u),t.HmacSHA256=o._createHmacHelper(u)}(Math),kt.SHA256)),St.exports),bt=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}(Rt);class Kt{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=bt(e).toString();return parseInt(t,16)/Math.pow(2,256)}}class At{constructor(e,t,i,a,o){this.storage=e,this.storageForcedExperimentVariations=t,this.storageForcedFeatureVariations=i,this.visitorCodeManager=a,this.clientConfiguration=o,a.setVariationConfiguration(this)}updateDataStatus({visitorCode:e,experimentIdList:t,status:i}){const a=this.storage.read();if(!a.ok)return a;let o=a.data;o[e]||(o[e]={});for(const a of t)o[e][a]=Object.assign(Object.assign({},o[e][a]),{status:i});return this.storage.write(o)}getUnsentData(e){return this.getVariationData(e,e=>e===exports.TrackingStatus.Unsent)}getVisitorsWithUnsentData(){K.debug`CALL: VariationConfiguration.unsentDataVisitors()`;const e=this.storage.read();if(!e.ok)return K.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (result: ${e})`,[];const t=[];for(const[i,a]of Object.entries(e.data))Object.values(a).some(e=>e.status===exports.TrackingStatus.Unsent)&&t.push(i);return K.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (visitors: ${t})`,t}getPendingData(e){return this.getVariationData(e,e=>e===exports.TrackingStatus.Pending)}getStoredVariations(e){const t=this.storage.read();if(!t.ok)return t;const i=t.data[e];return i?s.Ok(i):s.Err(new c(exports.KameleoonException.StorageRead,e))}getVariation({visitorCode:e,visitorIdentifier:t,featureFlag:i,targetingData:a,packageInfo:o,clientConfiguration:r,dataManager:n,legalConsent:l,track:u=!0,withAssignment:d=!1}){K.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d})`;const{rules:p,featureKey:g,id:h,defaultVariationKey:v}=i,m=r.isConsentRequired?l:Ct.Given;for(const l of p){const{segment:p,experimentId:f,id:C,exposition:y,respoolTime:x,variationByExposition:D}=l,E=Date.now(),T=this.getForcedExperimentVariation(e,l.experimentId);let I=null;if(T.ok&&(I=T.data,null==I?void 0:I.forceTargeting)){K.info`Visitor ${e} has been forced targeted for ${l}`;const r=this.createAndSaveForcedTargetedVariation(e,i,l,I,u,d,E);return K.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${r})`,s.Ok(r)}const k=he.checkTargeting({segment:p,visitorCode:e,experimentId:f,targetingData:a,packageInfo:o,clientConfiguration:r,dataManager:n,variationConfiguration:this});if(!k.ok)return K.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${k})`,k;if(!k.data)continue;if(K.info`Visitor ${e} has been targeted for ${l}`,I){const r=this.createAndSaveForcedTargetedVariation(e,i,l,I,u,d,E);return K.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${r})`,s.Ok(r)}const S=Kt.getHashDouble({visitorIdentifier:t,respoolTime:x,id:String(C)});if(K.debug`Calculated ruleHash: ${S} for code: ${t}`,S<=y){if(m==Ct.NotGiven&&l.type==F.EXPERIMENTATION){if(r.consentBlockingBehaviour==L.PartiallyBlocked)break;return s.Err(new c(exports.KameleoonException.FeatureFlagEnvironmentDisabled,`Evaluation of ${l} is blocked because consent is not provided for visitor '${e}'`))}let n=this.evaluateCBScores(l,t,a);if(!n){const e=Kt.getHashDouble({visitorIdentifier:t,respoolTime:x,id:String(f)});K.debug`Calculated variationHash: ${e} for code: ${t}`,n=he.getVariationByHash(D,e)}if(n){d&&this.updateStoredVariations(e,{[f]:{variationId:n.variationId,isTargetedRule:l.type===F.TARGETED_DELIVERY,status:u?exports.TrackingStatus.Unsent:exports.TrackingStatus.Sent,assignedTime:E}});const r={variationId:n.variationId,variationKey:n.variationKey,rule:l,featureFlagId:h,featureKey:g,experimentId:f,isTargetedRule:l.type===F.TARGETED_DELIVERY};return K.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${r})`,s.Ok(r)}}if(l.type===F.TARGETED_DELIVERY){const r={featureKey:g,featureFlagId:h,experimentId:null,variationKey:v,variationId:null,rule:null,isTargetedRule:!0};return K.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${r})`,s.Ok(r)}}const f={featureKey:g,featureFlagId:h,experimentId:null,variationKey:v,variationId:null,rule:null,isTargetedRule:!1};return K.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${f})`,s.Ok(f)}createAndSaveForcedTargetedVariation(e,t,i,a,o,r,n){const s={variationKey:a.varByExp.variationKey,variationId:a.varByExp.variationId,rule:i,featureFlagId:t.id,featureKey:t.featureKey,experimentId:i.experimentId,isTargetedRule:i.type===F.TARGETED_DELIVERY};return r&&this.updateStoredVariations(e,{[i.experimentId]:{variationId:s.variationId,isTargetedRule:i.type===F.TARGETED_DELIVERY,status:o?exports.TrackingStatus.Unsent:exports.TrackingStatus.Sent,assignedTime:n}}),s}updateStoredVariations(e,t){K.debug`CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${e}, variationData: ${t})`;const i=this.storage.read();if(!i.ok)return K.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 o=this.storage.write(a);return K.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${e}, variationData: ${t}) -> (resultWrite: ${o})`,o}getVariationData(e,t){const i=this.getStoredVariations(e);if(!i.ok)return[];const a=[];for(const[e,o]of Object.entries(i.data))t(o.status)&&a.push({experimentId:Number(e),variationId:o.variationId,isTargetedRule:o.isTargetedRule});return a}updateForcedExperimentVariation(e,t,i){K.debug`CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return K.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i}) -> (result: ${a})`,a;let o=a.data;o[e]||(o[e]={}),i?o[e][t]=i:delete o[e][t];const r=this.storageForcedExperimentVariations.write(o);return K.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i}) -> (resultWrite: ${r})`,r}updateForcedFeatureVariations(e,t){K.debug`CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return K.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t}) -> (result: ${i})`,i;let a=i.data;a[0]||(a[0]={}),a[1]||(a[1]={});const o=a[0],r=a[1];o[e]||(o[e]={}),r[e]||(r[e]={}),t.forEach(t=>{(t.simulated?r[e]:o[e])[t.featureKey]=t});const n=this.storageForcedFeatureVariations.write(a);return K.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t}) -> (resultWrite: ${n})`,n}clearSimulatedVariations(e){var t;K.debug`CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return K.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e}) -> (result: ${i})`,i;let a;const o=i.data;return(null===(t=null==o?void 0:o[1])||void 0===t?void 0:t[e])?(delete o[1][e],a=this.storageForcedFeatureVariations.write(o)):a=s.Ok(),K.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e}) -> (resultWrite: ${a})`,a}getForcedFeatureVariation(e,t){var i,a,o,r;K.debug`CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t})`;const n=this.storageForcedFeatureVariations.read();if(!n.ok)return K.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (simulatedResult: ${n})`,n;const l=null===(a=null===(i=n.data[1])||void 0===i?void 0:i[e])||void 0===a?void 0:a[t];if(l)return K.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (simulatedData: ${l})`,s.Ok(l);const u=null===(r=null===(o=n.data[0])||void 0===o?void 0:o[e])||void 0===r?void 0:r[t];return K.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (forcedData: ${u})`,s.Ok(u)}getForcedExperimentVariation(e,t){var i;K.debug`CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return K.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}) -> (forcedResult: ${a})`,a;const o=null===(i=a.data[e])||void 0===i?void 0:i[t];return K.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}) -> (forcedExperiment: ${o})`,s.Ok(o)}parseForcedVariationData(e,t){const i=this.clientConfiguration.featureFlags.get(e.featureKey);if(!i)return K.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 o of i.rules){if(e.experimentId!==o.experimentId)continue;const i=o.variationByExposition.find(t=>t.variationId===e.variationId);if(i)return a={featureKey:e.featureKey,rule:{type:o.type,experimentId:o.experimentId},varByExp:{variationKey:i.variationKey,variationId:i.variationId},simulated:t},a}return K.error`Simulated variation ${e.variationId} not found`,null}simulatedVariationFromJson(e,t){if(K.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 K.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;K.debug`CALL: KameleoonClientImpl.evaluateCBScores(rule: ${e}, targetingData: ${i}, visitorIdentifier: ${t})`;const a=e.experimentId,o=new Se(i.cbScores.cbs).getValues().get(a);let r=null;if(void 0!==o){const i=e.variationByExposition,n=o.map(e=>i.filter(t=>e.ids.includes(t.variationId))).find(e=>e.length>0);if(n){let i=0;if(n.length>1){const o=Kt.getHashDouble({visitorIdentifier:t,respoolTime:e.respoolTime,id:String(a)});K.debug`Calculated cbs hash ${o} for code ${t}`,i=Math.min(Math.floor(o*n.length),n.length-1)}r=n[i]}}return K.debug`RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${e}, targetingData: ${i}, visitorIdentifier: ${t}) -> (variation: ${r})`,r}}let Ot=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,K.info`Established a new SSE connection with: ${this.url}`}close(){this.eventSource.close(),this.isConnectionOpen=!1,K.info`SSE connection: '${this.url}' was successfully closed`}onError(e){this.eventSource.onError?this.eventSource.onError(e):K.warning("EventSource does not have `onError` method provided. Real-time errors won't be handled.")}handleMessage(e){return t=>{K.debug`Received new message from: ${this.url}`;const i=JSON.parse(t.data),{siteCode:a,ts:o}=i;this.siteCode===a&&e(o)}}};var Ft;!function(e){e[e.Kb=1e3]="Kb",e[e.Mb=1e6]="Mb",e[e.Gb=1e9]="Gb"}(Ft||(Ft={}));const $t=10*Ft.Mb;class Mt{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:o,isMappingIdentifier:r}){const n=[],s=this.getVariationDataLines(t),l=this.getVisitorDataLines(i);return n.push(...s,...l),this.addVisitorTrackingLines({visitorCode:e,lines:n,userAgent:a,isConsentProvided:o,isMappingIdentifier:r})}getVisitorDataLines(e){const t=[];for(const i of e){let e;if(!(i instanceof $e||i.data.type!==exports.KameleoonData.Conversion&&i.data.type!==exports.KameleoonData.PageView)){const t=i.data.nonce;t?e=t:(e=he.getNonce(this.prng),i.data.nonce=e)}e||(e=he.getNonce(this.prng)),t.push(i.url+x+e)}return t}getVariationDataLines(e){const t=[];return e.forEach(e=>{t.push("eventType=experiment"+D+e.experimentId+"&variationId="+e.variationId+x+he.getNonce(this.prng))}),t}prepareVisitorBody(e){const t=this.trackingVisitors[e];if(!t)return s.Err();const{lines:i,userAgent:a,isMappingIdentifier:o,isConsentProvided:r}=t,n=this.getIdentifier(e,o);if(i.length)i.forEach((e,t)=>{i[t]=e+n}),K.debug`Sending tracking request for unsent data ${i} of visitor ${e} with given (or not required) consent ${r}`;else if(r){const t=this.getActivityLine();i.push(t+n),K.debug`Sending tracking request for activity of visitor ${e} with given consent`}else K.debug`No data to send for visitor ${e} with no consent`;a&&i.length&&(i[0]+="&userAgent="+a,this.hasUserAgent=!0);const l=this.checkSize(i);return l.ok&&this.resultBody.push(...i),l}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>$t?s.Err():(this.currentSize+=t,s.Ok())}addVisitorTrackingLines({visitorCode:e,lines:t,userAgent:i,isConsentProvided:a,isMappingIdentifier:o}){return this.trackingVisitors[e]?(i&&(this.trackingVisitors[e].userAgent=i),this.trackingVisitors[e].lines.push(...t)):this.trackingVisitors[e]={isMappingIdentifier:o,isConsentProvided:a,userAgent:i,lines:t},this.prepareVisitorBody(e)}getActivityLine(){return"eventType=activity"+x+he.getNonce(this.prng)}getIdentifier(e,t){return(t?S:C)+encodeURIComponent(e)}}class Nt{constructor({dataManager:e,trackingStorage:t,variationConfiguration:i,trackingInterval:a,requester:o,prng:r,clientConfiguration:n}){this.intervalId=null,K.debug`CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng, clientConfiguration)`,this.dataManager=e,this.trackingStorage=t,this.variationConfiguration=i,this.requester=o,this.bodyProvider=new Mt(r),this.clientConfiguration=n;try{this.intervalId=setInterval(()=>{this.sendDataAll()},a)}catch(e){throw this.intervalId&&clearInterval(this.intervalId),e}K.debug`RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng, clientConfiguration)`}scheduleVisitor(e,t){K.debug`CALL: Tracker.scheduleVisitor(visitorCode: ${e}, isConsentProvided: ${t})`,this.trackingStorage.read().and(i=>{i.scheduledVisitors[`_${e}`]={isConsentProvided:t},this.trackingStorage.write(i)}),K.debug`RETURN: Tracker.scheduleVisitor(visitorCode: ${e}, isConsentProvided: ${t})`}checkIsIdentifier(e){var t,i;const a=this.dataManager.isUniqueIdentifier(e),o=null!==(i=null===(t=this.dataManager.getMappingIdentifier(e))||void 0===t?void 0:t.mappingIdentifier)&&void 0!==i?i:e;let r=!1;if(a){const t=this.dataManager.getLinkedVisitor(e),i=this.dataManager.identifierCustomDataIndex;t||"number"!=typeof i?r=!0:this.dataManager.storeData({visitorCode:e,data:[new fe(i,e)]})}return r&&e!=o}getUserAgent(e){const t=this.dataManager.getVisitorData(e);if(t){const e=t[exports.KameleoonData.UserAgent];if(e)return e.value}}sendDataAll(){return l(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 l(this,0,void 0,function*(){this.trackingStorage.read().ok&&(yield this.sendData({[`_${e}`]:{isConsentProvided:t}}))})}sendData(e){return l(this,0,void 0,function*(){const t={},i=[],a=[];for(const[o,{isConsentProvided:r}]of Object.entries(e)){let e=o.startsWith("_")?o.substring(1):o;const n=this.checkIsIdentifier(e),s=this.getUserAgent(e),l=this.getUnsentVisitorData(e,r),u=this.getUnsentVariationData(e,r);if(!this.bodyProvider.addData({visitorCode:e,variationData:u,visitorData:l,userAgent:s,isConsentProvided:r,isMappingIdentifier:n}).ok){K.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}t[e]={visitorData:l,variationData:u},a.push({visitorCode:e,isConsentProvided:r}),i.push(o)}const{body:o,hasUserAgent:r}=this.bodyProvider.getTrackingBody();if(0!==i.length&&this.trackingStorage.read().and(e=>{i.forEach(t=>{delete e.scheduledVisitors[t]}),this.trackingStorage.write(e)}),o)if((yield this.requester.track(o,r)).ok)K.info`Successful request for tracking visitors: ${a}, data: ${t}`,this.updateDataStatus(t,exports.TrackingStatus.Sent);else{K.error("Tracking request failed"),K.info`Failed request for tracking visitors: ${a}, data: ${t}`,this.updateDataStatus(t,exports.TrackingStatus.Unsent);let e={};for(let{visitorCode:t,isConsentProvided:i}of a)t=`_${t}`,e[t]={isConsentProvided:i};this.addNotTrackedVisitors(e)}})}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(e,t){let i={};for(const[a,{visitorData:o,variationData:r}]of Object.entries(e)){const e=o.filter(e=>!(e instanceof $e)).map(e=>{const i=e;return i.status=t,i});e.length&&(i[a]=e);const n=r.map(e=>String(e.experimentId));this.variationConfiguration.updateDataStatus({visitorCode:a,experimentIdList:n,status:t})}0!==Object.keys(i).length&&(t===exports.TrackingStatus.Sent?this.dataManager.storeTrackedData(i):this.dataManager.storeDataForVisitors(i,!1))}getUnsentVisitorData(e,t){const i=this.dataManager.getUnsentData(e),a=[];if(!i.length)return[];for(const e of i)e.url&&(t||this.clientConfiguration.hasAnyTargetedDeliveryRule&&!(e instanceof $e)&&e.data.type===exports.KameleoonData.Conversion)&&a.push(e);if(a.length){const t=a.filter(e=>!(e instanceof $e)).map(e=>{const t=e;return t.status=exports.TrackingStatus.Pending,t});this.dataManager.storeTrackedData({[e]:t})}return a}getUnsentVariationData(e,t){const i=this.variationConfiguration.getUnsentData(e),a=new Set;if(!i.length)return[];const o=i.filter(e=>{const i=e.isTargetedRule||t;return i&&a.add(String(e.experimentId)),i});return this.variationConfiguration.updateDataStatus({visitorCode:e,experimentIdList:Array.from(a),status:exports.TrackingStatus.Pending}),o}}let Lt=class e{constructor({siteCode:e,dependencies:t,configuration:i,internalConfiguration:a,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 n=null==a?void 0:a.externals.externalLogger;n&&K.setLogger(n),Me.setConditionFactoryInstance(new pt),K.debug`CALL: new KameleoonClient(siteCode: ${e}, dependencies: ${t}, configuration: ${i})`;const{settings:s}=new Ke(e,i);this.environment=s.environment;const{externalStorage:l,externalEventSource:u,externalPackageInfo:d,externalVisitorCodeManager:c,externalRequester:p,externalPRNG:g,customDataManager:h}=a.externals,{useAbortController:v}=a.settings,m=new U(10),f=new mt(l,exports.KameleoonStorageKey.ClientData),C=new mt(l,exports.KameleoonStorageKey.VariationData),y=new mt(l,exports.KameleoonStorageKey.ForcedExperimentVariation),x=new mt(l,exports.KameleoonStorageKey.ForcedFeatureVariation),D=new mt(l,exports.KameleoonStorageKey.ConsentData),E=new mt(l,exports.KameleoonStorageKey.TrackingData);let T=h;if(!T){const e=new mt(l,exports.KameleoonStorageKey.TargetingData),t=new mt(l,exports.KameleoonStorageKey.DataInfo);T=new xt({dataStorage:e,infoStorage:t,cleanupInterval:s.cleanupInterval,packageInfo:d})}const I=null!==(r=null==t?void 0:t.urlProvider)&&void 0!==r?r:new _;I.initialize({domain:s.networkDomain,siteCode:s.siteCode,packageInfo:d,environment:s.environment});const k=new A({urlProvider:I,useAbortController:v,packageInfo:d,externalRequester:p,requestTimeout:s.requestTimeout,trackRetryDelay:s.trackRetryDelay}),S=new Ot({siteCode:s.siteCode,externalEventSource:u,urlProvider:I}),V=new P,w=new Re({urlProvider:I,storage:f,updateInterval:s.updateInterval,dataManager:T,eventManager:V,requester:k,eventSource:S,externalVisitorCodeManager:c,externalPackageInfo:d,defaultDataFile:null==i?void 0:i.defaultDataFile}),R=new At(C,y,x,c,w),b=new Nt({dataManager:T,trackingStorage:E,variationConfiguration:R,requester:k,trackingInterval:s.trackingInterval,prng:g,clientConfiguration:w});this.tracker=b,this.variationConfiguration=R,this.requester=k,this.trackingCache=m,this.dataManager=T,this.clientConfiguration=w,this.externalPackageInfo=d,this.consentDataStorage=D,this.visitorCodeManager=c,this.eventManager=V,null!==s.cleanupInterval&&new ft(l,s.cleanupInterval),K.debug`RETURN: new KameleoonClient(siteCode: ${e}, dependencies: ${t}, configuration: ${i})`}initialize(){return l(this,0,void 0,function*(){if(this.stubMode)return!1;K.info("CALL: KameleoonClient.initialize()");const e=yield this.clientConfiguration.initialize();return e.throw(),this.initialized=!0,K.info`RETURN: KameleoonClient.initialize() -> (result: ${e.ok})`,e.ok})}addData(e,...t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);const i="string"==typeof e?{visitorCode:e,data:t}:e,{visitorCode:a,data:o,track:r=!0}=i;if(K.info`CALL: KameleoonClient.addData(visitorCode: ${a}, track: ${r}, data: ${o})`,this.visitorCodeManager.validateVisitorCode(a).throw(),!this.initialized)throw new c(exports.KameleoonException.Initialization);this.dataManager.storeData({visitorCode:a,track:r,data:o}).throw(),K.info`RETURN: KameleoonClient.addData(visitorCode: ${a}, track: ${r}, data: ${o})`}getRemoteVisitorData({visitorCode:e,shouldAddData:t=!0,filters:i=J}){return l(this,0,void 0,function*(){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(K.info`CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${e}, shouldAddData: ${t}, filters: ${i})`,!this.initialized)throw new c(exports.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(e).throw();const{previousVisitAmount:a}=i;if("number"==typeof a&&(a<1||a>25))throw new c(exports.KameleoonException.VisitAmount);const o=this.dataManager.isUniqueIdentifier(e),r=(yield this.requester.getVisitorData({visitorCode:e,filters:i,isMappingIdentifier:o})).throw(),{visitorData:n,storageVisitorData:s,visitsData:l,mappingIdentifier:u}=we.parseVisitorData({data:r,filters:i,visitorCode:e,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});for(const i of s)(t||this.dataManager.isPersistentCustomData(i))&&this.addData(e,i);return l&&t&&this.addData(e,l),(null==i?void 0:i.visitorCode)&&u&&this.dataManager.setMappingIdentifier(e,u),K.info`RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${e}, shouldAddData: ${t}, filters: ${i}) -> (visitorData: ${n})`,n})}trackConversion({visitorCode:e,goalId:t,negative:i,revenue:a,metadata:o}){this.stubMode||(K.info`CALL: KameleoonClient.trackConversion(visitorCode: ${e}, goalId: ${t}, negative: ${i}, revenue: ${a}, metadata: ${o})`,this.addData(e,new Ce({goalId:t,revenue:a,negative:i,metadata:o})),this.flush(e),K.info`RETURN: KameleoonClient.trackConversion(visitorCode: ${e}, goalId: ${t}, negative: ${i}, revenue: ${a}, metadata: ${o})`)}_flushInternal(e,t=!1){return l(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(e){return l(this,0,void 0,function*(){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);const{visitorCode:t}=this._parseFlushParams(e);if(K.info`CALL: KameleoonClient.flushInstant(visitorCode: ${e})`,!this.initialized)throw new c(exports.KameleoonException.Initialization);yield this._flushInternal(t,!0),K.info`RETURN: KameleoonClient.flushInstant(visitorCode: ${e})`})}flush(e){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);const{visitorCode:t,isInstant:i}=this._parseFlushParams(e);if(K.info`CALL: KameleoonClient.flush(visitorCode: ${t}, instant: ${i})`,!this.initialized)throw new c(exports.KameleoonException.Initialization);this._flushInternal(t,i),K.info`RETURN: KameleoonClient.flush(visitorCode: ${t}, instant: ${i})`}_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 c(exports.KameleoonException.Initialization);if(K.info("CALL: KameleoonClient.getFeatureFlags()"),!this.initialized)throw new c(exports.KameleoonException.Initialization);const e=this.clientConfiguration.featureFlags,t=[];return e.forEach(({id:e,featureKey:i})=>{t.push({id:e,key:i})}),K.info`RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${t})`,t}getVisitorFeatureFlags(e){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(K.info`CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${e})`,!this.initialized)throw new c(exports.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(e).throw();const t=this._getActiveFeatureVariations(e),i=[];return t.forEach(({featureFlagId:e,featureKey:t})=>{i.push({id:e,key:t})}),K.info`RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${e}) -> (FeatureFlags: ${i})`,i}getVariation({visitorCode:e,featureKey:t,track:i=!0}){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);K.info`CALL: KameleoonClient.getVariation(visitorCode: ${e}, featureKey: ${t}, track: ${i})`,this.visitorCodeManager.validateVisitorCode(e).throw();const a=this._getFeatureVariation({visitorCode:e,featureKey:t,track:i}).throw();return K.info`RETURN: KameleoonClient.getVariation(visitorCode: ${e}, featureKey: ${t}, track: ${i}) -> (variation: ${a})`,a}getVariations({visitorCode:e,onlyActive:t=!1,track:i=!0}){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);K.info`CALL: KameleoonClient.getVariations(visitorCode: ${e}, onlyActive: ${t}, track: ${i})`,this.visitorCodeManager.validateVisitorCode(e).throw();const a=new Map,o=this.clientConfiguration.featureFlags;for(const r of o.values())try{const o=this._getFeatureVariation({visitorCode:e,featureKey:r.featureKey,track:i});!o.ok||t&&o.data.key===Y||a.set(r.featureKey,o.data)}catch(e){if(e instanceof c&&e.type!==exports.KameleoonException.FeatureFlagEnvironmentDisabled)throw e}return K.info`RETURN: KameleoonClient.getVariations(visitorCode: ${e}, onlyActive: ${t}, track: ${i}) -> (variations: ${a})`,a}getActiveFeatureFlags(e){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(K.info`CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${e})`,!this.initialized)throw new c(exports.KameleoonException.Initialization);this.visitorCodeManager.validateVisitorCode(e).throw();const t=this._getActiveFeatureVariations(e),i=new Map;return t.forEach(t=>{const{variationKey:a,featureKey:o,variationId:r,experimentId:n}=t;let s=[];null!==r&&null!==n&&(s=this._getFeatureVariables({visitorCode:e,featureKey:o,variationKey:a}));const l=s.map(e=>we.parseFeatureVariable(e).throw());i.set(t.featureKey,{name:"",key:a,id:r,experimentId:n,variables:l})}),K.info`RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${e}) -> (FeatureFlags: ${i})`,i}getFeatureFlagVariationKey(e,t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);K.info`CALL: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${e}, featureKey: ${t})`,this.visitorCodeManager.validateVisitorCode(e).throw();const{key:i}=this._getFeatureVariation({visitorCode:e,featureKey:t,track:!0}).throw();return K.info`RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${e}, featureKey: ${t}) -> (variationKey: ${i})`,i}getFeatureFlagVariable({visitorCode:e,featureKey:t,variableKey:i}){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);K.info`CALL: KameleoonClient.getFeatureFlagVariable(visitorCode: ${e}, featureKey: ${t}, variableKey: ${i})`,this.visitorCodeManager.validateVisitorCode(e).throw();const{key:a}=this._getFeatureVariation({visitorCode:e,featureKey:t,track:!0}).throw(),o=this._getFeatureVariables({visitorCode:e,featureKey:t,variationKey:a}).find(e=>e.key===i);if(!o)throw new c(exports.KameleoonException.FeatureFlagVariableNotFound,i,e);const{type:r,value:n}=we.parseFeatureVariable(o).throw(),s={type:r,value:n};return K.info`RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${e}, featureKey: ${t}, variableKey: ${i}) -> (FeatureFlagVariable: ${s})`,s}getFeatureFlagVariables(e,t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);K.info`CALL: KameleoonClient.getFeatureFlagVariables(visitorCode: ${e}, featureKey: ${t})`,this.visitorCodeManager.validateVisitorCode(e).throw();const{key:i}=this._getFeatureVariation({visitorCode:e,featureKey:t,track:!0}).throw(),a=this._getFeatureVariables({visitorCode:e,featureKey:t,variationKey:i}),o=[];for(const e of a){const t=we.parseFeatureVariable(e).throw();o.push(t)}return K.info`RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${e}, featureKey: ${t}) -> (FeatureFlagVariables: ${o})`,o}isFeatureFlagActive(e,t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);let[i,a,o]=["","",!0];"string"==typeof e?(i=e,a=t):([i,a]=[e.visitorCode,e.featureKey],void 0!==e.track&&(o=e.track)),K.info`CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track ${o})`,this.visitorCodeManager.validateVisitorCode(i).throw();try{const{key:e}=this._getFeatureVariation({visitorCode:i,featureKey:a,track:o}).throw(),t=e!==Y;return K.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track: ${o}) -> (isActive: ${t})`,t}catch(e){if(e instanceof c&&e.type===exports.KameleoonException.FeatureFlagEnvironmentDisabled)return K.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track: ${o}) -> (isActive: false)`,!1;throw e}}getRemoteData(e){return l(this,0,void 0,function*(){if(this.stubMode)return null;K.info`CALL: KameleoonClient.getRemoteData(key: ${e})`;const t=yield this.requester.getRemoteData(e);return K.info`RETURN: KameleoonClient.getRemoteData(key: ${e}) -> (remoteData: ${t})`,t.throw()})}getVisitorWarehouseAudience({visitorCode:e,customDataIndex:t,warehouseKey:i}){return l(this,0,void 0,function*(){if(this.stubMode)return null;K.info`CALL: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${e}, customDataIndex: ${t}, warehouseKey: ${i})`,this.visitorCodeManager.validateVisitorCode(e).throw();const a=yield this.getRemoteData(i||e);if(!a)throw new c(exports.KameleoonException.RemoteData,`No data found for ${i||e} key`);if(!a[X]||0===Object.keys(a[X]).length)return K.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${e}, customDataIndex: ${t}, warehouseKey: ${i}) -> (customData: null)`,null;const o=new fe(t,...Object.keys(a[X]));return this.dataManager.storeData({visitorCode:e,track:!0,data:[o]}),K.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${e}, customDataIndex: ${t}, warehouseKey: ${i}) -> (customData: ${o})`,o})}onEvent(e,t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(K.info`CALL: KameleoonClient.onEvent(event: ${e}, callback)`,!this.initialized)throw new c(exports.KameleoonException.Initialization);this.eventManager.addEventHandler(e,t),K.info`RETURN: KameleoonClient.onEvent(event: ${e}, callback)`}getEngineTrackingCode(e){if(this.stubMode)return"";K.info`CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${e})`,this.visitorCodeManager.validateVisitorCode(e).throw();const t=he.getTrackingCode(this.trackingCache,e);return K.info`RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${e}) -> (trackingCode: ${t})`,t}isInitialized(){return K.debug`CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`,this.initialized}setLogLevel(e){K.setLogLevel(e)}setForcedVariation({visitorCode:e,experimentId:t,variationKey:i,forceTargeting:a=!0}){this.stubMode||(K.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(),K.info`RETURN: KameleoonClient.setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a})`)}evaluateAudiences(e){if(this.stubMode)return;K.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 o=he.checkTargeting({segment:a,visitorCode:e,targetingData:i,experimentId:null,clientConfiguration:this.clientConfiguration,packageInfo:this.externalPackageInfo,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});o.ok&&o.data&&(K.info`Visitor ${e} has been targeted for ${a}`,t.push(new yt(Number(a.id))))}0!==t.length&&this.dataManager.storeData({visitorCode:e,data:t}),this.flush(e),K.info`RETURN: KameleoonClient.evaluateAudiences(visitorCode: ${e})`}getDataFile(){const e={featureFlags:new Map,dateModified:0};if(this.stubMode)return e;K.debug`CALL: KameleoonClient.getDataFile()`;const t=this.clientConfiguration.dataFile;return K.debug`RETURN: KameleoonClient.getDataFile() -> (dataFile: ${t})`,t}setUserConsent({visitorCode:e,consent:t,setData:i}){this.stubMode||(K.info`CALL: KameleoonClient.setUserConsent(visitorCode: ${e}, consent: ${t}, setData: ${i})`,this.visitorCodeManager.validateVisitorCode(e).throw(),this.updateConsentData(e,t),t&&i({visitorCode:e,key:exports.KameleoonStorageKey.VisitorCode,maxAge:Dt,path:"/"}),K.info`RETURN: KameleoonClient.setUserConsent(visitorCode: ${e}, consent: ${t}, setData: ${i})`)}updateConsentData(e,t){const i=this.consentDataStorage.read(),a=t?Ct.Given:Ct.NotGiven;if(!i.ok)return void(i.error.type===exports.KameleoonException.StorageEmpty&&this.consentDataStorage.write({[e]:{consent:a}}));const o=i.data;o[e]={consent:a},this.consentDataStorage.write(o)}getLegalConsent(e){let t;K.debug`CALL: KameleoonClient.getLegalConsent(visitorCode: ${e})`;const i=this.consentDataStorage.read();return t=i.ok?this.extractLegalConsent(i.data[e]):Ct.Unknown,K.debug`RETURN: KameleoonClient.getLegalConsent(visitorCode: ${e}) -> (legalConsent: ${t})`,t}extractLegalConsent(e){if(void 0===e)return Ct.Unknown;if("boolean"==typeof e)return e?Ct.Given:Ct.NotGiven;const t=e.consent;return"boolean"==typeof t?t?Ct.Given:Ct.NotGiven:t}_isConsentProvided(e){K.debug`CALL: KameleoonClient._isConsentProvided(visitorCode: ${e})`;const{isConsentRequired:t}=this.clientConfiguration,i=!t||this.getLegalConsent(e)==Ct.Given;return K.debug`RETURN: KameleoonClient._isConsentProvided(visitorCode: ${e}) -> (isConsentProvided: ${i})`,i}_getFeatureVariables({visitorCode:e,featureKey:t,variationKey:i}){K.debug`CALL: KameleoonClient._getFeatureVariables(visitorCode: ${e}, featureKey: ${t}, variationKey: ${i})`;const a=this.clientConfiguration.featureFlags.get(t);if(!a)throw new c(exports.KameleoonException.FeatureFlagConfigurationNotFound,t);const o=a.variations.find(e=>e.key===i);if(!o)throw new c(exports.KameleoonException.FeatureFlagVariationNotFound,i,e);return K.debug`RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${e}, featureKey: ${t}, variationKey: ${i}) -> (variables: ${o.variables})`,o.variables}_getActiveFeatureVariations(e){K.debug`CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${e})`;const t=this.clientConfiguration.featureFlags,i=[];for(const a of t.values()){const t=this._getForcedFeatureVariation(e,a.featureKey);if(a.environmentEnabled||(null==t?void 0:t.simulated))try{const o=this._evaluate({visitorCode:e,featureFlag:a,track:!1,save:!1,forcedVariation:t});o.variationKey!==Y&&i.push({variationKey:o.variationKey,variationId:o.variationId,experimentId:o.experimentId,featureFlagId:a.id,featureKey:a.featureKey,rule:null,isTargetedRule:o.ruleType===F.TARGETED_DELIVERY})}catch(e){if(e instanceof c){e.type!=exports.KameleoonException.FeatureFlagEnvironmentDisabled&&K.error`Unexpected error: ${e}`;continue}}}return K.debug`RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${e}) -> (activeVariations: ${i})`,i}_evaluate({visitorCode:t,featureFlag:i,track:a,save:o,forcedVariation:r}){let n;K.debug`CALL: KameleoonClient._evaluate(visitorCode: ${t}, featureFlag: ${i}, track: ${a}, save: ${o})`;const s=this.dataManager.getVisitorData(t);if(r)n=e.EvaluatedExperiment.fromForcedFeatureVariation(i.defaultVariationKey,r);else if(this._isVisitorNotInHoldout(t,a,o,i,s)&&this._isFFUnrestrictedByMEGroup(t,i,s)){const r=this._getCodeForHash(t,i.bucketingCustomDataIndex,s),l=this.getLegalConsent(t),u=this.variationConfiguration.getVariation({visitorCode:t,visitorIdentifier:r,featureFlag:i,track:a,withAssignment:o,targetingData:s,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo,legalConsent:l}).throw();n=e.EvaluatedExperiment.fromVariationData(u)}else n=e.EvaluatedExperiment.fromDefaultVariationKey(i.defaultVariationKey);return o&&!n.isSimulated&&null!==n.experimentId&&null!==n.variationId&&this.variationConfiguration.updateStoredVariations(t,{[n.experimentId]:{variationId:n.variationId,isTargetedRule:n.ruleType===F.TARGETED_DELIVERY,status:a?exports.TrackingStatus.Unsent:exports.TrackingStatus.Sent,assignedTime:Date.now()}}),this.eventManager.fireEvent(exports.EventType.Evaluation,{featureKey:i.featureKey,variation:{key:n.variationKey,experimentId:n.experimentId,id:n.variationId}}),K.debug`RETURN: KameleoonClient._evaluate(visitorCode: ${t}, featureFlag: ${i}, track: ${a}, save: ${o}) -> (evalExp: ${n})`,n}_isFFUnrestrictedByMEGroup(e,t,i){const a=t.mutuallyExclusiveGroup;if(!a)return!0;K.debug`CALL: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${e}, featureFlag: ${t}, visitorData: ${i})`;let o=!0;const r=this.clientConfiguration.meGroups.get(a);if(r){const n=this._getCodeForHash(e,t.bucketingCustomDataIndex,i),s=Kt.getHashDoubleForMEGroup(n,a);K.debug`Calculated meGroup hash ${s} for code: ${n}, meGroup: ${a}`,o=r.getFeatureFlagByHash(s)===t}return K.debug`RETURN: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${e}, featureFlag: ${t}, visitorData: ${i}) -> (selected: ${o})`,o}_getFeatureVariation({visitorCode:e,featureKey:t,track:i}){var a,o;if(K.debug`CALL: KameleoonClient._getFeatureVariation(visitorCode: ${e}, featureKey: ${t}, track: ${i})`,!this.initialized)return s.Err(new c(exports.KameleoonException.Initialization));const r=this.clientConfiguration.featureFlags.get(t);if(!r)return s.Err(new c(exports.KameleoonException.FeatureFlagConfigurationNotFound,t));const n=this._getForcedFeatureVariation(e,t);if(!r.environmentEnabled&&!(null==n?void 0:n.simulated))return s.Err(new c(exports.KameleoonException.FeatureFlagEnvironmentDisabled,r.featureKey,this.environment));const l=this._evaluate({visitorCode:e,featureFlag:r,track:i,save:!0,forcedVariation:n}),{experimentId:u,variationId:d,variationKey:p,isSimulated:g}=l;let h=new Map,v=!1;try{this._getFeatureVariables({visitorCode:e,featureKey:t,variationKey:p}).forEach(e=>{v||e.type!==exports.VariableType.JS&&e.type!==exports.VariableType.CSS||(v=!0);const t=we.parseFeatureVariable(e).throw();h.set(e.key,t)})}catch(e){}u&&"number"==typeof d&&!g&&he.updateCache({cacheManager:this.trackingCache,hasJsCssVariables:v,visitorCode:e,experimentId:u,variationId:d}),i&&!g&&this.tracker.scheduleVisitor(e,this._isConsentProvided(e));const m={name:null!==(o=null===(a=r.variations.find(e=>e.key===p))||void 0===a?void 0:a.name)&&void 0!==o?o:"",key:p,id:d,experimentId:u,variables:h};return K.debug`RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${e}, featureKey: ${t}, track: ${i}) -> (variation: ${m})`,s.Ok(m)}_isVisitorNotInHoldout(e,t,i,a,o){const r=this.clientConfiguration.holdout;if(!r)return!0;K.debug`CALL: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${e}, track: ${t}, save: ${i}, featureFlag: ${a}, visitorData: ${o})`;let n=!0;if((this.clientConfiguration.isConsentRequired?this.getLegalConsent(e):Ct.Given)==Ct.NotGiven&&this.clientConfiguration.consentBlockingBehaviour==L.CompletelyBlocked)throw new c(exports.KameleoonException.FeatureFlagEnvironmentDisabled,`Evaluation of holdout is blocked because consent is not provided for visitor '${e}'`);const s=this._getCodeForHash(e,null==a?void 0:a.bucketingCustomDataIndex,o),l=Kt.getHashDouble({visitorIdentifier:s,respoolTime:null,id:String(r.experimentId)});K.debug`Calculated holdoutHash: ${l} for visitorCode: ${s}`;let u=he.getVariationByHash(r.variationByExposition,l);return null!==u&&(n="in-holdout"!==u.variationKey,i&&this.variationConfiguration.updateStoredVariations(e,{[r.experimentId]:{variationId:u.variationId,isTargetedRule:!1,status:t?exports.TrackingStatus.Unsent:exports.TrackingStatus.Sent,assignedTime:Date.now()}})),K.debug`RETURN: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${e}, track: ${t}, save: ${i}, featureFlag: ${a}, visitorData: ${o}) -> (isNotInHoldout: ${n})`,n}_setForcedVariation({visitorCode:e,experimentId:t,variationKey:i,forceTargeting:a=!0}){if(K.debug`CALL: KameleoonClient._setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a})`,null===i){const o=this.variationConfiguration.updateForcedExperimentVariation(e,t,null);return K.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a}) -> (writeResult: ${o})`,o}let o=null,r=null;if(o=this.clientConfiguration.experimentMap.get(t),!o)return K.error`Experiment with id ${t} not found for visitor ${e}`,s.Err(new c(exports.KameleoonException.FeatureFlagExperimentNotFound,t,e));if(r=o.variations.get(i),void 0===r)return K.error`Variation with key ${i} not found in experiment ${o} for visitor ${e}`,s.Err(new c(exports.KameleoonException.FeatureFlagVariationNotFound,i,e));o={type:o.type,experimentId:t},r={variationKey:i,variationId:r};const n=this.variationConfiguration.updateForcedExperimentVariation(e,t,{rule:o,varByExp:r,forceTargeting:a});return K.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a}) -> (writeResult: ${n})`,n}_getForcedFeatureVariation(e,t){const i=this.variationConfiguration.getForcedFeatureVariation(e,t);return i.ok?i.data:null}_getCodeForHash(e,t,i){var a;let o;if(K.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&&(o=i)}}return o||(o=this.dataManager.getVisitorIdentifier(e)),K.debug`RETURN: KameleoonClient._getCodeForHash(visitorCode: ${e}, bucketingCustomDataIndex: ${t}, visitorData: ${i}) -> (codeForHash: ${o})`,o}_refreshDataFileIfStale(){return l(this,0,void 0,function*(){const e=yield this.clientConfiguration.refreshDataFileIfStale();return e.ok&&e.data})}};Lt.EvaluatedExperiment=class{static fromForcedFeatureVariation(e,t){var i,a,o,r;let n=e;return t.varByExp?n=t.varByExp.variationKey:(null===(i=t.rule)||void 0===i?void 0:i.type)===F.EXPERIMENTATION&&(n=Y),{variationKey:n,variationId:(null===(a=t.varByExp)||void 0===a?void 0:a.variationId)||null,experimentId:(null===(o=t.rule)||void 0===o?void 0:o.experimentId)||null,ruleType:(null===(r=t.rule)||void 0===r?void 0:r.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 _t{static simulateSuccessRequest(e,t){switch(e){case exports.RequestType.Tracking:return new Promise(e=>{e({status:204,json:()=>new Promise(e=>e(null)),text:()=>new Promise(e=>e("")),ok:!0})});case exports.RequestType.Configuration:case exports.RequestType.RemoteData:return new Promise(e=>{e({status:200,json:()=>new Promise(e=>e(t)),text:()=>new Promise(e=>e("")),ok:!0})});default:d(e)}}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 Ut,Pt=s.Err,Gt=s.Ok;function Bt(e,t,i,a){return new(i||(i=Promise))(function(t,o){function r(e){try{s(a.next(e))}catch(e){o(e)}}function n(e){try{s(a.throw(e))}catch(e){o(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(r,n)}s((a=a.apply(e,[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class zt{sendRequest({url:e,parameters:t}){return Bt(this,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"}(Ut||(Ut={}));const jt=15*exports.Milliseconds.Second,qt=30*exports.Milliseconds.Minute;class Ht{getData(e){K.debug`CALL: VisitorCodeManager.getData(key: ${e})`;const t=document.cookie;let i=null;return t&&(i=_t.getCookieValue(t,e)),K.debug`RETURN: VisitorCodeManager.getData(key: ${e}) -> (visitorCode: ${i})`,i}setData({visitorCode:e,domain:t,maxAge:i,key:a,path:o}){const r=this.getResultCookie({domain:t,visitorCode:e,key:a,maxAge:i,path:o});document.cookie=r,K.debug`Cookie ${r} was added for visitor ${e}`}getResultCookie({domain:e,visitorCode:t,maxAge:i,key:a,path:o}){const r=[a+Ut.KeyValueDelimiter+t,Ut.MaxAge+Ut.KeyValueDelimiter+i,Ut.Path+Ut.KeyValueDelimiter+o];return e&&r.push(Ut.Domain+Ut.KeyValueDelimiter+e),r.join(Ut.PairsDelimiter)}}class Wt{read(e){const t=localStorage.getItem(e);return e!==exports.KameleoonStorageKey.ConsentData||t&&"{}"!==t?t?JSON.parse(t):null:this.getEngineConsentData()}write(e,t){localStorage.setItem(e,JSON.stringify(t))}getEngineConsentData(){var e;this.visitorCodeManager||(this.visitorCodeManager=new Ht);const t=this.visitorCodeManager.getData(exports.KameleoonStorageKey.VisitorCode);if(!t)return null;try{const i=localStorage.getItem("kameleoonLegalConsent");if(!i)return null;const a=JSON.parse(i),o=null===(e=null==a?void 0:a.value)||void 0===e?void 0:e.AB_TESTING;return"boolean"==typeof o?{[t]:{consent:o?Ct.Given:Ct.NotGiven}}:null}catch(e){return null}}}class Yt{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 Xt{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 Jt{log(e,t){switch(t=`${(new Date).toLocaleString("en-US",{timeZoneName:"short"})} ${t}`,e){case exports.LogLevel.DEBUG:console.debug(t);break;case exports.LogLevel.INFO:console.info(t);break;case exports.LogLevel.WARNING:console.warn(t);break;case exports.LogLevel.ERROR:console.error(t)}}}class Qt{constructor(e,t,i,a){K.debug`CALL: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${a})`,this.dataManager=e,this.tracker=t,this.isConsentProvided=i,this.setup(a),K.debug`RETURN: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${a})`}setup(e){setInterval(()=>{this.updateLastActivity()},e),this.updateLastActivity()}updateLastActivity(){K.debug`CALL: VisitorActivityManager.updateLastActivity()`;const e=this.dataManager.updateLastActivity();e&&this.tracker.scheduleVisitor(e,this.isConsentProvided(e)),K.debug`RETURN: VisitorActivityManager.updateLastActivity()`}}class Zt extends xt{constructor({dataStorage:e,infoStorage:t,cleanupInterval:i,packageInfo:a,platformAnalyzer:o}){K.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=o,this.updateVisitor(),K.debug`RETURN: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${i} packageInfo: ${a}, platformAnalyzer)`}getUnsentData(e){var t,i;const a=super.getUnsentData(e),o=super.getVisitorData(e);if(!o)return a;const r=o[exports.KameleoonData.Browser],n=o[exports.KameleoonData.Device],s=o[exports.KameleoonData.OperatingSystem],l=new $e({browserType:null==r?void 0:r.browser,browserVersion:null==r?void 0:r.version,visitNumber:null===(t=this.visitor)||void 0===t?void 0:t.visitNumber,timeSincePreviousVisit:null===(i=this.visitor)||void 0===i?void 0:i.timeSincePreviousVisit,os:null==s?void 0:s.operatingSystem,deviceType:null==n?void 0:n.device});return a.push(l),a}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 e,t,i,a;if(!this.visitor)return null;const o=this.dataStorage.read();if(!o.ok)return null;const r=o.data;let n=null!==(e=r[this.visitor.visitorCode])&&void 0!==e?e:{};"string"==typeof n&&(n=r[n]);let s=n[exports.KameleoonData.VisitsData];s||(s={visits:[],visitNumber:0,type:exports.KameleoonData.VisitsData,status:exports.TrackingStatus.Sent,expirationTime:0},n[exports.KameleoonData.VisitsData]=s);const l=this.fetchVisit(s.visits,s.visits.length-1),u=null!==(t=null==l?void 0:l.timeLastActivity)&&void 0!==t?t:0,d=Date.now();let c=null!==(i=s.visitNumber)&&void 0!==i?i:s.visits.length?s.visits.length-1:0;if(d-u>qt)c+=u>0?1:0,ve.insertVisitInOrderedListMutably({list:s.visits,visit:{timeStarted:d,timeLastActivity:d}}),this.visitor.timeSincePreviousVisit=l?d-u:0;else if(s.visits.length&&(s.visits[s.visits.length-1]={timeStarted:null!==(a=null==l?void 0:l.timeStarted)&&void 0!==a?a:d,timeLastActivity:d},-1===this.visitor.timeSincePreviousVisit)){const e=this.fetchVisit(s.visits,s.visits.length-2);this.visitor.timeSincePreviousVisit=e?d-e.timeLastActivity:0}return s.visitNumber=c,this.visitor.visitNumber=c,this.dataStorage.write(r),this.visitor.visitorCode}checkVisitor(e){this.visitor&&this.visitor.visitorCode===e||this.createVisitor(e)}createVisitor(e){var t,i,a;K.debug`CALL: ClientDataManager.createVisitor(visitorCode: ${e})`,this.visitor=new ei(e);try{const o=this.platformAnalyzer.getResult(),r=[];(null===(t=o.os)||void 0===t?void 0:t.name)&&r.push(new De(o.os.name)),(null===(i=o.platform)||void 0===i?void 0:i.type)&&r.push(new xe(o.platform.type)),(null===(a=o.browser)||void 0===a?void 0:a.name)&&r.push(new ye(o.browser.name,o.browser.version)),o.pageView&&r.push(o.pageView),r.length&&this.storeData({visitorCode:e,data:r})}finally{this.updateLastActivity()}K.debug`RETURN: ClientDataManager.createVisitor(visitorCode: ${e})`}updateVisitor(){var e;K.debug`CALL: ClientDataManager.updateVisitor()`;const t=this.dataStorage.read();if(!t.ok)return;const i=t.data;let a,o=-1;for(const[t,r]of Object.entries(i)){if("string"==typeof r)continue;const i=r[exports.KameleoonData.VisitsData];if(!i){a||(a=t);continue}const n=i.visits.length?i.visits[i.visits.length-1]:null;if(n){const i=null!==(e="number"==typeof n?n:null==n?void 0:n.timeLastActivity)&&void 0!==e?e:0;i>o&&(o=i,a=t)}else a||(a=t)}a?this.createVisitor(a):(this.visitor=null,K.debug`ClientDataManager no visitor found`),K.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 ei{constructor(e){this.visitNumber=0,this.timeSincePreviousVisit=-1,this.visitorCode=e}}class ti{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 ii{constructor(){this.userAgent=navigator.userAgent||"",K.debug`PlatformParser: userAgent = ${this.userAgent}`,this.parsedResult={},""!==this.userAgent&&this.parse()}parseBrowser(){const e=[{test:[/chrome|crios|crmo/i],describe:e=>({name:exports.BrowserType.Chrome,version:this.getBrowserVersion(ti.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/firefox|iceweasel|fxios/i],describe:e=>({name:exports.BrowserType.Firefox,version:this.getBrowserVersion(ti.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/safari|applewebkit/i],describe:e=>({name:exports.BrowserType.Safari,version:this.getBrowserVersion(ti.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/opr\/|opios/i],describe:e=>({name:exports.BrowserType.Opera,version:this.getBrowserVersion(ti.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e))})},{test:[/edg([ea]|ios)/i],describe:e=>({name:exports.BrowserType.InternetExplorer,version:this.getBrowserVersion(ti.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/googlebot/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(ti.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||ti.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/SamsungBrowser/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(ti.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/yabrowser/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(ti.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/ucbrowser/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(ti.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/vivaldi/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(ti.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/phantom/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(ti.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/electron/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(ti.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e))})},{test:[/chromium/i],describe:e=>({name:exports.BrowserType.Other,version:this.getBrowserVersion(ti.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/opera/i],describe:e=>({name:exports.BrowserType.Opera,version:this.getBrowserVersion(ti.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e))})},{test:[/msie|trident/i],describe:e=>({name:exports.BrowserType.InternetExplorer,version:this.getBrowserVersion(ti.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e))})},{test:[/.*/i],describe:e=>{const t=e.includes("(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:exports.BrowserType.Other,version:this.getBrowserVersion(ti.getSecondMatch(t,e))}}}].find(e=>e.test.some(e=>e.test(this.userAgent)));return e&&(this.parsedResult.browser=e.describe(this.userAgent)),this.parsedResult.browser||{}}parseOS(){const e=[{test:[/windows phone/i],describe:()=>({name:exports.OperatingSystemType.WindowsPhone})},{test:[/windows /i],describe:()=>({name:exports.OperatingSystemType.Windows})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:e=>({name:exports.OperatingSystemType.IOS,version:ti.getSecondMatch(/(Version\/)(\d[\d.]+)/,e)})},{test:[/macintosh/i],describe:e=>({name:exports.OperatingSystemType.Mac,version:ti.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,".")})},{test:[/(ipod|iphone|ipad)/i],describe:e=>({name:exports.OperatingSystemType.IOS,version:ti.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".")})},{test:[/android/i],describe:()=>({name:exports.OperatingSystemType.Android})},{test:[/linux/i],describe:()=>({name:exports.OperatingSystemType.Linux})}].find(e=>e.test.some(e=>e.test(this.userAgent)));return e&&(this.parsedResult.os=e.describe(this.userAgent)),this.parsedResult.os||{}}parsePlatform(){const e=[{test:()=>{var e,t;return(null===(e=this.parsedResult.os)||void 0===e?void 0:e.name)===exports.OperatingSystemType.Android&&Number(String(null===(t=this.parsedResult.os)||void 0===t?void 0:t.version).split(".")[0])>=3},describe:e=>({type:exports.DeviceType.Tablet})},{test:()=>{var e;return(null===(e=this.parsedResult.os)||void 0===e?void 0:e.name)===exports.OperatingSystemType.Android},describe:()=>({type:exports.DeviceType.Phone})},{test:()=>{var e;return(null===(e=this.parsedResult.os)||void 0===e?void 0:e.name)===exports.OperatingSystemType.Mac},describe:()=>({type:exports.DeviceType.Desktop})},{test:()=>{var e;return(null===(e=this.parsedResult.os)||void 0===e?void 0:e.name)===exports.OperatingSystemType.Windows},describe:()=>({type:exports.DeviceType.Desktop})},{test:()=>{var e;return(null===(e=this.parsedResult.os)||void 0===e?void 0:e.name)===exports.OperatingSystemType.Linux},describe:()=>({type:exports.DeviceType.Desktop})}],t=[{test:[/huserAgentwei/i],describe:e=>({type:exports.DeviceType.Phone})},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/ipad/i],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/kftt build/i],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/silk/i],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/tablet(?! pc)/i],describe:()=>({type:exports.DeviceType.Tablet})},{test:[/ipod|iphone/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/[^-]mobi/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/blackberry/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/bada/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/windows phone/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/android/i],describe:()=>({type:exports.DeviceType.Phone})},{test:[/ios/i],describe:()=>({type:exports.DeviceType.Desktop})},{test:[/windows/i],describe:()=>({type:exports.DeviceType.Desktop})},{test:[/linux/i],describe:()=>({type:exports.DeviceType.Desktop})}].find(e=>e.test.some(e=>e.test(this.userAgent)))||e.find(e=>e.test());return t&&(this.parsedResult.platform=t.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 me({urlAddress:t,title:e})}}getResult(){return this.parseWebView(),ti.assign({},this.parsedResult)}}class ai extends Lt{constructor({siteCode:e,configuration:t,externals:i,_internals:a,stubMode:o}){var r;if(o)return super({siteCode:e,internalConfiguration:{},stubMode:o}),this.internalVisitorCodeManager={},void(this.externalVisitorCodeManager={});const n=(null==a?void 0:a.prng)||new Xt,s=(null==i?void 0:i.storage)||new Wt,l=(null==i?void 0:i.requester)||new zt,u=(null==i?void 0:i.eventSource)||new Yt,d=new Et,c=(null==i?void 0:i.visitorCodeManager)||new Ht,p=(null==a?void 0:a.packageInfo)||{type:exports.SdkLanguageType.JAVASCRIPT,version:"4.22.0",isServer:!1},g=new mt(s,exports.KameleoonStorageKey.TargetingData),h=new mt(s,exports.KameleoonStorageKey.DataInfo),v=new Zt({dataStorage:g,infoStorage:h,cleanupInterval:0,packageInfo:p,platformAnalyzer:null!==(r=null==a?void 0:a.platformAnalyzer)&&void 0!==r?r:new ii});super({siteCode:e,configuration:t,internalConfiguration:{externals:{externalPRNG:n,externalStorage:s,externalRequester:l,externalEventSource:u,externalVisitorCodeManager:d,externalPackageInfo:p,externalLogger:(null==i?void 0:i.logger)||new Jt,customDataManager:v},settings:{useAbortController:!0}}});const m=ge.validateDomain(null==t?void 0:t.cookieDomain);this.domain=m.ok?m.data:void 0,this.internalVisitorCodeManager=d,this.externalVisitorCodeManager=c,this.customDataManager=v}initialize(){const e=Object.create(null,{initialize:{get:()=>super.initialize}});return Bt(this,0,void 0,function*(){if(this.stubMode)return!1;const t=e.initialize.call(this);return new Qt(this.customDataManager,this.tracker,e=>this._isConsentProvided(e),jt),t})}getVisitorCode(e){var t;if(this.stubMode)return"";K.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)),K.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))}}const oi=a.createContext(null);var ri=a.memo(function({client:e,children:t}){return i.jsx(oi.Provider,Object.assign({value:{kameleoonClient:e,sdkParameters:null}},{children:t}))});var ni=a.memo(function({sdkParameters:e,children:t}){return i.jsx(oi.Provider,Object.assign({value:{kameleoonClient:null,sdkParameters:e}},{children:t}))});function si(e,t,i,a){return new(i||(i=Promise))(function(o,r){function n(e){try{l(a.next(e))}catch(e){r(e)}}function s(e){try{l(a.throw(e))}catch(e){r(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(n,s)}l((a=a.apply(e,t||[])).next())})}function li({siteCode:e,configuration:t,externals:i,stubMode:a}){return new ai({siteCode:e,configuration:t,externals:i,_internals:{packageInfo:{type:exports.SdkLanguageType.REACT,version:"10.24.0",isServer:!1},prng:null==i?void 0:i.prng,platformAnalyzer:null==i?void 0:i.platformAnalyzer},stubMode:a})}function ui(){const e=a.useContext(oi);if(!e)throw new Error("Kameleoon SDK hooks must be used within a KameleoonProvider");return e}function di(e){if(!e)throw new Error("Kameleoon SDK hooks must be used within a KameleoonProvider");if(!e.kameleoonClient){const t=e.sdkParameters;if(t)return t.stubMode=!1,e.kameleoonClient=li(t),e.kameleoonClient;throw new Error("Kameleoon SDK hooks must be used within a KameleoonProvider")}return e.kameleoonClient}"function"==typeof SuppressedError&&SuppressedError,exports.ApplicationVersion=class{constructor(e){this.version=e,this.status=exports.TrackingStatus.Sent}get url(){return""}get data(){return{version:this.version,type:exports.KameleoonData.ApplicationVersion,status:this.status}}},exports.Browser=ye,exports.Conversion=Ce,exports.Cookie=Ae,exports.CustomData=fe,exports.DataManager=xt,exports.DataProcessor=Fe,exports.DataStorage=mt,exports.Device=xe,exports.Err=Pt,exports.GeolocationData=Ee,exports.KameleoonClient=ai,exports.KameleoonContext=oi,exports.KameleoonCore=Lt,exports.KameleoonError=c,exports.KameleoonLogger=K,exports.KameleoonProvider=ri,exports.KameleoonProviderSSR=ni,exports.KameleoonUtils=_t,exports.ListUtilities=ve,exports.NUMBER_OF_RETRIES=1,exports.Ok=Gt,exports.OperatingSystem=De,exports.PageView=me,exports.Parser=we,exports.StaticData=$e,exports.Tree=Le,exports.UniqueIdentifier=Oe,exports.UserAgent=class{constructor(e){this.value=e,this.status=exports.TrackingStatus.Sent}get url(){return""}get data(){return{value:this.value,type:exports.KameleoonData.UserAgent,status:this.status}}},exports.Utilities=he,exports.VISITOR_CODE_LENGTH=16,exports.VISIT_DURATION=ht,exports.Validator=ge,exports.VisitorCodeManager=Et,exports.createClient=li,exports.useData=function(){const e=ui();let t=e?e.kameleoonClient:null;const i=a.useCallback((t,...i)=>{const a=di(e);"string"!=typeof t?a.addData(t):a.addData(t,...i)},[e]),o=a.useCallback(i=>{t=di(e),t.flush(i)},[e]),r=a.useCallback(i=>si(this,void 0,void 0,function*(){return t=di(e),t.flushInstant(i)}),[e]),n=a.useCallback(({visitorCode:i,goalId:a,revenue:o,negative:r,metadata:n})=>{t=di(e),t.trackConversion({visitorCode:i,goalId:a,revenue:o,negative:r,metadata:n})},[e]);return{getRemoteData:a.useCallback(i=>si(this,void 0,void 0,function*(){return t=di(e),yield t.getRemoteData(i)}),[e]),getRemoteVisitorData:a.useCallback(i=>si(this,void 0,void 0,function*(){return t=di(e),yield t.getRemoteVisitorData(i)}),[e]),getVisitorWarehouseAudience:a.useCallback(i=>si(this,void 0,void 0,function*(){return t=di(e),yield t.getVisitorWarehouseAudience(i)}),[e]),trackConversion:n,addData:i,flush:o,flushInstant:r}},exports.useFeatureFlag=function(){const e=ui();let t=e?e.kameleoonClient:null;const i=a.useCallback((i,a)=>{if(t=di(e),"string"==typeof i){if(!a)throw new Error("[Kameleoon React SDK Error]: Overload is not used correctly. The second parameter must be provided when the first parameter is a string");return t.isFeatureFlagActive(i,a)}return t.isFeatureFlagActive(i)},[e]),o=a.useCallback(()=>(t=di(e),t.getDataFile()),[e]),r=a.useCallback(({visitorCode:i,featureKey:a,track:o})=>(t=di(e),t.getVariation({visitorCode:i,featureKey:a,track:o})),[e]),n=a.useCallback(({visitorCode:i,onlyActive:a,track:o})=>(t=di(e),t.getVariations({visitorCode:i,onlyActive:a,track:o})),[e]),s=a.useCallback((i,a)=>(t=di(e),t.getFeatureFlagVariationKey(i,a)),[e]),l=a.useCallback(({visitorCode:i,featureKey:a,variableKey:o})=>(t=di(e),t.getFeatureFlagVariable({visitorCode:i,featureKey:a,variableKey:o})),[e]),u=a.useCallback(i=>(t=di(e),t.getVisitorFeatureFlags(i)),[e]),d=a.useCallback(i=>(t=di(e),t.getActiveFeatureFlags(i)),[e]),c=a.useCallback(()=>(t=di(e),t.getFeatureFlags()),[e]),p=a.useCallback((i,a)=>(t=di(e),t.getFeatureFlagVariables(i,a)),[e]);return{getActiveFeatureFlags:d,getDataFile:o,getVariation:r,getVariations:n,getFeatureFlags:c,isFeatureFlagActive:i,getEngineTrackingCode:a.useCallback(i=>(t=di(e),t.getEngineTrackingCode(i)),[e]),getVisitorFeatureFlags:u,getFeatureFlagVariable:l,getFeatureFlagVariables:p,getFeatureFlagVariationKey:s,setForcedVariation:a.useCallback(({visitorCode:i,experimentId:a,variationKey:o,forceTargeting:r})=>(t=di(e),t.setForcedVariation({visitorCode:i,experimentId:a,variationKey:o,forceTargeting:r})),[e]),evaluateAudiences:a.useCallback(i=>(t=di(e),t.evaluateAudiences(i)),[e])}},exports.useInitialize=function(){const e=ui();let t=e?e.kameleoonClient:null;const i=a.useCallback(()=>si(this,void 0,void 0,function*(){return t=di(e),yield t.initialize()}),[e]);return{onEvent:a.useCallback((i,a)=>{t=di(e),t.onEvent(i,a)},[e]),initialize:i,isInitialized:a.useCallback(()=>(t=di(e),t.isInitialized()),[e])}},exports.useKameleoon=function(){const e=a.useContext(oi);if(!e)throw new Error("Kameleoon SDK hooks must be used within a KameleoonProvider");return di(e)},exports.useLog=function(){const e=ui();let t=e?e.kameleoonClient:null;return{setLogLevel:a.useCallback(i=>{t=di(e),t.setLogLevel(i)},[e])}},exports.useVisitorCode=function(){const e=ui();let t=e?e.kameleoonClient:null;return{setLegalConsent:a.useCallback((i,a)=>{t=di(e),t.setLegalConsent(i,a),t.flush(i)},[e]),getVisitorCode:a.useCallback(i=>(t=di(e),t.getVisitorCode(i)),[e])}};
3
3
  //# sourceMappingURL=react-sdk.cjs.min.js.map