UNPKG

@kameleoon/nodejs-sdk

Version:
1 lines 164 kB
"use strict";function e(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;var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var a,o,r={},n={};var s,u=(o||(o=1,function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.Err=e.Ok=void 0;var t=function(){if(a)return n;function e(e){if(!this.ok){if("string"==typeof this.error||void 0===this.error)throw new Error(e||this.error||"There was an error! No specific error message was provided.");throw e&&(this.error.message=e),this.error}return this.data}function t(e){return this.ok?this.data:e(this.error)}function i(e){return this.ok?this.data:e}function o(e){return this.ok&&e(this.data),this}return a=1,Object.defineProperty(n,"__esModule",{value:!0}),n.Err=n.Ok=void 0,n.Ok=function(a){return{ok:!0,data:a,throw:e,else:t,or:i,and:o}},n.Err=function(a){return{ok:!1,error:a,throw:e,else:t,or:i,and:o}},n}();Object.defineProperty(e,"Ok",{enumerable:!0,get:function(){return t.Ok}}),Object.defineProperty(e,"Err",{enumerable:!0,get:function(){return t.Err}})}(r)),r);function l(e,t,i,a){return new(i||(i=Promise))(function(t,o){function r(e){try{s(a.next(e))}catch(e){o(e)}}function n(e){try{s(a.throw(e))}catch(e){o(e)}}function s(e){var a;e.done?t(e.value):(a=e.value,a instanceof i?a:new i(function(e){e(a)})).then(r,n)}s((a=a.apply(e,[])).next())})}"function"==typeof SuppressedError&&SuppressedError,exports.KameleoonException=void 0,(s=exports.KameleoonException||(exports.KameleoonException={})).Credentials="Credentials",s.EventSourceInitialization="EventSourceInitialization",s.FeatureFlagConfigurationNotFound="FeatureFlagConfigurationNotFound",s.FeatureFlagVariableNotFound="FeatureFlagVariableNotFound",s.FeatureFlagVariationNotFound="FeatureFlagVariationNotFound",s.FeatureFlagExperimentNotFound="FeatureFlagExperimentNotFound",s.FeatureFlagEnvironmentDisabled="FeatureFlagEnvironmentDisabled",s.VisitAmount="VisitAmount",s.VisitorCodeMaxLength="VisitorCodeMaxLength",s.VisitorCodeEmpty="VisitorCodeEmpty",s.StorageInitialization="StorageInitialization",s.StorageWrite="StorageWrite",s.StorageRead="StorageRead",s.StorageParse="StorageParse",s.StorageEmpty="StorageEmpty",s.ClientConfiguration="ClientConfiguration",s.TargetingCondition="TargetingCondition",s.AmongValuesCheck="AmongValuesCheck",s.RangeCheck="RangeCheck",s.Initialization="Initialization",s.JSONParse="JSONParse",s.NumberParse="NumberParse",s.VersionParse="VersionParse",s.CookieParse="CookieParse",s.SemanticVersionParse="SemanticVersionParse",s.RemoteData="RemoteData",s.MaximumRetriesReached="MaximumRetriesReached";const d={[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 c(e){throw new Error(`Reaching an impossible state because of ${e}`)}class p 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=d[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=d[e](t);break;case exports.KameleoonException.FeatureFlagExperimentNotFound:case exports.KameleoonException.FeatureFlagVariationNotFound:case exports.KameleoonException.FeatureFlagEnvironmentDisabled:case exports.KameleoonException.FeatureFlagVariableNotFound:this.message=d[e](t,i);break;case exports.KameleoonException.StorageWrite:case exports.KameleoonException.JSONParse:case exports.KameleoonException.StorageRead:this.message=d[e](t);break;case exports.KameleoonException.StorageParse:this.message=d[e](t,i);break;case exports.KameleoonException.TargetingCondition:this.message=d[e](t);break;case exports.KameleoonException.AmongValuesCheck:this.message=d[e](t,i);break;case exports.KameleoonException.RangeCheck:this.message=d[e](t);break;default:c(e)}}get type(){return this.errorType}}var g,h,m,f;!function(e){e.DataApi="dataApi",e.Events="events",e.ClientConfiguration="clientConfiguration"}(g||(g={})),exports.HttpMethod=void 0,(h=exports.HttpMethod||(exports.HttpMethod={})).Get="GET",h.Post="POST",function(e){e[e.VisitEvent=0]="VisitEvent",e[e.VisitData=1]="VisitData",e[e.DataMap=2]="DataMap"}(m||(m={})),exports.RequestType=void 0,(f=exports.RequestType||(exports.RequestType={})).Configuration="configuration",f.Tracking="tracking",f.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 C="eventType=customData",x="eventType=staticData",y="eventType=page",E="eventType=conversion",D="eventType=activity",T="eventType=experiment",I="eventType=geolocation",k="eventType=targetingSegment",S="&title=",R="&referrersIndices=",V="&negative=",w="&revenue=",b="&overwrite=",K="&index=",A="&browserIndex=",O="&browserVersion=",$="&href=",N="&deviceType=",F="&goalId=",M="&visitorCode=",L="&variationId=",U="&ts=",_="&key=",P="&sdkName=",G="&sdkVersion=",q="&valuesCountMap=",B="&nonce=",z="&id=",j="&customData=",H="&currentVisit=",W="&maxNumberPreviousVisits=",Y="&os=",J="&osIndex=",X="&country=",Q="&city=",Z="&region=",ee="&latitude=",te="&longitude=",ie="&postalCode=",ae="&conversion=",oe="&staticData=",re="&geolocation=",ne="&page=",se="&experiment=",ue="&browser=",le="&mappingIdentifier=",de="&mappingValue=",ce="&kcs=",pe="&personalization=",ge="&userAgent=",he="&bodyUa=",me="&cbs=",fe="&metadata=",ve="&visitNumber=",Ce="&timeSincePreviousVisit=",xe="?environment=",ye="?ts=",Ee="sse?siteCode=",De="map?siteCode=",Te="events?siteCode=",Ie="visitor?siteCode=",ke="visit/",Se="map/",Re={[g.DataApi]:"data.kameleoon.io",[g.Events]:"events.kameleoon.eu",[g.ClientConfiguration]:"sdk-config.kameleoon.eu"};var Ve;exports.LogLevel=void 0,(Ve=exports.LogLevel||(exports.LogLevel={}))[Ve.NONE=0]="NONE",Ve[Ve.ERROR=1]="ERROR",Ve[Ve.WARNING=2]="WARNING",Ve[Ve.INFO=3]="INFO",Ve[Ve.DEBUG=4]="DEBUG";const we={[exports.LogLevel.NONE]:"NONE",[exports.LogLevel.ERROR]:"ERROR",[exports.LogLevel.WARNING]:"WARNING",[exports.LogLevel.INFO]:"INFO",[exports.LogLevel.DEBUG]:"DEBUG"};const be=(e,t)=>"credentials"===e?{clientId:"****",clientSecret:"****"}:t instanceof Map?Array.from(t.entries()):t;class Ke{static setLogger(e){Ke.logger=e}static setLogLevel(e){Ke.logLevel=e}static log({level:e,strings:t,keys:i}){if(!Ke.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,be)}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);Ke.writeMessage(e,a)}static info(e,...t){Ke.log({level:exports.LogLevel.INFO,strings:e,keys:t})}static error(e,...t){Ke.log({level:exports.LogLevel.ERROR,strings:e,keys:t})}static warning(e,...t){Ke.log({level:exports.LogLevel.WARNING,strings:e,keys:t})}static debug(e,...t){Ke.log({level:exports.LogLevel.DEBUG,strings:e,keys:t})}static checkLevel(e){return e<=Ke.logLevel&&e!==exports.LogLevel.NONE}static writeMessage(e,t){Ke.logger.log(e,`Kameleoon [${we[e]}]: ${t}`)}}Ke.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)}}},Ke.logLevel=exports.LogLevel.WARNING;class Ae{constructor({urlProvider:e,packageInfo:t,externalRequester:i,requestTimeout:a,trackRetryDelay:o,useAbortController:r}){Ke.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,Ke.debug`RETURN: new Requester(urlProvider, packageInfo: ${t}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${o}, useAbortController: ${r})`}getClientConfiguration(e,t){return l(this,0,void 0,function*(){const i=this.urlProvider.getClientConfigurationUrl(e);let a=Object.assign({[exports.Header.SdkType]:this.packageInfo.type.toLowerCase(),[exports.Header.SdkVersion]:this.packageInfo.version},t&&{[exports.Header.IfModifiedSince]:t});try{let e={message:""};Ke.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 u.Ok({configuration:r,lastModified:t})}if(304===o.status)return this.logReceivedConfigurationResponse(o.status,i,a),u.Ok({});if(2===t){if(o.text){const t=yield o.text();e=JSON.parse(t)}Ke.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 u.Err(new p(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}),u.Err(new p(exports.KameleoonException.ClientConfiguration,e))}})}getRemoteData(e){var t;return l(this,0,void 0,function*(){const i=this.urlProvider.getRemoteDataUrl(e);Ke.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 u.Err(new p(exports.KameleoonException.RemoteData,a))}return u.Err(new p(exports.KameleoonException.RemoteData,"Unknown Reason - no `text()` was found for a response"))}const a=yield e.json();return Ke.debug`Received remote data response: ${{status:e.status}} for request Method: ${exports.HttpMethod.Get}, Url: ${i}`,u.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}),u.Err(new p(exports.KameleoonException.RemoteData,e))}})}getVisitorData({visitorCode:e,filters:t,isMappingIdentifier:i}){var a;return l(this,0,void 0,function*(){const o=this.urlProvider.getVisitorDataUrl({visitorCode:e,filters:t,isMappingIdentifier:i});Ke.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 u.Err(new p(exports.KameleoonException.RemoteData,e))}}return e.status?u.Err(new p(exports.KameleoonException.RemoteData,`No error message. Error status: ${e.status}`)):u.Err(new p(exports.KameleoonException.RemoteData,"Unknown Reason - no text message or error status was found for a response"))}const t=yield e.json();return Ke.debug`Received visitor data response: ${{status:e.status}} for request Method: ${exports.HttpMethod.Get}, Url: ${o}`,u.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}),u.Err(new p(exports.KameleoonException.RemoteData,e))}})}track(e,t){return l(this,0,void 0,function*(){const i=this.urlProvider.getTrackingUrl(t);Ke.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 Ke.debug`Received tracking response: ${{status:a.status}} for request Method: ${exports.HttpMethod.Post}, Url: ${i}, Body: ${e}`,u.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 u.Err()})}sendRequest({url:e,requestType:t,retryCount:i,parameters:a}){return l(this,0,void 0,function*(){let o;if(this.useAbortController){const r=new AbortController,n=setTimeout(()=>r.abort(),this.timeout);o=yield this.externalRequester.sendRequest({url:e,retryCount:i,requestType:t,parameters:Object.assign(Object.assign({},a),{signal:r.signal})}),clearTimeout(n)}else o=yield this.externalRequester.sendRequest({url:e,retryCount:i,requestType:t,parameters:a});return o})}logRequestError({logLevel:e,message:t,error:i,method:a,url:o,response:r,headers:n}){return l(this,0,void 0,function*(){if(i){let r="Unknown error";i instanceof Error&&(r=i.message),Ke.log({level:e,strings:()=>`${t} with error: ${r} for request Method: ${a}, Url: ${o}`})}else if(r&&Ke.checkLevel(e)){const i=yield this.parseResponse(r);Ke.log({level:e,strings:()=>`${t} response: Status: '${i.status}' Message: '${i.message}' for request Method: ${a}, Url: '${o}'`+(n?`, Headers: ${n}`:"")})}})}parseResponse(e){return l(this,0,void 0,function*(){let t="";try{if("function"==typeof e.text){const i=yield e.text();i&&(t=i)}}catch(e){}return{status:e.status,message:t}})}getLastModifiedHeader(e){if(e.headers){const t=exports.Header.LastModified.toLowerCase();for(const[i,a]of e.headers)if(i.toLowerCase()===t)return a}}logReceivedConfigurationResponse(e,t,i){Ke.debug`Received configuration response: ${{status:e}} for request Method: ${exports.HttpMethod.Get}, Url: ${t}, Headers: ${i}`}}var Oe,$e,Ne,Fe,Me,Le,Ue,_e,Pe,Ge,qe;exports.Environment=void 0,(Oe=exports.Environment||(exports.Environment={})).Production="production",Oe.Staging="staging",Oe.Development="development";class Be{constructor(){this.ready=!1,this.isCustomDomain=!1,this.domains=Re}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[g.DataApi]=e);const t=e.split(".")[0],i=this.domains[g.DataApi];this.domains[g.DataApi]=i.replace(/^[^.]+/,t)}getClientConfigurationUrl(e){this.isInitialized();const t=`https://${this.domains[g.ClientConfiguration]}/v3/`,i=this.environment===exports.Environment.Production?"":xe+encodeURIComponent(this.environment);let a="";return e&&(a=i?U+e:ye+e),t+this.siteCode+i+a}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains[g.Events]}:8110/${Ee}${this.siteCode}`}getRemoteDataUrl(e){return this.isInitialized(),this.getDataApiUrl(m.DataMap)+this.siteCode+_+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:h,visitorCode:f,cbs:v}=t,C=i?de:M,x=a||f?j+!0:"",y=n?ae+!0:"",E=s?re+!0:"",D=u?se+!0:"",T=l?ne+!0:"",I=oe+!0,k=r?H+!0:"",S=g?ce+!0:"",R=h?pe+!0:"",V="number"!=typeof o?W+1:W+o,w=v?me+!0:"";return this.getDataApiUrl(m.VisitData)+this.siteCode+C+e+V+x+y+E+D+T+I+k+S+R+w}getTrackingUrl(e){this.isInitialized();const{type:t,version:i}=this.packageInfo;let a=this.getDataApiUrl(m.VisitEvent)+this.siteCode+P+t.toLowerCase()+G+i;return e&&(a+=he+!0),a}isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}getDataApiUrl(e){if(!this.domains[g.DataApi])throw new Error("Data API domain is not set");const t=`https://${this.domains[g.DataApi]}`;switch(e){case m.VisitEvent:return`${t}/${ke+Te}`;case m.VisitData:return`${t}/${ke+Ie}`;case m.DataMap:return`${t}/${Se+De}`}}setDomains(e){e&&(this.isCustomDomain=!0,this.domains[g.DataApi]="data."+e,this.domains[g.Events]="events."+e,this.domains[g.ClientConfiguration]="sdk-config."+e)}}exports.VariableType=void 0,($e=exports.VariableType||(exports.VariableType={})).BOOLEAN="BOOLEAN",$e.NUMBER="NUMBER",$e.STRING="STRING",$e.JSON="JSON",$e.JS="JS",$e.CSS="CSS",exports.TrackingStatus=void 0,(Ne=exports.TrackingStatus||(exports.TrackingStatus={})).Sent="sent",Ne.Unsent="unsent",Ne.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}){Ke.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),Ke.debug`RETURN: CacheManager.add(key: ${e}, data: ${t}, lifetime: ${i})`}getAliveItem(e){Ke.debug`CALL: CacheManager.getAliveItem(key: ${e})`;const t=this.cacheMap.get(e);if(t&&t.expirationTime>=Date.now()){const i=t.data;return Ke.debug`RETURN: CacheManager.getAliveItem(key: ${e}) -> (item: ${i})`,i}return t&&this.cacheMap.delete(e),Ke.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"}(Me||(Me={})),function(e){e.TARGETED_DELIVERY="TARGETED_DELIVERY",e.EXPERIMENTATION="EXPERIMENTATION"}(Le||(Le={})),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"}(Ue||(Ue={})),function(e){e.ACTIVATED="ACTIVATED",e.DEACTIVATED="DEACTIVATED",e.SCHEDULED="SCHEDULED"}(_e||(_e={})),exports.CustomDataScope=void 0,(Pe=exports.CustomDataScope||(exports.CustomDataScope={})).Visit="VISIT",Pe.Visitor="VISITOR",Pe.Page="Page",function(e){e.Required="REQUIRED",e.NotRequired="NOT_REQUIRED"}(Ge||(Ge={}));class je{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,(qe=exports.EventType||(exports.EventType={})).Evaluation="evaluation",qe.ConfigurationUpdate="configurationUpdate",Ge.NotRequired;const He={customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:Ge.NotRequired,dataApiDomain:"data.kameleoon.io"}};class We{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 Ye{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=Me.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 l(this,0,void 0,function*(){Ke.debug("CALL: ClientConfiguration.initialize()"),this.readStorageData();if(this.checkShouldUpdate()){const e=yield this.updateClientConfiguration();if(!e.ok)return Ke.error("Error occurred during client configuration update"),e;if(e.data)return Ke.debug("RETURN: ClientConfiguration.initialize()"),u.Ok()}return this.updateType!==Me.RealTime||this.eventSource.isOpen?(this.updateType===Me.Polling&&this.handlePollingUpdates(),Ke.debug("RETURN: ClientConfiguration.initialize()"),u.Ok()):(this.handleRealTimeUpdates(),Ke.debug("RETURN: ClientConfiguration.initialize()"),u.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=>{Ke.error`Error occurred during real-time update: ${e}. Switching to polling updates while the connection is not restored.`,this.updateType=Me.Polling,this.handlePollingUpdates()})}handlePollingUpdates(){this.cleanupHandlers();try{const e=this.lastUpdate.getTime(),t=Date.now(),i=Math.max(this.updateInterval-(t-e),0);setTimeout(()=>l(this,0,void 0,function*(){yield this.updateClientConfiguration(),this.updateConfigurationIntervalId=setInterval(this.updateClientConfiguration.bind(this),this.updateInterval)}),i)}catch(e){throw this.updateConfigurationIntervalId&&clearInterval(this.updateConfigurationIntervalId),e}}get featureFlags(){return this.featureFlagsData}get 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===Ge.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===Le.TARGETED_DELIVERY))return!0;return!1}checkShouldUpdate(){const{configuration:e}=this.configurationData;if(this.updateType=e.realTimeUpdate?Me.RealTime:Me.Polling,!this.featureFlags.size)return!0;return this.lastUpdate.getTime()<Date.now()-this.updateInterval}readStorageData(){var e,t,i;Ke.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){Ke.error`Error parsing default data file: ${String(e)}`}this.updateConfigurationData(o,u),this.lastUpdate=this.usedDefaultDataFile?new Date(0):new Date(Date.parse(r)),this.lastModified=n,this.requestTime=s}Ke.debug`RETURN: ClientConfiguration.readStorageData() -> (result: ${a.ok})`}updateClientConfiguration(e){return l(this,0,void 0,function*(){const t=Date.now();if(this.usedDefaultDataFile)return this.updateClientConfigurationInBackground(),u.Ok(!1);if(this.requestTime&&!e&&!this.externalPackageInfo.isServer){if(t-this.requestTime<=this.CACHE_REVALIDATE_PERIOD)return this.updateClientConfigurationInBackground(),u.Ok(!1);Ke.debug`Cached configuration data has expired. Fetching fresh data.`}const i=yield this.requester.getClientConfiguration(e,this.lastModified);return this.applyNewConfigurationDataFromResponse(i)})}updateClientConfigurationInBackground(){setTimeout(()=>l(this,0,void 0,function*(){const e=yield this.requester.getClientConfiguration(void 0,this.lastModified);yield this.applyNewConfigurationDataFromResponse(e)}),0)}applyNewConfigurationDataFromResponse(e){var t,i;return l(this,0,void 0,function*(){if(this.requestTime=Date.now(),!e.ok)return this.featureFlags.size?(Ke.error("Error occurred while updating configuration. Existing configuration will be used as a fallback."),u.Ok(!0)):e;if(void 0===e.data.configuration)return this.updateStorageData(),u.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?Me.RealTime:Me.Polling,n=r!==this.updateType;return n&&(this.updateType=r,Ke.info`Configuration update type was toggled to ${Me[r]}`,yield this.initialize()),u.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 We(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 Je(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e]))}var Xe,Qe,Ze,et;exports.KameleoonData=void 0,(Xe=exports.KameleoonData||(exports.KameleoonData={})).UniqueIdentifier="uniqueIdentifier",Xe.CustomData="customData",Xe.PageView="pageView",Xe.GeolocationData="geolocation",Xe.Browser="browser",Xe.Conversion="conversion",Xe.Cookie="cookie",Xe.Device="device",Xe.OperatingSystem="operatingSystem",Xe.UserAgent="userAgent",Xe.ApplicationVersion="applicationVersion",Xe.VisitsData="visitsData",Xe.KameleoonConversionScore="kameleoonConversionScore",Xe.Personalization="personalization",Xe.CBScores="cbScores",Xe.TargetedSegment="targetedSegment",exports.DeviceType=void 0,(Qe=exports.DeviceType||(exports.DeviceType={})).Phone="PHONE",Qe.Tablet="TABLET",Qe.Desktop="DESKTOP",exports.OperatingSystemType=void 0,(Ze=exports.OperatingSystemType||(exports.OperatingSystemType={})).WindowsPhone="WINDOWS_PHONE",Ze.Windows="WINDOWS",Ze.Android="ANDROID",Ze.Linux="LINUX",Ze.Mac="MAC",Ze.IOS="IOS",exports.BrowserType=void 0,(et=exports.BrowserType||(exports.BrowserType={})).Chrome="CHROME",et.InternetExplorer="IE",et.Firefox="FIREFOX",et.Safari="SAFARI",et.Opera="OPERA",et.Other="OTHER";const tt={[exports.OperatingSystemType.Windows]:0,[exports.OperatingSystemType.Mac]:1,[exports.OperatingSystemType.IOS]:2,[exports.OperatingSystemType.Linux]:3,[exports.OperatingSystemType.Android]:4,[exports.OperatingSystemType.WindowsPhone]:5},it=Je(tt),at={[exports.BrowserType.Chrome]:0,[exports.BrowserType.InternetExplorer]:1,[exports.BrowserType.Firefox]:2,[exports.BrowserType.Safari]:3,[exports.BrowserType.Opera]:4,[exports.BrowserType.Other]:5},ot=Je(at),rt="off",nt="warehouseAudiences";var st;exports.SdkLanguageType=void 0,(st=exports.SdkLanguageType||(exports.SdkLanguageType={})).ANDROID="ANDROID",st.IOS="IOS",st.JAVA="JAVA",st.CSHARP="CSHARP",st.NODEJS="NODEJS",st.PHP="PHP",st.RUBY="RUBY",st.GO="GO",st.FLUTTER="FLUTTER",st.REACT="REACT",st.PYTHON="PYTHON",st.JAVASCRIPT="JAVASCRIPT",st.RUST="RUST";const ut={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 lt,dt,ct,pt,gt,ht,mt,ft,vt,Ct,xt,yt;!function(e){e.And="AND",e.Or="OR"}(lt||(lt={})),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"}(dt||(dt={})),function(e){e.NEW="NEW",e.RETURNING="RETURNING"}(ct||(ct={})),function(e){e.ANY="ANY",e.EXACT="EXACT"}(pt||(pt={})),function(e){e.ALL="ALL",e.TEST="TEST",e.PERSO="PERSO"}(gt||(gt={})),function(e){e.Experiment="EXPERIMENT",e.Personalization="PERSONALIZATION",e.Any="ANY"}(ht||(ht={})),function(e){e.EXACT="EXACT",e.CONTAINS="CONTAINS",e.REGULAR_EXPRESSION="REGULAR_EXPRESSION",e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(mt||(mt={})),function(e){e.GREATER="GREATER",e.EQUAL="EQUAL",e.LOWER="LOWER"}(ft||(ft={})),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"}(Ct||(Ct={})),function(e){e.Minute="MINUTE",e.Hour="HOUR",e.Day="DAY",e.Week="WEEK",e.Month="MONTH"}(xt||(xt={})),function(e){e.Ascending="asc",e.Descending="desc"}(yt||(yt={}));const Et="localhost",Dt=/^(\.?(([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 Tt{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))?u.Err(new p(exports.KameleoonException.SemanticVersionParse,e)):u.Ok(t.slice(0,3))}static validateDomain(e){return e?(e=Tt.checkAndTrimProtocol(e.toLowerCase()),Dt.test(e)||e===Et||Ke.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.`,u.Ok(e)):u.Err()}static validateNetworkDomain(e){return e?(e=(e=Tt.checkAndTrimProtocol(e.toLowerCase())).replace(/^\.+|\.+$/g,""),Dt.test(e)||e===Et?u.Ok(e):(Ke.error`The network domain ${e} is invalid.`,u.Err())):u.Err()}static checkAndTrimProtocol(e){const t=["http://","https://"];for(const i of t)if(e.startsWith(i)){e=e.substring(i.length),Ke.warning`The domain contains ${i}. Domain after protocol trimming: ${e}`;break}return e}}class It{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:s}){if(Ke.debug`CALL: checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager)`,!e||!e.conditionsData.firstLevel.length){const e=u.Ok(!0);return Ke.debug`RETURN checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${e})`,e}if(!o){const e=u.Err(new p(exports.KameleoonException.Initialization));return Ke.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 c=s.getTree(e);let g,h,m;c.hasTargetingType(Ct.SEGMENT)&&(g=s.trees,m=r.segments),c.hasTargetingType(Ct.TARGET_FEATURE_FLAG)&&(h=r.ruleMap);const f=c.evaluate({variationData:l,sdkInfo:n,segments:m,ruleMap:h,trees:g,targetingData:i,experimentId:a,visitorCode:t});return Ke.debug`RETURN checkTargeting(segment, visitorCode: ${t}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${f})`,f}static convertTimeUnit(e,t){return e/{[xt.Minute]:exports.Milliseconds.Minute,[xt.Hour]:exports.Milliseconds.Hour,[xt.Day]:exports.Milliseconds.Day,[xt.Week]:exports.Milliseconds.Week,[xt.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=Tt.validateVersion(e),o=Tt.validateVersion(t);if(!a.ok)return u.Err(a.error);if(!o.ok)return u.Err(o.error);const[r,n,s]=a.data,[l,d,p]=o.data,[g,h,m]=[r===l,n===d,s===p];switch(i){case ft.EQUAL:return u.Ok(g&&h&&m);case ft.GREATER:return u.Ok(r>l||g&&n>d||g&&h&&s>p);case ft.LOWER:return u.Ok(r<l||g&&n<d||g&&h&&s<p);default:Ke.error`Unknown version match type: ${i}`,c(i)}}static getVariationByHash(e,t){let i=0;for(const a of e)if(i+=a.exposition,i>=t)return a;return null}}class kt{static insertInOrderedListMutably({list:e,element:t,order:i}){if(e.includes(t))return;const a=e.findIndex(e=>i===yt.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 St{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?S+encodeURIComponent(this.title):"",i=(null===(e=this.referrers)||void 0===e?void 0:e.length)?R+JSON.stringify(this.referrers):"";return y+$+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 St({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 St({urlAddress:o,title:r,referrers:i}),s.timestamps=[...e,{time:a,status:exports.TrackingStatus.Sent}]}else s=new St({urlAddress:o,title:r,referrers:i}),s.timestamps=[{time:a,status:exports.TrackingStatus.Sent}];t.set(o,s)}}}let Rt=class e{constructor(e,t,...i){this._status=exports.TrackingStatus.Unsent,this.isIdentifier=!1;const a="boolean"==typeof t;"number"==typeof e?this.index=e:(this.name=e,this.index=-1),this.overwrite=!a||t,this.value=a?i:[t,...i].filter(e=>null!=e)}get url(){if("number"!=typeof this.index)return"";const e=[...new Set(this.value)];let t={};e.forEach(e=>{t[e]=1});let i="";return this.isIdentifier&&(i=le+String(!0)),C+K+this.index+q+encodeURIComponent(JSON.stringify(t))+b+String(this.overwrite)+i}get data(){return Object.assign(Object.assign({index:this.index},void 0!==this.name?{name:this.name}:{}),{value:this.value,type:exports.KameleoonData.CustomData,isIdentifier:this.isIdentifier,status:this.status,overwrite:this.overwrite})}get status(){return this._isMappingIdentifier?exports.TrackingStatus.Unsent:this._status}static _fromRaw(t){const{index:i,value:a,status:o,isIdentifier:r,name:n,overwrite:s}=t;let u;return n?(u=new e(n,null==s||s,...a),u._index=i):u=new e(i,null==s||s,...a),u.status=o,u._isMappingIdentifier=r,u}set _isMappingIdentifier(e){this.isIdentifier=e}set status(e){this._status=e}static _updateFromVisit(t,i){var a;if(null===(a=t.customDataEvents)||void 0===a?void 0:a.length)for(let a=t.customDataEvents.length-1;a>=0;a--){const{index:o,valuesCountMap:r}=t.customDataEvents[a].data;i.has(o)||i.set(o,new e(o,...Object.keys(r)))}}set _index(e){this.index=e}},Vt=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)+w+String(this.revenue)+V+String(this.negative)+((null===(e=this.metadata)||void 0===e?void 0:e.length)?fe+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=>Rt._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)}}}},wt=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?O+this.version:"";return x+ue+this.browser+A+at[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:ot[a];return o?new e(t,o):new e(t)}}},bt=class e{constructor(e){this.device=e,this.status=exports.TrackingStatus.Unsent}get url(){return this.device?x+N+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)}},Kt=class e{constructor(e){this.operatingSystem=e,this.status=exports.TrackingStatus.Unsent}get url(){return this.operatingSystem?x+Y+this.operatingSystem+J+tt[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:it[a];return new e(t)}}};class At{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?Z+encodeURIComponent(this.region):"",t=this.city?Q+encodeURIComponent(this.city):"",i=this.postalCode?ie+encodeURIComponent(this.postalCode):"",a=this.coordinates?ee+this.coordinates[0]+te+this.coordinates[1]:"";return I+X+encodeURIComponent(this.country)+e+t+i+a}get data(){return{type:exports.KameleoonData.GeolocationData,country:this.country,region:this.region,c