@kameleoon/javascript-sdk 4.22.0 → 4.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
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}function i(t){if(Object.prototype.hasOwnProperty.call(t,"__esModule"))return t;var e=t.default;if("function"==typeof e){var i=function t(){var i=!1;try{i=this instanceof t}catch{}return i?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};i.prototype=e.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(t).forEach(function(e){var a=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(i,e,a.get?a:{enumerable:!0,get:function(){return t[e]}})}),i}var a,r,n,s={},o={},u=(r||(r=1,function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.Err=t.Ok=void 0;var e=function(){if(a)return o;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 i(t){return this.ok?this.data:t}function r(t){return this.ok&&t(this.data),this}return a=1,Object.defineProperty(o,"__esModule",{value:!0}),o.Err=o.Ok=void 0,o.Ok=function(a){return{ok:!0,data:a,throw:t,else:e,or:i,and:r}},o.Err=function(a){return{ok:!1,error:a,throw:t,else:e,or:i,and:r}},o}();Object.defineProperty(t,"Ok",{enumerable:!0,get:function(){return e.Ok}}),Object.defineProperty(t,"Err",{enumerable:!0,get:function(){return e.Err}})}(s)),s);function d(t,e,i,a){return new(i||(i=Promise))(function(e,r){function n(t){try{o(a.next(t))}catch(t){r(t)}}function s(t){try{o(a.throw(t))}catch(t){r(t)}}function o(t){var a;t.done?e(t.value):(a=t.value,a instanceof i?a:new i(function(t){t(a)})).then(n,s)}o((a=a.apply(t,[])).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"}(n||(n={}));const l={[n.CookieParse]:t=>`Couldn't parse cookie string: ${t}`,[n.JSONParse]:t=>`Couldn't parse JSON variable: ${t}`,[n.NumberParse]:t=>`It's not possible to parse value ${t} to Number`,[n.VersionParse]:t=>`It's not possible to parse a version value ${t} to Number, version should be in format x.x`,[n.SemanticVersionParse]:t=>`It's not possible to parse a version value ${t} to Number, version should be in format x.x.x`,[n.Initialization]:()=>"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods",[n.Credentials]:()=>"KameleoonClient can not be created without credentials",[n.StorageInitialization]:()=>"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed",[n.EventSourceInitialization]:()=>"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed",[n.FeatureFlagConfigurationNotFound]:t=>`No feature flag with key ${t} was found.`,[n.FeatureFlagEnvironmentDisabled]:(t,e)=>`Feature flag with key ${t} is disabled in ${e} environment.`,[n.FeatureFlagVariableNotFound]:(t,e)=>`No feature flag variable with key ${t} was found for ${e} visitorCode.`,[n.FeatureFlagVariationNotFound]:(t,e)=>`No feature flag variation with key ${t} was found for ${e} visitorCode.`,[n.FeatureFlagExperimentNotFound]:(t,e)=>`No feature flag experiment with id ${t} was found for ${e} visitorCode.`,[n.VisitAmount]:()=>"Visit amount must be a number between 1 and 25",[n.VisitorCodeMaxLength]:()=>"Visitor code can not be more than 255 characters long",[n.VisitorCodeEmpty]:()=>"Visitor code can not be empty",[n.StorageWrite]:t=>`Couldn't update storage for kameleoonClient: ${t}`,[n.StorageRead]:t=>`No data found in storage under ${t} key`,[n.StorageEmpty]:()=>"No data found in storage",[n.StorageParse]:(t,e)=>`Couldn't parse ${e} storage data, the data may be corrupted. Error: ${t}`,[n.ClientConfiguration]:t=>`Couldn't retrieve client configuration from Kameleoon Api. Error: ${t}`,[n.TargetingCondition]:t=>`${t} targeting condition is not yet supported.`,[n.AmongValuesCheck]:(t,e)=>`Couldn't parse value "${e}": ${t}`,[n.RangeCheck]:t=>`Couldn't parse value "${t}" as a range, value should be in format [x: number, y: number]`,[n.RemoteData]:t=>`Couldn't retrieve data from Kameleoon server. Error: ${t}`,[n.MaximumRetriesReached]:t=>`Maximum retries reached, request failed. Reason: ${t}`};function c(t){throw new Error(`Reaching an impossible state because of ${t}`)}class h extends Error{constructor(t,e,i){switch(super(`Error: ${t}`),this.name="KameleoonError",this.errorType=t,t){case n.Initialization:case n.Credentials:case n.VisitorCodeMaxLength:case n.VisitorCodeEmpty:case n.StorageInitialization:case n.VisitAmount:case n.EventSourceInitialization:case n.StorageEmpty:this.message=l[t]();break;case n.CookieParse:case n.FeatureFlagConfigurationNotFound:case n.NumberParse:case n.ClientConfiguration:case n.MaximumRetriesReached:case n.RemoteData:case n.VersionParse:case n.SemanticVersionParse:this.message=l[t](e);break;case n.FeatureFlagExperimentNotFound:case n.FeatureFlagVariationNotFound:case n.FeatureFlagVariableNotFound:this.message=l[t](e,i);break;case n.FeatureFlagEnvironmentDisabled:this.message=void 0!==i?l[t](e,i):e;break;case n.StorageWrite:case n.JSONParse:case n.StorageRead:this.message=l[t](e);break;case n.StorageParse:this.message=l[t](e,i);break;case n.TargetingCondition:this.message=l[t](e);break;case n.AmongValuesCheck:this.message=l[t](e,i);break;case n.RangeCheck:this.message=l[t](e);break;default:c(t)}}get type(){return this.errorType}}var g,v,f,p;!function(t){t.DataApi="dataApi",t.AccessToken="accessToken",t.Events="events",t.ClientConfiguration="clientConfiguration"}(g||(g={})),function(t){t.Get="GET",t.Post="POST"}(v||(v={})),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 m=1;var C;!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"}(C||(C={}));const y="eventType=staticData",I="&browserIndex=",D="&browserVersion=",E="&deviceType=",T="&visitorCode=",k="&sdkVersion=",V="&nonce=",R="&id=",S="&maxNumberPreviousVisits=",w="&os=",b="&osIndex=",A="&browser=",O="&mappingValue=",$="visit/",F={[g.DataApi]:"data.kameleoon.io",[g.AccessToken]:"api.kameleoon.com",[g.Events]:"events.kameleoon.eu",[g.ClientConfiguration]:"sdk-config.kameleoon.eu"};var N;!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"}(N||(N={}));const M={[N.NONE]:"NONE",[N.ERROR]:"ERROR",[N.WARNING]:"WARNING",[N.INFO]:"INFO",[N.DEBUG]:"DEBUG"},x=(t,e)=>"credentials"===t?{clientId:"****",clientSecret:"****"}:e instanceof Map?Array.from(e.entries()):e;class _{static setLogger(t){_.logger=t}static setLogLevel(t){_.logLevel=t}static log({level:t,strings:e,keys:i}){if(!_.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,x)}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);_.writeMessage(t,a)}static info(t,...e){_.log({level:N.INFO,strings:t,keys:e})}static error(t,...e){_.log({level:N.ERROR,strings:t,keys:e})}static warning(t,...e){_.log({level:N.WARNING,strings:t,keys:e})}static debug(t,...e){_.log({level:N.DEBUG,strings:t,keys:e})}static checkLevel(t){return t<=_.logLevel&&t!==N.NONE}static writeMessage(t,e){_.logger.log(t,`Kameleoon [${M[t]}]: ${e}`)}}_.logger=new class{log(t,e){switch(t){case N.DEBUG:console.debug(e);break;case N.INFO:console.info(e);break;case N.WARNING:console.warn(e);break;case N.ERROR:console.error(e)}}},_.logLevel=N.WARNING;let L=class{constructor({urlProvider:t,packageInfo:e,externalRequester:i,requestTimeout:a,trackRetryDelay:r,useAbortController:n}){_.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,_.debug`RETURN: new Requester(urlProvider, packageInfo: ${e}, externalRequester, requestTimeout: ${a}, trackRetryDelay: ${r}, useAbortController: ${n})`}getClientConfiguration(t,e){return d(this,0,void 0,function*(){const i=this.urlProvider.getClientConfigurationUrl(t);let a=Object.assign({[C.SdkType]:this.packageInfo.type,[C.SdkVersion]:this.packageInfo.version},e&&{[C.IfModifiedSince]:e});try{let t={message:""};_.debug`Running configuration request Method: ${v.Get}, Url: ${i}, Headers: ${a}, with retry limit ${2}`;for(let e=0;e<2;e++){const r=yield this.sendRequest({url:i,requestType:p.Configuration,retryCount:e,parameters:{method:v.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 u.Ok({configuration:n,lastModified:e})}if(304===r.status)return this.logReceivedConfigurationResponse(r.status,i,a),u.Ok({});if(1===e){if(r.text){const e=yield r.text();t=JSON.parse(e)}_.error`Failed to get configuration response ${{status:r.status,message:t.message}} for request Method: ${v.Get}, Url: ${i}, Headers: ${a}`}else yield this.logRequestError({logLevel:N.WARNING,message:"Failed to get configuration response",response:r,method:v.Get,url:i})}return u.Err(new h(n.MaximumRetriesReached,t.message))}catch(t){return yield this.logRequestError({logLevel:N.ERROR,message:"Failed to get configuration response",error:t,method:v.Get,url:i,headers:a}),u.Err(new h(n.ClientConfiguration,t))}})}getRemoteData(t){var e;return d(this,0,void 0,function*(){const i=this.urlProvider.getRemoteDataUrl(t);_.debug`Running remote data request Method: ${v.Get}, Url: ${i}`;try{const t=yield this.sendRequest({url:i,requestType:p.RemoteData,retryCount:0,parameters:{method:v.Get}});if(!t.ok){if(yield this.logRequestError({logLevel:N.ERROR,message:"Failed to get remote data response",response:t,method:v.Get,url:i}),t.text){const i=yield t.text(),a=null===(e=JSON.parse(i))||void 0===e?void 0:e.message;return u.Err(new h(n.RemoteData,a))}return u.Err(new h(n.RemoteData,"Unknown Reason - no `text()` was found for a response"))}const a=yield t.json();return _.debug`Received remote data response: ${{status:t.status}} for request Method: ${v.Get}, Url: ${i}`,u.Ok(a)}catch(t){return yield this.logRequestError({logLevel:N.ERROR,message:"Failed to get remote data response",error:t,method:v.Get,url:i}),u.Err(new h(n.RemoteData,t))}})}getVisitorData({visitorCode:t,filters:e,isMappingIdentifier:i}){var a;return d(this,0,void 0,function*(){const r=this.urlProvider.getVisitorDataUrl({visitorCode:t,filters:e,isMappingIdentifier:i});_.debug`Running visitor data request Method: ${v.Get}, Url: ${r}`;try{const t=yield this.sendRequest({url:r,requestType:p.RemoteData,retryCount:0,parameters:{method:v.Get}});if(!t.ok){if(yield this.logRequestError({logLevel:N.ERROR,message:"Failed to get visitor data response",response:t,method:v.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 u.Err(new h(n.RemoteData,t))}}return t.status?u.Err(new h(n.RemoteData,`No error message. Error status: ${t.status}`)):u.Err(new h(n.RemoteData,"Unknown Reason - no text message or error status was found for a response"))}const e=yield t.json();return _.debug`Received visitor data response: ${{status:t.status}} for request Method: ${v.Get}, Url: ${r}`,u.Ok(e)}catch(t){return yield this.logRequestError({logLevel:N.ERROR,message:"Failed to get visitor data response",error:t,method:v.Get,url:r}),u.Err(new h(n.RemoteData,t))}})}track(t,e){return d(this,0,void 0,function*(){const i=this.urlProvider.getTrackingUrl(e);_.debug`Running tracking request Method: ${v.Post}, Url: ${i}, Body: ${t}, with retry limit ${2}, retry delay ${this.trackRetryDelay} ms`;for(let e=0;e<2;e++){let a;try{if(a=yield this.sendRequest({url:i,retryCount:e,requestType:p.Tracking,parameters:{body:t,method:v.Post,headers:{[C.ContentType]:"*/*"}}}),a.ok)return _.debug`Received tracking response: ${{status:a.status}} for request Method: ${v.Post}, Url: ${i}, Body: ${t}`,u.Ok();yield this.logRequestError({logLevel:1==e?N.ERROR:N.WARNING,message:"Failed to get tracking response",response:a,method:v.Post,url:i})}catch(t){yield this.logRequestError({logLevel:1==e?N.ERROR:N.WARNING,message:"Failed to get tracking response",error:t,method:v.Post,url:i})}e<2&&(yield new Promise(t=>setTimeout(t,this.trackRetryDelay)))}return u.Err()})}sendRequest({url:t,requestType:e,retryCount:i,parameters:a}){return d(this,0,void 0,function*(){let r;if(this.useAbortController){const n=new AbortController,s=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(s)}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:s}){return d(this,0,void 0,function*(){if(i){let n="Unknown error";i instanceof Error&&(n=i.message),_.log({level:t,strings:()=>`${e} with error: ${n} for request Method: ${a}, Url: ${r}`})}else if(n&&_.checkLevel(t)){const i=yield this.parseResponse(n);_.log({level:t,strings:()=>`${e} response: Status: '${i.status}' Message: '${i.message}' for request Method: ${a}, Url: '${r}'`+(s?`, Headers: ${s}`:"")})}})}parseResponse(t){return d(this,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=C.LastModified.toLowerCase();for(const[i,a]of t.headers)if(i.toLowerCase()===e)return a}}logReceivedConfigurationResponse(t,e,i){_.debug`Received configuration response: ${{status:t}} for request Method: ${v.Get}, Url: ${e}, Headers: ${i}`}};var U,P,K,G,B,z,j,q,H,W,Y,X;!function(t){t.Production="production",t.Staging="staging",t.Development="development"}(U||(U={}));class J{constructor(){this.ready=!1,this.isCustomDomain=!1,this.domains=F}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[g.DataApi]=t);const e=t.split(".")[0],i=this.domains[g.DataApi];this.domains[g.DataApi]=i.replace(/^[^.]+/,e)}get dataApiDomain(){return this.domains[g.DataApi]}getClientConfigurationUrl(t){this.isInitialized();const e=`https://${this.domains[g.ClientConfiguration]}/v3/`,i=this.environment===U.Production?"":"?environment="+encodeURIComponent(this.environment);let a="";return t&&(a=i?"&ts="+t:"?ts="+t),e+this.siteCode+i+a}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains[g.Events]}:8110/sse?siteCode=${this.siteCode}`}getRemoteDataUrl(t){return this.isInitialized(),this.getDataApiUrl(f.DataMap)+this.siteCode+"&key="+encodeURI(t)}getVisitorDataUrl({visitorCode:t,filters:e,isMappingIdentifier:i}){this.isInitialized();const{customData:a,previousVisitAmount:r,currentVisit:n,conversions:s,geolocation:o,experiments:u,pageViews:d,device:l,browser:c,operatingSystem:h,kcs:g,personalization:v,visitorCode:p,cbs:m}=e,C=i?O:T,y=a||p?"&customData="+!0:"",I=s?"&conversion="+!0:"",D=o?"&geolocation="+!0:"",E=u?"&experiment="+!0:"",k=d?"&page="+!0:"",V="&staticData="+!0,R=n?"&currentVisit="+!0:"",w=g?"&kcs="+!0:"",b=v?"&personalization="+!0:"",A="number"!=typeof r?S+1:S+r,$=m?"&cbs="+!0:"";return this.getDataApiUrl(f.VisitData)+this.siteCode+C+t+A+y+I+D+E+k+V+R+w+b+$}getTrackingUrl(t){this.isInitialized();const{type:e,version:i}=this.packageInfo;let a=this.getDataApiUrl(f.VisitEvent)+this.siteCode+"&sdkName="+e+k+i;return t&&(a+="&bodyUa="+!0),a}getAccessTokenUrl(){this.isInitialized();const{type:t,version:e}=this.packageInfo;return`https://${this.domains[g.AccessToken]}/oauth/token?sdkName=`+t+k+e+"&siteCode="+this.siteCode}isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}getDataApiUrl(t){if(!this.domains[g.DataApi])throw new Error("Data API domain is not set");const e=`https://${this.domains[g.DataApi]}`;switch(t){case f.VisitEvent:return`${e}/${$+"events?siteCode="}`;case f.VisitData:return`${e}/${$+"visitor?siteCode="}`;case f.DataMap:return`${e}/map/map?siteCode=`}}setDomains(t){t&&(this.isCustomDomain=!0,this.domains[g.DataApi]="data."+t,this.domains[g.AccessToken]="api."+t,this.domains[g.Events]="events."+t,this.domains[g.ClientConfiguration]="sdk-config."+t)}}!function(t){t.BOOLEAN="BOOLEAN",t.NUMBER="NUMBER",t.STRING="STRING",t.JSON="JSON",t.JS="JS",t.CSS="CSS"}(P||(P={})),function(t){t.Sent="sent",t.Unsent="unsent",t.Pending="pending"}(K||(K={})),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"}(G||(G={}));class Q{constructor(t){this.cacheMap=new Map,this.intervalId=null,this.cleanupTimeout=t*G.Second}add({key:t,data:e,lifetime:i}){_.debug`CALL: CacheManager.add(key: ${t}, data: ${e}, lifetime: ${i})`,null===this.intervalId&&this.activate();const a=i*G.Second,r={data:e,expirationTime:Date.now()+a};this.cacheMap.set(t,r),_.debug`RETURN: CacheManager.add(key: ${t}, data: ${e}, lifetime: ${i})`}getAliveItem(t){_.debug`CALL: CacheManager.getAliveItem(key: ${t})`;const e=this.cacheMap.get(t);if(e&&e.expirationTime>=Date.now()){const i=e.data;return _.debug`RETURN: CacheManager.getAliveItem(key: ${t}) -> (item: ${i})`,i}return e&&this.cacheMap.delete(t),_.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"}(B||(B={})),function(t){t.TARGETED_DELIVERY="TARGETED_DELIVERY",t.EXPERIMENTATION="EXPERIMENTATION"}(z||(z={})),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"}(j||(j={})),function(t){t.ACTIVATED="ACTIVATED",t.DEACTIVATED="DEACTIVATED",t.SCHEDULED="SCHEDULED"}(q||(q={})),function(t){t.Visit="VISIT",t.Visitor="VISITOR",t.Page="Page"}(H||(H={})),function(t){t.Required="REQUIRED",t.NotRequired="NOT_REQUIRED"}(W||(W={})),function(t){t.PartiallyBlocked="PARTIALLY_BLOCK",t.CompletelyBlocked="FULLY_BLOCK"}(Y||(Y={}));class Z{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"}(X||(X={}));const tt={customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:W.NotRequired,dataApiDomain:"data.kameleoon.io",consentOptOutBehavior:Y.PartiallyBlocked}};class et{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}}function it(t){return Object.fromEntries(Object.entries(t).map(([t,e])=>[e,t]))}var at,rt,nt,st;!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"}(at||(at={})),function(t){t.Phone="PHONE",t.Tablet="TABLET",t.Desktop="DESKTOP"}(rt||(rt={})),function(t){t.WindowsPhone="WINDOWS_PHONE",t.Windows="WINDOWS",t.Android="ANDROID",t.Linux="LINUX",t.Mac="MAC",t.IOS="IOS"}(nt||(nt={})),function(t){t.Chrome="CHROME",t.InternetExplorer="IE",t.Firefox="FIREFOX",t.Safari="SAFARI",t.Opera="OPERA",t.Other="OTHER"}(st||(st={}));const ot={[nt.Windows]:0,[nt.Mac]:1,[nt.IOS]:2,[nt.Linux]:3,[nt.Android]:4,[nt.WindowsPhone]:5},ut=it(ot),dt={[st.Chrome]:0,[st.InternetExplorer]:1,[st.Firefox]:2,[st.Safari]:3,[st.Opera]:4,[st.Other]:5},lt=it(dt),ct="off",ht="warehouseAudiences";var gt;!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"}(gt||(gt={}));const vt={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 ft,pt,mt,Ct,yt,It,Dt,Et,Tt,kt,Vt,Rt,St;!function(t){t.And="AND",t.Or="OR"}(ft||(ft={})),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"}(pt||(pt={})),function(t){t.NEW="NEW",t.RETURNING="RETURNING"}(mt||(mt={})),function(t){t.ANY="ANY",t.EXACT="EXACT"}(Ct||(Ct={})),function(t){t.ALL="ALL",t.TEST="TEST",t.PERSO="PERSO"}(yt||(yt={})),function(t){t.Experiment="EXPERIMENT",t.Personalization="PERSONALIZATION",t.Any="ANY"}(It||(It={})),function(t){t.EXACT="EXACT",t.CONTAINS="CONTAINS",t.REGULAR_EXPRESSION="REGULAR_EXPRESSION",t.GREATER="GREATER",t.EQUAL="EQUAL",t.LOWER="LOWER"}(Dt||(Dt={})),function(t){t.GREATER="GREATER",t.EQUAL="EQUAL",t.LOWER="LOWER"}(Et||(Et={})),function(t){t.EXACT="EXACT",t.CONTAINS="CONTAINS",t.REGULAR_EXPRESSION="REGULAR_EXPRESSION",t.OPTIONAL="OPTIONAL"}(Tt||(Tt={})),function(t){t.CURRENT_VISIT="CURRENT_VISIT",t.VISITOR="VISITOR"}(kt||(kt={})),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"}(Vt||(Vt={})),function(t){t.Minute="MINUTE",t.Hour="HOUR",t.Day="DAY",t.Week="WEEK",t.Month="MONTH"}(Rt||(Rt={})),function(t){t.Ascending="asc",t.Descending="desc"}(St||(St={}));const wt="localhost",bt=/^(\.?(([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 At{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))?u.Err(new h(n.SemanticVersionParse,t)):u.Ok(e.slice(0,3))}static validateDomain(t){return t?(t=At.checkAndTrimProtocol(t.toLowerCase()),bt.test(t)||t===wt||_.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.`,u.Ok(t)):u.Err()}static validateNetworkDomain(t){return t?(t=(t=At.checkAndTrimProtocol(t.toLowerCase())).replace(/^\.+|\.+$/g,""),bt.test(t)||t===wt?u.Ok(t):(_.error`The network domain ${t} is invalid.`,u.Err())):u.Err()}static checkAndTrimProtocol(t){const e=["http://","https://"];for(const i of e)if(t.startsWith(i)){t=t.substring(i.length),_.warning`The domain contains ${i}. Domain after protocol trimming: ${t}`;break}return t}}class Ot{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:s,packageInfo:o,dataManager:d}){if(_.debug`CALL: checkTargeting(segment, visitorCode: ${e}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager)`,!t||!t.conditionsData.firstLevel.length){const t=u.Ok(!0);return _.debug`RETURN checkTargeting(segment, visitorCode: ${e}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${t})`,t}if(!r){const t=u.Err(new h(n.Initialization));return _.debug`RETURN checkTargeting(segment, visitorCode: ${e}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${t})`,t}let l={};const c=r.getStoredVariations(e);c.ok&&(l=c.data);const g=d.getTree(t);let v,f,p;g.hasTargetingType(Vt.SEGMENT)&&(v=d.trees,p=s.segments),g.hasTargetingType(Vt.TARGET_FEATURE_FLAG)&&(f=s.ruleMap);const m=g.evaluate({variationData:l,sdkInfo:o,segments:p,ruleMap:f,trees:v,targetingData:i,experimentId:a,visitorCode:e});return _.debug`RETURN checkTargeting(segment, visitorCode: ${e}, targetingData: ${i}, experimentId: ${a}, variationConfiguration, clientConfiguration, packageInfo, dataManager) -> (result: ${m})`,m}static convertTimeUnit(t,e){return t/{[Rt.Minute]:G.Minute,[Rt.Hour]:G.Hour,[Rt.Day]:G.Day,[Rt.Week]:G.Week,[Rt.Month]:G.Month}[e]}static isCustomData(t){return t.data.type===at.CustomData}static updateCache({hasJsCssVariables:t,cacheManager:e,visitorCode:i,experimentId:a,variationId:r}){const n=e.getAliveItem(i),s=n?Object.assign({},n):{};s[a]={variationId:r,hasJsCssVariables:t,expirationTime:Date.now()+5*G.Second},e.add({key:i,data:s,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 s=!n;a>Date.now()&&(i+=`window.kameleoonQueue.push(['Experiments.assignVariation',${t},${e},true]);`,i+=`window.kameleoonQueue.push(['Experiments.trigger',${t},${s}]);`,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=At.validateVersion(t),r=At.validateVersion(e);if(!a.ok)return u.Err(a.error);if(!r.ok)return u.Err(r.error);const[n,s,o]=a.data,[d,l,h]=r.data,[g,v,f]=[n===d,s===l,o===h];switch(i){case Et.EQUAL:return u.Ok(g&&v&&f);case Et.GREATER:return u.Ok(n>d||g&&s>l||g&&v&&o>h);case Et.LOWER:return u.Ok(n<d||g&&s<l||g&&v&&o<h);default:_.error`Unknown version match type: ${i}`,c(i)}}static getVariationByHash(t,e){let i=0;for(const a of t)if(i+=a.exposition,i>=e)return a;return null}}class $t{static insertInOrderedListMutably({list:t,element:e,order:i}){if(t.includes(e))return;const a=t.findIndex(t=>i===St.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 Ft{constructor({urlAddress:t,title:e,referrers:i}){this.urlAddress=t,this.title=e,this.referrers=i,this.timestamps=[{time:Date.now(),status:K.Unsent}]}get url(){var t;if(!this.urlAddress)return"";const e=this.title?"&title="+encodeURIComponent(this.title):"",i=(null===(t=this.referrers)||void 0===t?void 0:t.length)?"&referrersIndices="+JSON.stringify(this.referrers):"";return"eventType=page&href="+encodeURIComponent(this.urlAddress)+e+i}get status(){const{[K.Sent]:t,[K.Unsent]:e,[K.Pending]:i}=this.timestamps.reduce((t,{status:e})=>(t[e]=!0,t),{[K.Sent]:!1,[K.Unsent]:!1,[K.Pending]:!1});return!t||e||i?i&&!e?K.Pending:K.Unsent:K.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:at.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,s=new Ft({urlAddress:e,title:i,referrers:a});return s.timestamps=r,n&&(s._nonce=n),s}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:s}=t.data;let o;if("number"==typeof s[0]&&(i=s),e.has(r)){const t=e.get(r).timestamps;o=new Ft({urlAddress:r,title:n,referrers:i}),o.timestamps=[...t,{time:a,status:K.Sent}]}else o=new Ft({urlAddress:r,title:n,referrers:i}),o.timestamps=[{time:a,status:K.Sent}];e.set(r,o)}}}let Nt=class t{constructor(e,i,...a){this._status=K.Unsent,this.isIdentifier=!1;const r="boolean"==typeof i;"number"==typeof e?this._index=e:(this._name=e,this._index=t.UNDEFINED_INDEX),this.overwrite=!r||i,this.value=r?a:[i,...a].filter(t=>null!=t)}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="&mappingIdentifier="+String(!0)),"eventType=customData&index="+this._index+"&valuesCountMap="+encodeURIComponent(JSON.stringify(e))+"&overwrite="+String(this.overwrite)+i}get data(){return Object.assign(Object.assign({index:this._index},void 0!==this._name?{name:this._name}:{}),{value:this.value,type:at.CustomData,isIdentifier:this.isIdentifier,status:this.status,overwrite:this.overwrite})}get status(){return this._isMappingIdentifier?K.Unsent:this._status}static _fromRaw(e){const{index:i,value:a,status:r,isIdentifier:n,name:s,overwrite:o}=e;let u;return s?(u=new t(s,null==o||o,...a),u.index=i):u=new t(i,null==o||o,...a),u.status=r,u._isMappingIdentifier=n,u}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)))}}set index(t){this._index=t}get index(){return this._index}get name(){return this._name}get values(){return this.value}};Nt.UNDEFINED_INDEX=-1;let Mt=class t{constructor({goalId:t,revenue:e=0,negative:i=!1,metadata:a}){this.goalId=t,this.revenue=e,this.negative=i,this.status=K.Unsent,this.id=Math.floor(1e6*Math.random()),this._metadata=a,this.assignedTime=Date.now()}set _id(t){this.id=t}set _nonce(t){this.nonce=t}static _fromInternal(e){var{assignedTime:i}=e,a=function(t,e){var i={};for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&e.indexOf(a)<0&&(i[a]=t[a]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(t);r<a.length;r++)e.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(t,a[r])&&(i[a[r]]=t[a[r]])}return i}(e,["assignedTime"]);const r=new t(a);return void 0!==i&&(r.assignedTime=i),r}get url(){var t;return"eventType=conversion&goalId="+String(this.goalId)+"&revenue="+String(this.revenue)+"&negative="+String(this.negative)+((null===(t=this.metadata)||void 0===t?void 0:t.length)?"&metadata="+this._encodeMetadata():"")}get _metadata(){return this.metadata}set _metadata(t){this.metadata=t}get data(){var t;return{goalId:this.goalId,nonce:this.nonce,revenue:this.revenue,negative:this.negative,type:at.Conversion,status:this.status,id:this.id,metadata:(null===(t=this.metadata)||void 0===t?void 0:t.map(t=>t.data))||void 0,assignedTime:this.assignedTime}}_encodeMetadata(){var t;return(null===(t=this.metadata)||void 0===t?void 0:t.length)?encodeURIComponent(JSON.stringify(this.metadata.reduce((t,e)=>(null==t[e.data.index]&&(t[e.data.index]=e.data.value),t),{}))):""}static _fromRaw(e){const{goalId:i,revenue:a,negative:r,status:n,id:s,nonce:o,metadata:u,assignedTime:d}=e,l=t._fromInternal({goalId:i,revenue:a,negative:r,metadata:t.parseMetadata(u),assignedTime:d});return l._id=s,l.status=n,o&&(l._nonce=o),l}static parseMetadata(t){return(null==t?void 0:t.map(t=>Nt._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=null==e?void 0:e.conversionEvents)||void 0===a?void 0:a.length)for(const i of e.conversionEvents){const{goalId:e,revenue:a,negative:n}=i.data,s=t._fromInternal({goalId:e,revenue:a,negative:n,assignedTime:i.time});s.status=K.Sent,r.push(s)}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 r=t._fromInternal({goalId:e,assignedTime:a.time});r.status=K.Sent,i.set(e,r)}}}},xt=class t{constructor(t,e){this.browser=t,this.version=e,this.status=K.Unsent}get url(){if(!this.browser)return"";const t=this.version?D+this.version:"";return y+A+this.browser+I+dt[this.browser]+t}get data(){return{browser:this.browser,type:at.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:lt[a];return r?new t(e,r):new t(e)}}},_t=class t{constructor(t){this.device=t,this.status=K.Unsent}get url(){return this.device?y+E+this.device:""}get data(){return{device:this.device,type:at.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)}},Lt=class t{constructor(t){this.operatingSystem=t,this.status=K.Unsent}get url(){return this.operatingSystem?y+w+this.operatingSystem+b+ot[this.operatingSystem]:""}get data(){return{operatingSystem:this.operatingSystem,type:at.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:ut[a];return new t(e)}}};class Ut{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=K.Unsent}get url(){const t=this.region?"&region="+encodeURIComponent(this.region):"",e=this.city?"&city="+encodeURIComponent(this.city):"",i=this.postalCode?"&postalCode="+encodeURIComponent(this.postalCode):"",a=this.coordinates?"&latitude="+this.coordinates[0]+"&longitude="+this.coordinates[1]:"";return"eventType=geolocation&country="+encodeURIComponent(this.country)+t+e+i+a}get data(){return{type:at.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:s}=t,o=new Ut({country:e,region:i,city:a,postalCode:r,coordinates:n});return o.status=s,o}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 Ut(r&&n?{country:a,region:r,city:n}:r?{country:a,region:r}:{country:a}):void 0}}class Pt{constructor(t){this.status=K.Sent,this.visits=t,this._visitNumber=t.length?t.length-1:0}get visitNumber(){return this._visitNumber}get url(){return""}get data(){return{visits:this.visits,visitNumber:this._visitNumber,type:at.VisitsData,status:this.status}}get isSent(){return!0}set timestamp(t){$t.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 Kt{constructor(t){this.kcs=t,this.status=K.Sent}get url(){return""}get data(){return{kcs:this.kcs,type:at.KameleoonConversionScore,status:this.status}}}class Gt{constructor(t,e,i=Date.now()){this.id=t,this.variationId=e,this.status=K.Sent,this.assignedTime=i}get url(){return""}get data(){return{id:this.id,variationId:this.variationId,type:at.Personalization,status:K.Sent,assignedTime:this.assignedTime}}static _fromRaw(t){return new Gt(t.id,t.variationId,t.assignedTime)}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 r=new Gt(t,a,i.time);e.set(t,r)}}}}class Bt{constructor(t){this.values=new Map(Object.entries(t).map(([t,e])=>[Number(t),this.extractVarIds(e)])),this.cbs=t,this.status=K.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:at.CBScores,status:this.status}}static _fromRaw(t){const e=new Bt(t.cbs);return e.status=t.status,e}}class zt{constructor({filters:t,dataManager:e,visitorCode:i}){this.visitsData=new Pt([]),this.visitorData=[],this.storageVisitorData=[],this.experimentData={},this.singleDataTypes={[at.Device]:null,[at.Browser]:null,[at.GeolocationData]:null,[at.OperatingSystem]:null,[at.KameleoonConversionScore]:null,[at.CBScores]:null},this.multipleDataTypes={[at.CustomData]:new Map,[at.PageView]:new Map,[at.Conversion]:new Map,[at.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 at.PageView:this.visitorData.push(...e.values()),this.storageVisitorData.push(...e.values());break;case at.Personalization:case at.Conversion:this.storageVisitorData.push(...e.values());break;case at.CustomData:e.forEach(t=>{this.visitorData.push(t),this.dataManager.storedCustomDataIndexes.has(t.data.index)||this.storageVisitorData.push(t)})}}processKcs(t){if(this.filters.kcs&&t){const e=new Kt(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){var i,a,r;if(this.visitsData.visitNumber<=e&&(null===(i=t.staticDataEvent)||void 0===i?void 0:i.data.visitNumber)){const i=null!==(r=null===(a=t.staticDataEvent)||void 0===a?void 0:a.data.visitNumber)&&void 0!==r?r:0;this.visitsData.updateVisitNumber(i+e)}}processCbs(t){if(this.filters.cbs&&t){const e=new Bt(t);this.storageVisitorData.push(e)}}processBrowser(t){if(this.filters.browser&&!this.singleDataTypes[at.Browser]){const e=xt._fromVisit(t);e&&(this.visitorDataTypes.has(at.Browser)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[at.Browser]=e)}}processDevice(t){if(this.filters.device&&!this.singleDataTypes[at.Device]){const e=_t._fromVisit(t);e&&(this.visitorDataTypes.has(at.Device)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[at.Device]=e)}}processOperatingSystem(t){if(this.filters.operatingSystem&&!this.singleDataTypes[at.OperatingSystem]){const e=Lt._fromVisit(t);e&&(this.visitorDataTypes.has(at.OperatingSystem)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[at.OperatingSystem]=e)}}processGeolocationData(t){if(this.filters.geolocation&&!this.singleDataTypes[at.GeolocationData]){const e=Ut._fromVisit(t);e&&(this.visitorDataTypes.has(at.GeolocationData)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[at.GeolocationData]=e)}}processCustomData(t){this.filters.customData&&Nt._updateFromVisit(t,this.multipleDataTypes[at.CustomData])}processConversion(t){if(this.filters.conversions){Mt._updateFromVisit(t,this.multipleDataTypes[at.Conversion]);const e=Mt._listFromVisit(t);e.length&&this.visitorData.push(...e)}}processPageView(t){this.filters.pageViews&&Ft._updateFromVisit(t,this.multipleDataTypes[at.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:K.Unsent,assignedTime:e.time}}}processPersonalization(t){this.filters.personalization&&Gt._updateFromVisit(t,this.multipleDataTypes[at.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 jt{static parseFeatureVariable(t){const{key:e,type:i,value:a}=t;switch(i){case P.BOOLEAN:return u.Ok({key:e,type:i,value:Boolean(a)});case P.JS:case P.CSS:case P.STRING:return u.Ok({key:e,type:i,value:String(a)});case P.NUMBER:const r=Number(a);return Number.isNaN(r)?u.Err(new h(n.NumberParse,String(a))):u.Ok({key:e,type:i,value:r});case P.JSON:try{const a=JSON.parse(String(t.value));return u.Ok({key:e,type:i,value:a})}catch(t){return u.Err(new h(n.JSONParse,t))}default:c(i)}}static parseVisitorData({data:t,filters:e,visitorCode:i,dataManager:a,variationConfiguration:r}){const n=new zt({filters:e,dataManager:a,visitorCode:i}),{currentVisit:s,previousVisits:o,kcs:u,cbs:d}=t;if(!(null==o?void 0:o.length)&&!s)return{visitorData:[],storageVisitorData:[],visitsData:new Pt([])};s&&(n.processVisit(s),n.processVisitNumber(s,0)),null==o||o.forEach((t,e)=>{n.processVisit(t),n.processVisitsData(t),n.processVisitNumber(t,e+1)}),n.processKcs(u),n.processCbs(d),n.processMultipleDataTypes();const l=n.processMappingIdentifier(null!=s?s:null==o?void 0:o[0]),{visitorData:c,storageVisitorData:h,visitsData:g,experimentData:v}=n.data;return r.updateStoredVariations(i,v),{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 qt{constructor({updateInterval:t,urlProvider:e,storage:i,requester:a,dataManager:r,eventSource:n,externalVisitorCodeManager:s,eventManager:o,externalPackageInfo:u,defaultDataFile:d}){this.updateConfigurationIntervalId=null,this.updateType=B.Polling,this.configurationData=tt,this.featureFlagsData=new Map,this.isTargetedDeliveryRule=null,this.segmentsData=null,this.holdoutData=null,this.meGroupsData=new Map,this.mappedRules=null,this.mappedExperiments=null,this.usedDefaultDataFile=!1,this.refreshDataFileIfStalePromise=null,this.blockingBehaviourMode=Y.PartiallyBlocked,this.cachedDataFile=null,this.CACHE_REVALIDATE_PERIOD=90*G.Minute,this.urlProvider=e,this.requester=a,this.updateInterval=t,this.lastUpdate=new Date,this.storage=i,this.dataManager=r,this.eventManager=o,this.visitorCodeManager=s,this.eventSource=n,this.externalPackageInfo=u,this.defaultDataFile=d}initialize(){return d(this,0,void 0,function*(){if(_.debug("CALL: ClientConfiguration.initialize()"),this.readStorageData(),this.checkShouldUpdate()){const t=yield this.updateClientConfiguration();if(!t.ok)return _.error("Error occurred during client configuration update"),t;if(t.data)return _.debug("RETURN: ClientConfiguration.initialize()"),u.Ok()}return this.updateType!==B.RealTime||this.eventSource.isOpen?(this.updateType===B.Polling&&this.handlePollingUpdates(),_.debug("RETURN: ClientConfiguration.initialize()"),u.Ok()):(this.handleRealTimeUpdates(),_.debug("RETURN: ClientConfiguration.initialize()"),u.Ok())})}refreshDataFileIfStale(){if(!this.checkShouldUpdate())return Promise.resolve(u.Ok(!1));if(!this.refreshDataFileIfStalePromise){const t=this.fetchClientConfiguration().then(t=>t.ok?u.Ok(!0):t).finally(()=>{this.refreshDataFileIfStalePromise===t&&(this.refreshDataFileIfStalePromise=null)});this.refreshDataFileIfStalePromise=t}return this.refreshDataFileIfStalePromise}cleanupHandlers(){this.eventSource.isOpen&&this.eventSource.close(),this.updateConfigurationIntervalId&&clearInterval(this.updateConfigurationIntervalId)}handleRealTimeUpdates(){this.cleanupHandlers(),this.eventSource.open(t=>{this.updateClientConfiguration(t).then(e=>{e.ok&&this.eventManager.fireEvent(X.ConfigurationUpdate,{timestamp:t})})}),this.eventSource.onError(t=>{_.error`Error occurred during real-time update: ${t}. Switching to polling updates while the connection is not restored.`,this.updateType=B.Polling,this.handlePollingUpdates()})}handlePollingUpdates(){this.cleanupHandlers();try{const t=this.lastUpdate.getTime(),e=Date.now(),i=Math.max(this.updateInterval-(e-t),0);setTimeout(()=>d(this,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 dataFile(){if(this.cachedDataFile)return this.cachedDataFile;const t={featureFlags:new Map,dateModified:this.dateModified};return this.featureFlagsData.forEach((e,i)=>{const a=new Map;e.variations.forEach(t=>{var i;const r=new Map;t.variables.forEach(t=>{try{const e=jt.parseFeatureVariable(t).throw();r.set(t.key,e)}catch(i){_.error`Error parsing variable ${t.key} of feature flag ${e.featureKey}: ${i}`}}),a.set(t.key,{name:null!==(i=t.name)&&void 0!==i?i:"",key:t.key,id:null,experimentId:null,variables:r})});const r=e.rules.map(t=>{const e=new Map;return t.variationByExposition.forEach(i=>{const r=a.get(i.variationKey);r&&e.set(r.key,{name:r.name,key:r.key,id:i.variationId,experimentId:t.experimentId,variables:r.variables})}),{variations:e}});t.featureFlags.set(i,{variations:a,environmentEnabled:e.environmentEnabled,rules:r,defaultVariationKey:e.defaultVariationKey})}),this.cachedDataFile=t,t}get configuration(){return this.configurationData.configuration}get dateModified(){var t;return null!==(t=this.configurationData.dateModified)&&void 0!==t?t:0}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,s=new Map;n.forEach(({variationKey:t,variationId:e})=>{"number"==typeof e&&s.set(t,e)}),e.set(a,{featureId:t.id,experimentId:r,variations:s})}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===W.Required}get consentBlockingBehaviour(){return this.blockingBehaviourMode}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===z.TARGETED_DELIVERY))return!0;return!1}checkShouldUpdate(){const{configuration:t}=this.configurationData;return this.updateType=t.realTimeUpdate?B.RealTime:B.Polling,!this.featureFlags.size||this.lastUpdate.getTime()<Date.now()-this.updateInterval}readStorageData(){var t,e,i;_.debug("CALL: ClientConfiguration.readStorageData()");const a=this.storage.read();if(a.ok){let{data:r,lastUpdate:n,lastModified:s,requestTime:o}=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:o)&&void 0!==e?e:-1,s=null!==(i=a.dateModified)&&void 0!==i?i:0;(!o||s>n)&&(r=a,u=!0)}catch(t){_.error`Error parsing default data file: ${String(t)}`}this.updateConfigurationData(r,u),this.lastUpdate=this.usedDefaultDataFile?new Date(0):new Date(Date.parse(n)),this.lastModified=s,this.requestTime=o}_.debug`RETURN: ClientConfiguration.readStorageData() -> (result: ${a.ok})`}updateClientConfiguration(t){return d(this,0,void 0,function*(){const e=Date.now();if(this.usedDefaultDataFile)return this.updateClientConfigurationInBackground(),u.Ok(!1);if(this.requestTime&&!t&&!this.externalPackageInfo.isServer){if(e-this.requestTime<=this.CACHE_REVALIDATE_PERIOD)return this.updateClientConfigurationInBackground(),u.Ok(!1);_.debug`Cached configuration data has expired. Fetching fresh data.`}return this.fetchClientConfiguration(t)})}fetchClientConfiguration(t){return d(this,0,void 0,function*(){const e=yield this.requester.getClientConfiguration(t,this.lastModified);return this.applyNewConfigurationDataFromResponse(e)})}updateClientConfigurationInBackground(){setTimeout(()=>d(this,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 d(this,0,void 0,function*(){if(this.requestTime=Date.now(),!t.ok)return this.featureFlags.size?(_.error("Error occurred while updating configuration. Existing configuration will be used as a fallback."),u.Ok(!0)):t;if(void 0===t.data.configuration)return this.updateStorageData(),u.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?B.RealTime:B.Polling,s=n!==this.updateType;return s&&(this.updateType=n,_.info`Configuration update type was toggled to ${B[n]}`,yield this.initialize()),this.blockingBehaviourMode=this.consentBlockingBehaviourFromStr(a.configuration.consentOptOutBehavior),u.Ok(s)})}updateConfigurationData(t,e=!0){const{configuration:i,featureFlags:a,customData:r,holdout:n,segments:s,dateModified:o}=t;let u=s?new Map(s.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:o},this.urlProvider.dataApiDomain=t.configuration.dataApiDomain,this.updateConsentRequired(),this.segmentsData=u,this.cachedDataFile=null}updateFeatureFlagSegments(t,e){null!==e&&t.rules.forEach(t=>{var i;const a=t.segmentId;t.segment=null==a?null: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 et(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}consentBlockingBehaviourFromStr(t){return t===Y.PartiallyBlocked||t===Y.CompletelyBlocked?t:(_.error(`Unexpected consent blocking type '${t}'`),Y.PartiallyBlocked)}}var Ht;class Wt{constructor(t,e){_.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*G.Second,_.debug`RETURN: new ClientSettings(siteCode: ${t}, configuration: ${e})`}getTrackingInterval(t){const{MIN_TRACKING_INTERVAL_MS:e,MAX_TRACKING_INTERVAL_MS:i,DEFAULT_TRACKING_INTERVAL_MS:a}=Wt;return"number"==typeof(null==t?void 0:t.trackingInterval)?t.trackingInterval<e?(_.warning(`Tracking interval must not be shorter than ${e} ms. Minimum possible interval was applied.`),e):t.trackingInterval>i?(_.warning(`Tracking interval must not be longer than ${i} ms. Maximum possible interval was applied.`),i):t.trackingInterval:a}getEnvironment(t){return(null==t?void 0:t.environment)?t.environment:U.Production}getCleanupInterval(t){return"number"==typeof(null==t?void 0:t.targetingDataCleanupInterval)?t.targetingDataCleanupInterval<1?(_.warning("Targeting data cleanup interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*G.Minute):t.targetingDataCleanupInterval*G.Minute:null}getUpdateInterval(t){return"number"==typeof(null==t?void 0:t.updateInterval)?t.updateInterval<1?(_.warning("Update interval must not be shorter than 1 minute. Minimum possible interval was applied."),1*G.Minute):t.updateInterval*G.Minute:60*G.Minute}getNetworkDomain(t){const e=At.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*G.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}}}Ht=Wt,Wt.DEFAULT_TRACKING_INTERVAL_MS=1e3,Wt.MIN_TRACKING_INTERVAL_MS=Ht.DEFAULT_TRACKING_INTERVAL_MS,Wt.MAX_TRACKING_INTERVAL_MS=5e3;let Yt=class t{constructor(t){this.cookie=t,this.status=K.Sent}static fromString(e){if(!e)return new t([]);const i=e.split(";").map(t=>{const[i,a]=t.trim().split("=");return i?{key:i,value:a}:(_.warning`Cookie string has an empty key: ${e}`,null)}).filter(t=>null!==t);return new t(i)}get url(){return""}get data(){return{cookie:this.cookie,type:at.Cookie,status:this.status}}};class Xt{constructor(t){this.value=t,this.status=K.Sent}get url(){return""}get data(){return{value:this.value,type:at.UserAgent,status:this.status}}}class Jt{constructor(t){this._value=t,this.status=K.Sent}get url(){return""}get data(){return{value:this._value,type:at.UniqueIdentifier,status:K.Sent}}static _fromRaw(t){return new Jt(t.value)}}let Qt=class{constructor(t){this.version=t,this.status=K.Sent}get url(){return""}get data(){return{version:this.version,type:at.ApplicationVersion,status:this.status}}};class Zt{constructor(t=null,e){this.cleanupInterval=t,this.packageInfo=e}mutUpdateData({infoData:t,visitorCode:e,mutData:i,dataItem:a,extendTtl:r}){let n,{visitorReference:s,data:o,isReference:u}=this.dereferenceData(i,e);switch(this.packageInfo.isServer&&u&&!i[s]&&(t.mappingIdentifiers&&delete t.mappingIdentifiers[e],delete i[e],s=e),r&&(n=this.cleanupInterval?Date.now()+this.cleanupInterval:0),a.data.type){case at.CustomData:this.updateCustomData({expirationTime:n,customData:a,visitorCode:s,mutData:o});break;case at.PageView:this.updatePageView({expirationTime:n,pageView:a,visitorCode:s,mutData:o});break;case at.Conversion:this.updateConversion({expirationTime:n,conversion:a,visitorCode:s,mutData:o});break;case at.VisitsData:this.updateVisitsData({expirationTime:n,visitsData:a,visitorCode:s,mutData:o});break;case at.Personalization:this.updatePersonalization({expirationTime:n,personalization:a,visitorCode:s,mutData:o});break;case at.TargetedSegment:this.updateTargetedSegment({expirationTime:n,targetedSegment:a,visitorCode:s,mutData:o});break;default:this.updateCommonData({expirationTime:n,commonData:a,visitorCode:s,mutData:o})}return n}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 s=0;for(const t of Object.keys(n)){const e=t;let i;switch(e){case at.CustomData:case at.PageView:case at.Conversion:case at.Personalization:i=this.deleteNestedExpiredField(n,e);break;default:i=this.deleteExpiredField(n,e)}(!s||i&&i<s)&&(s=i)}Object.keys(t[r]).length?(!a||s&&s<a)&&(a=s):(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]&&at.PageView in e[t]&&r.urlAddress in e[t][at.PageView],s={expirationTime:a,visitorCode:t,data:e,key:at.PageView,nestedKey:r.urlAddress,value:r};if(n){const i=e[t][at.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(s)}else this.createNestedField(s)}updateCustomData({visitorCode:t,customData:e,mutData:i,expirationTime:a}){const{data:r}=e,n=i[t]&&at.CustomData in i[t],s={expirationTime:a,visitorCode:t,data:i,key:at.CustomData,nestedKey:r.index.toString(),value:r};n?this.updateNestedField(s):this.createNestedField(s)}updateConversion({conversion:t,mutData:e,visitorCode:i,expirationTime:a}){const{data:r}=t,n=e[i]&&at.Conversion in e[i],s={expirationTime:a,visitorCode:i,data:e,key:at.Conversion,nestedKey:r.id.toString(),value:r};n?this.updateNestedField(s):this.createNestedField(s)}updateVisitsData({visitorCode:t,mutData:e,visitsData:i,expirationTime:a}){var r,n;const{data:s}=i,o=e[t]&&at.VisitsData in e[t],u={expirationTime:a,data:e,key:at.VisitsData,value:s,visitorCode:t};if(o){const i=e[t][at.VisitsData];i.visits.forEach(t=>{$t.insertVisitInOrderedListMutably({list:s.visits,visit:t})});const a=Math.max(null!==(r=s.visitNumber)&&void 0!==r?r:s.visits.length-1,s.visits.length-1,null!==(n=i.visitNumber)&&void 0!==n?n:0);this.updateField(Object.assign(Object.assign({},u),{value:Object.assign(Object.assign({},s),{visits:s.visits,visitNumber:a})}))}else this.createField(u)}updatePersonalization({visitorCode:t,mutData:e,personalization:i,expirationTime:a}){const{data:r}=i,n=e[t]&&at.Personalization in e[t],s={expirationTime:a,visitorCode:t,data:e,key:at.Personalization,nestedKey:r.id.toString(),value:r};n?this.updateNestedField(s):this.createNestedField(s)}updateTargetedSegment({visitorCode:t,mutData:e,targetedSegment:i,expirationTime:a}){const{data:r}=i,n=e[t]&&at.TargetedSegment in e[t],s={expirationTime:a,visitorCode:t,data:e,key:at.TargetedSegment,nestedKey:r.id.toString(),value:r};n?this.updateNestedField(s):this.createNestedField(s)}updateCommonData({visitorCode:t,mutData:e,commonData:i,expirationTime:a}){const{data:r}=i,n=e[t]&&r.type in e[t],s={expirationTime:a,data:e,key:r.type,visitorCode:t,value:r};n?this.updateField(s):this.createField(s)}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))e&&(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}){var n;const s=i[a][t];i[a][t]=Object.assign(Object.assign({},e),{expirationTime:null!==(n=null!=r?r:s.expirationTime&&s.expirationTime)&&void 0!==n?n:Date.now()})}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}){var s;const o=a[r][t][e];a[r][t][e]=Object.assign(Object.assign({},i),{expirationTime:null!==(s=null!=n?n:null==o?void 0:o.expirationTime)&&void 0!==s?s:Date.now()})}createNestedField({key:t,nestedKey:e,value:i,data:a,visitorCode:r,expirationTime:n}){var s;(null===(s=a[r])||void 0===s?void 0:s[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 te{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?D+this.browserVersion:"",e=this.browserType?A+this.browserType:"",i=this.browserType?I+dt[this.browserType]:"",a=this.os?w+this.os:"",r=this.os?b+ot[this.os]:"",n=this.deviceType?E+this.deviceType:"",s=void 0!==this.visitNumber?"&visitNumber="+this.visitNumber:"",o=void 0!==this.timeSincePreviousVisit?"&timeSincePreviousVisit="+this.timeSincePreviousVisit:"";return y+e+i+t+s+o+a+r+n}}class ee{static setConditionFactoryInstance(t){this.conditionFactoryInstance=t}static createCondition(t){return this.conditionFactoryInstance.createCondition(t)}}class ie{constructor(t,e,i){var a;if(this.inverseResult=!1,this.isOperator(t))this.nodeValue=t;else{const e=ee.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===ft.And||t===ft.Or}}class ae{constructor(t){this.error=null,this.targetingTypes=new Set,_.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 ie(t)));return this.buildTree(i,e)});this.tree=this.buildTree(a,i),_.debug`RETURN: new Tree(segment: ${t})`}evaluate(t){const e=this.evaluateNode(this.tree,t);return this.error?u.Err(this.error):u.Ok(e)}hasTargetingType(t){return this.targetingTypes.has(t)}evaluateNode(t,e){if(this.isLeafNode(t)){if(t.error)return t.error.type===n.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 ft.And:return this.evaluateNode(t.left,e)&&this.evaluateNode(t.right,e);case ft.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===ft.Or||t.value===ft.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 ie(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?ft.Or:ft.And)}}function re({targetingData:t,sdkInfo:e},i,a){var r;const n=null==t?void 0:t[at.VisitsData];if(!(null===(r=null==n?void 0:n.visits)||void 0===r?void 0:r.length)||null==i&&null==a)return 0;const{visits:s}=n;let o=1;i!==kt.CURRENT_VISIT&&(o=null!=a?e.isServer?a-1:a:s.length);const u=s[Math.max(0,s.length-o)];return"number"==typeof u?u:u.timeStarted}class ne{constructor({campaignType:t,visitCount:e,visitScope:i}){this.campaignType=t,this.visitCount=e,this.visitScope=i}evaluate(t){return u.Ok(this.checkCondition(t))}checkCondition(t){const e=re(t,this.visitScope,this.visitCount);switch(this.campaignType){case It.Experiment:return this.checkExperiment(t,e);case It.Personalization:return this.checkPersonalization(t,e);case It.Any:return this.checkPersonalization(t,e)&&this.checkExperiment(t,e);default:return!1}}checkExperiment(t,e){const i=Object.keys(t.variationData);let a=0,r=null;for(const n of i){const i=t.variationData[n];if((!(null==i?void 0:i.assignedTime)||i.assignedTime>=e)&&(a++,r=n,a>1))break}return 0===a||1===a&&null!==t.experimentId&&r===String(t.experimentId)}checkPersonalization(t,e){var i;const a=Object.values((null===(i=t.targetingData)||void 0===i?void 0:i.personalization)||{});for(const t of a)if((null==t?void 0:t.assignedTime)&&t.assignedTime>=e)return!1;return!0}}class se{constructor({device:t}){this.device=t}evaluate({targetingData:t}){const e=null==t?void 0:t[at.Device];if(e){const{device:t}=e;return u.Ok(t===this.device)}return u.Ok(!1)}}class oe{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[at.Browser];if(e){const t=this.checkCondition(e);return this.error?u.Err(this.error):u.Ok(t)}return u.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)&&(_.error`Failed to parse version: ${this.version} in Browser condition`,this.error=new h(n.VersionParse,this.version)),this.versionMatchType){case Et.EQUAL:return e===this.browser&&i===a;case Et.GREATER:return e===this.browser&&i>a;case Et.LOWER:return e===this.browser&&i<a;default:_.error`Unexpected comparing operation for Browser condition: ${this.versionMatchType}`,c(this.versionMatchType)}}}class ue{constructor({goalId:t,visitCount:e,visitScope:i}){this.goalId=t,this.visitCount=e,this.visitScope=i}evaluate(t){const{targetingData:e}=t,i=null==e?void 0:e[at.Conversion];if(!i)return u.Ok(!1);const a=Object.values(i);if(!a.length)return u.Ok(!1);const r=re(t,this.visitScope,this.visitCount);return u.Ok(a.some(t=>!!t&&(null==this.goalId||t.goalId===this.goalId)&&(!t.assignedTime||t.assignedTime>=r)))}}class de{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[at.CustomData])||void 0===e?void 0:e[this.customDataIndex];if(this.matchType===pt.UNDEFINED)return u.Ok(!i);if(i){const{value:t}=i,e=this.checkCondition(t);return this.error?u.Err(this.error):u.Ok(e)}return u.Ok(!1)}checkCondition(t){if("string"!=typeof this.conditionValue&&this.matchType!==pt.TRUE&&this.matchType!==pt.FALSE&&this.matchType!==pt.RANGE)return _.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`,!1;const e=this.conditionValue;if(this.matchType===pt.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===pt.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 pt.CONTAINS:return t.includes(e);case pt.EXACT:return t===this.conditionValue;case pt.REGULAR_EXPRESSION:return jt.parseRegExp(e).test(t);case pt.LOWER:return Number(t)<Number(this.conditionValue);case pt.EQUAL:return Number(t)===Number(this.conditionValue);case pt.GREATER:return Number(t)>Number(this.conditionValue);case pt.TRUE:return"true"===t.toLowerCase();case pt.FALSE:return"false"===t.toLowerCase();default:return _.error`Unexpected comparing operation for CustomData condition: ${this.matchType}`,!1}}parseArray(t){try{const e=JSON.parse(t);if(Array.isArray(e))return u.Ok(e)}catch(e){return _.error`Failed to parse array: ${t} in CustomData condition`,u.Err(new h(n.AmongValuesCheck,e,t))}return u.Ok([])}parseRange(t){return t&&2===t.length?u.Ok(t):(_.error`Failed to parse range: ${t} in CustomData condition`,u.Err(new h(n.RangeCheck,t)))}}class le{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 ce{constructor({matchType:t,title:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t}){const e=null==t?void 0:t[at.PageView];if(!e)return u.Ok(!1);const i=le.getLatest(e);return u.Ok(this.checkCondition(i.title))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case Dt.CONTAINS:return t.includes(this.conditionValue);case Dt.EXACT:return t===this.conditionValue;case Dt.REGULAR_EXPRESSION:return jt.parseRegExp(this.conditionValue).test(t);default:return _.error`Unexpected comparing operation for PageTitle condition: ${this.matchType}`,!1}}}class he{constructor({matchType:t,url:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t}){const e=null==t?void 0:t[at.PageView];if(!e)return u.Ok(!1);const i=le.getLatest(e);return u.Ok(this.checkCondition(i.urlAddress))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case Dt.CONTAINS:return t.includes(this.conditionValue);case Dt.EXACT:return t===this.conditionValue;case Dt.REGULAR_EXPRESSION:return jt.parseRegExp(this.conditionValue).test(t);default:return _.error`Unexpected comparing operation for PageUrl condition: ${this.matchType}`,!1}}}class ge{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 u.Ok(!1);if("string"!=typeof this.conditionValue)return u.Ok(e===this.sdkLanguage);if(!this.versionMatchType)return u.Ok(!1);if(e!==this.sdkLanguage)return u.Ok(!1);const a=Ot.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?u.Ok(a.data):u.Err(a.error)}}class ve{constructor({visitorCode:t,matchType:e}){this.matchType=e,this.conditionValue=t}evaluate({visitorCode:t}){return u.Ok(this.checkCondition(t))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case Dt.CONTAINS:return t.includes(this.conditionValue);case Dt.EXACT:return t===this.conditionValue;case Dt.REGULAR_EXPRESSION:return jt.parseRegExp(this.conditionValue).test(t);default:return _.error`Unexpected comparing operation for VisitorCode condition: ${this.matchType}`,!1}}}class fe{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 u.Ok(!1);const r=this.extractCookie(),n=(null===(e=null==t?void 0:t[at.Cookie])||void 0===e?void 0:e.cookie)||[];return u.Ok(r.some(t=>this.checkCondition(t))||n.some(t=>this.checkCondition(t)))}extractCookie(){return"undefined"!=typeof document&&document.cookie?Yt.fromString(document.cookie).data.cookie:[]}checkCondition(t){const e=this.keyMatchType,{key:i,value:a}=t;if(e===Tt.OPTIONAL){const t=this.cookie;return!!this.isOptionalCookie(t)&&this.compareCookieValue(a,t.value)}const{key:r,value:n}=this.cookie;let s;switch(e){case Tt.EXACT:s=i===r;break;case Tt.CONTAINS:s=i.includes(r);break;case Tt.REGULAR_EXPRESSION:s=jt.parseRegExp(r).test(i);break;default:_.error`Unexpected comparing operation for Cookie condition: ${e}`,c(e)}return s&&this.compareCookieValue(a,n)}compareCookieValue(t,e){const i=this.valueMatchType;switch(i){case pt.EXACT:return t===e;case pt.CONTAINS:return t.includes(e);case pt.REGULAR_EXPRESSION:return jt.parseRegExp(e).test(t);default:return _.error`Unexpected comparing operation for Cookie condition: ${i}`,!1}}isOptionalCookie(t){const{value:e}=t;return void 0!==e}}class pe{constructor({os:t}){this.operatingSystem=t}evaluate({targetingData:t}){const e=null==t?void 0:t[at.OperatingSystem];if(e){const{operatingSystem:t}=e;return u.Ok(t===this.operatingSystem)}return u.Ok(!1)}}class me{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[at.GeolocationData];if(e){const{country:t,region:i,city:a}=e,[r,n,s]=[this.country,this.region,this.city];if(!r||!t)return u.Ok(!1);const o=!(t.toLowerCase()!==r.toLowerCase()||n&&(null==i?void 0:i.toLowerCase())!==n.toLowerCase()||s&&(null==a?void 0:a.toLowerCase())!==s.toLowerCase());return u.Ok(o)}return u.Ok(!1)}}class Ce{constructor({segmentId:t}){this.segmentId=t}evaluate(t){var e;const{segments:i,trees:a}=t;if(!this.segmentId)return u.Ok(!1);const r=null==i?void 0:i.get(this.segmentId.toString());if(!r)return u.Ok(!1);const n=null!==(e=null==a?void 0:a.get(this.segmentId.toString()))&&void 0!==e?e:null==a?void 0:a.get(this.segmentId);return n?n.evaluate(t):new ae(r).evaluate(t)}}class ye{constructor({featureFlagId:t,variationKey:e,ruleId:i,visitCount:a,visitScope:r}){this.featureId=t,this.ruleId=i,this.variationKey=e,this.visitCount=a,this.visitScope=r}evaluate(t){const{variationData:e,ruleMap:i}=t;if(!this.featureId||!i)return u.Ok(!1);const a=re(t,this.visitScope,this.visitCount),r=(t,e)=>!t||t>=e;if(this.featureId&&!this.ruleId&&!this.variationKey){for(const t of i.values()){const{featureId:i,experimentId:n}=t,s=e[n];if(i===this.featureId&&"number"==typeof(null==s?void 0:s.variationId)&&r(null==s?void 0:s.assignedTime,a))return u.Ok(!0)}return u.Ok(!1)}if(this.featureId&&this.ruleId){const t=i.get(this.ruleId);if((null==t?void 0:t.featureId)!==this.featureId)return u.Ok(!1);const{experimentId:n,variations:s}=t,o=e[n];if(this.variationKey){const t=s.get(this.variationKey);return u.Ok(Boolean(t)&&(null==o?void 0:o.variationId)===t&&r(null==o?void 0:o.assignedTime,a))}return u.Ok(Boolean(null==o?void 0:o.variationId)&&r(null==o?void 0:o.assignedTime,a))}if(this.featureId&&!this.ruleId&&this.variationKey)for(const t of i.values()){const{featureId:i,experimentId:n,variations:s}=t;if(i===this.featureId&&s.has(this.variationKey)){const t=s.get(this.variationKey),i=e[n];if(Boolean(t)&&(null==i?void 0:i.variationId)===t&&r(null==i?void 0:i.assignedTime,a))return u.Ok(!0)}}return u.Ok(!1)}}class Ie{constructor({matchType:t,url:e}){this.conditionValue=e,this.matchType=t}evaluate({targetingData:t}){const e=null==t?void 0:t[at.PageView];if(!e)return u.Ok(!1);const i=this.getSecondLatestPageView(Object.values(e));if(!i)return u.Ok(!1);const a=i.urlAddress;return u.Ok(this.checkCondition(a))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case Dt.CONTAINS:return t.includes(this.conditionValue);case Dt.EXACT:return t===this.conditionValue;case Dt.REGULAR_EXPRESSION:return jt.parseRegExp(this.conditionValue).test(t);default:return _.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 a>e.timestamps[e.timestamps.length-1].time?(i=e,void(e=t)):void(a>(i?i.timestamps[i.timestamps.length-1].time:0)&&(i=t));e=t}),i}}class De{constructor({matchType:t,pageCount:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t}){const e=null==t?void 0:t[at.PageView];if(!e)return u.Ok(!1);let i=0;return Object.values(e).forEach(t=>{i+=t.timestamps.length}),u.Ok(this.checkCondition(i))}checkCondition(t){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case Dt.EQUAL:return t===this.conditionValue;case Dt.GREATER:return t>this.conditionValue;case Dt.LOWER:return t<this.conditionValue;default:return _.error`Unexpected comparing operation for VisitedPages condition: ${this.matchType}`,!1}}}class Ee{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[at.VisitsData];if(e.isServer?!(null==i?void 0:i.visits.length):!(null==i?void 0:i.visits)||i.visits.length<2)return u.Ok(!1);const a=i.visits[0];return u.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=Ot.convertTimeUnit(e,this.timeUnit);switch(this.matchType){case Dt.GREATER:return i>this.conditionValue;case Dt.LOWER:return i<this.conditionValue;default:return _.error`Unexpected comparing operation for FirstVisit condition: ${this.matchType}`,!1}}}class Te{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[at.VisitsData];if(e.isServer?!(null==i?void 0:i.visits.length):!(null==i?void 0:i.visits)||i.visits.length<2)return u.Ok(!1);const a=i.visits,r=a[e.isServer?a.length-1:a.length-2];return u.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=Ot.convertTimeUnit(e,this.timeUnit);switch(this.matchType){case Dt.GREATER:return i>this.conditionValue;case Dt.LOWER:return i<this.conditionValue;default:return _.error`Unexpected comparing operation for LastVisit condition: ${this.matchType}`,!1}}}class ke{constructor({matchType:t,visitCount:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t,sdkInfo:e}){const i=null==t?void 0:t[at.VisitsData];if(!i)return u.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),u.Ok(this.checkCondition(a))}checkCondition(t){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case Dt.EQUAL:return t===this.conditionValue;case Dt.GREATER:return t>this.conditionValue;case Dt.LOWER:return t<this.conditionValue;default:return _.error`Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`,!1}}}class Ve{constructor({matchType:t,visitCount:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t,sdkInfo:e}){const i=null==t?void 0:t[at.VisitsData];if(!i)return u.Ok(!1);const a=i.visits.length+(e.isServer?1:0);return u.Ok(this.checkCondition(a))}checkCondition(t){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case Dt.EQUAL:return t===this.conditionValue;case Dt.GREATER:return t>this.conditionValue;case Dt.LOWER:return t<this.conditionValue;default:return _.error`Unexpected comparing operation for Visits condition: ${this.matchType}`,!1}}}class Re{constructor({visitorType:t}){this.visitorType=t}evaluate({targetingData:t,sdkInfo:e}){const i=null==t?void 0:t[at.VisitsData];if(!i||!this.visitorType)return u.Ok(!1);const{visits:a}=i,r=e.isServer?!a.length:a.length<=1;switch(this.visitorType){case mt.NEW:return u.Ok(r);case mt.RETURNING:return u.Ok(!r);default:_.error`Unexpected visitor type for NewVisitor condition: ${this.visitorType}`,c(this.visitorType)}}}class Se{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[at.ApplicationVersion])||void 0===e?void 0:e.version;if(!i||!this.conditionValue||!this.versionMatchType)return u.Ok(!1);const a=Ot.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?u.Ok(a.data):u.Err(a.error)}}class we{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[at.KameleoonConversionScore];if("number"!=typeof this.keyMomentId||"number"!=typeof this.goalId||"number"!=typeof this.lowerBound||"number"!=typeof this.upperBound||!i)return u.Ok(!1);const a=null===(e=i.kcs[this.keyMomentId.toString()])||void 0===e?void 0:e[this.goalId.toString()];return"number"!=typeof a?u.Ok(!1):u.Ok(a>=this.lowerBound&&a<=this.upperBound)}}class be{constructor({variationMatchType:t,variationId:e,experimentId:i,visitCount:a,visitScope:r}){this.variationMatchType=t,this.variationId=null!=e?e:-1,this.experimentId=null!=i?i:-1,this.visitCount=a,this.visitScope=r}evaluate(t){return u.Ok(this.checkCondition(t))}checkCondition(t){const e=t.variationData[this.experimentId];if(!e)return!1;const i=re(t,this.visitScope,this.visitCount);if(e.assignedTime&&e.assignedTime<i)return!1;switch(this.variationMatchType){case Ct.ANY:return!0;case Ct.EXACT:return e.variationId===this.variationId;default:return!1}}}class Ae{constructor({personalizationId:t,visitCount:e,visitScope:i}){this.personalizationId=t,this.visitCount=e,this.visitScope=i}evaluate(t){return t.targetingData?u.Ok(this.checkCondition(t)):u.Ok(!1)}checkCondition(t){var e,i;if(!this.personalizationId)return!1;const a=null===(i=null===(e=t.targetingData)||void 0===e?void 0:e[at.Personalization])||void 0===i?void 0:i[this.personalizationId];if(!a)return!1;const{assignedTime:r}=a;return!r||r>=re(t,this.visitScope,this.visitCount)}}class Oe{createCondition(t){const{targetingType:e}=t;switch(e){case Vt.CUSTOM_DATUM:return u.Ok(new de(t));case Vt.EXCLUSIVE_EXPERIMENT:return u.Ok(new ne(t));case Vt.TARGET_EXPERIMENT:return u.Ok(new be(t));case Vt.TARGET_FEATURE_FLAG:return u.Ok(new ye(t));case Vt.TARGET_PERSONALIZATION:return u.Ok(new Ae(t));case Vt.DEVICE_TYPE:return u.Ok(new se(t));case Vt.BROWSER:return u.Ok(new oe(t));case Vt.PAGE_URL:return u.Ok(new he(t));case Vt.PAGE_TITLE:return u.Ok(new ce(t));case Vt.CONVERSIONS:return u.Ok(new ue(t));case Vt.VISITOR_CODE:return u.Ok(new ve(t));case Vt.SDK_LANGUAGE:return u.Ok(new ge(t));case Vt.COOKIE:return u.Ok(new fe(t));case Vt.OPERATING_SYSTEM:return u.Ok(new pe(t));case Vt.GEOLOCATION:return u.Ok(new me(t));case Vt.SEGMENT:return u.Ok(new Ce(t));case Vt.APPLICATION_VERSION:return u.Ok(new Se(t));case Vt.PREVIOUS_PAGE:return u.Ok(new Ie(t));case Vt.PAGE_VIEWS:return u.Ok(new De(t));case Vt.LAST_VISIT:return u.Ok(new Te(t));case Vt.FIRST_VISIT:return u.Ok(new Ee(t));case Vt.SAME_DAY_VISITS:return u.Ok(new ke(t));case Vt.VISITS:return u.Ok(new Ve(t));case Vt.NEW_VISITORS:return u.Ok(new Re(t));case Vt.HEAT_SLICE:return u.Ok(new we(t));default:return _.info`Unsupported targeted condition type found: ${e}`,u.Err(new h(n.TargetingCondition,e))}}}var $e;!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"}($e||($e={}));const Fe={data:tt,lastUpdate:""},Ne=29*G.Minute;class Me{constructor(t){this.key=t}isDataValid(t){switch(this.key){case $e.ClientData:return this.checkClientDataIntegrity(t);case $e.TargetingData:return this.checkTargetingDataIntegrity(t);case $e.DataInfo:return this.checkDataInfoIntegrity(t);case $e.VariationData:return this.checkVariationDataIntegrity(t);case $e.TrackingData:return this.checkTrackingDataIntegrity(t);default:return!0}}getDefaultData(){switch(this.key){case $e.ClientData:return this.getDefaultClientData();case $e.DataInfo:return{unsentData:{},nextVisitTime:0,mappingIdentifiers:{}};case $e.TrackingData:return{scheduledVisitors:{}};case $e.TargetingData:case $e.VariationData:case $e.ConsentData:return{};case $e.VisitorCode:case $e.KameleoonSimulationFFData:return"";case $e.ForcedExperimentVariation:case $e.ForcedFeatureVariation:return{};default:c(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(Fe))}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 at.PageView:case at.Conversion:case at.Personalization:case at.TargetedSegment:case at.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({},Fe),{lastUpdate:(new Date).toString()})}hasFields(t,e){const i=Object.keys(t);return!(!i.length||!e.length)&&e.every(t=>i.includes(t))}}let xe=class{constructor(t,e){this.externalStorage=t,this.storageKey=e;const i=new Me(e),a=this.read();if(!a.ok){if(a.error.type===n.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?u.Err(new h(n.StorageEmpty)):u.Ok(t)}catch(t){return _.error`Failed to read data from storage: ${this.storageKey}`,u.Err(new h(n.StorageRead,this.storageKey))}}write(t){try{return this.externalStorage.write(this.storageKey,t),u.Ok()}catch(t){return _.error`Failed to write data to storage: ${this.storageKey}`,u.Err(new h(n.StorageWrite,this.storageKey))}}update(t){const e=this.read();if(!e.ok)return e.error.type===n.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 _e{constructor(t,e){this.externalStorage=t,this.cleanupInterval=e,e>0&&this.initCleanupInterval()}initCleanupInterval(){for(const t of Object.values($e)){let e=null;try{switch(t){case $e.ForcedFeatureVariation:case $e.ForcedExperimentVariation:case $e.VariationData:case $e.ConsentData:_.info`Starting cleanup for ${t} with interval ${this.cleanupInterval}`,e=setInterval(()=>this.cleanupData(t),this.cleanupInterval);break;case $e.ClientData:case $e.TargetingData:case $e.TrackingData:case $e.VisitorCode:case $e.DataInfo:case $e.KameleoonSimulationFFData:break;default:_.error`Unknown storage key: ${t} for initCleanupInterval.`}}catch(i){e&&clearInterval(e),_.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 $e.VariationData:this.cleanupVariationData(e,i);break;case $e.ForcedFeatureVariation:this.cleanupForcedFeatureVariationData(e,i);break;case $e.ForcedExperimentVariation:this.cleanupForcedExperimentVariationData(e,i);break;case $e.ConsentData:this.cleanupConsentData(e,i);break;case $e.ClientData:case $e.TargetingData:case $e.TrackingData:case $e.VisitorCode:case $e.DataInfo:case $e.KameleoonSimulationFFData:break;default:_.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}}var Le;!function(t){t[t.Unknown=0]="Unknown",t[t.Given=1]="Given",t[t.NotGiven=2]="NotGiven"}(Le||(Le={}));class Ue{constructor(t){this.id=t,this.status=K.Unsent}get url(){return"eventType=targetingSegment"+R+this.id}get data(){return{id:this.id,type:at.TargetedSegment,status:this.status}}static _fromRaw(t){const{id:e,status:i}=t,a=new Ue(e);return a.status=i,a}}class Pe{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.customDataIndexByName=new Map,this.cleanupIntervalId=null,_.debug`CALL: new DataManager(dataStorage, infoStorage, cleanupInterval: ${i})`,this.dataStorage=t,this.infoStorage=e,this.dataProcessor=new Zt(i,a),this.packageInfo=a,i){const t=()=>{this.cleanupData()};try{this.cleanupIntervalId=setInterval(t,i)}catch(t){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),_.error`Failed to set cleanup interval: ${i}`,t}}_.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()+Ne,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===K.Unsent)}getPendingData(t){const e=this.getVisitorData(t);return e?this.getDataFromRaw(e,({status:t})=>t===K.Pending):[]}getDataFromRaw(t,e){const i=[];for(const[a,r]of Object.entries(t))if(r)switch(a){case at.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=Nt._fromRaw(t);i.push(e)}}break;case at.Conversion:for(const t of Object.values(r))if(t&&e({status:t.status,key:a})){const e=Mt._fromRaw(t);i.push(e)}break;case at.PageView:{const t=r;for(const r of Object.values(t))if(e({status:r.status,key:a})){const t=Ft._fromRaw(r);i.push(t)}break}case at.TargetedSegment:{const t=r;for(const r of Object.values(t))if(e({status:r.status,key:a})){const t=Ue._fromRaw(r);i.push(t)}break}case at.GeolocationData:{const t=r;if(!r)continue;if(e({status:t.status,key:a})){const e=Ut._fromRaw(t);i.push(e)}break}case at.Browser:{const t=r;if(e({status:t.status,key:a})){const e=xt._fromRaw(t);i.push(e)}break}case at.Device:{const t=r;if(e({status:t.status,key:a})){const e=_t._fromRaw(t);i.push(e)}break}case at.OperatingSystem:{const t=r;if(e({status:t.status,key:a})){const e=Lt._fromRaw(t);i.push(e)}}}return i}storeTrackedData(t){this.storeDataForVisitors(t,!1);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!==at.CustomData)return!1;const{index:e}=t;return this.persistentCustomDataIndexes.has(e)||this.mappingIdentifierCustomDataIndex===e});r&&t.add(at.CustomData),i[e]=Array.from(t),i[e].length||delete i[e]}this.infoStorage.write(e.data)}storeData({visitorCode:t,data:e,track:i}){_.debug`CALL: DataManager.storeDataForVisitor(vc: ${t}, track: ${i}, data: ${e})`;const a=this.storeDataInternal((a,r)=>{this.mutUpdateTargetingData({infoData:a,targetingData:r,visitorCode:t,kameleoonData:e,extendTtl:!0,track:i})});return _.debug`RETURN: DataManager.storeDataForVisitor(vc: ${t}, track: ${i}, data: ${e}) -> ${a}`,a}storeDataForVisitors(t,e){_.debug`CALL: DataManager.storeDataForVisitors(data: ${t}, extendTtl: ${e})`;const i=this.storeDataInternal((i,a)=>{for(const[r,n]of Object.entries(t))this.mutUpdateTargetingData({infoData:i,targetingData:a,visitorCode:r,kameleoonData:n,extendTtl:e})});return _.debug`RETURN: DataManager.storeDataForVisitors(data: ${t}, extendTtl: ${e}) -> ${i}`,i}storeDataInternal(t){const e=this.dataStorage.read();if(!e.ok)return e;const i=this.infoStorage.read();if(!i.ok)return i;const a=e.data,r=i.data;return t(r,a),this.cleanupData(),this.infoStorage.write(r),this.dataStorage.write(a)}getTree(t){if(this.targetingTrees.has(t.id))return this.targetingTrees.get(t.id);const e=new ae(t);return this.targetingTrees.set(t.id,e),e}clearTrees(){this.targetingTrees.clear()}isPersistentCustomData(t){return!!this.persistentCustomDataIndexes.size&&!!Ot.isCustomData(t)&&this.persistentCustomDataIndexes.has(t.data.index)}isUniqueIdentifier(t){var e;const i=this.getVisitorData(t),a=null==i?void 0:i[at.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){var e,i,a;const r=this.dataStorage.read();if(!r.ok)return null;const n=r.data[t];if("string"==typeof n)return n;if(null==n||null==this.mappingIdentifierCustomDataIndex)return null;const s=null===(a=null===(i=null===(e=n[at.CustomData])||void 0===e?void 0:e[this.mappingIdentifierCustomDataIndex])||void 0===i?void 0:i.value)||void 0===a?void 0:a[0];return null!=s?s:null}mutUpdateTargetingData({infoData:t,visitorCode:e,kameleoonData:i,targetingData:a,extendTtl:r,track:n}){var s,o,u;for(const d of i){if(!1===n&&(d.status=K.Sent),d.data.type===at.CustomData&&!this.processCustomData({infoData:t,customData:d,mutData:a,visitorCode:e}))continue;if(d.data.type===at.Conversion){const t=d;(null!==(o=null===(s=t._metadata)||void 0===s?void 0:s.length)&&void 0!==o?o:0)>0&&(t._metadata=null===(u=t._metadata)||void 0===u?void 0:u.filter(t=>this.trySetCustomDataIndexByName(t)))}const i=this.dataProcessor.mutUpdateData({infoData:t,visitorCode:e,mutData:a,dataItem:d,extendTtl:r}),l=t.nextDataCleanup;(!l||l&&i&&i<l)&&(t.nextDataCleanup=i),d.data.status===K.Unsent&&this.dataProcessor.mutAddUnsentData({mutData:t,visitorCode:e,dataType:d.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,s=Boolean(n.value.length&&n.value[0].length);if(!this.trySetCustomDataIndexByName(i))return!1;if(n.index==Nt.UNDEFINED_INDEX&&(n.index=i.index),this.mappingIdentifierCustomDataIndex===n.index&&s){i._isMappingIdentifier=!0;const s=n.value[0];a!==s&&(_.info`Linked anonymous visitor ${a} with user ${s}`,this.dataProcessor.createReference({infoData:t,mutData:e,visitorCode:a,linkedVisitor:n.value[0]}),null!==(r=t.mappingIdentifiers)&&void 0!==r||(t.mappingIdentifiers={}),t.mappingIdentifiers[s]={mappingIdentifier:a,timestamp:Date.now()})}return this.localCustomDataIndexes.has(n.index)&&(i.status=K.Sent),!0}trySetCustomDataIndexByName(t){if(t.index!==Nt.UNDEFINED_INDEX)return!0;if(!t.name)return!1;const e=this.customDataIndexByName.get(t.name);return null!=e&&(t.index=e,!0)}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(!(at.CustomData in e))return new Set;const i=new Set;for(const t in Object.keys(e[at.CustomData]))i.add(Number(t));return i}set customDataIndexes(t){var e;const[i,a]=[[],[]],r=new Map;t.forEach(t=>{t.localOnly&&i.push(t.index),t.scope===H.Visitor&&a.push(t.index),t.name&&r.set(t.name,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),this.customDataIndexByName=r}getCustomDataIndexByName(t){return this.customDataIndexByName.get(t)}}const Ke=16,Ge=31536e3;let Be=class{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?u.Err(new h(n.VisitorCodeEmpty)):t.length>255?u.Err(new h(n.VisitorCodeMaxLength)):u.Ok()}getVisitorCode(t){if(_.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($e.VisitorCode);return i&&(e=i),e||(t?(this.validateVisitorCode(t).throw(),e=t,_.debug`Used default visitor code: ${e}`):(e=this.generateVisitorCode(),_.debug`Generated new visitor code: ${e}`)),this.processSimulatedVariations(e),this.isConsentRequired||this.setDataCallback({visitorCode:e,key:$e.VisitorCode,maxAge:Ge,path:"/"}),_.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&&_.error`Failed to process simulated variations: ${t.message}`}}}getSimulatedVariations(t){_.debug`CALL: VisitorCodeManager.getSimulatedVariations(visitorCode: ${t})`;const e=this.getDataCallback($e.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&&_.error`Failed to parse simulated variations: ${t.message}`}return _.debug`RETURN: VisitorCodeManager.getSimulatedVariations(visitorCode: ${t}) -> (variations: ${i})`,i}generateVisitorCode(){const t=[];for(let e=0;e<16;e++)t.push("abcdefghijklmnopqrstuvwxyz0123456789"[Math.floor(36*Math.random())]);return t.join("")}setVariationConfiguration(t){this.variationConfiguration||(this.variationConfiguration=t)}};var ze,je,qe={exports:{}},He={exports:{}},We=i(Object.freeze({__proto__:null,default:{}}));var Ye,Xe=(je||(je=1,qe.exports=(Ye=function(){return ze||(ze=1,He.exports=(e=e||function(e){var i;if("undefined"!=typeof window&&window.crypto&&(i=window.crypto),"undefined"!=typeof self&&self.crypto&&(i=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(i=globalThis.crypto),!i&&"undefined"!=typeof window&&window.msCrypto&&(i=window.msCrypto),!i&&void 0!==t&&t.crypto&&(i=t.crypto),!i)try{i=We}catch(t){}var a=function(){if(i){if("function"==typeof i.getRandomValues)try{return i.getRandomValues(new Uint32Array(1))[0]}catch(t){}if("function"==typeof i.randomBytes)try{return i.randomBytes(4).readInt32LE()}catch(t){}}throw new Error("Native crypto module could not be used to get secure random number.")},r=Object.create||function(){function t(){}return function(e){var i;return t.prototype=e,i=new t,t.prototype=null,i}}(),n={},s=n.lib={},o=s.Base={extend:function(t){var e=r(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)}},u=s.WordArray=o.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||l).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 s=i[n>>>2]>>>24-n%4*8&255;e[a+n>>>2]|=s<<24-(a+n)%4*8}else for(var o=0;o<r;o+=4)e[a+o>>>2]=i[o>>>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=o.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(a());return new u.init(e,t)}}),d=n.enc={},l=d.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 u.init(i,e/2)}},c=d.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 u.init(i,e)}},h=d.Utf8={stringify:function(t){try{return decodeURIComponent(escape(c.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return c.parse(unescape(encodeURIComponent(t)))}},g=s.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new u.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=h.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var i,a=this._data,r=a.words,n=a.sigBytes,s=this.blockSize,o=n/(4*s),d=(o=t?e.ceil(o):e.max((0|o)-this._minBufferSize,0))*s,l=e.min(4*d,n);if(d){for(var c=0;c<d;c+=s)this._doProcessBlock(r,c);i=r.splice(0,d),a.sigBytes-=l}return new u.init(i,l)},clone:function(){var t=o.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0});s.Hasher=g.extend({cfg:o.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){g.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 v.HMAC.init(t,i).finalize(e)}}});var v=n.algo={};return n}(Math),e)),He.exports;var e}(),function(t){var e=Ye,i=e.lib,a=i.WordArray,r=i.Hasher,n=e.algo,s=[],o=[];!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&&(s[r]=i(t.pow(a,.5))),o[r]=i(t.pow(a,1/3)),r++),a++}();var u=[],d=n.SHA256=r.extend({_doReset:function(){this._hash=new a.init(s.slice(0))},_doProcessBlock:function(t,e){for(var i=this._hash.words,a=i[0],r=i[1],n=i[2],s=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 v=u[g-15],f=(v<<25|v>>>7)^(v<<14|v>>>18)^v>>>3,p=u[g-2],m=(p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10;u[g]=f+u[g-7]+m+u[g-16]}var C=a&r^a&n^r&n,y=(a<<30|a>>>2)^(a<<19|a>>>13)^(a<<10|a>>>22),I=h+((d<<26|d>>>6)^(d<<21|d>>>11)^(d<<7|d>>>25))+(d&l^~d&c)+o[g]+u[g];h=c,c=l,l=d,d=s+I|0,s=n,n=r,r=a,a=I+(y+C)|0}i[0]=i[0]+a|0,i[1]=i[1]+r|0,i[2]=i[2]+n|0,i[3]=i[3]+s|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),Ye.SHA256)),qe.exports),Je=e(Xe);class Qe{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=Je(t).toString();return parseInt(e,16)/Math.pow(2,256)}}class Ze{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===K.Unsent)}getVisitorsWithUnsentData(){_.debug`CALL: VariationConfiguration.unsentDataVisitors()`;const t=this.storage.read();if(!t.ok)return _.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (result: ${t})`,[];const e=[];for(const[i,a]of Object.entries(t.data))Object.values(a).some(t=>t.status===K.Unsent)&&e.push(i);return _.debug`RETURN: VariationConfiguration.unsentDataVisitors() -> (visitors: ${e})`,e}getPendingData(t){return this.getVariationData(t,t=>t===K.Pending)}getStoredVariations(t){const e=this.storage.read();if(!e.ok)return e;const i=e.data[t];return i?u.Ok(i):u.Err(new h(n.StorageRead,t))}getVariation({visitorCode:t,visitorIdentifier:e,featureFlag:i,targetingData:a,packageInfo:r,clientConfiguration:s,dataManager:o,legalConsent:d,track:l=!0,withAssignment:c=!1}){_.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${c})`;const{rules:g,featureKey:v,id:f,defaultVariationKey:p}=i,m=s.isConsentRequired?d:Le.Given;for(const d of g){const{segment:g,experimentId:C,id:y,exposition:I,respoolTime:D,variationByExposition:E}=d,T=Date.now(),k=this.getForcedExperimentVariation(t,d.experimentId);let V=null;if(k.ok&&(V=k.data,null==V?void 0:V.forceTargeting)){_.info`Visitor ${t} has been forced targeted for ${d}`;const n=this.createAndSaveForcedTargetedVariation(t,i,d,V,l,c,T);return _.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${n})`,u.Ok(n)}const R=Ot.checkTargeting({segment:g,visitorCode:t,experimentId:C,targetingData:a,packageInfo:r,clientConfiguration:s,dataManager:o,variationConfiguration:this});if(!R.ok)return _.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${R})`,R;if(!R.data)continue;if(_.info`Visitor ${t} has been targeted for ${d}`,V){const n=this.createAndSaveForcedTargetedVariation(t,i,d,V,l,c,T);return _.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${n})`,u.Ok(n)}const S=Qe.getHashDouble({visitorIdentifier:e,respoolTime:D,id:String(y)});if(_.debug`Calculated ruleHash: ${S} for code: ${e}`,S<=I){if(m==Le.NotGiven&&d.type==z.EXPERIMENTATION){if(s.consentBlockingBehaviour==Y.PartiallyBlocked)break;return u.Err(new h(n.FeatureFlagEnvironmentDisabled,`Evaluation of ${d} is blocked because consent is not provided for visitor '${t}'`))}let o=this.evaluateCBScores(d,e,a);if(!o){const t=Qe.getHashDouble({visitorIdentifier:e,respoolTime:D,id:String(C)});_.debug`Calculated variationHash: ${t} for code: ${e}`,o=Ot.getVariationByHash(E,t)}if(o){c&&this.updateStoredVariations(t,{[C]:{variationId:o.variationId,isTargetedRule:d.type===z.TARGETED_DELIVERY,status:l?K.Unsent:K.Sent,assignedTime:T}});const n={variationId:o.variationId,variationKey:o.variationKey,rule:d,featureFlagId:f,featureKey:v,experimentId:C,isTargetedRule:d.type===z.TARGETED_DELIVERY};return _.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${n})`,u.Ok(n)}}if(d.type===z.TARGETED_DELIVERY){const n={featureKey:v,featureFlagId:f,experimentId:null,variationKey:p,variationId:null,rule:null,isTargetedRule:!0};return _.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${n})`,u.Ok(n)}}const C={featureKey:v,featureFlagId:f,experimentId:null,variationKey:p,variationId:null,rule:null,isTargetedRule:!1};return _.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${t}, visitorIdentifier: ${e}, featureFlag: ${i}, targetingData: ${a}, packageInfo: ${r}, clientConfiguration, dataManager, withAssignment: ${c}) -> (targetedVariation: ${C})`,u.Ok(C)}createAndSaveForcedTargetedVariation(t,e,i,a,r,n,s){const o={variationKey:a.varByExp.variationKey,variationId:a.varByExp.variationId,rule:i,featureFlagId:e.id,featureKey:e.featureKey,experimentId:i.experimentId,isTargetedRule:i.type===z.TARGETED_DELIVERY};return n&&this.updateStoredVariations(t,{[i.experimentId]:{variationId:o.variationId,isTargetedRule:i.type===z.TARGETED_DELIVERY,status:r?K.Unsent:K.Sent,assignedTime:s}}),o}updateStoredVariations(t,e){_.debug`CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${t}, variationData: ${e})`;const i=this.storage.read();if(!i.ok)return _.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 _.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){_.debug`CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${t}, experimentId: ${e}, forcedExperimentVariation: ${i})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return _.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 _.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${t}, experimentId: ${e}, forcedExperimentVariation: ${i}) -> (resultWrite: ${n})`,n}updateForcedFeatureVariations(t,e){_.debug`CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${t}, forcedFeatureVariations: ${e})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return _.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 s=this.storageForcedFeatureVariations.write(a);return _.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${t}, forcedFeatureVariations: ${e}) -> (resultWrite: ${s})`,s}clearSimulatedVariations(t){var e;_.debug`CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${t})`;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return _.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=u.Ok(),_.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${t}) -> (resultWrite: ${a})`,a}getForcedFeatureVariation(t,e){var i,a,r,n;_.debug`CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${t}, featureKey: ${e})`;const s=this.storageForcedFeatureVariations.read();if(!s.ok)return _.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${t}, featureKey: ${e}) -> (simulatedResult: ${s})`,s;const o=null===(a=null===(i=s.data[1])||void 0===i?void 0:i[t])||void 0===a?void 0:a[e];if(o)return _.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${t}, featureKey: ${e}) -> (simulatedData: ${o})`,u.Ok(o);const d=null===(n=null===(r=s.data[0])||void 0===r?void 0:r[t])||void 0===n?void 0:n[e];return _.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${t}, featureKey: ${e}) -> (forcedData: ${d})`,u.Ok(d)}getForcedExperimentVariation(t,e){var i;_.debug`CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${t}, experimentId: ${e})`;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return _.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 _.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${t}, experimentId: ${e}) -> (forcedExperiment: ${r})`,u.Ok(r)}parseForcedVariationData(t,e){const i=this.clientConfiguration.featureFlags.get(t.featureKey);if(!i)return _.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 _.error`Simulated variation ${t.variationId} not found`,null}simulatedVariationFromJson(t,e){if(_.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 _.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(!(null==i?void 0:i.cbScores))return null;_.debug`CALL: KameleoonClientImpl.evaluateCBScores(rule: ${t}, targetingData: ${i}, visitorIdentifier: ${e})`;const a=t.experimentId,r=new Bt(i.cbScores.cbs).getValues().get(a);let n=null;if(void 0!==r){const i=t.variationByExposition,s=r.map(t=>i.filter(e=>t.ids.includes(e.variationId))).find(t=>t.length>0);if(s){let i=0;if(s.length>1){const r=Qe.getHashDouble({visitorIdentifier:e,respoolTime:t.respoolTime,id:String(a)});_.debug`Calculated cbs hash ${r} for code ${e}`,i=Math.min(Math.floor(r*s.length),s.length-1)}n=s[i]}}return _.debug`RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${t}, targetingData: ${i}, visitorIdentifier: ${e}) -> (variation: ${n})`,n}}let ti=class{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,_.info`Established a new SSE connection with: ${this.url}`}close(){this.eventSource.close(),this.isConnectionOpen=!1,_.info`SSE connection: '${this.url}' was successfully closed`}onError(t){this.eventSource.onError?this.eventSource.onError(t):_.warning("EventSource does not have `onError` method provided. Real-time errors won't be handled.")}handleMessage(t){return e=>{_.debug`Received new message from: ${this.url}`;const i=JSON.parse(e.data),{siteCode:a,ts:r}=i;this.siteCode===a&&t(r)}}};var ei;!function(t){t[t.Kb=1e3]="Kb",t[t.Mb=1e6]="Mb",t[t.Gb=1e9]="Gb"}(ei||(ei={}));const ii=10*ei.Mb;class ai{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 s=[],o=this.getVariationDataLines(e),u=this.getVisitorDataLines(i);return s.push(...o,...u),this.addVisitorTrackingLines({visitorCode:t,lines:s,userAgent:a,isConsentProvided:r,isMappingIdentifier:n})}getVisitorDataLines(t){const e=[];for(const i of t){let t;if(!(i instanceof te||i.data.type!==at.Conversion&&i.data.type!==at.PageView)){const e=i.data.nonce;e?t=e:(t=Ot.getNonce(this.prng),i.data.nonce=t)}t||(t=Ot.getNonce(this.prng)),e.push(i.url+V+t)}return e}getVariationDataLines(t){const e=[];return t.forEach(t=>{e.push("eventType=experiment"+R+t.experimentId+"&variationId="+t.variationId+V+Ot.getNonce(this.prng))}),e}prepareVisitorBody(t){const e=this.trackingVisitors[t];if(!e)return u.Err();const{lines:i,userAgent:a,isMappingIdentifier:r,isConsentProvided:n}=e,s=this.getIdentifier(t,r);if(i.length)i.forEach((t,e)=>{i[e]=t+s}),_.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+s),_.debug`Sending tracking request for activity of visitor ${t} with given consent`}else _.debug`No data to send for visitor ${t} with no consent`;a&&i.length&&(i[0]+="&userAgent="+a,this.hasUserAgent=!0);const o=this.checkSize(i);return o.ok&&this.resultBody.push(...i),o}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>ii?u.Err():(this.currentSize+=e,u.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"eventType=activity"+V+Ot.getNonce(this.prng)}getIdentifier(t,e){return(e?O:T)+encodeURIComponent(t)}}class ri{constructor({dataManager:t,trackingStorage:e,variationConfiguration:i,trackingInterval:a,requester:r,prng:n,clientConfiguration:s}){this.intervalId=null,_.debug`CALL: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng, clientConfiguration)`,this.dataManager=t,this.trackingStorage=e,this.variationConfiguration=i,this.requester=r,this.bodyProvider=new ai(n),this.clientConfiguration=s;try{this.intervalId=setInterval(()=>{this.sendDataAll()},a)}catch(t){throw this.intervalId&&clearInterval(this.intervalId),t}_.debug`RETURN: new Tracker(dataManager, trackingStorage, variationConfiguration, trackingInterval: ${a}, requester, prng, clientConfiguration)`}scheduleVisitor(t,e){_.debug`CALL: Tracker.scheduleVisitor(visitorCode: ${t}, isConsentProvided: ${e})`,this.trackingStorage.read().and(i=>{i.scheduledVisitors[`_${t}`]={isConsentProvided:e},this.trackingStorage.write(i)}),_.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({visitorCode:t,data:[new Nt(i,t)]})}return n&&t!=r}getUserAgent(t){const e=this.dataManager.getVisitorData(t);if(e){const t=e[at.UserAgent];if(t)return t.value}}sendDataAll(){return d(this,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 d(this,0,void 0,function*(){this.trackingStorage.read().ok&&(yield this.sendData({[`_${t}`]:{isConsentProvided:e}}))})}sendData(t){return d(this,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 s=this.checkIsIdentifier(t),o=this.getUserAgent(t),u=this.getUnsentVisitorData(t,n),d=this.getUnsentVariationData(t,n);if(!this.bodyProvider.addData({visitorCode:t,variationData:d,visitorData:u,userAgent:o,isConsentProvided:n,isMappingIdentifier:s}).ok){_.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)if((yield this.requester.track(r,n)).ok)_.info`Successful request for tracking visitors: ${a}, data: ${e}`,this.updateDataStatus(e,K.Sent);else{_.error("Tracking request failed"),_.info`Failed request for tracking visitors: ${a}, data: ${e}`,this.updateDataStatus(e,K.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 te)).map(t=>{const i=t;return i.status=e,i});t.length&&(i[a]=t);const s=n.map(t=>String(t.experimentId));this.variationConfiguration.updateDataStatus({visitorCode:a,experimentIdList:s,status:e})}0!==Object.keys(i).length&&(e===K.Sent?this.dataManager.storeTrackedData(i):this.dataManager.storeDataForVisitors(i,!1))}getUnsentVisitorData(t,e){const i=this.dataManager.getUnsentData(t),a=[];if(!i.length)return[];for(const t of i)t.url&&(e||this.clientConfiguration.hasAnyTargetedDeliveryRule&&!(t instanceof te)&&t.data.type===at.Conversion)&&a.push(t);if(a.length){const e=a.filter(t=>!(t instanceof te)).map(t=>{const e=t;return e.status=K.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:K.Pending}),r}}let ni=class t{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 s=null==a?void 0:a.externals.externalLogger;s&&_.setLogger(s),ee.setConditionFactoryInstance(new Oe),_.debug`CALL: new KameleoonClient(siteCode: ${t}, dependencies: ${e}, configuration: ${i})`;const{settings:o}=new Wt(t,i);this.environment=o.environment;const{externalStorage:u,externalEventSource:d,externalPackageInfo:l,externalVisitorCodeManager:c,externalRequester:h,externalPRNG:g,customDataManager:v}=a.externals,{useAbortController:f}=a.settings,p=new Q(10),m=new xe(u,$e.ClientData),C=new xe(u,$e.VariationData),y=new xe(u,$e.ForcedExperimentVariation),I=new xe(u,$e.ForcedFeatureVariation),D=new xe(u,$e.ConsentData),E=new xe(u,$e.TrackingData);let T=v;if(!T){const t=new xe(u,$e.TargetingData),e=new xe(u,$e.DataInfo);T=new Pe({dataStorage:t,infoStorage:e,cleanupInterval:o.cleanupInterval,packageInfo:l})}const k=null!==(n=null==e?void 0:e.urlProvider)&&void 0!==n?n:new J;k.initialize({domain:o.networkDomain,siteCode:o.siteCode,packageInfo:l,environment:o.environment});const V=new L({urlProvider:k,useAbortController:f,packageInfo:l,externalRequester:h,requestTimeout:o.requestTimeout,trackRetryDelay:o.trackRetryDelay}),R=new ti({siteCode:o.siteCode,externalEventSource:d,urlProvider:k}),S=new Z,w=new qt({urlProvider:k,storage:m,updateInterval:o.updateInterval,dataManager:T,eventManager:S,requester:V,eventSource:R,externalVisitorCodeManager:c,externalPackageInfo:l,defaultDataFile:null==i?void 0:i.defaultDataFile}),b=new Ze(C,y,I,c,w),A=new ri({dataManager:T,trackingStorage:E,variationConfiguration:b,requester:V,trackingInterval:o.trackingInterval,prng:g,clientConfiguration:w});this.tracker=A,this.variationConfiguration=b,this.requester=V,this.trackingCache=p,this.dataManager=T,this.clientConfiguration=w,this.externalPackageInfo=l,this.consentDataStorage=D,this.visitorCodeManager=c,this.eventManager=S,null!==o.cleanupInterval&&new _e(u,o.cleanupInterval),_.debug`RETURN: new KameleoonClient(siteCode: ${t}, dependencies: ${e}, configuration: ${i})`}initialize(){return d(this,0,void 0,function*(){if(this.stubMode)return!1;_.info("CALL: KameleoonClient.initialize()");const t=yield this.clientConfiguration.initialize();return t.throw(),this.initialized=!0,_.info`RETURN: KameleoonClient.initialize() -> (result: ${t.ok})`,t.ok})}addData(t,...e){if(this.stubMode)throw new h(n.Initialization);const i="string"==typeof t?{visitorCode:t,data:e}:t,{visitorCode:a,data:r,track:s=!0}=i;if(_.info`CALL: KameleoonClient.addData(visitorCode: ${a}, track: ${s}, data: ${r})`,this.visitorCodeManager.validateVisitorCode(a).throw(),!this.initialized)throw new h(n.Initialization);this.dataManager.storeData({visitorCode:a,track:s,data:r}).throw(),_.info`RETURN: KameleoonClient.addData(visitorCode: ${a}, track: ${s}, data: ${r})`}getRemoteVisitorData({visitorCode:t,shouldAddData:e=!0,filters:i=vt}){return d(this,0,void 0,function*(){if(this.stubMode)throw new h(n.Initialization);if(_.info`CALL: KameleoonClient.getRemoteVisitorData(visitorCode: ${t}, shouldAddData: ${e}, filters: ${i})`,!this.initialized)throw new h(n.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const{previousVisitAmount:a}=i;if("number"==typeof a&&(a<1||a>25))throw new h(n.VisitAmount);const r=this.dataManager.isUniqueIdentifier(t),s=(yield this.requester.getVisitorData({visitorCode:t,filters:i,isMappingIdentifier:r})).throw(),{visitorData:o,storageVisitorData:u,visitsData:d,mappingIdentifier:l}=jt.parseVisitorData({data:s,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),_.info`RETURN: KameleoonClient.getRemoteVisitorData(visitorCode: ${t}, shouldAddData: ${e}, filters: ${i}) -> (visitorData: ${o})`,o})}trackConversion({visitorCode:t,goalId:e,negative:i,revenue:a,metadata:r}){this.stubMode||(_.info`CALL: KameleoonClient.trackConversion(visitorCode: ${t}, goalId: ${e}, negative: ${i}, revenue: ${a}, metadata: ${r})`,this.addData(t,new Mt({goalId:e,revenue:a,negative:i,metadata:r})),this.flush(t),_.info`RETURN: KameleoonClient.trackConversion(visitorCode: ${t}, goalId: ${e}, negative: ${i}, revenue: ${a}, metadata: ${r})`)}_flushInternal(t,e=!1){return d(this,0,void 0,function*(){if("string"==typeof t)e?yield this.tracker.sendDataForVisitor(t,this._isConsentProvided(t)):this.tracker.scheduleVisitor(t,this._isConsentProvided(t));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));e&&(yield this.tracker.sendDataAll())}})}flushInstant(t){return d(this,0,void 0,function*(){if(this.stubMode)throw new h(n.Initialization);const{visitorCode:e}=this._parseFlushParams(t);if(_.info`CALL: KameleoonClient.flushInstant(visitorCode: ${t})`,!this.initialized)throw new h(n.Initialization);yield this._flushInternal(e,!0),_.info`RETURN: KameleoonClient.flushInstant(visitorCode: ${t})`})}flush(t){if(this.stubMode)throw new h(n.Initialization);const{visitorCode:e,isInstant:i}=this._parseFlushParams(t);if(_.info`CALL: KameleoonClient.flush(visitorCode: ${e}, instant: ${i})`,!this.initialized)throw new h(n.Initialization);this._flushInternal(e,i),_.info`RETURN: KameleoonClient.flush(visitorCode: ${e}, instant: ${i})`}_parseFlushParams(t){var e;let i,a=!1;return"string"==typeof t?i=t:t&&(i=t.visitorCode,a=null!==(e=t.instant)&&void 0!==e&&e),void 0!==i&&this.visitorCodeManager.validateVisitorCode(i).throw(),{visitorCode:i,isInstant:a}}getFeatureFlags(){if(this.stubMode)throw new h(n.Initialization);if(_.info("CALL: KameleoonClient.getFeatureFlags()"),!this.initialized)throw new h(n.Initialization);const t=this.clientConfiguration.featureFlags,e=[];return t.forEach(({id:t,featureKey:i})=>{e.push({id:t,key:i})}),_.info`RETURN: KameleoonClient.getFeatureFlags() -> (FeatureFlags: ${e})`,e}getVisitorFeatureFlags(t){if(this.stubMode)throw new h(n.Initialization);if(_.info`CALL: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${t})`,!this.initialized)throw new h(n.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})}),_.info`RETURN: KameleoonClient.getVisitorFeatureFlags(visitorCode: ${t}) -> (FeatureFlags: ${i})`,i}getVariation({visitorCode:t,featureKey:e,track:i=!0}){if(this.stubMode)throw new h(n.Initialization);_.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 _.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 h(n.Initialization);_.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 s of r.values())try{const r=this._getFeatureVariation({visitorCode:t,featureKey:s.featureKey,track:i});!r.ok||e&&r.data.key===ct||a.set(s.featureKey,r.data)}catch(t){if(t instanceof h&&t.type!==n.FeatureFlagEnvironmentDisabled)throw t}return _.info`RETURN: KameleoonClient.getVariations(visitorCode: ${t}, onlyActive: ${e}, track: ${i}) -> (variations: ${a})`,a}getActiveFeatureFlags(t){if(this.stubMode)throw new h(n.Initialization);if(_.info`CALL: KameleoonClient.getActiveFeatureFlags(visitorCode: ${t})`,!this.initialized)throw new h(n.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:s}=e;let o=[];null!==n&&null!==s&&(o=this._getFeatureVariables({visitorCode:t,featureKey:r,variationKey:a}));const u=o.map(t=>jt.parseFeatureVariable(t).throw());i.set(e.featureKey,{name:"",key:a,id:n,experimentId:s,variables:u})}),_.info`RETURN: KameleoonClient.getActiveFeatureFlags(visitorCode: ${t}) -> (FeatureFlags: ${i})`,i}getFeatureFlagVariationKey(t,e){if(this.stubMode)throw new h(n.Initialization);_.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 _.info`RETURN: KameleoonClient.getFeatureFlagVariationKey(visitorCode: ${t}, featureKey: ${e}) -> (variationKey: ${i})`,i}getFeatureFlagVariable({visitorCode:t,featureKey:e,variableKey:i}){if(this.stubMode)throw new h(n.Initialization);_.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 h(n.FeatureFlagVariableNotFound,i,t);const{type:s,value:o}=jt.parseFeatureVariable(r).throw(),u={type:s,value:o};return _.info`RETURN: KameleoonClient.getFeatureFlagVariable(visitorCode: ${t}, featureKey: ${e}, variableKey: ${i}) -> (FeatureFlagVariable: ${u})`,u}getFeatureFlagVariables(t,e){if(this.stubMode)throw new h(n.Initialization);_.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=jt.parseFeatureVariable(t).throw();r.push(e)}return _.info`RETURN: KameleoonClient.getFeatureFlagVariables(visitorCode: ${t}, featureKey: ${e}) -> (FeatureFlagVariables: ${r})`,r}isFeatureFlagActive(t,e){if(this.stubMode)throw new h(n.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)),_.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!==ct;return _.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track: ${r}) -> (isActive: ${e})`,e}catch(t){if(t instanceof h&&t.type===n.FeatureFlagEnvironmentDisabled)return _.info`RETURN: KameleoonClient.isFeatureFlagActive(visitorCode: ${i}, featureKey: ${a}, track: ${r}) -> (isActive: false)`,!1;throw t}}getRemoteData(t){return d(this,0,void 0,function*(){if(this.stubMode)return null;_.info`CALL: KameleoonClient.getRemoteData(key: ${t})`;const e=yield this.requester.getRemoteData(t);return _.info`RETURN: KameleoonClient.getRemoteData(key: ${t}) -> (remoteData: ${e})`,e.throw()})}getVisitorWarehouseAudience({visitorCode:t,customDataIndex:e,warehouseKey:i}){return d(this,0,void 0,function*(){if(this.stubMode)return null;_.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 h(n.RemoteData,`No data found for ${i||t} key`);if(!a[ht]||0===Object.keys(a[ht]).length)return _.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${t}, customDataIndex: ${e}, warehouseKey: ${i}) -> (customData: null)`,null;const r=new Nt(e,...Object.keys(a[ht]));return this.dataManager.storeData({visitorCode:t,track:!0,data:[r]}),_.info`RETURN: KameleoonClient.getVisitorWarehouseAudience(visitorCode: ${t}, customDataIndex: ${e}, warehouseKey: ${i}) -> (customData: ${r})`,r})}onEvent(t,e){if(this.stubMode)throw new h(n.Initialization);if(_.info`CALL: KameleoonClient.onEvent(event: ${t}, callback)`,!this.initialized)throw new h(n.Initialization);this.eventManager.addEventHandler(t,e),_.info`RETURN: KameleoonClient.onEvent(event: ${t}, callback)`}getEngineTrackingCode(t){if(this.stubMode)return"";_.info`CALL: KameleoonClient.getEngineTrackingCode(visitorCode: ${t})`,this.visitorCodeManager.validateVisitorCode(t).throw();const e=Ot.getTrackingCode(this.trackingCache,t);return _.info`RETURN: KameleoonClient.getEngineTrackingCode(visitorCode: ${t}) -> (trackingCode: ${e})`,e}isInitialized(){return _.debug`CALL/RETURN: KameleoonClient.isInitialized() -> (initialized: ${this.initialized})`,this.initialized}setLogLevel(t){_.setLogLevel(t)}setForcedVariation({visitorCode:t,experimentId:e,variationKey:i,forceTargeting:a=!0}){this.stubMode||(_.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(),_.info`RETURN: KameleoonClient.setForcedVariation(visitorCode: '${t}', experimentId: ${e}, variationKey: '${i}', forceTargeting: ${a})`)}evaluateAudiences(t){if(this.stubMode)return;_.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=Ot.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&&(_.info`Visitor ${t} has been targeted for ${a}`,e.push(new Ue(Number(a.id))))}0!==e.length&&this.dataManager.storeData({visitorCode:t,data:e}),this.flush(t),_.info`RETURN: KameleoonClient.evaluateAudiences(visitorCode: ${t})`}getDataFile(){const t={featureFlags:new Map,dateModified:0};if(this.stubMode)return t;_.debug`CALL: KameleoonClient.getDataFile()`;const e=this.clientConfiguration.dataFile;return _.debug`RETURN: KameleoonClient.getDataFile() -> (dataFile: ${e})`,e}setUserConsent({visitorCode:t,consent:e,setData:i}){this.stubMode||(_.info`CALL: KameleoonClient.setUserConsent(visitorCode: ${t}, consent: ${e}, setData: ${i})`,this.visitorCodeManager.validateVisitorCode(t).throw(),this.updateConsentData(t,e),e&&i({visitorCode:t,key:$e.VisitorCode,maxAge:Ge,path:"/"}),_.info`RETURN: KameleoonClient.setUserConsent(visitorCode: ${t}, consent: ${e}, setData: ${i})`)}updateConsentData(t,e){const i=this.consentDataStorage.read(),a=e?Le.Given:Le.NotGiven;if(!i.ok)return void(i.error.type===n.StorageEmpty&&this.consentDataStorage.write({[t]:{consent:a}}));const r=i.data;r[t]={consent:a},this.consentDataStorage.write(r)}getLegalConsent(t){let e;_.debug`CALL: KameleoonClient.getLegalConsent(visitorCode: ${t})`;const i=this.consentDataStorage.read();return e=i.ok?this.extractLegalConsent(i.data[t]):Le.Unknown,_.debug`RETURN: KameleoonClient.getLegalConsent(visitorCode: ${t}) -> (legalConsent: ${e})`,e}extractLegalConsent(t){if(void 0===t)return Le.Unknown;if("boolean"==typeof t)return t?Le.Given:Le.NotGiven;const e=t.consent;return"boolean"==typeof e?e?Le.Given:Le.NotGiven:e}_isConsentProvided(t){_.debug`CALL: KameleoonClient._isConsentProvided(visitorCode: ${t})`;const{isConsentRequired:e}=this.clientConfiguration,i=!e||this.getLegalConsent(t)==Le.Given;return _.debug`RETURN: KameleoonClient._isConsentProvided(visitorCode: ${t}) -> (isConsentProvided: ${i})`,i}_getFeatureVariables({visitorCode:t,featureKey:e,variationKey:i}){_.debug`CALL: KameleoonClient._getFeatureVariables(visitorCode: ${t}, featureKey: ${e}, variationKey: ${i})`;const a=this.clientConfiguration.featureFlags.get(e);if(!a)throw new h(n.FeatureFlagConfigurationNotFound,e);const r=a.variations.find(t=>t.key===i);if(!r)throw new h(n.FeatureFlagVariationNotFound,i,t);return _.debug`RETURN: KameleoonClient._getFeatureVariables(visitorCode: ${t}, featureKey: ${e}, variationKey: ${i}) -> (variables: ${r.variables})`,r.variables}_getActiveFeatureVariations(t){_.debug`CALL: KameleoonClient._getActiveFeatureVariations(visitorCode: ${t})`;const e=this.clientConfiguration.featureFlags,i=[];for(const a of e.values()){const e=this._getForcedFeatureVariation(t,a.featureKey);if(a.environmentEnabled||(null==e?void 0:e.simulated))try{const r=this._evaluate({visitorCode:t,featureFlag:a,track:!1,save:!1,forcedVariation:e});r.variationKey!==ct&&i.push({variationKey:r.variationKey,variationId:r.variationId,experimentId:r.experimentId,featureFlagId:a.id,featureKey:a.featureKey,rule:null,isTargetedRule:r.ruleType===z.TARGETED_DELIVERY})}catch(t){if(t instanceof h){t.type!=n.FeatureFlagEnvironmentDisabled&&_.error`Unexpected error: ${t}`;continue}}}return _.debug`RETURN: KameleoonClient._getActiveFeatureVariations(visitorCode: ${t}) -> (activeVariations: ${i})`,i}_evaluate({visitorCode:e,featureFlag:i,track:a,save:r,forcedVariation:n}){let s;_.debug`CALL: KameleoonClient._evaluate(visitorCode: ${e}, featureFlag: ${i}, track: ${a}, save: ${r})`;const o=this.dataManager.getVisitorData(e);if(n)s=t.EvaluatedExperiment.fromForcedFeatureVariation(i.defaultVariationKey,n);else if(this._isVisitorNotInHoldout(e,a,r,i,o)&&this._isFFUnrestrictedByMEGroup(e,i,o)){const n=this._getCodeForHash(e,i.bucketingCustomDataIndex,o),u=this.getLegalConsent(e),d=this.variationConfiguration.getVariation({visitorCode:e,visitorIdentifier:n,featureFlag:i,track:a,withAssignment:r,targetingData:o,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo,legalConsent:u}).throw();s=t.EvaluatedExperiment.fromVariationData(d)}else s=t.EvaluatedExperiment.fromDefaultVariationKey(i.defaultVariationKey);return r&&!s.isSimulated&&null!==s.experimentId&&null!==s.variationId&&this.variationConfiguration.updateStoredVariations(e,{[s.experimentId]:{variationId:s.variationId,isTargetedRule:s.ruleType===z.TARGETED_DELIVERY,status:a?K.Unsent:K.Sent,assignedTime:Date.now()}}),this.eventManager.fireEvent(X.Evaluation,{featureKey:i.featureKey,variation:{key:s.variationKey,experimentId:s.experimentId,id:s.variationId}}),_.debug`RETURN: KameleoonClient._evaluate(visitorCode: ${e}, featureFlag: ${i}, track: ${a}, save: ${r}) -> (evalExp: ${s})`,s}_isFFUnrestrictedByMEGroup(t,e,i){const a=e.mutuallyExclusiveGroup;if(!a)return!0;_.debug`CALL: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${t}, featureFlag: ${e}, visitorData: ${i})`;let r=!0;const n=this.clientConfiguration.meGroups.get(a);if(n){const s=this._getCodeForHash(t,e.bucketingCustomDataIndex,i),o=Qe.getHashDoubleForMEGroup(s,a);_.debug`Calculated meGroup hash ${o} for code: ${s}, meGroup: ${a}`,r=n.getFeatureFlagByHash(o)===e}return _.debug`RETURN: KameleoonClient._isFFUnrestrictedByMEGroup(visitorCode: ${t}, featureFlag: ${e}, visitorData: ${i}) -> (selected: ${r})`,r}_getFeatureVariation({visitorCode:t,featureKey:e,track:i}){var a,r;if(_.debug`CALL: KameleoonClient._getFeatureVariation(visitorCode: ${t}, featureKey: ${e}, track: ${i})`,!this.initialized)return u.Err(new h(n.Initialization));const s=this.clientConfiguration.featureFlags.get(e);if(!s)return u.Err(new h(n.FeatureFlagConfigurationNotFound,e));const o=this._getForcedFeatureVariation(t,e);if(!s.environmentEnabled&&!(null==o?void 0:o.simulated))return u.Err(new h(n.FeatureFlagEnvironmentDisabled,s.featureKey,this.environment));const d=this._evaluate({visitorCode:t,featureFlag:s,track:i,save:!0,forcedVariation:o}),{experimentId:l,variationId:c,variationKey:g,isSimulated:v}=d;let f=new Map,p=!1;try{this._getFeatureVariables({visitorCode:t,featureKey:e,variationKey:g}).forEach(t=>{p||t.type!==P.JS&&t.type!==P.CSS||(p=!0);const e=jt.parseFeatureVariable(t).throw();f.set(t.key,e)})}catch(t){}l&&"number"==typeof c&&!v&&Ot.updateCache({cacheManager:this.trackingCache,hasJsCssVariables:p,visitorCode:t,experimentId:l,variationId:c}),i&&!v&&this.tracker.scheduleVisitor(t,this._isConsentProvided(t));const m={name:null!==(r=null===(a=s.variations.find(t=>t.key===g))||void 0===a?void 0:a.name)&&void 0!==r?r:"",key:g,id:c,experimentId:l,variables:f};return _.debug`RETURN: KameleoonClient._getFeatureVariation(visitorCode: ${t}, featureKey: ${e}, track: ${i}) -> (variation: ${m})`,u.Ok(m)}_isVisitorNotInHoldout(t,e,i,a,r){const s=this.clientConfiguration.holdout;if(!s)return!0;_.debug`CALL: KameleoonClient._isVisitorNotInHoldout(visitorCode: ${t}, track: ${e}, save: ${i}, featureFlag: ${a}, visitorData: ${r})`;let o=!0;if((this.clientConfiguration.isConsentRequired?this.getLegalConsent(t):Le.Given)==Le.NotGiven&&this.clientConfiguration.consentBlockingBehaviour==Y.CompletelyBlocked)throw new h(n.FeatureFlagEnvironmentDisabled,`Evaluation of holdout is blocked because consent is not provided for visitor '${t}'`);const u=this._getCodeForHash(t,null==a?void 0:a.bucketingCustomDataIndex,r),d=Qe.getHashDouble({visitorIdentifier:u,respoolTime:null,id:String(s.experimentId)});_.debug`Calculated holdoutHash: ${d} for visitorCode: ${u}`;let l=Ot.getVariationByHash(s.variationByExposition,d);return null!==l&&(o="in-holdout"!==l.variationKey,i&&this.variationConfiguration.updateStoredVariations(t,{[s.experimentId]:{variationId:l.variationId,isTargetedRule:!1,status:e?K.Unsent:K.Sent,assignedTime:Date.now()}})),_.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(_.debug`CALL: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${e}, variationKey: '${i}', forceTargeting: ${a})`,null===i){const r=this.variationConfiguration.updateForcedExperimentVariation(t,e,null);return _.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${e}, variationKey: '${i}', forceTargeting: ${a}) -> (writeResult: ${r})`,r}let r=null,s=null;if(r=this.clientConfiguration.experimentMap.get(e),!r)return _.error`Experiment with id ${e} not found for visitor ${t}`,u.Err(new h(n.FeatureFlagExperimentNotFound,e,t));if(s=r.variations.get(i),void 0===s)return _.error`Variation with key ${i} not found in experiment ${r} for visitor ${t}`,u.Err(new h(n.FeatureFlagVariationNotFound,i,t));r={type:r.type,experimentId:e},s={variationKey:i,variationId:s};const o=this.variationConfiguration.updateForcedExperimentVariation(t,e,{rule:r,varByExp:s,forceTargeting:a});return _.debug`RETURN: KameleoonClient._setForcedVariation(visitorCode: '${t}', experimentId: ${e}, variationKey: '${i}', forceTargeting: ${a}) -> (writeResult: ${o})`,o}_getForcedFeatureVariation(t,e){const i=this.variationConfiguration.getForcedFeatureVariation(t,e);return i.ok?i.data:null}_getCodeForHash(t,e,i){var a;let r;if(_.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)),_.debug`RETURN: KameleoonClient._getCodeForHash(visitorCode: ${t}, bucketingCustomDataIndex: ${e}, visitorData: ${i}) -> (codeForHash: ${r})`,r}_refreshDataFileIfStale(){return d(this,0,void 0,function*(){const t=yield this.clientConfiguration.refreshDataFileIfStale();return t.ok&&t.data})}};ni.EvaluatedExperiment=class{static fromForcedFeatureVariation(t,e){var i,a,r,n;let s=t;return e.varByExp?s=e.varByExp.variationKey:(null===(i=e.rule)||void 0===i?void 0:i.type)===z.EXPERIMENTATION&&(s=ct),{variationKey:s,variationId:(null===(a=e.varByExp)||void 0===a?void 0:a.variationId)||null,experimentId:(null===(r=e.rule)||void 0===r?void 0:r.experimentId)||null,ruleType:(null===(n=e.rule)||void 0===n?void 0:n.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 si{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:c(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 oi,ui=u.Err,di=u.Ok;function li(t,e,i,a){return new(i||(i=Promise))(function(r,n){function s(t){try{u(a.next(t))}catch(t){n(t)}}function o(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(s,o)}u((a=a.apply(t,e||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class ci{sendRequest({url:t,parameters:e}){return li(this,void 0,void 0,function*(){return yield fetch(t,e)})}}!function(t){t.PairsDelimiter="; ",t.KeyValueDelimiter="=",t.MaxAge="Max-Age",t.Path="Path",t.Domain="Domain"}(oi||(oi={}));const hi=15*G.Second,gi=30*G.Minute;class vi{getData(t){_.debug`CALL: VisitorCodeManager.getData(key: ${t})`;const e=document.cookie;let i=null;return e&&(i=si.getCookieValue(e,t)),_.debug`RETURN: VisitorCodeManager.getData(key: ${t}) -> (visitorCode: ${i})`,i}setData({visitorCode:t,domain:e,maxAge:i,key:a,path:r}){const n=this.getResultCookie({domain:e,visitorCode:t,key:a,maxAge:i,path:r});document.cookie=n,_.debug`Cookie ${n} was added for visitor ${t}`}getResultCookie({domain:t,visitorCode:e,maxAge:i,key:a,path:r}){const n=[a+oi.KeyValueDelimiter+e,oi.MaxAge+oi.KeyValueDelimiter+i,oi.Path+oi.KeyValueDelimiter+r];return t&&n.push(oi.Domain+oi.KeyValueDelimiter+t),n.join(oi.PairsDelimiter)}}class fi{read(t){const e=localStorage.getItem(t);return t!==$e.ConsentData||e&&"{}"!==e?e?JSON.parse(e):null:this.getEngineConsentData()}write(t,e){localStorage.setItem(t,JSON.stringify(e))}getEngineConsentData(){var t;this.visitorCodeManager||(this.visitorCodeManager=new vi);const e=this.visitorCodeManager.getData($e.VisitorCode);if(!e)return null;try{const i=localStorage.getItem("kameleoonLegalConsent");if(!i)return null;const a=JSON.parse(i),r=null===(t=null==a?void 0:a.value)||void 0===t?void 0:t.AB_TESTING;return"boolean"==typeof r?{[e]:{consent:r?Le.Given:Le.NotGiven}}:null}catch(t){return null}}}class pi{open({eventType:t,onEvent:e,url:i}){const a=new EventSource(i);this.eventSource=a,this.eventSource.addEventListener(t,e)}close(){this.eventSource&&this.eventSource.close()}onError(t){this.eventSource&&(this.eventSource.onerror=t)}}class mi{getRandomNumber(){if("undefined"!=typeof window&&(null===window||void 0===window?void 0:window.crypto)){const t=new Uint32Array(1),e=4294967296;return window.crypto.getRandomValues(t),t[0]/e}return Math.random()}}class Ci{log(t,e){switch(e=`${(new Date).toLocaleString("en-US",{timeZoneName:"short"})} ${e}`,t){case N.DEBUG:console.debug(e);break;case N.INFO:console.info(e);break;case N.WARNING:console.warn(e);break;case N.ERROR:console.error(e)}}}class yi{constructor(t,e,i,a){_.debug`CALL: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${a})`,this.dataManager=t,this.tracker=e,this.isConsentProvided=i,this.setup(a),_.debug`RETURN: new VisitorActivityManager(dataManager, tracker, isConsentProvided, interval: ${a})`}setup(t){setInterval(()=>{this.updateLastActivity()},t),this.updateLastActivity()}updateLastActivity(){_.debug`CALL: VisitorActivityManager.updateLastActivity()`;const t=this.dataManager.updateLastActivity();t&&this.tracker.scheduleVisitor(t,this.isConsentProvided(t)),_.debug`RETURN: VisitorActivityManager.updateLastActivity()`}}class Ii extends Pe{constructor({dataStorage:t,infoStorage:e,cleanupInterval:i,packageInfo:a,platformAnalyzer:r}){_.debug`CALL: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${i}, packageInfo: ${a}, platformAnalyzer)`,super({dataStorage:t,infoStorage:e,cleanupInterval:i,packageInfo:a}),this.visitor=null,this.platformAnalyzer=r,this.updateVisitor(),_.debug`RETURN: new ClientDataManager(dataStorage, infoStorage, cleanupInterval: ${i} packageInfo: ${a}, platformAnalyzer)`}getUnsentData(t){var e,i;const a=super.getUnsentData(t),r=super.getVisitorData(t);if(!r)return a;const n=r[at.Browser],s=r[at.Device],o=r[at.OperatingSystem],u=new te({browserType:null==n?void 0:n.browser,browserVersion:null==n?void 0:n.version,visitNumber:null===(e=this.visitor)||void 0===e?void 0:e.visitNumber,timeSincePreviousVisit:null===(i=this.visitor)||void 0===i?void 0:i.timeSincePreviousVisit,os:null==o?void 0:o.operatingSystem,deviceType:null==s?void 0:s.device});return a.push(u),a}storeData(t){const{visitorCode:e,data:i}=t;return i.length&&this.checkVisitor(e),super.storeData(t)}storeDataForVisitors(t){return super.storeDataForVisitors(t,!0)}getVisitorData(t){return this.checkVisitor(t),super.getVisitorData(t)}updateLastActivity(){var t,e,i,a;if(!this.visitor)return null;const r=this.dataStorage.read();if(!r.ok)return null;const n=r.data;let s=null!==(t=n[this.visitor.visitorCode])&&void 0!==t?t:{};"string"==typeof s&&(s=n[s]);let o=s[at.VisitsData];o||(o={visits:[],visitNumber:0,type:at.VisitsData,status:K.Sent,expirationTime:0},s[at.VisitsData]=o);const u=this.fetchVisit(o.visits,o.visits.length-1),d=null!==(e=null==u?void 0:u.timeLastActivity)&&void 0!==e?e:0,l=Date.now();let c=null!==(i=o.visitNumber)&&void 0!==i?i:o.visits.length?o.visits.length-1:0;if(l-d>gi)c+=d>0?1:0,$t.insertVisitInOrderedListMutably({list:o.visits,visit:{timeStarted:l,timeLastActivity:l}}),this.visitor.timeSincePreviousVisit=u?l-d:0;else if(o.visits.length&&(o.visits[o.visits.length-1]={timeStarted:null!==(a=null==u?void 0:u.timeStarted)&&void 0!==a?a:l,timeLastActivity:l},-1===this.visitor.timeSincePreviousVisit)){const t=this.fetchVisit(o.visits,o.visits.length-2);this.visitor.timeSincePreviousVisit=t?l-t.timeLastActivity:0}return o.visitNumber=c,this.visitor.visitNumber=c,this.dataStorage.write(n),this.visitor.visitorCode}checkVisitor(t){this.visitor&&this.visitor.visitorCode===t||this.createVisitor(t)}createVisitor(t){var e,i,a;_.debug`CALL: ClientDataManager.createVisitor(visitorCode: ${t})`,this.visitor=new Di(t);try{const r=this.platformAnalyzer.getResult(),n=[];(null===(e=r.os)||void 0===e?void 0:e.name)&&n.push(new Lt(r.os.name)),(null===(i=r.platform)||void 0===i?void 0:i.type)&&n.push(new _t(r.platform.type)),(null===(a=r.browser)||void 0===a?void 0:a.name)&&n.push(new xt(r.browser.name,r.browser.version)),r.pageView&&n.push(r.pageView),n.length&&this.storeData({visitorCode:t,data:n})}finally{this.updateLastActivity()}_.debug`RETURN: ClientDataManager.createVisitor(visitorCode: ${t})`}updateVisitor(){var t;_.debug`CALL: ClientDataManager.updateVisitor()`;const e=this.dataStorage.read();if(!e.ok)return;const i=e.data;let a,r=-1;for(const[e,n]of Object.entries(i)){if("string"==typeof n)continue;const i=n[at.VisitsData];if(!i){a||(a=e);continue}const s=i.visits.length?i.visits[i.visits.length-1]:null;if(s){const i=null!==(t="number"==typeof s?s:null==s?void 0:s.timeLastActivity)&&void 0!==t?t:0;i>r&&(r=i,a=e)}else a||(a=e)}a?this.createVisitor(a):(this.visitor=null,_.debug`ClientDataManager no visitor found`),_.debug`RETURN: ClientDataManager.updateVisitor()`}fetchVisit(t,e){if(e<0||e>=t.length)return null;const i=t[e];return"number"==typeof i?{timeStarted:i,timeLastActivity:i}:i}}class Di{constructor(t){this.visitNumber=0,this.timeSincePreviousVisit=-1,this.visitorCode=t}}class Ei{static getFirstMatch(t,e){const i=e.match(t);return i&&i.length>0&&i[1]||""}static getSecondMatch(t,e){const i=e.match(t);return i&&i.length>1&&i[2]||""}static assign(t,...e){return Object.assign(t,...e)}}class Ti{constructor(){this.userAgent=navigator.userAgent||"",_.debug`PlatformParser: userAgent = ${this.userAgent}`,this.parsedResult={},""!==this.userAgent&&this.parse()}parseBrowser(){const t=[{test:[/chrome|crios|crmo/i],describe:t=>({name:st.Chrome,version:this.getBrowserVersion(Ei.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/firefox|iceweasel|fxios/i],describe:t=>({name:st.Firefox,version:this.getBrowserVersion(Ei.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/safari|applewebkit/i],describe:t=>({name:st.Safari,version:this.getBrowserVersion(Ei.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/opr\/|opios/i],describe:t=>({name:st.Opera,version:this.getBrowserVersion(Ei.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,t))})},{test:[/edg([ea]|ios)/i],describe:t=>({name:st.InternetExplorer,version:this.getBrowserVersion(Ei.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/googlebot/i],describe:t=>({name:st.Other,version:this.getBrowserVersion(Ei.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,t)||Ei.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/SamsungBrowser/i],describe:t=>({name:st.Other,version:this.getBrowserVersion(Ei.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/yabrowser/i],describe:t=>({name:st.Other,version:this.getBrowserVersion(Ei.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/ucbrowser/i],describe:t=>({name:st.Other,version:this.getBrowserVersion(Ei.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/vivaldi/i],describe:t=>({name:st.Other,version:this.getBrowserVersion(Ei.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/phantom/i],describe:t=>({name:st.Other,version:this.getBrowserVersion(Ei.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/electron/i],describe:t=>({name:st.Other,version:this.getBrowserVersion(Ei.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/chromium/i],describe:t=>({name:st.Other,version:this.getBrowserVersion(Ei.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/opera/i],describe:t=>({name:st.Opera,version:this.getBrowserVersion(Ei.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/msie|trident/i],describe:t=>({name:st.InternetExplorer,version:this.getBrowserVersion(Ei.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,t))})},{test:[/.*/i],describe:t=>{const e=t.includes("(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:st.Other,version:this.getBrowserVersion(Ei.getSecondMatch(e,t))}}}].find(t=>t.test.some(t=>t.test(this.userAgent)));return t&&(this.parsedResult.browser=t.describe(this.userAgent)),this.parsedResult.browser||{}}parseOS(){const t=[{test:[/windows phone/i],describe:()=>({name:nt.WindowsPhone})},{test:[/windows /i],describe:()=>({name:nt.Windows})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:t=>({name:nt.IOS,version:Ei.getSecondMatch(/(Version\/)(\d[\d.]+)/,t)})},{test:[/macintosh/i],describe:t=>({name:nt.Mac,version:Ei.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,t).replace(/[_\s]/g,".")})},{test:[/(ipod|iphone|ipad)/i],describe:t=>({name:nt.IOS,version:Ei.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,t).replace(/[_\s]/g,".")})},{test:[/android/i],describe:()=>({name:nt.Android})},{test:[/linux/i],describe:()=>({name:nt.Linux})}].find(t=>t.test.some(t=>t.test(this.userAgent)));return t&&(this.parsedResult.os=t.describe(this.userAgent)),this.parsedResult.os||{}}parsePlatform(){const t=[{test:()=>{var t,e;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===nt.Android&&Number(String(null===(e=this.parsedResult.os)||void 0===e?void 0:e.version).split(".")[0])>=3},describe:t=>({type:rt.Tablet})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===nt.Android},describe:()=>({type:rt.Phone})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===nt.Mac},describe:()=>({type:rt.Desktop})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===nt.Windows},describe:()=>({type:rt.Desktop})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===nt.Linux},describe:()=>({type:rt.Desktop})}],e=[{test:[/huserAgentwei/i],describe:t=>({type:rt.Phone})},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:()=>({type:rt.Tablet})},{test:[/ipad/i],describe:()=>({type:rt.Tablet})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:()=>({type:rt.Tablet})},{test:[/kftt build/i],describe:()=>({type:rt.Tablet})},{test:[/silk/i],describe:()=>({type:rt.Tablet})},{test:[/tablet(?! pc)/i],describe:()=>({type:rt.Tablet})},{test:[/ipod|iphone/i],describe:()=>({type:rt.Phone})},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:()=>({type:rt.Phone})},{test:[/[^-]mobi/i],describe:()=>({type:rt.Phone})},{test:[/blackberry/i],describe:()=>({type:rt.Phone})},{test:[/bada/i],describe:()=>({type:rt.Phone})},{test:[/windows phone/i],describe:()=>({type:rt.Phone})},{test:[/android/i],describe:()=>({type:rt.Phone})},{test:[/ios/i],describe:()=>({type:rt.Desktop})},{test:[/windows/i],describe:()=>({type:rt.Desktop})},{test:[/linux/i],describe:()=>({type:rt.Desktop})}].find(t=>t.test.some(t=>t.test(this.userAgent)))||t.find(t=>t.test());return e&&(this.parsedResult.platform=e.describe(this.userAgent)),this.parsedResult.platform||{}}parse(){this.userAgent&&(this.parseBrowser(),this.parseOS(),this.parsePlatform())}getBrowserVersion(t){if(!t)return;const e=t.split(".");if(0===e.length)return;const i=e.length>1?`${e[0]}.${e[1]}`:e[0],a=parseFloat(i);return isNaN(a)?void 0:a}parseWebView(){var t;let e=null===(t=window.location)||void 0===t?void 0:t.href;if(e){const t=document?document.title:"";this.parsedResult.pageView=new Ft({urlAddress:e,title:t})}}getResult(){return this.parseWebView(),Ei.assign({},this.parsedResult)}}class ki extends ni{constructor({siteCode:t,configuration:e,externals:i,_internals:a,stubMode:r}){var n;if(r)return super({siteCode:t,internalConfiguration:{},stubMode:r}),this.internalVisitorCodeManager={},void(this.externalVisitorCodeManager={});const s=(null==a?void 0:a.prng)||new mi,o=(null==i?void 0:i.storage)||new fi,u=(null==i?void 0:i.requester)||new ci,d=(null==i?void 0:i.eventSource)||new pi,l=new Be,c=(null==i?void 0:i.visitorCodeManager)||new vi,h=(null==a?void 0:a.packageInfo)||{type:gt.JAVASCRIPT,version:"4.22.0",isServer:!1},g=new xe(o,$e.TargetingData),v=new xe(o,$e.DataInfo),f=new Ii({dataStorage:g,infoStorage:v,cleanupInterval:0,packageInfo:h,platformAnalyzer:null!==(n=null==a?void 0:a.platformAnalyzer)&&void 0!==n?n:new Ti});super({siteCode:t,configuration:e,internalConfiguration:{externals:{externalPRNG:s,externalStorage:o,externalRequester:u,externalEventSource:d,externalVisitorCodeManager:l,externalPackageInfo:h,externalLogger:(null==i?void 0:i.logger)||new Ci,customDataManager:f},settings:{useAbortController:!0}}});const p=At.validateDomain(null==e?void 0:e.cookieDomain);this.domain=p.ok?p.data:void 0,this.internalVisitorCodeManager=l,this.externalVisitorCodeManager=c,this.customDataManager=f}initialize(){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return li(this,void 0,void 0,function*(){if(this.stubMode)return!1;const e=t.initialize.call(this);return new yi(this.customDataManager,this.tracker,t=>this._isConsentProvided(t),hi),e})}getVisitorCode(t){var e;if(this.stubMode)return"";_.info`CALL KamaleoonClient.getVisitorCode(defaultVisitorCode: ${t})`,this.internalVisitorCodeManager.getData=t=>this.externalVisitorCodeManager.getData(t),this.internalVisitorCodeManager.setData=t=>{this.externalVisitorCodeManager.setData(Object.assign(Object.assign({},t),{domain:this.domain}))};const i=this.internalVisitorCodeManager.getVisitorCode(t);return this.initialized&&(null===(e=this.customDataManager)||void 0===e||e.checkVisitor(i)),_.info`RETURN KamaleoonClient.getVisitorCode(defaultVisitorCode: ${t}) -> (visitorCode: ${i})`,i}setLegalConsent(t,e){this.stubMode||(super.setUserConsent({visitorCode:t,consent:e,setData:t=>{this.externalVisitorCodeManager.setData(Object.assign(Object.assign({},t),{domain:this.domain}))}}),super.flush(t))}}export{Qt as ApplicationVersion,xt as Browser,st as BrowserType,Mt as Conversion,Yt as Cookie,Nt as CustomData,H as CustomDataScope,Pe as DataManager,Zt as DataProcessor,xe as DataStorage,_t as Device,rt as DeviceType,U as Environment,ui as Err,X as EventType,Ut as GeolocationData,C as Header,v as HttpMethod,ki as KameleoonClient,ni as KameleoonCore,at as KameleoonData,h as KameleoonError,n as KameleoonException,_ as KameleoonLogger,$e as KameleoonStorageKey,si as KameleoonUtils,$t as ListUtilities,N as LogLevel,G as Milliseconds,m as NUMBER_OF_RETRIES,di as Ok,Lt as OperatingSystem,nt as OperatingSystemType,Ft as PageView,jt as Parser,p as RequestType,gt as SdkLanguageType,te as StaticData,K as TrackingStatus,ae as Tree,Jt as UniqueIdentifier,Xt as UserAgent,Ot as Utilities,Ke as VISITOR_CODE_LENGTH,Ne as VISIT_DURATION,At as Validator,P as VariableType,Be as VisitorCodeManager};
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}function i(t){if(Object.prototype.hasOwnProperty.call(t,"__esModule"))return t;var e=t.default;if("function"==typeof e){var i=function t(){var i=!1;try{i=this instanceof t}catch{}return i?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};i.prototype=e.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(t).forEach(function(e){var a=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(i,e,a.get?a:{enumerable:!0,get:function(){return t[e]}})}),i}var a,r,s,n={},o={},u=(r||(r=1,function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.Err=t.Ok=void 0;var e=function(){if(a)return o;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 i(t){return this.ok?this.data:t}function r(t){return this.ok&&t(this.data),this}return a=1,Object.defineProperty(o,"__esModule",{value:!0}),o.Err=o.Ok=void 0,o.Ok=function(a){return{ok:!0,data:a,throw:t,else:e,or:i,and:r}},o.Err=function(a){return{ok:!1,error:a,throw:t,else:e,or:i,and:r}},o}();Object.defineProperty(t,"Ok",{enumerable:!0,get:function(){return e.Ok}}),Object.defineProperty(t,"Err",{enumerable:!0,get:function(){return e.Err}})}(n)),n);function d(t,e,i,a){return new(i||(i=Promise))(function(e,r){function s(t){try{o(a.next(t))}catch(t){r(t)}}function n(t){try{o(a.throw(t))}catch(t){r(t)}}function o(t){var a;t.done?e(t.value):(a=t.value,a instanceof i?a:new i(function(t){t(a)})).then(s,n)}o((a=a.apply(t,[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class l{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"}(s||(s={}));const c={customData:[],featureFlags:[],configuration:{realTimeUpdate:!1,consentType:"NOT_REQUIRED",dataApiDomain:"data.kameleoon.io",consentOptOutBehavior:"PARTIALLY_BLOCK"}};var h;!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"}(h||(h={}));const g={[h.NONE]:"NONE",[h.ERROR]:"ERROR",[h.WARNING]:"WARNING",[h.INFO]:"INFO",[h.DEBUG]:"DEBUG"},p=(t,e)=>"credentials"===t?{clientId:"****",clientSecret:"****"}:e instanceof Map?Array.from(e.entries()):e;class v{static setLogger(t){v.logger=t}static setLogLevel(t){v.logLevel=t}static log({level:t,strings:e,keys:i}){if(!v.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,p)}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);v.writeMessage(t,a)}static info(t,...e){v.log({level:h.INFO,strings:t,keys:e})}static error(t,...e){v.log({level:h.ERROR,strings:t,keys:e})}static warning(t,...e){v.log({level:h.WARNING,strings:t,keys:e})}static debug(t,...e){v.log({level:h.DEBUG,strings:t,keys:e})}static checkLevel(t){return t<=v.logLevel&&t!==h.NONE}static writeMessage(t,e){v.logger.log(t,`Kameleoon [${g[t]}]: ${e}`)}}v.logger=new class{log(t,e){switch(t){case h.DEBUG:console.debug(e);break;case h.INFO:console.info(e);break;case h.WARNING:console.warn(e);break;case h.ERROR:console.error(e)}}},v.logLevel=h.WARNING;class f{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}}var m;!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"}(m||(m={}));const y={[m.CookieParse]:t=>`Couldn't parse cookie string: ${t}`,[m.JSONParse]:t=>`Couldn't parse JSON variable: ${t}`,[m.NumberParse]:t=>`It's not possible to parse value ${t} to Number`,[m.VersionParse]:t=>`It's not possible to parse a version value ${t} to Number, version should be in format x.x`,[m.SemanticVersionParse]:t=>`It's not possible to parse a version value ${t} to Number, version should be in format x.x.x`,[m.Initialization]:()=>"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods",[m.Credentials]:()=>"KameleoonClient can not be created without credentials",[m.StorageInitialization]:()=>"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed",[m.EventSourceInitialization]:()=>"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed",[m.FeatureFlagConfigurationNotFound]:t=>`No feature flag with key ${t} was found.`,[m.FeatureFlagEnvironmentDisabled]:(t,e)=>`Feature flag with key ${t} is disabled in ${e} environment.`,[m.FeatureFlagVariableNotFound]:(t,e)=>`No feature flag variable with key ${t} was found for ${e} visitorCode.`,[m.FeatureFlagVariationNotFound]:(t,e)=>`No feature flag variation with key ${t} was found for ${e} visitorCode.`,[m.FeatureFlagExperimentNotFound]:(t,e)=>`No feature flag experiment with id ${t} was found for ${e} visitorCode.`,[m.VisitAmount]:()=>"Visit amount must be a number between 1 and 25",[m.VisitorCodeMaxLength]:()=>"Visitor code can not be more than 255 characters long",[m.VisitorCodeEmpty]:()=>"Visitor code can not be empty",[m.StorageWrite]:t=>`Couldn't update storage for kameleoonClient: ${t}`,[m.StorageRead]:t=>`No data found in storage under ${t} key`,[m.StorageEmpty]:()=>"No data found in storage",[m.StorageParse]:(t,e)=>`Couldn't parse ${e} storage data, the data may be corrupted. Error: ${t}`,[m.ClientConfiguration]:t=>`Couldn't retrieve client configuration from Kameleoon Api. Error: ${t}`,[m.TargetingCondition]:t=>`${t} targeting condition is not yet supported.`,[m.AmongValuesCheck]:(t,e)=>`Couldn't parse value "${e}": ${t}`,[m.RangeCheck]:t=>`Couldn't parse value "${t}" as a range, value should be in format [x: number, y: number]`,[m.RemoteData]:t=>`Couldn't retrieve data from Kameleoon server. Error: ${t}`,[m.MaximumRetriesReached]:t=>`Maximum retries reached, request failed. Reason: ${t}`};function D(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 m.Initialization:case m.Credentials:case m.VisitorCodeMaxLength:case m.VisitorCodeEmpty:case m.StorageInitialization:case m.VisitAmount:case m.EventSourceInitialization:case m.StorageEmpty:this.message=y[t]();break;case m.CookieParse:case m.FeatureFlagConfigurationNotFound:case m.NumberParse:case m.ClientConfiguration:case m.MaximumRetriesReached:case m.RemoteData:case m.VersionParse:case m.SemanticVersionParse:this.message=y[t](e);break;case m.FeatureFlagExperimentNotFound:case m.FeatureFlagVariationNotFound:case m.FeatureFlagVariableNotFound:this.message=y[t](e,i);break;case m.FeatureFlagEnvironmentDisabled:this.message=void 0!==i?y[t](e,i):e;break;case m.StorageWrite:case m.JSONParse:case m.StorageRead:this.message=y[t](e);break;case m.StorageParse:this.message=y[t](e,i);break;case m.TargetingCondition:this.message=y[t](e);break;case m.AmongValuesCheck:this.message=y[t](e,i);break;case m.RangeCheck:this.message=y[t](e);break;default:D(t)}}get type(){return this.errorType}}const k="eventType=staticData",I="&browserIndex=",w="&browserVersion=",V="&deviceType=",b="&visitorCode=",T="&sdkVersion=",S="&nonce=",E="&id=",O="&maxNumberPreviousVisits=",x="&os=",F="&osIndex=",R="&browser=",M="&mappingValue=",A="visit/",N={dataApi:"data.kameleoon.io",accessToken:"api.kameleoon.com",events:"events.kameleoon.eu",clientConfiguration:"sdk-config.kameleoon.eu"};var _;!function(t){t.Configuration="configuration",t.Tracking="tracking",t.RemoteData="remoteData"}(_||(_={}));let P=class{constructor({urlProvider:t,packageInfo:e,externalRequester:i,requestTimeout:a,trackRetryDelay:r,useAbortController:s}){this.urlProvider=t,this.useAbortController=s,this.externalRequester=i,this.trackRetryDelay=r,this.packageInfo=e,this.timeout=a}getClientConfiguration(t,e){return d(this,0,void 0,function*(){const i=this.urlProvider.getClientConfigurationUrl(t);let a=Object.assign({"X-Kameleoon-SDK-Type":this.packageInfo.type,"X-Kameleoon-SDK-Version":this.packageInfo.version},e&&{"If-Modified-Since":e});try{let t={message:""};for(let e=0;e<2;e++){const r=yield this.sendRequest({url:i,requestType:_.Configuration,retryCount:e,parameters:{method:"GET",headers:a}});if(r.ok){const t=yield r.json();this.logReceivedConfigurationResponse(r.status,i,a);const e=this.getLastModifiedHeader(r),s=t;return u.Ok({configuration:s,lastModified:e})}if(304===r.status)return this.logReceivedConfigurationResponse(r.status,i,a),u.Ok({});if(1===e){if(r.text){const e=yield r.text();t=JSON.parse(e)}v.error`Failed to get configuration response ${{status:r.status,message:t.message}} for request Method: ${"GET"}, Url: ${i}, Headers: ${a}`}else yield this.logRequestError({logLevel:h.WARNING,message:"Failed to get configuration response",response:r,method:"GET",url:i})}return u.Err(new C(m.MaximumRetriesReached,t.message))}catch(t){return yield this.logRequestError({logLevel:h.ERROR,message:"Failed to get configuration response",error:t,method:"GET",url:i,headers:a}),u.Err(new C(m.ClientConfiguration,t))}})}getRemoteData(t){var e;return d(this,0,void 0,function*(){const i=this.urlProvider.getRemoteDataUrl(t);try{const t=yield this.sendRequest({url:i,requestType:_.RemoteData,retryCount:0,parameters:{method:"GET"}});if(!t.ok){if(yield this.logRequestError({logLevel:h.ERROR,message:"Failed to get remote data response",response:t,method:"GET",url:i}),t.text){const i=yield t.text(),a=null===(e=JSON.parse(i))||void 0===e?void 0:e.message;return u.Err(new C(m.RemoteData,a))}return u.Err(new C(m.RemoteData,"Unknown Reason - no `text()` was found for a response"))}const a=yield t.json();return u.Ok(a)}catch(t){return yield this.logRequestError({logLevel:h.ERROR,message:"Failed to get remote data response",error:t,method:"GET",url:i}),u.Err(new C(m.RemoteData,t))}})}getVisitorData({visitorCode:t,filters:e,isMappingIdentifier:i}){var a;return d(this,0,void 0,function*(){const r=this.urlProvider.getVisitorDataUrl({visitorCode:t,filters:e,isMappingIdentifier:i});try{const t=yield this.sendRequest({url:r,requestType:_.RemoteData,retryCount:0,parameters:{method:"GET"}});if(!t.ok){if(yield this.logRequestError({logLevel:h.ERROR,message:"Failed to get visitor data response",response:t,method:"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 u.Err(new C(m.RemoteData,t))}}return t.status?u.Err(new C(m.RemoteData,`No error message. Error status: ${t.status}`)):u.Err(new C(m.RemoteData,"Unknown Reason - no text message or error status was found for a response"))}const e=yield t.json();return u.Ok(e)}catch(t){return yield this.logRequestError({logLevel:h.ERROR,message:"Failed to get visitor data response",error:t,method:"GET",url:r}),u.Err(new C(m.RemoteData,t))}})}track(t,e){return d(this,0,void 0,function*(){const i=this.urlProvider.getTrackingUrl(e);for(let e=0;e<2;e++){let a;try{if(a=yield this.sendRequest({url:i,retryCount:e,requestType:_.Tracking,parameters:{body:t,method:"POST",headers:{"Content-Type":"*/*"}}}),a.ok)return u.Ok();yield this.logRequestError({logLevel:1==e?h.ERROR:h.WARNING,message:"Failed to get tracking response",response:a,method:"POST",url:i})}catch(t){yield this.logRequestError({logLevel:1==e?h.ERROR:h.WARNING,message:"Failed to get tracking response",error:t,method:"POST",url:i})}e<2&&(yield new Promise(t=>setTimeout(t,this.trackRetryDelay)))}return u.Err()})}sendRequest({url:t,requestType:e,retryCount:i,parameters:a}){return d(this,0,void 0,function*(){let r;if(this.useAbortController){const s=new AbortController,n=setTimeout(()=>s.abort(),this.timeout);r=yield this.externalRequester.sendRequest({url:t,retryCount:i,requestType:e,parameters:Object.assign(Object.assign({},a),{signal:s.signal})}),clearTimeout(n)}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:s,headers:n}){return d(this,0,void 0,function*(){if(i){let s="Unknown error";i instanceof Error&&(s=i.message),v.log({level:t,strings:()=>`${e} with error: ${s} for request Method: ${a}, Url: ${r}`})}else if(s&&v.checkLevel(t)){const i=yield this.parseResponse(s);v.log({level:t,strings:()=>`${e} response: Status: '${i.status}' Message: '${i.message}' for request Method: ${a}, Url: '${r}'`+(n?`, Headers: ${n}`:"")})}})}parseResponse(t){return d(this,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="Last-Modified".toLowerCase();for(const[i,a]of t.headers)if(i.toLowerCase()===e)return a}}logReceivedConfigurationResponse(t,e,i){}};var U,L,B,K,z,j,G;!function(t){t.Production="production",t.Staging="staging",t.Development="development"}(U||(U={}));class ${constructor(){this.ready=!1,this.isCustomDomain=!1,this.domains=N}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.dataApi=t);const e=t.split(".")[0],i=this.domains.dataApi;this.domains.dataApi=i.replace(/^[^.]+/,e)}get dataApiDomain(){return this.domains.dataApi}getClientConfigurationUrl(t){this.isInitialized();const e=`https://${this.domains.clientConfiguration}/v3/`,i=this.environment===U.Production?"":"?environment="+encodeURIComponent(this.environment);let a="";return t&&(a=i?"&ts="+t:"?ts="+t),e+this.siteCode+i+a}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains.events}:8110/sse?siteCode=${this.siteCode}`}getRemoteDataUrl(t){return this.isInitialized(),this.getDataApiUrl(2)+this.siteCode+"&key="+encodeURI(t)}getVisitorDataUrl({visitorCode:t,filters:e,isMappingIdentifier:i}){this.isInitialized();const{customData:a,previousVisitAmount:r,currentVisit:s,conversions:n,geolocation:o,experiments:u,pageViews:d,device:l,browser:c,operatingSystem:h,kcs:g,personalization:p,visitorCode:v,cbs:f}=e,m=i?M:b,y=a||v?"&customData="+!0:"",D=n?"&conversion="+!0:"",C=o?"&geolocation="+!0:"",k=u?"&experiment="+!0:"",I=d?"&page="+!0:"",w="&staticData="+!0,V=s?"&currentVisit="+!0:"",T=g?"&kcs="+!0:"",S=p?"&personalization="+!0:"",E="number"!=typeof r?O+1:O+r,x=f?"&cbs="+!0:"";return this.getDataApiUrl(1)+this.siteCode+m+t+E+y+D+C+k+I+w+V+T+S+x}getTrackingUrl(t){this.isInitialized();const{type:e,version:i}=this.packageInfo;let a=this.getDataApiUrl(0)+this.siteCode+"&sdkName="+e+T+i;return t&&(a+="&bodyUa="+!0),a}getAccessTokenUrl(){this.isInitialized();const{type:t,version:e}=this.packageInfo;return`https://${this.domains.accessToken}/oauth/token?sdkName=`+t+T+e+"&siteCode="+this.siteCode}isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}getDataApiUrl(t){if(!this.domains.dataApi)throw new Error("Data API domain is not set");const e=`https://${this.domains.dataApi}`;switch(t){case 0:return`${e}/${A+"events?siteCode="}`;case 1:return`${e}/${A+"visitor?siteCode="}`;case 2:return`${e}/map/map?siteCode=`}}setDomains(t){t&&(this.isCustomDomain=!0,this.domains.dataApi="data."+t,this.domains.accessToken="api."+t,this.domains.events="events."+t,this.domains.clientConfiguration="sdk-config."+t)}}function q(t){return Object.fromEntries(Object.entries(t).map(([t,e])=>[e,t]))}!function(t){t.BOOLEAN="BOOLEAN",t.NUMBER="NUMBER",t.STRING="STRING",t.JSON="JSON",t.JS="JS",t.CSS="CSS"}(L||(L={})),function(t){t.Sent="sent",t.Unsent="unsent",t.Pending="pending"}(B||(B={})),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"}(K||(K={})),function(t){t.Phone="PHONE",t.Tablet="TABLET",t.Desktop="DESKTOP"}(z||(z={})),function(t){t.WindowsPhone="WINDOWS_PHONE",t.Windows="WINDOWS",t.Android="ANDROID",t.Linux="LINUX",t.Mac="MAC",t.IOS="IOS"}(j||(j={})),function(t){t.Chrome="CHROME",t.InternetExplorer="IE",t.Firefox="FIREFOX",t.Safari="SAFARI",t.Opera="OPERA",t.Other="OTHER"}(G||(G={}));const H={[j.Windows]:0,[j.Mac]:1,[j.IOS]:2,[j.Linux]:3,[j.Android]:4,[j.WindowsPhone]:5},W=q(H),J={[G.Chrome]:0,[G.InternetExplorer]:1,[G.Firefox]:2,[G.Safari]:3,[G.Opera]:4,[G.Other]:5},X=q(J),Q="localhost",Y=/^(\.?(([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 Z{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))?u.Err(new C(m.SemanticVersionParse,t)):u.Ok(e.slice(0,3))}static validateDomain(t){return t?(t=Z.checkAndTrimProtocol(t.toLowerCase()),Y.test(t)||t===Q||v.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.`,u.Ok(t)):u.Err()}static validateNetworkDomain(t){return t?(t=(t=Z.checkAndTrimProtocol(t.toLowerCase())).replace(/^\.+|\.+$/g,""),Y.test(t)||t===Q?u.Ok(t):(v.error`The network domain ${t} is invalid.`,u.Err())):u.Err()}static checkAndTrimProtocol(t){const e=["http://","https://"];for(const i of e)if(t.startsWith(i)){t=t.substring(i.length),v.warning`The domain contains ${i}. Domain after protocol trimming: ${t}`;break}return t}}class tt{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:s,packageInfo:n,dataManager:o}){if(!t||!t.conditionsData.firstLevel.length)return u.Ok(!0);if(!r)return u.Err(new C(m.Initialization));let d={};const l=r.getStoredVariations(e);l.ok&&(d=l.data);const c=o.getTree(t);let h,g,p;return c.hasTargetingType("SEGMENT")&&(h=o.trees,p=s.segments),c.hasTargetingType("TARGET_FEATURE_FLAG")&&(g=s.ruleMap),c.evaluate({variationData:d,sdkInfo:n,segments:p,ruleMap:g,trees:h,targetingData:i,experimentId:a,visitorCode:e})}static convertTimeUnit(t,e){return t/{MINUTE:6e4,HOUR:36e5,DAY:864e5,WEEK:6048e5,MONTH:2592e6}[e]}static isCustomData(t){return t.data.type===K.CustomData}static compareSemVer({version:t,compareVersion:e,operator:i}){const a=Z.validateVersion(t),r=Z.validateVersion(e);if(!a.ok)return u.Err(a.error);if(!r.ok)return u.Err(r.error);const[s,n,o]=a.data,[d,l,c]=r.data,[h,g,p]=[s===d,n===l,o===c];switch(i){case"EQUAL":return u.Ok(h&&g&&p);case"GREATER":return u.Ok(s>d||h&&n>l||h&&g&&o>c);case"LOWER":return u.Ok(s<d||h&&n<l||h&&g&&o<c);default:v.error`Unknown version match type: ${i}`,D(i)}}static getVariationByHash(t,e){let i=0;for(const a of t)if(i+=a.exposition,i>=e)return a;return null}}class et{static insertInOrderedListMutably({list:t,element:e,order:i}){if(t.includes(e))return;const a=t.findIndex(t=>"asc"===i?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 it{constructor({urlAddress:t,title:e,referrers:i}){this.urlAddress=t,this.title=e,this.referrers=i,this.timestamps=[{time:Date.now(),status:B.Unsent}]}get url(){var t;if(!this.urlAddress)return"";const e=this.title?"&title="+encodeURIComponent(this.title):"",i=(null===(t=this.referrers)||void 0===t?void 0:t.length)?"&referrersIndices="+JSON.stringify(this.referrers):"";return"eventType=page&href="+encodeURIComponent(this.urlAddress)+e+i}get status(){const{[B.Sent]:t,[B.Unsent]:e,[B.Pending]:i}=this.timestamps.reduce((t,{status:e})=>(t[e]=!0,t),{[B.Sent]:!1,[B.Unsent]:!1,[B.Pending]:!1});return!t||e||i?i&&!e?B.Pending:B.Unsent:B.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:K.PageView,timestamps:this.timestamps,status:this.status,nonce:this.nonce}}static _fromRaw(t){const{urlAddress:e,title:i,referrers:a,timestamps:r,nonce:s}=t,n=new it({urlAddress:e,title:i,referrers:a});return n.timestamps=r,s&&(n._nonce=s),n}static _updateFromVisit(t,e){const i=t.pageEvents;if(i)for(const t of i){let i=[];const{time:a}=t,{href:r,title:s,referrersIndices:n}=t.data;let o;if("number"==typeof n[0]&&(i=n),e.has(r)){const t=e.get(r).timestamps;o=new it({urlAddress:r,title:s,referrers:i}),o.timestamps=[...t,{time:a,status:B.Sent}]}else o=new it({urlAddress:r,title:s,referrers:i}),o.timestamps=[{time:a,status:B.Sent}];e.set(r,o)}}}let at=class t{constructor(e,i,...a){this._status=B.Unsent,this.isIdentifier=!1;const r="boolean"==typeof i;"number"==typeof e?this._index=e:(this._name=e,this._index=t.UNDEFINED_INDEX),this.overwrite=!r||i,this.value=r?a:[i,...a].filter(t=>null!=t)}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="&mappingIdentifier="+String(!0)),"eventType=customData&index="+this._index+"&valuesCountMap="+encodeURIComponent(JSON.stringify(e))+"&overwrite="+String(this.overwrite)+i}get data(){return Object.assign(Object.assign({index:this._index},void 0!==this._name?{name:this._name}:{}),{value:this.value,type:K.CustomData,isIdentifier:this.isIdentifier,status:this.status,overwrite:this.overwrite})}get status(){return this._isMappingIdentifier?B.Unsent:this._status}static _fromRaw(e){const{index:i,value:a,status:r,isIdentifier:s,name:n,overwrite:o}=e;let u;return n?(u=new t(n,null==o||o,...a),u.index=i):u=new t(i,null==o||o,...a),u.status=r,u._isMappingIdentifier=s,u}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:s}=e.customDataEvents[a].data;i.has(r)||i.set(r,new t(r,...Object.keys(s)))}}set index(t){this._index=t}get index(){return this._index}get name(){return this._name}get values(){return this.value}};at.UNDEFINED_INDEX=-1;let rt=class t{constructor({goalId:t,revenue:e=0,negative:i=!1,metadata:a}){this.goalId=t,this.revenue=e,this.negative=i,this.status=B.Unsent,this.id=Math.floor(1e6*Math.random()),this._metadata=a,this.assignedTime=Date.now()}set _id(t){this.id=t}set _nonce(t){this.nonce=t}static _fromInternal(e){var{assignedTime:i}=e,a=function(t,e){var i={};for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&e.indexOf(a)<0&&(i[a]=t[a]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(t);r<a.length;r++)e.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(t,a[r])&&(i[a[r]]=t[a[r]])}return i}(e,["assignedTime"]);const r=new t(a);return void 0!==i&&(r.assignedTime=i),r}get url(){var t;return"eventType=conversion&goalId="+String(this.goalId)+"&revenue="+String(this.revenue)+"&negative="+String(this.negative)+((null===(t=this.metadata)||void 0===t?void 0:t.length)?"&metadata="+this._encodeMetadata():"")}get _metadata(){return this.metadata}set _metadata(t){this.metadata=t}get data(){var t;return{goalId:this.goalId,nonce:this.nonce,revenue:this.revenue,negative:this.negative,type:K.Conversion,status:this.status,id:this.id,metadata:(null===(t=this.metadata)||void 0===t?void 0:t.map(t=>t.data))||void 0,assignedTime:this.assignedTime}}_encodeMetadata(){var t;return(null===(t=this.metadata)||void 0===t?void 0:t.length)?encodeURIComponent(JSON.stringify(this.metadata.reduce((t,e)=>(null==t[e.data.index]&&(t[e.data.index]=e.data.value),t),{}))):""}static _fromRaw(e){const{goalId:i,revenue:a,negative:r,status:s,id:n,nonce:o,metadata:u,assignedTime:d}=e,l=t._fromInternal({goalId:i,revenue:a,negative:r,metadata:t.parseMetadata(u),assignedTime:d});return l._id=n,l.status=s,o&&(l._nonce=o),l}static parseMetadata(t){return(null==t?void 0:t.map(t=>at._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=null==e?void 0:e.conversionEvents)||void 0===a?void 0:a.length)for(const i of e.conversionEvents){const{goalId:e,revenue:a,negative:s}=i.data,n=t._fromInternal({goalId:e,revenue:a,negative:s,assignedTime:i.time});n.status=B.Sent,r.push(n)}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 r=t._fromInternal({goalId:e,assignedTime:a.time});r.status=B.Sent,i.set(e,r)}}}},st=class t{constructor(t,e){this.browser=t,this.version=e,this.status=B.Unsent}get url(){if(!this.browser)return"";const t=this.version?w+this.version:"";return k+R+this.browser+I+J[this.browser]+t}get data(){return{browser:this.browser,type:K.Browser,version:this.version,status:this.status}}static _fromRaw(e){const{browser:i,version:a,status:r}=e,s=new t(i,a);return s.status=r,s}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:X[a];return r?new t(e,r):new t(e)}}},nt=class t{constructor(t){this.device=t,this.status=B.Unsent}get url(){return this.device?k+V+this.device:""}get data(){return{device:this.device,type:K.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)}},ot=class t{constructor(t){this.operatingSystem=t,this.status=B.Unsent}get url(){return this.operatingSystem?k+x+this.operatingSystem+F+H[this.operatingSystem]:""}get data(){return{operatingSystem:this.operatingSystem,type:K.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:W[a];return new t(e)}}};class ut{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=B.Unsent}get url(){const t=this.region?"&region="+encodeURIComponent(this.region):"",e=this.city?"&city="+encodeURIComponent(this.city):"",i=this.postalCode?"&postalCode="+encodeURIComponent(this.postalCode):"",a=this.coordinates?"&latitude="+this.coordinates[0]+"&longitude="+this.coordinates[1]:"";return"eventType=geolocation&country="+encodeURIComponent(this.country)+t+e+i+a}get data(){return{type:K.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:s,status:n}=t,o=new ut({country:e,region:i,city:a,postalCode:r,coordinates:s});return o.status=n,o}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:s}=i||{};return a?new ut(r&&s?{country:a,region:r,city:s}:r?{country:a,region:r}:{country:a}):void 0}}class dt{constructor(t){this.status=B.Sent,this.visits=t,this._visitNumber=t.length?t.length-1:0}get visitNumber(){return this._visitNumber}get url(){return""}get data(){return{visits:this.visits,visitNumber:this._visitNumber,type:K.VisitsData,status:this.status}}get isSent(){return!0}set timestamp(t){et.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 lt{constructor(t){this.kcs=t,this.status=B.Sent}get url(){return""}get data(){return{kcs:this.kcs,type:K.KameleoonConversionScore,status:this.status}}}class ct{constructor(t,e,i=Date.now()){this.id=t,this.variationId=e,this.status=B.Sent,this.assignedTime=i}get url(){return""}get data(){return{id:this.id,variationId:this.variationId,type:K.Personalization,status:B.Sent,assignedTime:this.assignedTime}}static _fromRaw(t){return new ct(t.id,t.variationId,t.assignedTime)}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 r=new ct(t,a,i.time);e.set(t,r)}}}}class ht{constructor(t){this.values=new Map(Object.entries(t).map(([t,e])=>[Number(t),this.extractVarIds(e)])),this.cbs=t,this.status=B.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:K.CBScores,status:this.status}}static _fromRaw(t){const e=new ht(t.cbs);return e.status=t.status,e}}class gt{constructor({filters:t,dataManager:e,visitorCode:i}){this.visitsData=new dt([]),this.visitorData=[],this.storageVisitorData=[],this.experimentData={},this.singleDataTypes={[K.Device]:null,[K.Browser]:null,[K.GeolocationData]:null,[K.OperatingSystem]:null,[K.KameleoonConversionScore]:null,[K.CBScores]:null},this.multipleDataTypes={[K.CustomData]:new Map,[K.PageView]:new Map,[K.Conversion]:new Map,[K.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 K.PageView:this.visitorData.push(...e.values()),this.storageVisitorData.push(...e.values());break;case K.Personalization:case K.Conversion:this.storageVisitorData.push(...e.values());break;case K.CustomData:e.forEach(t=>{this.visitorData.push(t),this.dataManager.storedCustomDataIndexes.has(t.data.index)||this.storageVisitorData.push(t)})}}processKcs(t){if(this.filters.kcs&&t){const e=new lt(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){var i,a,r;if(this.visitsData.visitNumber<=e&&(null===(i=t.staticDataEvent)||void 0===i?void 0:i.data.visitNumber)){const i=null!==(r=null===(a=t.staticDataEvent)||void 0===a?void 0:a.data.visitNumber)&&void 0!==r?r:0;this.visitsData.updateVisitNumber(i+e)}}processCbs(t){if(this.filters.cbs&&t){const e=new ht(t);this.storageVisitorData.push(e)}}processBrowser(t){if(this.filters.browser&&!this.singleDataTypes[K.Browser]){const e=st._fromVisit(t);e&&(this.visitorDataTypes.has(K.Browser)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[K.Browser]=e)}}processDevice(t){if(this.filters.device&&!this.singleDataTypes[K.Device]){const e=nt._fromVisit(t);e&&(this.visitorDataTypes.has(K.Device)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[K.Device]=e)}}processOperatingSystem(t){if(this.filters.operatingSystem&&!this.singleDataTypes[K.OperatingSystem]){const e=ot._fromVisit(t);e&&(this.visitorDataTypes.has(K.OperatingSystem)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[K.OperatingSystem]=e)}}processGeolocationData(t){if(this.filters.geolocation&&!this.singleDataTypes[K.GeolocationData]){const e=ut._fromVisit(t);e&&(this.visitorDataTypes.has(K.GeolocationData)||this.storageVisitorData.push(e),this.visitorData.push(e),this.singleDataTypes[K.GeolocationData]=e)}}processCustomData(t){this.filters.customData&&at._updateFromVisit(t,this.multipleDataTypes[K.CustomData])}processConversion(t){if(this.filters.conversions){rt._updateFromVisit(t,this.multipleDataTypes[K.Conversion]);const e=rt._listFromVisit(t);e.length&&this.visitorData.push(...e)}}processPageView(t){this.filters.pageViews&&it._updateFromVisit(t,this.multipleDataTypes[K.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:B.Unsent,assignedTime:e.time}}}processPersonalization(t){this.filters.personalization&&ct._updateFromVisit(t,this.multipleDataTypes[K.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 pt{static parseFeatureVariable(t){const{key:e,type:i,value:a}=t;switch(i){case L.BOOLEAN:return u.Ok({key:e,type:i,value:Boolean(a)});case L.JS:case L.CSS:case L.STRING:return u.Ok({key:e,type:i,value:String(a)});case L.NUMBER:const r=Number(a);return Number.isNaN(r)?u.Err(new C(m.NumberParse,String(a))):u.Ok({key:e,type:i,value:r});case L.JSON:try{const a=JSON.parse(String(t.value));return u.Ok({key:e,type:i,value:a})}catch(t){return u.Err(new C(m.JSONParse,t))}default:D(i)}}static parseVisitorData({data:t,filters:e,visitorCode:i,dataManager:a,variationConfiguration:r}){const s=new gt({filters:e,dataManager:a,visitorCode:i}),{currentVisit:n,previousVisits:o,kcs:u,cbs:d}=t;if(!(null==o?void 0:o.length)&&!n)return{visitorData:[],storageVisitorData:[],visitsData:new dt([])};n&&(s.processVisit(n),s.processVisitNumber(n,0)),null==o||o.forEach((t,e)=>{s.processVisit(t),s.processVisitsData(t),s.processVisitNumber(t,e+1)}),s.processKcs(u),s.processCbs(d),s.processMultipleDataTypes();const l=s.processMappingIdentifier(null!=n?n:null==o?void 0:o[0]),{visitorData:c,storageVisitorData:h,visitsData:g,experimentData:p}=s.data;return r.updateStoredVariations(i,p),{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 vt{constructor({updateInterval:t,urlProvider:e,storage:i,requester:a,dataManager:r,eventSource:s,externalVisitorCodeManager:n,eventManager:o,externalPackageInfo:u,defaultDataFile:d}){this.updateConfigurationIntervalId=null,this.updateType=0,this.configurationData=c,this.featureFlagsData=new Map,this.isTargetedDeliveryRule=null,this.segmentsData=null,this.holdoutData=null,this.meGroupsData=new Map,this.mappedRules=null,this.mappedExperiments=null,this.usedDefaultDataFile=!1,this.refreshDataFileIfStalePromise=null,this.blockingBehaviourMode="PARTIALLY_BLOCK",this.cachedDataFile=null,this.CACHE_REVALIDATE_PERIOD=54e5,this.urlProvider=e,this.requester=a,this.updateInterval=t,this.lastUpdate=new Date,this.storage=i,this.dataManager=r,this.eventManager=o,this.visitorCodeManager=n,this.eventSource=s,this.externalPackageInfo=u,this.defaultDataFile=d}initialize(){return d(this,0,void 0,function*(){if(this.readStorageData(),this.checkShouldUpdate()){const t=yield this.updateClientConfiguration();if(!t.ok)return v.error("Error occurred during client configuration update"),t;if(t.data)return u.Ok()}return 1!==this.updateType||this.eventSource.isOpen?(0===this.updateType&&this.handlePollingUpdates(),u.Ok()):(this.handleRealTimeUpdates(),u.Ok())})}refreshDataFileIfStale(){if(!this.checkShouldUpdate())return Promise.resolve(u.Ok(!1));if(!this.refreshDataFileIfStalePromise){const t=this.fetchClientConfiguration().then(t=>t.ok?u.Ok(!0):t).finally(()=>{this.refreshDataFileIfStalePromise===t&&(this.refreshDataFileIfStalePromise=null)});this.refreshDataFileIfStalePromise=t}return this.refreshDataFileIfStalePromise}cleanupHandlers(){this.eventSource.isOpen&&this.eventSource.close(),this.updateConfigurationIntervalId&&clearInterval(this.updateConfigurationIntervalId)}handleRealTimeUpdates(){this.cleanupHandlers(),this.eventSource.open(t=>{this.updateClientConfiguration(t).then(e=>{e.ok&&this.eventManager.fireEvent(s.ConfigurationUpdate,{timestamp:t})})}),this.eventSource.onError(t=>{v.error`Error occurred during real-time update: ${t}. Switching to polling updates while the connection is not restored.`,this.updateType=0,this.handlePollingUpdates()})}handlePollingUpdates(){this.cleanupHandlers();try{const t=this.lastUpdate.getTime(),e=Date.now(),i=Math.max(this.updateInterval-(e-t),0);setTimeout(()=>d(this,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 dataFile(){if(this.cachedDataFile)return this.cachedDataFile;const t={featureFlags:new Map,dateModified:this.dateModified};return this.featureFlagsData.forEach((e,i)=>{const a=new Map;e.variations.forEach(t=>{var i;const r=new Map;t.variables.forEach(t=>{try{const e=pt.parseFeatureVariable(t).throw();r.set(t.key,e)}catch(i){v.error`Error parsing variable ${t.key} of feature flag ${e.featureKey}: ${i}`}}),a.set(t.key,{name:null!==(i=t.name)&&void 0!==i?i:"",key:t.key,id:null,experimentId:null,variables:r})});const r=e.rules.map(t=>{const e=new Map;return t.variationByExposition.forEach(i=>{const r=a.get(i.variationKey);r&&e.set(r.key,{name:r.name,key:r.key,id:i.variationId,experimentId:t.experimentId,variables:r.variables})}),{variations:e}});t.featureFlags.set(i,{variations:a,environmentEnabled:e.environmentEnabled,rules:r,defaultVariationKey:e.defaultVariationKey})}),this.cachedDataFile=t,t}get configuration(){return this.configurationData.configuration}get dateModified(){var t;return null!==(t=this.configurationData.dateModified)&&void 0!==t?t:0}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:s}=i,n=new Map;s.forEach(({variationKey:t,variationId:e})=>{"number"==typeof e&&n.set(t,e)}),e.set(a,{featureId:t.id,experimentId:r,variations:n})}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()){const i=this.hasFeatureFlagVariableJsCss(t);for(const a of t.rules){const{experimentId:t,variationByExposition:r}=a,s=new Map;r.forEach(({variationKey:t,variationId:e})=>{"number"==typeof e&&s.set(t,e)}),e.set(t,{type:a.type,variations:s,hasJsCssVariables:i})}}return this.mappedExperiments=e,e}hasFeatureFlagVariableJsCss(t){var e;return Boolean(null===(e=t.variations[0])||void 0===e?void 0:e.variables.some(({type:t})=>t===L.JS||t===L.CSS))}get holdout(){return this.holdoutData}get meGroups(){return this.meGroupsData}get isConsentRequired(){return"REQUIRED"===this.configuration.consentType}get consentBlockingBehaviour(){return this.blockingBehaviourMode}get hasAnyTargetedDeliveryRule(){if(null!==this.isTargetedDeliveryRule)return this.isTargetedDeliveryRule;for(const t of this.featureFlags.values())if(t.environmentEnabled&&t.rules.some(t=>"TARGETED_DELIVERY"===t.type))return!0;return!1}checkShouldUpdate(){const{configuration:t}=this.configurationData;return this.updateType=t.realTimeUpdate?1:0,!this.featureFlags.size||this.lastUpdate.getTime()<Date.now()-this.updateInterval}readStorageData(){var t,e,i;const a=this.storage.read();if(a.ok){let{data:r,lastUpdate:s,lastModified:n,requestTime:o}=a.data,u=!1;if(this.defaultDataFile)try{const a=JSON.parse(this.defaultDataFile);this.defaultDataFile=void 0,this.usedDefaultDataFile=!0;const s=null!==(e=null!==(t=r.dateModified)&&void 0!==t?t:o)&&void 0!==e?e:-1,n=null!==(i=a.dateModified)&&void 0!==i?i:0;(!o||n>s)&&(r=a,u=!0)}catch(t){v.error`Error parsing default data file: ${String(t)}`}this.updateConfigurationData(r,u),this.lastUpdate=this.usedDefaultDataFile?new Date(0):new Date(Date.parse(s)),this.lastModified=n,this.requestTime=o}}updateClientConfiguration(t){return d(this,0,void 0,function*(){const e=Date.now();return this.usedDefaultDataFile||this.requestTime&&!t&&!this.externalPackageInfo.isServer&&e-this.requestTime<=this.CACHE_REVALIDATE_PERIOD?(this.updateClientConfigurationInBackground(),u.Ok(!1)):this.fetchClientConfiguration(t)})}fetchClientConfiguration(t){return d(this,0,void 0,function*(){const e=yield this.requester.getClientConfiguration(t,this.lastModified);return this.applyNewConfigurationDataFromResponse(e)})}updateClientConfigurationInBackground(){setTimeout(()=>d(this,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 d(this,0,void 0,function*(){if(this.requestTime=Date.now(),!t.ok)return this.featureFlags.size?(v.error("Error occurred while updating configuration. Existing configuration will be used as a fallback."),u.Ok(!0)):t;if(void 0===t.data.configuration)return this.updateStorageData(),u.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 s=a.configuration.realTimeUpdate?1:0,n=s!==this.updateType;return n&&(this.updateType=s,yield this.initialize()),this.blockingBehaviourMode=this.consentBlockingBehaviourFromStr(a.configuration.consentOptOutBehavior),u.Ok(n)})}updateConfigurationData(t,e=!0){const{configuration:i,featureFlags:a,customData:r,holdout:s,segments:n,dateModified:o}=t;let u=n?new Map(n.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!=s?s:null,this.configurationData={configuration:i,customData:r,holdout:s,dateModified:o},this.urlProvider.dataApiDomain=t.configuration.dataApiDomain,this.updateConsentRequired(),this.segmentsData=u,this.cachedDataFile=null}updateFeatureFlagSegments(t,e){null!==e&&t.rules.forEach(t=>{var i;const a=t.segmentId;t.segment=null==a?null: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 f(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}consentBlockingBehaviourFromStr(t){return"PARTIALLY_BLOCK"===t||"FULLY_BLOCK"===t?t:(v.error(`Unexpected consent blocking type '${t}'`),"PARTIALLY_BLOCK")}}var ft;class mt{constructor(t,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=5e3}getTrackingInterval(t){const{MIN_TRACKING_INTERVAL_MS:e,MAX_TRACKING_INTERVAL_MS:i,DEFAULT_TRACKING_INTERVAL_MS:a}=mt;return"number"==typeof(null==t?void 0:t.trackingInterval)?t.trackingInterval<e?(v.warning(`Tracking interval must not be shorter than ${e} ms. Minimum possible interval was applied.`),e):t.trackingInterval>i?(v.warning(`Tracking interval must not be longer than ${i} ms. Maximum possible interval was applied.`),i):t.trackingInterval:a}getEnvironment(t){return(null==t?void 0:t.environment)?t.environment:U.Production}getCleanupInterval(t){return"number"==typeof(null==t?void 0:t.targetingDataCleanupInterval)?t.targetingDataCleanupInterval<1?(v.warning("Targeting data cleanup interval must not be shorter than 1 minute. Minimum possible interval was applied."),6e4):6e4*t.targetingDataCleanupInterval:null}getUpdateInterval(t){return"number"==typeof(null==t?void 0:t.updateInterval)?t.updateInterval<1?(v.warning("Update interval must not be shorter than 1 minute. Minimum possible interval was applied."),6e4):6e4*t.updateInterval:36e5}getNetworkDomain(t){const e=Z.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:1e4}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}}}ft=mt,mt.DEFAULT_TRACKING_INTERVAL_MS=1e3,mt.MIN_TRACKING_INTERVAL_MS=ft.DEFAULT_TRACKING_INTERVAL_MS,mt.MAX_TRACKING_INTERVAL_MS=5e3;const yt="off",Dt="warehouseAudiences",Ct={NODEJS:"NODEJS",REACT:"REACT",JAVASCRIPT:"JAVASCRIPT"},kt={previousVisitAmount:1,currentVisit:!0,customData:!0,pageViews:!1,geolocation:!1,device:!1,browser:!1,operatingSystem:!1,conversions:!1,experiments:!1,kcs:!1,visitorCode:!0,personalization:!1};let It=class t{constructor(t){this.cookie=t,this.status=B.Sent}static fromString(e){if(!e)return new t([]);const i=e.split(";").map(t=>{const[i,a]=t.trim().split("=");return i?{key:i,value:a}:(v.warning`Cookie string has an empty key: ${e}`,null)}).filter(t=>null!==t);return new t(i)}get url(){return""}get data(){return{cookie:this.cookie,type:K.Cookie,status:this.status}}};class wt{constructor(t){this.value=t,this.status=B.Sent}get url(){return""}get data(){return{value:this.value,type:K.UserAgent,status:this.status}}}class Vt{constructor(t){this._value=t,this.status=B.Sent}get url(){return""}get data(){return{value:this._value,type:K.UniqueIdentifier,status:B.Sent}}static _fromRaw(t){return new Vt(t.value)}}let bt=class{constructor(t){this.version=t,this.status=B.Sent}get url(){return""}get data(){return{version:this.version,type:K.ApplicationVersion,status:this.status}}};class Tt{constructor({browserType:t,visitNumber:e,timeSincePreviousVisit:i,os:a,deviceType:r,browserVersion:s}){this.browserType=t,this.visitNumber=e,this.timeSincePreviousVisit=i,this.os=a,this.deviceType=r,this.browserVersion=s}get url(){const t=this.browserVersion?w+this.browserVersion:"",e=this.browserType?R+this.browserType:"",i=this.browserType?I+J[this.browserType]:"",a=this.os?x+this.os:"",r=this.os?F+H[this.os]:"",s=this.deviceType?V+this.deviceType:"",n=void 0!==this.visitNumber?"&visitNumber="+this.visitNumber:"",o=void 0!==this.timeSincePreviousVisit?"&timeSincePreviousVisit="+this.timeSincePreviousVisit:"";return k+e+i+t+n+o+a+r+s}}class St{static setConditionFactoryInstance(t){this.conditionFactoryInstance=t}static createCondition(t){return this.conditionFactoryInstance.createCondition(t)}}class Et{constructor(t,e,i){var a;if(this.inverseResult=!1,this.isOperator(t))this.nodeValue=t;else{const e=St.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"AND"===t||"OR"===t}}class Ot{constructor(t){this.error=null,this.targetingTypes=new Set;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 Et(t)));return this.buildTree(i,e)});this.tree=this.buildTree(a,i)}evaluate(t){const e=this.evaluateNode(this.tree,t);return this.error?u.Err(this.error):u.Ok(e)}hasTargetingType(t){return this.targetingTypes.has(t)}evaluateNode(t,e){if(this.isLeafNode(t)){if(t.error)return t.error.type===m.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"AND":return this.evaluateNode(t.left,e)&&this.evaluateNode(t.right,e);case"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&&("OR"===t.value||"AND"===t.value))}buildTree(t,e){if(1===t.length)return t[0];for(const i of e){const e=t.shift(),a=t.shift(),r=new Et(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?"OR":"AND")}}function xt({targetingData:t,sdkInfo:e},i,a){var r;const s=null==t?void 0:t[K.VisitsData];if(!(null===(r=null==s?void 0:s.visits)||void 0===r?void 0:r.length)||null==i&&null==a)return 0;const{visits:n}=s;let o=1;"CURRENT_VISIT"!==i&&(o=null!=a?e.isServer?a-1:a:n.length);const u=n[Math.max(0,n.length-o)];return"number"==typeof u?u:u.timeStarted}class Ft{constructor({campaignType:t,visitCount:e,visitScope:i}){this.campaignType=t,this.visitCount=e,this.visitScope=i}evaluate(t){return u.Ok(this.checkCondition(t))}checkCondition(t){const e=xt(t,this.visitScope,this.visitCount);switch(this.campaignType){case"EXPERIMENT":return this.checkExperiment(t,e);case"PERSONALIZATION":return this.checkPersonalization(t,e);case"ANY":return this.checkPersonalization(t,e)&&this.checkExperiment(t,e);default:return!1}}checkExperiment(t,e){const i=Object.keys(t.variationData);let a=0,r=null;for(const s of i){const i=t.variationData[s];if((!(null==i?void 0:i.assignedTime)||i.assignedTime>=e)&&(a++,r=s,a>1))break}return 0===a||1===a&&null!==t.experimentId&&r===String(t.experimentId)}checkPersonalization(t,e){var i;const a=Object.values((null===(i=t.targetingData)||void 0===i?void 0:i.personalization)||{});for(const t of a)if((null==t?void 0:t.assignedTime)&&t.assignedTime>=e)return!1;return!0}}class Rt{constructor({device:t}){this.device=t}evaluate({targetingData:t}){const e=null==t?void 0:t[K.Device];if(e){const{device:t}=e;return u.Ok(t===this.device)}return u.Ok(!1)}}class Mt{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[K.Browser];if(e){const t=this.checkCondition(e);return this.error?u.Err(this.error):u.Ok(t)}return u.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)&&(v.error`Failed to parse version: ${this.version} in Browser condition`,this.error=new C(m.VersionParse,this.version)),this.versionMatchType){case"EQUAL":return e===this.browser&&i===a;case"GREATER":return e===this.browser&&i>a;case"LOWER":return e===this.browser&&i<a;default:v.error`Unexpected comparing operation for Browser condition: ${this.versionMatchType}`,D(this.versionMatchType)}}}class At{constructor({goalId:t,visitCount:e,visitScope:i}){this.goalId=t,this.visitCount=e,this.visitScope=i}evaluate(t){const{targetingData:e}=t,i=null==e?void 0:e[K.Conversion];if(!i)return u.Ok(!1);const a=Object.values(i);if(!a.length)return u.Ok(!1);const r=xt(t,this.visitScope,this.visitCount);return u.Ok(a.some(t=>!!t&&(null==this.goalId||t.goalId===this.goalId)&&(!t.assignedTime||t.assignedTime>=r)))}}class Nt{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[K.CustomData])||void 0===e?void 0:e[this.customDataIndex];if("UNDEFINED"===this.matchType)return u.Ok(!i);if(i){const{value:t}=i,e=this.checkCondition(t);return this.error?u.Err(this.error):u.Ok(e)}return u.Ok(!1)}checkCondition(t){if("string"!=typeof this.conditionValue&&"TRUE"!==this.matchType&&"FALSE"!==this.matchType&&"RANGE"!==this.matchType)return v.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`,!1;const e=this.conditionValue;if("AMONG_VALUES"===this.matchType){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("RANGE"===this.matchType){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"CONTAINS":return t.includes(e);case"EXACT":return t===this.conditionValue;case"REGULAR_EXPRESSION":return pt.parseRegExp(e).test(t);case"LOWER":return Number(t)<Number(this.conditionValue);case"EQUAL":return Number(t)===Number(this.conditionValue);case"GREATER":return Number(t)>Number(this.conditionValue);case"TRUE":return"true"===t.toLowerCase();case"FALSE":return"false"===t.toLowerCase();default:return v.error`Unexpected comparing operation for CustomData condition: ${this.matchType}`,!1}}parseArray(t){try{const e=JSON.parse(t);if(Array.isArray(e))return u.Ok(e)}catch(e){return v.error`Failed to parse array: ${t} in CustomData condition`,u.Err(new C(m.AmongValuesCheck,e,t))}return u.Ok([])}parseRange(t){return t&&2===t.length?u.Ok(t):(v.error`Failed to parse range: ${t} in CustomData condition`,u.Err(new C(m.RangeCheck,t)))}}class _t{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 Pt{constructor({matchType:t,title:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t}){const e=null==t?void 0:t[K.PageView];if(!e)return u.Ok(!1);const i=_t.getLatest(e);return u.Ok(this.checkCondition(i.title))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case"CONTAINS":return t.includes(this.conditionValue);case"EXACT":return t===this.conditionValue;case"REGULAR_EXPRESSION":return pt.parseRegExp(this.conditionValue).test(t);default:return v.error`Unexpected comparing operation for PageTitle condition: ${this.matchType}`,!1}}}class Ut{constructor({matchType:t,url:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t}){const e=null==t?void 0:t[K.PageView];if(!e)return u.Ok(!1);const i=_t.getLatest(e);return u.Ok(this.checkCondition(i.urlAddress))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case"CONTAINS":return t.includes(this.conditionValue);case"EXACT":return t===this.conditionValue;case"REGULAR_EXPRESSION":return pt.parseRegExp(this.conditionValue).test(t);default:return v.error`Unexpected comparing operation for PageUrl condition: ${this.matchType}`,!1}}}class Lt{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 u.Ok(!1);if("string"!=typeof this.conditionValue)return u.Ok(e===this.sdkLanguage);if(!this.versionMatchType)return u.Ok(!1);if(e!==this.sdkLanguage)return u.Ok(!1);const a=tt.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?u.Ok(a.data):u.Err(a.error)}}class Bt{constructor({visitorCode:t,matchType:e}){this.matchType=e,this.conditionValue=t}evaluate({visitorCode:t}){return u.Ok(this.checkCondition(t))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case"CONTAINS":return t.includes(this.conditionValue);case"EXACT":return t===this.conditionValue;case"REGULAR_EXPRESSION":return pt.parseRegExp(this.conditionValue).test(t);default:return v.error`Unexpected comparing operation for VisitorCode condition: ${this.matchType}`,!1}}}class Kt{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 u.Ok(!1);const r=this.extractCookie(),s=(null===(e=null==t?void 0:t[K.Cookie])||void 0===e?void 0:e.cookie)||[];return u.Ok(r.some(t=>this.checkCondition(t))||s.some(t=>this.checkCondition(t)))}extractCookie(){return"undefined"!=typeof document&&document.cookie?It.fromString(document.cookie).data.cookie:[]}checkCondition(t){const e=this.keyMatchType,{key:i,value:a}=t;if("OPTIONAL"===e){const t=this.cookie;return!!this.isOptionalCookie(t)&&this.compareCookieValue(a,t.value)}const{key:r,value:s}=this.cookie;let n;switch(e){case"EXACT":n=i===r;break;case"CONTAINS":n=i.includes(r);break;case"REGULAR_EXPRESSION":n=pt.parseRegExp(r).test(i);break;default:v.error`Unexpected comparing operation for Cookie condition: ${e}`,D(e)}return n&&this.compareCookieValue(a,s)}compareCookieValue(t,e){const i=this.valueMatchType;switch(i){case"EXACT":return t===e;case"CONTAINS":return t.includes(e);case"REGULAR_EXPRESSION":return pt.parseRegExp(e).test(t);default:return v.error`Unexpected comparing operation for Cookie condition: ${i}`,!1}}isOptionalCookie(t){const{value:e}=t;return void 0!==e}}class zt{constructor({os:t}){this.operatingSystem=t}evaluate({targetingData:t}){const e=null==t?void 0:t[K.OperatingSystem];if(e){const{operatingSystem:t}=e;return u.Ok(t===this.operatingSystem)}return u.Ok(!1)}}class jt{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[K.GeolocationData];if(e){const{country:t,region:i,city:a}=e,[r,s,n]=[this.country,this.region,this.city];if(!r||!t)return u.Ok(!1);const o=!(t.toLowerCase()!==r.toLowerCase()||s&&(null==i?void 0:i.toLowerCase())!==s.toLowerCase()||n&&(null==a?void 0:a.toLowerCase())!==n.toLowerCase());return u.Ok(o)}return u.Ok(!1)}}class Gt{constructor({segmentId:t}){this.segmentId=t}evaluate(t){var e;const{segments:i,trees:a}=t;if(!this.segmentId)return u.Ok(!1);const r=null==i?void 0:i.get(this.segmentId.toString());if(!r)return u.Ok(!1);const s=null!==(e=null==a?void 0:a.get(this.segmentId.toString()))&&void 0!==e?e:null==a?void 0:a.get(this.segmentId);return s?s.evaluate(t):new Ot(r).evaluate(t)}}class $t{constructor({featureFlagId:t,variationKey:e,ruleId:i,visitCount:a,visitScope:r}){this.featureId=t,this.ruleId=i,this.variationKey=e,this.visitCount=a,this.visitScope=r}evaluate(t){const{variationData:e,ruleMap:i}=t;if(!this.featureId||!i)return u.Ok(!1);const a=xt(t,this.visitScope,this.visitCount),r=(t,e)=>!t||t>=e;if(this.featureId&&!this.ruleId&&!this.variationKey){for(const t of i.values()){const{featureId:i,experimentId:s}=t,n=e[s];if(i===this.featureId&&"number"==typeof(null==n?void 0:n.variationId)&&r(null==n?void 0:n.assignedTime,a))return u.Ok(!0)}return u.Ok(!1)}if(this.featureId&&this.ruleId){const t=i.get(this.ruleId);if((null==t?void 0:t.featureId)!==this.featureId)return u.Ok(!1);const{experimentId:s,variations:n}=t,o=e[s];if(this.variationKey){const t=n.get(this.variationKey);return u.Ok(Boolean(t)&&(null==o?void 0:o.variationId)===t&&r(null==o?void 0:o.assignedTime,a))}return u.Ok(Boolean(null==o?void 0:o.variationId)&&r(null==o?void 0:o.assignedTime,a))}if(this.featureId&&!this.ruleId&&this.variationKey)for(const t of i.values()){const{featureId:i,experimentId:s,variations:n}=t;if(i===this.featureId&&n.has(this.variationKey)){const t=n.get(this.variationKey),i=e[s];if(Boolean(t)&&(null==i?void 0:i.variationId)===t&&r(null==i?void 0:i.assignedTime,a))return u.Ok(!0)}}return u.Ok(!1)}}class qt{constructor({matchType:t,url:e}){this.conditionValue=e,this.matchType=t}evaluate({targetingData:t}){const e=null==t?void 0:t[K.PageView];if(!e)return u.Ok(!1);const i=this.getSecondLatestPageView(Object.values(e));if(!i)return u.Ok(!1);const a=i.urlAddress;return u.Ok(this.checkCondition(a))}checkCondition(t){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case"CONTAINS":return t.includes(this.conditionValue);case"EXACT":return t===this.conditionValue;case"REGULAR_EXPRESSION":return pt.parseRegExp(this.conditionValue).test(t);default:return v.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 a>e.timestamps[e.timestamps.length-1].time?(i=e,void(e=t)):void(a>(i?i.timestamps[i.timestamps.length-1].time:0)&&(i=t));e=t}),i}}class Ht{constructor({matchType:t,pageCount:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t}){const e=null==t?void 0:t[K.PageView];if(!e)return u.Ok(!1);let i=0;return Object.values(e).forEach(t=>{i+=t.timestamps.length}),u.Ok(this.checkCondition(i))}checkCondition(t){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case"EQUAL":return t===this.conditionValue;case"GREATER":return t>this.conditionValue;case"LOWER":return t<this.conditionValue;default:return v.error`Unexpected comparing operation for VisitedPages condition: ${this.matchType}`,!1}}}class Wt{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[K.VisitsData];if(e.isServer?!(null==i?void 0:i.visits.length):!(null==i?void 0:i.visits)||i.visits.length<2)return u.Ok(!1);const a=i.visits[0];return u.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=tt.convertTimeUnit(e,this.timeUnit);switch(this.matchType){case"GREATER":return i>this.conditionValue;case"LOWER":return i<this.conditionValue;default:return v.error`Unexpected comparing operation for FirstVisit condition: ${this.matchType}`,!1}}}class Jt{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[K.VisitsData];if(e.isServer?!(null==i?void 0:i.visits.length):!(null==i?void 0:i.visits)||i.visits.length<2)return u.Ok(!1);const a=i.visits,r=a[e.isServer?a.length-1:a.length-2];return u.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=tt.convertTimeUnit(e,this.timeUnit);switch(this.matchType){case"GREATER":return i>this.conditionValue;case"LOWER":return i<this.conditionValue;default:return v.error`Unexpected comparing operation for LastVisit condition: ${this.matchType}`,!1}}}class Xt{constructor({matchType:t,visitCount:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t,sdkInfo:e}){const i=null==t?void 0:t[K.VisitsData];if(!i)return u.Ok(!1);let a=0;const r=(new Date).setHours(0,0,0,0),{visits:s}=i;return s.forEach(t=>{let e;e="number"==typeof t?t:t.timeStarted,e>=r&&a++}),e.isServer&&(a+=1),u.Ok(this.checkCondition(a))}checkCondition(t){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case"EQUAL":return t===this.conditionValue;case"GREATER":return t>this.conditionValue;case"LOWER":return t<this.conditionValue;default:return v.error`Unexpected comparing operation for SameDayVisits condition: ${this.matchType}`,!1}}}class Qt{constructor({matchType:t,visitCount:e}){this.matchType=t,this.conditionValue=e}evaluate({targetingData:t,sdkInfo:e}){const i=null==t?void 0:t[K.VisitsData];if(!i)return u.Ok(!1);const a=i.visits.length+(e.isServer?1:0);return u.Ok(this.checkCondition(a))}checkCondition(t){if(!this.matchType||"number"!=typeof this.conditionValue)return!1;switch(this.matchType){case"EQUAL":return t===this.conditionValue;case"GREATER":return t>this.conditionValue;case"LOWER":return t<this.conditionValue;default:return v.error`Unexpected comparing operation for Visits condition: ${this.matchType}`,!1}}}class Yt{constructor({visitorType:t}){this.visitorType=t}evaluate({targetingData:t,sdkInfo:e}){const i=null==t?void 0:t[K.VisitsData];if(!i||!this.visitorType)return u.Ok(!1);const{visits:a}=i,r=e.isServer?!a.length:a.length<=1;switch(this.visitorType){case"NEW":return u.Ok(r);case"RETURNING":return u.Ok(!r);default:v.error`Unexpected visitor type for NewVisitor condition: ${this.visitorType}`,D(this.visitorType)}}}class Zt{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[K.ApplicationVersion])||void 0===e?void 0:e.version;if(!i||!this.conditionValue||!this.versionMatchType)return u.Ok(!1);const a=tt.compareSemVer({version:i,compareVersion:this.conditionValue,operator:this.versionMatchType});return a.ok?u.Ok(a.data):u.Err(a.error)}}class te{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[K.KameleoonConversionScore];if("number"!=typeof this.keyMomentId||"number"!=typeof this.goalId||"number"!=typeof this.lowerBound||"number"!=typeof this.upperBound||!i)return u.Ok(!1);const a=null===(e=i.kcs[this.keyMomentId.toString()])||void 0===e?void 0:e[this.goalId.toString()];return"number"!=typeof a?u.Ok(!1):u.Ok(a>=this.lowerBound&&a<=this.upperBound)}}class ee{constructor({variationMatchType:t,variationId:e,experimentId:i,visitCount:a,visitScope:r}){this.variationMatchType=t,this.variationId=null!=e?e:-1,this.experimentId=null!=i?i:-1,this.visitCount=a,this.visitScope=r}evaluate(t){return u.Ok(this.checkCondition(t))}checkCondition(t){const e=t.variationData[this.experimentId];if(!e)return!1;const i=xt(t,this.visitScope,this.visitCount);if(e.assignedTime&&e.assignedTime<i)return!1;switch(this.variationMatchType){case"ANY":return!0;case"EXACT":return e.variationId===this.variationId;default:return!1}}}class ie{constructor({personalizationId:t,visitCount:e,visitScope:i}){this.personalizationId=t,this.visitCount=e,this.visitScope=i}evaluate(t){return t.targetingData?u.Ok(this.checkCondition(t)):u.Ok(!1)}checkCondition(t){var e,i;if(!this.personalizationId)return!1;const a=null===(i=null===(e=t.targetingData)||void 0===e?void 0:e[K.Personalization])||void 0===i?void 0:i[this.personalizationId];if(!a)return!1;const{assignedTime:r}=a;return!r||r>=xt(t,this.visitScope,this.visitCount)}}class ae{createCondition(t){const{targetingType:e}=t;switch(e){case"CUSTOM_DATUM":return u.Ok(new Nt(t));case"EXCLUSIVE_EXPERIMENT":return u.Ok(new Ft(t));case"TARGET_EXPERIMENT":return u.Ok(new ee(t));case"TARGET_FEATURE_FLAG":return u.Ok(new $t(t));case"TARGET_PERSONALIZATION":return u.Ok(new ie(t));case"DEVICE_TYPE":return u.Ok(new Rt(t));case"BROWSER":return u.Ok(new Mt(t));case"PAGE_URL":return u.Ok(new Ut(t));case"PAGE_TITLE":return u.Ok(new Pt(t));case"CONVERSIONS":return u.Ok(new At(t));case"VISITOR_CODE":return u.Ok(new Bt(t));case"SDK_LANGUAGE":return u.Ok(new Lt(t));case"COOKIE":return u.Ok(new Kt(t));case"OPERATING_SYSTEM":return u.Ok(new zt(t));case"GEOLOCATION":return u.Ok(new jt(t));case"SEGMENT":return u.Ok(new Gt(t));case"APPLICATION_VERSION":return u.Ok(new Zt(t));case"PREVIOUS_PAGE":return u.Ok(new qt(t));case"PAGE_VIEWS":return u.Ok(new Ht(t));case"LAST_VISIT":return u.Ok(new Jt(t));case"FIRST_VISIT":return u.Ok(new Wt(t));case"SAME_DAY_VISITS":return u.Ok(new Xt(t));case"VISITS":return u.Ok(new Qt(t));case"NEW_VISITORS":return u.Ok(new Yt(t));case"HEAT_SLICE":return u.Ok(new te(t));default:return u.Err(new C(m.TargetingCondition,e))}}}class re{constructor(t=null,e){this.cleanupInterval=t,this.packageInfo=e}mutUpdateData({infoData:t,visitorCode:e,mutData:i,dataItem:a,extendTtl:r}){let s,{visitorReference:n,data:o,isReference:u}=this.dereferenceData(i,e);switch(this.packageInfo.isServer&&u&&!i[n]&&(t.mappingIdentifiers&&delete t.mappingIdentifiers[e],delete i[e],n=e),r&&(s=this.cleanupInterval?Date.now()+this.cleanupInterval:0),a.data.type){case K.CustomData:this.updateCustomData({expirationTime:s,customData:a,visitorCode:n,mutData:o});break;case K.PageView:this.updatePageView({expirationTime:s,pageView:a,visitorCode:n,mutData:o});break;case K.Conversion:this.updateConversion({expirationTime:s,conversion:a,visitorCode:n,mutData:o});break;case K.VisitsData:this.updateVisitsData({expirationTime:s,visitsData:a,visitorCode:n,mutData:o});break;case K.Personalization:this.updatePersonalization({expirationTime:s,personalization:a,visitorCode:n,mutData:o});break;case K.TargetedSegment:this.updateTargetedSegment({expirationTime:s,targetedSegment:a,visitorCode:n,mutData:o});break;default:this.updateCommonData({expirationTime:s,commonData:a,visitorCode:n,mutData:o})}return s}mutCleanupData(t,e){var i;if(!this.cleanupInterval)return null;let a=0;for(const[r,s]of Object.entries(t)){if("string"==typeof s){this.removeReference({mutData:t,visitorCode:r,linkedVisitor:s,infoData:e});continue}let n=0;for(const t of Object.keys(s)){const e=t;let i;switch(e){case K.CustomData:case K.PageView:case K.Conversion:case K.Personalization:i=this.deleteNestedExpiredField(s,e);break;default:i=this.deleteExpiredField(s,e)}(!n||i&&i<n)&&(n=i)}Object.keys(t[r]).length?(!a||n&&n<a)&&(a=n):(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,s=e[t]&&K.PageView in e[t]&&r.urlAddress in e[t][K.PageView],n={expirationTime:a,visitorCode:t,data:e,key:K.PageView,nestedKey:r.urlAddress,value:r};if(s){const i=e[t][K.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(n)}else this.createNestedField(n)}updateCustomData({visitorCode:t,customData:e,mutData:i,expirationTime:a}){const{data:r}=e,s=i[t]&&K.CustomData in i[t],n={expirationTime:a,visitorCode:t,data:i,key:K.CustomData,nestedKey:r.index.toString(),value:r};s?this.updateNestedField(n):this.createNestedField(n)}updateConversion({conversion:t,mutData:e,visitorCode:i,expirationTime:a}){const{data:r}=t,s=e[i]&&K.Conversion in e[i],n={expirationTime:a,visitorCode:i,data:e,key:K.Conversion,nestedKey:r.id.toString(),value:r};s?this.updateNestedField(n):this.createNestedField(n)}updateVisitsData({visitorCode:t,mutData:e,visitsData:i,expirationTime:a}){var r,s;const{data:n}=i,o=e[t]&&K.VisitsData in e[t],u={expirationTime:a,data:e,key:K.VisitsData,value:n,visitorCode:t};if(o){const i=e[t][K.VisitsData];i.visits.forEach(t=>{et.insertVisitInOrderedListMutably({list:n.visits,visit:t})});const a=Math.max(null!==(r=n.visitNumber)&&void 0!==r?r:n.visits.length-1,n.visits.length-1,null!==(s=i.visitNumber)&&void 0!==s?s:0);this.updateField(Object.assign(Object.assign({},u),{value:Object.assign(Object.assign({},n),{visits:n.visits,visitNumber:a})}))}else this.createField(u)}updatePersonalization({visitorCode:t,mutData:e,personalization:i,expirationTime:a}){const{data:r}=i,s=e[t]&&K.Personalization in e[t],n={expirationTime:a,visitorCode:t,data:e,key:K.Personalization,nestedKey:r.id.toString(),value:r};s?this.updateNestedField(n):this.createNestedField(n)}updateTargetedSegment({visitorCode:t,mutData:e,targetedSegment:i,expirationTime:a}){const{data:r}=i,s=e[t]&&K.TargetedSegment in e[t],n={expirationTime:a,visitorCode:t,data:e,key:K.TargetedSegment,nestedKey:r.id.toString(),value:r};s?this.updateNestedField(n):this.createNestedField(n)}updateCommonData({visitorCode:t,mutData:e,commonData:i,expirationTime:a}){const{data:r}=i,s=e[t]&&r.type in e[t],n={expirationTime:a,data:e,key:r.type,visitorCode:t,value:r};s?this.updateField(n):this.createField(n)}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))e&&(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}){var s;const n=i[a][t];i[a][t]=Object.assign(Object.assign({},e),{expirationTime:null!==(s=null!=r?r:n.expirationTime&&n.expirationTime)&&void 0!==s?s:Date.now()})}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:s}){var n;const o=a[r][t][e];a[r][t][e]=Object.assign(Object.assign({},i),{expirationTime:null!==(n=null!=s?s:null==o?void 0:o.expirationTime)&&void 0!==n?n:Date.now()})}createNestedField({key:t,nestedKey:e,value:i,data:a,visitorCode:r,expirationTime:s}){var n;(null===(n=a[r])||void 0===n?void 0:n[t])?a[r]=Object.assign(Object.assign({},a[r]),{[t]:Object.assign(Object.assign({},a[r][t]),{[e]:Object.assign(Object.assign({},i),{expirationTime:s})})}):a[r]=Object.assign(Object.assign({},a[r]),{[t]:{[e]:Object.assign(Object.assign({},i),{expirationTime:s})}})}}var se;!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"}(se||(se={}));const ne={data:c,lastUpdate:""};class oe{constructor(t){this.key=t}isDataValid(t){switch(this.key){case se.ClientData:return this.checkClientDataIntegrity(t);case se.TargetingData:return this.checkTargetingDataIntegrity(t);case se.DataInfo:return this.checkDataInfoIntegrity(t);case se.VariationData:return this.checkVariationDataIntegrity(t);case se.TrackingData:return this.checkTrackingDataIntegrity(t);default:return!0}}getDefaultData(){switch(this.key){case se.ClientData:return this.getDefaultClientData();case se.DataInfo:return{unsentData:{},nextVisitTime:0,mappingIdentifiers:{}};case se.TrackingData:return{scheduledVisitors:{}};case se.TargetingData:case se.VariationData:case se.ConsentData:return{};case se.VisitorCode:case se.KameleoonSimulationFFData:return"";case se.ForcedExperimentVariation:case se.ForcedFeatureVariation:return{};default:D(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(ne))}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 K.PageView:case K.Conversion:case K.Personalization:case K.TargetedSegment:case K.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({},ne),{lastUpdate:(new Date).toString()})}hasFields(t,e){const i=Object.keys(t);return!(!i.length||!e.length)&&e.every(t=>i.includes(t))}}let ue=class{constructor(t,e){this.externalStorage=t,this.storageKey=e;const i=new oe(e),a=this.read();if(!a.ok){if(a.error.type===m.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?u.Err(new C(m.StorageEmpty)):u.Ok(t)}catch(t){return v.error`Failed to read data from storage: ${this.storageKey}`,u.Err(new C(m.StorageRead,this.storageKey))}}write(t){try{return this.externalStorage.write(this.storageKey,t),u.Ok()}catch(t){return v.error`Failed to write data to storage: ${this.storageKey}`,u.Err(new C(m.StorageWrite,this.storageKey))}}update(t){const e=this.read();if(!e.ok)return e.error.type===m.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 de{constructor(t,e){this.externalStorage=t,this.cleanupInterval=e,e>0&&this.initCleanupInterval()}initCleanupInterval(){for(const t of Object.values(se)){let e=null;try{switch(t){case se.ForcedFeatureVariation:case se.ForcedExperimentVariation:case se.VariationData:case se.ConsentData:e=setInterval(()=>this.cleanupData(t),this.cleanupInterval);break;case se.ClientData:case se.TargetingData:case se.TrackingData:case se.VisitorCode:case se.DataInfo:case se.KameleoonSimulationFFData:break;default:v.error`Unknown storage key: ${t} for initCleanupInterval.`}}catch(i){e&&clearInterval(e),v.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 se.VariationData:this.cleanupVariationData(e,i);break;case se.ForcedFeatureVariation:this.cleanupForcedFeatureVariationData(e,i);break;case se.ForcedExperimentVariation:this.cleanupForcedExperimentVariationData(e,i);break;case se.ConsentData:this.cleanupConsentData(e,i);break;case se.ClientData:case se.TargetingData:case se.TrackingData:case se.VisitorCode:case se.DataInfo:case se.KameleoonSimulationFFData:break;default:v.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,s]of Object.entries(a))this.cleanupObjectValues(s,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}}var le;!function(t){t[t.Unknown=0]="Unknown",t[t.Given=1]="Given",t[t.NotGiven=2]="NotGiven"}(le||(le={}));class ce{constructor(t){this.id=t,this.status=B.Unsent}get url(){return"eventType=targetingSegment"+E+this.id}get data(){return{id:this.id,type:K.TargetedSegment,status:this.status}}static _fromRaw(t){const{id:e,status:i}=t,a=new ce(e);return a.status=i,a}}class he{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.customDataIndexByName=new Map,this.cleanupIntervalId=null,this.dataStorage=t,this.infoStorage=e,this.dataProcessor=new re(i,a),this.packageInfo=a,i){const t=()=>{this.cleanupData()};try{this.cleanupIntervalId=setInterval(t,i)}catch(t){throw this.cleanupIntervalId&&clearInterval(this.cleanupIntervalId),v.error`Failed to set cleanup interval: ${i}`,t}}}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],s=i.nextVisitTime<=Date.now();return s&&(i.nextVisitTime=Date.now()+174e4,this.infoStorage.write(i)),this.getDataFromRaw(a,({status:t,key:e,cdIndex:i})=>!("number"!=typeof i||!this.persistentCustomDataIndexes.has(i)||!s)||r.includes(e)&&t===B.Unsent)}getPendingData(t){const e=this.getVisitorData(t);return e?this.getDataFromRaw(e,({status:t})=>t===B.Pending):[]}getDataFromRaw(t,e){const i=[];for(const[a,r]of Object.entries(t))if(r)switch(a){case K.CustomData:for(const t of Object.values(r)){if(!t)continue;const{status:r,index:s}=t;if(e({status:r,key:a,cdIndex:s})){const e=at._fromRaw(t);i.push(e)}}break;case K.Conversion:for(const t of Object.values(r))if(t&&e({status:t.status,key:a})){const e=rt._fromRaw(t);i.push(e)}break;case K.PageView:{const t=r;for(const r of Object.values(t))if(e({status:r.status,key:a})){const t=it._fromRaw(r);i.push(t)}break}case K.TargetedSegment:{const t=r;for(const r of Object.values(t))if(e({status:r.status,key:a})){const t=ce._fromRaw(r);i.push(t)}break}case K.GeolocationData:{const t=r;if(!r)continue;if(e({status:t.status,key:a})){const e=ut._fromRaw(t);i.push(e)}break}case K.Browser:{const t=r;if(e({status:t.status,key:a})){const e=st._fromRaw(t);i.push(e)}break}case K.Device:{const t=r;if(e({status:t.status,key:a})){const e=nt._fromRaw(t);i.push(e)}break}case K.OperatingSystem:{const t=r;if(e({status:t.status,key:a})){const e=ot._fromRaw(t);i.push(e)}}}return i}storeTrackedData(t){this.storeDataForVisitors(t,!1);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!==K.CustomData)return!1;const{index:e}=t;return this.persistentCustomDataIndexes.has(e)||this.mappingIdentifierCustomDataIndex===e});r&&t.add(K.CustomData),i[e]=Array.from(t),i[e].length||delete i[e]}this.infoStorage.write(e.data)}storeData({visitorCode:t,data:e,track:i}){return this.storeDataInternal((a,r)=>{this.mutUpdateTargetingData({infoData:a,targetingData:r,visitorCode:t,kameleoonData:e,extendTtl:!0,track:i})})}storeDataForVisitors(t,e){return this.storeDataInternal((i,a)=>{for(const[r,s]of Object.entries(t))this.mutUpdateTargetingData({infoData:i,targetingData:a,visitorCode:r,kameleoonData:s,extendTtl:e})})}storeDataInternal(t){const e=this.dataStorage.read();if(!e.ok)return e;const i=this.infoStorage.read();if(!i.ok)return i;const a=e.data,r=i.data;return t(r,a),this.cleanupData(),this.infoStorage.write(r),this.dataStorage.write(a)}getTree(t){if(this.targetingTrees.has(t.id))return this.targetingTrees.get(t.id);const e=new Ot(t);return this.targetingTrees.set(t.id,e),e}clearTrees(){this.targetingTrees.clear()}isPersistentCustomData(t){return!!this.persistentCustomDataIndexes.size&&!!tt.isCustomData(t)&&this.persistentCustomDataIndexes.has(t.data.index)}isUniqueIdentifier(t){var e;const i=this.getVisitorData(t),a=null==i?void 0:i[K.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 s=r.data;return null!==(e=s.mappingIdentifiers)&&void 0!==e||(s.mappingIdentifiers={}),null!==(a=null===(i=s.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 s=r.mappingIdentifiers[t];(!s||s.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){var e,i,a;const r=this.dataStorage.read();if(!r.ok)return null;const s=r.data[t];if("string"==typeof s)return s;if(null==s||null==this.mappingIdentifierCustomDataIndex)return null;const n=null===(a=null===(i=null===(e=s[K.CustomData])||void 0===e?void 0:e[this.mappingIdentifierCustomDataIndex])||void 0===i?void 0:i.value)||void 0===a?void 0:a[0];return null!=n?n:null}mutUpdateTargetingData({infoData:t,visitorCode:e,kameleoonData:i,targetingData:a,extendTtl:r,track:s}){var n,o,u;for(const d of i){if(!1===s&&(d.status=B.Sent),d.data.type===K.CustomData&&!this.processCustomData({infoData:t,customData:d,mutData:a,visitorCode:e}))continue;if(d.data.type===K.Conversion){const t=d;(null!==(o=null===(n=t._metadata)||void 0===n?void 0:n.length)&&void 0!==o?o:0)>0&&(t._metadata=null===(u=t._metadata)||void 0===u?void 0:u.filter(t=>this.trySetCustomDataIndexByName(t)))}const i=this.dataProcessor.mutUpdateData({infoData:t,visitorCode:e,mutData:a,dataItem:d,extendTtl:r}),l=t.nextDataCleanup;(!l||l&&i&&i<l)&&(t.nextDataCleanup=i),d.data.status===B.Unsent&&this.dataProcessor.mutAddUnsentData({mutData:t,visitorCode:e,dataType:d.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:s}=i,n=Boolean(s.value.length&&s.value[0].length);if(!this.trySetCustomDataIndexByName(i))return!1;if(s.index==at.UNDEFINED_INDEX&&(s.index=i.index),this.mappingIdentifierCustomDataIndex===s.index&&n){i._isMappingIdentifier=!0;const n=s.value[0];a!==n&&(this.dataProcessor.createReference({infoData:t,mutData:e,visitorCode:a,linkedVisitor:s.value[0]}),null!==(r=t.mappingIdentifiers)&&void 0!==r||(t.mappingIdentifiers={}),t.mappingIdentifiers[n]={mappingIdentifier:a,timestamp:Date.now()})}return this.localCustomDataIndexes.has(s.index)&&(i.status=B.Sent),!0}trySetCustomDataIndexByName(t){if(t.index!==at.UNDEFINED_INDEX)return!0;if(!t.name)return!1;const e=this.customDataIndexByName.get(t.name);return null!=e&&(t.index=e,!0)}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(!(K.CustomData in e))return new Set;const i=new Set;for(const t in Object.keys(e[K.CustomData]))i.add(Number(t));return i}set customDataIndexes(t){var e;const[i,a]=[[],[]],r=new Map;t.forEach(t=>{t.localOnly&&i.push(t.index),"VISITOR"===t.scope&&a.push(t.index),t.name&&r.set(t.name,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),this.customDataIndexByName=r}getCustomDataIndexByName(t){return this.customDataIndexByName.get(t)}}const ge=31536e3;let pe=class{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?u.Err(new C(m.VisitorCodeEmpty)):t.length>255?u.Err(new C(m.VisitorCodeMaxLength)):u.Ok()}getVisitorCode(t){if(!this.getDataCallback||!this.setDataCallback)throw new Error("Missing getDataCallback or setDataCallback methods in getVisitorCode!");let e;const i=this.getDataCallback(se.VisitorCode);return i&&(e=i),e||(t?(this.validateVisitorCode(t).throw(),e=t):e=this.generateVisitorCode()),this.processSimulatedVariations(e),this.isConsentRequired||this.setDataCallback({visitorCode:e,key:se.VisitorCode,maxAge:ge,path:"/"}),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&&v.error`Failed to process simulated variations: ${t.message}`}}}getSimulatedVariations(t){const e=this.getDataCallback(se.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&&v.error`Failed to parse simulated variations: ${t.message}`}return i}generateVisitorCode(){const t=[];for(let e=0;e<16;e++)t.push("abcdefghijklmnopqrstuvwxyz0123456789"[Math.floor(36*Math.random())]);return t.join("")}setVariationConfiguration(t){this.variationConfiguration||(this.variationConfiguration=t)}};var ve,fe,me={exports:{}},ye={exports:{}},De=i(Object.freeze({__proto__:null,default:{}}));var Ce,ke=(fe||(fe=1,me.exports=(Ce=function(){return ve||(ve=1,ye.exports=(e=e||function(e){var i;if("undefined"!=typeof window&&window.crypto&&(i=window.crypto),"undefined"!=typeof self&&self.crypto&&(i=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(i=globalThis.crypto),!i&&"undefined"!=typeof window&&window.msCrypto&&(i=window.msCrypto),!i&&void 0!==t&&t.crypto&&(i=t.crypto),!i)try{i=De}catch(t){}var a=function(){if(i){if("function"==typeof i.getRandomValues)try{return i.getRandomValues(new Uint32Array(1))[0]}catch(t){}if("function"==typeof i.randomBytes)try{return i.randomBytes(4).readInt32LE()}catch(t){}}throw new Error("Native crypto module could not be used to get secure random number.")},r=Object.create||function(){function t(){}return function(e){var i;return t.prototype=e,i=new t,t.prototype=null,i}}(),s={},n=s.lib={},o=n.Base={extend:function(t){var e=r(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)}},u=n.WordArray=o.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||l).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 s=0;s<r;s++){var n=i[s>>>2]>>>24-s%4*8&255;e[a+s>>>2]|=n<<24-(a+s)%4*8}else for(var o=0;o<r;o+=4)e[a+o>>>2]=i[o>>>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=o.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(a());return new u.init(e,t)}}),d=s.enc={},l=d.Hex={stringify:function(t){for(var e=t.words,i=t.sigBytes,a=[],r=0;r<i;r++){var s=e[r>>>2]>>>24-r%4*8&255;a.push((s>>>4).toString(16)),a.push((15&s).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 u.init(i,e/2)}},c=d.Latin1={stringify:function(t){for(var e=t.words,i=t.sigBytes,a=[],r=0;r<i;r++){var s=e[r>>>2]>>>24-r%4*8&255;a.push(String.fromCharCode(s))}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 u.init(i,e)}},h=d.Utf8={stringify:function(t){try{return decodeURIComponent(escape(c.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return c.parse(unescape(encodeURIComponent(t)))}},g=n.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new u.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=h.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var i,a=this._data,r=a.words,s=a.sigBytes,n=this.blockSize,o=s/(4*n),d=(o=t?e.ceil(o):e.max((0|o)-this._minBufferSize,0))*n,l=e.min(4*d,s);if(d){for(var c=0;c<d;c+=n)this._doProcessBlock(r,c);i=r.splice(0,d),a.sigBytes-=l}return new u.init(i,l)},clone:function(){var t=o.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0});n.Hasher=g.extend({cfg:o.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){g.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=s.algo={};return s}(Math),e)),ye.exports;var e}(),function(t){var e=Ce,i=e.lib,a=i.WordArray,r=i.Hasher,s=e.algo,n=[],o=[];!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&&(n[r]=i(t.pow(a,.5))),o[r]=i(t.pow(a,1/3)),r++),a++}();var u=[],d=s.SHA256=r.extend({_doReset:function(){this._hash=new a.init(n.slice(0))},_doProcessBlock:function(t,e){for(var i=this._hash.words,a=i[0],r=i[1],s=i[2],n=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 p=u[g-15],v=(p<<25|p>>>7)^(p<<14|p>>>18)^p>>>3,f=u[g-2],m=(f<<15|f>>>17)^(f<<13|f>>>19)^f>>>10;u[g]=v+u[g-7]+m+u[g-16]}var y=a&r^a&s^r&s,D=(a<<30|a>>>2)^(a<<19|a>>>13)^(a<<10|a>>>22),C=h+((d<<26|d>>>6)^(d<<21|d>>>11)^(d<<7|d>>>25))+(d&l^~d&c)+o[g]+u[g];h=c,c=l,l=d,d=n+C|0,n=s,s=r,r=a,a=C+(D+y)|0}i[0]=i[0]+a|0,i[1]=i[1]+r|0,i[2]=i[2]+s|0,i[3]=i[3]+n|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),Ce.SHA256)),me.exports),Ie=e(ke);class we{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=Ie(t).toString();return parseInt(e,16)/Math.pow(2,256)}}class Ve{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===B.Unsent)}getVisitorsWithUnsentData(){const t=this.storage.read();if(!t.ok)return[];const e=[];for(const[i,a]of Object.entries(t.data))Object.values(a).some(t=>t.status===B.Unsent)&&e.push(i);return e}getPendingData(t){return this.getVariationData(t,t=>t===B.Pending)}getStoredVariations(t){const e=this.storage.read();if(!e.ok)return e;const i=e.data[t];return i?u.Ok(i):u.Err(new C(m.StorageRead,t))}getVariation({visitorCode:t,visitorIdentifier:e,featureFlag:i,targetingData:a,packageInfo:r,clientConfiguration:s,dataManager:n,legalConsent:o,track:d=!0,withAssignment:l=!1}){const{rules:c,featureKey:h,id:g,defaultVariationKey:p}=i,v=s.isConsentRequired?o:le.Given;for(const o of c){const{segment:c,experimentId:f,id:y,exposition:D,respoolTime:k,variationByExposition:I}=o,w=Date.now(),V=this.getForcedExperimentVariation(t,o.experimentId);let b=null;if(V.ok&&(b=V.data,null==b?void 0:b.forceTargeting)){const e=this.createAndSaveForcedTargetedVariation(t,i,o,b,d,l,w);return u.Ok(e)}const T=tt.checkTargeting({segment:c,visitorCode:t,experimentId:f,targetingData:a,packageInfo:r,clientConfiguration:s,dataManager:n,variationConfiguration:this});if(!T.ok)return T;if(T.data){if(b){const e=this.createAndSaveForcedTargetedVariation(t,i,o,b,d,l,w);return u.Ok(e)}if(we.getHashDouble({visitorIdentifier:e,respoolTime:k,id:String(y)})<=D){if(v==le.NotGiven&&"EXPERIMENTATION"==o.type){if("PARTIALLY_BLOCK"==s.consentBlockingBehaviour)break;return u.Err(new C(m.FeatureFlagEnvironmentDisabled,`Evaluation of ${o} is blocked because consent is not provided for visitor '${t}'`))}let i=this.evaluateCBScores(o,e,a);if(!i){const t=we.getHashDouble({visitorIdentifier:e,respoolTime:k,id:String(f)});i=tt.getVariationByHash(I,t)}if(i){l&&this.updateStoredVariations(t,{[f]:{variationId:i.variationId,isTargetedRule:"TARGETED_DELIVERY"===o.type,status:d?B.Unsent:B.Sent,assignedTime:w}});const e={variationId:i.variationId,variationKey:i.variationKey,rule:o,featureFlagId:g,featureKey:h,experimentId:f,isTargetedRule:"TARGETED_DELIVERY"===o.type};return u.Ok(e)}}if("TARGETED_DELIVERY"===o.type){const t={featureKey:h,featureFlagId:g,experimentId:null,variationKey:p,variationId:null,rule:null,isTargetedRule:!0};return u.Ok(t)}}}const f={featureKey:h,featureFlagId:g,experimentId:null,variationKey:p,variationId:null,rule:null,isTargetedRule:!1};return u.Ok(f)}createAndSaveForcedTargetedVariation(t,e,i,a,r,s,n){const o={variationKey:a.varByExp.variationKey,variationId:a.varByExp.variationId,rule:i,featureFlagId:e.id,featureKey:e.featureKey,experimentId:i.experimentId,isTargetedRule:"TARGETED_DELIVERY"===i.type};return s&&this.updateStoredVariations(t,{[i.experimentId]:{variationId:o.variationId,isTargetedRule:"TARGETED_DELIVERY"===i.type,status:r?B.Unsent:B.Sent,assignedTime:n}}),o}updateStoredVariations(t,e){const i=this.storage.read();if(!i.ok)return i;let a=i.data;a[t]||(a[t]={});for(const i in e)a[t][i]=e[i];return this.storage.write(a)}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){const a=this.storageForcedExperimentVariations.read();if(!a.ok)return a;let r=a.data;return r[t]||(r[t]={}),i?r[t][e]=i:delete r[t][e],this.storageForcedExperimentVariations.write(r)}updateForcedFeatureVariations(t,e){const i=this.storageForcedFeatureVariations.read();if(!i.ok)return i;let a=i.data;a[0]||(a[0]={}),a[1]||(a[1]={});const r=a[0],s=a[1];return r[t]||(r[t]={}),s[t]||(s[t]={}),e.forEach(e=>{(e.simulated?s[t]:r[t])[e.featureKey]=e}),this.storageForcedFeatureVariations.write(a)}clearSimulatedVariations(t){var e;const i=this.storageForcedFeatureVariations.read();if(!i.ok)return 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=u.Ok(),a}getForcedFeatureVariation(t,e){var i,a,r,s;const n=this.storageForcedFeatureVariations.read();if(!n.ok)return n;const o=null===(a=null===(i=n.data[1])||void 0===i?void 0:i[t])||void 0===a?void 0:a[e];if(o)return u.Ok(o);const d=null===(s=null===(r=n.data[0])||void 0===r?void 0:r[t])||void 0===s?void 0:s[e];return u.Ok(d)}getForcedExperimentVariation(t,e){var i;const a=this.storageForcedExperimentVariations.read();if(!a.ok)return a;const r=null===(i=a.data[t])||void 0===i?void 0:i[e];return u.Ok(r)}parseForcedVariationData(t,e){const i=this.clientConfiguration.featureFlags.get(t.featureKey);if(!i)return v.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 v.error`Simulated variation ${t.variationId} not found`,null}simulatedVariationFromJson(t,e){return this.isSimulatedVariationJson(e)?this.parseForcedVariationData({featureKey:t,variationId:e.varId,experimentId:e.expId},!0):null}isSimulatedVariationJson(t){return t&&("number"==typeof t.expId||null===t.expId)}evaluateCBScores(t,e,i){if(!(null==i?void 0:i.cbScores))return null;const a=t.experimentId,r=new ht(i.cbScores.cbs).getValues().get(a);let s=null;if(void 0!==r){const i=t.variationByExposition,n=r.map(t=>i.filter(e=>t.ids.includes(e.variationId))).find(t=>t.length>0);if(n){let i=0;if(n.length>1){const r=we.getHashDouble({visitorIdentifier:e,respoolTime:t.respoolTime,id:String(a)});i=Math.min(Math.floor(r*n.length),n.length-1)}s=n[i]}}return s}}let be=class{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}close(){this.eventSource.close(),this.isConnectionOpen=!1}onError(t){this.eventSource.onError?this.eventSource.onError(t):v.warning("EventSource does not have `onError` method provided. Real-time errors won't be handled.")}handleMessage(t){return e=>{const i=JSON.parse(e.data),{siteCode:a,ts:r}=i;this.siteCode===a&&t(r)}}};class Te{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:s}){const n=[],o=this.getVariationDataLines(e),u=this.getVisitorDataLines(i);return n.push(...o,...u),this.addVisitorTrackingLines({visitorCode:t,lines:n,userAgent:a,isConsentProvided:r,isMappingIdentifier:s})}getVisitorDataLines(t){const e=[];for(const i of t){let t;if(!(i instanceof Tt||i.data.type!==K.Conversion&&i.data.type!==K.PageView)){const e=i.data.nonce;e?t=e:(t=tt.getNonce(this.prng),i.data.nonce=t)}t||(t=tt.getNonce(this.prng)),e.push(i.url+S+t)}return e}getVariationDataLines(t){const e=[];return t.forEach(t=>{e.push("eventType=experiment"+E+t.experimentId+"&variationId="+t.variationId+S+tt.getNonce(this.prng))}),e}prepareVisitorBody(t){const e=this.trackingVisitors[t];if(!e)return u.Err();const{lines:i,userAgent:a,isMappingIdentifier:r,isConsentProvided:s}=e,n=this.getIdentifier(t,r);if(i.length)i.forEach((t,e)=>{i[e]=t+n});else if(s){const t=this.getActivityLine();i.push(t+n)}a&&i.length&&(i[0]+="&userAgent="+a,this.hasUserAgent=!0);const o=this.checkSize(i);return o.ok&&this.resultBody.push(...i),o}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>1e7?u.Err():(this.currentSize+=e,u.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"eventType=activity"+S+tt.getNonce(this.prng)}getIdentifier(t,e){return(e?M:b)+encodeURIComponent(t)}}class Se{constructor({dataManager:t,trackingStorage:e,variationConfiguration:i,trackingInterval:a,requester:r,prng:s,clientConfiguration:n}){this.intervalId=null,this.dataManager=t,this.trackingStorage=e,this.variationConfiguration=i,this.requester=r,this.bodyProvider=new Te(s),this.clientConfiguration=n;try{this.intervalId=setInterval(()=>{this.sendDataAll()},a)}catch(t){throw this.intervalId&&clearInterval(this.intervalId),t}}scheduleVisitor(t,e){this.trackingStorage.read().and(i=>{i.scheduledVisitors[`_${t}`]={isConsentProvided:e},this.trackingStorage.write(i)})}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 s=!1;if(a){const e=this.dataManager.getLinkedVisitor(t),i=this.dataManager.identifierCustomDataIndex;e||"number"!=typeof i?s=!0:this.dataManager.storeData({visitorCode:t,data:[new at(i,t)]})}return s&&t!=r}getUserAgent(t){const e=this.dataManager.getVisitorData(t);if(e){const t=e[K.UserAgent];if(t)return t.value}}sendDataAll(){return d(this,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 d(this,0,void 0,function*(){this.trackingStorage.read().ok&&(yield this.sendData({[`_${t}`]:{isConsentProvided:e}}))})}sendData(t){return d(this,0,void 0,function*(){const e={},i=[],a=[];for(const[r,{isConsentProvided:s}]of Object.entries(t)){let t=r.startsWith("_")?r.substring(1):r;const n=this.checkIsIdentifier(t),o=this.getUserAgent(t),u=this.getUnsentVisitorData(t,s),d=this.getUnsentVariationData(t,s);if(!this.bodyProvider.addData({visitorCode:t,variationData:d,visitorData:u,userAgent:o,isConsentProvided:s,isMappingIdentifier:n}).ok){v.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:s}),i.push(r)}const{body:r,hasUserAgent:s}=this.bodyProvider.getTrackingBody();if(0!==i.length&&this.trackingStorage.read().and(t=>{i.forEach(e=>{delete t.scheduledVisitors[e]}),this.trackingStorage.write(t)}),r)if((yield this.requester.track(r,s)).ok)this.updateDataStatus(e,B.Sent);else{v.error("Tracking request failed"),this.updateDataStatus(e,B.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:s}]of Object.entries(t)){const t=r.filter(t=>!(t instanceof Tt)).map(t=>{const i=t;return i.status=e,i});t.length&&(i[a]=t);const n=s.map(t=>String(t.experimentId));this.variationConfiguration.updateDataStatus({visitorCode:a,experimentIdList:n,status:e})}0!==Object.keys(i).length&&(e===B.Sent?this.dataManager.storeTrackedData(i):this.dataManager.storeDataForVisitors(i,!1))}getUnsentVisitorData(t,e){const i=this.dataManager.getUnsentData(t),a=[];if(!i.length)return[];for(const t of i)t.url&&(e||this.clientConfiguration.hasAnyTargetedDeliveryRule&&!(t instanceof Tt)&&t.data.type===K.Conversion)&&a.push(t);if(a.length){const e=a.filter(t=>!(t instanceof Tt)).map(t=>{const e=t;return e.status=B.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:B.Pending}),r}}class Ee{constructor(t,e){if(t<=0)throw new Error("'expirationPeriod' must be positive!");this.expirationPeriod=t,this.clientConfiguration=e}getEngineTrackingCode(t){var e;let i=Ee.TRACKING_CODE_INIT;const a=Date.now()-this.expirationPeriod,r=this.clientConfiguration.experimentMap;for(const[s,n]of Object.entries(t)){if(void 0===n.assignedTime||n.assignedTime<a)continue;const t=Number(s),o=!(null===(e=r.get(t))||void 0===e?void 0:e.hasJsCssVariables);i+=`window.kameleoonQueue.push(['${Ee.ASSIGN_VARIATION_COMMAND}',${t},${n.variationId},true]);`,i+=`window.kameleoonQueue.push(['${Ee.TRIGGER_COMMAND}',${t},${o}]);`}return i}getAssignedVariationsFromKameleoonQueue(t){if(!Array.isArray(t))return{};const e={};for(const i of t){if(!this.isAssignVariationCommand(i))continue;const[,t,a]=i;e[t]={variationId:a,isTargetedRule:!1,status:B.Unsent,assignedTime:Date.now()}}return e}isAssignVariationCommand(t){if(!Array.isArray(t))return!1;const[e,i,a]=t;return e===Ee.ASSIGN_VARIATION_COMMAND&&"number"==typeof i&&"number"==typeof a}}Ee.TRACKING_CODE_INIT="window.kameleoonQueue=window.kameleoonQueue||[];",Ee.ASSIGN_VARIATION_COMMAND="Experiments.assignVariation",Ee.TRIGGER_COMMAND="Experiments.trigger";let Oe=class t{constructor({siteCode:t,dependencies:e,configuration:i,internalConfiguration:a,stubMode:r}){var s;if(this.initialized=!1,this.stubMode=r,r)return this.variationConfiguration={},this.clientConfiguration={},this.dataManager={},this.consentDataStorage={},this.hybridManager={},this.requester={},this.externalPackageInfo={},this.visitorCodeManager={},this.eventManager={},this.tracker={},void(this.environment="");const n=null==a?void 0:a.externals.externalLogger;n&&v.setLogger(n),St.setConditionFactoryInstance(new ae);const{settings:o}=new mt(t,i);this.environment=o.environment;const{externalStorage:u,externalEventSource:d,externalPackageInfo:c,externalVisitorCodeManager:h,externalRequester:g,externalPRNG:p,customDataManager:f}=a.externals,{useAbortController:m}=a.settings,y=new ue(u,se.ClientData),D=new ue(u,se.VariationData),C=new ue(u,se.ForcedExperimentVariation),k=new ue(u,se.ForcedFeatureVariation),I=new ue(u,se.ConsentData),w=new ue(u,se.TrackingData);let V=f;if(!V){const t=new ue(u,se.TargetingData),e=new ue(u,se.DataInfo);V=new he({dataStorage:t,infoStorage:e,cleanupInterval:o.cleanupInterval,packageInfo:c})}const b=null!==(s=null==e?void 0:e.urlProvider)&&void 0!==s?s:new $;b.initialize({domain:o.networkDomain,siteCode:o.siteCode,packageInfo:c,environment:o.environment});const T=new P({urlProvider:b,useAbortController:m,packageInfo:c,externalRequester:g,requestTimeout:o.requestTimeout,trackRetryDelay:o.trackRetryDelay}),S=new be({siteCode:o.siteCode,externalEventSource:d,urlProvider:b}),E=new l,O=new vt({urlProvider:b,storage:y,updateInterval:o.updateInterval,dataManager:V,eventManager:E,requester:T,eventSource:S,externalVisitorCodeManager:h,externalPackageInfo:c,defaultDataFile:null==i?void 0:i.defaultDataFile}),x=new Ee(5e3,O),F=new Ve(D,C,k,h,O),R=new Se({dataManager:V,trackingStorage:w,variationConfiguration:F,requester:T,trackingInterval:o.trackingInterval,prng:p,clientConfiguration:O});this.tracker=R,this.variationConfiguration=F,this.requester=T,this.hybridManager=x,this.dataManager=V,this.clientConfiguration=O,this.externalPackageInfo=c,this.consentDataStorage=I,this.visitorCodeManager=h,this.eventManager=E,null!==o.cleanupInterval&&new de(u,o.cleanupInterval)}initialize(){return d(this,0,void 0,function*(){if(this.stubMode)return!1;const t=yield this.clientConfiguration.initialize();return t.throw(),this.initialized=!0,t.ok})}addData(t,...e){if(this.stubMode)throw new C(m.Initialization);const i="string"==typeof t?{visitorCode:t,data:e}:t,{visitorCode:a,data:r,track:s=!0}=i;if(this.visitorCodeManager.validateVisitorCode(a).throw(),!this.initialized)throw new C(m.Initialization);this.dataManager.storeData({visitorCode:a,track:s,data:r}).throw()}getRemoteVisitorData({visitorCode:t,shouldAddData:e=!0,filters:i=kt}){return d(this,0,void 0,function*(){if(this.stubMode)throw new C(m.Initialization);if(!this.initialized)throw new C(m.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const{previousVisitAmount:a}=i;if("number"==typeof a&&(a<1||a>25))throw new C(m.VisitAmount);const r=this.dataManager.isUniqueIdentifier(t),s=(yield this.requester.getVisitorData({visitorCode:t,filters:i,isMappingIdentifier:r})).throw(),{visitorData:n,storageVisitorData:o,visitsData:u,mappingIdentifier:d}=pt.parseVisitorData({data:s,filters:i,visitorCode:t,dataManager:this.dataManager,variationConfiguration:this.variationConfiguration});for(const i of o)(e||this.dataManager.isPersistentCustomData(i))&&this.addData(t,i);return u&&e&&this.addData(t,u),(null==i?void 0:i.visitorCode)&&d&&this.dataManager.setMappingIdentifier(t,d),n})}trackConversion({visitorCode:t,goalId:e,negative:i,revenue:a,metadata:r}){this.stubMode||(this.addData(t,new rt({goalId:e,revenue:a,negative:i,metadata:r})),this.flush(t))}_flushInternal(t,e=!1){return d(this,0,void 0,function*(){if("string"==typeof t)e?yield this.tracker.sendDataForVisitor(t,this._isConsentProvided(t)):this.tracker.scheduleVisitor(t,this._isConsentProvided(t));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));e&&(yield this.tracker.sendDataAll())}})}flushInstant(t){return d(this,0,void 0,function*(){if(this.stubMode)throw new C(m.Initialization);const{visitorCode:e}=this._parseFlushParams(t);if(!this.initialized)throw new C(m.Initialization);yield this._flushInternal(e,!0)})}flush(t){if(this.stubMode)throw new C(m.Initialization);const{visitorCode:e,isInstant:i}=this._parseFlushParams(t);if(!this.initialized)throw new C(m.Initialization);this._flushInternal(e,i)}_parseFlushParams(t){var e;let i,a=!1;return"string"==typeof t?i=t:t&&(i=t.visitorCode,a=null!==(e=t.instant)&&void 0!==e&&e),void 0!==i&&this.visitorCodeManager.validateVisitorCode(i).throw(),{visitorCode:i,isInstant:a}}getFeatureFlags(){if(this.stubMode)throw new C(m.Initialization);if(!this.initialized)throw new C(m.Initialization);const t=this.clientConfiguration.featureFlags,e=[];return t.forEach(({id:t,featureKey:i})=>{e.push({id:t,key:i})}),e}getVisitorFeatureFlags(t){if(this.stubMode)throw new C(m.Initialization);if(!this.initialized)throw new C(m.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})}),i}getVariation({visitorCode:t,featureKey:e,track:i=!0}){if(this.stubMode)throw new C(m.Initialization);return this.visitorCodeManager.validateVisitorCode(t).throw(),this._getFeatureVariation({visitorCode:t,featureKey:e,track:i}).throw()}getVariations({visitorCode:t,onlyActive:e=!1,track:i=!0}){if(this.stubMode)throw new C(m.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const a=new Map,r=this.clientConfiguration.featureFlags;for(const s of r.values())try{const r=this._getFeatureVariation({visitorCode:t,featureKey:s.featureKey,track:i});!r.ok||e&&r.data.key===yt||a.set(s.featureKey,r.data)}catch(t){if(t instanceof C&&t.type!==m.FeatureFlagEnvironmentDisabled)throw t}return a}getActiveFeatureFlags(t){if(this.stubMode)throw new C(m.Initialization);if(!this.initialized)throw new C(m.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const e=this._getActiveFeatureVariations(t),i=new Map;return e.forEach(e=>{const{variationKey:a,featureKey:r,variationId:s,experimentId:n}=e;let o=[];null!==s&&null!==n&&(o=this._getFeatureVariables({visitorCode:t,featureKey:r,variationKey:a}));const u=o.map(t=>pt.parseFeatureVariable(t).throw());i.set(e.featureKey,{name:"",key:a,id:s,experimentId:n,variables:u})}),i}getFeatureFlagVariationKey(t,e){if(this.stubMode)throw new C(m.Initialization);this.visitorCodeManager.validateVisitorCode(t).throw();const{key:i}=this._getFeatureVariation({visitorCode:t,featureKey:e,track:!0}).throw();return i}getFeatureFlagVariable({visitorCode:t,featureKey:e,variableKey:i}){if(this.stubMode)throw new C(m.Initialization);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(m.FeatureFlagVariableNotFound,i,t);const{type:s,value:n}=pt.parseFeatureVariable(r).throw();return{type:s,value:n}}getFeatureFlagVariables(t,e){if(this.stubMode)throw new C(m.Initialization);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=pt.parseFeatureVariable(t).throw();r.push(e)}return r}isFeatureFlagActive(t,e){if(this.stubMode)throw new C(m.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)),this.visitorCodeManager.validateVisitorCode(i).throw();try{const{key:t}=this._getFeatureVariation({visitorCode:i,featureKey:a,track:r}).throw();return t!==yt}catch(t){if(t instanceof C&&t.type===m.FeatureFlagEnvironmentDisabled)return!1;throw t}}getRemoteData(t){return d(this,0,void 0,function*(){return this.stubMode?null:(yield this.requester.getRemoteData(t)).throw()})}getVisitorWarehouseAudience({visitorCode:t,customDataIndex:e,warehouseKey:i}){return d(this,0,void 0,function*(){if(this.stubMode)return null;this.visitorCodeManager.validateVisitorCode(t).throw();const a=yield this.getRemoteData(i||t);if(!a)throw new C(m.RemoteData,`No data found for ${i||t} key`);if(!a[Dt]||0===Object.keys(a[Dt]).length)return null;const r=new at(e,...Object.keys(a[Dt]));return this.dataManager.storeData({visitorCode:t,track:!0,data:[r]}),r})}onEvent(t,e){if(this.stubMode)throw new C(m.Initialization);if(!this.initialized)throw new C(m.Initialization);this.eventManager.addEventHandler(t,e)}getEngineTrackingCode(t){if(this.stubMode)return"";this.visitorCodeManager.validateVisitorCode(t).throw();const e=this.variationConfiguration.getStoredVariations(t);return this.hybridManager.getEngineTrackingCode(e.ok?e.data:{})}_processKameleoonQueue(t,e){if(this.stubMode)return;const i=this.hybridManager.getAssignedVariationsFromKameleoonQueue(e);Object.keys(i).length&&this.variationConfiguration.updateStoredVariations(t,i).ok&&this.flush(t)}isInitialized(){return this.initialized}setLogLevel(t){v.setLogLevel(t)}setForcedVariation({visitorCode:t,experimentId:e,variationKey:i,forceTargeting:a=!0}){this.stubMode||(this.visitorCodeManager.validateVisitorCode(t).throw(),this._setForcedVariation({visitorCode:t,experimentId:e,variationKey:i,forceTargeting:a}).throw())}evaluateAudiences(t){if(this.stubMode)return;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=tt.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&&e.push(new ce(Number(a.id)))}0!==e.length&&this.dataManager.storeData({visitorCode:t,data:e}),this.flush(t)}getDataFile(){const t={featureFlags:new Map,dateModified:0};return this.stubMode?t:this.clientConfiguration.dataFile}setUserConsent({visitorCode:t,consent:e,setData:i}){this.stubMode||(this.visitorCodeManager.validateVisitorCode(t).throw(),this.updateConsentData(t,e),e&&i({visitorCode:t,key:se.VisitorCode,maxAge:ge,path:"/"}))}updateConsentData(t,e){const i=this.consentDataStorage.read(),a=e?le.Given:le.NotGiven;if(!i.ok)return void(i.error.type===m.StorageEmpty&&this.consentDataStorage.write({[t]:{consent:a}}));const r=i.data;r[t]={consent:a},this.consentDataStorage.write(r)}getLegalConsent(t){let e;const i=this.consentDataStorage.read();return e=i.ok?this.extractLegalConsent(i.data[t]):le.Unknown,e}extractLegalConsent(t){if(void 0===t)return le.Unknown;if("boolean"==typeof t)return t?le.Given:le.NotGiven;const e=t.consent;return"boolean"==typeof e?e?le.Given:le.NotGiven:e}_isConsentProvided(t){const{isConsentRequired:e}=this.clientConfiguration;return!e||this.getLegalConsent(t)==le.Given}_getFeatureVariables({visitorCode:t,featureKey:e,variationKey:i}){const a=this.clientConfiguration.featureFlags.get(e);if(!a)throw new C(m.FeatureFlagConfigurationNotFound,e);const r=a.variations.find(t=>t.key===i);if(!r)throw new C(m.FeatureFlagVariationNotFound,i,t);return r.variables}_getActiveFeatureVariations(t){const e=this.clientConfiguration.featureFlags,i=[];for(const a of e.values()){const e=this._getForcedFeatureVariation(t,a.featureKey);if(a.environmentEnabled||(null==e?void 0:e.simulated))try{const r=this._evaluate({visitorCode:t,featureFlag:a,track:!1,save:!1,forcedVariation:e});r.variationKey!==yt&&i.push({variationKey:r.variationKey,variationId:r.variationId,experimentId:r.experimentId,featureFlagId:a.id,featureKey:a.featureKey,rule:null,isTargetedRule:"TARGETED_DELIVERY"===r.ruleType})}catch(t){if(t instanceof C){t.type!=m.FeatureFlagEnvironmentDisabled&&v.error`Unexpected error: ${t}`;continue}}}return i}_evaluate({visitorCode:e,featureFlag:i,track:a,save:r,forcedVariation:n}){let o;const u=this.dataManager.getVisitorData(e);if(n)o=t.EvaluatedExperiment.fromForcedFeatureVariation(i.defaultVariationKey,n);else if(this._isVisitorNotInHoldout(e,a,r,i,u)&&this._isFFUnrestrictedByMEGroup(e,i,u)){const s=this._getCodeForHash(e,i.bucketingCustomDataIndex,u),n=this.getLegalConsent(e),d=this.variationConfiguration.getVariation({visitorCode:e,visitorIdentifier:s,featureFlag:i,track:a,withAssignment:r,targetingData:u,clientConfiguration:this.clientConfiguration,dataManager:this.dataManager,packageInfo:this.externalPackageInfo,legalConsent:n}).throw();o=t.EvaluatedExperiment.fromVariationData(d)}else o=t.EvaluatedExperiment.fromDefaultVariationKey(i.defaultVariationKey);return r&&!o.isSimulated&&null!==o.experimentId&&null!==o.variationId&&this.variationConfiguration.updateStoredVariations(e,{[o.experimentId]:{variationId:o.variationId,isTargetedRule:"TARGETED_DELIVERY"===o.ruleType,status:a?B.Unsent:B.Sent,assignedTime:Date.now()}}),this.eventManager.fireEvent(s.Evaluation,{featureKey:i.featureKey,variation:{key:o.variationKey,experimentId:o.experimentId,id:o.variationId}}),o}_isFFUnrestrictedByMEGroup(t,e,i){const a=e.mutuallyExclusiveGroup;if(!a)return!0;let r=!0;const s=this.clientConfiguration.meGroups.get(a);if(s){const n=this._getCodeForHash(t,e.bucketingCustomDataIndex,i),o=we.getHashDoubleForMEGroup(n,a);r=s.getFeatureFlagByHash(o)===e}return r}_getFeatureVariation({visitorCode:t,featureKey:e,track:i}){var a,r;if(!this.initialized)return u.Err(new C(m.Initialization));const s=this.clientConfiguration.featureFlags.get(e);if(!s)return u.Err(new C(m.FeatureFlagConfigurationNotFound,e));const n=this._getForcedFeatureVariation(t,e);if(!s.environmentEnabled&&!(null==n?void 0:n.simulated))return u.Err(new C(m.FeatureFlagEnvironmentDisabled,s.featureKey,this.environment));const o=this._evaluate({visitorCode:t,featureFlag:s,track:i,save:!0,forcedVariation:n}),{experimentId:d,variationId:l,variationKey:c,isSimulated:h}=o;let g=new Map;try{this._getFeatureVariables({visitorCode:t,featureKey:e,variationKey:c}).forEach(t=>{const e=pt.parseFeatureVariable(t).throw();g.set(t.key,e)})}catch(t){}i&&!h&&this.flush(t);const p={name:null!==(r=null===(a=s.variations.find(t=>t.key===c))||void 0===a?void 0:a.name)&&void 0!==r?r:"",key:c,id:l,experimentId:d,variables:g};return u.Ok(p)}_isVisitorNotInHoldout(t,e,i,a,r){const s=this.clientConfiguration.holdout;if(!s)return!0;let n=!0;if((this.clientConfiguration.isConsentRequired?this.getLegalConsent(t):le.Given)==le.NotGiven&&"FULLY_BLOCK"==this.clientConfiguration.consentBlockingBehaviour)throw new C(m.FeatureFlagEnvironmentDisabled,`Evaluation of holdout is blocked because consent is not provided for visitor '${t}'`);const o=this._getCodeForHash(t,null==a?void 0:a.bucketingCustomDataIndex,r),u=we.getHashDouble({visitorIdentifier:o,respoolTime:null,id:String(s.experimentId)});let d=tt.getVariationByHash(s.variationByExposition,u);return null!==d&&(n="in-holdout"!==d.variationKey,i&&this.variationConfiguration.updateStoredVariations(t,{[s.experimentId]:{variationId:d.variationId,isTargetedRule:!1,status:e?B.Unsent:B.Sent,assignedTime:Date.now()}})),n}_setForcedVariation({visitorCode:t,experimentId:e,variationKey:i,forceTargeting:a=!0}){if(null===i)return this.variationConfiguration.updateForcedExperimentVariation(t,e,null);let r=null,s=null;return r=this.clientConfiguration.experimentMap.get(e),r?(s=r.variations.get(i),void 0===s?(v.error`Variation with key ${i} not found in experiment ${r} for visitor ${t}`,u.Err(new C(m.FeatureFlagVariationNotFound,i,t))):(r={type:r.type,experimentId:e},s={variationKey:i,variationId:s},this.variationConfiguration.updateForcedExperimentVariation(t,e,{rule:r,varByExp:s,forceTargeting:a}))):(v.error`Experiment with id ${e} not found for visitor ${t}`,u.Err(new C(m.FeatureFlagExperimentNotFound,e,t)))}_getForcedFeatureVariation(t,e){const i=this.variationConfiguration.getForcedFeatureVariation(t,e);return i.ok?i.data:null}_getCodeForHash(t,e,i){var a;let r;if(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)),r}_refreshDataFileIfStale(){return d(this,0,void 0,function*(){const t=yield this.clientConfiguration.refreshDataFileIfStale();return t.ok&&t.data})}};Oe.EvaluatedExperiment=class{static fromForcedFeatureVariation(t,e){var i,a,r,s;let n=t;return e.varByExp?n=e.varByExp.variationKey:"EXPERIMENTATION"===(null===(i=e.rule)||void 0===i?void 0:i.type)&&(n=yt),{variationKey:n,variationId:(null===(a=e.varByExp)||void 0===a?void 0:a.variationId)||null,experimentId:(null===(r=e.rule)||void 0===r?void 0:r.experimentId)||null,ruleType:(null===(s=e.rule)||void 0===s?void 0:s.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 xe{static simulateSuccessRequest(t,e){switch(t){case _.Tracking:return new Promise(t=>{t({status:204,json:()=>new Promise(t=>t(null)),text:()=>new Promise(t=>t("")),ok:!0})});case _.Configuration:case _.RemoteData:return new Promise(t=>{t({status:200,json:()=>new Promise(t=>t(e)),text:()=>new Promise(t=>t("")),ok:!0})});default:D(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 Fe,Re=u.Err,Me=u.Ok;function Ae(t,e,i,a){return new(i||(i=Promise))(function(r,s){function n(t){try{u(a.next(t))}catch(t){s(t)}}function o(t){try{u(a.throw(t))}catch(t){s(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(n,o)}u((a=a.apply(t,e||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class Ne{sendRequest({url:t,parameters:e}){return Ae(this,void 0,void 0,function*(){return yield fetch(t,e)})}}!function(t){t.PairsDelimiter="; ",t.KeyValueDelimiter="=",t.MaxAge="Max-Age",t.Path="Path",t.Domain="Domain"}(Fe||(Fe={}));class _e{getData(t){const e=document.cookie;let i=null;return e&&(i=xe.getCookieValue(e,t)),i}setData({visitorCode:t,domain:e,maxAge:i,key:a,path:r}){const s=this.getResultCookie({domain:e,visitorCode:t,key:a,maxAge:i,path:r});document.cookie=s}getResultCookie({domain:t,visitorCode:e,maxAge:i,key:a,path:r}){const s=[a+Fe.KeyValueDelimiter+e,Fe.MaxAge+Fe.KeyValueDelimiter+i,Fe.Path+Fe.KeyValueDelimiter+r];return t&&s.push(Fe.Domain+Fe.KeyValueDelimiter+t),s.join(Fe.PairsDelimiter)}}class Pe{read(t){const e=localStorage.getItem(t);return t!==se.ConsentData||e&&"{}"!==e?e?JSON.parse(e):null:this.getEngineConsentData()}write(t,e){localStorage.setItem(t,JSON.stringify(e))}getEngineConsentData(){var t;this.visitorCodeManager||(this.visitorCodeManager=new _e);const e=this.visitorCodeManager.getData(se.VisitorCode);if(!e)return null;try{const i=localStorage.getItem("kameleoonLegalConsent");if(!i)return null;const a=JSON.parse(i),r=null===(t=null==a?void 0:a.value)||void 0===t?void 0:t.AB_TESTING;return"boolean"==typeof r?{[e]:{consent:r?le.Given:le.NotGiven}}:null}catch(t){return null}}}class Ue{open({eventType:t,onEvent:e,url:i}){const a=new EventSource(i);this.eventSource=a,this.eventSource.addEventListener(t,e)}close(){this.eventSource&&this.eventSource.close()}onError(t){this.eventSource&&(this.eventSource.onerror=t)}}class Le{getRandomNumber(){if("undefined"!=typeof window&&(null===window||void 0===window?void 0:window.crypto)){const t=new Uint32Array(1),e=4294967296;return window.crypto.getRandomValues(t),t[0]/e}return Math.random()}}class Be{log(t,e){switch(e=`${(new Date).toLocaleString("en-US",{timeZoneName:"short"})} ${e}`,t){case h.DEBUG:console.debug(e);break;case h.INFO:console.info(e);break;case h.WARNING:console.warn(e);break;case h.ERROR:console.error(e)}}}class Ke{constructor(t,e,i,a){this.dataManager=t,this.tracker=e,this.isConsentProvided=i,this.setup(a)}setup(t){setInterval(()=>{this.updateLastActivity()},t),this.updateLastActivity()}updateLastActivity(){const t=this.dataManager.updateLastActivity();t&&this.tracker.scheduleVisitor(t,this.isConsentProvided(t))}}class ze extends he{constructor({dataStorage:t,infoStorage:e,cleanupInterval:i,packageInfo:a,platformAnalyzer:r}){super({dataStorage:t,infoStorage:e,cleanupInterval:i,packageInfo:a}),this.visitor=null,this.platformAnalyzer=r,this.updateVisitor()}getUnsentData(t){var e,i;const a=super.getUnsentData(t),r=super.getVisitorData(t);if(!r)return a;const s=r[K.Browser],n=r[K.Device],o=r[K.OperatingSystem],u=new Tt({browserType:null==s?void 0:s.browser,browserVersion:null==s?void 0:s.version,visitNumber:null===(e=this.visitor)||void 0===e?void 0:e.visitNumber,timeSincePreviousVisit:null===(i=this.visitor)||void 0===i?void 0:i.timeSincePreviousVisit,os:null==o?void 0:o.operatingSystem,deviceType:null==n?void 0:n.device});return a.push(u),a}storeData(t){const{visitorCode:e,data:i}=t;return i.length&&this.checkVisitor(e),super.storeData(t)}storeDataForVisitors(t){return super.storeDataForVisitors(t,!0)}getVisitorData(t){return this.checkVisitor(t),super.getVisitorData(t)}updateLastActivity(){var t,e,i,a;if(!this.visitor)return null;const r=this.dataStorage.read();if(!r.ok)return null;const s=r.data;let n=null!==(t=s[this.visitor.visitorCode])&&void 0!==t?t:{};"string"==typeof n&&(n=s[n]);let o=n[K.VisitsData];o||(o={visits:[],visitNumber:0,type:K.VisitsData,status:B.Sent,expirationTime:0},n[K.VisitsData]=o);const u=this.fetchVisit(o.visits,o.visits.length-1),d=null!==(e=null==u?void 0:u.timeLastActivity)&&void 0!==e?e:0,l=Date.now();let c=null!==(i=o.visitNumber)&&void 0!==i?i:o.visits.length?o.visits.length-1:0;if(l-d>18e5)c+=d>0?1:0,et.insertVisitInOrderedListMutably({list:o.visits,visit:{timeStarted:l,timeLastActivity:l}}),this.visitor.timeSincePreviousVisit=u?l-d:0;else if(o.visits.length&&(o.visits[o.visits.length-1]={timeStarted:null!==(a=null==u?void 0:u.timeStarted)&&void 0!==a?a:l,timeLastActivity:l},-1===this.visitor.timeSincePreviousVisit)){const t=this.fetchVisit(o.visits,o.visits.length-2);this.visitor.timeSincePreviousVisit=t?l-t.timeLastActivity:0}return o.visitNumber=c,this.visitor.visitNumber=c,this.dataStorage.write(s),this.visitor.visitorCode}checkVisitor(t){this.visitor&&this.visitor.visitorCode===t||this.createVisitor(t)}createVisitor(t){var e,i,a;this.visitor=new je(t);try{const r=this.platformAnalyzer.getResult(),s=[];(null===(e=r.os)||void 0===e?void 0:e.name)&&s.push(new ot(r.os.name)),(null===(i=r.platform)||void 0===i?void 0:i.type)&&s.push(new nt(r.platform.type)),(null===(a=r.browser)||void 0===a?void 0:a.name)&&s.push(new st(r.browser.name,r.browser.version)),r.pageView&&s.push(r.pageView),s.length&&this.storeData({visitorCode:t,data:s})}finally{this.updateLastActivity()}}updateVisitor(){var t;const e=this.dataStorage.read();if(!e.ok)return;const i=e.data;let a,r=-1;for(const[e,s]of Object.entries(i)){if("string"==typeof s)continue;const i=s[K.VisitsData];if(!i){a||(a=e);continue}const n=i.visits.length?i.visits[i.visits.length-1]:null;if(n){const i=null!==(t="number"==typeof n?n:null==n?void 0:n.timeLastActivity)&&void 0!==t?t:0;i>r&&(r=i,a=e)}else a||(a=e)}a?this.createVisitor(a):this.visitor=null}fetchVisit(t,e){if(e<0||e>=t.length)return null;const i=t[e];return"number"==typeof i?{timeStarted:i,timeLastActivity:i}:i}}class je{constructor(t){this.visitNumber=0,this.timeSincePreviousVisit=-1,this.visitorCode=t}}class Ge{static getFirstMatch(t,e){const i=e.match(t);return i&&i.length>0&&i[1]||""}static getSecondMatch(t,e){const i=e.match(t);return i&&i.length>1&&i[2]||""}static assign(t,...e){return Object.assign(t,...e)}}class $e{constructor(){this.userAgent=navigator.userAgent||"",this.parsedResult={},""!==this.userAgent&&this.parse()}parseBrowser(){const t=[{test:[/chrome|crios|crmo/i],describe:t=>({name:G.Chrome,version:this.getBrowserVersion(Ge.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/firefox|iceweasel|fxios/i],describe:t=>({name:G.Firefox,version:this.getBrowserVersion(Ge.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/safari|applewebkit/i],describe:t=>({name:G.Safari,version:this.getBrowserVersion(Ge.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/opr\/|opios/i],describe:t=>({name:G.Opera,version:this.getBrowserVersion(Ge.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,t))})},{test:[/edg([ea]|ios)/i],describe:t=>({name:G.InternetExplorer,version:this.getBrowserVersion(Ge.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/googlebot/i],describe:t=>({name:G.Other,version:this.getBrowserVersion(Ge.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,t)||Ge.getFirstMatch(/version\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/SamsungBrowser/i],describe:t=>({name:G.Other,version:this.getBrowserVersion(Ge.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/yabrowser/i],describe:t=>({name:G.Other,version:this.getBrowserVersion(Ge.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/ucbrowser/i],describe:t=>({name:G.Other,version:this.getBrowserVersion(Ge.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/vivaldi/i],describe:t=>({name:G.Other,version:this.getBrowserVersion(Ge.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/phantom/i],describe:t=>({name:G.Other,version:this.getBrowserVersion(Ge.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/electron/i],describe:t=>({name:G.Other,version:this.getBrowserVersion(Ge.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,t))})},{test:[/chromium/i],describe:t=>({name:G.Other,version:this.getBrowserVersion(Ge.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/opera/i],describe:t=>({name:G.Opera,version:this.getBrowserVersion(Ge.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,t))})},{test:[/msie|trident/i],describe:t=>({name:G.InternetExplorer,version:this.getBrowserVersion(Ge.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,t))})},{test:[/.*/i],describe:t=>{const e=t.includes("(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:G.Other,version:this.getBrowserVersion(Ge.getSecondMatch(e,t))}}}].find(t=>t.test.some(t=>t.test(this.userAgent)));return t&&(this.parsedResult.browser=t.describe(this.userAgent)),this.parsedResult.browser||{}}parseOS(){const t=[{test:[/windows phone/i],describe:()=>({name:j.WindowsPhone})},{test:[/windows /i],describe:()=>({name:j.Windows})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:t=>({name:j.IOS,version:Ge.getSecondMatch(/(Version\/)(\d[\d.]+)/,t)})},{test:[/macintosh/i],describe:t=>({name:j.Mac,version:Ge.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,t).replace(/[_\s]/g,".")})},{test:[/(ipod|iphone|ipad)/i],describe:t=>({name:j.IOS,version:Ge.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,t).replace(/[_\s]/g,".")})},{test:[/android/i],describe:()=>({name:j.Android})},{test:[/linux/i],describe:()=>({name:j.Linux})}].find(t=>t.test.some(t=>t.test(this.userAgent)));return t&&(this.parsedResult.os=t.describe(this.userAgent)),this.parsedResult.os||{}}parsePlatform(){const t=[{test:()=>{var t,e;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===j.Android&&Number(String(null===(e=this.parsedResult.os)||void 0===e?void 0:e.version).split(".")[0])>=3},describe:t=>({type:z.Tablet})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===j.Android},describe:()=>({type:z.Phone})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===j.Mac},describe:()=>({type:z.Desktop})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===j.Windows},describe:()=>({type:z.Desktop})},{test:()=>{var t;return(null===(t=this.parsedResult.os)||void 0===t?void 0:t.name)===j.Linux},describe:()=>({type:z.Desktop})}],e=[{test:[/huserAgentwei/i],describe:t=>({type:z.Phone})},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:()=>({type:z.Tablet})},{test:[/ipad/i],describe:()=>({type:z.Tablet})},{test:[/Macintosh(.*?) FxiOS(.*?) Version\//],describe:()=>({type:z.Tablet})},{test:[/kftt build/i],describe:()=>({type:z.Tablet})},{test:[/silk/i],describe:()=>({type:z.Tablet})},{test:[/tablet(?! pc)/i],describe:()=>({type:z.Tablet})},{test:[/ipod|iphone/i],describe:()=>({type:z.Phone})},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:()=>({type:z.Phone})},{test:[/[^-]mobi/i],describe:()=>({type:z.Phone})},{test:[/blackberry/i],describe:()=>({type:z.Phone})},{test:[/bada/i],describe:()=>({type:z.Phone})},{test:[/windows phone/i],describe:()=>({type:z.Phone})},{test:[/android/i],describe:()=>({type:z.Phone})},{test:[/ios/i],describe:()=>({type:z.Desktop})},{test:[/windows/i],describe:()=>({type:z.Desktop})},{test:[/linux/i],describe:()=>({type:z.Desktop})}].find(t=>t.test.some(t=>t.test(this.userAgent)))||t.find(t=>t.test());return e&&(this.parsedResult.platform=e.describe(this.userAgent)),this.parsedResult.platform||{}}parse(){this.userAgent&&(this.parseBrowser(),this.parseOS(),this.parsePlatform())}getBrowserVersion(t){if(!t)return;const e=t.split(".");if(0===e.length)return;const i=e.length>1?`${e[0]}.${e[1]}`:e[0],a=parseFloat(i);return isNaN(a)?void 0:a}parseWebView(){var t;let e=null===(t=window.location)||void 0===t?void 0:t.href;if(e){const t=document?document.title:"";this.parsedResult.pageView=new it({urlAddress:e,title:t})}}getResult(){return this.parseWebView(),Ge.assign({},this.parsedResult)}}class qe extends Oe{constructor({siteCode:t,configuration:e,externals:i,_internals:a,stubMode:r}){var s;if(r)return super({siteCode:t,internalConfiguration:{},stubMode:r}),this.internalVisitorCodeManager={},this.externalVisitorCodeManager={},void(this.hybridQueueProcessed=!0);const n=(null==a?void 0:a.prng)||new Le,o=(null==i?void 0:i.storage)||new Pe,u=(null==i?void 0:i.requester)||new Ne,d=(null==i?void 0:i.eventSource)||new Ue,l=new pe,c=(null==i?void 0:i.visitorCodeManager)||new _e,h=(null==a?void 0:a.packageInfo)||{type:Ct.JAVASCRIPT,version:"4.24.0",isServer:!1},g=new ue(o,se.TargetingData),p=new ue(o,se.DataInfo),v=new ze({dataStorage:g,infoStorage:p,cleanupInterval:0,packageInfo:h,platformAnalyzer:null!==(s=null==a?void 0:a.platformAnalyzer)&&void 0!==s?s:new $e});super({siteCode:t,configuration:e,internalConfiguration:{externals:{externalPRNG:n,externalStorage:o,externalRequester:u,externalEventSource:d,externalVisitorCodeManager:l,externalPackageInfo:h,externalLogger:(null==i?void 0:i.logger)||new Be,customDataManager:v},settings:{useAbortController:!0}}});const f=Z.validateDomain(null==e?void 0:e.cookieDomain);this.domain=f.ok?f.data:void 0,this.internalVisitorCodeManager=l,this.externalVisitorCodeManager=c,this.customDataManager=v,this.hybridQueueProcessed=!1}initialize(){const t=Object.create(null,{initialize:{get:()=>super.initialize}});return Ae(this,void 0,void 0,function*(){if(this.stubMode)return!1;const e=t.initialize.call(this);return new Ke(this.customDataManager,this.tracker,t=>this._isConsentProvided(t),15e3),e})}getVisitorCode(t){var e;if(this.stubMode)return"";this.internalVisitorCodeManager.getData=t=>this.externalVisitorCodeManager.getData(t),this.internalVisitorCodeManager.setData=t=>{this.externalVisitorCodeManager.setData(Object.assign(Object.assign({},t),{domain:this.domain}))};const i=this.internalVisitorCodeManager.getVisitorCode(t);return this._handleKameleoonQueue(i),this.initialized&&(null===(e=this.customDataManager)||void 0===e||e.checkVisitor(i)),i}_handleKameleoonQueue(t){if(this.hybridQueueProcessed)return;const e=this._getKameleoonQueue();e&&(this.hybridQueueProcessed=!0,super._processKameleoonQueue(t,e))}_getKameleoonQueue(){if("undefined"==typeof window)return null;const t=window.kameleoonQueue;return Array.isArray(t)?t:null}setLegalConsent(t,e){this.stubMode||(super.setUserConsent({visitorCode:t,consent:e,setData:t=>{this.externalVisitorCodeManager.setData(Object.assign(Object.assign({},t),{domain:this.domain}))}}),super.flush(t))}}export{bt as ApplicationVersion,st as Browser,G as BrowserType,rt as Conversion,It as Cookie,at as CustomData,ue as DataStorage,nt as Device,z as DeviceType,U as Environment,Re as Err,s as EventType,ut as GeolocationData,qe as KameleoonClient,Oe as KameleoonCore,K as KameleoonData,C as KameleoonError,m as KameleoonException,v as KameleoonLogger,se as KameleoonStorageKey,xe as KameleoonUtils,h as LogLevel,Me as Ok,ot as OperatingSystem,j as OperatingSystemType,it as PageView,pt as Parser,_ as RequestType,Ct as SdkLanguageType,Tt as StaticData,B as TrackingStatus,Vt as UniqueIdentifier,wt as UserAgent,L as VariableType,pe as VisitorCodeManager};
2
2
  //# sourceMappingURL=javascript-sdk.es.min.js.map