@kameleoon/javascript-sdk-core 5.7.0 → 5.8.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Change Log
2
2
 
3
+ ## 5.8.0 (2025-03-18)
4
+
5
+ ### Features
6
+
7
+ - Added support for Contextual Bandit evaluations. Calling [`getRemoteVisitorData`][getRemoteVisitorData] with the `cbs=true` flag is required for this feature to function correctly. Platform-wide release expected in March 2025.
8
+
9
+ [getRemoteVisitorData]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk/#getremotevisitordata
10
+
11
+ ## 5.7.1 (2025-03-14)
12
+
13
+ ### Patch Changes
14
+
15
+ - Fixed the evaluation of the targeting condition for [**New or Returning Visitors**](https://developers.kameleoon.com/feature-management-and-experimentation/using-visit-history-in-feature-flags-and-experiments/#targeting-conditions-requiring-getremotevisitordata).
16
+ - Removed incorrect logging for the [`CustomData`](CustomData) condition when using the **has not been defined yet** operator.
17
+
18
+ [CustomData]: https://developers.kameleoon.com/feature-management-and-experimentation/web-sdks/js-sdk/#customdata
19
+
3
20
  ## 5.7.0 (2025-03-12)
4
21
 
5
22
  ### Features
@@ -0,0 +1,13 @@
1
+ import { IKameleoonData, VarGroup, CBSType, CBSDataType } from './types';
2
+ import { TrackingStatus } from '../types';
3
+ export declare class CBScores implements IKameleoonData {
4
+ status: TrackingStatus;
5
+ private readonly values;
6
+ private readonly cbs;
7
+ constructor(cbsMap: CBSType);
8
+ private extractVarIds;
9
+ getValues(): Map<number, VarGroup[]>;
10
+ get url(): string;
11
+ get data(): CBSDataType;
12
+ static _fromRaw(data: CBSDataType): CBScores;
13
+ }
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CBScores=void 0;var _types=require("./types"),_types2=require("../types");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class CBScores{constructor(a){_defineProperty(this,"status",void 0),_defineProperty(this,"values",void 0),_defineProperty(this,"cbs",void 0),this.values=new Map(Object.entries(a).map(a=>{let[b,c]=a;return[+b,this.extractVarIds(c)]})),this.cbs=a,this.status=_types2.TrackingStatus.Sent}extractVarIds(a){const b=new Map;return Object.entries(a).forEach(a=>{let[c,d]=a;b.has(d)||b.set(d,[]),b.get(d).push(+c)}),Array.from(b.entries()).sort((a,b)=>{let[c]=a,[d]=b;return d-c}).map(a=>{let[,b]=a;return{ids:b.sort((c,a)=>c-a)}})}getValues(){return this.values}get url(){return""}get data(){return{cbs:this.cbs,type:_types.KameleoonData.CBScores,status:this.status}}static _fromRaw(a){const b=new CBScores(a.cbs);return b.status=a.status,b}}exports.CBScores=CBScores;
@@ -5,6 +5,7 @@ import { VisitorDataFiltersType } from '../utilities';
5
5
  import { TrackingStatus } from '../types';
6
6
  import { ExternalPackageInfoType } from '../sdkInfoTypes';
7
7
  import { Personalization } from '../kameleoonData/personalization';
8
+ import { CBScores } from '../kameleoonData/cbScores';
8
9
  export type FieldParametersType = {
9
10
  expirationTime: number;
10
11
  key: KameleoonData;
@@ -46,7 +47,7 @@ export type DataManagerParametersType = {
46
47
  infoStorage: IStorage<DataInfoType>;
47
48
  packageInfo: ExternalPackageInfoType;
48
49
  };
49
- export type KameleoonDataItemType = IdentifierDataType | BrowserDataType | ConversionDataType | CustomDataType | DeviceDataType | PageViewDataType | UserAgentDataType | CookieDataType | GeolocationDataType | OperatingSystemDataType | ApplicationVersionDataType | KCSDataType | VisitsDataType | PersonalizationDataType;
50
+ export type KameleoonDataItemType = IdentifierDataType | BrowserDataType | ConversionDataType | CustomDataType | DeviceDataType | PageViewDataType | UserAgentDataType | CookieDataType | GeolocationDataType | OperatingSystemDataType | ApplicationVersionDataType | KCSDataType | VisitsDataType | PersonalizationDataType | CBSDataType;
50
51
  /**
51
52
  * @interface an interface of KameleoonData
52
53
  * each class instance will have url getter method
@@ -70,7 +71,7 @@ export interface IKameleoonData {
70
71
  * @type a tuple of each possible type of data for `addData` method
71
72
  * of KameleoonClient
72
73
  * */
73
- export type KameleoonDataType = UniqueIdentifier | Browser | Conversion | CustomData | Device | PageView | UserAgent | VisitsData | GeolocationData | OperatingSystem | Cookie | ApplicationVersion | KameleoonConversionScore | Personalization;
74
+ export type KameleoonDataType = UniqueIdentifier | Browser | Conversion | CustomData | Device | PageView | UserAgent | VisitsData | GeolocationData | OperatingSystem | Cookie | ApplicationVersion | KameleoonConversionScore | Personalization | CBScores;
74
75
  export type ExpirationTimeType = {
75
76
  expirationTime: number;
76
77
  };
@@ -106,6 +107,7 @@ export type KameleoonVisitorDataType<T = ExpirationTimeType> = {
106
107
  [KameleoonData.Personalization]?: {
107
108
  [id: string]: PersonalizationDataType & T;
108
109
  };
110
+ [KameleoonData.CBScores]?: CBSDataType & T;
109
111
  };
110
112
  export declare enum KameleoonData {
111
113
  UniqueIdentifier = "uniqueIdentifier",
@@ -121,7 +123,8 @@ export declare enum KameleoonData {
121
123
  ApplicationVersion = "applicationVersion",
122
124
  VisitsData = "visitsData",
123
125
  KameleoonConversionScore = "kameleoonConversionScore",
124
- Personalization = "personalization"
126
+ Personalization = "personalization",
127
+ CBScores = "cbScores"
125
128
  }
126
129
  type CommonUpdateParametersType = {
127
130
  mutData: DereferencedTargetingDataType;
@@ -199,6 +202,9 @@ export type DeviceDataType = {
199
202
  export type KCSDataType = {
200
203
  kcs: KCSType;
201
204
  } & SharedDataPropertiesType;
205
+ export type CBSDataType = {
206
+ cbs: CBSType;
207
+ } & SharedDataPropertiesType;
202
208
  export type PersonalizationDataType = {
203
209
  id: number;
204
210
  variationId: number;
@@ -301,6 +307,15 @@ export type KCSType = {
301
307
  [goalId: string]: number;
302
308
  };
303
309
  };
310
+ export type CBSType = {
311
+ [key: string]: ScoredVarIds;
312
+ };
313
+ export type ScoredVarIds = {
314
+ [variationId: string]: number;
315
+ };
316
+ export type VarGroup = {
317
+ ids: number[];
318
+ };
304
319
  export type OptionalCookieType = Omit<CookieType, 'key'> & {
305
320
  key?: string;
306
321
  };
@@ -340,6 +355,7 @@ export type SingleDataType = {
340
355
  [KameleoonData.GeolocationData]: GeolocationData | null;
341
356
  [KameleoonData.OperatingSystem]: OperatingSystem | null;
342
357
  [KameleoonData.KameleoonConversionScore]: KameleoonConversionScore | null;
358
+ [KameleoonData.CBScores]: CBScores | null;
343
359
  };
344
360
  export type MultipleDataType = {
345
361
  [KameleoonData.CustomData]: Map<number, CustomData>;
@@ -1 +1 @@
1
- "use strict";var _helpers=require("./helpers");Object.defineProperty(exports,"__esModule",{value:!0}),exports.OperatingSystemTypeMap=exports.OperatingSystemType=exports.OperatingSystemIndexMap=exports.KameleoonData=exports.DeviceType=exports.BrowserTypeMap=exports.BrowserType=exports.BrowserIndexMap=void 0;let KameleoonData=exports.KameleoonData=function(a){return a.UniqueIdentifier="uniqueIdentifier",a.CustomData="customData",a.PageView="pageView",a.GeolocationData="geolocation",a.Browser="browser",a.Conversion="conversion",a.Cookie="cookie",a.Device="device",a.OperatingSystem="operatingSystem",a.UserAgent="userAgent",a.ApplicationVersion="applicationVersion",a.VisitsData="visitsData",a.KameleoonConversionScore="kameleoonConversionScore",a.Personalization="personalization",a}({}),DeviceType=exports.DeviceType=function(a){return a.Phone="PHONE",a.Tablet="TABLET",a.Desktop="DESKTOP",a}({}),OperatingSystemType=exports.OperatingSystemType=function(a){return a.WindowsPhone="WINDOWS_PHONE",a.Windows="WINDOWS",a.Android="ANDROID",a.Linux="LINUX",a.Mac="MAC",a.IOS="IOS",a}({}),BrowserType=exports.BrowserType=function(a){return a.Chrome="CHROME",a.InternetExplorer="IE",a.Firefox="FIREFOX",a.Safari="SAFARI",a.Opera="OPERA",a.Other="OTHER",a}({});const OperatingSystemIndexMap=exports.OperatingSystemIndexMap={[OperatingSystemType.Windows]:0,[OperatingSystemType.Mac]:1,[OperatingSystemType.IOS]:2,[OperatingSystemType.Linux]:3,[OperatingSystemType.Android]:4,[OperatingSystemType.WindowsPhone]:5},OperatingSystemTypeMap=exports.OperatingSystemTypeMap=(0,_helpers.constructTypeMap)(OperatingSystemIndexMap),BrowserIndexMap=exports.BrowserIndexMap={[BrowserType.Chrome]:0,[BrowserType.InternetExplorer]:1,[BrowserType.Firefox]:2,[BrowserType.Safari]:3,[BrowserType.Opera]:4,[BrowserType.Other]:5},BrowserTypeMap=exports.BrowserTypeMap=(0,_helpers.constructTypeMap)(BrowserIndexMap);
1
+ "use strict";var _helpers=require("./helpers");Object.defineProperty(exports,"__esModule",{value:!0}),exports.OperatingSystemTypeMap=exports.OperatingSystemType=exports.OperatingSystemIndexMap=exports.KameleoonData=exports.DeviceType=exports.BrowserTypeMap=exports.BrowserType=exports.BrowserIndexMap=void 0;let KameleoonData=exports.KameleoonData=function(a){return a.UniqueIdentifier="uniqueIdentifier",a.CustomData="customData",a.PageView="pageView",a.GeolocationData="geolocation",a.Browser="browser",a.Conversion="conversion",a.Cookie="cookie",a.Device="device",a.OperatingSystem="operatingSystem",a.UserAgent="userAgent",a.ApplicationVersion="applicationVersion",a.VisitsData="visitsData",a.KameleoonConversionScore="kameleoonConversionScore",a.Personalization="personalization",a.CBScores="cbScores",a}({}),DeviceType=exports.DeviceType=function(a){return a.Phone="PHONE",a.Tablet="TABLET",a.Desktop="DESKTOP",a}({}),OperatingSystemType=exports.OperatingSystemType=function(a){return a.WindowsPhone="WINDOWS_PHONE",a.Windows="WINDOWS",a.Android="ANDROID",a.Linux="LINUX",a.Mac="MAC",a.IOS="IOS",a}({}),BrowserType=exports.BrowserType=function(a){return a.Chrome="CHROME",a.InternetExplorer="IE",a.Firefox="FIREFOX",a.Safari="SAFARI",a.Opera="OPERA",a.Other="OTHER",a}({});const OperatingSystemIndexMap=exports.OperatingSystemIndexMap={[OperatingSystemType.Windows]:0,[OperatingSystemType.Mac]:1,[OperatingSystemType.IOS]:2,[OperatingSystemType.Linux]:3,[OperatingSystemType.Android]:4,[OperatingSystemType.WindowsPhone]:5},OperatingSystemTypeMap=exports.OperatingSystemTypeMap=(0,_helpers.constructTypeMap)(OperatingSystemIndexMap),BrowserIndexMap=exports.BrowserIndexMap={[BrowserType.Chrome]:0,[BrowserType.InternetExplorer]:1,[BrowserType.Firefox]:2,[BrowserType.Safari]:3,[BrowserType.Opera]:4,[BrowserType.Other]:5},BrowserTypeMap=exports.BrowserTypeMap=(0,_helpers.constructTypeMap)(BrowserIndexMap);
@@ -1,11 +1,13 @@
1
1
  import { VisitType } from '../requester';
2
- import { VisitProcessorDataType, KCSType, VisitorProcessorParametersType } from './types';
2
+ import { VisitProcessorDataType, KCSType, VisitorProcessorParametersType, CBSType } from './types';
3
3
  import { MappingIdentifierType } from '../storage/types';
4
4
  interface IVisitProcessor {
5
5
  processVisit(visit: VisitType): void;
6
6
  processKcs(kcsData?: KCSType): void;
7
+ processCbs(cbsData?: CBSType): void;
7
8
  processMultipleDataTypes(): void;
8
9
  processMappingIdentifier(visit?: VisitType): MappingIdentifierType | undefined;
10
+ processVisitsData(visit: VisitType): void;
9
11
  }
10
12
  export declare class VisitProcessor implements IVisitProcessor {
11
13
  private visitsData;
@@ -22,6 +24,8 @@ export declare class VisitProcessor implements IVisitProcessor {
22
24
  processVisit(visit: VisitType): void;
23
25
  processMultipleDataTypes(): void;
24
26
  processKcs(kcsData?: KCSType): void;
27
+ processVisitsData(visit: VisitType): void;
28
+ processCbs(cbsData?: CBSType): void;
25
29
  private processBrowser;
26
30
  private processDevice;
27
31
  private processOperatingSystem;
@@ -30,7 +34,6 @@ export declare class VisitProcessor implements IVisitProcessor {
30
34
  private processConversion;
31
35
  private processPageView;
32
36
  private processExperiments;
33
- private processVisitsData;
34
37
  private processPersonalization;
35
38
  processMappingIdentifier(visit?: VisitType): MappingIdentifierType | undefined;
36
39
  }
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VisitProcessor=void 0;var _pageView=require("./pageView"),_types=require("./types"),_customData=require("./customData"),_conversion=require("./conversion"),_browser=require("./browser"),_device=require("./device"),_operatingSystem=require("./operatingSystem"),_geolocation=require("./geolocation"),_visitsData=require("./visitsData"),_kameleoonConversionScore=require("./kameleoonConversionScore"),_types2=require("../types"),_personalization=require("./personalization");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class VisitProcessor{constructor(a){let{filters:b,dataManager:c,visitorCode:d}=a;_defineProperty(this,"visitsData",new _visitsData.VisitsData([])),_defineProperty(this,"visitorData",[]),_defineProperty(this,"storageVisitorData",[]),_defineProperty(this,"experimentData",{}),_defineProperty(this,"filters",void 0),_defineProperty(this,"visitorDataTypes",void 0),_defineProperty(this,"dataManager",void 0),_defineProperty(this,"singleDataTypes",{[_types.KameleoonData.Device]:null,[_types.KameleoonData.Browser]:null,[_types.KameleoonData.GeolocationData]:null,[_types.KameleoonData.OperatingSystem]:null,[_types.KameleoonData.KameleoonConversionScore]:null}),_defineProperty(this,"multipleDataTypes",{[_types.KameleoonData.CustomData]:new Map,[_types.KameleoonData.PageView]:new Map,[_types.KameleoonData.Conversion]:new Map,[_types.KameleoonData.Personalization]:new Map}),this.filters=b,this.dataManager=c,this.visitorDataTypes=c.getVisitorStoredDataTypes(d)}get data(){return{visitorData:this.visitorData,storageVisitorData:this.storageVisitorData,visitsData:this.visitsData,experimentData:this.experimentData}}processVisit(a){this.processBrowser(a),this.processDevice(a),this.processOperatingSystem(a),this.processGeolocationData(a),this.processCustomData(a),this.processConversion(a),this.processPageView(a),this.processExperiments(a),this.processVisitsData(a),this.processPersonalization(a)}processMultipleDataTypes(){for(const[a,b]of Object.entries(this.multipleDataTypes))if(b.size)switch(a){case _types.KameleoonData.PageView:{this.visitorData.push(...b.values()),this.storageVisitorData.push(...b.values());break}case _types.KameleoonData.Personalization:case _types.KameleoonData.Conversion:{this.storageVisitorData.push(...b.values());break}case _types.KameleoonData.CustomData:{b.forEach(a=>{this.visitorData.push(a),this.dataManager.storedCustomDataIndexes.has(a.data.index)||this.storageVisitorData.push(a)});break}}}processKcs(a){if(this.filters.kcs&&a){const b=new _kameleoonConversionScore.KameleoonConversionScore(a);this.storageVisitorData.push(b)}}processBrowser(a){if(this.filters.browser&&!this.singleDataTypes[_types.KameleoonData.Browser]){const b=_browser.Browser._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.Browser)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.Browser]=b)}}processDevice(a){if(this.filters.device&&!this.singleDataTypes[_types.KameleoonData.Device]){const b=_device.Device._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.Device)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.Device]=b)}}processOperatingSystem(a){if(this.filters.operatingSystem&&!this.singleDataTypes[_types.KameleoonData.OperatingSystem]){const b=_operatingSystem.OperatingSystem._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.OperatingSystem)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.OperatingSystem]=b)}}processGeolocationData(a){if(this.filters.geolocation&&!this.singleDataTypes[_types.KameleoonData.GeolocationData]){const b=_geolocation.GeolocationData._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.GeolocationData)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.GeolocationData]=b)}}processCustomData(a){this.filters.customData&&_customData.CustomData._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.CustomData])}processConversion(a){if(this.filters.conversions){_conversion.Conversion._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.Conversion]);const b=_conversion.Conversion._listFromVisit(a);b.length&&this.visitorData.push(...b)}}processPageView(a){this.filters.pageViews&&_pageView.PageView._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.PageView])}processExperiments(a){if(this.filters.experiments&&a.experimentEvents)for(const b of a.experimentEvents){const{id:a,variationId:c}=b.data;this.experimentData[a]={variationId:c,isTargetedRule:!1,status:_types2.TrackingStatus.Unsent}}}processVisitsData(a){this.visitsData.timestamp=a.timeStarted}processPersonalization(a){this.filters.personalization&&_personalization.Personalization._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.Personalization])}processMappingIdentifier(a){var b,c;if(a){const d=null===(b=a.customDataEvents)||void 0===b||null===(c=b.find(a=>a.data.mappingIdentifier))||void 0===c?void 0:c.time;if(d&&a.visitorCode)return{mappingIdentifier:a.visitorCode,timestamp:d}}}}exports.VisitProcessor=VisitProcessor;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VisitProcessor=void 0;var _pageView=require("./pageView"),_types=require("./types"),_customData=require("./customData"),_conversion=require("./conversion"),_browser=require("./browser"),_device=require("./device"),_operatingSystem=require("./operatingSystem"),_geolocation=require("./geolocation"),_visitsData=require("./visitsData"),_kameleoonConversionScore=require("./kameleoonConversionScore"),_types2=require("../types"),_personalization=require("./personalization"),_cbScores=require("./cbScores");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class VisitProcessor{constructor(a){let{filters:b,dataManager:c,visitorCode:d}=a;_defineProperty(this,"visitsData",new _visitsData.VisitsData([])),_defineProperty(this,"visitorData",[]),_defineProperty(this,"storageVisitorData",[]),_defineProperty(this,"experimentData",{}),_defineProperty(this,"filters",void 0),_defineProperty(this,"visitorDataTypes",void 0),_defineProperty(this,"dataManager",void 0),_defineProperty(this,"singleDataTypes",{[_types.KameleoonData.Device]:null,[_types.KameleoonData.Browser]:null,[_types.KameleoonData.GeolocationData]:null,[_types.KameleoonData.OperatingSystem]:null,[_types.KameleoonData.KameleoonConversionScore]:null,[_types.KameleoonData.CBScores]:null}),_defineProperty(this,"multipleDataTypes",{[_types.KameleoonData.CustomData]:new Map,[_types.KameleoonData.PageView]:new Map,[_types.KameleoonData.Conversion]:new Map,[_types.KameleoonData.Personalization]:new Map}),this.filters=b,this.dataManager=c,this.visitorDataTypes=c.getVisitorStoredDataTypes(d)}get data(){return{visitorData:this.visitorData,storageVisitorData:this.storageVisitorData,visitsData:this.visitsData,experimentData:this.experimentData}}processVisit(a){this.processBrowser(a),this.processDevice(a),this.processOperatingSystem(a),this.processGeolocationData(a),this.processCustomData(a),this.processConversion(a),this.processPageView(a),this.processExperiments(a),this.processPersonalization(a)}processMultipleDataTypes(){for(const[a,b]of Object.entries(this.multipleDataTypes))if(b.size)switch(a){case _types.KameleoonData.PageView:{this.visitorData.push(...b.values()),this.storageVisitorData.push(...b.values());break}case _types.KameleoonData.Personalization:case _types.KameleoonData.Conversion:{this.storageVisitorData.push(...b.values());break}case _types.KameleoonData.CustomData:{b.forEach(a=>{this.visitorData.push(a),this.dataManager.storedCustomDataIndexes.has(a.data.index)||this.storageVisitorData.push(a)});break}}}processKcs(a){if(this.filters.kcs&&a){const b=new _kameleoonConversionScore.KameleoonConversionScore(a);this.storageVisitorData.push(b)}}processVisitsData(a){this.visitsData.timestamp=a.timeStarted}processCbs(a){if(this.filters.cbs&&a){const b=new _cbScores.CBScores(a);this.storageVisitorData.push(b)}}processBrowser(a){if(this.filters.browser&&!this.singleDataTypes[_types.KameleoonData.Browser]){const b=_browser.Browser._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.Browser)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.Browser]=b)}}processDevice(a){if(this.filters.device&&!this.singleDataTypes[_types.KameleoonData.Device]){const b=_device.Device._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.Device)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.Device]=b)}}processOperatingSystem(a){if(this.filters.operatingSystem&&!this.singleDataTypes[_types.KameleoonData.OperatingSystem]){const b=_operatingSystem.OperatingSystem._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.OperatingSystem)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.OperatingSystem]=b)}}processGeolocationData(a){if(this.filters.geolocation&&!this.singleDataTypes[_types.KameleoonData.GeolocationData]){const b=_geolocation.GeolocationData._fromVisit(a);b&&(!this.visitorDataTypes.has(_types.KameleoonData.GeolocationData)&&this.storageVisitorData.push(b),this.visitorData.push(b),this.singleDataTypes[_types.KameleoonData.GeolocationData]=b)}}processCustomData(a){this.filters.customData&&_customData.CustomData._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.CustomData])}processConversion(a){if(this.filters.conversions){_conversion.Conversion._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.Conversion]);const b=_conversion.Conversion._listFromVisit(a);b.length&&this.visitorData.push(...b)}}processPageView(a){this.filters.pageViews&&_pageView.PageView._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.PageView])}processExperiments(a){if(this.filters.experiments&&a.experimentEvents)for(const b of a.experimentEvents){const{id:a,variationId:c}=b.data;this.experimentData[a]={variationId:c,isTargetedRule:!1,status:_types2.TrackingStatus.Unsent}}}processPersonalization(a){this.filters.personalization&&_personalization.Personalization._updateFromVisit(a,this.multipleDataTypes[_types.KameleoonData.Personalization])}processMappingIdentifier(a){var b,c;if(a){const d=null===(b=a.customDataEvents)||void 0===b||null===(c=b.find(a=>a.data.mappingIdentifier))||void 0===c?void 0:c.time;if(d&&a.visitorCode)return{mappingIdentifier:a.visitorCode,timestamp:d}}}}exports.VisitProcessor=VisitProcessor;
@@ -1 +1 @@
1
- "use strict";var _types=require("./types");Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlTracking=exports.UrlQuery=exports.UrlParameter=exports.UrlFirstParameter=exports.UrlEventType=exports.NUMBER_OF_RETRIES=exports.Header=exports.DEFAULT_DOMAINS=void 0;const NUMBER_OF_RETRIES=exports.NUMBER_OF_RETRIES=2;let Header=exports.Header=function(a){return a.UserAgent="User-Agent",a.ContentType="Content-Type",a.SdkVersion="X-Kameleoon-SDK-Version",a.SdkType="X-Kameleoon-SDK-Type",a.Authorization="Authorization",a.AcceptEncoding="Accept-Encoding",a}({});const UrlEventType=exports.UrlEventType={CustomData:"eventType=customData",StaticData:"eventType=staticData",Page:"eventType=page",Conversion:"eventType=conversion",Activity:"eventType=activity",Experiment:"eventType=experiment",Geolocation:"eventType=geolocation"},UrlParameter=exports.UrlParameter={Title:"&title=",ReferrersIndices:"&referrersIndices=",Negative:"&negative=",Revenue:"&revenue=",Overwrite:"&overwrite=",Index:"&index=",BrowserIndex:"&browserIndex=",BrowserVersion:"&browserVersion=",Href:"&href=",DeviceType:"&deviceType=",SiteCode:"&siteCode=",GoalId:"&goalId=",VisitorCode:"&visitorCode=",VariationId:"&variationId=",Ts:"&ts=",Key:"&key=",SdkName:"&sdkName=",SdkVersion:"&sdkVersion=",ValuesCountMap:"&valuesCountMap=",Nonce:"&nonce=",Id:"&id=",CustomData:"&customData=",CurrentVisit:"&currentVisit=",MaxNumberPreviousVisits:"&maxNumberPreviousVisits=",Os:"&os=",OsIndex:"&osIndex=",Country:"&country=",City:"&city=",Region:"&region=",Latitude:"&latitude=",Longitude:"&longitude=",PostalCode:"&postalCode=",Conversion:"&conversion=",StaticData:"&staticData=",Geolocation:"&geolocation=",Page:"&page=",Experiment:"&experiment=",Browser:"&browser=",Environment:"&environment=",MappingIdentifier:"&mappingIdentifier=",MappingValue:"&mappingValue=",Kcs:"&kcs=",Personalization:"&personalization=",UserAgent:"&userAgent=",BodyUa:"&bodyUa="},UrlFirstParameter=exports.UrlFirstParameter={CustomData:"?customData=",StaticData:"?staticData=",Page:"?page=",Conversion:"?conversion=",Geolocation:"?geolocation=",Experiment:"?experiment=",ValuesCountMap:"?valuesCountMap=",Id:"?id=",Nonce:"?nonce=",Country:"?country=",Environment:"?environment=",City:"?city=",Region:"?region=",Latitude:"?latitude=",Longitude:"?longitude=",PostalCode:"?postalCode=",SdkName:"?sdkName=",SdkVersion:"?sdkVersion=",BrowserIndex:"?browserIndex=",BrowserVersion:"?browserVersion=",SiteCode:"?siteCode=",VisitorCode:"?visitorCode=",CurrentVisit:"?currentVisit=",MaxNumberPreviousVisits:"?maxNumberPreviousVisits=",Negative:"?negative=",Revenue:"?revenue=",Title:"?title=",Os:"?os=",OsIndex:"?osIndex=",Browser:"?browser=",ReferrersIndices:"?referrersIndices=",Overwrite:"?overwrite=",Index:"?index=",Href:"?href=",VariationId:"?variationId=",DeviceType:"?deviceType=",GoalId:"?goalId=",Ts:"?ts=",Key:"?key=",MappingIdentifier:"?mappingIdentifier=",MappingValue:"?mappingValue=",Kcs:"?kcs=",Personalization:"?personalization=",UserAgent:"?userAgent=",BodyUa:"?bodyUa="},UrlQuery=exports.UrlQuery={Sse:"sse?siteCode=",Map:"map?siteCode=",Events:"events?siteCode=",Visitor:"visitor?siteCode="},UrlTracking=exports.UrlTracking={Visit:"visit/",Map:"map/"},DEFAULT_DOMAINS=exports.DEFAULT_DOMAINS={[_types.UrlType.DataApi]:"data.kameleoon.io",[_types.UrlType.Events]:"events.kameleoon.eu",[_types.UrlType.ClientConfiguration]:"sdk-config.kameleoon.eu"};
1
+ "use strict";var _types=require("./types");Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlTracking=exports.UrlQuery=exports.UrlParameter=exports.UrlFirstParameter=exports.UrlEventType=exports.NUMBER_OF_RETRIES=exports.Header=exports.DEFAULT_DOMAINS=void 0;const NUMBER_OF_RETRIES=exports.NUMBER_OF_RETRIES=2;let Header=exports.Header=function(a){return a.UserAgent="User-Agent",a.ContentType="Content-Type",a.SdkVersion="X-Kameleoon-SDK-Version",a.SdkType="X-Kameleoon-SDK-Type",a.Authorization="Authorization",a.AcceptEncoding="Accept-Encoding",a}({});const UrlEventType=exports.UrlEventType={CustomData:"eventType=customData",StaticData:"eventType=staticData",Page:"eventType=page",Conversion:"eventType=conversion",Activity:"eventType=activity",Experiment:"eventType=experiment",Geolocation:"eventType=geolocation"},UrlParameter=exports.UrlParameter={Title:"&title=",ReferrersIndices:"&referrersIndices=",Negative:"&negative=",Revenue:"&revenue=",Overwrite:"&overwrite=",Index:"&index=",BrowserIndex:"&browserIndex=",BrowserVersion:"&browserVersion=",Href:"&href=",DeviceType:"&deviceType=",SiteCode:"&siteCode=",GoalId:"&goalId=",VisitorCode:"&visitorCode=",VariationId:"&variationId=",Ts:"&ts=",Key:"&key=",SdkName:"&sdkName=",SdkVersion:"&sdkVersion=",ValuesCountMap:"&valuesCountMap=",Nonce:"&nonce=",Id:"&id=",CustomData:"&customData=",CurrentVisit:"&currentVisit=",MaxNumberPreviousVisits:"&maxNumberPreviousVisits=",Os:"&os=",OsIndex:"&osIndex=",Country:"&country=",City:"&city=",Region:"&region=",Latitude:"&latitude=",Longitude:"&longitude=",PostalCode:"&postalCode=",Conversion:"&conversion=",StaticData:"&staticData=",Geolocation:"&geolocation=",Page:"&page=",Experiment:"&experiment=",Browser:"&browser=",Environment:"&environment=",MappingIdentifier:"&mappingIdentifier=",MappingValue:"&mappingValue=",Kcs:"&kcs=",Personalization:"&personalization=",UserAgent:"&userAgent=",BodyUa:"&bodyUa=",Cbs:"&cbs="},UrlFirstParameter=exports.UrlFirstParameter={CustomData:"?customData=",StaticData:"?staticData=",Page:"?page=",Conversion:"?conversion=",Geolocation:"?geolocation=",Experiment:"?experiment=",ValuesCountMap:"?valuesCountMap=",Id:"?id=",Nonce:"?nonce=",Country:"?country=",Environment:"?environment=",City:"?city=",Region:"?region=",Latitude:"?latitude=",Longitude:"?longitude=",PostalCode:"?postalCode=",SdkName:"?sdkName=",SdkVersion:"?sdkVersion=",BrowserIndex:"?browserIndex=",BrowserVersion:"?browserVersion=",SiteCode:"?siteCode=",VisitorCode:"?visitorCode=",CurrentVisit:"?currentVisit=",MaxNumberPreviousVisits:"?maxNumberPreviousVisits=",Negative:"?negative=",Revenue:"?revenue=",Title:"?title=",Os:"?os=",OsIndex:"?osIndex=",Browser:"?browser=",ReferrersIndices:"?referrersIndices=",Overwrite:"?overwrite=",Index:"?index=",Href:"?href=",VariationId:"?variationId=",DeviceType:"?deviceType=",GoalId:"?goalId=",Ts:"?ts=",Key:"?key=",MappingIdentifier:"?mappingIdentifier=",MappingValue:"?mappingValue=",Kcs:"?kcs=",Personalization:"?personalization=",UserAgent:"?userAgent=",BodyUa:"?bodyUa=",Cbs:"?cbs="},UrlQuery=exports.UrlQuery={Sse:"sse?siteCode=",Map:"map?siteCode=",Events:"events?siteCode=",Visitor:"visitor?siteCode="},UrlTracking=exports.UrlTracking={Visit:"visit/",Map:"map/"},DEFAULT_DOMAINS=exports.DEFAULT_DOMAINS={[_types.UrlType.DataApi]:"data.kameleoon.io",[_types.UrlType.Events]:"events.kameleoon.eu",[_types.UrlType.ClientConfiguration]:"sdk-config.kameleoon.eu"};
@@ -1,11 +1,11 @@
1
1
  import { JSONType } from '../clientConfiguration';
