@kameleoon/javascript-sdk-core 5.14.0 → 5.14.2

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
- var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var i,a,r={},n={};var o,s=(a||(a=1,function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.Err=t.Ok=void 0;var e=function(){if(i)return n;function t(t){if(!this.ok){if("string"==typeof this.error||void 0===this.error)throw new Error(t||this.error||"There was an error! No specific error message was provided.");throw t&&(this.error.message=t),this.error}return this.data}function e(t){return this.ok?this.data:t(this.error)}function a(t){return this.ok?this.data:t}function r(t){return this.ok&&t(this.data),this}return i=1,Object.defineProperty(n,"__esModule",{value:!0}),n.Err=n.Ok=void 0,n.Ok=function(i){return{ok:!0,data:i,throw:t,else:e,or:a,and:r}},n.Err=function(i){return{ok:!1,error:i,throw:t,else:e,or:a,and:r}},n}();Object.defineProperty(t,"Ok",{enumerable:!0,get:function(){return e.Ok}}),Object.defineProperty(t,"Err",{enumerable:!0,get:function(){return e.Err}})}(r)),r);function u(t,e,i,a){return new(i||(i=Promise))(function(r,n){function o(t){try{u(a.next(t))}catch(t){n(t)}}function s(t){try{u(a.throw(t))}catch(t){n(t)}}function u(t){var e;t.done?r(t.value):(e=t.value,e instanceof i?e:new i(function(t){t(e)})).then(o,s)}u((a=a.apply(t,e||[])).next())})}"function"==typeof SuppressedError&&SuppressedError,function(t){t.Credentials="Credentials",t.EventSourceInitialization="EventSourceInitialization",t.FeatureFlagConfigurationNotFound="FeatureFlagConfigurationNotFound",t.FeatureFlagVariableNotFound="FeatureFlagVariableNotFound",t.FeatureFlagVariationNotFound="FeatureFlagVariationNotFound",t.FeatureFlagExperimentNotFound="FeatureFlagExperimentNotFound",t.FeatureFlagEnvironmentDisabled="FeatureFlagEnvironmentDisabled",t.VisitAmount="VisitAmount",t.VisitorCodeMaxLength="VisitorCodeMaxLength",t.VisitorCodeEmpty="VisitorCodeEmpty",t.StorageInitialization="StorageInitialization",t.StorageWrite="StorageWrite",t.StorageRead="StorageRead",t.StorageParse="StorageParse",t.StorageEmpty="StorageEmpty",t.ClientConfiguration="ClientConfiguration",t.TargetingCondition="TargetingCondition",t.AmongValuesCheck="AmongValuesCheck",t.RangeCheck="RangeCheck",t.Initialization="Initialization",t.JSONParse="JSONParse",t.NumberParse="NumberParse",t.VersionParse="VersionParse",t.CookieParse="CookieParse",t.SemanticVersionParse="SemanticVersionParse",t.RemoteData="RemoteData",t.MaximumRetriesReached="MaximumRetriesReached"}(o||(o={}));const d={[o.CookieParse]:t=>`Couldn't parse cookie string: ${t}`,[o.JSONParse]:t=>`Couldn't parse JSON variable: ${t}`,[o.NumberParse]:t=>`It's not possible to parse value ${t} to Number`,[o.VersionParse]:t=>`It's not possible to parse a version value ${t} to Number, version should be in format x.x`,[o.SemanticVersionParse]:t=>`It's not possible to parse a version value ${t} to Number, version should be in format x.x.x`,[o.Initialization]:()=>"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods",[o.Credentials]:()=>"KameleoonClient can not be created without credentials",[o.StorageInitialization]:()=>"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed",[o.EventSourceInitialization]:()=>"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed",[o.FeatureFlagConfigurationNotFound]:t=>`No feature flag with key ${t} was found.`,[o.FeatureFlagEnvironmentDisabled]:(t,e)=>`Feature flag with key ${t} is disabled in ${e} environment.`,[o.FeatureFlagVariableNotFound]:(t,e)=>`No feature flag variable with key ${t} was found for ${e} visitorCode.`,[o.FeatureFlagVariationNotFound]:(t,e)=>`No feature flag variation with key ${t} was found for ${e} visitorCode.`,[o.FeatureFlagExperimentNotFound]:(t,e)=>`No feature flag experiment with id ${t} was found for ${e} visitorCode.`,[o.VisitAmount]:()=>"Visit amount must be a number between 1 and 25",[o.VisitorCodeMaxLength]:()=>"Visitor code can not be more than 255 characters long",[o.VisitorCodeEmpty]:()=>"Visitor code can not be empty",[o.StorageWrite]:t=>`Couldn't update storage for kameleoonClient: ${t}`,[o.StorageRead]:t=>`No data found in storage under ${t} key`,[o.StorageEmpty]:()=>"No data found in storage",[o.StorageParse]:(t,e)=>`Couldn't parse ${e} storage data, the data may be corrupted. Error: ${t}`,[o.ClientConfiguration]:t=>`Couldn't retrieve client configuration from Kameleoon Api. Error: ${t}`,[o.TargetingCondition]:t=>`${t} targeting condition is not yet supported.`,[o.AmongValuesCheck]:(t,e)=>`Couldn't parse value "${e}": ${t}`,[o.RangeCheck]:t=>`Couldn't parse value "${t}" as a range, value should be in format [x: number, y: number]`,[o.RemoteData]:t=>`Couldn't retrieve data from Kameleoon server. Error: ${t}`,[o.MaximumRetriesReached]:t=>`Maximum retries reached, request failed. Reason: ${t}`};function l(t){throw new Error(`Reaching an impossible state because of ${t}`)}class c extends Error{constructor(t,e,i){switch(super(`Error: ${t}`),this.name="KameleoonError",this.errorType=t,t){case o.Initialization:case o.Credentials:case o.VisitorCodeMaxLength:case o.VisitorCodeEmpty:case o.StorageInitialization:case o.VisitAmount:case o.EventSourceInitialization:case o.StorageEmpty:this.message=d[t]();break;case o.CookieParse:case o.FeatureFlagConfigurationNotFound:case o.NumberParse:case o.ClientConfiguration:case o.MaximumRetriesReached:case o.RemoteData:case o.VersionParse:case o.SemanticVersionParse:this.message=d[t](e);break;case o.FeatureFlagExperimentNotFound:case o.FeatureFlagVariationNotFound:case o.FeatureFlagEnvironmentDisabled:case o.FeatureFlagVariableNotFound:this.message=d[t](e,i);break;case o.StorageWrite:case o.JSONParse:case o.StorageRead:this.message=d[t](e);break;case o.StorageParse:this.message=d[t](e,i);break;case o.TargetingCondition:this.message=d[t](e);break;case o.AmongValuesCheck:this.message=d[t](e,i);break;case o.RangeCheck:this.message=d[t](e);break;default:l(t)}}get type(){return this.errorType}}var h,g,f,p;!function(t){t.DataApi="dataApi",t.Events="events",t.ClientConfiguration="clientConfiguration"}(h||(h={})),function(t){t.Get="GET",t.Post="POST"}(g||(g={})),function(t){t[t.VisitEvent=0]="VisitEvent",t[t.VisitData=1]="VisitData",t[t.DataMap=2]="DataMap"}(f||(f={})),function(t){t.Configuration="configuration",t.Tracking="tracking",t.RemoteData="remoteData"}(p||(p={}));const v=2;var m;!function(t){t.UserAgent="User-Agent",t.ContentType="Content-Type",t.SdkVersion="X-Kameleoon-SDK-Version",t.SdkType="X-Kameleoon-SDK-Type",t.Authorization="Authorization",t.AcceptEncoding="Accept-Encoding",t.IfModifiedSince="If-Modified-Since",t.LastModified="Last-Modified"}(m||(m={}));const C="eventType=customData",E="eventType=staticData",y="eventType=page",I="eventType=conversion",D="eventType=activity",T="eventType=experiment",k="eventType=geolocation",R="eventType=targetingSegment",V="&title=",S="&referrersIndices=",w="&negative=",b="&revenue=",A="&overwrite=",O="&index=",$="&browserIndex=",F="&browserVersion=",N="&href=",x="&deviceType=",M="&goalId=",U="&visitorCode=",_="&variationId=",L="&ts=",P="&key=",K="&sdkName=",G="&sdkVersion=",B="&valuesCountMap=",z="&nonce=",q="&id=",j="&customData=",H="&currentVisit=",W="&maxNumberPreviousVisits=",Y="&os=",J="&osIndex=",X="&country=",Q="&city=",Z="&region=",tt="&latitude=",et="&longitude=",it="&postalCode=",at="&conversion=",rt="&staticData=",nt="&geolocation=",ot="&page=",st="&experiment=",ut="&browser=",dt="&mappingIdentifier=",lt="&mappingValue=",ct="&kcs=",ht="&personalization=",gt="&userAgent=",ft="&bodyUa=",pt="&cbs=",vt="&metadata=",mt="&visitNumber=",Ct="&timeSincePreviousVisit=",Et="?environment=",yt="?ts=",It="sse?siteCode=",Dt="map?siteCode=",Tt="events?siteCode=",kt="visitor?siteCode=",Rt="visit/",Vt="map/",St={[h.DataApi]:"data.kameleoon.io",[h.Events]:"events.kameleoon.eu",[h.ClientConfiguration]:"sdk-config.kameleoon.eu"};var wt;!function(t){t[t.NONE=0]="NONE",t[t.ERROR=1]="ERROR",t[t.WARNING=2]="WARNING",t[t.INFO=3]="INFO",t[t.DEBUG=4]="DEBUG"}(wt||(wt={}));const bt={[wt.NONE]:"NONE",[wt.ERROR]:"ERROR",[wt.WARNING]:"WARNING",[wt.INFO]:"INFO",[wt.DEBUG]:"DEBUG"};const At=(t,e)=>"credentials"===t?{clientId:"****",clientSecret:"****"}:e instanceof Map?Array.from(e.entries()):e;class Ot{static setLogger(t){Ot.logger=t}static setLogLevel(t){Ot.logLevel=t}static log({level:t,strings:e,keys:i}){if(!Ot.checkLevel(t))return;let a;if("string"==typeof e)a=e;else if("function"==typeof e)try{a=e()}catch(t){a="Failed to log message"}else a=function(t,e){let i="";if(e)for(let a=0;a<e.length;a++){let r=e[a];if("object"==typeof r)try{i+=t[a]+JSON.stringify(r,At)}catch(e){i+=t[a]+"{object}"}else i+="string"==typeof r?t[a]+"'"+r+"'":t[a]+r}return i+=t[t.length-1],i}(e,i);Ot.writeMessage(t,a)}static info(t,...e){Ot.log({level:wt.INFO,strings:t,keys:e})}static error(t,...e){Ot.log({level:wt.ERROR,strings:t,keys:e})}static warning(t,...e){Ot.log({level:wt.WARNING,strings:t,keys:e})}static debug(t,...e){Ot.log({level:wt.DEBUG,strings:t,keys:e})}static checkLevel(t){return t<=Ot.logLevel&&t!==wt.NONE}static writeMessage(t,e){Ot.logger.log(t,`Kameleoon [${bt[t]}]: ${e}`)}}Ot.logger=new class{log(t,e){switch(t){case wt.DEBUG:console.debug(e);break;case wt.INFO:console.info(e);break;case wt.WARNING:console.warn(e);break;case wt.ERROR:console.error(e)}}},Ot.logLevel=wt.WARNING;class $t{constructor({urlProvider:t,packageInfo:e,externalRequester:i,requestTimeout:a,trackRetryDelay:r,useAbortController:n}){Ot.debug`CALL: new Requester(urlProvider, packageInfo: ${e}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${r}, useAbortController: ${n})`,this.urlProvider=t,this.useAbortController=n,this.externalRequester=i,this.trackRetryDelay=r,this.packageInfo=e,this.timeout=a,Ot.debug`RETURN: new Requester(urlProvider, packageInfo: ${e}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${r}, useAbortController: ${n})`}getClientConfiguration(t,e){return u(this,void 0,void 0,function*(){const i=this.urlProvider.getClientConfigurationUrl(t);let a=Object.assign({[m.SdkType]:this.packageInfo.type.toLowerCase(),[m.SdkVersion]:this.packageInfo.version},e&&{[m.IfModifiedSince]:e});try{let t={message:""};Ot.debug`Running configuration request Method: ${g.Get}, Url: ${i}, Headers: ${a}, with retry limit ${3}`;for(let e=0;e<3;e++){const r=yield this.sendRequest({url:i,requestType:p.Configuration,retryCount:e,parameters:{method:g.Get,headers:a}});if(r.ok){const t=yield r.json();this.logReceivedConfigurationResponse(r.status,i,a);const e=this.getLastModifiedHeader(r),n=t;return s.Ok({configuration:n,lastModified:e})}if(304===r.status)return this.logReceivedConfigurationResponse(r.status,i,a),s.Ok({});if(2===e){if(r.text){const e=yield r.text();t=JSON.parse(e)}Ot.error`Failed to get configuration response ${{status:r.status,message:t.message}} for request Method: ${g.Get}, Url: ${i}, Headers: ${a}`}else yield this.logRequestError({logLevel:wt.WARNING,message:"Failed to get configuration response",response:r,method:g.Get,url:i})}return s.Err(new c(o.MaximumRetriesReached,t.message))}catch(t){return yield this.logRequestError({logLevel:wt.ERROR,message:"Failed to get configuration response",error:t,method:g.Get,url:i,headers:a}),s.Err(new c(o.ClientConfiguration,t))}})}getRemoteData(t){var e;return u(this,void 0,void 0,function*(){const i=this.urlProvider.getRemoteDataUrl(t);Ot.debug`Running remote data request Method: ${g.Get}, Url: ${i}`;try{const t=yield this.sendRequest({url:i,requestType:p.RemoteData,retryCount:0,parameters:{method:g.Get}});if(!t.ok){if(yield this.logRequestError({logLevel:wt.ERROR,message:"Failed to get remote data response",response:t,method:g.Get,url:i}),t.text){const i=yield t.text(),a=null===(e=JSON.parse(i))||void 0===e?void 0:e.message;return s.Err(new c(o.RemoteData,a))}return s.Err(new c(o.RemoteData,"Unknown Reason - no `text()` was found for a response"))}const a=yield t.json();return Ot.debug`Received remote data response: ${{status:t.status}} for request Method: ${g.Get}, Url: ${i}`,s.Ok(a)}catch(t){return yield this.logRequestError({logLevel:wt.ERROR,message:"Failed to get remote data response",error:t,method:g.Get,url:i}),s.Err(new c(o.RemoteData,t))}})}getVisitorData({visitorCode:t,filters:e,isMappingIdentifier:i}){var a;return u(this,void 0,void 0,function*(){const r=this.urlProvider.getVisitorDataUrl({visitorCode:t,filters:e,isMappingIdentifier:i});Ot.debug`Running visitor data request Method: ${g.Get}, Url: ${r}`;try{const t=yield this.sendRequest({url:r,requestType:p.RemoteData,retryCount:0,parameters:{method:g.Get}});if(!t.ok){if(yield this.logRequestError({logLevel:wt.ERROR,message:"Failed to get visitor data response",response:t,method:g.Get,url:r}),"function"==typeof t.text){const e=yield t.text();if(e){const t=null===(a=JSON.parse(e))||void 0===a?void 0:a.message;return s.Err(new c(o.RemoteData,t))}}return t.status?s.Err(new c(o.RemoteData,`No error message. Error status: ${t.status}`)):s.Err(new c(o.RemoteData,"Unknown Reason - no text message or error status was found for a response"))}const e=yield t.json();return Ot.debug`Received visitor data response: ${{status:t.status}} for request Method: ${g.Get}, Url: ${r}`,s.Ok(e)}catch(t){return yield this.logRequestError({logLevel:wt.ERROR,message:"Failed to get visitor data response",error:t,method:g.Get,url:r}),s.Err(new c(o.RemoteData,t))}})}track(t,e){return u(this,void 0,void 0,function*(){const i=this.urlProvider.getTrackingUrl(e);Ot.debug`Running tracking request Method: ${g.Post}, Url: ${i}, Body: ${t}, with retry limit ${3}, retry delay ${this.trackRetryDelay} ms`;for(let e=0;e<3;e++){let a;try{if(a=yield this.sendRequest({url:i,retryCount:e,requestType:p.Tracking,parameters:{body:t,method:g.Post,headers:{[m.ContentType]:"*/*"}}}),a.ok)return Ot.debug`Received tracking response: ${{status:a.status}} for request Method: ${g.Post}, Url: ${i}, Body: ${t}`,s.Ok();yield this.logRequestError({logLevel:2==e?wt.ERROR:wt.WARNING,message:"Failed to get tracking response",response:a,method:g.Post,url:i})}catch(t){yield this.logRequestError({logLevel:2==e?wt.ERROR:wt.WARNING,message:"Failed to get tracking response",error:t,method:g.Post,url:i})}e<3&&(yield new Promise(t=>setTimeout(t,this.trackRetryDelay)))}return s.Err()})}sendRequest({url:t,requestType:e,retryCount:i,parameters:a}){return u(this,void 0,void 0,function*(){let r;if(this.useAbortController){const n=new AbortController,o=setTimeout(()=>n.abort(),this.timeout);r=yield this.externalRequester.sendRequest({url:t,retryCount:i,requestType:e,parameters:Object.assign(Object.assign({},a),{signal:n.signal})}),clearTimeout(o)}else r=yield this.externalRequester.sendRequest({url:t,retryCount:i,requestType:e,parameters:a});return r})}logRequestError({logLevel:t,message:e,error:i,method:a,url:r,response:n,headers:o}){return u(this,void 0,void 0,function*(){if(i){let n="Unknown error";i instanceof Error&&(n=i.message),Ot.log({level:t,strings:()=>`${e} with error: ${n} for request Method: ${a}, Url: ${r}`})}else if(n&&Ot.checkLevel(t)){const i=yield this.parseResponse(n);Ot.log({level:t,strings:()=>`${e} response: Status: '${i.status}' Message: '${i.message}' for request Method: ${a}, Url: '${r}'`+(o?`, Headers: ${o}`:"")})}})}parseResponse(t){return u(this,void 0,void 0,function*(){let e="";try{if("function"==typeof t.text){const i=yield t.text();i&&(e=i)}}catch(t){}return{status:t.status,message:e}})}getLastModifiedHeader(t){if(t.headers){const e=m.LastModified.toLowerCase();for(const[i,a]of t.headers)if(i.toLowerCase()===e)return a}}logReceivedConfigurationResponse(t,e,i){Ot.debug`Received configuration response: ${{status:t}} for request Method: ${g.Get}, Url: ${e}, Headers: ${i}`}}var Ft,Nt,xt,Mt,Ut,_t,Lt,Pt,Kt,Gt,Bt;!function(t){t.Production="production",t.Staging="staging",t.Development="development"}(Ft||(Ft={}));class zt{constructor(){this.ready=!1,this.isCustomDomain=!1,this.domains=St}initialize({domain:t,siteCode:e,packageInfo:i,environment:a}){this.siteCode=e,this.environment=a,this.packageInfo=i,this.ready=!0,this.setDomains(t)}set dataApiDomain(t){if(!this.isCustomDomain)return void(this.domains[h.DataApi]=t);const e=t.split(".")[0],i=this.domains[h.DataApi];this.domains[h.DataApi]=i.replace(/^[^.]+/,e)}getClientConfigurationUrl(t){this.isInitialized();const e=`https://${this.domains[h.ClientConfiguration]}/v3/`,i=this.environment===Ft.Production?"":Et+encodeURIComponent(this.environment);let a="";return t&&(a=i?L+t:yt+t),e+this.siteCode+i+a}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains[h.Events]}:8110/${It}${this.siteCode}`}getRemoteDataUrl(t){return this.isInitialized(),this.getDataApiUrl(f.DataMap)+this.siteCode+P+encodeURI(t)}getVisitorDataUrl({visitorCode:t,filters:e,isMappingIdentifier:i}){this.isInitialized();const{customData:a,previousVisitAmount:r,currentVisit:n,conversions:o,geolocation:s,experiments:u,pageViews:d,device:l,browser:c,operatingSystem:h,kcs:g,personalization:p,visitorCode:v,cbs:m}=e,C=i?lt:U,E=a||v?j+!0:"",y=o?at+!0:"",I=s?nt+!0:"",D=u?st+!0:"",T=d?ot+!0:"",k=rt+!0,R=n?H+!0:"",V=g?ct+!0:"",S=p?ht+!0:"",w="number"!=typeof r?W+1:W+r,b=m?pt+!0:"";return this.getDataApiUrl(f.VisitData)+this.siteCode+C+t+w+E+y+I+D+T+k+R+V+S+b}getTrackingUrl(t){this.isInitialized();const{type:e,version:i}=this.packageInfo;let a=this.getDataApiUrl(f.VisitEvent)+this.siteCode+K+e.toLowerCase()+G+i;return t&&(a+=ft+!0),a}isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}getDataApiUrl(t){if(!this.domains[h.DataApi])throw new Error("Data API domain is not set");const e=`https://${this.domains[h.DataApi]}`;switch(t){case f.VisitEvent:return`${e}/${Rt+Tt}`;case f.VisitData:return`${e}/${Rt+kt}`;case f.DataMap:return`${e}/${Vt+Dt}`}}setDomains(t){t&&(this.isCustomDomain=!0,this.domains[h.DataApi]="data."+t,this.domains[h.Events]="events."+t,this.domains[h.ClientConfiguration]="sdk-config."+t)}}!function(t){t.BOOLEAN="BOOLEAN",t.NUMBER="NUMBER",t.STRING="STRING",t.JSON="JSON",t.JS="JS",t.CSS="CSS"}(Nt||(Nt={})),function(t){t.Sent="sent",t.Unsent="unsent",t.Pending="pending"}(xt||(xt={})),function(t){t[t.Second=1e3]="Second",t[t.Minute=6e4]="Minute",t[t.Hour=36e5]="Hour",t[t.Day=864e5]="Day",t[t.Week=6048e5]="Week",t[t.Month=2592e6]="Month"}(Mt||(Mt={}));class qt{constructor(t){this.cacheMap=new Map,this.intervalId=null,this.cleanupTimeout=t*Mt.Second}add({key:t,data:e,lifetime:i}){Ot.debug`CALL: CacheManager.add(key: ${t}, data: ${e}, lifetime: ${i})`,null===this.intervalId&&this.activate();const a=i*Mt.Second,r={data:e,expirationTime:Date.now()+a};this.cacheMap.set(t,r),Ot.debug`RETURN: CacheManager.add(key: ${t}, data: ${e}, lifetime: ${i})`}getAliveItem(t){Ot.debug`CALL: CacheManager.getAliveItem(key: ${t})`;const e=this.cacheMap.get(t);if(e&&e.expirationTime>=Date.now()){const i=e.data;return Ot.debug`RETURN: CacheManager.getAliveItem(key: ${t}) -> (item: ${i})`,i}return e&&this.cacheMap.delete(t),Ot.debug`RETURN: CacheManager.getAliveItem(key: ${t}) -> (item: null)`,null}activate(){this.intervalId=setInterval(()=>{const t=Date.now();for(const[e,i]of this.cacheMap)i.expirationTime<t&&this.cacheMap.delete(e);this.cacheMap.size||this.cleanupInterval()},this.cleanupTimeout)}cleanupInterval(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null)}}!function(t){t[t.Polling=0]="Polling",t[t.RealTime=1]="RealTime"}(Ut||(Ut={})),function(t){t.TARGETED_DELIVERY="TARGETED_DELIVERY",t.EXPERIMENTATION="EXPERIMENTATION"}(_t||(_t={})),function(t){t.ANDROID="ANDROID",t.SWIFT="SWIFT",t.JAVA="JAVA",t.CSHARP="CSHARP",t.NODEJS="NODEJS",t.PHP="PHP",t.RUBY="RUBY",t.GO="GO",t.FLUTTER="FLUTTER",t.REACTJS="REACTJS"}(Lt||(Lt={})),function(t){t.ACTIVATED="ACTIVATED",t.DEACTIVATED="DEACTIVATED",t.SCHEDULED="SCHEDULED"}(Pt||(Pt={})),function(t){t.Visit="VISIT",t.Visitor="VISITOR",t.Page="Page"}(Kt||(Kt={})),function(t){t.Required="REQUIRED",t.NotRequired="NOT_REQUIRED"}(Gt||(Gt={}));class jt{addEventHandler(t,e){this.eventHandlers||(this.eventHandlers=new Map),this.eventHandlers.set(t,e)}fireEvent(t,e){var i;const a=null===(i=this.eventHandlers)||void 0===i?void 0:i.get(t);a&&e&&a(e)}}!function(t){t.Evaluation="evaluation",t.ConfigurationUpdate="configurationUpdate"}(Bt||(Bt={})),Gt.NotRequired;const Ht={customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:Gt.NotRequired,dataApiDomain:"data.kameleoon.io"}};class Wt{constructor(t){this._featureFlags=t.slice().sort((t,e)=>t.id-e.id)}getFeatureFlagByHash(t){let e=Math.floor(t*this._featureFlags.length);return e=Math.min(e,this._featureFlags.length-1),this._featureFlags[e]}get featureFlags(){return this._featureFlags}}class Yt{constructor({updateInterval:t,urlProvider:e,storage:i,requester:a,dataManager:r,eventSource:n,externalVisitorCodeManager:o,eventManager:s,externalPackageInfo:u,defaultDataFile:d}){this.updateConfigurationIntervalId=null,this.updateType=Ut.Polling,this.configurationData=Ht,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*Mt.Minute,this.urlProvider=e,this.requester=a,this.updateInterval=t,this.lastUpdate=new Date,this.storage=i,this.dataManager=r,this.eventManager=s,this.visitorCodeManager=o,this.eventSource=n,this.externalPackageInfo=u,this.defaultDataFile=d}initialize(){return u(this,void 0,void 0,function*(){Ot.debug("CALL: ClientConfiguration.initialize()"),this.readStorageData();if(this.checkShouldUpdate()){const t=yield this.updateClientConfiguration();if(!t.ok)return Ot.error("Error occurred during client configuration update"),t;if(t.data)return Ot.debug("RETURN: ClientConfiguration.initialize()"),s.Ok()}return this.updateType!==Ut.RealTime||this.eventSource.isOpen?(this.updateType===Ut.Polling&&this.handlePollingUpdates(),Ot.debug("RETURN: ClientConfiguration.initialize()"),s.Ok()):(this.handleRealTimeUpdates(),Ot.debug("RETURN: ClientConfiguration.initialize()"),s.Ok())})}cleanupHandlers(){this.eventSource.isOpen&&this.eventSource.close(),this.updateConfigurationIntervalId&&clearInterval(this.updateConfigurationIntervalId)}handleRealTimeUpdates(){this.cleanupHandlers();this.eventSource.open(t=>{this.updateClientConfiguration(t).then(e=>{e.ok&&this.eventManager.fireEvent(Bt.ConfigurationUpdate,{timestamp:t})})}),this.eventSource.onError(t=>{Ot.error`Error occurred during real-time update: ${t}. Switching to polling updates while the connection is not restored.`,this.updateType=Ut.Polling,this.handlePollingUpdates()})}handlePollingUpdates(){this.cleanupHandlers();try{const t=this.lastUpdate.getTime(),e=Date.now(),i=Math.max(this.updateInterval-(e-t),0);setTimeout(()=>u(this,void 0,void 0,function*(){yield this.updateClientConfiguration(),this.updateConfigurationIntervalId=setInterval(this.updateClientConfiguration.bind(this),this.updateInterval)}),i)}catch(t){throw this.updateConfigurationIntervalId&&clearInterval(this.updateConfigurationIntervalId),t}}get featureFlags(){return this.featureFlagsData}get configuration(){return this.configurationData.configuration}get segments(){if(this.segmentsData)return this.segmentsData;const t=new Map;return this.featureFlagsData.forEach(e=>{e.rules.forEach(e=>{e.segment&&!t.has(e.segment.id.toString())&&t.set(e.segment.id.toString(),e.segment)})}),this.segmentsData=t,t}get ruleMap(){var t;if(null===(t=this.mappedRules)||void 0===t?void 0:t.size)return this.mappedRules;const e=new Map;for(const t of this.featureFlags.values())for(const i of t.rules){const{id:a,experimentId:r,variationByExposition:n}=i,o=new Map;n.forEach(({variationKey:t,variationId:e})=>{"number"==typeof e&&o.set(t,e)}),e.set(a,{featureId:t.id,experimentId:r,variations:o})}return this.mappedRules=e,e}get experimentMap(){var t;if(null===(t=this.mappedExperiments)||void 0===t?void 0:t.size)return this.mappedExperiments;const e=new Map;for(const t of this.featureFlags.values())for(const i of t.rules){const{experimentId:t,variationByExposition:a}=i,r=new Map;a.forEach(({variationKey:t,variationId:e})=>{"number"==typeof e&&r.set(t,e)}),e.set(t,{type:i.type,variations:r})}return this.mappedExperiments=e,e}get holdout(){return this.holdoutData}get meGroups(){return this.meGroupsData}get isConsentRequired(){return this.configuration.consentType===Gt.Required}get hasAnyTargetedDeliveryRule(){if(null!==this.isTargetedDeliveryRule)return this.isTargetedDeliveryRule;for(const t of this.featureFlags.values())if(t.environmentEnabled&&t.rules.some(t=>t.type===_t.TARGETED_DELIVERY))return!0;return!1}checkShouldUpdate(){const{configuration:t}=this.configurationData;if(this.updateType=t.realTimeUpdate?Ut.RealTime:Ut.Polling,!this.featureFlags.size)return!0;return this.lastUpdate.getTime()<Date.now()-this.updateInterval}readStorageData(){var t,e,i;Ot.debug("CALL: ClientConfiguration.readStorageData()");const a=this.storage.read();if(a.ok){let{data:r,lastUpdate:n,lastModified:o,requestTime:s}=a.data,u=!1;if(this.defaultDataFile)try{const a=JSON.parse(this.defaultDataFile);this.defaultDataFile=void 0,this.usedDefaultDataFile=!0;const n=null!==(e=null!==(t=r.dateModified)&&void 0!==t?t:s)&&void 0!==e?e:-1,o=null!==(i=a.dateModified)&&void 0!==i?i:0;(!s||o>n)&&(r=a,u=!0)}catch(t){Ot.error`Error parsing default data file: ${t}`}this.updateConfigurationData(r,u),this.lastUpdate=this.usedDefaultDataFile?new Date(0):new Date(Date.parse(n)),this.lastModified=o,this.requestTime=s}Ot.debug`RETURN: ClientConfiguration.readStorageData() -> (result: ${a.ok})`}updateClientConfiguration(t){return u(this,void 0,void 0,function*(){const e=Date.now();if(this.usedDefaultDataFile)return this.updateClientConfigurationInBackground(),s.Ok(!1);if(this.requestTime&&!t&&!this.externalPackageInfo.isServer){if(e-this.requestTime<=this.CACHE_REVALIDATE_PERIOD)return this.updateClientConfigurationInBackground(),s.Ok(!1);Ot.debug`Cached configuration data has expired. Fetching fresh data.`}const i=yield this.requester.getClientConfiguration(t,this.lastModified);return this.applyNewConfigurationDataFromResponse(i)})}updateClientConfigurationInBackground(){setTimeout(()=>u(this,void 0,void 0,function*(){const t=yield this.requester.getClientConfiguration(void 0,this.lastModified);yield this.applyNewConfigurationDataFromResponse(t)}),0)}applyNewConfigurationDataFromResponse(t){var e,i;return u(this,void 0,void 0,function*(){if(this.requestTime=Date.now(),!t.ok)return this.featureFlags.size?(Ot.error("Error occurred while updating configuration. Existing configuration will be used as a fallback."),s.Ok(!0)):t;if(void 0===t.data.configuration)return this.updateStorageData(),s.Ok(!1);const a=t.data.configuration;this.updateConfigurationData(a,!0),this.dataManager.clearTrees(),null===(e=this.mappedRules)||void 0===e||e.clear(),null===(i=this.experimentMap)||void 0===i||i.clear(),this.isTargetedDeliveryRule=null,t.data.lastModified&&(this.lastModified=t.data.lastModified);const r=this.updateStorageData();if(!r.ok)return r;const n=a.configuration.realTimeUpdate?Ut.RealTime:Ut.Polling,o=n!==this.updateType;return o&&(this.updateType=n,Ot.info`Configuration update type was toggled to ${Ut[n]}`,yield this.initialize()),s.Ok(o)})}updateConfigurationData(t,e=!0){const{configuration:i,featureFlags:a,customData:r,holdout:n,segments:o,dateModified:s}=t;let u=o?new Map(o.map(t=>[t.id.toString(),t])):null,d=null;if(e&&(null==r?void 0:r.length)){d=new Map;for(let t of r){if(void 0===t.id){d=null;break}d.set(t.id,t.index)}}const l=new Map;for(const t of a)l.set(t.featureKey,t),e&&(this.updateFeatureFlagSegments(t,u),this.updateFeatureFlagBucketingCustomDataId(t,d));this.featureFlagsData=l,(null==r?void 0:r.length)&&(this.dataManager.customDataIndexes=r),this.meGroupsData=this.makeMEGroups(a),this.holdoutData=null!=n?n:null,this.configurationData={configuration:i,customData:r,holdout:n,dateModified:s},this.urlProvider.dataApiDomain=t.configuration.dataApiDomain,this.updateConsentRequired(),this.segmentsData=u}updateFeatureFlagSegments(t,e){null!==e&&t.rules.forEach(t=>{var i;const a=t.segmentId;t.segment=null!=a&&null!==(i=e.get(a.toString()))&&void 0!==i?i:null})}updateFeatureFlagBucketingCustomDataId(t,e){const i=t.bucketingCustomDataId;null!=i&&e&&(t.bucketingCustomDataIndex=e.get(i))}makeMEGroups(t){const e=new Map;t.forEach(t=>{const i=t.mutuallyExclusiveGroup;if(i){let a=e.get(i);a?a.push(t):e.set(i,[t])}});const i=new Map;return e.forEach((t,e)=>{i.set(e,new Wt(t))}),i}updateStorageData(){this.lastUpdate=new Date;const t={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(t)}updateConsentRequired(){this.visitorCodeManager.consentRequired=this.isConsentRequired&&!this.hasAnyTargetedDeliveryRule}}function Jt(t){return Object.fromEntries(Object.entries(t).map(([t,e])=>[e,t]))}var Xt,Qt,Zt,te;!function(t){t.UniqueIdentifier="uniqueIdentifier",t.CustomData="customData",t.PageView="pageView",t.GeolocationData="geolocation",t.Browser="browser",t.Conversion="conversion",t.Cookie="cookie",t.Device="device",t.OperatingSystem="operatingSystem",t.UserAgent="userAgent",t.ApplicationVersion="applicationVersion",t.VisitsData="visitsData",t.KameleoonConversionScore="kameleoonConversionScore",t.Personalization="personalization",t.CBScores="cbScores",t.TargetedSegment="targetedSegment"}(Xt||(Xt={})),function(t){t.Phone="PHONE",t.Tablet="TABLET",t.Desktop="DESKTOP"}(Qt||(Qt={})),function(t){t.WindowsPhone="WINDOWS_PHONE",t.Windows="WINDOWS",t.Android="ANDROID",t.Linux="LINUX",t.Mac="MAC",t.IOS="IOS"}(Zt||(Zt={})),function(t){t.Chrome="CHROME",t.InternetExplorer="IE",t.Firefox="FIREFOX",t.Safari="SAFARI",t.Opera="OPERA",t.Other="OTHER"}(te||(te={}));const ee={[Zt.Windows]:0,[Zt.Mac]:1,[Zt.IOS]:2,[Zt.Linux]:3,[Zt.Android]:4,[Zt.WindowsPhone]:5},ie=Jt(ee),ae={[te.Chrome]:0,[te.InternetExplorer]:1,[te.Firefox]:2,[te.Safari]:3,[te.Opera]:4,[te.Other]:5},re=Jt(ae),ne="off",oe="warehouseAudiences";var se;!function(t){t.ANDROID="ANDROID",t.IOS="IOS",t.JAVA="JAVA",t.CSHARP="CSHARP",t.NODEJS="NODEJS",t.PHP="PHP",t.RUBY="RUBY",t.GO="GO",t.FLUTTER="FLUTTER",t.REACT="REACT",t.PYTHON="PYTHON",t.JAVASCRIPT="JAVASCRIPT",t.RUST="RUST"}(se||(se={}));const ue={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 de,le,ce,he,ge,fe,pe,ve,me,Ce,Ee,ye;!function(t){t.And="AND",t.Or="OR"}(de||(de={})),function(t){t.TRUE="TRUE",t.FALSE="FALSE",t.EXACT="EXACT",t.CONTAINS="CONTAINS",t.REGULAR_EXPRESSION="REGULAR_EXPRESSION",t.EQUAL="EQUAL",t.LOWER="LOWER",t.GREATER="GREATER",t.UNDEFINED="UNDEFINED",t.AMONG_VALUES="AMONG_VALUES",t.RANGE="RANGE"}(le||(le={})),function(t){t.NEW="NEW",t.RETURNING="RETURNING"}(ce||(ce={})),function(t){t.ANY="ANY",t.EXACT="EXACT"}(he||(he={})),function(t){t.ALL="ALL",t.TEST="TEST",t.PERSO="PERSO"}(ge||(ge={})),function(t){t.Experiment="EXPERIMENT",t.Personalization="PERSONALIZATION",t.Any="ANY"}(fe||(fe={})),function(t){t.EXACT="EXACT",t.CONTAINS="CONTAINS",t.REGULAR_EXPRESSION="REGULAR_EXPRESSION",t.GREATER="GREATER",t.EQUAL="EQUAL",t.LOWER="LOWER"}(pe||(pe={})),function(t){t.GREATER="GREATER",t.EQUAL="EQUAL",t.LOWER="LOWER"}(ve||(ve={})),function(t){t.EXACT="EXACT",t.CONTAINS="CONTAINS",t.REGULAR_EXPRESSION="REGULAR_EXPRESSION",t.OPTIONAL="OPTIONAL"}(me||(me={})),function(t){t.PAGE_URL="PAGE_URL",t.PAGE_TITLE="PAGE_TITLE",t.LANDING_PAGE="LANDING_PAGE",t.ORIGIN="ORIGIN",t.ORIGIN_TYPE="ORIGIN_TYPE",t.REFERRERS="REFERRERS",t.NEW_VISITORS="NEW_VISITORS",t.INTERESTS="INTERESTS",t.BROWSER_LANGUAGE="BROWSER_LANGUAGE",t.GEOLOCATION="GEOLOCATION",t.DEVICE_TYPE="DEVICE_TYPE",t.SCREEN_DIMENSION="SCREEN_DIMENSION",t.VISITOR_IP="VISITOR_IP",t.AD_BLOCKER="AD_BLOCKER",t.PREVIOUS_PAGE="PREVIOUS_PAGE",t.KEY_PAGES="KEY_PAGES",t.PAGE_VIEWS="PAGE_VIEWS",t.FIRST_VISIT="FIRST_VISIT",t.LAST_VISIT="LAST_VISIT",t.ACTIVE_SESSION="ACTIVE_SESSION",t.TIME_SINCE_PAGE_LOAD="TIME_SINCE_PAGE_LOAD",t.SAME_DAY_VISITS="SAME_DAY_VISITS",t.VISITS="VISITS",t.VISITS_BY_PAGE="VISITS_BY_PAGE",t.VISITOR_CODE="VISITOR_CODE",t.SDK_LANGUAGE="SDK_LANGUAGE",t.INTERNAL_SEARCH_KEYWORDS="INTERNAL_SEARCH_KEYWORDS",t.TABS_ON_SITE="TABS_ON_SITE",t.CONVERSION_PROBABILITY="CONVERSION_PROBABILITY",t.HEAT_SLICE="HEAT_SLICE",t.SKY_STATUS="SKY_STATUS",t.TEMPERATURE="TEMPERATURE",t.DAY_NIGHT="DAY_NIGHT",t.FORECAST_SKY_STATUS="FORECAST_SKY_STATUS",t.FORECAST_TEMPERATURE="FORECAST_TEMPERATURE",t.DAY_OF_WEEK="DAY_OF_WEEK",t.TIME_RANGE="TIME_RANGE",t.HOUR_MINUTE_RANGE="HOUR_MINUTE_RANGE",t.JS_CODE="JS_CODE",t.COOKIE="COOKIE",t.EVENT="EVENT",t.BROWSER="BROWSER",t.OPERATING_SYSTEM="OPERATING_SYSTEM",t.DOM_ELEMENT="DOM_ELEMENT",t.MOUSE_OUT="MOUSE_OUT",t.TARGET_EXPERIMENT="TARGET_EXPERIMENT",t.TARGET_FEATURE_FLAG="TARGET_FEATURE_FLAG",t.TARGET_PERSONALIZATION="TARGET_PERSONALIZATION",t.EXCLUSIVE_EXPERIMENT="EXCLUSIVE_EXPERIMENT",t.CONVERSIONS="CONVERSIONS",t.CUSTOM_DATUM="CUSTOM_DATUM",t.YSANCE_SEGMENT="YSANCE_SEGMENT",t.SEGMENT="SEGMENT",t.YSANCE_ATTRIBUT="YSANCE_ATTRIBUT",t.TEALIUM_BADGE="TEALIUM_BADGE",t.TEALIUM_AUDIENCE="TEALIUM_AUDIENCE",t.PRICE_OF_DISPLAYED_PAGE="PRICE_OF_DISPLAYED_PAGE",t.NUMBER_OF_VISITED_PAGES="NUMBER_OF_VISITED_PAGES",t.VISITED_PAGES="VISITED_PAGES",t.CUSTOM="CUSTOM",t.EXPLICIT_TRIGGER="EXPLICIT_TRIGGER",t.APPLICATION_VERSION="APPLICATION_VERSION"}(Ce||(Ce={})),function(t){t.Minute="MINUTE",t.Hour="HOUR",t.Day="DAY",t.Week="WEEK",t.Month="MONTH"}(Ee||(Ee={})),function(t){t.Ascending="asc",t.Descending="desc"}(ye||(ye={}));const Ie="localhost",De=/^(\.?(([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 Te{static validateVersion(t){const e=t.split(".").map(t=>parseInt(t,10));for(;e.length<3;)e.push(0);return e.some(t=>isNaN(t))?s.Err(new c(o.SemanticVersionParse,t)):s.Ok(e.slice(0,3))}static validateDomain(t){return t?(t=Te.checkAndTrimProtocol(t.toLowerCase()),De.test(t)||t===Ie||Ot.error`The top-level domain ${t} 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(t)):s.Err()}static validateNetworkDomain(t){return t?(t=(t=Te.checkAndTrimProtocol(t.toLowerCase())).replace(/^\.+|\.+$/g,""),De.test(t)||t===Ie?s.Ok(t):(Ot.error`The network domain ${t} is invalid.`,s.Err())):s.Err()}static checkAndTrimProtocol(t){const e=["http://","https://"];for(const i of e)if(t.startsWith(i)){t=t.substring(i.length),Ot.warning`The domain contains ${i}. Domain after protocol trimming: ${t}`;break}return t}}class ke{static getNonce(t){let e="";for(let i=0;i<16;i++){const i=t.getRandomNumber(),a=Math.floor(16*i);e+="0123456789ABCDEF".charAt(a)}return e}static checkTargeting({segment:t,visitorCode:e,targetingData:i,experimentId:a,variationConfiguration:r,clientConfiguration:n,packageInfo:u,dataManager:d}){if(Ot.debug`CALL: checkTargeting(segment, visitorCode: ${e}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager)`,!t||!t.conditionsData.firstLevel.length){const t=s.Ok(!0);return Ot.debug`RETURN checkTargeting(segment, visitorCode: ${e}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${t})`,t}if(!r){const t=s.Err(new c(o.Initialization));return Ot.debug`RETURN checkTargeting(segment, visitorCode: ${e}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${t})`,t}let l={};const h=r.getStoredVariations(e);h.ok&&(l=h.data);const g=d.getTree(t);let f,p,v;g.hasTargetingType(Ce.SEGMENT)&&(f=d.trees,v=n.segments),g.hasTargetingType(Ce.TARGET_FEATURE_FLAG)&&(p=n.ruleMap);const m=g.evaluate({variationData:l,sdkInfo:u,segments:v,ruleMap:p,trees:f,targetingData:i,experimentId:a,visitorCode:e});return Ot.debug`RETURN checkTargeting(segment, visitorCode: ${e}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${m})`,m}static convertTimeUnit(t,e){return t/{[Ee.Minute]:Mt.Minute,[Ee.Hour]:Mt.Hour,[Ee.Day]:Mt.Day,[Ee.Week]:Mt.Week,[Ee.Month]:Mt.Month}[e]}static isCustomData(t){return t.data.type===Xt.CustomData}static updateCache({hasJsCssVariables:t,cacheManager:e,visitorCode:i,experimentId:a,variationId:r}){const n=e.getAliveItem(i),o=n?Object.assign({},n):{};o[a]={variationId:r,hasJsCssVariables:t,expirationTime:Date.now()+5*Mt.Second},e.add({key:i,data:o,lifetime:5})}static getTrackingCode(t,e){let i="window.kameleoonQueue=window.kameleoonQueue||[];";const a=t.getAliveItem(e);if(!a)return i;const r={};return Object.entries(a).forEach(([t,{variationId:e,expirationTime:a,hasJsCssVariables:n}])=>{const o=!n;a>Date.now()&&(i+=`window.kameleoonQueue.push(['Experiments.assignVariation',${t},${e},true]);`,i+=`window.kameleoonQueue.push(['Experiments.trigger',${t},${o}]);`,r[Number(t)]={variationId:e,expirationTime:a,hasJsCssVariables:n})}),t.add({key:e,data:r,lifetime:5}),i}static compareSemVer({version:t,compareVersion:e,operator:i}){const a=Te.validateVersion(t),r=Te.validateVersion(e);if(!a.ok)return s.Err(a.error);if(!r.ok)return s.Err(r.error);const[n,o,u]=a.data,[d,c,h]=r.data,[g,f,p]=[n===d,o===c,u===h];switch(i){case ve.EQUAL:return s.Ok(g&&f&&p);case ve.GREATER:return s.Ok(n>d||g&&o>c||g&&f&&u>h);case ve.LOWER:return s.Ok(n<d||g&&o<c||g&&f&&u<h);default:Ot.error`Unknown version match type: ${i}`,l(i)}}static getVariationByHash(t,e){let i=0;for(const a of t)if(i+=a.exposition,i>=e)return a;return null}}class Re{static insertInOrderedListMutably({list:t,element:e,order:i}){if(t.includes(e))return;const a=t.findIndex(t=>i===ye.Ascending?t>=e:t<=e);-1===a?t.push(e):t.splice(a,0,e)}static insertVisitInOrderedListMutably({list:t,visit:e}){if(t.find(t=>"number"==typeof t?t===e.timeStarted:t.timeStarted===e.timeStarted))return;const i=t.findIndex(t=>"number"==typeof t?t>=e.timeStarted:t.timeStarted>=e.timeStarted);-1===i?t.push(e):t.splice(i,0,e),t.length>26&&t.splice(0,t.length-26)}}class Ve{constructor({urlAddress:t,title:e,referrers:i}){this.urlAddress=t,this.title=e,this.referrers=i,this.timestamps=[{time:Date.now(),status:xt.Unsent}]}get url(){var t;if(!this.urlAddress)return"";const e=this.title?V+encodeURIComponent(this.title):"",i=(null===(t=this.referrers)||void 0===t?void 0:t.length)?S+JSON.stringify(this.referrers):"";return y+N+encodeURIComponent(this.urlAddress)+e+i}get status(){const{[xt.Sent]:t,[xt.Unsent]:e,[xt.Pending]:i}=this.timestamps.reduce((t,{status:e})=>(t[e]=!0,t),{[xt.Sent]:!1,[xt.Unsent]:!1,[xt.Pending]:!1});return!t||e||i?i&&!e?xt.Pending:xt.Unsent:xt.Sent}set status(t){this.timestamps=this.timestamps.map(e=>Object.assign(Object.assign({},e),{status:t}))}set _nonce(t){this.nonce=t}get data(){return{urlAddress:this.urlAddress,title:this.title,referrers:this.referrers,type:Xt.PageView,timestamps:this.timestamps,status:this.status,nonce:this.nonce}}static _fromRaw(t){const{urlAddress:e,title:i,referrers:a,timestamps:r,nonce:n}=t,o=new Ve({urlAddress:e,title:i,referrers:a});return o.timestamps=r,n&&(o._nonce=n),o}static _updateFromVisit(t,e){const i=t.pageEvents;if(i)for(const t of i){let i=[];const{time:a}=t,{href:r,title:n,referrersIndices:o}=t.data;let s;if("number"==typeof o[0]&&(i=o),e.has(r)){const t=e.get(r).timestamps;s=new Ve({urlAddress:r,title:n,referrers:i}),s.timestamps=[...t,{time:a,status:xt.Sent}]}else s=new Ve({urlAddress:r,title:n,referrers:i}),s.timestamps=[{time:a,status:xt.Sent}];e.set(r,s)}}}let Se=class t{constructor(t,...e){this.index=t,this.value=e,this._status=xt.Unsent,this.isIdentifier=!1}get url(){if("number"!=typeof this.index)return"";const t=[...new Set(this.value)];let e={};t.forEach(t=>{e[t]=1});let i="";return this.isIdentifier&&(i=dt+String(!0)),C+O+this.index+B+encodeURIComponent(JSON.stringify(e))+A+String(!0)+i}get data(){return{index:this.index,value:this.value,type:Xt.CustomData,isIdentifier:this.isIdentifier,status:this.status}}get status(){return this._isMappingIdentifier?xt.Unsent:this._status}static _fromRaw(e){const{index:i,value:a,status:r,isIdentifier:n}=e,o=new t(i,...a);return o.status=r,o._isMappingIdentifier=n,o}set _isMappingIdentifier(t){this.isIdentifier=t}set status(t){this._status=t}static _updateFromVisit(e,i){var a;if(null===(a=e.customDataEvents)||void 0===a?void 0:a.length)for(let a=e.customDataEvents.length-1;a>=0;a--){const{index:r,valuesCountMap:n}=e.customDataEvents[a].data;i.has(r)||i.set(r,new t(r,...Object.keys(n)))}}},we=class t{constructor({goalId:t,revenue:e=0,negative:i=!1,metadata:a}){this.goalId=t,this.revenue=e,this.negative=i,this.status=xt.Unsent,this.id=Math.floor(1e6*Math.random()),this.metadata=a}set _id(t){this.id=t}set _nonce(t){this.nonce=t}get url(){var t;return I+M+String(this.goalId)+b+String(this.revenue)+w+String(this.negative)+((null===(t=this.metadata)||void 0===t?void 0:t.length)?vt+this._encodeMetadata():"")}get data(){var t;return{goalId:this.goalId,nonce:this.nonce,revenue:this.revenue,negative:this.negative,type:Xt.Conversion,status:this.status,id:this.id,metadata:(null===(t=this.metadata)||void 0===t?void 0:t.map(t=>t.data))||void 0}}_encodeMetadata(){var t;if(!(null===(t=this.metadata)||void 0===t?void 0:t.length))return"";const e=new Set;return encodeURIComponent(JSON.stringify(this.metadata.reduce((t,i)=>(e.has(i.data.index)||(e.add(i.data.index),t[i.data.index]=i.data.value),t),{})))}static _fromRaw(e){const{goalId:i,revenue:a,negative:r,status:n,id:o,nonce:s,metadata:u}=e,d=new t({goalId:i,revenue:a,negative:r,metadata:t.parseMetadata(u)});return d._id=o,d.status=n,s&&(d._nonce=s),d}static parseMetadata(t){return(null==t?void 0:t.map(t=>Se._fromRaw(t)))||void 0}static _listFromVisit(e){var i,a;const r=[];if(!(null===(i=e.conversionEvents)||void 0===i?void 0:i.length))return[];if(null===(a=e.conversionEvents)||void 0===a?void 0:a.length)for(const i of e.conversionEvents){const{goalId:e,revenue:a,negative:n}=i.data,o=new t({goalId:e,revenue:a,negative:n});o.status=xt.Sent,r.push(o)}return r}static _updateFromVisit(e,i){var a;if(null===(a=e.conversionEvents)||void 0===a?void 0:a.length)for(const a of e.conversionEvents){const{goalId:e}=a.data;if(!i.has(e)){const a=new t({goalId:e});a.status=xt.Sent,i.set(e,a)}}}},be=class t{constructor(t,e){this.browser=t,this.version=e,this.status=xt.Unsent}get url(){if(!this.browser)return"";const t=this.version?F+this.version:"";return E+ut+this.browser+$+ae[this.browser]+t}get data(){return{browser:this.browser,type:Xt.Browser,version:this.version,status:this.status}}static _fromRaw(e){const{browser:i,version:a,status:r}=e,n=new t(i,a);return n.status=r,n}static _fromVisit(e){if(!e.staticDataEvent)return;const{browser:i,browserIndex:a,browserVersion:r}=e.staticDataEvent.data;if(i||"number"==typeof a){const e=null!=i?i:re[a];return r?new t(e,r):new t(e)}}},Ae=class t{constructor(t){this.device=t,this.status=xt.Unsent}get url(){return this.device?E+x+this.device:""}get data(){return{device:this.device,type:Xt.Device,status:this.status}}static _fromRaw(e){const{device:i,status:a}=e,r=new t(i);return r.status=a,r}static _fromVisit(e){var i;if(null===(i=e.staticDataEvent)||void 0===i?void 0:i.data.deviceType)return new t(e.staticDataEvent.data.deviceType)}},Oe=class t{constructor(t){this.operatingSystem=t,this.status=xt.Unsent}get url(){return this.operatingSystem?E+Y+this.operatingSystem+J+ee[this.operatingSystem]:""}get data(){return{operatingSystem:this.operatingSystem,type:Xt.OperatingSystem,status:this.status}}static _fromRaw(e){const{operatingSystem:i,status:a}=e,r=new t(i);return r.status=a,r}static _fromVisit(e){if(!e.staticDataEvent)return;const{os:i,osIndex:a}=e.staticDataEvent.data;if(i||"number"==typeof a){const e=null!=i?i:ie[a];return new t(e)}}};class $e{constructor({country:t,region:e,city:i,postalCode:a,coordinates:r}){this.country=t,this.region=e,this.city=i,this.postalCode=a,this.coordinates=r,this.status=xt.Unsent}get url(){const t=this.region?Z+encodeURIComponent(this.region):"",e=this.city?Q+encodeURIComponent(this.city):"",i=this.postalCode?it+encodeURIComponent(this.postalCode):"",a=this.coordinates?tt+this.coordinates[0]+et+this.coordinates[1]:"";return k+X+encodeURIComponent(this.country)+t+e+i+a}get data(){return{type:Xt.GeolocationData,country:this.country,region:this.region,city:this.city,postalCode:this.postalCode,coordinates:this.coordinates,status:this.status}}static _fromRaw(t){const{country:e,region:i,city:a,postalCode:r,coordinates:n,status:o}=t,s=new $e({country:e,region:i,city:a,postalCode:r,coordinates:n});return s.status=o,s}static _fromVisit(t){var e;if(!(null===(e=t.geolocationEvents)||void 0===e?void 0:e.length))return;let i;for(const e of t.geolocationEvents){const{data:t}=e;t.country&&(i=t)}const{country:a,region:r,city:n}=i||{};return a?new $e(r&&n?{country:a,region:r,city:n}:r?{country:a,region:r}:{country:a}):void 0}}class Fe{constructor(t){this.status=xt.Sent,this.visits=t,this.visitNumber=t.length?t.length-1:0}get url(){return""}get data(){return{visits:this.visits,visitNumber:this.visitNumber,type:Xt.VisitsData,status:this.status}}get isSent(){return!0}set timestamp(t){Re.insertVisitInOrderedListMutably({list:this.visits,visit:t}),this.visitNumber=this.visits.length?this.visits.length-1:0}updateVisitNumber(t){t>this.visitNumber&&(this.visitNumber=t)}}class Ne{constructor(t){this.kcs=t,this.status=xt.Sent}get url(){return""}get data(){return{kcs:this.kcs,type:Xt.KameleoonConversionScore,status:this.status}}}class xe{constructor(t,e){this.id=t,this.variationId=e,this.status=xt.Sent}get url(){return""}get data(){return{id:this.id,variationId:this.variationId,type:Xt.Personalization,status:xt.Sent}}static _fromRaw(t){return new xe(t.id,t.variationId)}static _updateFromVisit(t,e){var i;if(null===(i=t.personalizationEvents)||void 0===i?void 0:i.length)for(const i of t.personalizationEvents){const{id:t,variationId:a}=i.data;if(!e.has(t)){const i=new xe(t,a);e.set(t,i)}}}}class Me{constructor(t){this.values=new Map(Object.entries(t).map(([t,e])=>[Number(t),this.extractVarIds(e)])),this.cbs=t,this.status=xt.Sent}extractVarIds(t){const e=new Map;return Object.entries(t).forEach(([t,i])=>{e.has(i)||e.set(i,[]),e.get(i).push(Number(t))}),Array.from(e.entries()).sort(([t],[e])=>e-t).map(([,t])=>({ids:t.sort((t,e)=>t-e)}))}getValues(){return this.values}get url(){return""}get data(){return{cbs:this.cbs,type:Xt.CBScores,status:this.status}}static _fromRaw(t){const e=new Me(t.cbs);return e.status=t.status,e}}class Ue{constructor({filters:t,dataManager:e,visitorCode:i}){this.visitsData=new Fe([]),this.visitorData=[],this.storageVisitorData=[],this.experimentData={},this.singleDataTypes={[Xt.Device]:null,[Xt.Browser]:null,[Xt.GeolocationData]:null,[Xt.OperatingSystem]:null,[Xt.KameleoonConversionScore]:null,[Xt.CBScores]:null},this.multipleDataTypes={[Xt.CustomData]:new Map,[Xt.PageView]:new Map,[Xt.Conversion]:new Map,[Xt.Personalization]:new Map},this.filters=t,this.dataManager=e,this.visitorDataTypes=e.getVisitorStoredDataTypes(i)}get data(){return{visitorData:this.visitorData,storageVisitorData:this.storageVisitorData,visitsData:this.visitsData,experimentData:this.experimentData}}processVisit(t){this.processBrowser(t),this.processDevice(t),this.processOperatingSystem(t),this.processGeolocationData(t),this.processCustomData(t),this.processConversion(t),this.processPageView(t),this.processExperiments(t),this.processPersonalization(t)}processMultipleDataTypes(){for(const[t,e]of Object.entries(this.multipleDataTypes))if(e.size)switch(t){case Xt.PageView:this.visitorData.push(...e.values()),this.storageVisitorData.push(...e.values());break;case Xt.Personalization:case Xt.Conversion:this.storageVisitorData.push(...e.values());break;case Xt.CustomData:e.forEach(t=>{this.visitorData.push(t),this.dataManager.storedCustomDataIndexes.has(t.data.index)||this.storageVisitorData.push(t)});break}}processKcs(t){if(this.filters.kcs&&t){const e=new Ne(t);this.storageVisitorData.push(e)}}processVisitsData(t){var e;this.visitsData.timestamp={timeStarted:t.timeStarted,timeLastActivity:null!==(e=t.timeLastEvent)&&void 0!==e?e:t.timeStarted}}processVisitNumber(t,e){if(t.staticDataEvent){const i=t.staticDataEvent.data.visitNumber+(e?0:1);this.visitsData.updateVisitNumber(i)}}processCbs(t){if(this.filters.cbs&&t){const e=new Me(t);this.storageVisitorData.push(e)}}processBrowser(t){if(this.filters.browser&&!this.singleDataTypes[Xt.Browser]){const e=be._fromVisit(t);e&&(this.visitorDataTypes.has(Xt.Browser)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[Xt.Browser]=e)}}processDevice(t){if(this.filters.device&&!this.singleDataTypes[Xt.Device]){const e=Ae._fromVisit(t);e&&(this.visitorDataTypes.has(Xt.Device)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[Xt.Device]=e)}}processOperatingSystem(t){if(this.filters.operatingSystem&&!this.singleDataTypes[Xt.OperatingSystem]){const e=Oe._fromVisit(t);e&&(this.visitorDataTypes.has(Xt.OperatingSystem)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[Xt.OperatingSystem]=e)}}processGeolocationData(t){if(this.filters.geolocation&&!this.singleDataTypes[Xt.GeolocationData]){const e=$e._fromVisit(t);e&&(this.visitorDataTypes.has(Xt.GeolocationData)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[Xt.GeolocationData]=e)}}processCustomData(t){this.filters.customData&&Se._updateFromVisit(t,this.multipleDataTypes[Xt.CustomData])}processConversion(t){if(this.filters.conversions){we._updateFromVisit(t,this.multipleDataTypes[Xt.Conversion]);const e=we._listFromVisit(t);e.length&&this.visitorData.push(...e)}}processPageView(t){this.filters.pageViews&&Ve._updateFromVisit(t,this.multipleDataTypes[Xt.PageView])}processExperiments(t){if(this.filters.experiments&&t.experimentEvents)for(const e of t.experimentEvents){const{id:t,variationId:i}=e.data;this.experimentData[t]={variationId:i,isTargetedRule:!1,status:xt.Unsent}}}processPersonalization(t){this.filters.personalization&&xe._updateFromVisit(t,this.multipleDataTypes[Xt.Personalization])}processMappingIdentifier(t){var e,i;if(!t)return;const a=null===(i=null===(e=t.customDataEvents)||void 0===e?void 0:e.find(t=>t.data.mappingIdentifier))||void 0===i?void 0:i.time;return a&&t.visitorCode?{mappingIdentifier:t.visitorCode,timestamp:a}:void 0}}class _e{static parseFeatureVariable(t){const{key:e,type:i,value:a}=t;switch(i){case Nt.BOOLEAN:return s.Ok({key:e,type:i,value:Boolean(a)});case Nt.JS:case Nt.CSS:case Nt.STRING:return s.Ok({key:e,type:i,value:String(a)});case Nt.NUMBER:const r=Number(a);return Number.isNaN(r)?s.Err(new c(o.NumberParse,String(a))):s.Ok({key:e,type:i,value:r});case Nt.JSON:try{const a=JSON.parse(String(t.value));return s.Ok({key:e,type:i,value:a})}catch(t){return s.Err(new c(o.JSONParse,t))}default:l(i)}}static parseVisitorData({data:t,filters:e,visitorCode:i,dataManager:a,variationConfiguration:r}){const n=new Ue({filters:e,dataManager:a,visitorCode:i}),{currentVisit:o,previousVisits:s,kcs:u,cbs:d}=t;if(!(null==s?void 0:s.length)&&!o)return{visitorData:[],storageVisitorData:[],visitsData:new Fe([])};o&&(n.processVisit(o),n.processVisitNumber(o,!0)),null==s||s.forEach(t=>{n.processVisit(t),n.processVisitsData(t),n.processVisitNumber(t,!1)}),n.processKcs(u),n.processCbs(d),n.processMultipleDataTypes();const l=n.processMappingIdentifier(null!=o?o:null==s?void 0:s[0]),{visitorData:c,storageVisitorData:h,visitsData:g,experimentData:f}=n.data;return r.updateStoredVariations(i,f),{visitorData:c,storageVisitorData:h,visitsData:g,mappingIdentifier:l}}static parseRegExp(t){if("/"===t[0]){const[e,i,a]=t.split("/");return new RegExp(i,a)}return new RegExp(t)}static parseSecret(t){if(null===t)return"null";const e=t.length;if(e<=4)return"*".repeat(e);const i=Math.max(e-4,4);return t.substring(0,e-i)+"*".repeat(i)}}class Le{constructor(t,e){Ot.debug`CALL: new ClientSettings(siteCode: ${t}, configuration: ${e})`,this.siteCode=t,this.environment=this.getEnvironment(e),this.networkDomain=this.getNetworkDomain(e),this.updateInterval=this.getUpdateInterval(e),this.cleanupInterval=this.getCleanupInterval(e),this.requestTimeout=this.getRequestTimeout(e),this.trackingInterval=this.getTrackingInterval(e),this.trackRetryDelay=5*Mt.Second,Ot.debug`RETURN: new ClientSettings(siteCode: ${t}, configuration: ${e})`}getTrackingInterval(t){return"number"==typeof(null==t?void 0:t.trackingInterval)?t.trackingInterval<100?(Ot.warning("Tracking interval must not be shorter than 100 ms. Minimum possible interval was applied."),100):t.trackingInterval>1e3?(Ot.warning("Tracking interval must not be longer than 1000 ms. Maximum possible interval was applied."),1e3):t.trackingInterval:1e3}getEnvironment(t){return(null==t?void 0:t.environment)?t.environment:Ft.Production}getCleanupInterval(t){return"number"==typeof(null==t?void 0:t.targetingDataCleanupInterval)?t.targetingDataCleanupInterval<1?(Ot.warning("Targeting data cleanup interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*Mt.Minute):t.targetingDataCleanupInterval*Mt.Minute:null}getUpdateInterval(t){return"number"==typeof(null==t?void 0:t.updateInterval)?t.updateInterval<1?(Ot.warning("Update interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*Mt.Minute):t.updateInterval*Mt.Minute:60*Mt.Minute}getNetworkDomain(t){const e=Te.validateNetworkDomain(null==t?void 0:t.networkDomain);return e.ok?e.data:null}getRequestTimeout(t){return"number"==typeof(null==t?void 0:t.requestTimeout)?t.requestTimeout:10*Mt.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 Pe=class t{constructor(t){this.cookie=t,this.status=xt.Sent}static fromString(e){if(!e)throw new c(o.CookieParse,"Cookie string can't be empty");const i=e.split(";").map(t=>{const[e,i]=t.trim().split("=");if(!e||!i)throw new c(o.CookieParse,"Cookie string is not valid");return{key:e,value:i}});return new t(i)}get url(){return""}get data(){return{cookie:this.cookie,type:Xt.Cookie,status:this.status}}};class Ke{constructor(t){this.value=t,this.status=xt.Sent}get url(){return""}get data(){return{value:this.value,type:Xt.UserAgent,status:this.status}}}class Ge{constructor(t){this._value=t,this.status=xt.Sent}get url(){return""}get data(){return{value:this._value,type:Xt.UniqueIdentifier,status:xt.Sent}}static _fromRaw(t){return new Ge(t.value)}}let Be=class{constructor(t){this.version=t,this.status=xt.Sent}get url(){return""}get data(){return{version:this.version,type:Xt.ApplicationVersion,status:this.status}}};class ze{constructor(t=null,e){this.cleanupInterval=t,this.packageInfo=e}mutUpdateData({infoData:t,visitorCode:e,mutData:i,dataItem:a}){let{visitorReference:r,data:n,isReference:o}=this.dereferenceData(i,e);this.packageInfo.isServer&&o&&!i[r]&&(t.mappingIdentifiers&&delete t.mappingIdentifiers[e],delete i[e],r=e);const s=this.cleanupInterval?Date.now()+this.cleanupInterval:0;switch(a.data.type){case Xt.CustomData:this.updateCustomData({expirationTime:s,customData:a,visitorCode:r,mutData:n});break;case Xt.PageView:this.updatePageView({expirationTime:s,pageView:a,visitorCode:r,mutData:n});break;case Xt.Conversion:this.updateConversion({expirationTime:s,conversion:a,visitorCode:r,mutData:n});break;case Xt.VisitsData:this.updateVisitsData({expirationTime:s,visitsData:a,visitorCode:r,mutData:n});break;case Xt.Personalization:this.updatePersonalization({expirationTime:s,personalization:a,visitorCode:r,mutData:n});break;case Xt.TargetedSegment:this.updateTargetedSegment({expirationTime:s,targetedSegment:a,visitorCode:r,mutData:n});break;default:this.updateCommonData({expirationTime:s,commonData:a,visitorCode:r,mutData:n})}return s}mutCleanupData(t,e){var i;if(!this.cleanupInterval)return null;let a=0;for(const[r,n]of Object.entries(t)){if("string"==typeof n){this.removeReference({mutData:t,visitorCode:r,linkedVisitor:n,infoData:e});continue}let o=0;for(const t of Object.keys(n)){const e=t;let i;switch(e){case Xt.CustomData:case Xt.PageView:case Xt.Conversion:case Xt.Personalization:i=this.deleteNestedExpiredField(n,e);break;default:i=this.deleteExpiredField(n,e)}(!o||i&&i<o)&&(o=i)}Object.keys(t[r]).length?(!a||o&&o<a)&&(a=o):(delete t[r],this.packageInfo.isServer&&(null!==(i=e.mappingIdentifiers)&&void 0!==i||(e.mappingIdentifiers={}),delete e.mappingIdentifiers[r]))}return a}mutAddUnsentData({mutData:t,visitorCode:e,dataType:i}){const a=t.unsentData[e];if(a&&a.length){const r=new Set([...a]);r.add(i),t.unsentData[e]=Array.from(r)}else t.unsentData[e]=[i]}createReference({mutData:t,visitorCode:e,linkedVisitor:i}){t[i]=e}removeReference({mutData:t,visitorCode:e,linkedVisitor:i,infoData:a}){this.packageInfo.isServer&&(t[i]||(delete t[e],a.mappingIdentifiers&&delete a.mappingIdentifiers[e]))}updatePageView({visitorCode:t,mutData:e,pageView:i,expirationTime:a}){const{data:r}=i,n=e[t]&&Xt.PageView in e[t]&&r.urlAddress in e[t][Xt.PageView],o={expirationTime:a,visitorCode:t,data:e,key:Xt.PageView,nestedKey:r.urlAddress,value:r};if(n){const i=e[t][Xt.PageView][r.urlAddress].timestamps;for(const t of i){const{time:e}=t;if(r.timestamps.some(({time:t})=>t===e))continue;const i=r.timestamps.findIndex(({time:t})=>t>=e);-1===i?r.timestamps.push(t):r.timestamps.splice(i,0,t)}this.updateNestedField(o)}else this.createNestedField(o)}updateCustomData({visitorCode:t,customData:e,mutData:i,expirationTime:a}){const{data:r}=e,n=i[t]&&Xt.CustomData in i[t],o={expirationTime:a,visitorCode:t,data:i,key:Xt.CustomData,nestedKey:r.index.toString(),value:r};n?this.updateNestedField(o):this.createNestedField(o)}updateConversion({conversion:t,mutData:e,visitorCode:i,expirationTime:a}){const{data:r}=t,n=e[i]&&Xt.Conversion in e[i],o={expirationTime:a,visitorCode:i,data:e,key:Xt.Conversion,nestedKey:r.id.toString(),value:r};n?this.updateNestedField(o):this.createNestedField(o)}updateVisitsData({visitorCode:t,mutData:e,visitsData:i,expirationTime:a}){var r,n;const{data:o}=i,s=e[t]&&Xt.VisitsData in e[t],u={expirationTime:a,data:e,key:Xt.VisitsData,value:o,visitorCode:t};if(s){const i=e[t][Xt.VisitsData];i.visits.forEach(t=>{Re.insertVisitInOrderedListMutably({list:o.visits,visit:t})});const a=Math.max(null!==(r=o.visitNumber)&&void 0!==r?r:o.visits.length-1,o.visits.length-1,null!==(n=i.visitNumber)&&void 0!==n?n:0);this.updateField(Object.assign(Object.assign({},u),{value:Object.assign(Object.assign({},o),{visits:o.visits,visitNumber:a})}))}else this.createField(u)}updatePersonalization({visitorCode:t,mutData:e,personalization:i,expirationTime:a}){const{data:r}=i,n=e[t]&&Xt.Personalization in e[t],o={expirationTime:a,visitorCode:t,data:e,key:Xt.Personalization,nestedKey:r.id.toString(),value:r};n?this.updateNestedField(o):this.createNestedField(o)}updateTargetedSegment({visitorCode:t,mutData:e,targetedSegment:i,expirationTime:a}){const{data:r}=i,n=e[t]&&Xt.TargetedSegment in e[t],o={expirationTime:a,visitorCode:t,data:e,key:Xt.TargetedSegment,nestedKey:r.id.toString(),value:r};n?this.updateNestedField(o):this.createNestedField(o)}updateCommonData({visitorCode:t,mutData:e,commonData:i,expirationTime:a}){const{data:r}=i,n=e[t]&&r.type in e[t],o={expirationTime:a,data:e,key:r.type,visitorCode:t,value:r};n?this.updateField(o):this.createField(o)}dereferenceData(t,e){return"string"==typeof t[e]?{visitorReference:t[e],data:t,isReference:!0}:{visitorReference:e,data:t,isReference:!1}}deleteExpiredField(t,e){if(!t)return 0;const i=e;return t[i].expirationTime<Date.now()?(delete t[i],0):t[i].expirationTime}deleteNestedExpiredField(t,e){if(!t[e])return 0;const i=t[e];let a;for(const[t,e]of Object.entries(i)){if(!e)continue;e.expirationTime<Date.now()?delete i[t]:(!a||e.expirationTime<a)&&(a=e.expirationTime)}return Object.keys(i).length||delete t[e],a}updateField({key:t,value:e,data:i,visitorCode:a,expirationTime:r}){i[a][t]=Object.assign(Object.assign({},e),{expirationTime:r})}createField({key:t,value:e,data:i,visitorCode:a,expirationTime:r}){i[a]=Object.assign(Object.assign({},i[a]),{[t]:Object.assign(Object.assign({},e),{expirationTime:r})})}updateNestedField({key:t,nestedKey:e,value:i,data:a,visitorCode:r,expirationTime:n}){a[r][t][e]=Object.assign(Object.assign({},i),{expirationTime:n})}createNestedField({key:t,nestedKey:e,value:i,data:a,visitorCode:r,expirationTime:n}){var o;(null===(o=a[r])||void 0===o?void 0:o[t])?a[r]=Object.assign(Object.assign({},a[r]),{[t]:Object.assign(Object.assign({},a[r][t]),{[e]:Object.assign(Object.assign({},i),{expirationTime:n})})}):a[r]=Object.assign(Object.assign({},a[r]),{[t]:{[e]:Object.assign(Object.assign({},i),{expirationTime:n})}})}}class qe{constructor({browserType:t,visitNumber:e,timeSincePreviousVisit:i,os:a,deviceType:r,browserVersion:n}){this.browserType=t,this.visitNumber=e,this.timeSincePreviousVisit=i,this.os=a,this.deviceType=r,this.browserVersion=n}get url(){const t=this.browserVersion?F+this.browserVersion:"",e=this.browserType?ut+this.browserType:"",i=this.browserType?$+ae[this.browserType]:"",a=this.os?Y+this.os:"",r=this.os?J+ee[this.os]:"",n=this.deviceType?x+this.deviceType:"",o=void 0!==this.visitNumber?mt+this.visitNumber:"",s=void 0!==this.timeSincePreviousVisit?Ct+this.timeSincePreviousVisit:"";return E+e+i+t+o+s+a+r+n}}class je{static setConditionFactoryInstance(t){this.conditionFactoryInstance=t}static createCondition(t){return this.conditionFactoryInstance.createCondition(t)}}class He{constructor(t,e,i){var a;if(this.inverseResult=!1,this.isOperator(t))this.nodeValue=t;else{const e=je.createCondition(t);this.inverseResult=!(null===(a=t.isInclude)||void 0===a||a),e.ok?this.nodeValue=e.data:this.nodeError=e.error}this.leftChild=e,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(t){return t===de.And||t===de.Or}}class We{constructor(t){this.error=null,this.targetingTypes=new Set,Ot.debug`CALL: new Tree(segment: ${t})`;const{nestedConditions:e,topLevelOperators:i}=this.flattenSegment(t),a=e.map(({conditions:t,operators:e})=>{const i=t.map(t=>(this.targetingTypes.add(t.targetingType),new He(t)));return this.buildTree(i,e)});this.tree=this.buildTree(a,i),Ot.debug`RETURN: new Tree(segment: ${t})`}evaluate(t){const e=this.evaluateNode(this.tree,t);return this.error?s.Err(this.error):s.Ok(e)}hasTargetingType(t){return this.targetingTypes.has(t)}evaluateNode(t,e){if(this.isLeafNode(t)){if(t.error)return t.error.type===o.TargetingCondition;const i=t.value.evaluate(e);return i.ok?t.inverse?!i.data:i.data:(this.error=i.error,!1)}if(this.isNonLeafNode(t))switch(t.value){case de.And:return this.evaluateNode(t.left,e)&&this.evaluateNode(t.right,e);case de.Or:return this.evaluateNode(t.left,e)||this.evaluateNode(t.right,e)}return!1}isLeafNode(t){return!Boolean(t.left&&t.right)}isNonLeafNode(t){return Boolean(t.left&&t.right&&(t.value===de.Or||t.value===de.And))}buildTree(t,e){if(1===t.length)return t[0];for(const i of e){const e=t.shift(),a=t.shift(),r=new He(i,e,a);t.unshift(r)}return t[0]}flattenSegment(t){const{firstLevel:e,firstLevelOrOperators:i}=t.conditionsData,a=[];return e.forEach(t=>{const{conditions:e,orOperators:i}=t,r={operators:this.convertOperators(i),conditions:e};a.push(r)}),{topLevelOperators:this.convertOperators(i),nestedConditions:a}}convertOperators(t){return t.map(t=>t?de.Or:de.And)}}class Ye{constructor({device:t}){this.device=t}evaluate({targetingData:t}){const e=null==t?void 0:t[Xt.Device];if(e){const{device:t}=e;return s.Ok(t===this.device)}return s.Ok(!1)}}class Je{constructor({browser:t,version:e,versionMatchType:i}){this.browser=t,this.version=e,this.versionMatchType=i}evaluate({targetingData:t}){const e=null==t?void 0:t[Xt.Browser];if(e){const t=this.checkCondition(e);return this.error?s.Err(this.error):s.Ok(t)}return s.Ok(!1)}checkCondition(t){const{browser:e,version:i}=t;if("string"!=typeof this.browser)return!1;if(!this.version)return e===this.browser;if(!this.versionMatchType||"number"!=typeof i)return!1;const a=parseFloat(this.version);switch(isNaN(a)&&(Ot.error`Failed to parse version: ${this.version} in Browser condition`,this.error=new c(o.VersionParse,this.version)),this.versionMatchType){case ve.EQUAL:return e===this.browser&&i===a;case ve.GREATER:return e===this.browser&&i>a;case ve.LOWER:return e===this.browser&&i<a;default:Ot.error`Unexpected comparing operation for Browser condition: ${this.versionMatchType}`,l(this.versionMatchType)}}}class Xe{constructor({goalId:t}){this.conditionValue=t}evaluate({targetingData:t}){const e=null==t?void 0:t[Xt.Conversion];if(!this.conditionValue)return s.Ok(!1);if(e){if(Object.keys(e).length&&-1===this.conditionValue)return s.Ok(!0);const t=Object.values(e);return s.Ok(t.some(t=>!!t&&t.goalId===this.conditionValue))}return s.Ok(!1)}}class Qe{constructor({customDataIndex:t,valueMatchType:e,value:i,range:a}){this.customDataIndex=t?Number(t):-1,this.matchType=e,this.conditionValue=i,this.range=a}evaluate({targetingData:t}){var e;const i=null===(e=null==t?void 0:t[Xt.CustomData])||void 0===e?void 0:e[this.customDataIndex];if(this.matchType===le.UNDEFINED)return s.Ok(!i);if(i){const{value:t}=i,e=this.checkCondition(t);return this.error?s.Err(this.error):s.Ok(e)}return s.Ok(!1)}checkCondition(t){if("string"!=typeof this.conditionValue&&this.matchType!==le.TRUE&&this.matchType!==le.FALSE&&this.matchType!==le.RANGE)return Ot.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`,!1;const e=this.conditionValue;if(this.matchType===le.AMONG_VALUES){const i=this.parseArray(e);if(!i.ok)return this.error=i.error,!1;const a=new Set(i.data);return Array.isArray(t)?t.some(t=>a.has(t)):i.data.includes(t)}if(this.matchType===le.RANGE){const e=this.parseRange(this.range);if(!e.ok)return this.error=e.error,!1;const[i,a]=e.data,r=t=>t>=i&&t<=a;return Array.isArray(t)?t.some(t=>r(Number(t))):r(Number(t))}if(Array.isArray(t))return t.some(t=>this.checkCondition(t));switch(this.matchType){case le.CONTAINS:return t.includes(e);case le.EXACT:return t===this.conditionValue;case le.REGULAR_EXPRESSION:return _e.parseRegExp(e).test(t);case le.LOWER:return Number(t)<Number(this.conditionValue);case le.EQUAL:return Number(t)===Number(this.conditionValue);case le.GREATER:return Number(t)>Number(this.conditionValue);case le.TRUE:return"true"===t.toLowerCase();case le.FALSE:return"false"===t.toLowerCase();default:return Ot.error`Unexpected comparing operation for CustomData condition: ${this.matchType}`,!1}}parseArray(t){try{const e=JSON.parse(t);if(Array.isArray(e))return s.Ok(e)}catch(e){return Ot.error`Failed to parse array: ${t} in CustomData condition`,s.Err(new c(o.AmongValuesCheck,e,t))}return s.Ok([])}parseRange(t){return t&&2===t.length?s.Ok(t):(Ot.error`Failed to parse range: ${t} in CustomData condition`,s.Err(new c(o.RangeCheck,t)))}}class Ze{static getLatest(t){return Object.values(t).reduce((t,e)=>t.timestamps[t.timestamps.length-1].time>e.timestamps[e.timestamps.length-1].time?t:e)}}class ti{constructor({matchType:t,title:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t}){const e=null==t?void 0:t[Xt.PageView];if(!e)return s.Ok(!1);const i=Ze.getLatest(e);return s.Ok(this.checkCondition(i.title))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case pe.CONTAINS:return t.includes(this.conditionValue);case pe.EXACT:return t===this.conditionValue;case pe.REGULAR_EXPRESSION:return _e.parseRegExp(this.conditionValue).test(t);default:return Ot.error`Unexpected comparing operation for PageTitle condition: ${this.matchType}`,!1}}}class ei{constructor({matchType:t,url:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t}){const e=null==t?void 0:t[Xt.PageView];if(!e)return s.Ok(!1);const i=Ze.getLatest(e);return s.Ok(this.checkCondition(i.urlAddress))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case pe.CONTAINS:return t.includes(this.conditionValue);case pe.EXACT:return t===this.conditionValue;case pe.REGULAR_EXPRESSION:return _e.parseRegExp(this.conditionValue).test(t);default:return Ot.error`Unexpected comparing operation for PageUrl condition: ${this.matchType}`,!1}}}class ii{constructor({sdkLanguage:t,version:e,versionMatchType:i}){this.sdkLanguage=t,this.conditionValue=e,this.versionMatchType=i}evaluate({sdkInfo:t}){return this.checkCondition(t)}checkCondition(t){const{type:e,version:i}=t;if(!this.sdkLanguage)return s.Ok(!1);if("string"!=typeof this.conditionValue)return s.Ok(e===this.sdkLanguage);if(!this.versionMatchType)return s.Ok(!1);const a=ke.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?s.Ok(e===this.sdkLanguage&&a.data):s.Err(a.error)}}class ai{constructor({visitorCode:t,matchType:e}){this.matchType=e,this.conditionValue=t}evaluate({visitorCode:t}){return s.Ok(this.checkCondition(t))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case pe.CONTAINS:return t.includes(this.conditionValue);case pe.EXACT:return t===this.conditionValue;case pe.REGULAR_EXPRESSION:return _e.parseRegExp(this.conditionValue).test(t);default:return Ot.error`Unexpected comparing operation for VisitorCode condition: ${this.matchType}`,!1}}}class ri{constructor({name:t,value:e,nameMatchType:i,valueMatchType:a}){this.cookie={key:null!=t?t:void 0,value:null!=e?e:void 0},this.keyMatchType=i,this.valueMatchType=a}evaluate({targetingData:t}){var e;const i=!this.cookie.key&&!this.cookie.value,a=Boolean(this.valueMatchType)&&Boolean(this.keyMatchType);if(i||!a)return s.Ok(!1);const r=this.extractCookie(),n=(null===(e=null==t?void 0:t[Xt.Cookie])||void 0===e?void 0:e.cookie)||[];return s.Ok(r.some(t=>this.checkCondition(t))||n.some(t=>this.checkCondition(t)))}extractCookie(){return"undefined"!=typeof document&&document.cookie?Pe.fromString(document.cookie).data.cookie:[]}checkCondition(t){const e=this.keyMatchType,{key:i,value:a}=t;if(e===me.OPTIONAL){const t=this.cookie;return!!this.isOptionalCookie(t)&&this.compareCookieValue(a,t.value)}const{key:r,value:n}=this.cookie;let o;switch(e){case me.EXACT:o=i===r;break;case me.CONTAINS:o=i.includes(r);break;case me.REGULAR_EXPRESSION:o=_e.parseRegExp(r).test(i);break;default:Ot.error`Unexpected comparing operation for Cookie condition: ${e}`,l(e)}return o&&this.compareCookieValue(a,n)}compareCookieValue(t,e){const i=this.valueMatchType;switch(i){case le.EXACT:return t===e;case le.CONTAINS:return t.includes(e);case le.REGULAR_EXPRESSION:return _e.parseRegExp(e).test(t);default:return Ot.error`Unexpected comparing operation for Cookie condition: ${i}`,!1}}isOptionalCookie(t){const{value:e}=t;return void 0!==e}}class ni{constructor({os:t}){this.operatingSystem=t}evaluate({targetingData:t}){const e=null==t?void 0:t[Xt.OperatingSystem];if(e){const{operatingSystem:t}=e;return s.Ok(t===this.operatingSystem)}return s.Ok(!1)}}class oi{constructor({country:t,region:e,city:i}){this.country=t,this.region=e,this.city=i}evaluate({targetingData:t}){const e=null==t?void 0:t[Xt.GeolocationData];if(e){const{country:t,region:i,city:a}=e,[r,n,o]=[this.country,this.region,this.city];if(!r||!t)return s.Ok(!1);const u=!(t.toLowerCase()!==r.toLowerCase()||n&&(null==i?void 0:i.toLowerCase())!==n.toLowerCase()||o&&(null==a?void 0:a.toLowerCase())!==o.toLowerCase());return s.Ok(u)}return s.Ok(!1)}}class si{constructor({segmentId:t}){this.segmentId=t}evaluate(t){const{segments:e,trees:i}=t;if(!this.segmentId)return s.Ok(!1);const a=null==e?void 0:e.get(this.segmentId.toString());if(!a)return s.Ok(!1);const r=null==i?void 0:i.get(this.segmentId.toString());return r?r.evaluate(t):new We(a).evaluate(t)}}class ui{constructor({featureFlagId:t,variationKey:e,ruleId:i}){this.featureId=t,this.ruleId=i,this.variationKey=e}evaluate({variationData:t,ruleMap:e}){var i,a,r,n;if(!this.featureId||!e)return s.Ok(!1);if(this.featureId&&!this.ruleId&&!this.variationKey){for(const[a,r]of e){const{featureId:e,experimentId:a}=r;if(e===this.featureId&&"number"==typeof(null===(i=t[a])||void 0===i?void 0:i.variationId))return s.Ok(!0)}return s.Ok(!1)}if(this.featureId&&this.ruleId){const i=e.get(this.ruleId);if(!i)return s.Ok(!1);const{experimentId:n,variations:o}=i;if(this.variationKey){const e=o.get(this.variationKey);return s.Ok(Boolean(e)&&(null===(a=t[n])||void 0===a?void 0:a.variationId)===e)}return s.Ok(Boolean(null===(r=t[i.experimentId])||void 0===r?void 0:r.variationId))}if(this.featureId&&!this.ruleId&&this.variationKey)for(const[i,a]of e){const{featureId:e,experimentId:i,variations:r}=a;if(e===this.featureId&&r.has(this.variationKey)){const e=r.get(this.variationKey);return s.Ok(Boolean(e)&&(null===(n=t[i])||void 0===n?void 0:n.variationId)===e)}}return s.Ok(!1)}}class di{constructor({matchType:t,url:e}){this.conditionValue=e,this.matchType=t}evaluate({targetingData:t}){const e=null==t?void 0:t[Xt.PageView];if(!e)return s.Ok(!1);const i=this.getSecondLatestPageView(Object.values(e));if(!i)return s.Ok(!1);const a=i.urlAddress;return s.Ok(this.checkCondition(a))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case pe.CONTAINS:return t.includes(this.conditionValue);case pe.EXACT:return t===this.conditionValue;case pe.REGULAR_EXPRESSION:return _e.parseRegExp(this.conditionValue).test(t);default:return Ot.error`Unexpected comparing operation for PreviousPage condition: ${this.matchType}`,!1}}getSecondLatestPageView(t){if(t.length<2)return;let e,i;return t.forEach(t=>{const a=t.timestamps[t.timestamps.length-1].time;if(!e)return void(e=t);if(a>e.timestamps[e.timestamps.length-1].time)return i=e,void(e=t);a>(i?i.timestamps[i.timestamps.length-1].time:0)&&(i=t)}),i}}class li{constructor({matchType:t,pageCount:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t}){const e=null==t?void 0:t[Xt.PageView];if(!e)return s.Ok(!1);let i=0;return Object.values(e).forEach(t=>{i+=t.timestamps.length}),s.Ok(this.checkCondition(i))}checkCondition(t){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case pe.EQUAL:return t===this.conditionValue;case pe.GREATER:return t>this.conditionValue;case pe.LOWER:return t<this.conditionValue;default:return Ot.error`Unexpected comparing operation for VisitedPages condition: ${this.matchType}`,!1}}}class ci{constructor({matchType:t,count:e,unitOfTime:i}){this.matchType=t,this.conditionValue=e,this.timeUnit=i}evaluate({targetingData:t,sdkInfo:e}){const i=null==t?void 0:t[Xt.VisitsData];if(e.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(t){if(!this.matchType||"number"!=typeof this.conditionValue||!this.timeUnit)return!1;const e=Date.now()-t,i=ke.convertTimeUnit(e,this.timeUnit);switch(this.matchType){case pe.GREATER:return i>this.conditionValue;case pe.LOWER:return i<this.conditionValue;default:return Ot.error`Unexpected comparing operation for FirstVisit condition: ${this.matchType}`,!1}}}class hi{constructor({matchType:t,count:e,unitOfTime:i}){this.matchType=t,this.conditionValue=e,this.timeUnit=i}evaluate({targetingData:t,sdkInfo:e}){const i=null==t?void 0:t[Xt.VisitsData];if(e.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,r=a[e.isServer?a.length-1:a.length-2];return s.Ok(this.checkCondition("number"==typeof r?r:r.timeStarted))}checkCondition(t){if(!this.matchType||"number"!=typeof this.conditionValue||!this.timeUnit)return!1;const e=Date.now()-t,i=ke.convertTimeUnit(e,this.timeUnit);switch(this.matchType){case pe.GREATER:return i>this.conditionValue;case pe.LOWER:return i<this.conditionValue;default:return Ot.error`Unexpected comparing operation for LastVisit condition: ${this.matchType}`,!1}}}class gi{constructor({matchType:t,visitCount:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t,sdkInfo:e}){const i=null==t?void 0:t[Xt.VisitsData];if(!i)return s.Ok(!1);let a=0;const r=(new Date).setHours(0,0,0,0),{visits:n}=i;return n.forEach(t=>{let e;e="number"==typeof t?t:t.timeStarted,e>=r&&a++}),e.isServer&&(a+=1),s.Ok(this.checkCondition(a))}checkCondition(t){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case pe.EQUAL:return t===this.conditionValue;case pe.GREATER:return t>this.conditionValue;case pe.LOWER:return t<this.conditionValue;default:return Ot.error`Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`,!1}}}class fi{constructor({matchType:t,visitCount:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t,sdkInfo:e}){const i=null==t?void 0:t[Xt.VisitsData];if(!i)return s.Ok(!1);const a=i.visits.length+(e.isServer?1:0);return s.Ok(this.checkCondition(a))}checkCondition(t){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case pe.EQUAL:return t===this.conditionValue;case pe.GREATER:return t>this.conditionValue;case pe.LOWER:return t<this.conditionValue;default:return Ot.error`Unexpected comparing operation for Visits condition: ${this.matchType}`,!1}}}class pi{constructor({visitorType:t}){this.visitorType=t}evaluate({targetingData:t,sdkInfo:e}){const i=null==t?void 0:t[Xt.VisitsData];if(!i||!this.visitorType)return s.Ok(!1);const{visits:a}=i,r=e.isServer?!a.length:a.length<=1;switch(this.visitorType){case ce.NEW:return s.Ok(r);case ce.RETURNING:return s.Ok(!r);default:Ot.error`Unexpected visitor type for NewVisitor condition: ${this.visitorType}`,l(this.visitorType)}}}class vi{constructor({version:t,versionMatchType:e}){this.conditionValue=t,this.versionMatchType=e}evaluate({targetingData:t}){var e;const i=null===(e=null==t?void 0:t[Xt.ApplicationVersion])||void 0===e?void 0:e.version;if(!i||!this.conditionValue||!this.versionMatchType)return s.Ok(!1);const a=ke.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?s.Ok(a.data):s.Err(a.error)}}class mi{constructor({lowerBound:t,upperBound:e,keyMomentId:i,goalId:a}){this.lowerBound=t,this.upperBound=e,this.keyMomentId=i,this.goalId=a}evaluate({targetingData:t}){var e;const i=null==t?void 0:t[Xt.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===(e=i.kcs[this.keyMomentId.toString()])||void 0===e?void 0:e[this.goalId.toString()];return"number"!=typeof a?s.Ok(!1):s.Ok(a>=this.lowerBound&&a<=this.upperBound)}}class Ci{constructor({campaignType:t}){this.campaignType=t}evaluate(t){return s.Ok(this.checkCondition(t))}checkCondition(t){var e;const i=Object.values(t.variationData),a=Object.values((null===(e=t.targetingData)||void 0===e?void 0:e.personalization)||{}),r=1===i.length&&null!==t.experimentId&&void 0!==t.variationData[t.experimentId],n=0===i.length,o=0===a.length;switch(this.campaignType){case fe.Experiment:return n||r;case fe.Personalization:return o;case fe.Any:return o&&(n||r);default:return!1}}}class Ei{constructor({variationMatchType:t,variation:e,experiment:i}){this.variationMatchType=t,this.variationId=e||-1,this.experimentId=i||-1}evaluate(t){return s.Ok(this.checkCondition(t))}checkCondition(t){const e=t.variationData[this.experimentId];if(!e)return!1;switch(this.variationMatchType){case he.ANY:return!0;case he.EXACT:return e.variationId===this.variationId;default:return!1}}}class yi{constructor({personalizationId:t}){this.personalizationId=t}evaluate(t){return t.targetingData?s.Ok(this.checkCondition(t)):s.Ok(!1)}checkCondition(t){var e;if(!this.personalizationId)return!1;const i=null===(e=t.targetingData)||void 0===e?void 0:e[Xt.Personalization];return void 0!==(null==i?void 0:i[this.personalizationId])}}class Ii{createCondition(t){const{targetingType:e}=t;switch(e){case Ce.CUSTOM_DATUM:return s.Ok(new Qe(t));case Ce.EXCLUSIVE_EXPERIMENT:return s.Ok(new Ci(t));case Ce.TARGET_EXPERIMENT:return s.Ok(new Ei(t));case Ce.TARGET_FEATURE_FLAG:return s.Ok(new ui(t));case Ce.TARGET_PERSONALIZATION:return s.Ok(new yi(t));case Ce.DEVICE_TYPE:return s.Ok(new Ye(t));case Ce.BROWSER:return s.Ok(new Je(t));case Ce.PAGE_URL:return s.Ok(new ei(t));case Ce.PAGE_TITLE:return s.Ok(new ti(t));case Ce.CONVERSIONS:return s.Ok(new Xe(t));case Ce.VISITOR_CODE:return s.Ok(new ai(t));case Ce.SDK_LANGUAGE:return s.Ok(new ii(t));case Ce.COOKIE:return s.Ok(new ri(t));case Ce.OPERATING_SYSTEM:return s.Ok(new ni(t));case Ce.GEOLOCATION:return s.Ok(new oi(t));case Ce.SEGMENT:return s.Ok(new si(t));case Ce.APPLICATION_VERSION:return s.Ok(new vi(t));case Ce.PREVIOUS_PAGE:return s.Ok(new di(t));case Ce.PAGE_VIEWS:return s.Ok(new li(t));case Ce.LAST_VISIT:return s.Ok(new hi(t));case Ce.FIRST_VISIT:return s.Ok(new ci(t));case Ce.SAME_DAY_VISITS:return s.Ok(new gi(t));case Ce.VISITS:return s.Ok(new fi(t));case Ce.NEW_VISITORS:return s.Ok(new pi(t));case Ce.HEAT_SLICE:return s.Ok(new mi(t));default:return Ot.error`Unsupported targeted condition type found: ${e}`,s.Err(new c(o.TargetingCondition,e))}}}var Di;!function(t){t.ClientData="kameleoonClientData",t.TargetingData="kameleoonTargetingData",t.TrackingData="kameleoonTrackingData",t.VariationData="kameleoonVariationData",t.VisitorCode="kameleoonVisitorCode",t.ConsentData="kameleoonConsentData",t.DataInfo="kameleoonDataInfo",t.KameleoonSimulationFFData="kameleoonSimulationFFData",t.ForcedFeatureVariation="kameleoonForcedFeatureVariation",t.ForcedExperimentVariation="kameleoonForcedExperimentVariation"}(Di||(Di={}));const Ti={data:{customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:Gt.NotRequired,dataApiDomain:"data.kameleoon.io"}},lastUpdate:""},ki=29*Mt.Minute;class Ri{constructor(t){this.key=t}isDataValid(t){switch(this.key){case Di.ClientData:return this.checkClientDataIntegrity(t);case Di.TargetingData:return this.checkTargetingDataIntegrity(t);case Di.DataInfo:return this.checkDataInfoIntegrity(t);case Di.VariationData:return this.checkVariationDataIntegrity(t);case Di.TrackingData:return this.checkTrackingDataIntegrity(t);default:return!0}}getDefaultData(){switch(this.key){case Di.ClientData:return this.getDefaultClientData();case Di.DataInfo:return{unsentData:{},nextVisitTime:0,mappingIdentifiers:{}};case Di.TrackingData:return{scheduledVisitors:{}};case Di.TargetingData:case Di.VariationData:case Di.ConsentData:return{};case Di.VisitorCode:case Di.KameleoonSimulationFFData:return"";case Di.ForcedExperimentVariation:case Di.ForcedFeatureVariation:return{};default:l(this.key)}}checkTrackingDataIntegrity(t){return this.hasFields(t,["scheduledVisitors"])}checkDataInfoIntegrity(t){return this.hasFields(t,["unsentData","nextVisitTime"])}checkVariationDataIntegrity(t){const e=Object.values(t);if(!e.length)return!0;const i=t=>!this.hasFields(t,["status"])||this.hasFields(t,["isSent"]);for(const t of e)for(const e of Object.values(t))if(i(e))return!1;return!0}checkClientDataIntegrity(t){return this.hasFields(t,Object.keys(Ti))}checkTargetingDataIntegrity(t){const e=Object.values(t);if(!e.length)return!0;for(const t of e){if("string"==typeof t)continue;const e=t=>!this.hasFields(t,["status"])||this.hasFields(t,["sent"])||this.hasFields(t,["timestampList"]);for(const[i,a]of Object.entries(t)){if(Array.isArray(a))return!1;switch(i){case Xt.PageView:case Xt.Conversion:case Xt.CustomData:if(Object.values(a).some(t=>e(t)))return!1;continue;default:if(e(a))return!1}}}return!0}getDefaultClientData(){return Object.assign(Object.assign({},Ti),{lastUpdate:(new Date).toString()})}hasFields(t,e){const i=Object.keys(t);return!(!i.length||!e.length)&&e.every(t=>i.includes(t))}}class Vi{constructor(t,e){this.externalStorage=t,this.storageKey=e;const i=new Ri(e),a=this.read();if(!a.ok){if(a.error.type===o.StorageEmpty){const t=i.getDefaultData();this.write(t)}return}const r=a.data;if(!i.isDataValid(r)){const t=i.getDefaultData();this.write(t)}}read(){try{const t=this.externalStorage.read(this.storageKey);return null===t?s.Err(new c(o.StorageEmpty)):s.Ok(t)}catch(t){return Ot.error`Failed to read data from storage: ${this.storageKey}`,s.Err(new c(o.StorageRead,this.storageKey))}}write(t){try{return this.externalStorage.write(this.storageKey,t),s.Ok()}catch(t){return Ot.error`Failed to write data to storage: ${this.storageKey}`,s.Err(new c(o.StorageWrite,this.storageKey))}}update(t){const e=this.read();if(!e.ok)return e.error.type===o.StorageEmpty?this.write(t):e;const i=e.data;let a;return a="string"==typeof i?t:Object.assign(Object.assign({},i),t),this.write(a)}}class Si{constructor(t,e){this.externalStorage=t,this.cleanupInterval=e,e>0&&this.initCleanupInterval()}initCleanupInterval(){for(const t of Object.values(Di)){let e=null;try{switch(t){case Di.ForcedFeatureVariation:case Di.ForcedExperimentVariation:case Di.VariationData:case Di.ConsentData:Ot.info`Starting cleanup for ${t} with interval ${this.cleanupInterval}`,e=setInterval(()=>this.cleanupData(t),this.cleanupInterval);break;case Di.ClientData:case Di.TargetingData:case Di.TrackingData:case Di.VisitorCode:case Di.DataInfo:case Di.KameleoonSimulationFFData:break;default:Ot.error`Unknown storage key: ${t} for initCleanupInterval.`}}catch(i){e&&clearInterval(e),Ot.error`Error while starting cleanup for ${t} with interval ${this.cleanupInterval}`}}}cleanupData(t){const e=this.externalStorage.read(t);if(!e)return;const i=Date.now();switch(t){case Di.VariationData:this.cleanupVariationData(e,i);break;case Di.ForcedFeatureVariation:this.cleanupForcedFeatureVariationData(e,i);break;case Di.ForcedExperimentVariation:this.cleanupForcedExperimentVariationData(e,i);break;case Di.ConsentData:this.cleanupConsentData(e,i);break;case Di.ClientData:case Di.TargetingData:case Di.TrackingData:case Di.VisitorCode:case Di.DataInfo:case Di.KameleoonSimulationFFData:break;default:Ot.error`Unknown storage key: ${t} for cleanupData.`}this.externalStorage.write(t,e)}cleanupConsentData(t,e){for(const[i,a]of Object.entries(t)){if("boolean"==typeof a){t[i]={consent:a,expirationTime:e+this.cleanupInterval};continue}const r=a;"number"==typeof r.expirationTime?r.expirationTime<e&&delete t[i]:r.expirationTime=e+this.cleanupInterval}}cleanupVariationData(t,e){for(const[i,a]of Object.entries(t))this.cleanupObjectValues(a,e),0===Object.keys(t[i]).length&&delete t[i]}cleanupForcedFeatureVariationData(t,e){for(const[i,a]of Object.entries(t))for(const[r,n]of Object.entries(a))this.cleanupObjectValues(n,e),0===Object.keys(t[Number(i)][r]).length&&delete t[Number(i)][r]}cleanupForcedExperimentVariationData(t,e){for(const[i,a]of Object.entries(t))this.cleanupObjectValues(a,e),0===Object.keys(t[i]).length&&delete t[i]}cleanupObjectValues(t,e){for(const[i,a]of Object.entries(t))"number"==typeof a.expirationTime?a.expirationTime<e&&delete t[i]:a.expirationTime=e+this.cleanupInterval}}class wi{constructor(t){this.id=t,this.status=xt.Unsent}get url(){return R+q+this.id}get data(){return{id:this.id,type:Xt.TargetedSegment,status:this.status}}static _fromRaw(t){const{id:e,status:i}=t,a=new wi(e);return a.status=i,a}}class bi{constructor({dataStorage:t,infoStorage:e,cleanupInterval:i,packageInfo:a}){if(this.targetingTrees=new Map,this.mappingIdentifierCustomDataIndex=null,this.persistentCustomDataIndexes=new Set,this.localCustomDataIndexes=new Set,this.cleanupIntervalId=null,Ot.debug`CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`,this.dataStorage=t,this.infoStorage=e,this.dataProcessor=new ze(i,a),this.packageInfo=a,i){const t=()=>{this.cleanupData()};try{this.cleanupIntervalId=setInterval(t,i)}catch(t){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),Ot.error`Failed to set cleanup interval: ${i}`,t}}Ot.debug`RETURN: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`}getUnsentData(t){const e=this.infoStorage.read();if(!e.ok)return[];const i=e.data,a=this.getVisitorData(t);if(!i.unsentData[t]||!a)return[];const r=i.unsentData[t],n=i.nextVisitTime<=Date.now();return n&&(i.nextVisitTime=Date.now()+ki,this.infoStorage.write(i)),this.getDataFromRaw(a,({status:t,key:e,cdIndex:i})=>!("number"!=typeof i||!this.persistentCustomDataIndexes.has(i)||!n)||r.includes(e)&&t===xt.Unsent)}getPendingData(t){const e=this.getVisitorData(t);if(!e)return[];return this.getDataFromRaw(e,({status:t})=>t===xt.Pending)}getDataFromRaw(t,e){const i=[];for(const[a,r]of Object.entries(t))if(r)switch(a){case Xt.CustomData:for(const t of Object.values(r)){if(!t)continue;const{status:r,index:n}=t;if(e({status:r,key:a,cdIndex:n})){const e=Se._fromRaw(t);i.push(e)}}break;case Xt.Conversion:for(const t of Object.values(r))if(t&&e({status:t.status,key:a})){const e=we._fromRaw(t);i.push(e)}break;case Xt.PageView:{const t=r;for(const r of Object.values(t))if(e({status:r.status,key:a})){const t=Ve._fromRaw(r);i.push(t)}break}case Xt.TargetedSegment:{const t=r;for(const r of Object.values(t))if(e({status:r.status,key:a})){const t=wi._fromRaw(r);i.push(t)}break}case Xt.GeolocationData:{const t=r;if(!r)continue;if(e({status:t.status,key:a})){const e=$e._fromRaw(t);i.push(e)}break}case Xt.Browser:{const t=r;if(e({status:t.status,key:a})){const e=be._fromRaw(t);i.push(e)}break}case Xt.Device:{const t=r;if(e({status:t.status,key:a})){const e=Ae._fromRaw(t);i.push(e)}break}case Xt.OperatingSystem:{const t=r;if(e({status:t.status,key:a})){const e=Oe._fromRaw(t);i.push(e)}}}return i}storeTrackedData(t){this.storeData(t);const e=this.infoStorage.read();if(!e.ok)return;const i=e.data.unsentData;for(const[e,a]of Object.entries(t)){if(!i[e])return;const t=new Set(i[e]);a.forEach(({data:e})=>{t.has(e.type)&&t.delete(e.type)});const r=a.some(({data:t})=>{if(t.type!==Xt.CustomData)return!1;const{index:e}=t;return this.persistentCustomDataIndexes.has(e)||this.mappingIdentifierCustomDataIndex===e});r&&t.add(Xt.CustomData),i[e]=Array.from(t),i[e].length||delete i[e]}this.infoStorage.write(e.data)}storeData(t,...e){Ot.debug`CALL: DataManager.storeData(visitorCode: ${t}, data: ${e})`;const i=this.dataStorage.read(),a=this.infoStorage.read();if(!i.ok)return i;if(!a.ok)return a;const r=i.data,n=a.data;if("string"==typeof t)this.mutUpdateTargetingData({infoData:n,targetingData:r,visitorCode:t,kameleoonData:e});else for(const[e,i]of Object.entries(t))this.mutUpdateTargetingData({infoData:n,targetingData:r,visitorCode:e,kameleoonData:i});this.cleanupData(),this.infoStorage.write(a.data);const o=this.dataStorage.write(r);return Ot.debug`RETURN: DataManager.storeData(visitorCode: ${t}, data: ${e}) -> (writeResult: ${o})`,o}getTree(t){if(this.targetingTrees.has(t.id))return this.targetingTrees.get(t.id);const e=new We(t);return this.targetingTrees.set(t.id,e),e}clearTrees(){this.targetingTrees.clear()}isPersistentCustomData(t){return!!this.persistentCustomDataIndexes.size&&(!!ke.isCustomData(t)&&this.persistentCustomDataIndexes.has(t.data.index))}isUniqueIdentifier(t){var e;const i=this.getVisitorData(t),a=null==i?void 0:i[Xt.UniqueIdentifier];return null!==(e=null==a?void 0:a.value)&&void 0!==e&&e}getVisitorIdentifier(t){var e,i,a;const r=this.infoStorage.read();if(!r.ok)return t;const n=r.data;return null!==(e=n.mappingIdentifiers)&&void 0!==e||(n.mappingIdentifiers={}),null!==(a=null===(i=n.mappingIdentifiers[t])||void 0===i?void 0:i.mappingIdentifier)&&void 0!==a?a:t}getMappingIdentifier(t){const e=this.infoStorage.read();if(!e.ok)return;const i=e.data;return i.mappingIdentifiers?i.mappingIdentifiers[t]:void 0}setMappingIdentifier(t,e){var i;const a=this.infoStorage.read();if(!a.ok)return;const r=a.data;null!==(i=r.mappingIdentifiers)&&void 0!==i||(r.mappingIdentifiers={});const n=r.mappingIdentifiers[t];(!n||n.timestamp<e.timestamp)&&(r.mappingIdentifiers[t]=e,this.infoStorage.write(r))}getVisitorData(t){this.cleanupData();const e=this.dataStorage.read();if(!e.ok)return;let{visitorReference:i,data:a,isReference:r}=this.dataProcessor.dereferenceData(e.data,t);if(this.packageInfo.isServer&&r&&!a[i]){const e=this.infoStorage.read();e.ok&&e.data.mappingIdentifiers&&delete e.data.mappingIdentifiers[t],delete a[t],i=t}return a[i]}getVisitorStoredDataTypes(t){const e=this.getVisitorData(t);return e?new Set(Object.keys(e)):new Set}getLinkedVisitor(t){const e=this.dataStorage.read();if(!e.ok)return null;if("string"==typeof e.data[t])return e.data[t];if(null===this.mappingIdentifierCustomDataIndex)return null;const i=e.data[t];if(!i)return null;const a=i[Xt.CustomData];return a&&a[this.mappingIdentifierCustomDataIndex]?a[this.mappingIdentifierCustomDataIndex].value[0]:null}mutUpdateTargetingData({infoData:t,visitorCode:e,kameleoonData:i,targetingData:a}){for(const r of i){r.data.type===Xt.CustomData&&this.processCustomData({infoData:t,customData:r,mutData:a,visitorCode:e});const i=this.dataProcessor.mutUpdateData({infoData:t,visitorCode:e,mutData:a,dataItem:r}),n=t.nextDataCleanup;(!n||n&&i<n)&&(t.nextDataCleanup=i),r.data.status===xt.Unsent&&this.dataProcessor.mutAddUnsentData({mutData:t,visitorCode:e,dataType:r.data.type})}}cleanupData(){const t=this.dataStorage.read(),e=this.infoStorage.read();if(!t.ok||!e.ok)return;const i=t.data,a=e.data,r=a.nextDataCleanup;if(r&&r<Date.now()){const t=this.dataProcessor.mutCleanupData(i,a);a.nextDataCleanup=t||void 0,this.infoStorage.write(a),this.dataStorage.write(i)}}processCustomData({infoData:t,mutData:e,customData:i,visitorCode:a}){var r;const{data:n}=i,o=Boolean(n.value.length&&n.value[0].length);if(this.mappingIdentifierCustomDataIndex===n.index&&o){i._isMappingIdentifier=!0;const o=n.value[0];a!==o&&(Ot.info`Linked anonymous visitor ${a} with user ${o}`,this.dataProcessor.createReference({infoData:t,mutData:e,visitorCode:a,linkedVisitor:n.value[0]}),null!==(r=t.mappingIdentifiers)&&void 0!==r||(t.mappingIdentifiers={}),t.mappingIdentifiers[o]={mappingIdentifier:a,timestamp:Date.now()})}this.localCustomDataIndexes.has(n.index)&&(i.status=xt.Sent)}get unsentDataVisitors(){const t=this.infoStorage.read();return t.ok?Object.keys(t.data.unsentData):[]}get identifierCustomDataIndex(){return this.mappingIdentifierCustomDataIndex}get trees(){return this.targetingTrees}get storedCustomDataIndexes(){const t=this.dataStorage.read();if(!t.ok)return new Set;const e=t.data;if(!(Xt.CustomData in e))return new Set;const i=new Set;for(const t in Object.keys(e[Xt.CustomData]))i.add(Number(t));return i}set customDataIndexes(t){var e;const[i,a]=[[],[]];t.forEach(t=>{t.localOnly&&i.push(t.index),t.scope===Kt.Visitor&&a.push(t.index)}),this.mappingIdentifierCustomDataIndex=(null===(e=t.find(t=>t.isMappingIdentifier))||void 0===e?void 0:e.index)||null,this.localCustomDataIndexes=new Set(i),this.persistentCustomDataIndexes=new Set(a)}}var Ai={exports:{}};var Oi,$i={exports:{}};function Fi(){return Oi||(Oi=1,$i.exports=(e=e||function(e,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!==t&&t.crypto&&(a=t.crypto),!a)try{a=require("crypto")}catch(t){}var r=function(){if(a){if("function"==typeof a.getRandomValues)try{return a.getRandomValues(new Uint32Array(1))[0]}catch(t){}if("function"==typeof a.randomBytes)try{return a.randomBytes(4).readInt32LE()}catch(t){}}throw new Error("Native crypto module could not be used to get secure random number.")},n=Object.create||function(){function t(){}return function(e){var i;return t.prototype=e,i=new t,t.prototype=null,i}}(),o={},s=o.lib={},u=s.Base={extend:function(t){var e=n(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},d=s.WordArray=u.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=e!=i?e:4*t.length},toString:function(t){return(t||c).stringify(this)},concat:function(t){var e=this.words,i=t.words,a=this.sigBytes,r=t.sigBytes;if(this.clamp(),a%4)for(var n=0;n<r;n++){var o=i[n>>>2]>>>24-n%4*8&255;e[a+n>>>2]|=o<<24-(a+n)%4*8}else for(var s=0;s<r;s+=4)e[a+s>>>2]=i[s>>>2];return this.sigBytes+=r,this},clamp:function(){var t=this.words,i=this.sigBytes;t[i>>>2]&=4294967295<<32-i%4*8,t.length=e.ceil(i/4)},clone:function(){var t=u.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],i=0;i<t;i+=4)e.push(r());return new d.init(e,t)}}),l=o.enc={},c=l.Hex={stringify:function(t){for(var e=t.words,i=t.sigBytes,a=[],r=0;r<i;r++){var n=e[r>>>2]>>>24-r%4*8&255;a.push((n>>>4).toString(16)),a.push((15&n).toString(16))}return a.join("")},parse:function(t){for(var e=t.length,i=[],a=0;a<e;a+=2)i[a>>>3]|=parseInt(t.substr(a,2),16)<<24-a%8*4;return new d.init(i,e/2)}},h=l.Latin1={stringify:function(t){for(var e=t.words,i=t.sigBytes,a=[],r=0;r<i;r++){var n=e[r>>>2]>>>24-r%4*8&255;a.push(String.fromCharCode(n))}return a.join("")},parse:function(t){for(var e=t.length,i=[],a=0;a<e;a++)i[a>>>2]|=(255&t.charCodeAt(a))<<24-a%4*8;return new d.init(i,e)}},g=l.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},f=s.BufferedBlockAlgorithm=u.extend({reset:function(){this._data=new d.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=g.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var i,a=this._data,r=a.words,n=a.sigBytes,o=this.blockSize,s=n/(4*o),u=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*o,l=e.min(4*u,n);if(u){for(var c=0;c<u;c+=o)this._doProcessBlock(r,c);i=r.splice(0,u),a.sigBytes-=l}return new d.init(i,l)},clone:function(){var t=u.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0});s.Hasher=f.extend({cfg:u.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){f.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){return t&&this._append(t),this._doFinalize()},blockSize:16,_createHelper:function(t){return function(e,i){return new t.init(i).finalize(e)}},_createHmacHelper:function(t){return function(e,i){return new p.HMAC.init(t,i).finalize(e)}}});var p=o.algo={};return o}(Math),e)),$i.exports;var e}var Ni;var xi,Mi=(Ni||(Ni=1,Ai.exports=(xi=Fi(),function(t){var e=xi,i=e.lib,a=i.WordArray,r=i.Hasher,n=e.algo,o=[],s=[];!function(){function e(e){for(var i=t.sqrt(e),a=2;a<=i;a++)if(!(e%a))return!1;return!0}function i(t){return 4294967296*(t-(0|t))|0}for(var a=2,r=0;r<64;)e(a)&&(r<8&&(o[r]=i(t.pow(a,.5))),s[r]=i(t.pow(a,1/3)),r++),a++}();var u=[],d=n.SHA256=r.extend({_doReset:function(){this._hash=new a.init(o.slice(0))},_doProcessBlock:function(t,e){for(var i=this._hash.words,a=i[0],r=i[1],n=i[2],o=i[3],d=i[4],l=i[5],c=i[6],h=i[7],g=0;g<64;g++){if(g<16)u[g]=0|t[e+g];else{var f=u[g-15],p=(f<<25|f>>>7)^(f<<14|f>>>18)^f>>>3,v=u[g-2],m=(v<<15|v>>>17)^(v<<13|v>>>19)^v>>>10;u[g]=p+u[g-7]+m+u[g-16]}var C=a&r^a&n^r&n,E=(a<<30|a>>>2)^(a<<19|a>>>13)^(a<<10|a>>>22),y=h+((d<<26|d>>>6)^(d<<21|d>>>11)^(d<<7|d>>>25))+(d&l^~d&c)+s[g]+u[g];h=c,c=l,l=d,d=o+y|0,o=n,n=r,r=a,a=y+(E+C)|0}i[0]=i[0]+a|0,i[1]=i[1]+r|0,i[2]=i[2]+n|0,i[3]=i[3]+o|0,i[4]=i[4]+d|0,i[5]=i[5]+l|0,i[6]=i[6]+c|0,i[7]=i[7]+h|0},_doFinalize:function(){var e=this._data,i=e.words,a=8*this._nDataBytes,r=8*e.sigBytes;return i[r>>>5]|=128<<24-r%32,i[14+(r+64>>>9<<4)]=t.floor(a/4294967296),i[15+(r+64>>>9<<4)]=a,e.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA256=r._createHelper(d),e.HmacSHA256=r._createHmacHelper(d)}(Math),xi.SHA256)),Ai.exports),Ui=e(Mi);class _i{static getHashDoubleForMEGroup(t,e){return this.calculateHash(t+e)}static getHashDouble({visitorIdentifier:t,id:e,respoolTime:i}){let a="";return i&&(a+=String(i)),this.calculateHash(t+e+a)}static calculateHash(t){const e=Ui(t).toString();return parseInt(e,16)/Math.pow(2,256)}}class Li{constructor(t,e,i,a,r){this.storage=t,this.storageForcedExperimentVariations=e,this.storageForcedFeatureVariations=i,this.visitorCodeManager=a,this.clientConfiguration=r,a.setVariationConfiguration(this)}updateDataStatus({visitorCode:t,experimentIdList:e,status:i}){const a=this.storage.read();if(!a.ok)return a;let r=a.data;r[t]||(r[t]={});for(const a of e)r[t][a]=Object.assign(Object.assign({},r[t][a]),{status:i});return this.storage.write(r)}getUnsentData(t){return this.getVariationData(t,t=>t===xt.Unsent)}getVisitorsWithUnsentData(){Ot.debug`CALL: VariationConfiguration.unsentDataVisitors()`;const t=this.storage.read();if(!t.ok)return Ot.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (result: ${t})`,[];const e=[];for(const[i,a]of Object.entries(t.data))Object.values(a).some(t=>t.status===xt.Unsent)&&e.push(i);return Ot.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (visitors: ${e})`,e}getPendingData(t){return this.getVariationData(t,t=>t===xt.Pending)}getStoredVariations(t){const e=this.storage.read();if(!e.ok)return e;const i=e.data[t];return i?s.Ok(i):s.Err(new c(o.StorageRead,t))}getVariation({visitorCode:t,visitorIdentifier:e,featureFlag:i,targetingData:a,packageInfo:r,clientConfiguration:n,dataManager:o,track:u=!0,withAssignment:d=!1}){Ot.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${d})`;const{rules:l,featureKey:c,id:h,defaultVariationKey:g}=i;for(const f of l){const{segment:l,experimentId:p,id:v,exposition:m,respoolTime:C,variationByExposition:E}=f,y=this.getForcedExperimentVariation(t,f.experimentId);let I=null;if(y.ok&&(I=y.data,I&&I.forceTargeting)){Ot.info`Visitor ${t} has been forced targeted for ${f}`;const n=this.createAndSaveForcedTargetedVariation(t,i,f,I,u,d);return Ot.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${n})`,s.Ok(n)}const D=ke.checkTargeting({segment:l,visitorCode:t,experimentId:p,targetingData:a,packageInfo:r,clientConfiguration:n,dataManager:o,variationConfiguration:this});if(!D.ok)return Ot.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${D})`,D;if(!D.data)continue;if(Ot.info`Visitor ${t} has been targeted for ${f}`,I){const n=this.createAndSaveForcedTargetedVariation(t,i,f,I,u,d);return Ot.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${n})`,s.Ok(n)}const T=_i.getHashDouble({visitorIdentifier:e,respoolTime:C,id:String(v)});if(Ot.debug`Calculated ruleHash: ${T} for code: ${e}`,T<=m){let n=this.evaluateCBScores(f,e,a);if(!n){const t=_i.getHashDouble({visitorIdentifier:e,respoolTime:C,id:String(p)});Ot.debug`Calculated variationHash: ${t} for code: ${e}`,n=ke.getVariationByHash(E,t)}if(n){d&&this.updateStoredVariations(t,{[p]:{variationId:n.variationId,isTargetedRule:f.type===_t.TARGETED_DELIVERY,status:u?xt.Unsent:xt.Sent}});const o={variationId:n.variationId,variationKey:n.variationKey,rule:f,featureFlagId:h,featureKey:c,experimentId:p,isTargetedRule:f.type===_t.TARGETED_DELIVERY};return Ot.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${o})`,s.Ok(o)}}if(f.type===_t.TARGETED_DELIVERY){const n={featureKey:c,featureFlagId:h,experimentId:null,variationKey:g,variationId:null,rule:null,isTargetedRule:!0};return Ot.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${n})`,s.Ok(n)}}const f={featureKey:c,featureFlagId:h,experimentId:null,variationKey:g,variationId:null,rule:null,isTargetedRule:!1};return Ot.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${d}) -> (targetedVariation: ${f})`,s.Ok(f)}createAndSaveForcedTargetedVariation(t,e,i,a,r,n){const o={variationKey:a.varByExp.variationKey,variationId:a.varByExp.variationId,rule:i,featureFlagId:e.id,featureKey:e.featureKey,experimentId:i.experimentId,isTargetedRule:i.type===_t.TARGETED_DELIVERY};return n&&this.updateStoredVariations(t,{[i.experimentId]:{variationId:o.variationId,isTargetedRule:i.type===_t.TARGETED_DELIVERY,status:r?xt.Unsent:xt.Sent}}),o}updateStoredVariations(t,e){Ot.debug`CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${t}, variationData: ${e})`;const i=this.storage.read();if(!i.ok)return Ot.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${t}, variationData: ${e}) -> (result: ${i})`,i;let a=i.data;a[t]||(a[t]={});for(const i in e)a[t][i]=e[i];const r=this.storage.write(a);return Ot.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${t}, variationData: ${e}) -> (resultWrite: ${r})`,r}getVariationData(t,e){const i=this.getStoredVariations(t);if(!i.ok)return[];const a=[];for(const[t,r]of Object.entries(i.data))e(r.status)&&a.push({experimentId:Number(t),variationId:r.variationId,isTargetedRule:r.isTargetedRule});return a}updateForcedExperimentVariation(t,e,i){Ot.debug`CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${t}, experimentId: ${e}, forcedExperimentVariation: ${i})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return Ot.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${t}, experimentId: ${e}, forcedExperimentVariation: ${i}) -> (result: ${a})`,a;let r=a.data;r[t]||(r[t]={}),i?r[t][e]=i:delete r[t][e];const n=this.storageForcedExperimentVariations.write(r);return Ot.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${t}, experimentId: ${e}, forcedExperimentVariation: ${i}) -> (resultWrite: ${n})`,n}updateForcedFeatureVariations(t,e){Ot.debug`CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${t}, forcedFeatureVariations: ${e})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return Ot.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${t}, forcedFeatureVariations: ${e}) -> (result: ${i})`,i;let a=i.data;a[0]||(a[0]={}),a[1]||(a[1]={});const r=a[0],n=a[1];r[t]||(r[t]={}),n[t]||(n[t]={}),e.forEach(e=>{(e.simulated?n[t]:r[t])[e.featureKey]=e});const o=this.storageForcedFeatureVariations.write(a);return Ot.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${t}, forcedFeatureVariations: ${e}) -> (resultWrite: ${o})`,o}clearSimulatedVariations(t){var e;Ot.debug`CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${t})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return Ot.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${t}) -> (result: ${i})`,i;let a;const r=i.data;return(null===(e=null==r?void 0:r[1])||void 0===e?void 0:e[t])?(delete r[1][t],a=this.storageForcedFeatureVariations.write(r)):a=s.Ok(),Ot.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${t}) -> (resultWrite: ${a})`,a}getForcedFeatureVariation(t,e){var i,a,r,n;Ot.debug`CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${t}, featureKey: ${e})`;const o=this.storageForcedFeatureVariations.read();if(!o.ok)return Ot.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${t}, featureKey: ${e}) -> (simulatedResult: ${o})`,o;const u=null===(a=null===(i=o.data[1])||void 0===i?void 0:i[t])||void 0===a?void 0:a[e];if(u)return Ot.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${t}, featureKey: ${e}) -> (simulatedData: ${u})`,s.Ok(u);const d=null===(n=null===(r=o.data[0])||void 0===r?void 0:r[t])||void 0===n?void 0:n[e];return Ot.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${t}, featureKey: ${e}) -> (forcedData: ${d})`,s.Ok(d)}getForcedExperimentVariation(t,e){var i;Ot.debug`CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${t}, experimentId: ${e})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return Ot.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${t}, experimentId: ${e}) -> (forcedResult: ${a})`,a;const r=null===(i=a.data[t])||void 0===i?void 0:i[e];return Ot.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${t}, experimentId: ${e}) -> (forcedExperiment: ${r})`,s.Ok(r)}parseForcedVariationData(t,e=!1){const i=this.clientConfiguration.featureFlags.get(t.featureKey);if(!i)return Ot.error`Simulated feature flag '${t.featureKey}' not found`,null;let a=null;if(0===t.experimentId)return a={featureKey:t.featureKey,rule:null,varByExp:null,simulated:e},a;for(const r of i.rules){if(t.experimentId!==r.experimentId)continue;const i=r.variationByExposition.find(e=>e.variationId===t.variationId);if(i)return a={featureKey:t.featureKey,rule:{type:r.type,experimentId:r.experimentId},varByExp:{variationKey:i.variationKey,variationId:i.variationId},simulated:e},a}return Ot.error`Simulated variation ${t.variationId} not found`,null}simulatedVariationFromJson(t,e){if(Ot.debug`CALL: VariationConfiguration.simulatedVariationFromJson(featureKey: ${t}, data: ${e})`,!this.isSimulatedVariationJson(e))return null;const i=this.parseForcedVariationData({featureKey:t,variationId:e.varId,experimentId:e.expId},!0);return Ot.debug`RETURN: VariationConfiguration.simulatedVariationFromJson(featureKey: ${t}, data: ${e}) -> (forcedVariation: ${i})`,i}isSimulatedVariationJson(t){return t&&("number"==typeof t.expId||null===t.expId)}evaluateCBScores(t,e,i){if(!i||!i.cbScores)return null;Ot.debug`CALL: KameleoonClientImpl.evaluateCBScores(rule: ${t}, targetingData: ${i}, visitorIdentifier: ${e})`;const a=t.experimentId,r=new Me(i.cbScores.cbs).getValues().get(a);let n=null;if(void 0!==r){const i=t.variationByExposition,o=r.map(t=>i.filter(e=>t.ids.includes(e.variationId))).find(t=>t.length>0);if(o){let i=0;if(o.length>1){const r=_i.getHashDouble({visitorIdentifier:e,respoolTime:t.respoolTime,id:String(a)});Ot.debug`Calculated cbs hash ${r} for code ${e}`,i=Math.min(Math.floor(r*o.length),o.length-1)}n=o[i]}}return Ot.debug`RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${t}, targetingData: ${i}, visitorIdentifier: ${e}) -> (variation: ${n})`,n}}class Pi{constructor({siteCode:t,externalEventSource:e,urlProvider:i}){this.url=i.getEventSourceUrl(),this.siteCode=t,this.eventSource=e,this.isConnectionOpen=!1}get isOpen(){return this.isConnectionOpen}open(t){this.eventSource.open({onEvent:this.handleMessage(t),url:this.url,eventType:"configuration-update-event"}),this.isConnectionOpen=!0,Ot.info`Established a new SSE connection with: ${this.url}`}close(){this.eventSource.close(),this.isConnectionOpen=!1,Ot.info`SSE connection: '${this.url}' was successfully closed`}onError(t){this.eventSource.onError?this.eventSource.onError(t):Ot.warning("EventSource does not have `onError` method provided. Real-time errors won't be handled.")}handleMessage(t){return e=>{Ot.debug`Received new message from: ${this.url}`;const i=JSON.parse(e.data),{siteCode:a,ts:r}=i;this.siteCode===a&&t(r)}}}const Ki=16,Gi=31536e3;class Bi{constructor(){this.isConsentRequired=!1}set consentRequired(t){this.isConsentRequired=t}get consentRequired(){return this.isConsentRequired}set getData(t){this.getDataCallback=t}set setData(t){this.setDataCallback=t}get setData(){if(this.setDataCallback)return this.setDataCallback;throw new Error("Missing setDataCallback!")}validateVisitorCode(t){return 0===t.length?s.Err(new c(o.VisitorCodeEmpty)):t.length>255?s.Err(new c(o.VisitorCodeMaxLength)):s.Ok()}getVisitorCode(t){if(Ot.debug`CALL: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${t})`,!this.getDataCallback||!this.setDataCallback)throw new Error("Missing getDataCallback or setDataCallback methods in getVisitorCode!");let e;const i=this.getDataCallback(Di.VisitorCode);return i&&(e=i),e||(t?(this.validateVisitorCode(t).throw(),e=t,Ot.debug`Used default visitor code: ${e}`):(e=this.generateVisitorCode(),Ot.debug`Generated new visitor code: ${e}`)),this.processSimulatedVariations(e),this.isConsentRequired||this.setDataCallback({visitorCode:e,key:Di.VisitorCode,maxAge:Gi,path:"/"}),Ot.debug`RETURN: VisitorCodeManager.getVisitorCode(defaultVisitorCode: ${t}) -> (visitorCode: ${e})`,e}processSimulatedVariations(t){if(this.variationConfiguration){const e=this.getSimulatedVariations(t);try{this.variationConfiguration.clearSimulatedVariations(t).throw(),null!==e&&e.length>0&&this.variationConfiguration.updateForcedFeatureVariations(t,e).throw()}catch(t){t instanceof Error&&Ot.error`Failed to process simulated variations: ${t.message}`}}}getSimulatedVariations(t){Ot.debug`CALL: VisitorCodeManager.getSimulatedVariations(visitorCode: ${t})`;const e=this.getDataCallback(Di.KameleoonSimulationFFData);let i=null;if("string"==typeof e&&e.length>0)try{const t=JSON.parse(decodeURIComponent(e));t&&"object"==typeof t&&(i=Object.entries(t).map(([t,e])=>this.variationConfiguration.simulatedVariationFromJson(t,e)).filter(t=>null!==t))}catch(t){t instanceof Error&&Ot.error`Failed to parse simulated variations: ${t.message}`}return Ot.debug`RETURN: VisitorCodeManager.getSimulatedVariations(visitorCode: ${t}) -> (variations: ${i})`,i}generateVisitorCode(){const t="abcdefghijklmnopqrstuvwxyz0123456789",e=[];for(let i=0;i<16;i++)e.push(t[Math.floor(36*Math.random())]);return e.join("")}setVariationConfiguration(t){this.variationConfiguration||(this.variationConfiguration=t)}}var zi;!function(t){t[t.Kb=1e3]="Kb",t[t.Mb=1e6]="Mb",t[t.Gb=1e9]="Gb"}(zi||(zi={}));const qi=10*zi.Mb;class ji{constructor(t){this.currentSize=0,this.resultBody=[],this.hasUserAgent=!1,this.trackingVisitors={},this.prng=t}getTrackingBody(){const t={body:this.resultBody.join("\n"),hasUserAgent:this.hasUserAgent};return this.cleanup(),t}addData({visitorCode:t,variationData:e,visitorData:i,userAgent:a,isConsentProvided:r,isMappingIdentifier:n}){const o=[],s=this.getVariationDataLines(e),u=this.getVisitorDataLines(i);return o.push(...s,...u),this.addVisitorTrackingLines({visitorCode:t,lines:o,userAgent:a,isConsentProvided:r,isMappingIdentifier:n})}getVisitorDataLines(t){const e=[];for(const i of t){let t;if(!(i instanceof qe||i.data.type!==Xt.Conversion&&i.data.type!==Xt.PageView)){const e=i.data.nonce;e?t=e:(t=ke.getNonce(this.prng),i.data.nonce=t)}t||(t=ke.getNonce(this.prng)),e.push(i.url+z+t)}return e}getVariationDataLines(t){const e=[];return t.forEach(t=>{e.push(T+q+t.experimentId+_+t.variationId+z+ke.getNonce(this.prng))}),e}prepareVisitorBody(t){const e=this.trackingVisitors[t];if(!e)return s.Err();const{lines:i,userAgent:a,isMappingIdentifier:r,isConsentProvided:n}=e,o=this.getIdentifier(t,r);if(i.length)i.forEach((t,e)=>{i[e]=t+o}),Ot.debug`Sending tracking request for unsent data ${i} of visitor ${t} with given (or not required) consent ${n}`;else if(n){const e=this.getActivityLine();i.push(e+o),Ot.debug`Sending tracking request for activity of visitor ${t} with given consent`}else Ot.debug`No data to send for visitor ${t} with no consent`;a&&i.length&&(i[0]+=gt+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(t){let e=0;return e+=t.reduce((t,e)=>t+4*e.length,0),e+this.currentSize>qi?s.Err():(this.currentSize+=e,s.Ok())}addVisitorTrackingLines({visitorCode:t,lines:e,userAgent:i,isConsentProvided:a,isMappingIdentifier:r}){return this.trackingVisitors[t]?(i&&(this.trackingVisitors[t].userAgent=i),this.trackingVisitors[t].lines.push(...e)):this.trackingVisitors[t]={isMappingIdentifier:r,isConsentProvided:a,userAgent:i,lines:e},this.prepareVisitorBody(t)}getActivityLine(){return D+z+ke.getNonce(this.prng)}getIdentifier(t,e){return(e?lt:U)+t}}class Hi{constructor({dataManager:t,trackingStorage:e,variationConfiguration:i,trackingInterval:a,requester:r,prng:n}){this.intervalId=null,Ot.debug`CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng)`,this.dataManager=t,this.trackingStorage=e,this.variationConfiguration=i,this.requester=r,this.bodyProvider=new ji(n);try{this.intervalId=setInterval(()=>{this.sendDataAll()},a)}catch(t){throw this.intervalId&&clearInterval(this.intervalId),t}Ot.debug`RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng)`}scheduleVisitor(t,e){Ot.debug`CALL: Tracker.scheduleVisitor(visitorCode: ${t}, isConsentProvided: ${e})`,this.trackingStorage.read().and(i=>{i.scheduledVisitors[`_${t}`]={isConsentProvided:e},this.trackingStorage.write(i)}),Ot.debug`RETURN: Tracker.scheduleVisitor(visitorCode: ${t}, isConsentProvided: ${e})`}checkIsIdentifier(t){var e,i;const a=this.dataManager.isUniqueIdentifier(t),r=null!==(i=null===(e=this.dataManager.getMappingIdentifier(t))||void 0===e?void 0:e.mappingIdentifier)&&void 0!==i?i:t;let n=!1;if(a){const e=this.dataManager.getLinkedVisitor(t),i=this.dataManager.identifierCustomDataIndex;e||"number"!=typeof i?n=!0:this.dataManager.storeData(t,new Se(i,t))}return n&&t!=r}getUserAgent(t){const e=this.dataManager.getVisitorData(t);if(e){const t=e[Xt.UserAgent];if(t)return t.value}}sendDataAll(){return u(this,void 0,void 0,function*(){const t=this.trackingStorage.read();if(!t.ok)return;const{scheduledVisitors:e}=t.data;yield this.sendData(e)})}sendDataForVisitor(t,e){return u(this,void 0,void 0,function*(){this.trackingStorage.read().ok&&(yield this.sendData({[`_${t}`]:{isConsentProvided:e}}))})}sendData(t){return u(this,void 0,void 0,function*(){const e={},i=[],a=[];for(const[r,{isConsentProvided:n}]of Object.entries(t)){let t=r.startsWith("_")?r.substring(1):r;const o=this.checkIsIdentifier(t),s=this.getUserAgent(t),u=this.getUnsentVisitorData(t,n),d=this.getUnsentVariationData(t,n);if(!this.bodyProvider.addData({visitorCode:t,variationData:d,visitorData:u,userAgent:s,isConsentProvided:n,isMappingIdentifier:o}).ok){Ot.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}e[t]={visitorData:u,variationData:d},a.push({visitorCode:t,isConsentProvided:n}),i.push(r)}const{body:r,hasUserAgent:n}=this.bodyProvider.getTrackingBody();if(0!==i.length&&this.trackingStorage.read().and(t=>{i.forEach(e=>{delete t.scheduledVisitors[e]}),this.trackingStorage.write(t)}),!r)return;if((yield this.requester.track(r,n)).ok)Ot.info`Successful request for tracking visitors: ${a}, data: ${e}`,this.updateDataStatus(e,xt.Sent);else{Ot.error("Tracking request failed"),Ot.info`Failed request for tracking visitors: ${a}, data: ${e}`,this.updateDataStatus(e,xt.Unsent);let t={};for(let{visitorCode:e,isConsentProvided:i}of a)e=`_${e}`,t[e]={isConsentProvided:i};this.addNotTrackedVisitors(t)}})}addNotTrackedVisitors(t){const e=this.trackingStorage.read();if(!e.ok)return;const{scheduledVisitors:i}=e.data;Object.entries(t).forEach(([t,{isConsentProvided:e}])=>{i[t]||(i[t]={isConsentProvided:e})}),this.trackingStorage.write({scheduledVisitors:i})}updateDataStatus(t,e){let i={};for(const[a,{visitorData:r,variationData:n}]of Object.entries(t)){const t=r.filter(t=>!(t instanceof qe)).map(t=>{const i=t;return i.status=e,i});t.length&&(i[a]=t);const o=n.map(t=>String(t.experimentId));this.variationConfiguration.updateDataStatus({visitorCode:a,experimentIdList:o,status:e})}0!==Object.keys(i).length&&(e===xt.Sent?this.dataManager.storeTrackedData(i):this.dataManager.storeData(i))}getUnsentVisitorData(t,e){const i=this.dataManager.getUnsentData(t),a=[];if(!i.length)return[];for(const t of i)t.url&&(!e&&(t instanceof qe||t.data.type!==Xt.Conversion)||a.push(t));if(a.length){const e=a.filter(t=>!(t instanceof qe)).map(t=>{const e=t;return e.status=xt.Pending,e});this.dataManager.storeTrackedData({[t]:e})}return a}getUnsentVariationData(t,e){const i=this.variationConfiguration.getUnsentData(t),a=new Set;if(!i.length)return[];const r=i.filter(t=>{const i=t.isTargetedRule||e;return i&&a.add(String(t.experimentId)),i});return this.variationConfiguration.updateDataStatus({visitorCode:t,experimentIdList:Array.from(a),status:xt.Pending}),r}}class Wi{constructor({siteCode:t,dependencies:e,configuration:i,internalConfiguration:a,stubMode:r}){var n;if(this.initialized=!1,this.stubMode=r,r)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 o=null==a?void 0:a.externals.externalLogger;o&&Ot.setLogger(o),je.setConditionFactoryInstance(new Ii),Ot.debug`CALL: new KameleoonClient(siteCode: ${t}, dependencies: ${e}, configuration: ${i})`;const{settings:s}=new Le(t,i);this.environment=s.environment;const{externalStorage:u,externalEventSource:d,externalPackageInfo:l,externalVisitorCodeManager:c,externalRequester:h,externalPRNG:g,customDataManager:f}=a.externals,{useAbortController:p}=a.settings,v=new qt(10),m=new Vi(u,Di.ClientData),C=new Vi(u,Di.VariationData),E=new Vi(u,Di.ForcedExperimentVariation),y=new Vi(u,Di.ForcedFeatureVariation),I=new Vi(u,Di.ConsentData),D=new Vi(u,Di.TrackingData);let T=f;if(!T){const t=new Vi(u,Di.TargetingData),e=new Vi(u,Di.DataInfo);T=new bi({dataStorage:t,infoStorage:e,cleanupInterval:s.cleanupInterval,packageInfo:l})}const k=null!==(n=null==e?void 0:e.urlProvider)&&void 0!==n?n:new zt;k.initialize({domain:s.networkDomain,siteCode:s.siteCode,packageInfo:l,environment:s.environment});const R=new $t({urlProvider:k,useAbortController:p,packageInfo:l,externalRequester:h,requestTimeout:s.requestTimeout,trackRetryDelay:s.trackRetryDelay}),V=new Pi({siteCode:s.siteCode,externalEventSource:d,urlProvider:k}),S=new jt,w=new Yt({urlProvider:k,storage:m,updateInterval:s.updateInterval,dataManager:T,eventManager:S,requester:R,eventSource:V,externalVisitorCodeManager:c,externalPackageInfo:l,defaultDataFile:null==i?void 0:i.defaultDataFile}),b=new Li(C,E,y,c,w),A=new Hi({dataManager:T,trackingStorage:D,variationConfiguration:b,requester:R,trackingInterval:s.trackingInterval,prng:g});this.tracker=A,this.variationConfiguration=b,this.requester=R,this.trackingCache=v,this.dataManager=T,this.clientConfiguration=w,this.externalPackageInfo=l,this.consentDataStorage=I,this.visitorCodeManager=c,this.eventManager=S,null!==s.cleanupInterval&&new Si(u,s.cleanupInterval),Ot.debug`RETURN: new KameleoonClient(siteCode: ${t}, dependencies: ${e}, configuration: ${i})`}initialize(){return u(this,void 0,void 0,function*(){if(this.stubMode)return!1;Ot.info("CALL: KameleoonClient.initialize()");const t=yield this.clientConfiguration.initialize();return t.throw(),this.initialized=!0,Ot.info`RETURN: KameleoonClient.initialize() -> (result: ${t.ok})`,t.ok})}addData(t,...e){if(this.stubMode)throw new c(o.Initialization);if(Ot.info`CALL: KameleoonClient.addData(visitorCode: ${t}, data: ${e})`,this.visitorCodeManager.validateVisitorCode(t).throw(),!this.initialized)throw new c(o.Initialization);this.dataManager.storeData(t,...e).throw(),Ot.info`RETURN: KameleoonClient.addData(visitorCode: ${t}, data: ${e})`}getRemoteVisitorData({visitorCode:t,shouldAddData:e=!0,filters:i=ue}){return u(this,void 0,void 0,function*(){if(this.stubMode)throw new c(o.Initialization);if(Ot.info`CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${t}, shouldAddData: ${e}, filters: ${i})`,!this.initialized)throw new c(o.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const{previousVisitAmount:a}=i;if("number"==typeof a&&(a<1||a>25))throw new c(o.VisitAmount);const r=this.dataManager.isUniqueIdentifier(t),n=(yield this.requester.getVisitorData({visitorCode:t,filters:i,isMappingIdentifier:r})).throw(),{visitorData:s,storageVisitorData:u,visitsData:d,mappingIdentifier:l}=_e.parseVisitorData({data:n,filters:i,visitorCode:t,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});for(const i of u)(e||this.dataManager.isPersistentCustomData(i))&&this.addData(t,i);return d&&e&&this.addData(t,d),(null==i?void 0:i.visitorCode)&&l&&this.dataManager.setMappingIdentifier(t,l),Ot.info`RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${t}, shouldAddData: ${e}, filters: ${i}) -> (visitorData: ${s})`,s})}trackConversion({visitorCode:t,goalId:e,negative:i,revenue:a,metadata:r}){this.stubMode||(Ot.info`CALL: KameleoonClient.trackConversion(visitorCode: ${t}, goalId: ${e}, negative: ${i}, revenue: ${a}, metadata: ${r})`,this.addData(t,new we({goalId:e,revenue:a,negative:i,metadata:r})),this.flush(t),Ot.info`RETURN: KameleoonClient.trackConversion(visitorCode: ${t}, goalId: ${e}, negative: ${i}, revenue: ${a}, metadata: ${r})`)}flush(t){var e;if(this.stubMode)throw new c(o.Initialization);let i,a=!1;if("string"==typeof t?i=t:t&&(i=t.visitorCode,a=null!==(e=t.instant)&&void 0!==e&&e),Ot.info`CALL: KameleoonClient.flush(visitorCode: ${i}, instant: ${a})`,!this.initialized)throw new c(o.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 t of this.dataManager.unsentDataVisitors)this.tracker.scheduleVisitor(t,this._isConsentProvided(t));for(const t of this.variationConfiguration.getVisitorsWithUnsentData())this.tracker.scheduleVisitor(t,this._isConsentProvided(t));a&&this.tracker.sendDataAll()}Ot.info`RETURN: KameleoonClient.flush(visitorCode: ${i}, instant: ${a})`}getFeatureFlags(){if(this.stubMode)throw new c(o.Initialization);if(Ot.info("CALL: KameleoonClient.getFeatureFlags()"),!this.initialized)throw new c(o.Initialization);const t=this.clientConfiguration.featureFlags,e=[];return t.forEach(({id:t,featureKey:i})=>{e.push({id:t,key:i})}),Ot.info`RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${e})`,e}getVisitorFeatureFlags(t){if(this.stubMode)throw new c(o.Initialization);if(Ot.info`CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${t})`,!this.initialized)throw new c(o.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const e=this._getActiveFeatureVariations(t),i=[];return e.forEach(({featureFlagId:t,featureKey:e})=>{i.push({id:t,key:e})}),Ot.info`RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${t}) -> (FeatureFlags: ${i})`,i}getVariation({visitorCode:t,featureKey:e,track:i=!0}){if(this.stubMode)throw new c(o.Initialization);Ot.info`CALL: KameleoonClient.getVariation(visitorCode: ${t}, featureKey: ${e}, track: ${i})`,this.visitorCodeManager.validateVisitorCode(t).throw();const a=this._getFeatureVariation({visitorCode:t,featureKey:e,track:i}).throw();return Ot.info`RETURN: KameleoonClient.getVariation(visitorCode: ${t}, featureKey: ${e}, track: ${i}) -> (variation: ${a})`,a}getVariations({visitorCode:t,onlyActive:e=!1,track:i=!0}){if(this.stubMode)throw new c(o.Initialization);Ot.info`CALL: KameleoonClient.getVariations(visitorCode: ${t}, onlyActive: ${e}, track: ${i})`,this.visitorCodeManager.validateVisitorCode(t).throw();const a=new Map,r=this.clientConfiguration.featureFlags;for(const n of r.values()){const r=this._getFeatureVariation({visitorCode:t,featureKey:n.featureKey,track:i});r.ok&&(e&&r.data.key===ne||a.set(n.featureKey,r.data))}return Ot.info`RETURN: KameleoonClient.getVariations(visitorCode: ${t}, onlyActive: ${e}, track: ${i}) -> (variations: ${a})`,a}getActiveFeatureFlags(t){if(this.stubMode)throw new c(o.Initialization);if(Ot.info`CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${t})`,!this.initialized)throw new c(o.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const e=this._getActiveFeatureVariations(t),i=new Map;return e.forEach(e=>{const{variationKey:a,featureKey:r,variationId:n,experimentId:o}=e;let s=[];null!==n&&null!==o&&(s=this._getFeatureVariables({visitorCode:t,featureKey:r,variationKey:a}));const u=s.map(t=>_e.parseFeatureVariable(t).throw());i.set(e.featureKey,{key:a,id:n,experimentId:o,variables:u})}),Ot.info`RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${t}) -> (FeatureFlags: ${i})`,i}getFeatureFlagVariationKey(t,e){if(this.stubMode)throw new c(o.Initialization);Ot.info`CALL: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${t}, featureKey: ${e})`,this.visitorCodeManager.validateVisitorCode(t).throw();const{key:i}=this._getFeatureVariation({visitorCode:t,featureKey:e,track:!0}).throw();return Ot.info`RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${t}, featureKey: ${e}) -> (variationKey: ${i})`,i}getFeatureFlagVariable({visitorCode:t,featureKey:e,variableKey:i}){if(this.stubMode)throw new c(o.Initialization);Ot.info`CALL: KameleoonClient.getFeatureFlagVariable(visitorCode: ${t}, featureKey: ${e}, variableKey: ${i})`,this.visitorCodeManager.validateVisitorCode(t).throw();const{key:a}=this._getFeatureVariation({visitorCode:t,featureKey:e,track:!0}).throw(),r=this._getFeatureVariables({visitorCode:t,featureKey:e,variationKey:a}).find(t=>t.key===i);if(!r)throw new c(o.FeatureFlagVariableNotFound,i,t);const{type:n,value:s}=_e.parseFeatureVariable(r).throw(),u={type:n,value:s};return Ot.info`RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${t}, featureKey: ${e}, variableKey: ${i}) -> (FeatureFlagVariable: ${u})`,u}getFeatureFlagVariables(t,e){if(this.stubMode)throw new c(o.Initialization);Ot.info`CALL: KameleoonClient.getFeatureFlagVariables(visitorCode: ${t}, featureKey: ${e})`,this.visitorCodeManager.validateVisitorCode(t).throw();const{key:i}=this._getFeatureVariation({visitorCode:t,featureKey:e,track:!0}).throw(),a=this._getFeatureVariables({visitorCode:t,featureKey:e,variationKey:i}),r=[];for(const t of a){const e=_e.parseFeatureVariable(t).throw();r.push(e)}return Ot.info`RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${t}, featureKey: ${e}) -> (FeatureFlagVariables: ${r})`,r}isFeatureFlagActive(t,e){if(this.stubMode)throw new c(o.Initialization);let[i,a,r]=["","",!0];"string"==typeof t?(i=t,a=e):([i,a]=[t.visitorCode,t.featureKey],void 0!==t.track&&(r=t.track)),Ot.info`CALL: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track ${r})`,this.visitorCodeManager.validateVisitorCode(i).throw();try{const{key:t}=this._getFeatureVariation({visitorCode:i,featureKey:a,track:r}).throw(),e=t!==ne;return Ot.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track: ${r}) -> (isActive: ${e})`,e}catch(t){if(t instanceof c&&t.type===o.FeatureFlagEnvironmentDisabled)return Ot.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track: ${r}) -> (isActive: false)`,!1;throw t}}getRemoteData(t){return u(this,void 0,void 0,function*(){if(this.stubMode)return null;Ot.info`CALL: KameleoonClient.getRemoteData(key: ${t})`;const e=yield this.requester.getRemoteData(t);return Ot.info`RETURN: KameleoonClient.getRemoteData(key: ${t}) -> (remoteData: ${e})`,e.throw()})}getVisitorWarehouseAudience({visitorCode:t,customDataIndex:e,warehouseKey:i}){return u(this,void 0,void 0,function*(){if(this.stubMode)return null;Ot.info`CALL: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${t}, customDataIndex: ${e}, warehouseKey: ${i})`,this.visitorCodeManager.validateVisitorCode(t).throw();const a=yield this.getRemoteData(i||t);if(!a)throw new c(o.RemoteData,`No data found for ${i||t} key`);if(!a[oe]||0===Object.keys(a[oe]).length)return Ot.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${t}, customDataIndex: ${e}, warehouseKey: ${i}) -> (customData: null)`,null;const r=new Se(e,...Object.keys(a[oe]));return this.dataManager.storeData(t,r),Ot.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${t}, customDataIndex: ${e}, warehouseKey: ${i}) -> (customData: ${r})`,r})}onEvent(t,e){if(this.stubMode)throw new c(o.Initialization);if(Ot.info`CALL: KameleoonClient.onEvent(event: ${t}, callback)`,!this.initialized)throw new c(o.Initialization);this.eventManager.addEventHandler(t,e),Ot.info`RETURN: KameleoonClient.onEvent(event: ${t}, callback)`}getEngineTrackingCode(t){if(this.stubMode)return"";Ot.info`CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${t})`,this.visitorCodeManager.validateVisitorCode(t).throw();const e=ke.getTrackingCode(this.trackingCache,t);return Ot.info`RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${t}) -> (trackingCode: ${e})`,e}isInitialized(){return Ot.debug`CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`,this.initialized}setLogLevel(t){Ot.setLogLevel(t)}setForcedVariation({visitorCode:t,experimentId:e,variationKey:i,forceTargeting:a=!0}){this.stubMode||(Ot.info`CALL: KameleoonClient.setForcedVariation(visitorCode: '${t}', experimentId: ${e}, variationKey: '${i}', forceTargeting: ${a})`,this.visitorCodeManager.validateVisitorCode(t).throw(),this._setForcedVariation({visitorCode:t,experimentId:e,variationKey:i,forceTargeting:a}).throw(),Ot.info`RETURN: KameleoonClient.setForcedVariation(visitorCode: '${t}', experimentId: ${e}, variationKey: '${i}', forceTargeting: ${a})`)}evaluateAudiences(t){if(this.stubMode)return;Ot.info`CALL: KameleoonClient.evaluateAudiences(visitorCode: ${t})`,this.visitorCodeManager.validateVisitorCode(t).throw();const e=[],i=this.dataManager.getVisitorData(t);for(let a of this.clientConfiguration.segments.values()){if(!a.audienceTracking)continue;const r=ke.checkTargeting({segment:a,visitorCode:t,targetingData:i,experimentId:null,clientConfiguration:this.clientConfiguration,packageInfo:this.externalPackageInfo,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});r.ok&&r.data&&(Ot.info`Visitor ${t} has been targeted for ${a}`,e.push(new wi(Number(a.id))))}0!==e.length&&this.dataManager.storeData(t,...e),this.flush(t),Ot.info`RETURN: KameleoonClient.evaluateAudiences(visitorCode: ${t})`}setUserConsent({visitorCode:t,consent:e,setData:i}){this.stubMode||(Ot.info`CALL: KameleoonClient.setUserConsent(visitorCode: ${t}, consent: ${e}, setData: ${i})`,this.visitorCodeManager.validateVisitorCode(t).throw(),this.updateConsentData(t,e),e?i({visitorCode:t,key:Di.VisitorCode,maxAge:Gi,path:"/"}):this.visitorCodeManager.consentRequired&&i({visitorCode:"",key:Di.VisitorCode,maxAge:0,path:"/"}),this.flush(t),Ot.info`RETURN: KameleoonClient.setUserConsent(visitorCode: ${t}, consent: ${e}, setData: ${i})`)}updateConsentData(t,e){const i=this.consentDataStorage.read();if(!i.ok)return void(i.error.type===o.StorageEmpty&&this.consentDataStorage.write({[t]:{consent:e}}));const a=i.data;a[t]={consent:e},this.consentDataStorage.write(a)}_isConsentProvided(t){Ot.debug`CALL: KameleoonClient._isConsentProvided(visitorCode: ${t})`;const{isConsentRequired:e}=this.clientConfiguration,i=this.consentDataStorage.read();let a=!1;if(e){if(i.ok){const e=i.data[t];a="boolean"==typeof e?e:e&&e.consent}}else a=!0;return Ot.debug`RETURN: KameleoonClient._isConsentProvided(visitorCode: ${t}) -> (isConsentProvided: ${a})`,a}_getFeatureVariables({visitorCode:t,featureKey:e,variationKey:i}){Ot.debug`CALL: KameleoonClient._getFeatureVariables(visitorCode: ${t}, featureKey: ${e}, variationKey: ${i})`;const a=this.clientConfiguration.featureFlags.get(e);if(!a)throw new c(o.FeatureFlagConfigurationNotFound,e);const r=a.variations.find(t=>t.key===i);if(!r)throw new c(o.FeatureFlagVariationNotFound,i,t);return Ot.debug`RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${t}, featureKey: ${e}, variationKey: ${i}) -> (variables: ${r.variables})`,r.variables}_getActiveFeatureVariations(t){Ot.debug`CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${t})`;const e=this.clientConfiguration.featureFlags,i=[];for(const a of e.values()){if(!a.environmentEnabled)continue;const e=this._evaluate({visitorCode:t,featureFlag:a,track:!1,save:!1});e.variationKey!==ne&&i.push({variationKey:e.variationKey,variationId:e.variationId,experimentId:e.experimentId,featureFlagId:a.id,featureKey:a.featureKey,rule:null,isTargetedRule:e.ruleType===_t.TARGETED_DELIVERY})}return Ot.debug`RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${t}) -> (activeVariations: ${i})`,i}_evaluate({visitorCode:t,featureFlag:e,track:i,save:a}){let r;Ot.debug`CALL: KameleoonClient._evaluate(visitorCode: ${t}, featureFlag: ${e}, track: ${i}, save: ${a})`;let n=null;const o=this.dataManager.getVisitorData(t),s=this.variationConfiguration.getForcedFeatureVariation(t,e.featureKey);if(s.ok&&(n=s.data),n)r=Wi.EvaluatedExperiment.fromForcedFeatureVariation(e.defaultVariationKey,n);else if(this._isVisitorNotInHoldout(t,i,a,e,o)&&this._isFFUnrestrictedByMEGroup(t,e,o)){const n=this._getCodeForHash(t,e.bucketingCustomDataIndex,o),s=this.variationConfiguration.getVariation({visitorCode:t,visitorIdentifier:n,featureFlag:e,track:i,withAssignment:a,targetingData:o,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo}).throw();r=Wi.EvaluatedExperiment.fromVariationData(s)}else r=Wi.EvaluatedExperiment.fromDefaultVariationKey(e.defaultVariationKey);return a&&!r.isSimulated&&null!==r.experimentId&&null!==r.variationId&&this.variationConfiguration.updateStoredVariations(t,{[r.experimentId]:{variationId:r.variationId,isTargetedRule:r.ruleType===_t.TARGETED_DELIVERY,status:i?xt.Unsent:xt.Sent}}),this.eventManager.fireEvent(Bt.Evaluation,{featureKey:e.featureKey,variation:{key:r.variationKey,experimentId:r.experimentId,id:r.variationId}}),Ot.debug`RETURN: KameleoonClient._evaluate(visitorCode: ${t}, featureFlag: ${e}, track: ${i}, save: ${a}) -> (evalExp: ${r})`,r}_isFFUnrestrictedByMEGroup(t,e,i){const a=e.mutuallyExclusiveGroup;if(!a)return!0;Ot.debug`CALL: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${t}, featureFlag: ${e}, visitorData: ${i})`;let r=!0;const n=this.clientConfiguration.meGroups.get(a);if(n){const o=this._getCodeForHash(t,e.bucketingCustomDataIndex,i),s=_i.getHashDoubleForMEGroup(o,a);Ot.debug`Calculated meGroup hash ${s} for code: ${o}, meGroup: ${a}`,r=n.getFeatureFlagByHash(s)===e}return Ot.debug`RETURN: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${t}, featureFlag: ${e}, visitorData: ${i}) -> (selected: ${r})`,r}_getFeatureVariation({visitorCode:t,featureKey:e,track:i}){if(Ot.debug`CALL: KameleoonClient._getFeatureVariation(visitorCode: ${t}, featureKey: ${e}, track: ${i})`,!this.initialized)return s.Err(new c(o.Initialization));const a=this.clientConfiguration.featureFlags.get(e);if(!a)return s.Err(new c(o.FeatureFlagConfigurationNotFound,e));if(!a.environmentEnabled)return s.Err(new c(o.FeatureFlagEnvironmentDisabled,a.featureKey,this.environment));const r=this._evaluate({visitorCode:t,featureFlag:a,track:i,save:!0}),{experimentId:n,variationId:u,variationKey:d,isSimulated:l}=r;let h=new Map,g=!1;try{this._getFeatureVariables({visitorCode:t,featureKey:e,variationKey:d}).forEach(t=>{g||t.type!==Nt.JS&&t.type!==Nt.CSS||(g=!0);const e=_e.parseFeatureVariable(t).throw();h.set(t.key,e)})}catch(t){}n&&"number"==typeof u&&!l&&ke.updateCache({cacheManager:this.trackingCache,hasJsCssVariables:g,visitorCode:t,experimentId:n,variationId:u}),i&&!l&&this.tracker.scheduleVisitor(t,this._isConsentProvided(t));const f={key:d,id:u,experimentId:n,variables:h};return Ot.debug`RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${t}, featureKey: ${e}, track: ${i}) -> (variation: ${f})`,s.Ok(f)}_isVisitorNotInHoldout(t,e,i,a,r){const n=this.clientConfiguration.holdout;if(!n)return!0;Ot.debug`CALL: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${t}, track: ${e}, save: ${i}, featureFlag: ${a}, visitorData: ${r})`;let o=!0;const s=this._getCodeForHash(t,null==a?void 0:a.bucketingCustomDataIndex,r),u=_i.getHashDouble({visitorIdentifier:s,respoolTime:null,id:String(n.experimentId)});Ot.debug`Calculated holdoutHash: ${u} for visitorCode: ${s}`;let d=ke.getVariationByHash(n.variationByExposition,u);return null!==d&&(o="in-holdout"!==d.variationKey,i&&this.variationConfiguration.updateStoredVariations(t,{[n.experimentId]:{variationId:d.variationId,isTargetedRule:!1,status:e?xt.Unsent:xt.Sent}})),Ot.debug`RETURN: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${t}, track: ${e}, save: ${i}, featureFlag: ${a}, visitorData: ${r}) -> (isNotInHoldout: ${o})`,o}_setForcedVariation({visitorCode:t,experimentId:e,variationKey:i,forceTargeting:a=!0}){if(Ot.debug`CALL: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${e}, variationKey: '${i}', forceTargeting: ${a})`,null===i){const r=this.variationConfiguration.updateForcedExperimentVariation(t,e,null);return Ot.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${e}, variationKey: '${i}', forceTargeting: ${a}) -> (writeResult: ${r})`,r}let r=null,n=null;if(r=this.clientConfiguration.experimentMap.get(e),!r)return Ot.error`Experiment with id ${e} not found for visitor ${t}`,s.Err(new c(o.FeatureFlagExperimentNotFound,e,t));if(n=r.variations.get(i),void 0===n)return Ot.error`Variation with key ${i} not found in experiment ${r} for visitor ${t}`,s.Err(new c(o.FeatureFlagVariationNotFound,i,t));r={type:r.type,experimentId:e},n={variationKey:i,variationId:n};const u=this.variationConfiguration.updateForcedExperimentVariation(t,e,{rule:r,varByExp:n,forceTargeting:a});return Ot.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${e}, variationKey: '${i}', forceTargeting: ${a}) -> (writeResult: ${u})`,u}_getCodeForHash(t,e,i){var a;let r;if(Ot.debug`CALL: KameleoonClient._getCodeForHash(visitorCode: ${t}, bucketingCustomDataIndex: ${e}, visitorData: ${i})`,null!=e){const t=null==i?void 0:i.customData;if(t){const i=null===(a=t[e])||void 0===a?void 0:a.value[0];i&&(r=i)}}return r||(r=this.dataManager.getVisitorIdentifier(t)),Ot.debug`RETURN: KameleoonClient._getCodeForHash(visitorCode: ${t}, bucketingCustomDataIndex: ${e}, visitorData: ${i}) -> (codeForHash: ${r})`,r}}Wi.EvaluatedExperiment=class{static fromForcedFeatureVariation(t,e){var i,a,r;let n=t;return e.varByExp?n=e.varByExp.variationKey:e.rule&&e.rule.type===_t.EXPERIMENTATION&&(n=ne),{variationKey:n,variationId:(null===(i=e.varByExp)||void 0===i?void 0:i.variationId)||null,experimentId:(null===(a=e.rule)||void 0===a?void 0:a.experimentId)||null,ruleType:(null===(r=e.rule)||void 0===r?void 0:r.type)||null,isSimulated:e.simulated}}static fromVariationData(t){var e,i;return{variationKey:t.variationKey,variationId:t.variationId,experimentId:t.experimentId,ruleType:null!==(i=null===(e=t.rule)||void 0===e?void 0:e.type)&&void 0!==i?i:null,isSimulated:!1}}static fromDefaultVariationKey(t){return{variationKey:t,variationId:null,experimentId:null,ruleType:null,isSimulated:!1}}};class Yi{static simulateSuccessRequest(t,e){switch(t){case p.Tracking:return new Promise(t=>{t({status:204,json:()=>new Promise(t=>t(null)),text:()=>new Promise(t=>t("")),ok:!0})});case p.Configuration:case p.RemoteData:return new Promise(t=>{t({status:200,json:()=>new Promise(t=>t(e)),text:()=>new Promise(t=>t("")),ok:!0})});default:l(t)}}static getCookieValue(t,e){const i=t.split("; ").find(t=>{const[i,a]=t.split("=");return i===e&&""!==a});return i?i.split("=")[1]:null}}var Ji=s.Err,Xi=s.Ok;export{Be as ApplicationVersion,be as Browser,te as BrowserType,we as Conversion,Pe as Cookie,Se as CustomData,Kt as CustomDataScope,bi as DataManager,ze as DataProcessor,Vi as DataStorage,Ae as Device,Qt as DeviceType,Ft as Environment,Ji as Err,Bt as EventType,$e as GeolocationData,m as Header,g as HttpMethod,Wi as KameleoonCore,Xt as KameleoonData,c as KameleoonError,o as KameleoonException,Ot as KameleoonLogger,Di as KameleoonStorageKey,Yi as KameleoonUtils,Re as ListUtilities,wt as LogLevel,Mt as Milliseconds,v as NUMBER_OF_RETRIES,Xi as Ok,Oe as OperatingSystem,Zt as OperatingSystemType,Ve as PageView,_e as Parser,p as RequestType,se as SdkLanguageType,qe as StaticData,xt as TrackingStatus,We as Tree,Ge as UniqueIdentifier,Ke as UserAgent,ke as Utilities,Ki as VISITOR_CODE_LENGTH,ki as VISIT_DURATION,Te as Validator,Nt as VariableType,Bi as VisitorCodeManager};
2
- //# sourceMappingURL=javascript-sdk-core.es.min.js.map