@kameleoon/javascript-sdk-core 5.7.1 → 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 +8 -0
- package/dist/kameleoonData/cbScores.d.ts +13 -0
- package/dist/kameleoonData/cbScores.js +1 -0
- package/dist/kameleoonData/types.d.ts +19 -3
- package/dist/kameleoonData/types.js +1 -1
- package/dist/kameleoonData/visitProcessor.d.ts +3 -1
- package/dist/kameleoonData/visitProcessor.js +1 -1
- package/dist/requester/constants.js +1 -1
- package/dist/requester/types.d.ts +4 -3
- package/dist/requester/types.js +1 -1
- package/dist/requester/urlProvider.js +1 -1
- package/dist/utilities/parser.js +1 -1
- package/dist/utilities/types.d.ts +4 -1
- package/dist/variationConfiguration/variationConfiguration.d.ts +1 -0
- package/dist/variationConfiguration/variationConfiguration.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
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
|
+
|
|
3
11
|
## 5.7.1 (2025-03-14)
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -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,9 +1,10 @@
|
|
|
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;
|
|
9
10
|
processVisitsData(visit: VisitType): void;
|
|
@@ -24,6 +25,7 @@ export declare class VisitProcessor implements IVisitProcessor {
|
|
|
24
25
|
processMultipleDataTypes(): void;
|
|
25
26
|
processKcs(kcsData?: KCSType): void;
|
|
26
27
|
processVisitsData(visit: VisitType): void;
|
|
28
|
+
processCbs(cbsData?: CBSType): void;
|
|
27
29
|
private processBrowser;
|
|
28
30
|
private processDevice;
|
|
29
31
|
private processOperatingSystem;
|
|
@@ -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.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}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
|
+
"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:"¤tVisit=",MaxNumberPreviousVisits:"&maxNumberPreviousVisits=",Os:"&os=",OsIndex:"&osIndex=",Country:"&country=",City:"&city=",Region:"®ion=",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:"¤tVisit=",MaxNumberPreviousVisits:"&maxNumberPreviousVisits=",Os:"&os=",OsIndex:"&osIndex=",Country:"&country=",City:"&city=",Region:"®ion=",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
|
|
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>;
|
package/dist/requester/types.js
CHANGED
|
@@ -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,
|
|
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;
|
package/dist/utilities/parser.js
CHANGED
|
@@ -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"),_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}=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.processMultipleDataTypes();const
|
|
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
|
|
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;
|