2
2
  import { ExternalPackageInfoType } from '../sdkInfoTypes';
3
3
  import { BrowserIndexMap, BrowserType, OperatingSystemType } from '../kameleoonData';
4
- import { DeviceType, KCSType, OperatingSystemIndexMap } from '../kameleoonData/types';
4
+ import { CBSType, DeviceType, KCSType, OperatingSystemIndexMap } from '../kameleoonData/types';
5
5
  import { Header } from './constants';
6
6
  import { VisitorDataFiltersType } from '../utilities';
7
7
  import { IUrlProvider } from './urlProvider';
8
- import { LogLevel } from "../logging";
8
+ import { LogLevel } from '../logging';
9
9
  export declare enum UrlType {
10
10
  DataApi = "dataApi",
11
11
  Events = "events",
@@ -138,6 +138,7 @@ export type GetVisitorDataResultType = {
138
138
  previousVisits?: VisitType[];
139
139
  currentVisit?: VisitType;
140
140
  kcs?: KCSType;
141
+ cbs?: CBSType;
141
142
  };
142
143
  export declare enum HttpMethod {
143
144
  Get = "GET",
@@ -149,7 +150,7 @@ export declare enum DataApiQuery {
149
150
  DataMap = 2
150
151
  }
151
152
  declare const EVENT_TYPE_KEYS: readonly ["customData", "staticData", "page", "conversion", "geolocation", "activity", "experiment"];
152
- declare const PARAMETER_KEYS: readonly ["valuesCountMap", "mappingValue", "id", "nonce", "country", "environment", "city", "region", "latitude", "geolocation", "longitude", "mappingIdentifier", "postalCode", "sdkName", "sdkVersion", "kcs", "personalization", "browserIndex", "browserVersion", "siteCode", "visitorCode", "currentVisit", "maxNumberPreviousVisits", "customData", "negative", "revenue", "title", "os", "conversion", "staticData", "osIndex", "browser", "referrersIndices", "overwrite", "index", "href", "experiment", "page", "variationId", "deviceType", "goalId", "ts", "key", "userAgent", "bodyUa"];
153
+ declare const PARAMETER_KEYS: readonly ["valuesCountMap", "mappingValue", "id", "nonce", "country", "environment", "city", "region", "latitude", "geolocation", "longitude", "mappingIdentifier", "postalCode", "sdkName", "sdkVersion", "kcs", "cbs", "personalization", "browserIndex", "browserVersion", "siteCode", "visitorCode", "currentVisit", "maxNumberPreviousVisits", "customData", "negative", "revenue", "title", "os", "conversion", "staticData", "osIndex", "browser", "referrersIndices", "overwrite", "index", "href", "experiment", "page", "variationId", "deviceType", "goalId", "ts", "key", "userAgent", "bodyUa"];
153
154
  declare const TRACKING_KEYS: readonly ["visit", "map"];
154
155
  declare const QUERY_KEYS: readonly ["sse", "visitor", "map", "events"];
155
156
  export type TrackingType = Record<Capitalize<(typeof TRACKING_KEYS)[number]>, string>;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlType=exports.RequestType=exports.HttpMethod=exports.DataApiQuery=void 0;let UrlType=exports.UrlType=function(a){return a.DataApi="dataApi",a.Events="events",a.ClientConfiguration="clientConfiguration",a}({}),HttpMethod=exports.HttpMethod=function(a){return a.Get="GET",a.Post="POST",a}({}),DataApiQuery=exports.DataApiQuery=function(a){return a[a.VisitEvent=0]="VisitEvent",a[a.VisitData=1]="VisitData",a[a.DataMap=2]="DataMap",a}({});const EVENT_TYPE_KEYS=["customData","staticData","page","conversion","geolocation","activity","experiment"],PARAMETER_KEYS=["valuesCountMap","mappingValue","id","nonce","country","environment","city","region","latitude","geolocation","longitude","mappingIdentifier","postalCode","sdkName","sdkVersion","kcs","personalization","browserIndex","browserVersion","siteCode","visitorCode","currentVisit","maxNumberPreviousVisits","customData","negative","revenue","title","os","conversion","staticData","osIndex","browser","referrersIndices","overwrite","index","href","experiment","page","variationId","deviceType","goalId","ts","key","userAgent","bodyUa"],TRACKING_KEYS=["visit","map"],QUERY_KEYS=["sse","visitor","map","events"];let RequestType=exports.RequestType=function(a){return a.Configuration="configuration",a.Tracking="tracking",a.RemoteData="remoteData",a}({});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlType=exports.RequestType=exports.HttpMethod=exports.DataApiQuery=void 0;let UrlType=exports.UrlType=function(a){return a.DataApi="dataApi",a.Events="events",a.ClientConfiguration="clientConfiguration",a}({}),HttpMethod=exports.HttpMethod=function(a){return a.Get="GET",a.Post="POST",a}({}),DataApiQuery=exports.DataApiQuery=function(a){return a[a.VisitEvent=0]="VisitEvent",a[a.VisitData=1]="VisitData",a[a.DataMap=2]="DataMap",a}({});const EVENT_TYPE_KEYS=["customData","staticData","page","conversion","geolocation","activity","experiment"],PARAMETER_KEYS=["valuesCountMap","mappingValue","id","nonce","country","environment","city","region","latitude","geolocation","longitude","mappingIdentifier","postalCode","sdkName","sdkVersion","kcs","cbs","personalization","browserIndex","browserVersion","siteCode","visitorCode","currentVisit","maxNumberPreviousVisits","customData","negative","revenue","title","os","conversion","staticData","osIndex","browser","referrersIndices","overwrite","index","href","experiment","page","variationId","deviceType","goalId","ts","key","userAgent","bodyUa"],TRACKING_KEYS=["visit","map"],QUERY_KEYS=["sse","visitor","map","events"];let RequestType=exports.RequestType=function(a){return a.Configuration="configuration",a.Tracking="tracking",a.RemoteData="remoteData",a}({});
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlProvider=void 0;var _sdkInfoTypes=require("../sdkInfoTypes"),_constants=require("./constants"),_types=require("./types");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class UrlProvider{constructor(){_defineProperty(this,"ready",!1),_defineProperty(this,"isCustomDomain",!1),_defineProperty(this,"domains",_constants.DEFAULT_DOMAINS),_defineProperty(this,"siteCode",void 0),_defineProperty(this,"environment",void 0),_defineProperty(this,"packageInfo",void 0)}initialize(a){let{domain:b,siteCode:c,packageInfo:d,environment:e}=a;this.siteCode=c,this.environment=e,this.packageInfo=d,this.ready=!0,this.setDomains(b)}set dataApiDomain(a){if(!this.isCustomDomain)return void(this.domains[_types.UrlType.DataApi]=a);const b=a.split(".")[0],c=this.domains[_types.UrlType.DataApi];this.domains[_types.UrlType.DataApi]=c.replace(/^[^.]+/,b)}getClientConfigurationUrl(a){this.isInitialized();const b=`https://${this.domains[_types.UrlType.ClientConfiguration]}/`,c=this.environment===_sdkInfoTypes.Environment.Production?"":_constants.UrlFirstParameter.Environment+encodeURIComponent(this.environment);let d="";return a&&(c?d=_constants.UrlParameter.Ts+a:d=_constants.UrlFirstParameter.Ts+a),b+this.siteCode+c+d}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains[_types.UrlType.Events]}:8110/${_constants.UrlQuery.Sse}${this.siteCode}`}getRemoteDataUrl(a){return this.isInitialized(),this.getDataApiUrl(_types.DataApiQuery.DataMap)+this.siteCode+_constants.UrlParameter.Key+encodeURI(a)}getVisitorDataUrl(a){let{visitorCode:b,filters:c,isMappingIdentifier:d}=a;this.isInitialized();const{customData:e,previousVisitAmount:f,currentVisit:g,conversions:h,geolocation:i,experiments:j,pageViews:k,device:l,browser:m,operatingSystem:n,kcs:o,personalization:p,visitorCode:q}=c,r=d?_constants.UrlParameter.MappingValue:_constants.UrlParameter.VisitorCode,s=e||q?_constants.UrlParameter.CustomData+!0:"",t=h?_constants.UrlParameter.Conversion+!0:"",u=i?_constants.UrlParameter.Geolocation+!0:"",v=j?_constants.UrlParameter.Experiment+!0:"",w=k?_constants.UrlParameter.Page+!0:"",x=!!(l||m||n)?_constants.UrlParameter.StaticData+!0:"",y=g?_constants.UrlParameter.CurrentVisit+!0:"",z=o?_constants.UrlParameter.Kcs+!0:"",A=p?_constants.UrlParameter.Personalization+!0:"",B="number"==typeof f?_constants.UrlParameter.MaxNumberPreviousVisits+f:_constants.UrlParameter.MaxNumberPreviousVisits+1;return this.getDataApiUrl(_types.DataApiQuery.VisitData)+this.siteCode+r+b+B+s+t+u+v+w+x+y+z+A}getTrackingUrl(a){this.isInitialized();const{type:b,version:c}=this.packageInfo;let d=this.getDataApiUrl(_types.DataApiQuery.VisitEvent)+this.siteCode+_constants.UrlParameter.SdkName+b.toLowerCase()+_constants.UrlParameter.SdkVersion+c;return a&&(d+=_constants.UrlParameter.BodyUa+!0),d}isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}getDataApiUrl(a){if(!this.domains[_types.UrlType.DataApi])throw new Error("Data API domain is not set");const b=`https://${this.domains[_types.UrlType.DataApi]}`;return a===_types.DataApiQuery.VisitEvent?`${b}/${_constants.UrlTracking.Visit+_constants.UrlQuery.Events}`:a===_types.DataApiQuery.VisitData?`${b}/${_constants.UrlTracking.Visit+_constants.UrlQuery.Visitor}`:a===_types.DataApiQuery.DataMap?`${b}/${_constants.UrlTracking.Map+_constants.UrlQuery.Map}`:void 0}setDomains(a){a&&(this.isCustomDomain=!0,this.domains[_types.UrlType.DataApi]="data."+a,this.domains[_types.UrlType.Events]="events."+a,this.domains[_types.UrlType.ClientConfiguration]="sdk-config."+a)}}exports.UrlProvider=UrlProvider;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.UrlProvider=void 0;var _sdkInfoTypes=require("../sdkInfoTypes"),_constants=require("./constants"),_types=require("./types");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class UrlProvider{constructor(){_defineProperty(this,"ready",!1),_defineProperty(this,"isCustomDomain",!1),_defineProperty(this,"domains",_constants.DEFAULT_DOMAINS),_defineProperty(this,"siteCode",void 0),_defineProperty(this,"environment",void 0),_defineProperty(this,"packageInfo",void 0)}initialize(a){let{domain:b,siteCode:c,packageInfo:d,environment:e}=a;this.siteCode=c,this.environment=e,this.packageInfo=d,this.ready=!0,this.setDomains(b)}set dataApiDomain(a){if(!this.isCustomDomain)return void(this.domains[_types.UrlType.DataApi]=a);const b=a.split(".")[0],c=this.domains[_types.UrlType.DataApi];this.domains[_types.UrlType.DataApi]=c.replace(/^[^.]+/,b)}getClientConfigurationUrl(a){this.isInitialized();const b=`https://${this.domains[_types.UrlType.ClientConfiguration]}/`,c=this.environment===_sdkInfoTypes.Environment.Production?"":_constants.UrlFirstParameter.Environment+encodeURIComponent(this.environment);let d="";return a&&(c?d=_constants.UrlParameter.Ts+a:d=_constants.UrlFirstParameter.Ts+a),b+this.siteCode+c+d}getEventSourceUrl(){return this.isInitialized(),`https://${this.domains[_types.UrlType.Events]}:8110/${_constants.UrlQuery.Sse}${this.siteCode}`}getRemoteDataUrl(a){return this.isInitialized(),this.getDataApiUrl(_types.DataApiQuery.DataMap)+this.siteCode+_constants.UrlParameter.Key+encodeURI(a)}getVisitorDataUrl(a){let{visitorCode:b,filters:c,isMappingIdentifier:d}=a;this.isInitialized();const{customData:e,previousVisitAmount:f,currentVisit:g,conversions:h,geolocation:i,experiments:j,pageViews:k,device:l,browser:m,operatingSystem:n,kcs:o,personalization:p,visitorCode:q,cbs:r}=c,s=d?_constants.UrlParameter.MappingValue:_constants.UrlParameter.VisitorCode,t=e||q?_constants.UrlParameter.CustomData+!0:"",u=h?_constants.UrlParameter.Conversion+!0:"",v=i?_constants.UrlParameter.Geolocation+!0:"",w=j?_constants.UrlParameter.Experiment+!0:"",x=k?_constants.UrlParameter.Page+!0:"",y=!!(l||m||n)?_constants.UrlParameter.StaticData+!0:"",z=g?_constants.UrlParameter.CurrentVisit+!0:"",A=o?_constants.UrlParameter.Kcs+!0:"",B=p?_constants.UrlParameter.Personalization+!0:"",C="number"==typeof f?_constants.UrlParameter.MaxNumberPreviousVisits+f:_constants.UrlParameter.MaxNumberPreviousVisits+1,D=r?_constants.UrlParameter.Cbs+!0:"";return this.getDataApiUrl(_types.DataApiQuery.VisitData)+this.siteCode+s+b+C+t+u+v+w+x+y+z+A+B+D}getTrackingUrl(a){this.isInitialized();const{type:b,version:c}=this.packageInfo;let d=this.getDataApiUrl(_types.DataApiQuery.VisitEvent)+this.siteCode+_constants.UrlParameter.SdkName+b.toLowerCase()+_constants.UrlParameter.SdkVersion+c;return a&&(d+=_constants.UrlParameter.BodyUa+!0),d}isInitialized(){if(!this.ready)throw new Error("UrlProvider is not initialized")}getDataApiUrl(a){if(!this.domains[_types.UrlType.DataApi])throw new Error("Data API domain is not set");const b=`https://${this.domains[_types.UrlType.DataApi]}`;return a===_types.DataApiQuery.VisitEvent?`${b}/${_constants.UrlTracking.Visit+_constants.UrlQuery.Events}`:a===_types.DataApiQuery.VisitData?`${b}/${_constants.UrlTracking.Visit+_constants.UrlQuery.Visitor}`:a===_types.DataApiQuery.DataMap?`${b}/${_constants.UrlTracking.Map+_constants.UrlQuery.Map}`:void 0}setDomains(a){a&&(this.isCustomDomain=!0,this.domains[_types.UrlType.DataApi]="data."+a,this.domains[_types.UrlType.Events]="events."+a,this.domains[_types.UrlType.ClientConfiguration]="sdk-config."+a)}}exports.UrlProvider=UrlProvider;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CustomData=void 0;var _tsRes=require("ts-res"),_types=require("../../kameleoonData/types"),_kameleoonError=require("../../kameleoonError"),_types2=require("../types"),_utilities=require("../../utilities"),_kameleoonLogger=require("../../logging/kameleoonLogger");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class CustomData{constructor(a){let{customDataIndex:b,valueMatchType:c,value:d,range:e}=a;_defineProperty(this,"customDataIndex",void 0),_defineProperty(this,"matchType",void 0),_defineProperty(this,"conditionValue",void 0),_defineProperty(this,"error",void 0),_defineProperty(this,"range",void 0),this.customDataIndex=b?+b:null,this.matchType=c,this.conditionValue=d,this.range=e}evaluate(a){let{targetingData:b}=a;if("number"==typeof this.customDataIndex){var c;const a=null===b||void 0===b||null===(c=b[_types.KameleoonData.CustomData])||void 0===c?void 0:c[this.customDataIndex];if(a){const{value:b}=a,c=this.checkCondition(b);return this.error?(0,_tsRes.Err)(this.error):(0,_tsRes.Ok)(c)}}return(0,_tsRes.Ok)(this.matchType===_types2.ValueMatchType.UNDEFINED)}checkCondition(a){if("string"!=typeof this.conditionValue&&this.matchType!==_types2.ValueMatchType.TRUE&&this.matchType!==_types2.ValueMatchType.FALSE&&this.matchType!==_types2.ValueMatchType.RANGE)return _kameleoonLogger.KameleoonLogger.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`,!1;const b=this.conditionValue;if(this.matchType===_types2.ValueMatchType.AMONG_VALUES){const c=this.parseArray(b);if(!c.ok)return this.error=c.error,!1;const d=new Set(c.data);return Array.isArray(a)?a.some(a=>d.has(a)):c.data.includes(a)}if(this.matchType===_types2.ValueMatchType.RANGE){const b=this.parseRange(this.range);if(!b.ok)return this.error=b.error,!1;const[c,d]=b.data,e=a=>a>=c&&a<=d;return Array.isArray(a)?a.some(a=>e(+a)):e(+a)}if(Array.isArray(a))return a.some(a=>this.checkCondition(a));switch(this.matchType){case _types2.ValueMatchType.CONTAINS:return a.includes(b);case _types2.ValueMatchType.EXACT:return a===this.conditionValue;case _types2.ValueMatchType.REGULAR_EXPRESSION:return _utilities.Parser.parseRegExp(b).test(a);case _types2.ValueMatchType.LOWER:return+a<+this.conditionValue;case _types2.ValueMatchType.EQUAL:return+a===+this.conditionValue;case _types2.ValueMatchType.GREATER:return+a>+this.conditionValue;case _types2.ValueMatchType.TRUE:return"true"===a.toLowerCase();case _types2.ValueMatchType.FALSE:return"false"===a.toLowerCase();default:return _kameleoonLogger.KameleoonLogger.error`Unexpected comparing operation for CustomData condition: ${this.matchType}`,!1}}parseArray(a){try{const b=JSON.parse(a);if(Array.isArray(b))return(0,_tsRes.Ok)(b)}catch(b){return _kameleoonLogger.KameleoonLogger.error`Failed to parse array: ${a} in CustomData condition`,(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.AmongValuesCheck,b,a))}return(0,_tsRes.Ok)([])}parseRange(a){return a&&2===a.length?(0,_tsRes.Ok)(a):(_kameleoonLogger.KameleoonLogger.error`Failed to parse range: ${a} in CustomData condition`,(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RangeCheck,a)))}}exports.CustomData=CustomData;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CustomData=void 0;var _tsRes=require("ts-res"),_types=require("../../kameleoonData/types"),_kameleoonError=require("../../kameleoonError"),_types2=require("../types"),_utilities=require("../../utilities"),_kameleoonLogger=require("../../logging/kameleoonLogger");function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class CustomData{constructor(a){let{customDataIndex:b,valueMatchType:c,value:d,range:e}=a;_defineProperty(this,"customDataIndex",void 0),_defineProperty(this,"matchType",void 0),_defineProperty(this,"conditionValue",void 0),_defineProperty(this,"error",void 0),_defineProperty(this,"range",void 0),this.customDataIndex=b?+b:-1,this.matchType=c,this.conditionValue=d,this.range=e}evaluate(a){var b;let{targetingData:c}=a;const d=null===c||void 0===c||null===(b=c[_types.KameleoonData.CustomData])||void 0===b?void 0:b[this.customDataIndex];if(this.matchType===_types2.ValueMatchType.UNDEFINED)return(0,_tsRes.Ok)(!d);if(d){const{value:a}=d,b=this.checkCondition(a);return this.error?(0,_tsRes.Err)(this.error):(0,_tsRes.Ok)(b)}return(0,_tsRes.Ok)(!1)}checkCondition(a){if("string"!=typeof this.conditionValue&&this.matchType!==_types2.ValueMatchType.TRUE&&this.matchType!==_types2.ValueMatchType.FALSE&&this.matchType!==_types2.ValueMatchType.RANGE)return _kameleoonLogger.KameleoonLogger.error`Unexpected condition value for CustomData condition: ${this.conditionValue}`,!1;const b=this.conditionValue;if(this.matchType===_types2.ValueMatchType.AMONG_VALUES){const c=this.parseArray(b);if(!c.ok)return this.error=c.error,!1;const d=new Set(c.data);return Array.isArray(a)?a.some(a=>d.has(a)):c.data.includes(a)}if(this.matchType===_types2.ValueMatchType.RANGE){const b=this.parseRange(this.range);if(!b.ok)return this.error=b.error,!1;const[c,d]=b.data,e=a=>a>=c&&a<=d;return Array.isArray(a)?a.some(a=>e(+a)):e(+a)}if(Array.isArray(a))return a.some(a=>this.checkCondition(a));switch(this.matchType){case _types2.ValueMatchType.CONTAINS:return a.includes(b);case _types2.ValueMatchType.EXACT:return a===this.conditionValue;case _types2.ValueMatchType.REGULAR_EXPRESSION:return _utilities.Parser.parseRegExp(b).test(a);case _types2.ValueMatchType.LOWER:return+a<+this.conditionValue;case _types2.ValueMatchType.EQUAL:return+a===+this.conditionValue;case _types2.ValueMatchType.GREATER:return+a>+this.conditionValue;case _types2.ValueMatchType.TRUE:return"true"===a.toLowerCase();case _types2.ValueMatchType.FALSE:return"false"===a.toLowerCase();default:return _kameleoonLogger.KameleoonLogger.error`Unexpected comparing operation for CustomData condition: ${this.matchType}`,!1}}parseArray(a){try{const b=JSON.parse(a);if(Array.isArray(b))return(0,_tsRes.Ok)(b)}catch(b){return _kameleoonLogger.KameleoonLogger.error`Failed to parse array: ${a} in CustomData condition`,(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.AmongValuesCheck,b,a))}return(0,_tsRes.Ok)([])}parseRange(a){return a&&2===a.length?(0,_tsRes.Ok)(a):(_kameleoonLogger.KameleoonLogger.error`Failed to parse range: ${a} in CustomData condition`,(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RangeCheck,a)))}}exports.CustomData=CustomData;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Parser=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_types=require("../types"),_visitProcessor=require("../kameleoonData/visitProcessor"),_constants=require("./constants");class Parser{static parseFeatureVariable(a){const{key:b,type:c,value:d}=a;switch(c){case _types.VariableType.BOOLEAN:return(0,_tsRes.Ok)({key:b,type:c,value:!!d});case _types.VariableType.JS:case _types.VariableType.CSS:case _types.VariableType.STRING:return(0,_tsRes.Ok)({key:b,type:c,value:d+""});case _types.VariableType.NUMBER:const e=+d;return Number.isNaN(e)?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NumberParse,d+"")):(0,_tsRes.Ok)({key:b,type:c,value:e});case _types.VariableType.JSON:try{const d=JSON.parse(a.value+"");return(0,_tsRes.Ok)({key:b,type:c,value:d})}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.JSONParse,a))}default:(0,_kameleoonError.exhaustCheck)(c)}}static parseVisitorData(a){let{data:b,filters:c,visitorCode:d,dataManager:e,variationConfiguration:f}=a;const g=new _visitProcessor.VisitProcessor({filters:c,dataManager:e,visitorCode:d}),{currentVisit:h,previousVisits:i,kcs:j}=b;let k=[];if(h&&k.push(h),i&&k.push(...i),!k.length)return{visitorData:[],storageVisitorData:[]};k.forEach(a=>{g.processVisit(a)}),g.processKcs(j),g.processMultipleDataTypes();const l=g.processMappingIdentifier(null!==h&&void 0!==h?h:null===i||void 0===i?void 0:i[0]),{visitorData:m,storageVisitorData:n,visitsData:o,experimentData:p}=g.data;return f.updateStoredVariations(d,p),{visitorData:m,storageVisitorData:n,visitsData:o,mappingIdentifier:l}}static parseRegExp(a){if("/"===a[0]){const[_,b,c]=a.split("/");return new RegExp(b,c)}return new RegExp(a)}static parseSecret(a){if(null===a)return"null";const b=a.length;if(b<=_constants.SECRET_VISIBLE_LENGTH)return _constants.HIDDEN_SECRET_CHAR.repeat(b);const c=Math.max(b-_constants.SECRET_VISIBLE_LENGTH,_constants.SECRET_VISIBLE_LENGTH);return a.substring(0,b-c)+_constants.HIDDEN_SECRET_CHAR.repeat(c)}}exports.Parser=Parser;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Parser=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_types=require("../types"),_visitProcessor=require("../kameleoonData/visitProcessor"),_constants=require("./constants"),_visitsData=require("../kameleoonData/visitsData");class Parser{static parseFeatureVariable(a){const{key:b,type:c,value:d}=a;switch(c){case _types.VariableType.BOOLEAN:return(0,_tsRes.Ok)({key:b,type:c,value:!!d});case _types.VariableType.JS:case _types.VariableType.CSS:case _types.VariableType.STRING:return(0,_tsRes.Ok)({key:b,type:c,value:d+""});case _types.VariableType.NUMBER:const e=+d;return Number.isNaN(e)?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NumberParse,d+"")):(0,_tsRes.Ok)({key:b,type:c,value:e});case _types.VariableType.JSON:try{const d=JSON.parse(a.value+"");return(0,_tsRes.Ok)({key:b,type:c,value:d})}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.JSONParse,a))}default:(0,_kameleoonError.exhaustCheck)(c)}}static parseVisitorData(a){let{data:b,filters:c,visitorCode:d,dataManager:e,variationConfiguration:f}=a;const g=new _visitProcessor.VisitProcessor({filters:c,dataManager:e,visitorCode:d}),{currentVisit:h,previousVisits:i,kcs:j,cbs:k}=b;if(!(null!==i&&void 0!==i&&i.length)&&!h)return{visitorData:[],storageVisitorData:[],visitsData:new _visitsData.VisitsData([])};h&&g.processVisit(h),null===i||void 0===i?void 0:i.forEach(a=>{g.processVisit(a),g.processVisitsData(a)}),g.processKcs(j),g.processCbs(k),g.processMultipleDataTypes();const l=g.processMappingIdentifier(null!==h&&void 0!==h?h:null===i||void 0===i?void 0:i[0]),{visitorData:m,storageVisitorData:n,visitsData:o,experimentData:p}=g.data;return f.updateStoredVariations(d,p),{visitorData:m,storageVisitorData:n,visitsData:o,mappingIdentifier:l}}static parseRegExp(a){if("/"===a[0]){const[_,b,c]=a.split("/");return new RegExp(b,c)}return new RegExp(a)}static parseSecret(a){if(null===a)return"null";const b=a.length;if(b<=_constants.SECRET_VISIBLE_LENGTH)return _constants.HIDDEN_SECRET_CHAR.repeat(b);const c=Math.max(b-_constants.SECRET_VISIBLE_LENGTH,_constants.SECRET_VISIBLE_LENGTH);return a.substring(0,b-c)+_constants.HIDDEN_SECRET_CHAR.repeat(c)}}exports.Parser=Parser;
@@ -8,7 +8,7 @@ import { SegmentType } from '../targeting';
8
8
  import { TrackingCacheItemType } from '../types';
9
9
  import { ExternalPackageInfoType } from '../sdkInfoTypes';
10
10
  import { VariationConfiguration } from '../variationConfiguration';
11
- import { MappingIdentifierType } from "../storage/types";
11
+ import { MappingIdentifierType } from '../storage/types';
12
12
  export type CheckTargetingParametersType = {
13
13
  segment: SegmentType | null;
14
14
  experimentId: number | null;
@@ -99,6 +99,8 @@ export type TrackExperimentParametersType = {
99
99
  * *Default*: `true`.
100
100
  * @param {boolean} personalization - If true, personalization data will be retrieved.
101
101
  * *Default*: `false`.
102
+ * @param {boolean} cbs - If true, Contextual Bandit evaluations data will be retrieved.
103
+ * *Default*: `false`.
102
104
  * */
103
105
  export type VisitorDataFiltersType = {
104
106
  previousVisitAmount?: number;
@@ -114,6 +116,7 @@ export type VisitorDataFiltersType = {
114
116
  kcs?: boolean;
115
117
  visitorCode?: boolean;
116
118
  personalization?: boolean;
119
+ cbs?: boolean;
117
120
  };
118
121
  /**
119
122
  * @interface `IExternalPRNG` - an interface for external PRNG (Pseudo-Random Number Generator) used to generate secure random numbers depending on the environment and platform
@@ -74,5 +74,6 @@ export declare class VariationConfiguration implements IVariationConfiguration {
74
74
  private parseForcedVariationData;
75
75
  simulatedVariationFromJson(featureKey: string, data: any): ForcedFeatureVariationType | null;
76
76
  private isSimulatedVariationJson;
77
+ private evaluateCBScores;
77
78
  }
78
79
  export {};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VariationConfiguration=void 0;var _tsRes=require("ts-res"),_hasher=require("../hasher"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_types=require("../clientConfiguration/types"),_types2=require("../types"),_logging=require("../logging");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class VariationConfiguration{constructor(a,b,c,d,e){_defineProperty(this,"storage",void 0),_defineProperty(this,"storageForcedExperimentVariations",void 0),_defineProperty(this,"storageForcedFeatureVariations",void 0),_defineProperty(this,"visitorCodeManager",void 0),_defineProperty(this,"clientConfiguration",void 0),this.storage=a,this.storageForcedExperimentVariations=b,this.storageForcedFeatureVariations=c,this.visitorCodeManager=d,this.clientConfiguration=e,d.setVariationConfiguration(this)}updateDataStatus(a){let{visitorCode:b,experimentIdList:c,status:d}=a;const e=this.storage.read();if(!e.ok)return e;let f=e.data;f[b]||(f[b]={});for(const e of c)f[b][e]=_objectSpread(_objectSpread({},f[b][e]),{},{status:d});return this.storage.write(f)}getUnsentData(a){return this.getVariationData(a,a=>a===_types2.TrackingStatus.Unsent)}getPendingData(a){return this.getVariationData(a,a=>a===_types2.TrackingStatus.Pending)}getStoredVariations(a){const b=this.storage.read();if(!b.ok)return b;const c=b.data[a];return c?(0,_tsRes.Ok)(c):(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageRead,a))}getVariation(a){let{visitorCode:b,visitorIdentifier:c,featureFlag:d,targetingData:e,packageInfo:f,clientConfiguration:g,dataManager:h,track:i=!0,withAssignment:j=!1}=a;_logging.KameleoonLogger.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j})`;const{rules:k,featureKey:l,id:m,defaultVariationKey:n}=d;for(const o of k){const{segment:a,experimentId:k,id:p,exposition:q,respoolTime:r,variationByExposition:s}=o,t=this.getForcedExperimentVariation(b,o.experimentId);let u=null;if(t.ok&&(u=t.data,u&&u.forceTargeting)){_logging.KameleoonLogger.info`Visitor ${b} has been forced targeted for ${o}`;const a=this.createAndSaveForcedTargetedVariation(b,d,o,u,i,j);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${a})`,(0,_tsRes.Ok)(a)}const v=_utilities.Utilities.checkTargeting({segment:a,visitorCode:b,experimentId:k,targetingData:e,packageInfo:f,clientConfiguration:g,dataManager:h,variationConfiguration:this});if(!v.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${v})`,v;if(!v.data)continue;if(_logging.KameleoonLogger.info`Visitor ${b} has been targeted for ${o}`,u){const a=this.createAndSaveForcedTargetedVariation(b,d,o,u,i,j);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${a})`,(0,_tsRes.Ok)(a)}const w=_hasher.Hasher.getHashDouble({visitorIdentifier:c,respoolTime:r,id:p+""});if(_logging.KameleoonLogger.debug`Calculated ruleHash: ${w} for visitorCode: ${b}`,w<=q){const a=_hasher.Hasher.getHashDouble({visitorIdentifier:c,respoolTime:r,id:k+""});_logging.KameleoonLogger.debug`Calculated variationHash: ${a} for visitorCode: ${b}`;const g=_utilities.Utilities.getVariationByHash(s,a);if(g){j&&this.updateStoredVariations(b,{[k]:{variationId:g.variationId,isTargetedRule:o.type===_types.RuleType.TARGETED_DELIVERY,status:i?_types2.TrackingStatus.Unsent:_types2.TrackingStatus.Sent}});const a={variationId:g.variationId,variationKey:g.variationKey,rule:o,featureFlagId:m,featureKey:l,experimentId:k,isTargetedRule:o.type===_types.RuleType.TARGETED_DELIVERY};return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${a})`,(0,_tsRes.Ok)(a)}}if(o.type===_types.RuleType.TARGETED_DELIVERY){const a={featureKey:l,featureFlagId:m,experimentId:null,variationKey:n,variationId:null,rule:null,isTargetedRule:!0};return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${a})`,(0,_tsRes.Ok)(a)}}const o={featureKey:l,featureFlagId:m,experimentId:null,variationKey:n,variationId:null,rule:null,isTargetedRule:!1};return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${o})`,(0,_tsRes.Ok)(o)}createAndSaveForcedTargetedVariation(a,b,c,d,e,f){const g={variationKey:d.varByExp.variationKey,variationId:d.varByExp.variationId,rule:c,featureFlagId:b.id,featureKey:b.featureKey,experimentId:c.experimentId,isTargetedRule:c.type===_types.RuleType.TARGETED_DELIVERY};return f&&this.updateStoredVariations(a,{[c.experimentId]:{variationId:g.variationId,isTargetedRule:c.type===_types.RuleType.TARGETED_DELIVERY,status:e?_types2.TrackingStatus.Unsent:_types2.TrackingStatus.Sent}}),g}updateStoredVariations(a,b){_logging.KameleoonLogger.debug`CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${a}, variationData: ${b})`;const c=this.storage.read();if(!c.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${a}, variationData: ${b}) -> (result: ${c})`,c;let d=c.data;for(const c in d[a]||(d[a]={}),b)d[a][c]=b[c];const e=this.storage.write(d);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${a}, variationData: ${b}) -> (resultWrite: ${e})`,e}getVariationData(a,b){const c=this.getStoredVariations(a);if(!c.ok)return[];const d=[];for(const[e,f]of Object.entries(c.data))b(f.status)&&d.push({experimentId:+e,variationId:f.variationId,isTargetedRule:f.isTargetedRule});return d}updateForcedExperimentVariation(a,b,c){_logging.KameleoonLogger.debug`CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b}, forcedExperimentVariation: ${c})`;const d=this.storageForcedExperimentVariations.read();if(!d.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b}, forcedExperimentVariation: ${c}) -> (result: ${d})`,d;let e=d.data;e[a]||(e[a]={}),c?e[a][b]=c:delete e[a][b];const f=this.storageForcedExperimentVariations.write(e);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b}, forcedExperimentVariation: ${c}) -> (resultWrite: ${f})`,f}updateForcedFeatureVariations(a,b){_logging.KameleoonLogger.debug`CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${a}, forcedFeatureVariations: ${b})`;const c=this.storageForcedFeatureVariations.read();if(!c.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${a}, forcedFeatureVariations: ${b}) -> (result: ${c})`,c;let d=c.data;d[0]||(d[0]={}),d[1]||(d[1]={});const e=d[0],f=d[1];e[a]||(e[a]={}),f[a]||(f[a]={}),b.forEach(b=>{const c=b.simulated?f[a]:e[a];c[b.featureKey]=b});const g=this.storageForcedFeatureVariations.write(d);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${a}, forcedFeatureVariations: ${b}) -> (resultWrite: ${g})`,g}clearSimulatedVariations(a){var b;_logging.KameleoonLogger.debug`CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${a})`;const c=this.storageForcedFeatureVariations.read();if(!c.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${a}) -> (result: ${c})`,c;let d;const e=c.data;return null!==e&&void 0!==e&&null!==(b=e[1])&&void 0!==b&&b[a]?(delete e[1][a],d=this.storageForcedFeatureVariations.write(e)):d=(0,_tsRes.Ok)(),_logging.KameleoonLogger.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${a}) -> (resultWrite: ${d})`,d}getForcedFeatureVariation(a,b){var c,d,e,f;_logging.KameleoonLogger.debug`CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${a}, featureKey: ${b})`;const g=this.storageForcedFeatureVariations.read();if(!g.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${a}, featureKey: ${b}) -> (simulatedResult: ${g})`,g;const h=null===(c=g.data[1])||void 0===c||null===(d=c[a])||void 0===d?void 0:d[b];if(h)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${a}, featureKey: ${b}) -> (simulatedData: ${h})`,(0,_tsRes.Ok)(h);const i=null===(e=g.data[0])||void 0===e||null===(f=e[a])||void 0===f?void 0:f[b];return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${a}, featureKey: ${b}) -> (forcedData: ${i})`,(0,_tsRes.Ok)(i)}getForcedExperimentVariation(a,b){var c;_logging.KameleoonLogger.debug`CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b})`;const d=this.storageForcedExperimentVariations.read();if(!d.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b}) -> (forcedResult: ${d})`,d;const e=null===(c=d.data[a])||void 0===c?void 0:c[b];return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b}) -> (forcedExperiment: ${e})`,(0,_tsRes.Ok)(e)}parseForcedVariationData(a){let b=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1];const c=this.clientConfiguration.featureFlags.get(a.featureKey);if(!c)return _logging.KameleoonLogger.error`Simulated feature flag '${a.featureKey}' not found`,null;let d=null;if(0===a.experimentId)return d={featureKey:a.featureKey,rule:null,varByExp:null,simulated:b},d;for(const e of c.rules){if(a.experimentId!==e.experimentId)continue;const c=e.variationByExposition.find(b=>b.variationId===a.variationId);if(c)return d={featureKey:a.featureKey,rule:{type:e.type,experimentId:e.experimentId},varByExp:{variationKey:c.variationKey,variationId:c.variationId},simulated:b},d}return _logging.KameleoonLogger.error`Simulated variation ${a.variationId} not found`,null}simulatedVariationFromJson(a,b){if(_logging.KameleoonLogger.debug`CALL: VariationConfiguration.simulatedVariationFromJson(featureKey: ${a}, data: ${b})`,!this.isSimulatedVariationJson(b))return null;const c=this.parseForcedVariationData({featureKey:a,variationId:b.varId,experimentId:b.expId},!0);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.simulatedVariationFromJson(featureKey: ${a}, data: ${b}) -> (forcedVariation: ${c})`,c}isSimulatedVariationJson(a){return a&&("number"==typeof a.expId||null===a.expId)}}exports.VariationConfiguration=VariationConfiguration;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VariationConfiguration=void 0;var _tsRes=require("ts-res"),_hasher=require("../hasher"),_kameleoonError=require("../kameleoonError"),_utilities=require("../utilities"),_types=require("../clientConfiguration/types"),_types2=require("../types"),_logging=require("../logging"),_cbScores=require("../kameleoonData/cbScores");function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}class VariationConfiguration{constructor(a,b,c,d,e){_defineProperty(this,"storage",void 0),_defineProperty(this,"storageForcedExperimentVariations",void 0),_defineProperty(this,"storageForcedFeatureVariations",void 0),_defineProperty(this,"visitorCodeManager",void 0),_defineProperty(this,"clientConfiguration",void 0),this.storage=a,this.storageForcedExperimentVariations=b,this.storageForcedFeatureVariations=c,this.visitorCodeManager=d,this.clientConfiguration=e,d.setVariationConfiguration(this)}updateDataStatus(a){let{visitorCode:b,experimentIdList:c,status:d}=a;const e=this.storage.read();if(!e.ok)return e;let f=e.data;f[b]||(f[b]={});for(const e of c)f[b][e]=_objectSpread(_objectSpread({},f[b][e]),{},{status:d});return this.storage.write(f)}getUnsentData(a){return this.getVariationData(a,a=>a===_types2.TrackingStatus.Unsent)}getPendingData(a){return this.getVariationData(a,a=>a===_types2.TrackingStatus.Pending)}getStoredVariations(a){const b=this.storage.read();if(!b.ok)return b;const c=b.data[a];return c?(0,_tsRes.Ok)(c):(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.StorageRead,a))}getVariation(a){let{visitorCode:b,visitorIdentifier:c,featureFlag:d,targetingData:e,packageInfo:f,clientConfiguration:g,dataManager:h,track:i=!0,withAssignment:j=!1}=a;_logging.KameleoonLogger.debug`CALL: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j})`;const{rules:k,featureKey:l,id:m,defaultVariationKey:n}=d;for(const o of k){const{segment:a,experimentId:k,id:p,exposition:q,respoolTime:r,variationByExposition:s}=o,t=this.getForcedExperimentVariation(b,o.experimentId);let u=null;if(t.ok&&(u=t.data,u&&u.forceTargeting)){_logging.KameleoonLogger.info`Visitor ${b} has been forced targeted for ${o}`;const a=this.createAndSaveForcedTargetedVariation(b,d,o,u,i,j);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${a})`,(0,_tsRes.Ok)(a)}const v=_utilities.Utilities.checkTargeting({segment:a,visitorCode:b,experimentId:k,targetingData:e,packageInfo:f,clientConfiguration:g,dataManager:h,variationConfiguration:this});if(!v.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${v})`,v;if(!v.data)continue;if(_logging.KameleoonLogger.info`Visitor ${b} has been targeted for ${o}`,u){const a=this.createAndSaveForcedTargetedVariation(b,d,o,u,i,j);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${a})`,(0,_tsRes.Ok)(a)}const w=_hasher.Hasher.getHashDouble({visitorIdentifier:c,respoolTime:r,id:p+""});if(_logging.KameleoonLogger.debug`Calculated ruleHash: ${w} for visitorCode: ${b}`,w<=q){let a=this.evaluateCBScores(o,c,e);if(!a){const d=_hasher.Hasher.getHashDouble({visitorIdentifier:c,respoolTime:r,id:k+""});_logging.KameleoonLogger.debug`Calculated variationHash: ${d} for visitorCode: ${b}`,a=_utilities.Utilities.getVariationByHash(s,d)}if(a){j&&this.updateStoredVariations(b,{[k]:{variationId:a.variationId,isTargetedRule:o.type===_types.RuleType.TARGETED_DELIVERY,status:i?_types2.TrackingStatus.Unsent:_types2.TrackingStatus.Sent}});const g={variationId:a.variationId,variationKey:a.variationKey,rule:o,featureFlagId:m,featureKey:l,experimentId:k,isTargetedRule:o.type===_types.RuleType.TARGETED_DELIVERY};return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${g})`,(0,_tsRes.Ok)(g)}}if(o.type===_types.RuleType.TARGETED_DELIVERY){const a={featureKey:l,featureFlagId:m,experimentId:null,variationKey:n,variationId:null,rule:null,isTargetedRule:!0};return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${a})`,(0,_tsRes.Ok)(a)}}const o={featureKey:l,featureFlagId:m,experimentId:null,variationKey:n,variationId:null,rule:null,isTargetedRule:!1};return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getVariation(visitorCode: ${b}, visitorIdentifier: ${c}, featureFlag: ${d}, targetingData: ${e}, packageInfo: ${f}, clientConfiguration, dataManager, withAssignment: ${j}) -> (targetedVariation: ${o})`,(0,_tsRes.Ok)(o)}createAndSaveForcedTargetedVariation(a,b,c,d,e,f){const g={variationKey:d.varByExp.variationKey,variationId:d.varByExp.variationId,rule:c,featureFlagId:b.id,featureKey:b.featureKey,experimentId:c.experimentId,isTargetedRule:c.type===_types.RuleType.TARGETED_DELIVERY};return f&&this.updateStoredVariations(a,{[c.experimentId]:{variationId:g.variationId,isTargetedRule:c.type===_types.RuleType.TARGETED_DELIVERY,status:e?_types2.TrackingStatus.Unsent:_types2.TrackingStatus.Sent}}),g}updateStoredVariations(a,b){_logging.KameleoonLogger.debug`CALL: VariationConfiguration.updateStoredVariations(visitorCode: ${a}, variationData: ${b})`;const c=this.storage.read();if(!c.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${a}, variationData: ${b}) -> (result: ${c})`,c;let d=c.data;for(const c in d[a]||(d[a]={}),b)d[a][c]=b[c];const e=this.storage.write(d);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateStoredVariations(visitorCode: ${a}, variationData: ${b}) -> (resultWrite: ${e})`,e}getVariationData(a,b){const c=this.getStoredVariations(a);if(!c.ok)return[];const d=[];for(const[e,f]of Object.entries(c.data))b(f.status)&&d.push({experimentId:+e,variationId:f.variationId,isTargetedRule:f.isTargetedRule});return d}updateForcedExperimentVariation(a,b,c){_logging.KameleoonLogger.debug`CALL: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b}, forcedExperimentVariation: ${c})`;const d=this.storageForcedExperimentVariations.read();if(!d.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b}, forcedExperimentVariation: ${c}) -> (result: ${d})`,d;let e=d.data;e[a]||(e[a]={}),c?e[a][b]=c:delete e[a][b];const f=this.storageForcedExperimentVariations.write(e);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b}, forcedExperimentVariation: ${c}) -> (resultWrite: ${f})`,f}updateForcedFeatureVariations(a,b){_logging.KameleoonLogger.debug`CALL: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${a}, forcedFeatureVariations: ${b})`;const c=this.storageForcedFeatureVariations.read();if(!c.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${a}, forcedFeatureVariations: ${b}) -> (result: ${c})`,c;let d=c.data;d[0]||(d[0]={}),d[1]||(d[1]={});const e=d[0],f=d[1];e[a]||(e[a]={}),f[a]||(f[a]={}),b.forEach(b=>{const c=b.simulated?f[a]:e[a];c[b.featureKey]=b});const g=this.storageForcedFeatureVariations.write(d);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.updateForcedFeatureVariations(visitorCode: ${a}, forcedFeatureVariations: ${b}) -> (resultWrite: ${g})`,g}clearSimulatedVariations(a){var b;_logging.KameleoonLogger.debug`CALL: VariationConfiguration.clearSimulatedVariations(visitorCode: ${a})`;const c=this.storageForcedFeatureVariations.read();if(!c.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${a}) -> (result: ${c})`,c;let d;const e=c.data;return null!==e&&void 0!==e&&null!==(b=e[1])&&void 0!==b&&b[a]?(delete e[1][a],d=this.storageForcedFeatureVariations.write(e)):d=(0,_tsRes.Ok)(),_logging.KameleoonLogger.debug`RETURN: VariationConfiguration.clearSimulatedVariations(visitorCode: ${a}) -> (resultWrite: ${d})`,d}getForcedFeatureVariation(a,b){var c,d,e,f;_logging.KameleoonLogger.debug`CALL: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${a}, featureKey: ${b})`;const g=this.storageForcedFeatureVariations.read();if(!g.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${a}, featureKey: ${b}) -> (simulatedResult: ${g})`,g;const h=null===(c=g.data[1])||void 0===c||null===(d=c[a])||void 0===d?void 0:d[b];if(h)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${a}, featureKey: ${b}) -> (simulatedData: ${h})`,(0,_tsRes.Ok)(h);const i=null===(e=g.data[0])||void 0===e||null===(f=e[a])||void 0===f?void 0:f[b];return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedFeatureVariation(visitorCode: ${a}, featureKey: ${b}) -> (forcedData: ${i})`,(0,_tsRes.Ok)(i)}getForcedExperimentVariation(a,b){var c;_logging.KameleoonLogger.debug`CALL: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b})`;const d=this.storageForcedExperimentVariations.read();if(!d.ok)return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b}) -> (forcedResult: ${d})`,d;const e=null===(c=d.data[a])||void 0===c?void 0:c[b];return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.getForcedExperimentVariation(visitorCode: ${a}, experimentId: ${b}) -> (forcedExperiment: ${e})`,(0,_tsRes.Ok)(e)}parseForcedVariationData(a){let b=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1];const c=this.clientConfiguration.featureFlags.get(a.featureKey);if(!c)return _logging.KameleoonLogger.error`Simulated feature flag '${a.featureKey}' not found`,null;let d=null;if(0===a.experimentId)return d={featureKey:a.featureKey,rule:null,varByExp:null,simulated:b},d;for(const e of c.rules){if(a.experimentId!==e.experimentId)continue;const c=e.variationByExposition.find(b=>b.variationId===a.variationId);if(c)return d={featureKey:a.featureKey,rule:{type:e.type,experimentId:e.experimentId},varByExp:{variationKey:c.variationKey,variationId:c.variationId},simulated:b},d}return _logging.KameleoonLogger.error`Simulated variation ${a.variationId} not found`,null}simulatedVariationFromJson(a,b){if(_logging.KameleoonLogger.debug`CALL: VariationConfiguration.simulatedVariationFromJson(featureKey: ${a}, data: ${b})`,!this.isSimulatedVariationJson(b))return null;const c=this.parseForcedVariationData({featureKey:a,variationId:b.varId,experimentId:b.expId},!0);return _logging.KameleoonLogger.debug`RETURN: VariationConfiguration.simulatedVariationFromJson(featureKey: ${a}, data: ${b}) -> (forcedVariation: ${c})`,c}isSimulatedVariationJson(a){return a&&("number"==typeof a.expId||null===a.expId)}evaluateCBScores(a,b,c){if(!c||!c.cbScores)return null;_logging.KameleoonLogger.debug`CALL: KameleoonClientImpl.evaluateCBScores(rule: ${a}, targetingData: ${c}, visitorIdentifier: ${b})`;const d=a.experimentId,e=new _cbScores.CBScores(c.cbScores.cbs).getValues().get(d);let f=null;if(void 0!==e){const c=a.variationByExposition,g=e.map(a=>c.filter(b=>a.ids.includes(b.variationId))).find(a=>0<a.length);if(g){let c=0;if(1<g.length){const e=_hasher.Hasher.getHashDouble({visitorIdentifier:b,respoolTime:a.respoolTime,id:d+""});_logging.KameleoonLogger.debug`Calculated cbs hash ${e} for code ${b}`,c=Math.min(Math.floor(e*g.length),g.length-1)}f=g[c]}}return _logging.KameleoonLogger.debug`RETURN: KameleoonClientImpl.evaluateCBScores(rule: ${a}, targetingData: ${c}, visitorIdentifier: ${b}) -> (variation: ${f})`,f}}exports.VariationConfiguration=VariationConfiguration;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kameleoon/javascript-sdk-core",
3
- "version": "5.7.0",
3
+ "version": "5.8.0",
4
4
  "description": "Kameleoon JS SDK Core",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",