@kameleoon/javascript-sdk-core 5.14.0 → 5.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +0,0 @@
1
- "use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var i,a,o={},r={};var n,s=(a||(a=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Err=e.Ok=void 0;var t=function(){if(i)return r;function e(e){if(!this.ok){if("string"==typeof this.error||void 0===this.error)throw new Error(e||this.error||"There was an error! No specific error message was provided.");throw e&&(this.error.message=e),this.error}return this.data}function t(e){return this.ok?this.data:e(this.error)}function a(e){return this.ok?this.data:e}function o(e){return this.ok&&e(this.data),this}return i=1,Object.defineProperty(r,"__esModule",{value:!0}),r.Err=r.Ok=void 0,r.Ok=function(i){return{ok:!0,data:i,throw:e,else:t,or:a,and:o}},r.Err=function(i){return{ok:!1,error:i,throw:e,else:t,or:a,and:o}},r}();Object.defineProperty(e,"Ok",{enumerable:!0,get:function(){return t.Ok}}),Object.defineProperty(e,"Err",{enumerable:!0,get:function(){return t.Err}})}(o)),o);function u(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"==typeof SuppressedError&&SuppressedError,exports.KameleoonException=void 0,(n=exports.KameleoonException||(exports.KameleoonException={})).Credentials="Credentials",n.EventSourceInitialization="EventSourceInitialization",n.FeatureFlagConfigurationNotFound="FeatureFlagConfigurationNotFound",n.FeatureFlagVariableNotFound="FeatureFlagVariableNotFound",n.FeatureFlagVariationNotFound="FeatureFlagVariationNotFound",n.FeatureFlagExperimentNotFound="FeatureFlagExperimentNotFound",n.FeatureFlagEnvironmentDisabled="FeatureFlagEnvironmentDisabled",n.VisitAmount="VisitAmount",n.VisitorCodeMaxLength="VisitorCodeMaxLength",n.VisitorCodeEmpty="VisitorCodeEmpty",n.StorageInitialization="StorageInitialization",n.StorageWrite="StorageWrite",n.StorageRead="StorageRead",n.StorageParse="StorageParse",n.StorageEmpty="StorageEmpty",n.ClientConfiguration="ClientConfiguration",n.TargetingCondition="TargetingCondition",n.AmongValuesCheck="AmongValuesCheck",n.RangeCheck="RangeCheck",n.Initialization="Initialization",n.JSONParse="JSONParse",n.NumberParse="NumberParse",n.VersionParse="VersionParse",n.CookieParse="CookieParse",n.SemanticVersionParse="SemanticVersionParse",n.RemoteData="RemoteData",n.MaximumRetriesReached="MaximumRetriesReached";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.FeatureFlagEnvironmentDisabled:case exports.KameleoonException.FeatureFlagVariableNotFound:this.message=l[e](t,i);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,h,m;!function(e){e.DataApi="dataApi",e.Events="events",e.ClientConfiguration="clientConfiguration"}(p||(p={})),exports.HttpMethod=void 0,(g=exports.HttpMethod||(exports.HttpMethod={})).Get="GET",g.Post="POST",function(e){e[e.VisitEvent=0]="VisitEvent",e[e.VisitData=1]="VisitData",e[e.DataMap=2]="DataMap"}(h||(h={})),exports.RequestType=void 0,(m=exports.RequestType||(exports.RequestType={})).Configuration="configuration",m.Tracking="tracking",m.RemoteData="remoteData";var v;exports.Header=void 0,(v=exports.Header||(exports.Header={})).UserAgent="User-Agent",v.ContentType="Content-Type",v.SdkVersion="X-Kameleoon-SDK-Version",v.SdkType="X-Kameleoon-SDK-Type",v.Authorization="Authorization",v.AcceptEncoding="Accept-Encoding",v.IfModifiedSince="If-Modified-Since",v.LastModified="Last-Modified";const f="eventType=customData",C="eventType=staticData",x="eventType=page",E="eventType=conversion",y="eventType=activity",D="eventType=experiment",T="eventType=geolocation",I="eventType=targetingSegment",k="&title=",S="&referrersIndices=",R="&negative=",V="&revenue=",w="&overwrite=",b="&index=",K="&browserIndex=",A="&browserVersion=",O="&href=",$="&deviceType=",F="&goalId=",N="&visitorCode=",M="&variationId=",L="&ts=",U="&key=",_="&sdkName=",P="&sdkVersion=",G="&valuesCountMap=",B="&nonce=",z="&id=",q="&customData=",H="&currentVisit=",j="&maxNumberPreviousVisits=",W="&os=",Y="&osIndex=",J="&country=",X="&city=",Q="&region=",Z="&latitude=",ee="&longitude=",te="&postalCode=",ie="&conversion=",ae="&staticData=",oe="&geolocation=",re="&page=",ne="&experiment=",se="&browser=",ue="&mappingIdentifier=",le="&mappingValue=",de="&kcs=",ce="&personalization=",pe="&userAgent=",ge="&bodyUa=",he="&cbs=",me="&metadata=",ve="&visitNumber=",fe="&timeSincePreviousVisit=",Ce="?environment=",xe="?ts=",Ee="sse?siteCode=",ye="map?siteCode=",De="events?siteCode=",Te="visitor?siteCode=",Ie="visit/",ke="map/",Se={[p.DataApi]:"data.kameleoon.io",[p.Events]:"events.kameleoon.eu",[p.ClientConfiguration]:"sdk-config.kameleoon.eu"};var Re;exports.LogLevel=void 0,(Re=exports.LogLevel||(exports.LogLevel={}))[Re.NONE=0]="NONE",Re[Re.ERROR=1]="ERROR",Re[Re.WARNING=2]="WARNING",Re[Re.INFO=3]="INFO",Re[Re.DEBUG=4]="DEBUG";const Ve={[exports.LogLevel.NONE]:"NONE",[exports.LogLevel.ERROR]:"ERROR",[exports.LogLevel.WARNING]:"WARNING",[exports.LogLevel.INFO]:"INFO",[exports.LogLevel.DEBUG]:"DEBUG"};const we=(e,t)=>"credentials"===e?{clientId:"****",clientSecret:"****"}:t instanceof Map?Array.from(t.entries()):t;class be{static setLogger(e){be.logger=e}static setLogLevel(e){be.logLevel=e}static log({level:e,strings:t,keys:i}){if(!be.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,we)}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);be.writeMessage(e,a)}static info(e,...t){be.log({level:exports.LogLevel.INFO,strings:e,keys:t})}static error(e,...t){be.log({level:exports.LogLevel.ERROR,strings:e,keys:t})}static warning(e,...t){be.log({level:exports.LogLevel.WARNING,strings:e,keys:t})}static debug(e,...t){be.log({level:exports.LogLevel.DEBUG,strings:e,keys:t})}static checkLevel(e){return e<=be.logLevel&&e!==exports.LogLevel.NONE}static writeMessage(e,t){be.logger.log(e,`Kameleoon [${Ve[e]}]: ${t}`)}}be.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)}}},be.logLevel=exports.LogLevel.WARNING;class Ke{constructor({urlProvider:e,packageInfo:t,externalRequester:i,requestTimeout:a,trackRetryDelay:o,useAbortController:r}){be.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,be.debug`RETURN: new Requester(urlProvider, packageInfo: ${t}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${o}, useAbortController: ${r})`}getClientConfiguration(e,t){return u(this,void 0,void 0,function*(){const i=this.urlProvider.getClientConfigurationUrl(e);let a=Object.assign({[exports.Header.SdkType]:this.packageInfo.type.toLowerCase(),[exports.Header.SdkVersion]:this.packageInfo.version},t&&{[exports.Header.IfModifiedSince]:t});try{let e={message:""};be.debug`Running configuration request Method: ${exports.HttpMethod.Get}, Url: ${i}, Headers: ${a}, with retry limit ${3}`;for(let t=0;t<3;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(2===t){if(o.text){const t=yield o.text();e=JSON.parse(t)}be.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,void 0,void 0,function*(){const i=this.urlProvider.getRemoteDataUrl(e);be.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 be.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,void 0,void 0,function*(){const o=this.urlProvider.getVisitorDataUrl({visitorCode:e,filters:t,isMappingIdentifier:i});be.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 be.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,void 0,void 0,function*(){const i=this.urlProvider.getTrackingUrl(t);be.debug`Running tracking request Method: ${exports.HttpMethod.Post}, Url: ${i}, Body: ${e}, with retry limit ${3}, retry delay ${this.trackRetryDelay} ms`;for(let t=0;t<3;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 be.debug`Received tracking response: ${{status:a.status}} for request Method: ${exports.HttpMethod.Post}, Url: ${i}, Body: ${e}`,s.Ok();yield this.logRequestError({logLevel:2==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:2==t?exports.LogLevel.ERROR:exports.LogLevel.WARNING,message:"Failed to get tracking response",error:e,method:exports.HttpMethod.Post,url:i})}t<3&&(yield new Promise(e=>setTimeout(e,this.trackRetryDelay)))}return s.Err()})}sendRequest({url:e,requestType:t,retryCount:i,parameters:a}){return u(this,void 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,void 0,void 0,function*(){if(i){let r="Unknown error";i instanceof Error&&(r=i.message),be.log({level:e,strings:()=>`${t} with error: ${r} for request Method: ${a}, Url: ${o}`})}else if(r&&be.checkLevel(e)){const i=yield this.parseResponse(r);be.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,void 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){be.debug`Received configuration response: ${{status:e}} for request Method: ${exports.HttpMethod.Get}, Url: ${t}, Headers: ${i}`}}var Ae,Oe,$e,Fe,Ne,Me,Le,Ue,_e,Pe,Ge;exports.Environment=void 0,(Ae=exports.Environment||(exports.Environment={})).Production="production",Ae.Staging="staging",Ae.Development="development";class Be{constructor(){this.ready=!1,this.isCustomDomain=!1,this.domains=Se}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)}getClientConfigurationUrl(e){this.isInitialized();const t=`https://${this.domains[p.ClientConfiguration]}/v3/`,i=this.environment===exports.Environment.Production?"":Ce+encodeURIComponent(this.environment);let a="";return e&&(a=i?L+e:xe+e),t+this.siteCode+i+a}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains[p.Events]}:8110/${Ee}${this.siteCode}`}getRemoteDataUrl(e){return this.isInitialized(),this.getDataApiUrl(h.DataMap)+this.siteCode+U+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:g,personalization:m,visitorCode:v,cbs:f}=t,C=i?le:N,x=a||v?q+!0:"",E=n?ie+!0:"",y=s?oe+!0:"",D=u?ne+!0:"",T=l?re+!0:"",I=ae+!0,k=r?H+!0:"",S=g?de+!0:"",R=m?ce+!0:"",V="number"!=typeof o?j+1:j+o,w=f?he+!0:"";return this.getDataApiUrl(h.VisitData)+this.siteCode+C+e+V+x+E+y+D+T+I+k+S+R+w}getTrackingUrl(e){this.isInitialized();const{type:t,version:i}=this.packageInfo;let a=this.getDataApiUrl(h.VisitEvent)+this.siteCode+_+t.toLowerCase()+P+i;return e&&(a+=ge+!0),a}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 h.VisitEvent:return`${t}/${Ie+De}`;case h.VisitData:return`${t}/${Ie+Te}`;case h.DataMap:return`${t}/${ke+ye}`}}setDomains(e){e&&(this.isCustomDomain=!0,this.domains[p.DataApi]="data."+e,this.domains[p.Events]="events."+e,this.domains[p.ClientConfiguration]="sdk-config."+e)}}exports.VariableType=void 0,(Oe=exports.VariableType||(exports.VariableType={})).BOOLEAN="BOOLEAN",Oe.NUMBER="NUMBER",Oe.STRING="STRING",Oe.JSON="JSON",Oe.JS="JS",Oe.CSS="CSS",exports.TrackingStatus=void 0,($e=exports.TrackingStatus||(exports.TrackingStatus={})).Sent="sent",$e.Unsent="unsent",$e.Pending="pending",exports.Milliseconds=void 0,(Fe=exports.Milliseconds||(exports.Milliseconds={}))[Fe.Second=1e3]="Second",Fe[Fe.Minute=6e4]="Minute",Fe[Fe.Hour=36e5]="Hour",Fe[Fe.Day=864e5]="Day",Fe[Fe.Week=6048e5]="Week",Fe[Fe.Month=2592e6]="Month";class ze{constructor(e){this.cacheMap=new Map,this.intervalId=null,this.cleanupTimeout=e*exports.Milliseconds.Second}add({key:e,data:t,lifetime:i}){be.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),be.debug`RETURN: CacheManager.add(key: ${e}, data: ${t}, lifetime: ${i})`}getAliveItem(e){be.debug`CALL: CacheManager.getAliveItem(key: ${e})`;const t=this.cacheMap.get(e);if(t&&t.expirationTime>=Date.now()){const i=t.data;return be.debug`RETURN: CacheManager.getAliveItem(key: ${e}) -> (item: ${i})`,i}return t&&this.cacheMap.delete(e),be.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"}(Ne||(Ne={})),function(e){e.TARGETED_DELIVERY="TARGETED_DELIVERY",e.EXPERIMENTATION="EXPERIMENTATION"}(Me||(Me={})),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"}(Le||(Le={})),function(e){e.ACTIVATED="ACTIVATED",e.DEACTIVATED="DEACTIVATED",e.SCHEDULED="SCHEDULED"}(Ue||(Ue={})),exports.CustomDataScope=void 0,(_e=exports.CustomDataScope||(exports.CustomDataScope={})).Visit="VISIT",_e.Visitor="VISITOR",_e.Page="Page",function(e){e.Required="REQUIRED",e.NotRequired="NOT_REQUIRED"}(Pe||(Pe={}));class qe{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)}}exports.EventType=void 0,(Ge=exports.EventType||(exports.EventType={})).Evaluation="evaluation",Ge.ConfigurationUpdate="configurationUpdate",Pe.NotRequired;const He={customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:Pe.NotRequired,dataApiDomain:"data.kameleoon.io"}};class je{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}}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=Ne.Polling,this.configurationData=He,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.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,void 0,void 0,function*(){be.debug("CALL: ClientConfiguration.initialize()"),this.readStorageData();if(this.checkShouldUpdate()){const e=yield this.updateClientConfiguration();if(!e.ok)return be.error("Error occurred during client configuration update"),e;if(e.data)return be.debug("RETURN: ClientConfiguration.initialize()"),s.Ok()}return this.updateType!==Ne.RealTime||this.eventSource.isOpen?(this.updateType===Ne.Polling&&this.handlePollingUpdates(),be.debug("RETURN: ClientConfiguration.initialize()"),s.Ok()):(this.handleRealTimeUpdates(),be.debug("RETURN: ClientConfiguration.initialize()"),s.Ok())})}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=>{be.error`Error occurred during real-time update: ${e}. Switching to polling updates while the connection is not restored.`,this.updateType=Ne.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,void 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 configuration(){return this.configurationData.configuration}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===Pe.Required}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===Me.TARGETED_DELIVERY))return!0;return!1}checkShouldUpdate(){const{configuration:e}=this.configurationData;if(this.updateType=e.realTimeUpdate?Ne.RealTime:Ne.Polling,!this.featureFlags.size)return!0;return this.lastUpdate.getTime()<Date.now()-this.updateInterval}readStorageData(){var e,t,i;be.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){be.error`Error parsing default data file: ${e}`}this.updateConfigurationData(o,u),this.lastUpdate=this.usedDefaultDataFile?new Date(0):new Date(Date.parse(r)),this.lastModified=n,this.requestTime=s}be.debug`RETURN: ClientConfiguration.readStorageData() -> (result: ${a.ok})`}updateClientConfiguration(e){return u(this,void 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);be.debug`Cached configuration data has expired. Fetching fresh data.`}const i=yield this.requester.getClientConfiguration(e,this.lastModified);return this.applyNewConfigurationDataFromResponse(i)})}updateClientConfigurationInBackground(){setTimeout(()=>u(this,void 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,void 0,void 0,function*(){if(this.requestTime=Date.now(),!e.ok)return this.featureFlags.size?(be.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?Ne.RealTime:Ne.Polling,n=r!==this.updateType;return n&&(this.updateType=r,be.info`Configuration update type was toggled to ${Ne[r]}`,yield this.initialize()),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}updateFeatureFlagSegments(e,t){null!==t&&e.rules.forEach(e=>{var i;const a=e.segmentId;e.segment=null!=a&&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 je(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}}function Ye(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e]))}var Je,Xe,Qe,Ze;exports.KameleoonData=void 0,(Je=exports.KameleoonData||(exports.KameleoonData={})).UniqueIdentifier="uniqueIdentifier",Je.CustomData="customData",Je.PageView="pageView",Je.GeolocationData="geolocation",Je.Browser="browser",Je.Conversion="conversion",Je.Cookie="cookie",Je.Device="device",Je.OperatingSystem="operatingSystem",Je.UserAgent="userAgent",Je.ApplicationVersion="applicationVersion",Je.VisitsData="visitsData",Je.KameleoonConversionScore="kameleoonConversionScore",Je.Personalization="personalization",Je.CBScores="cbScores",Je.TargetedSegment="targetedSegment",exports.DeviceType=void 0,(Xe=exports.DeviceType||(exports.DeviceType={})).Phone="PHONE",Xe.Tablet="TABLET",Xe.Desktop="DESKTOP",exports.OperatingSystemType=void 0,(Qe=exports.OperatingSystemType||(exports.OperatingSystemType={})).WindowsPhone="WINDOWS_PHONE",Qe.Windows="WINDOWS",Qe.Android="ANDROID",Qe.Linux="LINUX",Qe.Mac="MAC",Qe.IOS="IOS",exports.BrowserType=void 0,(Ze=exports.BrowserType||(exports.BrowserType={})).Chrome="CHROME",Ze.InternetExplorer="IE",Ze.Firefox="FIREFOX",Ze.Safari="SAFARI",Ze.Opera="OPERA",Ze.Other="OTHER";const et={[exports.OperatingSystemType.Windows]:0,[exports.OperatingSystemType.Mac]:1,[exports.OperatingSystemType.IOS]:2,[exports.OperatingSystemType.Linux]:3,[exports.OperatingSystemType.Android]:4,[exports.OperatingSystemType.WindowsPhone]:5},tt=Ye(et),it={[exports.BrowserType.Chrome]:0,[exports.BrowserType.InternetExplorer]:1,[exports.BrowserType.Firefox]:2,[exports.BrowserType.Safari]:3,[exports.BrowserType.Opera]:4,[exports.BrowserType.Other]:5},at=Ye(it),ot="off",rt="warehouseAudiences";var nt;exports.SdkLanguageType=void 0,(nt=exports.SdkLanguageType||(exports.SdkLanguageType={})).ANDROID="ANDROID",nt.IOS="IOS",nt.JAVA="JAVA",nt.CSHARP="CSHARP",nt.NODEJS="NODEJS",nt.PHP="PHP",nt.RUBY="RUBY",nt.GO="GO",nt.FLUTTER="FLUTTER",nt.REACT="REACT",nt.PYTHON="PYTHON",nt.JAVASCRIPT="JAVASCRIPT",nt.RUST="RUST";const st={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 ut,lt,dt,ct,pt,gt,ht,mt,vt,ft,Ct,xt;!function(e){e.And="AND",e.Or="OR"}(ut||(ut={})),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"}(lt||(lt={})),function(e){e.NEW="NEW",e.RETURNING="RETURNING"}(dt||(dt={})),function(e){e.ANY="ANY",e.EXACT="EXACT"}(ct||(ct={})),function(e){e.ALL="ALL",e.TEST="TEST",e.PERSO="PERSO"}(pt||(pt={})),function(e){e.Experiment="EXPERIMENT",e.Personalization="PERSONALIZATION",e.Any="ANY"}(gt||(gt={})),function(e){e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(ht||(ht={})),function(e){e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(mt||(mt={})),function(e){e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.OPTIONAL="OPTIONAL"}(vt||(vt={})),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"}(ft||(ft={})),function(e){e.Minute="MINUTE",e.Hour="HOUR",e.Day="DAY",e.Week="WEEK",e.Month="MONTH"}(Ct||(Ct={})),function(e){e.Ascending="asc",e.Descending="desc"}(xt||(xt={}));const Et="localhost",yt=/^(\.?(([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 Dt{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=Dt.checkAndTrimProtocol(e.toLowerCase()),yt.test(e)||e===Et||be.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=Dt.checkAndTrimProtocol(e.toLowerCase())).replace(/^\.+|\.+$/g,""),yt.test(e)||e===Et?s.Ok(e):(be.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),be.warning`The domain contains ${i}. Domain after protocol trimming: ${e}`;break}return e}}class Tt{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(be.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 be.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 be.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,m;p.hasTargetingType(ft.SEGMENT)&&(g=u.trees,m=r.segments),p.hasTargetingType(ft.TARGET_FEATURE_FLAG)&&(h=r.ruleMap);const v=p.evaluate({variationData:l,sdkInfo:n,segments:m,ruleMap:h,trees:g,targetingData:i,experimentId:a,visitorCode:t});return be.debug`RETURN checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${v})`,v}static convertTimeUnit(e,t){return e/{[Ct.Minute]:exports.Milliseconds.Minute,[Ct.Hour]:exports.Milliseconds.Hour,[Ct.Day]:exports.Milliseconds.Day,[Ct.Week]:exports.Milliseconds.Week,[Ct.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=Dt.validateVersion(e),o=Dt.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,m]=[r===l,n===c,u===p];switch(i){case mt.EQUAL:return s.Ok(g&&h&&m);case mt.GREATER:return s.Ok(r>l||g&&n>c||g&&h&&u>p);case mt.LOWER:return s.Ok(r<l||g&&n<c||g&&h&&u<p);default:be.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 It{static insertInOrderedListMutably({list:e,element:t,order:i}){if(e.includes(t))return;const a=e.findIndex(e=>i===xt.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 kt{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?k+encodeURIComponent(this.title):"",i=(null===(e=this.referrers)||void 0===e?void 0:e.length)?S+JSON.stringify(this.referrers):"";return x+O+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 kt({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 kt({urlAddress:o,title:r,referrers:i}),s.timestamps=[...e,{time:a,status:exports.TrackingStatus.Sent}]}else s=new kt({urlAddress:o,title:r,referrers:i}),s.timestamps=[{time:a,status:exports.TrackingStatus.Sent}];t.set(o,s)}}}let St=class e{constructor(e,...t){this.index=e,this.value=t,this._status=exports.TrackingStatus.Unsent,this.isIdentifier=!1}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=ue+String(!0)),f+b+this.index+G+encodeURIComponent(JSON.stringify(t))+w+String(!0)+i}get data(){return{index:this.index,value:this.value,type:exports.KameleoonData.CustomData,isIdentifier:this.isIdentifier,status:this.status}}get status(){return this._isMappingIdentifier?exports.TrackingStatus.Unsent:this._status}static _fromRaw(t){const{index:i,value:a,status:o,isIdentifier:r}=t,n=new e(i,...a);return n.status=o,n._isMappingIdentifier=r,n}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)))}}},Rt=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 E+F+String(this.goalId)+V+String(this.revenue)+R+String(this.negative)+((null===(e=this.metadata)||void 0===e?void 0:e.length)?me+this._encodeMetadata():"")}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=>St._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)}}}},Vt=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?A+this.version:"";return C+se+this.browser+K+it[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:at[a];return o?new e(t,o):new e(t)}}},wt=class e{constructor(e){this.device=e,this.status=exports.TrackingStatus.Unsent}get url(){return this.device?C+$+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)}},bt=class e{constructor(e){this.operatingSystem=e,this.status=exports.TrackingStatus.Unsent}get url(){return this.operatingSystem?C+W+this.operatingSystem+Y+et[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:tt[a];return new e(t)}}};class Kt{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?Q+encodeURIComponent(this.region):"",t=this.city?X+encodeURIComponent(this.city):"",i=this.postalCode?te+encodeURIComponent(this.postalCode):"",a=this.coordinates?Z+this.coordinates[0]+ee+this.coordinates[1]:"";return T+J+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 Kt({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 Kt(o&&r?{country:a,region:o,city:r}:o?{country:a,region:o}:{country:a}):void 0}}class At{constructor(e){this.status=exports.TrackingStatus.Sent,this.visits=e,this.visitNumber=e.length?e.length-1:0}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){It.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 Ot{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 $t{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 $t(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 $t(e,a);t.set(e,i)}}}}class Ft{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 Ft(e.cbs);return t.status=e.status,t}}class Nt{constructor({filters:e,dataManager:t,visitorCode:i}){this.visitsData=new At([]),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)});break}}processKcs(e){if(this.filters.kcs&&e){const t=new Ot(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){if(e.staticDataEvent){const i=e.staticDataEvent.data.visitNumber+(t?0:1);this.visitsData.updateVisitNumber(i)}}processCbs(e){if(this.filters.cbs&&e){const t=new Ft(e);this.storageVisitorData.push(t)}}processBrowser(e){if(this.filters.browser&&!this.singleDataTypes[exports.KameleoonData.Browser]){const t=Vt._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=wt._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=bt._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=Kt._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&&St._updateFromVisit(e,this.multipleDataTypes[exports.KameleoonData.CustomData])}processConversion(e){if(this.filters.conversions){Rt._updateFromVisit(e,this.multipleDataTypes[exports.KameleoonData.Conversion]);const t=Rt._listFromVisit(e);t.length&&this.visitorData.push(...t)}}processPageView(e){this.filters.pageViews&&kt._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&&$t._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 Mt{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 Nt({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 At([])};n&&(r.processVisit(n),r.processVisitNumber(n,!0)),null==s||s.forEach(e=>{r.processVisit(e),r.processVisitsData(e),r.processVisitNumber(e,!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 Lt{constructor(e,t){be.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,be.debug`RETURN: new ClientSettings(siteCode: ${e}, configuration: ${t})`}getTrackingInterval(e){return"number"==typeof(null==e?void 0:e.trackingInterval)?e.trackingInterval<100?(be.warning("Tracking interval must not be shorter than 100 ms. Minimum possible interval was applied."),100):e.trackingInterval>1e3?(be.warning("Tracking interval must not be longer than 1000 ms. Maximum possible interval was applied."),1e3):e.trackingInterval:1e3}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?(be.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?(be.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=Dt.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}}}let Ut=class e{constructor(e){this.cookie=e,this.status=exports.TrackingStatus.Sent}static fromString(t){if(!t)throw new c(exports.KameleoonException.CookieParse,"Cookie string can't be empty");const i=t.split(";").map(e=>{const[t,i]=e.trim().split("=");if(!t||!i)throw new c(exports.KameleoonException.CookieParse,"Cookie string is not valid");return{key:t,value:i}});return new e(i)}get url(){return""}get data(){return{cookie:this.cookie,type:exports.KameleoonData.Cookie,status:this.status}}};class _t{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 _t(e.value)}}class Pt{constructor(e=null,t){this.cleanupInterval=e,this.packageInfo=t}mutUpdateData({infoData:e,visitorCode:t,mutData:i,dataItem:a}){let{visitorReference:o,data:r,isReference:n}=this.dereferenceData(i,t);this.packageInfo.isServer&&n&&!i[o]&&(e.mappingIdentifiers&&delete e.mappingIdentifiers[t],delete i[t],o=t);const s=this.cleanupInterval?Date.now()+this.cleanupInterval:0;switch(a.data.type){case exports.KameleoonData.CustomData:this.updateCustomData({expirationTime:s,customData:a,visitorCode:o,mutData:r});break;case exports.KameleoonData.PageView:this.updatePageView({expirationTime:s,pageView:a,visitorCode:o,mutData:r});break;case exports.KameleoonData.Conversion:this.updateConversion({expirationTime:s,conversion:a,visitorCode:o,mutData:r});break;case exports.KameleoonData.VisitsData:this.updateVisitsData({expirationTime:s,visitsData:a,visitorCode:o,mutData:r});break;case exports.KameleoonData.Personalization:this.updatePersonalization({expirationTime:s,personalization:a,visitorCode:o,mutData:r});break;case exports.KameleoonData.TargetedSegment:this.updateTargetedSegment({expirationTime:s,targetedSegment:a,visitorCode:o,mutData:r});break;default:this.updateCommonData({expirationTime:s,commonData:a,visitorCode:o,mutData:r})}return s}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=>{It.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)){if(!t)continue;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}){i[a][e]=Object.assign(Object.assign({},t),{expirationTime:o})}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}){a[o][e][t]=Object.assign(Object.assign({},i),{expirationTime:r})}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 Gt{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?A+this.browserVersion:"",t=this.browserType?se+this.browserType:"",i=this.browserType?K+it[this.browserType]:"",a=this.os?W+this.os:"",o=this.os?Y+et[this.os]:"",r=this.deviceType?$+this.deviceType:"",n=void 0!==this.visitNumber?ve+this.visitNumber:"",s=void 0!==this.timeSincePreviousVisit?fe+this.timeSincePreviousVisit:"";return C+t+i+e+n+s+a+o+r}}class Bt{static setConditionFactoryInstance(e){this.conditionFactoryInstance=e}static createCondition(e){return this.conditionFactoryInstance.createCondition(e)}}class zt{constructor(e,t,i){var a;if(this.inverseResult=!1,this.isOperator(e))this.nodeValue=e;else{const t=Bt.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===ut.And||e===ut.Or}}class qt{constructor(e){this.error=null,this.targetingTypes=new Set,be.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 zt(e)));return this.buildTree(i,t)});this.tree=this.buildTree(a,i),be.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 ut.And:return this.evaluateNode(e.left,t)&&this.evaluateNode(e.right,t);case ut.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===ut.Or||e.value===ut.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 zt(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?ut.Or:ut.And)}}class Ht{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 jt{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)&&(be.error`Failed to parse version: ${this.version} in Browser condition`,this.error=new c(exports.KameleoonException.VersionParse,this.version)),this.versionMatchType){case mt.EQUAL:return t===this.browser&&i===a;case mt.GREATER:return t===this.browser&&i>a;case mt.LOWER:return t===this.browser&&i<a;default:be.error`Unexpected comparing operation for Browser condition: ${this.versionMatchType}`,d(this.versionMatchType)}}}class Wt{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 Yt{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===lt.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!==lt.TRUE&&this.matchType!==lt.FALSE&&this.matchType!==lt.RANGE)return be.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`,!1;const t=this.conditionValue;if(this.matchType===lt.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===lt.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 lt.CONTAINS:return e.includes(t);case lt.EXACT:return e===this.conditionValue;case lt.REGULAR_EXPRESSION:return Mt.parseRegExp(t).test(e);case lt.LOWER:return Number(e)<Number(this.conditionValue);case lt.EQUAL:return Number(e)===Number(this.conditionValue);case lt.GREATER:return Number(e)>Number(this.conditionValue);case lt.TRUE:return"true"===e.toLowerCase();case lt.FALSE:return"false"===e.toLowerCase();default:return be.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 be.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):(be.error`Failed to parse range: ${e} in CustomData condition`,s.Err(new c(exports.KameleoonException.RangeCheck,e)))}}class Jt{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 Xt{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=Jt.getLatest(t);return s.Ok(this.checkCondition(i.title))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case ht.CONTAINS:return e.includes(this.conditionValue);case ht.EXACT:return e===this.conditionValue;case ht.REGULAR_EXPRESSION:return Mt.parseRegExp(this.conditionValue).test(e);default:return be.error`Unexpected comparing operation for PageTitle condition: ${this.matchType}`,!1}}}class Qt{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=Jt.getLatest(t);return s.Ok(this.checkCondition(i.urlAddress))}checkCondition(e){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case ht.CONTAINS:return e.includes(this.conditionValue);case ht.EXACT:return e===this.conditionValue;case ht.REGULAR_EXPRESSION:return Mt.parseRegExp(this.conditionValue).test(e);default:return be.error`Unexpected comparing operation for PageUrl condition: ${this.matchType}`,!1}}}class Zt{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);const a=Tt.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?s.Ok(t===this.sdkLanguage&&a.data):s.Err(a.error)}}class ei{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 ht.CONTAINS:return e.includes(this.conditionValue);case ht.EXACT:return e===this.conditionValue;case ht.REGULAR_EXPRESSION:return Mt.parseRegExp(this.conditionValue).test(e);default:return be.error`Unexpected comparing operation for VisitorCode condition: ${this.matchType}`,!1}}}class ti{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?Ut.fromString(document.cookie).data.cookie:[]}checkCondition(e){const t=this.keyMatchType,{key:i,value:a}=e;if(t===vt.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 vt.EXACT:n=i===o;break;case vt.CONTAINS:n=i.includes(o);break;case vt.REGULAR_EXPRESSION:n=Mt.parseRegExp(o).test(i);break;default:be.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 lt.EXACT:return e===t;case lt.CONTAINS:return e.includes(t);case lt.REGULAR_EXPRESSION:return Mt.parseRegExp(t).test(e);default:return be.error`Unexpected comparing operation for Cookie condition: ${i}`,!1}}isOptionalCookie(e){const{value:t}=e;return void 0!==t}}class ii{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 ai{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 oi{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 qt(a).evaluate(e)}}class ri{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 ni{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 ht.CONTAINS:return e.includes(this.conditionValue);case ht.EXACT:return e===this.conditionValue;case ht.REGULAR_EXPRESSION:return Mt.parseRegExp(this.conditionValue).test(e);default:return be.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 void(t=e);if(a>t.timestamps[t.timestamps.length-1].time)return i=t,void(t=e);a>(i?i.timestamps[i.timestamps.length-1].time:0)&&(i=e)}),i}}class si{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 ht.EQUAL:return e===this.conditionValue;case ht.GREATER:return e>this.conditionValue;case ht.LOWER:return e<this.conditionValue;default:return be.error`Unexpected comparing operation for VisitedPages condition: ${this.matchType}`,!1}}}class ui{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=Tt.convertTimeUnit(t,this.timeUnit);switch(this.matchType){case ht.GREATER:return i>this.conditionValue;case ht.LOWER:return i<this.conditionValue;default:return be.error`Unexpected comparing operation for FirstVisit condition: ${this.matchType}`,!1}}}class li{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=Tt.convertTimeUnit(t,this.timeUnit);switch(this.matchType){case ht.GREATER:return i>this.conditionValue;case ht.LOWER:return i<this.conditionValue;default:return be.error`Unexpected comparing operation for LastVisit condition: ${this.matchType}`,!1}}}class di{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 ht.EQUAL:return e===this.conditionValue;case ht.GREATER:return e>this.conditionValue;case ht.LOWER:return e<this.conditionValue;default:return be.error`Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`,!1}}}class ci{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 ht.EQUAL:return e===this.conditionValue;case ht.GREATER:return e>this.conditionValue;case ht.LOWER:return e<this.conditionValue;default:return be.error`Unexpected comparing operation for Visits condition: ${this.matchType}`,!1}}}class pi{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 dt.NEW:return s.Ok(o);case dt.RETURNING:return s.Ok(!o);default:be.error`Unexpected visitor type for NewVisitor condition: ${this.visitorType}`,d(this.visitorType)}}}class gi{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=Tt.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?s.Ok(a.data):s.Err(a.error)}}class hi{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 mi{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 gt.Experiment:return r||o;case gt.Personalization:return n;case gt.Any:return n&&(r||o);default:return!1}}}class vi{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 ct.ANY:return!0;case ct.EXACT:return t.variationId===this.variationId;default:return!1}}}class fi{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 Ci{createCondition(e){const{targetingType:t}=e;switch(t){case ft.CUSTOM_DATUM:return s.Ok(new Yt(e));case ft.EXCLUSIVE_EXPERIMENT:return s.Ok(new mi(e));case ft.TARGET_EXPERIMENT:return s.Ok(new vi(e));case ft.TARGET_FEATURE_FLAG:return s.Ok(new ri(e));case ft.TARGET_PERSONALIZATION:return s.Ok(new fi(e));case ft.DEVICE_TYPE:return s.Ok(new Ht(e));case ft.BROWSER:return s.Ok(new jt(e));case ft.PAGE_URL:return s.Ok(new Qt(e));case ft.PAGE_TITLE:return s.Ok(new Xt(e));case ft.CONVERSIONS:return s.Ok(new Wt(e));case ft.VISITOR_CODE:return s.Ok(new ei(e));case ft.SDK_LANGUAGE:return s.Ok(new Zt(e));case ft.COOKIE:return s.Ok(new ti(e));case ft.OPERATING_SYSTEM:return s.Ok(new ii(e));case ft.GEOLOCATION:return s.Ok(new ai(e));case ft.SEGMENT:return s.Ok(new oi(e));case ft.APPLICATION_VERSION:return s.Ok(new gi(e));case ft.PREVIOUS_PAGE:return s.Ok(new ni(e));case ft.PAGE_VIEWS:return s.Ok(new si(e));case ft.LAST_VISIT:return s.Ok(new li(e));case ft.FIRST_VISIT:return s.Ok(new ui(e));case ft.SAME_DAY_VISITS:return s.Ok(new di(e));case ft.VISITS:return s.Ok(new ci(e));case ft.NEW_VISITORS:return s.Ok(new pi(e));case ft.HEAT_SLICE:return s.Ok(new hi(e));default:return be.error`Unsupported targeted condition type found: ${t}`,s.Err(new c(exports.KameleoonException.TargetingCondition,t))}}}var xi;exports.KameleoonStorageKey=void 0,(xi=exports.KameleoonStorageKey||(exports.KameleoonStorageKey={})).ClientData="kameleoonClientData",xi.TargetingData="kameleoonTargetingData",xi.TrackingData="kameleoonTrackingData",xi.VariationData="kameleoonVariationData",xi.VisitorCode="kameleoonVisitorCode",xi.ConsentData="kameleoonConsentData",xi.DataInfo="kameleoonDataInfo",xi.KameleoonSimulationFFData="kameleoonSimulationFFData",xi.ForcedFeatureVariation="kameleoonForcedFeatureVariation",xi.ForcedExperimentVariation="kameleoonForcedExperimentVariation";const Ei={data:{customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:Pe.NotRequired,dataApiDomain:"data.kameleoon.io"}},lastUpdate:""},yi=29*exports.Milliseconds.Minute;class Di{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(Ei))}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.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({},Ei),{lastUpdate:(new Date).toString()})}hasFields(e,t){const i=Object.keys(e);return!(!i.length||!t.length)&&t.every(e=>i.includes(e))}}class Ti{constructor(e,t){this.externalStorage=e,this.storageKey=t;const i=new Di(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 be.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 be.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 Ii{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:be.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:be.error`Unknown storage key: ${e} for initCleanupInterval.`}}catch(i){t&&clearInterval(t),be.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:be.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}}class ki{constructor(e){this.id=e,this.status=exports.TrackingStatus.Unsent}get url(){return I+z+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 ki(t);return a.status=i,a}}class Si{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.cleanupIntervalId=null,be.debug`CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`,this.dataStorage=e,this.infoStorage=t,this.dataProcessor=new Pt(i,a),this.packageInfo=a,i){const e=()=>{this.cleanupData()};try{this.cleanupIntervalId=setInterval(e,i)}catch(e){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),be.error`Failed to set cleanup interval: ${i}`,e}}be.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()+yi,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);if(!t)return[];return 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=St._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=Rt._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=kt._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=ki._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=Kt._fromRaw(e);i.push(t)}break}case exports.KameleoonData.Browser:{const e=o;if(t({status:e.status,key:a})){const t=Vt._fromRaw(e);i.push(t)}break}case exports.KameleoonData.Device:{const e=o;if(t({status:e.status,key:a})){const t=wt._fromRaw(e);i.push(t)}break}case exports.KameleoonData.OperatingSystem:{const e=o;if(t({status:e.status,key:a})){const t=bt._fromRaw(e);i.push(t)}}}return i}storeTrackedData(e){this.storeData(e);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(e,...t){be.debug`CALL: DataManager.storeData(visitorCode: ${e}, data: ${t})`;const i=this.dataStorage.read(),a=this.infoStorage.read();if(!i.ok)return i;if(!a.ok)return a;const o=i.data,r=a.data;if("string"==typeof e)this.mutUpdateTargetingData({infoData:r,targetingData:o,visitorCode:e,kameleoonData:t});else for(const[t,i]of Object.entries(e))this.mutUpdateTargetingData({infoData:r,targetingData:o,visitorCode:t,kameleoonData:i});this.cleanupData(),this.infoStorage.write(a.data);const n=this.dataStorage.write(o);return be.debug`RETURN: DataManager.storeData(visitorCode: ${e}, data: ${t}) -> (writeResult: ${n})`,n}getTree(e){if(this.targetingTrees.has(e.id))return this.targetingTrees.get(e.id);const t=new qt(e);return this.targetingTrees.set(e.id,t),t}clearTrees(){this.targetingTrees.clear()}isPersistentCustomData(e){return!!this.persistentCustomDataIndexes.size&&(!!Tt.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){const t=this.dataStorage.read();if(!t.ok)return null;if("string"==typeof t.data[e])return t.data[e];if(null===this.mappingIdentifierCustomDataIndex)return null;const i=t.data[e];if(!i)return null;const a=i[exports.KameleoonData.CustomData];return a&&a[this.mappingIdentifierCustomDataIndex]?a[this.mappingIdentifierCustomDataIndex].value[0]:null}mutUpdateTargetingData({infoData:e,visitorCode:t,kameleoonData:i,targetingData:a}){for(const o of i){o.data.type===exports.KameleoonData.CustomData&&this.processCustomData({infoData:e,customData:o,mutData:a,visitorCode:t});const i=this.dataProcessor.mutUpdateData({infoData:e,visitorCode:t,mutData:a,dataItem:o}),r=e.nextDataCleanup;(!r||r&&i<r)&&(e.nextDataCleanup=i),o.data.status===exports.TrackingStatus.Unsent&&this.dataProcessor.mutAddUnsentData({mutData:e,visitorCode:t,dataType:o.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.mappingIdentifierCustomDataIndex===r.index&&n){i._isMappingIdentifier=!0;const n=r.value[0];a!==n&&(be.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()})}this.localCustomDataIndexes.has(r.index)&&(i.status=exports.TrackingStatus.Sent)}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]=[[],[]];e.forEach(e=>{e.localOnly&&i.push(e.index),e.scope===exports.CustomDataScope.Visitor&&a.push(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)}}var Ri={exports:{}};var Vi,wi={exports:{}};function bi(){return Vi||(Vi=1,wi.exports=(t=t||function(t,i){var a;if("undefined"!=typeof window&&window.crypto&&(a=window.crypto),"undefined"!=typeof self&&self.crypto&&(a=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(a=globalThis.crypto),!a&&"undefined"!=typeof window&&window.msCrypto&&(a=window.msCrypto),!a&&void 0!==e&&e.crypto&&(a=e.crypto),!a)try{a=require("crypto")}catch(e){}var o=function(){if(a){if("function"==typeof a.getRandomValues)try{return a.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof a.randomBytes)try{return a.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},r=Object.create||function(){function e(){}return function(t){var i;return e.prototype=t,i=new e,e.prototype=null,i}}(),n={},s=n.lib={},u=s.Base={extend:function(e){var t=r(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=s.WordArray=u.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=t!=i?t:4*e.length},toString:function(e){return(e||c).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 e=this.words,i=this.sigBytes;e[i>>>2]&=4294967295<<32-i%4*8,e.length=t.ceil(i/4)},clone:function(){var e=u.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],i=0;i<e;i+=4)t.push(o());return new l.init(t,e)}}),d=n.enc={},c=d.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)}},p=d.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)}},g=d.Utf8={stringify:function(e){try{return decodeURIComponent(escape(p.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return p.parse(unescape(encodeURIComponent(e)))}},h=s.BufferedBlockAlgorithm=u.extend({reset:function(){this._data=new l.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=g.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(e){var i,a=this._data,o=a.words,r=a.sigBytes,n=this.blockSize,s=r/(4*n),u=(s=e?t.ceil(s):t.max((0|s)-this._minBufferSize,0))*n,d=t.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=u.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});s.Hasher=h.extend({cfg:u.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){h.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,i){return new e.init(i).finalize(t)}},_createHmacHelper:function(e){return function(t,i){return new m.HMAC.init(e,i).finalize(t)}}});var m=n.algo={};return n}(Math),t)),wi.exports;var t}var Ki;var Ai,Oi=(Ki||(Ki=1,Ri.exports=(Ai=bi(),function(e){var t=Ai,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],m=(h<<25|h>>>7)^(h<<14|h>>>18)^h>>>3,v=u[g-2],f=(v<<15|v>>>17)^(v<<13|v>>>19)^v>>>10;u[g]=m+u[g-7]+f+u[g-16]}var C=a&o^a&r^o&r,x=(a<<30|a>>>2)^(a<<19|a>>>13)^(a<<10|a>>>22),E=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+E|0,n=r,r=o,o=a,a=E+(x+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),Ai.SHA256)),Ri.exports),$i=t(Oi);class Fi{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=$i(e).toString();return parseInt(t,16)/Math.pow(2,256)}}class Ni{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(){be.debug`CALL: VariationConfiguration.unsentDataVisitors()`;const e=this.storage.read();if(!e.ok)return be.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 be.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,track:u=!0,withAssignment:l=!1}){be.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${l})`;const{rules:d,featureKey:c,id:p,defaultVariationKey:g}=i;for(const h of d){const{segment:d,experimentId:m,id:v,exposition:f,respoolTime:C,variationByExposition:x}=h,E=this.getForcedExperimentVariation(e,h.experimentId);let y=null;if(E.ok&&(y=E.data,y&&y.forceTargeting)){be.info`Visitor ${e} has been forced targeted for ${h}`;const r=this.createAndSaveForcedTargetedVariation(e,i,h,y,u,l);return be.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${l}) -> (targetedVariation: ${r})`,s.Ok(r)}const D=Tt.checkTargeting({segment:d,visitorCode:e,experimentId:m,targetingData:a,packageInfo:o,clientConfiguration:r,dataManager:n,variationConfiguration:this});if(!D.ok)return be.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${l}) -> (targetedVariation: ${D})`,D;if(!D.data)continue;if(be.info`Visitor ${e} has been targeted for ${h}`,y){const r=this.createAndSaveForcedTargetedVariation(e,i,h,y,u,l);return be.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${l}) -> (targetedVariation: ${r})`,s.Ok(r)}const T=Fi.getHashDouble({visitorIdentifier:t,respoolTime:C,id:String(v)});if(be.debug`Calculated ruleHash: ${T} for code: ${t}`,T<=f){let r=this.evaluateCBScores(h,t,a);if(!r){const e=Fi.getHashDouble({visitorIdentifier:t,respoolTime:C,id:String(m)});be.debug`Calculated variationHash: ${e} for code: ${t}`,r=Tt.getVariationByHash(x,e)}if(r){l&&this.updateStoredVariations(e,{[m]:{variationId:r.variationId,isTargetedRule:h.type===Me.TARGETED_DELIVERY,status:u?exports.TrackingStatus.Unsent:exports.TrackingStatus.Sent}});const n={variationId:r.variationId,variationKey:r.variationKey,rule:h,featureFlagId:p,featureKey:c,experimentId:m,isTargetedRule:h.type===Me.TARGETED_DELIVERY};return be.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${l}) -> (targetedVariation: ${n})`,s.Ok(n)}}if(h.type===Me.TARGETED_DELIVERY){const r={featureKey:c,featureFlagId:p,experimentId:null,variationKey:g,variationId:null,rule:null,isTargetedRule:!0};return be.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${l}) -> (targetedVariation: ${r})`,s.Ok(r)}}const h={featureKey:c,featureFlagId:p,experimentId:null,variationKey:g,variationId:null,rule:null,isTargetedRule:!1};return be.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${e}, visitorIdentifier: ${t}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${o}, clientConfiguration, dataManager, withAssignment: ${l}) -> (targetedVariation: ${h})`,s.Ok(h)}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===Me.TARGETED_DELIVERY};return r&&this.updateStoredVariations(e,{[i.experimentId]:{variationId:n.variationId,isTargetedRule:i.type===Me.TARGETED_DELIVERY,status:o?exports.TrackingStatus.Unsent:exports.TrackingStatus.Sent}}),n}updateStoredVariations(e,t){be.debug`CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${e}, variationData: ${t})`;const i=this.storage.read();if(!i.ok)return be.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 be.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){be.debug`CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return be.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 be.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}, forcedExperimentVariation: ${i}) -> (resultWrite: ${r})`,r}updateForcedFeatureVariations(e,t){be.debug`CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return be.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 be.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${e}, forcedFeatureVariations: ${t}) -> (resultWrite: ${n})`,n}clearSimulatedVariations(e){var t;be.debug`CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return be.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(),be.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${e}) -> (resultWrite: ${a})`,a}getForcedFeatureVariation(e,t){var i,a,o,r;be.debug`CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t})`;const n=this.storageForcedFeatureVariations.read();if(!n.ok)return be.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 be.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 be.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${e}, featureKey: ${t}) -> (forcedData: ${l})`,s.Ok(l)}getForcedExperimentVariation(e,t){var i;be.debug`CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return be.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 be.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${e}, experimentId: ${t}) -> (forcedExperiment: ${o})`,s.Ok(o)}parseForcedVariationData(e,t=!1){const i=this.clientConfiguration.featureFlags.get(e.featureKey);if(!i)return be.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 be.error`Simulated variation ${e.variationId} not found`,null}simulatedVariationFromJson(e,t){if(be.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 be.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(!i||!i.cbScores)return null;be.debug`CALL: KameleoonClientImpl.evaluateCBScores(rule: ${e}, targetingData: ${i}, visitorIdentifier: ${t})`;const a=e.experimentId,o=new Ft(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=Fi.getHashDouble({visitorIdentifier:t,respoolTime:e.respoolTime,id:String(a)});be.debug`Calculated cbs hash ${o} for code ${t}`,i=Math.min(Math.floor(o*n.length),n.length-1)}r=n[i]}}return be.debug`RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${e}, targetingData: ${i}, visitorIdentifier: ${t}) -> (variation: ${r})`,r}}class Mi{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,be.info`Established a new SSE connection with: ${this.url}`}close(){this.eventSource.close(),this.isConnectionOpen=!1,be.info`SSE connection: '${this.url}' was successfully closed`}onError(e){this.eventSource.onError?this.eventSource.onError(e):be.warning("EventSource does not have `onError` method provided. Real-time errors won't be handled.")}handleMessage(e){return t=>{be.debug`Received new message from: ${this.url}`;const i=JSON.parse(t.data),{siteCode:a,ts:o}=i;this.siteCode===a&&e(o)}}}const Li=31536e3;var Ui;!function(e){e[e.Kb=1e3]="Kb",e[e.Mb=1e6]="Mb",e[e.Gb=1e9]="Gb"}(Ui||(Ui={}));const _i=10*Ui.Mb;class Pi{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 Gt||i.data.type!==exports.KameleoonData.Conversion&&i.data.type!==exports.KameleoonData.PageView)){const t=i.data.nonce;t?e=t:(e=Tt.getNonce(this.prng),i.data.nonce=e)}e||(e=Tt.getNonce(this.prng)),t.push(i.url+B+e)}return t}getVariationDataLines(e){const t=[];return e.forEach(e=>{t.push(D+z+e.experimentId+M+e.variationId+B+Tt.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}),be.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),be.debug`Sending tracking request for activity of visitor ${e} with given consent`}else be.debug`No data to send for visitor ${e} with no consent`;a&&i.length&&(i[0]+=pe+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>_i?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 y+B+Tt.getNonce(this.prng)}getIdentifier(e,t){return(t?le:N)+e}}class Gi{constructor({dataManager:e,trackingStorage:t,variationConfiguration:i,trackingInterval:a,requester:o,prng:r}){this.intervalId=null,be.debug`CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng)`,this.dataManager=e,this.trackingStorage=t,this.variationConfiguration=i,this.requester=o,this.bodyProvider=new Pi(r);try{this.intervalId=setInterval(()=>{this.sendDataAll()},a)}catch(e){throw this.intervalId&&clearInterval(this.intervalId),e}be.debug`RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng)`}scheduleVisitor(e,t){be.debug`CALL: Tracker.scheduleVisitor(visitorCode: ${e}, isConsentProvided: ${t})`,this.trackingStorage.read().and(i=>{i.scheduledVisitors[`_${e}`]={isConsentProvided:t},this.trackingStorage.write(i)}),be.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(e,new St(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,void 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,void 0,void 0,function*(){this.trackingStorage.read().ok&&(yield this.sendData({[`_${e}`]:{isConsentProvided:t}}))})}sendData(e){return u(this,void 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){be.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)return;if((yield this.requester.track(o,r)).ok)be.info`Successful request for tracking visitors: ${a}, data: ${t}`,this.updateDataStatus(t,exports.TrackingStatus.Sent);else{be.error("Tracking request failed"),be.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 Gt)).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.storeData(i))}getUnsentVisitorData(e,t){const i=this.dataManager.getUnsentData(e),a=[];if(!i.length)return[];for(const e of i)e.url&&(!t&&(e instanceof Gt||e.data.type!==exports.KameleoonData.Conversion)||a.push(e));if(a.length){const t=a.filter(e=>!(e instanceof Gt)).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}}class Bi{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&&be.setLogger(n),Bt.setConditionFactoryInstance(new Ci),be.debug`CALL: new KameleoonClient(siteCode: ${e}, dependencies: ${t}, configuration: ${i})`;const{settings:s}=new Lt(e,i);this.environment=s.environment;const{externalStorage:u,externalEventSource:l,externalPackageInfo:d,externalVisitorCodeManager:c,externalRequester:p,externalPRNG:g,customDataManager:h}=a.externals,{useAbortController:m}=a.settings,v=new ze(10),f=new Ti(u,exports.KameleoonStorageKey.ClientData),C=new Ti(u,exports.KameleoonStorageKey.VariationData),x=new Ti(u,exports.KameleoonStorageKey.ForcedExperimentVariation),E=new Ti(u,exports.KameleoonStorageKey.ForcedFeatureVariation),y=new Ti(u,exports.KameleoonStorageKey.ConsentData),D=new Ti(u,exports.KameleoonStorageKey.TrackingData);let T=h;if(!T){const e=new Ti(u,exports.KameleoonStorageKey.TargetingData),t=new Ti(u,exports.KameleoonStorageKey.DataInfo);T=new Si({dataStorage:e,infoStorage:t,cleanupInterval:s.cleanupInterval,packageInfo:d})}const I=null!==(r=null==t?void 0:t.urlProvider)&&void 0!==r?r:new Be;I.initialize({domain:s.networkDomain,siteCode:s.siteCode,packageInfo:d,environment:s.environment});const k=new Ke({urlProvider:I,useAbortController:m,packageInfo:d,externalRequester:p,requestTimeout:s.requestTimeout,trackRetryDelay:s.trackRetryDelay}),S=new Mi({siteCode:s.siteCode,externalEventSource:l,urlProvider:I}),R=new qe,V=new We({urlProvider:I,storage:f,updateInterval:s.updateInterval,dataManager:T,eventManager:R,requester:k,eventSource:S,externalVisitorCodeManager:c,externalPackageInfo:d,defaultDataFile:null==i?void 0:i.defaultDataFile}),w=new Ni(C,x,E,c,V),b=new Gi({dataManager:T,trackingStorage:D,variationConfiguration:w,requester:k,trackingInterval:s.trackingInterval,prng:g});this.tracker=b,this.variationConfiguration=w,this.requester=k,this.trackingCache=v,this.dataManager=T,this.clientConfiguration=V,this.externalPackageInfo=d,this.consentDataStorage=y,this.visitorCodeManager=c,this.eventManager=R,null!==s.cleanupInterval&&new Ii(u,s.cleanupInterval),be.debug`RETURN: new KameleoonClient(siteCode: ${e}, dependencies: ${t}, configuration: ${i})`}initialize(){return u(this,void 0,void 0,function*(){if(this.stubMode)return!1;be.info("CALL: KameleoonClient.initialize()");const e=yield this.clientConfiguration.initialize();return e.throw(),this.initialized=!0,be.info`RETURN: KameleoonClient.initialize() -> (result: ${e.ok})`,e.ok})}addData(e,...t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(be.info`CALL: KameleoonClient.addData(visitorCode: ${e}, data: ${t})`,this.visitorCodeManager.validateVisitorCode(e).throw(),!this.initialized)throw new c(exports.KameleoonException.Initialization);this.dataManager.storeData(e,...t).throw(),be.info`RETURN: KameleoonClient.addData(visitorCode: ${e}, data: ${t})`}getRemoteVisitorData({visitorCode:e,shouldAddData:t=!0,filters:i=st}){return u(this,void 0,void 0,function*(){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(be.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}=Mt.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),be.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||(be.info`CALL: KameleoonClient.trackConversion(visitorCode: ${e}, goalId: ${t}, negative: ${i}, revenue: ${a}, metadata: ${o})`,this.addData(e,new Rt({goalId:t,revenue:a,negative:i,metadata:o})),this.flush(e),be.info`RETURN: KameleoonClient.trackConversion(visitorCode: ${e}, goalId: ${t}, negative: ${i}, revenue: ${a}, metadata: ${o})`)}flush(e){var t;if(this.stubMode)throw new c(exports.KameleoonException.Initialization);let i,a=!1;if("string"==typeof e?i=e:e&&(i=e.visitorCode,a=null!==(t=e.instant)&&void 0!==t&&t),be.info`CALL: KameleoonClient.flush(visitorCode: ${i}, instant: ${a})`,!this.initialized)throw new c(exports.KameleoonException.Initialization);if("string"==typeof i)this.visitorCodeManager.validateVisitorCode(i).throw(),a?this.tracker.sendDataForVisitor(i,this._isConsentProvided(i)):this.tracker.scheduleVisitor(i,this._isConsentProvided(i));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));a&&this.tracker.sendDataAll()}be.info`RETURN: KameleoonClient.flush(visitorCode: ${i}, instant: ${a})`}getFeatureFlags(){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(be.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})}),be.info`RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${t})`,t}getVisitorFeatureFlags(e){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);if(be.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})}),be.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);be.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 be.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);be.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()){const o=this._getFeatureVariation({visitorCode:e,featureKey:r.featureKey,track:i});o.ok&&(t&&o.data.key===ot||a.set(r.featureKey,o.data))}return be.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(be.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=>Mt.parseFeatureVariable(e).throw());i.set(t.featureKey,{key:a,id:r,experimentId:n,variables:u})}),be.info`RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${e}) -> (FeatureFlags: ${i})`,i}getFeatureFlagVariationKey(e,t){if(this.stubMode)throw new c(exports.KameleoonException.Initialization);be.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 be.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);be.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}=Mt.parseFeatureVariable(o).throw(),s={type:r,value:n};return be.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);be.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=Mt.parseFeatureVariable(e).throw();o.push(t)}return be.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)),be.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!==ot;return be.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 be.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track: ${o}) -> (isActive: false)`,!1;throw e}}getRemoteData(e){return u(this,void 0,void 0,function*(){if(this.stubMode)return null;be.info`CALL: KameleoonClient.getRemoteData(key: ${e})`;const t=yield this.requester.getRemoteData(e);return be.info`RETURN: KameleoonClient.getRemoteData(key: ${e}) -> (remoteData: ${t})`,t.throw()})}getVisitorWarehouseAudience({visitorCode:e,customDataIndex:t,warehouseKey:i}){return u(this,void 0,void 0,function*(){if(this.stubMode)return null;be.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[rt]||0===Object.keys(a[rt]).length)return be.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${e}, customDataIndex: ${t}, warehouseKey: ${i}) -> (customData: null)`,null;const o=new St(t,...Object.keys(a[rt]));return this.dataManager.storeData(e,o),be.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(be.info`CALL: KameleoonClient.onEvent(event: ${e}, callback)`,!this.initialized)throw new c(exports.KameleoonException.Initialization);this.eventManager.addEventHandler(e,t),be.info`RETURN: KameleoonClient.onEvent(event: ${e}, callback)`}getEngineTrackingCode(e){if(this.stubMode)return"";be.info`CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${e})`,this.visitorCodeManager.validateVisitorCode(e).throw();const t=Tt.getTrackingCode(this.trackingCache,e);return be.info`RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${e}) -> (trackingCode: ${t})`,t}isInitialized(){return be.debug`CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`,this.initialized}setLogLevel(e){be.setLogLevel(e)}setForcedVariation({visitorCode:e,experimentId:t,variationKey:i,forceTargeting:a=!0}){this.stubMode||(be.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(),be.info`RETURN: KameleoonClient.setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a})`)}evaluateAudiences(e){if(this.stubMode)return;be.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=Tt.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&&(be.info`Visitor ${e} has been targeted for ${a}`,t.push(new ki(Number(a.id))))}0!==t.length&&this.dataManager.storeData(e,...t),this.flush(e),be.info`RETURN: KameleoonClient.evaluateAudiences(visitorCode: ${e})`}setUserConsent({visitorCode:e,consent:t,setData:i}){this.stubMode||(be.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:Li,path:"/"}):this.visitorCodeManager.consentRequired&&i({visitorCode:"",key:exports.KameleoonStorageKey.VisitorCode,maxAge:0,path:"/"}),this.flush(e),be.info`RETURN: KameleoonClient.setUserConsent(visitorCode: ${e}, consent: ${t}, setData: ${i})`)}updateConsentData(e,t){const i=this.consentDataStorage.read();if(!i.ok)return void(i.error.type===exports.KameleoonException.StorageEmpty&&this.consentDataStorage.write({[e]:{consent:t}}));const a=i.data;a[e]={consent:t},this.consentDataStorage.write(a)}_isConsentProvided(e){be.debug`CALL: KameleoonClient._isConsentProvided(visitorCode: ${e})`;const{isConsentRequired:t}=this.clientConfiguration,i=this.consentDataStorage.read();let a=!1;if(t){if(i.ok){const t=i.data[e];a="boolean"==typeof t?t:t&&t.consent}}else a=!0;return be.debug`RETURN: KameleoonClient._isConsentProvided(visitorCode: ${e}) -> (isConsentProvided: ${a})`,a}_getFeatureVariables({visitorCode:e,featureKey:t,variationKey:i}){be.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 be.debug`RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${e}, featureKey: ${t}, variationKey: ${i}) -> (variables: ${o.variables})`,o.variables}_getActiveFeatureVariations(e){be.debug`CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${e})`;const t=this.clientConfiguration.featureFlags,i=[];for(const a of t.values()){if(!a.environmentEnabled)continue;const t=this._evaluate({visitorCode:e,featureFlag:a,track:!1,save:!1});t.variationKey!==ot&&i.push({variationKey:t.variationKey,variationId:t.variationId,experimentId:t.experimentId,featureFlagId:a.id,featureKey:a.featureKey,rule:null,isTargetedRule:t.ruleType===Me.TARGETED_DELIVERY})}return be.debug`RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${e}) -> (activeVariations: ${i})`,i}_evaluate({visitorCode:e,featureFlag:t,track:i,save:a}){let o;be.debug`CALL: KameleoonClient._evaluate(visitorCode: ${e}, featureFlag: ${t}, track: ${i}, save: ${a})`;let r=null;const n=this.dataManager.getVisitorData(e),s=this.variationConfiguration.getForcedFeatureVariation(e,t.featureKey);if(s.ok&&(r=s.data),r)o=Bi.EvaluatedExperiment.fromForcedFeatureVariation(t.defaultVariationKey,r);else if(this._isVisitorNotInHoldout(e,i,a,t,n)&&this._isFFUnrestrictedByMEGroup(e,t,n)){const r=this._getCodeForHash(e,t.bucketingCustomDataIndex,n),s=this.variationConfiguration.getVariation({visitorCode:e,visitorIdentifier:r,featureFlag:t,track:i,withAssignment:a,targetingData:n,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw();o=Bi.EvaluatedExperiment.fromVariationData(s)}else o=Bi.EvaluatedExperiment.fromDefaultVariationKey(t.defaultVariationKey);return a&&!o.isSimulated&&null!==o.experimentId&&null!==o.variationId&&this.variationConfiguration.updateStoredVariations(e,{[o.experimentId]:{variationId:o.variationId,isTargetedRule:o.ruleType===Me.TARGETED_DELIVERY,status:i?exports.TrackingStatus.Unsent:exports.TrackingStatus.Sent}}),this.eventManager.fireEvent(exports.EventType.Evaluation,{featureKey:t.featureKey,variation:{key:o.variationKey,experimentId:o.experimentId,id:o.variationId}}),be.debug`RETURN: KameleoonClient._evaluate(visitorCode: ${e}, featureFlag: ${t}, track: ${i}, save: ${a}) -> (evalExp: ${o})`,o}_isFFUnrestrictedByMEGroup(e,t,i){const a=t.mutuallyExclusiveGroup;if(!a)return!0;be.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=Fi.getHashDoubleForMEGroup(n,a);be.debug`Calculated meGroup hash ${s} for code: ${n}, meGroup: ${a}`,o=r.getFeatureFlagByHash(s)===t}return be.debug`RETURN: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${e}, featureFlag: ${t}, visitorData: ${i}) -> (selected: ${o})`,o}_getFeatureVariation({visitorCode:e,featureKey:t,track:i}){if(be.debug`CALL: KameleoonClient._getFeatureVariation(visitorCode: ${e}, featureKey: ${t}, track: ${i})`,!this.initialized)return s.Err(new c(exports.KameleoonException.Initialization));const a=this.clientConfiguration.featureFlags.get(t);if(!a)return s.Err(new c(exports.KameleoonException.FeatureFlagConfigurationNotFound,t));if(!a.environmentEnabled)return s.Err(new c(exports.KameleoonException.FeatureFlagEnvironmentDisabled,a.featureKey,this.environment));const o=this._evaluate({visitorCode:e,featureFlag:a,track:i,save:!0}),{experimentId:r,variationId:n,variationKey:u,isSimulated:l}=o;let d=new Map,p=!1;try{this._getFeatureVariables({visitorCode:e,featureKey:t,variationKey:u}).forEach(e=>{p||e.type!==exports.VariableType.JS&&e.type!==exports.VariableType.CSS||(p=!0);const t=Mt.parseFeatureVariable(e).throw();d.set(e.key,t)})}catch(e){}r&&"number"==typeof n&&!l&&Tt.updateCache({cacheManager:this.trackingCache,hasJsCssVariables:p,visitorCode:e,experimentId:r,variationId:n}),i&&!l&&this.tracker.scheduleVisitor(e,this._isConsentProvided(e));const g={key:u,id:n,experimentId:r,variables:d};return be.debug`RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${e}, featureKey: ${t}, track: ${i}) -> (variation: ${g})`,s.Ok(g)}_isVisitorNotInHoldout(e,t,i,a,o){const r=this.clientConfiguration.holdout;if(!r)return!0;be.debug`CALL: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${e}, track: ${t}, save: ${i}, featureFlag: ${a}, visitorData: ${o})`;let n=!0;const s=this._getCodeForHash(e,null==a?void 0:a.bucketingCustomDataIndex,o),u=Fi.getHashDouble({visitorIdentifier:s,respoolTime:null,id:String(r.experimentId)});be.debug`Calculated holdoutHash: ${u} for visitorCode: ${s}`;let l=Tt.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}})),be.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(be.debug`CALL: KameleoonClient._setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a})`,null===i){const o=this.variationConfiguration.updateForcedExperimentVariation(e,t,null);return be.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 be.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 be.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 be.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${e}', experimentId: ${t}, variationKey: '${i}', forceTargeting: ${a}) -> (writeResult: ${n})`,n}_getCodeForHash(e,t,i){var a;let o;if(be.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)),be.debug`RETURN: KameleoonClient._getCodeForHash(visitorCode: ${e}, bucketingCustomDataIndex: ${t}, visitorData: ${i}) -> (codeForHash: ${o})`,o}}Bi.EvaluatedExperiment=class{static fromForcedFeatureVariation(e,t){var i,a,o;let r=e;return t.varByExp?r=t.varByExp.variationKey:t.rule&&t.rule.type===Me.EXPERIMENTATION&&(r=ot),{variationKey:r,variationId:(null===(i=t.varByExp)||void 0===i?void 0:i.variationId)||null,experimentId:(null===(a=t.rule)||void 0===a?void 0:a.experimentId)||null,ruleType:(null===(o=t.rule)||void 0===o?void 0:o.type)||null,isSimulated:t.simulated}}static fromVariationData(e){var t,i;return{variationKey:e.variationKey,variationId:e.variationId,experimentId:e.experimentId,ruleType:null!==(i=null===(t=e.rule)||void 0===t?void 0:t.type)&&void 0!==i?i:null,isSimulated:!1}}static fromDefaultVariationKey(e){return{variationKey:e,variationId:null,experimentId:null,ruleType:null,isSimulated:!1}}};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=Vt,exports.Conversion=Rt,exports.Cookie=Ut,exports.CustomData=St,exports.DataManager=Si,exports.DataProcessor=Pt,exports.DataStorage=Ti,exports.Device=wt,exports.Err=s.Err,exports.GeolocationData=Kt,exports.KameleoonCore=Bi,exports.KameleoonError=c,exports.KameleoonLogger=be,exports.KameleoonUtils=class{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}},exports.ListUtilities=It,exports.NUMBER_OF_RETRIES=2,exports.Ok=s.Ok,exports.OperatingSystem=bt,exports.PageView=kt,exports.Parser=Mt,exports.StaticData=Gt,exports.Tree=qt,exports.UniqueIdentifier=_t,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=Tt,exports.VISITOR_CODE_LENGTH=16,exports.VISIT_DURATION=yi,exports.Validator=Dt,exports.VisitorCodeManager=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(be.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,be.debug`Used default visitor code: ${t}`):(t=this.generateVisitorCode(),be.debug`Generated new visitor code: ${t}`)),this.processSimulatedVariations(t),this.isConsentRequired||this.setDataCallback({visitorCode:t,key:exports.KameleoonStorageKey.VisitorCode,maxAge:Li,path:"/"}),be.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&&be.error`Failed to process simulated variations: ${e.message}`}}}getSimulatedVariations(e){be.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&&be.error`Failed to parse simulated variations: ${e.message}`}return be.debug`RETURN: VisitorCodeManager.getSimulatedVariations(visitorCode: ${e}) -> (variations: ${i})`,i}generateVisitorCode(){const e="abcdefghijklmnopqrstuvwxyz0123456789",t=[];for(let i=0;i<16;i++)t.push(e[Math.floor(36*Math.random())]);return t.join("")}setVariationConfiguration(e){this.variationConfiguration||(this.variationConfiguration=e)}};
2
- //# sourceMappingURL=javascript-sdk-core.cjs.min.js.map