@kameleoon/javascript-sdk-core 2.2.1 → 2.4.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.
Files changed (41) hide show
  1. package/dist/campaignConfiguration/campaignConfiguration.d.ts +2 -2
  2. package/dist/campaignConfiguration/campaignConfiguration.js +21 -5
  3. package/dist/campaignConfiguration/campaignConfiguration.js.map +1 -1
  4. package/dist/campaignConfiguration/types.d.ts +4 -0
  5. package/dist/campaignConfiguration/types.js.map +1 -1
  6. package/dist/clientSettings/clientSettings.js +1 -1
  7. package/dist/clientSettings/clientSettings.js.map +1 -1
  8. package/dist/eventSource/externalEventSource.js +1 -1
  9. package/dist/eventSource/externalEventSource.js.map +1 -1
  10. package/dist/kameleoonClient.d.ts +19 -5
  11. package/dist/kameleoonClient.js +29 -20
  12. package/dist/kameleoonClient.js.map +1 -1
  13. package/dist/kameleoonError/constants.d.ts +1 -0
  14. package/dist/kameleoonError/constants.js +2 -1
  15. package/dist/kameleoonError/constants.js.map +1 -1
  16. package/dist/kameleoonError/kameleoonError.d.ts +1 -1
  17. package/dist/kameleoonError/kameleoonError.js +1 -0
  18. package/dist/kameleoonError/kameleoonError.js.map +1 -1
  19. package/dist/kameleoonError/types.d.ts +2 -1
  20. package/dist/kameleoonError/types.js +1 -0
  21. package/dist/kameleoonError/types.js.map +1 -1
  22. package/dist/kameleoonUtils.js +1 -1
  23. package/dist/kameleoonUtils.js.map +1 -1
  24. package/dist/requester/constants.d.ts +4 -3
  25. package/dist/requester/constants.js +16 -8
  26. package/dist/requester/constants.js.map +1 -1
  27. package/dist/requester/index.d.ts +2 -2
  28. package/dist/requester/index.js +12 -0
  29. package/dist/requester/index.js.map +1 -1
  30. package/dist/requester/requester.d.ts +2 -1
  31. package/dist/requester/requester.js +15 -6
  32. package/dist/requester/requester.js.map +1 -1
  33. package/dist/requester/types.d.ts +34 -4
  34. package/dist/requester/types.js +2 -2
  35. package/dist/requester/types.js.map +1 -1
  36. package/dist/utilities/utilities.d.ts +3 -0
  37. package/dist/utilities/utilities.js +28 -0
  38. package/dist/utilities/utilities.js.map +1 -1
  39. package/dist/variationConfiguration/variationConfiguration.js +19 -9
  40. package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
  41. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"requester.js","names":["_tsRes","require","_kameleoonError","_constants","_nonce","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","Requester","Nonce","constructor","siteCode","environment","packageInfo","requestDispatcher","getClientConfiguration","timeStamp","environmentParam","UrlParameter","Environment","timeStampParam","Ts","requestUrl","URL","CLIENT_CONFIGURATION","UrlQuery","Mobile","response","get","Err","KameleoonError","KameleoonException","ClientConfiguration","Ok","getRemoteData","DATA","Key","encodeURI","RemoteData","trackExperiment","variationId","visitorCode","experimentId","isUnallocated","body","userAgent","callback","url","getTrackingUrl","unallocatedAddition","UrlEventType","Activity","nonce","bodyAddition","Experiment","Id","VariationId","extendedBody","headers","Header","UserAgent","track","trackData","type","version","TRACKING","VisitorCode","encodeURIComponent","SdkName","SdkVersion","exports"],"sources":["../../src/requester/requester.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { Environment, ExternalPackageInfoType } from '../types';\nimport { KameleoonError, KameleoonException } from '../kameleoonError';\nimport { URL, UrlParameter, Header, UrlQuery, UrlEventType } from './constants';\nimport {\n GetClientConfigurationResultType,\n RequesterParamsType,\n TrackDataParamsType,\n TrackExperimentParamsType,\n IExternalRequestDispatcher,\n} from './types';\nimport { JSONType } from '../campaignConfiguration';\nimport { Nonce } from '../kameleoonData/nonce';\n\nexport interface IRequester {\n getClientConfiguration: () => Promise<\n Result<GetClientConfigurationResultType, KameleoonError>\n >;\n getRemoteData: (key: string) => Promise<Result<JSONType, KameleoonError>>;\n trackExperiment: ({\n variationId,\n visitorCode,\n experimentId,\n isUnallocated,\n callback,\n body,\n }: TrackExperimentParamsType) => Promise<void>;\n trackData: ({ visitorCode, body }: TrackDataParamsType) => Promise<void>;\n}\n\nexport class Requester extends Nonce implements IRequester {\n private siteCode: string;\n private environment?: Environment;\n private requestDispatcher: IExternalRequestDispatcher;\n private packageInfo: ExternalPackageInfoType;\n\n constructor({\n siteCode,\n environment,\n packageInfo,\n requestDispatcher,\n }: RequesterParamsType) {\n super();\n\n this.requestDispatcher = requestDispatcher;\n this.siteCode = siteCode;\n this.environment = environment;\n this.packageInfo = packageInfo;\n }\n\n public async getClientConfiguration(\n timeStamp?: number,\n ): Promise<Result<GetClientConfigurationResultType, KameleoonError>> {\n const environmentParam = this.environment\n ? UrlParameter.Environment + this.environment\n : '';\n const timeStampParam = timeStamp ? UrlParameter.Ts + timeStamp : '';\n\n const requestUrl =\n URL.CLIENT_CONFIGURATION +\n UrlQuery.Mobile +\n this.siteCode +\n environmentParam +\n timeStampParam;\n\n const response = await this.requestDispatcher.get(requestUrl);\n\n if (!response) {\n return Err(new KameleoonError(KameleoonException.ClientConfiguration));\n }\n\n return Ok(response as GetClientConfigurationResultType);\n }\n\n public async getRemoteData(\n key: string,\n ): Promise<Result<JSONType, KameleoonError>> {\n const requestUrl: string =\n URL.DATA + this.siteCode + UrlParameter.Key + encodeURI(key);\n\n const response = await this.requestDispatcher.get(requestUrl);\n\n if (!response) {\n return Err(new KameleoonError(KameleoonException.RemoteData));\n }\n\n return Ok(response);\n }\n\n public async trackExperiment({\n variationId,\n visitorCode,\n experimentId,\n isUnallocated,\n body,\n userAgent,\n callback,\n }: TrackExperimentParamsType): Promise<void> {\n const url = this.getTrackingUrl(visitorCode);\n\n const unallocatedAddition = !body\n ? UrlEventType.Activity + UrlParameter.Nonce + this.nonce\n : '';\n const bodyAddition = isUnallocated\n ? unallocatedAddition\n : UrlEventType.Experiment +\n UrlParameter.Id +\n experimentId +\n UrlParameter.VariationId +\n variationId +\n UrlParameter.Nonce +\n this.nonce;\n const extendedBody = bodyAddition ? body + '\\n' + bodyAddition : body;\n\n const headers = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n const response = await this.requestDispatcher.track({\n url,\n headers,\n body: extendedBody,\n });\n\n if (response && callback) {\n callback();\n }\n }\n\n public async trackData({\n visitorCode,\n body,\n userAgent,\n }: TrackDataParamsType): Promise<void> {\n const url = this.getTrackingUrl(visitorCode);\n\n const headers = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n this.requestDispatcher.track({\n url,\n headers,\n body,\n });\n }\n\n private getTrackingUrl(visitorCode: string): string {\n const { type, version } = this.packageInfo;\n\n return (\n URL.TRACKING +\n this.siteCode +\n UrlParameter.VisitorCode +\n encodeURIComponent(visitorCode) +\n UrlParameter.SdkName +\n type +\n UrlParameter.SdkVersion +\n version\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"requester.js","names":["_tsRes","require","_kameleoonError","_constants","_nonce","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","Requester","Nonce","constructor","siteCode","environment","packageInfo","requestDispatcher","getClientConfiguration","timeStamp","environmentParam","UrlParameter","Environment","timeStampParam","Ts","requestUrl","URL","CLIENT_CONFIGURATION","UrlQuery","Mobile","response","Ok","error","Err","getRemoteData","DATA_MAP","Key","encodeURI","KameleoonError","KameleoonException","RemoteData","getVisitorData","visitorCode","VISIT_DATA","VisitorCode","MaxNumberPreviousVisits","CustomData","CurrentVisit","trackExperiment","variationId","experimentId","isUnallocated","body","userAgent","callback","url","getTrackingUrl","unallocatedAddition","UrlEventType","Activity","nonce","bodyAddition","Experiment","Id","VariationId","extendedBody","headers","Header","UserAgent","track","trackData","type","version","VISIT_EVENT","encodeURIComponent","SdkName","SdkVersion","exports"],"sources":["../../src/requester/requester.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { Environment, ExternalPackageInfoType } from '../types';\nimport { KameleoonError, KameleoonException } from '../kameleoonError';\nimport { URL, UrlParameter, Header, UrlQuery, UrlEventType } from './constants';\nimport {\n GetClientConfigurationResultType,\n RequesterParamsType,\n TrackDataParamsType,\n TrackExperimentParamsType,\n IExternalRequestDispatcher,\n GetVisitorDataResultType,\n} from './types';\nimport { JSONType } from '../campaignConfiguration';\nimport { Nonce } from '../kameleoonData/nonce';\n\nexport interface IRequester {\n getClientConfiguration: () => Promise<\n Result<GetClientConfigurationResultType, KameleoonError>\n >;\n getRemoteData: (key: string) => Promise<Result<JSONType, KameleoonError>>;\n trackExperiment: ({\n variationId,\n visitorCode,\n experimentId,\n isUnallocated,\n callback,\n body,\n }: TrackExperimentParamsType) => Promise<void>;\n trackData: ({ visitorCode, body }: TrackDataParamsType) => Promise<void>;\n}\n\nexport class Requester extends Nonce implements IRequester {\n private siteCode: string;\n private environment?: Environment;\n private requestDispatcher: IExternalRequestDispatcher;\n private packageInfo: ExternalPackageInfoType;\n\n constructor({\n siteCode,\n environment,\n packageInfo,\n requestDispatcher,\n }: RequesterParamsType) {\n super();\n\n this.requestDispatcher = requestDispatcher;\n this.siteCode = siteCode;\n this.environment = environment;\n this.packageInfo = packageInfo;\n }\n\n public async getClientConfiguration(\n timeStamp?: number,\n ): Promise<Result<GetClientConfigurationResultType, KameleoonError>> {\n const environmentParam = this.environment\n ? UrlParameter.Environment + this.environment\n : '';\n const timeStampParam = timeStamp ? UrlParameter.Ts + timeStamp : '';\n\n const requestUrl =\n URL.CLIENT_CONFIGURATION +\n UrlQuery.Mobile +\n this.siteCode +\n environmentParam +\n timeStampParam;\n\n try {\n const response = await this.requestDispatcher.getClientConfiguration(\n requestUrl,\n );\n\n return Ok(response as GetClientConfigurationResultType);\n } catch (error) {\n return Err(error as KameleoonError);\n }\n }\n\n public async getRemoteData(\n key: string,\n ): Promise<Result<JSONType, KameleoonError>> {\n const requestUrl: string =\n URL.DATA_MAP + this.siteCode + UrlParameter.Key + encodeURI(key);\n\n const response = await this.requestDispatcher.getRemoteData(requestUrl);\n\n if (!response) {\n return Err(new KameleoonError(KameleoonException.RemoteData));\n }\n\n return Ok(response);\n }\n\n public async getVisitorData(\n visitorCode: string,\n ): Promise<Result<GetVisitorDataResultType, KameleoonError>> {\n const requestUrl: string =\n URL.VISIT_DATA +\n this.siteCode +\n UrlParameter.VisitorCode +\n visitorCode +\n UrlParameter.MaxNumberPreviousVisits +\n 1 +\n UrlParameter.CustomData +\n true +\n UrlParameter.CurrentVisit +\n true;\n\n const response = await this.requestDispatcher.getRemoteData(requestUrl);\n\n if (!response) {\n return Err(new KameleoonError(KameleoonException.RemoteData));\n }\n\n return Ok(response as GetVisitorDataResultType);\n }\n\n public async trackExperiment({\n variationId,\n visitorCode,\n experimentId,\n isUnallocated,\n body,\n userAgent,\n callback,\n }: TrackExperimentParamsType): Promise<void> {\n const url = this.getTrackingUrl(visitorCode);\n\n const unallocatedAddition = !body\n ? UrlEventType.Activity + UrlParameter.Nonce + this.nonce\n : '';\n const bodyAddition = isUnallocated\n ? unallocatedAddition\n : UrlEventType.Experiment +\n UrlParameter.Id +\n experimentId +\n UrlParameter.VariationId +\n variationId +\n UrlParameter.Nonce +\n this.nonce;\n const extendedBody = bodyAddition ? body + '\\n' + bodyAddition : body;\n\n const headers = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n const response = await this.requestDispatcher.track({\n url,\n headers,\n body: extendedBody,\n });\n\n if (response && callback) {\n callback();\n }\n }\n\n public async trackData({\n visitorCode,\n body,\n userAgent,\n }: TrackDataParamsType): Promise<void> {\n const url = this.getTrackingUrl(visitorCode);\n\n const headers = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n this.requestDispatcher.track({\n url,\n headers,\n body,\n });\n }\n\n private getTrackingUrl(visitorCode: string): string {\n const { type, version } = this.packageInfo;\n\n return (\n URL.VISIT_EVENT +\n this.siteCode +\n UrlParameter.VisitorCode +\n encodeURIComponent(visitorCode) +\n UrlParameter.SdkName +\n type +\n UrlParameter.SdkVersion +\n version\n );\n }\n}\n"],"mappings":"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"}
@@ -21,6 +21,31 @@ export type TrackDataParamsType = {
21
21
  body: string;
22
22
  userAgent?: string;
23
23
  };
24
+ type CustomDataEventType = {
25
+ sdk: {
26
+ name: string;
27
+ version: string;
28
+ };
29
+ itp: boolean;
30
+ time: number;
31
+ data: {
32
+ index: number;
33
+ valuesCountMap: {
34
+ [value: string]: number;
35
+ };
36
+ overwrite: boolean;
37
+ mappingIdentifier: boolean;
38
+ };
39
+ };
40
+ export type VisitType = {
41
+ siteCode: string;
42
+ visitorCode: string;
43
+ customDataEvents: CustomDataEventType[];
44
+ };
45
+ export type GetVisitorDataResultType = {
46
+ previousVisits?: VisitType;
47
+ currentVisits?: VisitType;
48
+ };
24
49
  export type GetClientConfigurationResultType = Omit<ConfigurationDataType, 'featureFlags'> & {
25
50
  featureFlagConfigurations: FeatureFlagType[];
26
51
  };
@@ -29,9 +54,9 @@ export declare enum HttpMethod {
29
54
  Post = "POST"
30
55
  }
31
56
  declare const EVENT_TYPE_KEYS: readonly ["customData", "staticData", "page", "conversion", "activity", "experiment"];
32
- declare const PARAMETER_KEYS: readonly ["valuesCountMap", "id", "nonce", "sdkName", "sdkVersion", "browserIndex", "siteCode", "environment", "visitorCode", "negative", "revenue", "title", "referrersIndices", "overwrite", "index", "href", "variationId", "deviceType", "goalId", "ts", "key"];
57
+ declare const PARAMETER_KEYS: readonly ["valuesCountMap", "id", "nonce", "sdkName", "sdkVersion", "browserIndex", "siteCode", "environment", "visitorCode", "currentVisit", "maxNumberPreviousVisits", "customData", "negative", "revenue", "title", "referrersIndices", "overwrite", "index", "href", "variationId", "deviceType", "goalId", "ts", "key"];
33
58
  declare const TRACKING_KEYS: readonly ["visit", "map"];
34
- declare const QUERY_KEYS: readonly ["sse", "mobile", "map", "events"];
59
+ declare const QUERY_KEYS: readonly ["sse", "visitor", "mobile", "map", "events"];
35
60
  export type TrackingType = Record<Capitalize<(typeof TRACKING_KEYS)[number]>, string>;
36
61
  export type QueryType = Record<Capitalize<(typeof QUERY_KEYS)[number]>, string>;
37
62
  export type ParameterType = Record<Capitalize<(typeof PARAMETER_KEYS)[number]>, string>;
@@ -63,9 +88,14 @@ export interface IExternalRequestDispatcher {
63
88
  * */
64
89
  track: (params: TrackParametersType) => Promise<boolean>;
65
90
  /**
66
- * @method get - get data
91
+ * @method getClientConfiguration - get client configuration
92
+ * @param {string} url - url address
93
+ * */
94
+ getClientConfiguration: (url: string) => Promise<JSONType>;
95
+ /**
96
+ * @method getRemoteData - get data from remote server of Kameleoon
67
97
  * @param {string} url - url address
68
98
  * */
69
- get: (url: string) => Promise<JSONType>;
99
+ getRemoteData: (url: string) => Promise<JSONType>;
70
100
  }
71
101
  export {};
@@ -11,7 +11,7 @@ let HttpMethod = /*#__PURE__*/function (HttpMethod) {
11
11
  }({});
12
12
  exports.HttpMethod = HttpMethod;
13
13
  const EVENT_TYPE_KEYS = ['customData', 'staticData', 'page', 'conversion', 'activity', 'experiment'];
14
- const PARAMETER_KEYS = ['valuesCountMap', 'id', 'nonce', 'sdkName', 'sdkVersion', 'browserIndex', 'siteCode', 'environment', 'visitorCode', 'negative', 'revenue', 'title', 'referrersIndices', 'overwrite', 'index', 'href', 'variationId', 'deviceType', 'goalId', 'ts', 'key'];
14
+ const PARAMETER_KEYS = ['valuesCountMap', 'id', 'nonce', 'sdkName', 'sdkVersion', 'browserIndex', 'siteCode', 'environment', 'visitorCode', 'currentVisit', 'maxNumberPreviousVisits', 'customData', 'negative', 'revenue', 'title', 'referrersIndices', 'overwrite', 'index', 'href', 'variationId', 'deviceType', 'goalId', 'ts', 'key'];
15
15
  const TRACKING_KEYS = ['visit', 'map'];
16
- const QUERY_KEYS = ['sse', 'mobile', 'map', 'events'];
16
+ const QUERY_KEYS = ['sse', 'visitor', 'mobile', 'map', 'events'];
17
17
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["HttpMethod","exports","EVENT_TYPE_KEYS","PARAMETER_KEYS","TRACKING_KEYS","QUERY_KEYS"],"sources":["../../src/requester/types.ts"],"sourcesContent":["import {\n JSONType,\n FeatureFlagType,\n ConfigurationDataType,\n} from '../campaignConfiguration';\nimport { Environment, ExternalPackageInfoType } from '../types';\nimport { Header } from './constants';\n\nexport type RequesterParamsType = {\n siteCode: string;\n environment?: Environment;\n packageInfo: ExternalPackageInfoType;\n requestDispatcher: IExternalRequestDispatcher;\n};\n\nexport type TrackExperimentParamsType = {\n body: string;\n variationId: number;\n visitorCode: string;\n experimentId: number;\n isUnallocated: boolean;\n userAgent?: string;\n callback?: () => void;\n};\n\nexport type TrackDataParamsType = {\n visitorCode: string;\n body: string;\n userAgent?: string;\n};\n\nexport type GetClientConfigurationResultType = Omit<\n ConfigurationDataType,\n 'featureFlags'\n> & { featureFlagConfigurations: FeatureFlagType[] };\n\nexport enum HttpMethod {\n Get = 'GET',\n Post = 'POST',\n}\n\nconst EVENT_TYPE_KEYS = [\n 'customData',\n 'staticData',\n 'page',\n 'conversion',\n 'activity',\n 'experiment',\n] as const;\nconst PARAMETER_KEYS = [\n 'valuesCountMap',\n 'id',\n 'nonce',\n 'sdkName',\n 'sdkVersion',\n 'browserIndex',\n 'siteCode',\n 'environment',\n 'visitorCode',\n 'negative',\n 'revenue',\n 'title',\n 'referrersIndices',\n 'overwrite',\n 'index',\n 'href',\n 'variationId',\n 'deviceType',\n 'goalId',\n 'ts',\n 'key',\n] as const;\nconst TRACKING_KEYS = ['visit', 'map'] as const;\nconst QUERY_KEYS = ['sse', 'mobile', 'map', 'events'] as const;\n\nexport type TrackingType = Record<\n Capitalize<(typeof TRACKING_KEYS)[number]>,\n string\n>;\nexport type QueryType = Record<Capitalize<(typeof QUERY_KEYS)[number]>, string>;\nexport type ParameterType = Record<\n Capitalize<(typeof PARAMETER_KEYS)[number]>,\n string\n>;\nexport type EventType = Record<\n Capitalize<(typeof EVENT_TYPE_KEYS)[number]>,\n string\n>;\n\nexport type StrictTrackingRecord<T> = {\n [K in keyof T]: K extends string ? `${Uncapitalize<K>}/` : never;\n};\nexport type StrictQueryRecord<T> = {\n [K in keyof T]: K extends string ? `${Uncapitalize<K>}?siteCode=` : never;\n};\nexport type StrictEventTypeRecord<T> = {\n [K in keyof T]: K extends string ? `eventType=${Uncapitalize<K>}` : never;\n};\nexport type StrictParameterRecord<T> = {\n [K in keyof T]: K extends string ? `&${Uncapitalize<K>}=` : never;\n};\n\nexport type TrackParametersType = {\n url: string;\n headers?: Partial<Record<Header, string>>;\n body: string;\n};\n\n/**\n * @interface an interface of External Request Dispatcher which will be used to perform requests.\n * */\nexport interface IExternalRequestDispatcher {\n /**\n * @method track - send a track request\n * @param {TrackParametersType} parameters - track parameters\n * */\n track: (params: TrackParametersType) => Promise<boolean>;\n /**\n * @method get - get data\n * @param {string} url - url address\n * */\n get: (url: string) => Promise<JSONType>;\n}\n"],"mappings":";;;;;;IAoCYA,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAAAC,OAAA,CAAAD,UAAA,GAAAA,UAAA;AAKtB,MAAME,eAAe,GAAG,CACtB,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,UAAU,EACV,YAAY,CACJ;AACV,MAAMC,cAAc,GAAG,CACrB,gBAAgB,EAChB,IAAI,EACJ,OAAO,EACP,SAAS,EACT,YAAY,EACZ,cAAc,EACd,UAAU,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,SAAS,EACT,OAAO,EACP,kBAAkB,EAClB,WAAW,EACX,OAAO,EACP,MAAM,EACN,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,KAAK,CACG;AACV,MAAMC,aAAa,GAAG,CAAC,OAAO,EAAE,KAAK,CAAU;AAC/C,MAAMC,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAU"}
1
+ {"version":3,"file":"types.js","names":["HttpMethod","exports","EVENT_TYPE_KEYS","PARAMETER_KEYS","TRACKING_KEYS","QUERY_KEYS"],"sources":["../../src/requester/types.ts"],"sourcesContent":["import {\n JSONType,\n FeatureFlagType,\n ConfigurationDataType,\n} from '../campaignConfiguration';\nimport { Environment, ExternalPackageInfoType } from '../types';\nimport { Header } from './constants';\n\nexport type RequesterParamsType = {\n siteCode: string;\n environment?: Environment;\n packageInfo: ExternalPackageInfoType;\n requestDispatcher: IExternalRequestDispatcher;\n};\n\nexport type TrackExperimentParamsType = {\n body: string;\n variationId: number;\n visitorCode: string;\n experimentId: number;\n isUnallocated: boolean;\n userAgent?: string;\n callback?: () => void;\n};\n\nexport type TrackDataParamsType = {\n visitorCode: string;\n body: string;\n userAgent?: string;\n};\n\ntype CustomDataEventType = {\n sdk: {\n name: string;\n version: string;\n };\n itp: boolean;\n time: number;\n data: {\n index: number;\n valuesCountMap: {\n [value: string]: number;\n };\n overwrite: boolean;\n mappingIdentifier: boolean;\n };\n};\n\nexport type VisitType = {\n siteCode: string;\n visitorCode: string;\n customDataEvents: CustomDataEventType[];\n};\n\nexport type GetVisitorDataResultType = {\n previousVisits?: VisitType;\n currentVisits?: VisitType;\n};\n\nexport type GetClientConfigurationResultType = Omit<\n ConfigurationDataType,\n 'featureFlags'\n> & { featureFlagConfigurations: FeatureFlagType[] };\n\nexport enum HttpMethod {\n Get = 'GET',\n Post = 'POST',\n}\n\nconst EVENT_TYPE_KEYS = [\n 'customData',\n 'staticData',\n 'page',\n 'conversion',\n 'activity',\n 'experiment',\n] as const;\nconst PARAMETER_KEYS = [\n 'valuesCountMap',\n 'id',\n 'nonce',\n 'sdkName',\n 'sdkVersion',\n 'browserIndex',\n 'siteCode',\n 'environment',\n 'visitorCode',\n 'currentVisit',\n 'maxNumberPreviousVisits',\n 'customData',\n 'negative',\n 'revenue',\n 'title',\n 'referrersIndices',\n 'overwrite',\n 'index',\n 'href',\n 'variationId',\n 'deviceType',\n 'goalId',\n 'ts',\n 'key',\n] as const;\nconst TRACKING_KEYS = ['visit', 'map'] as const;\nconst QUERY_KEYS = ['sse', 'visitor', 'mobile', 'map', 'events'] as const;\n\nexport type TrackingType = Record<\n Capitalize<(typeof TRACKING_KEYS)[number]>,\n string\n>;\nexport type QueryType = Record<Capitalize<(typeof QUERY_KEYS)[number]>, string>;\nexport type ParameterType = Record<\n Capitalize<(typeof PARAMETER_KEYS)[number]>,\n string\n>;\nexport type EventType = Record<\n Capitalize<(typeof EVENT_TYPE_KEYS)[number]>,\n string\n>;\n\nexport type StrictTrackingRecord<T> = {\n [K in keyof T]: K extends string ? `${Uncapitalize<K>}/` : never;\n};\nexport type StrictQueryRecord<T> = {\n [K in keyof T]: K extends string ? `${Uncapitalize<K>}?siteCode=` : never;\n};\nexport type StrictEventTypeRecord<T> = {\n [K in keyof T]: K extends string ? `eventType=${Uncapitalize<K>}` : never;\n};\nexport type StrictParameterRecord<T> = {\n [K in keyof T]: K extends string ? `&${Uncapitalize<K>}=` : never;\n};\n\nexport type TrackParametersType = {\n url: string;\n headers?: Partial<Record<Header, string>>;\n body: string;\n};\n\n/**\n * @interface an interface of External Request Dispatcher which will be used to perform requests.\n * */\nexport interface IExternalRequestDispatcher {\n /**\n * @method track - send a track request\n * @param {TrackParametersType} parameters - track parameters\n * */\n track: (params: TrackParametersType) => Promise<boolean>;\n /**\n * @method getClientConfiguration - get client configuration\n * @param {string} url - url address\n * */\n getClientConfiguration: (url: string) => Promise<JSONType>;\n /**\n * @method getRemoteData - get data from remote server of Kameleoon\n * @param {string} url - url address\n * */\n getRemoteData: (url: string) => Promise<JSONType>;\n}\n"],"mappings":";;;;;;IAgEYA,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAAAC,OAAA,CAAAD,UAAA,GAAAA,UAAA;AAKtB,MAAME,eAAe,GAAG,CACtB,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,UAAU,EACV,YAAY,CACJ;AACV,MAAMC,cAAc,GAAG,CACrB,gBAAgB,EAChB,IAAI,EACJ,OAAO,EACP,SAAS,EACT,YAAY,EACZ,cAAc,EACd,UAAU,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,yBAAyB,EACzB,YAAY,EACZ,UAAU,EACV,SAAS,EACT,OAAO,EACP,kBAAkB,EAClB,WAAW,EACX,OAAO,EACP,MAAM,EACN,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,KAAK,CACG;AACV,MAAMC,aAAa,GAAG,CAAC,OAAO,EAAE,KAAK,CAAU;AAC/C,MAAMC,UAAU,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAU"}
@@ -3,13 +3,16 @@ import { KameleoonError } from '../kameleoonError';
3
3
  import { CheckTargetingParamsType, ManageCacheParametersType, TrackRuleParamsType } from './types';
4
4
  import { FeatureVariableResultType, TrackingCacheItemType } from '../types';
5
5
  import { CampaignConfiguration, FeatureVariableType } from '../campaignConfiguration';
6
+ import { KameleoonDataType } from '../kameleoonData';
6
7
  import { CacheManager } from '../cacheManager';
8
+ import { GetVisitorDataResultType } from '../requester';
7
9
  export declare class Utilities {
8
10
  static checkTargeting({ segment, visitorCode, targetingData, experimentId, variationConfiguration, }: CheckTargetingParamsType): Result<boolean, KameleoonError>;
9
11
  static validateVisitorCode(visitorCode: string): Result<void, KameleoonError>;
10
12
  static getDataUrl(visitorCode: string, campaignConfiguration: CampaignConfiguration): string;
11
13
  static trackRule({ featureFlagVariation, campaignConfiguration, visitorCode, requester, userAgent, }: TrackRuleParamsType): void;
12
14
  static parseFeatureVariable(variable: FeatureVariableType): Result<FeatureVariableResultType, KameleoonError>;
15
+ static parseVisitorData(data: GetVisitorDataResultType): KameleoonDataType[];
13
16
  static getUserAgent(visitorCode: string, campaignConfiguration: CampaignConfiguration): string | undefined;
14
17
  static updateCache({ cacheManager, visitorCode, experimentId, variationId, }: ManageCacheParametersType): void;
15
18
  static getTrackingCode(trackingCache: CacheManager<TrackingCacheItemType>, visitorCode: string): string;
@@ -120,6 +120,34 @@ class Utilities {
120
120
  (0, _kameleoonError.exhaustCheck)(type);
121
121
  }
122
122
  }
123
+ static parseVisitorData(data) {
124
+ const {
125
+ currentVisits,
126
+ previousVisits
127
+ } = data;
128
+ let visits;
129
+ if (currentVisits) {
130
+ visits = currentVisits;
131
+ } else if (previousVisits) {
132
+ visits = previousVisits;
133
+ }
134
+ if (!visits) {
135
+ return [];
136
+ }
137
+ const indexMap = new Map();
138
+ const resultData = [];
139
+ const customDataEvents = [...visits.customDataEvents];
140
+ customDataEvents.sort((a, b) => b.time - a.time);
141
+ for (const customDataEvent of customDataEvents) {
142
+ const customDataIndex = customDataEvent.data.index;
143
+ if (!indexMap.has(customDataIndex)) {
144
+ indexMap.set(customDataIndex, true);
145
+ const values = Object.keys(customDataEvent.data.valuesCountMap);
146
+ resultData.push(new _kameleoonData.CustomData(customDataIndex, ...values));
147
+ }
148
+ }
149
+ return resultData;
150
+ }
123
151
  static getUserAgent(visitorCode, campaignConfiguration) {
124
152
  const isUserAgent = data => data.type === _kameleoonData.KameleoonData.UserAgent;
125
153
  const targetingData = campaignConfiguration.storedTargetingData[visitorCode];
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.js","names":["_tsRes","require","_kameleoonError","_types","_targeting","_constants","_kameleoonData","_constants2","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","Utilities","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","conditionsData","firstLevel","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getAssignedVariations","ok","data","targetingTree","TargetingTree","result","evaluate","variationData","validateVisitorCode","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","campaignConfiguration","unsentData","getUnsentData","map","item","url","join","trackRule","featureFlagVariation","requester","userAgent","variationId","rule","Error","dataUrl","resultVariationId","isUnallocated","callback","clearUnsentData","trackExperiment","body","parseFeatureVariable","variable","type","VariableType","BOOLEAN","Boolean","STRING","NUMBER","numberValue","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","getUserAgent","isUserAgent","KameleoonData","UserAgent","storedTargetingData","filteredData","userAgentData","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Milliseconds","Second","add","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","entries","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from '../kameleoonError';\nimport { ExperimentVariationsType } from '../storage';\nimport {\n CheckTargetingParamsType,\n ManageCacheParametersType,\n TrackRuleParamsType,\n} from './types';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from '../types';\nimport { TargetingTree } from '../targeting';\nimport { VISITOR_CODE_MAX_LENGTH } from './constants';\nimport {\n CampaignConfiguration,\n FeatureVariableType,\n JSONType,\n} from '../campaignConfiguration';\nimport {\n KameleoonData,\n KameleoonDataItemType,\n UserAgentDataType,\n} from '../kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from '../constants';\nimport { CacheManager } from '../cacheManager';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n }: CheckTargetingParamsType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: ExperimentVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getAssignedVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = new TargetingTree(segment);\n\n const result = targetingTree.evaluate({\n targetingData: targetingData || [],\n variationData: variations,\n experimentId,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string {\n const unsentData = campaignConfiguration.getUnsentData(visitorCode);\n\n return unsentData.map((item) => item.url).join('\\n');\n }\n\n static trackRule({\n featureFlagVariation,\n campaignConfiguration,\n visitorCode,\n requester,\n userAgent,\n }: TrackRuleParamsType): void {\n const { variationId, rule } = featureFlagVariation;\n\n if (!rule) {\n throw new Error(\n 'Internal usage error, make sure to use `trackRule` for existing rule',\n );\n }\n\n const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);\n\n const resultVariationId = variationId || 0;\n const isUnallocated = variationId === null;\n const callback = () => campaignConfiguration.clearUnsentData;\n\n requester.trackExperiment({\n visitorCode,\n isUnallocated,\n body: dataUrl,\n callback,\n experimentId: rule.experimentId,\n variationId: resultVariationId,\n userAgent,\n });\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static getUserAgent(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string | undefined {\n const isUserAgent = (\n data: KameleoonDataItemType,\n ): data is UserAgentDataType => data.type === KameleoonData.UserAgent;\n const targetingData =\n campaignConfiguration.storedTargetingData[visitorCode];\n\n if (targetingData) {\n const filteredData = targetingData\n .map((item) => item.data)\n .filter(isUserAgent);\n\n if (filteredData.length) {\n const [userAgentData] = filteredData;\n\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utilities.js","names":["_tsRes","require","_kameleoonError","_types","_targeting","_constants","_kameleoonData","_constants2","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","Utilities","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","conditionsData","firstLevel","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getAssignedVariations","ok","data","targetingTree","TargetingTree","result","evaluate","variationData","validateVisitorCode","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","campaignConfiguration","unsentData","getUnsentData","map","item","url","join","trackRule","featureFlagVariation","requester","userAgent","variationId","rule","Error","dataUrl","resultVariationId","isUnallocated","callback","clearUnsentData","trackExperiment","body","parseFeatureVariable","variable","type","VariableType","BOOLEAN","Boolean","STRING","NUMBER","numberValue","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","currentVisits","previousVisits","visits","indexMap","Map","resultData","customDataEvents","sort","a","b","time","customDataEvent","customDataIndex","index","has","set","values","valuesCountMap","CustomData","getUserAgent","isUserAgent","KameleoonData","UserAgent","storedTargetingData","filteredData","userAgentData","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Milliseconds","Second","add","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","entries","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from '../kameleoonError';\nimport { ExperimentVariationsType } from '../storage';\nimport {\n CheckTargetingParamsType,\n ManageCacheParametersType,\n TrackRuleParamsType,\n} from './types';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from '../types';\nimport { TargetingTree } from '../targeting';\nimport { VISITOR_CODE_MAX_LENGTH } from './constants';\nimport {\n CampaignConfiguration,\n FeatureVariableType,\n JSONType,\n} from '../campaignConfiguration';\nimport {\n CustomData,\n KameleoonData,\n KameleoonDataItemType,\n KameleoonDataType,\n UserAgentDataType,\n} from '../kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from '../constants';\nimport { CacheManager } from '../cacheManager';\nimport { GetVisitorDataResultType, VisitType } from '../requester';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n }: CheckTargetingParamsType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: ExperimentVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getAssignedVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = new TargetingTree(segment);\n\n const result = targetingTree.evaluate({\n targetingData: targetingData || [],\n variationData: variations,\n experimentId,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string {\n const unsentData = campaignConfiguration.getUnsentData(visitorCode);\n\n return unsentData.map((item) => item.url).join('\\n');\n }\n\n static trackRule({\n featureFlagVariation,\n campaignConfiguration,\n visitorCode,\n requester,\n userAgent,\n }: TrackRuleParamsType): void {\n const { variationId, rule } = featureFlagVariation;\n\n if (!rule) {\n throw new Error(\n 'Internal usage error, make sure to use `trackRule` for existing rule',\n );\n }\n\n const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);\n\n const resultVariationId = variationId || 0;\n const isUnallocated = variationId === null;\n const callback = () => campaignConfiguration.clearUnsentData;\n\n requester.trackExperiment({\n visitorCode,\n isUnallocated,\n body: dataUrl,\n callback,\n experimentId: rule.experimentId,\n variationId: resultVariationId,\n userAgent,\n });\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData(data: GetVisitorDataResultType): KameleoonDataType[] {\n const { currentVisits, previousVisits } = data;\n\n let visits: VisitType | undefined;\n\n if (currentVisits) {\n visits = currentVisits;\n } else if (previousVisits) {\n visits = previousVisits;\n }\n\n if (!visits) {\n return [];\n }\n\n const indexMap = new Map();\n const resultData: KameleoonDataType[] = [];\n const customDataEvents = [...visits.customDataEvents];\n customDataEvents.sort((a, b) => b.time - a.time);\n\n for (const customDataEvent of customDataEvents) {\n const customDataIndex = customDataEvent.data.index;\n\n if (!indexMap.has(customDataIndex)) {\n indexMap.set(customDataIndex, true);\n\n const values = Object.keys(customDataEvent.data.valuesCountMap);\n resultData.push(new CustomData(customDataIndex, ...values));\n }\n }\n\n return resultData;\n }\n\n static getUserAgent(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string | undefined {\n const isUserAgent = (\n data: KameleoonDataItemType,\n ): data is UserAgentDataType => data.type === KameleoonData.UserAgent;\n const targetingData =\n campaignConfiguration.storedTargetingData[visitorCode];\n\n if (targetingData) {\n const filteredData = targetingData\n .map((item) => item.data)\n .filter(isUserAgent);\n\n if (filteredData.length) {\n const [userAgentData] = filteredData;\n\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAWA,IAAAE,MAAA,GAAAF,OAAA;AAMA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAMA,IAAAK,cAAA,GAAAL,OAAA;AAOA,IAAAM,WAAA,GAAAN,OAAA;AAAmD,SAAAO,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,IAAAC,eAAA,CAAAP,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAkB,yBAAA,GAAAlB,MAAA,CAAAmB,gBAAA,CAAAT,MAAA,EAAAV,MAAA,CAAAkB,yBAAA,CAAAJ,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAoB,cAAA,CAAAV,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAAA,SAAAO,gBAAAI,GAAA,EAAAL,GAAA,EAAAM,KAAA,IAAAN,GAAA,GAAAO,cAAA,CAAAP,GAAA,OAAAA,GAAA,IAAAK,GAAA,IAAArB,MAAA,CAAAoB,cAAA,CAAAC,GAAA,EAAAL,GAAA,IAAAM,KAAA,EAAAA,KAAA,EAAAhB,UAAA,QAAAkB,YAAA,QAAAC,QAAA,oBAAAJ,GAAA,CAAAL,GAAA,IAAAM,KAAA,WAAAD,GAAA;AAAA,SAAAE,eAAAG,GAAA,QAAAV,GAAA,GAAAW,YAAA,CAAAD,GAAA,2BAAAV,GAAA,gBAAAA,GAAA,GAAAY,MAAA,CAAAZ,GAAA;AAAA,SAAAW,aAAAE,KAAA,EAAAC,IAAA,eAAAD,KAAA,iBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAAG,MAAA,CAAAC,WAAA,OAAAF,IAAA,KAAAG,SAAA,QAAAC,GAAA,GAAAJ,IAAA,CAAAK,IAAA,CAAAP,KAAA,EAAAC,IAAA,2BAAAK,GAAA,sBAAAA,GAAA,YAAAE,SAAA,4DAAAP,IAAA,gBAAAF,MAAA,GAAAU,MAAA,EAAAT,KAAA;AAI5C,MAAMU,SAAS,CAAC;EACrB,OAAOC,cAAcA,CAAC;IACpBC,OAAO;IACPC,WAAW;IACXC,aAAa;IACbC,YAAY;IACZC;EACwB,CAAC,EAAmC;IAC5D,IAAI,CAACJ,OAAO,IAAI,CAACA,OAAO,CAACK,cAAc,CAACC,UAAU,CAAClC,MAAM,EAAE;MACzD,OAAO,IAAAmC,SAAE,EAAC,IAAI,CAAC;IACjB;IAEA,IAAI,CAACH,sBAAsB,EAAE;MAC3B,OAAO,IAAAI,UAAG,EAAC,IAAIC,8BAAc,CAACC,kCAAkB,CAACC,cAAc,CAAC,CAAC;IACnE;IAEA,IAAIC,UAAoC,GAAG,CAAC,CAAC;IAE7C,MAAMC,wBAAwB,GAC5BT,sBAAsB,CAACU,qBAAqB,CAACb,WAAW,CAAC;IAE3D,IAAIY,wBAAwB,CAACE,EAAE,EAAE;MAC/BH,UAAU,GAAGC,wBAAwB,CAACG,IAAI;IAC5C;IAEA,MAAMC,aAAa,GAAG,IAAIC,wBAAa,CAAClB,OAAO,CAAC;IAEhD,MAAMmB,MAAM,GAAGF,aAAa,CAACG,QAAQ,CAAC;MACpClB,aAAa,EAAEA,aAAa,IAAI,EAAE;MAClCmB,aAAa,EAAET,UAAU;MACzBT;IACF,CAAC,CAAC;IAEF,OAAOgB,MAAM;EACf;EAEA,OAAOG,mBAAmBA,CACxBrB,WAAmB,EACW;IAC9B,IAAIA,WAAW,CAAC7B,MAAM,GAAGmD,kCAAuB,EAAE;MAChD,OAAO,IAAAf,UAAG,EAAC,IAAIC,8BAAc,CAACC,kCAAkB,CAACc,oBAAoB,CAAC,CAAC;IACzE;IAEA,OAAO,IAAAjB,SAAE,GAAE;EACb;EAEA,OAAOkB,UAAUA,CACfxB,WAAmB,EACnByB,qBAA4C,EACpC;IACR,MAAMC,UAAU,GAAGD,qBAAqB,CAACE,aAAa,CAAC3B,WAAW,CAAC;IAEnE,OAAO0B,UAAU,CAACE,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACC,GAAG,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACtD;EAEA,OAAOC,SAASA,CAAC;IACfC,oBAAoB;IACpBR,qBAAqB;IACrBzB,WAAW;IACXkC,SAAS;IACTC;EACmB,CAAC,EAAQ;IAC5B,MAAM;MAAEC,WAAW;MAAEC;IAAK,CAAC,GAAGJ,oBAAoB;IAElD,IAAI,CAACI,IAAI,EAAE;MACT,MAAM,IAAIC,KAAK,CACb,sEAAsE,CACvE;IACH;IAEA,MAAMC,OAAO,GAAG,IAAI,CAACf,UAAU,CAACxB,WAAW,EAAEyB,qBAAqB,CAAC;IAEnE,MAAMe,iBAAiB,GAAGJ,WAAW,IAAI,CAAC;IAC1C,MAAMK,aAAa,GAAGL,WAAW,KAAK,IAAI;IAC1C,MAAMM,QAAQ,GAAGA,CAAA,KAAMjB,qBAAqB,CAACkB,eAAe;IAE5DT,SAAS,CAACU,eAAe,CAAC;MACxB5C,WAAW;MACXyC,aAAa;MACbI,IAAI,EAAEN,OAAO;MACbG,QAAQ;MACRxC,YAAY,EAAEmC,IAAI,CAACnC,YAAY;MAC/BkC,WAAW,EAAEI,iBAAiB;MAC9BL;IACF,CAAC,CAAC;EACJ;EAEA,OAAOW,oBAAoBA,CACzBC,QAA6B,EACsB;IACnD,MAAM;MAAEC,IAAI;MAAEpE;IAAM,CAAC,GAAGmE,QAAQ;IAEhC,QAAQC,IAAI;MACV,KAAKC,mBAAY,CAACC,OAAO;QACvB,OAAO,IAAA5C,SAAE,EAAC;UACR0C,IAAI;UACJpE,KAAK,EAAEuE,OAAO,CAACvE,KAAK;QACtB,CAAC,CAAC;MACJ,KAAKqE,mBAAY,CAACG,MAAM;QACtB,OAAO,IAAA9C,SAAE,EAAC;UACR0C,IAAI;UACJpE,KAAK,EAAEM,MAAM,CAACN,KAAK;QACrB,CAAC,CAAC;MACJ,KAAKqE,mBAAY,CAACI,MAAM;QACtB,MAAMC,WAAW,GAAG1D,MAAM,CAAChB,KAAK,CAAC;QAEjC,IAAIgB,MAAM,CAAC2D,KAAK,CAACD,WAAW,CAAC,EAAE;UAC7B,OAAO,IAAA/C,UAAG,EACR,IAAIC,8BAAc,CAACC,kCAAkB,CAAC+C,WAAW,EAAEtE,MAAM,CAACN,KAAK,CAAC,CAAC,CAClE;QACH;QAEA,OAAO,IAAA0B,SAAE,EAAC;UACR0C,IAAI;UACJpE,KAAK,EAAE0E;QACT,CAAC,CAAC;MACJ,KAAKL,mBAAY,CAACQ,IAAI;QACpB,IAAI;UACF,MAAMC,SAAmB,GAAGD,IAAI,CAACE,KAAK,CAACzE,MAAM,CAAC6D,QAAQ,CAACnE,KAAK,CAAC,CAAC;UAE9D,OAAO,IAAA0B,SAAE,EAAC;YACR0C,IAAI;YACJpE,KAAK,EAAE8E;UACT,CAAC,CAAC;QACJ,CAAC,CAAC,OAAOE,GAAG,EAAE;UACZ,OAAO,IAAArD,UAAG,EAAC,IAAIC,8BAAc,CAACC,kCAAkB,CAACoD,SAAS,EAAED,GAAG,CAAC,CAAC;QACnE;MACF;QACE,IAAAE,4BAAY,EAACd,IAAI,CAAC;IAAC;EAEzB;EAEA,OAAOe,gBAAgBA,CAAChD,IAA8B,EAAuB;IAC3E,MAAM;MAAEiD,aAAa;MAAEC;IAAe,CAAC,GAAGlD,IAAI;IAE9C,IAAImD,MAA6B;IAEjC,IAAIF,aAAa,EAAE;MACjBE,MAAM,GAAGF,aAAa;IACxB,CAAC,MAAM,IAAIC,cAAc,EAAE;MACzBC,MAAM,GAAGD,cAAc;IACzB;IAEA,IAAI,CAACC,MAAM,EAAE;MACX,OAAO,EAAE;IACX;IAEA,MAAMC,QAAQ,GAAG,IAAIC,GAAG,EAAE;IAC1B,MAAMC,UAA+B,GAAG,EAAE;IAC1C,MAAMC,gBAAgB,GAAG,CAAC,GAAGJ,MAAM,CAACI,gBAAgB,CAAC;IACrDA,gBAAgB,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACC,IAAI,GAAGF,CAAC,CAACE,IAAI,CAAC;IAEhD,KAAK,MAAMC,eAAe,IAAIL,gBAAgB,EAAE;MAC9C,MAAMM,eAAe,GAAGD,eAAe,CAAC5D,IAAI,CAAC8D,KAAK;MAElD,IAAI,CAACV,QAAQ,CAACW,GAAG,CAACF,eAAe,CAAC,EAAE;QAClCT,QAAQ,CAACY,GAAG,CAACH,eAAe,EAAE,IAAI,CAAC;QAEnC,MAAMI,MAAM,GAAG1H,MAAM,CAACD,IAAI,CAACsH,eAAe,CAAC5D,IAAI,CAACkE,cAAc,CAAC;QAC/DZ,UAAU,CAACxG,IAAI,CAAC,IAAIqH,yBAAU,CAACN,eAAe,EAAE,GAAGI,MAAM,CAAC,CAAC;MAC7D;IACF;IAEA,OAAOX,UAAU;EACnB;EAEA,OAAOc,YAAYA,CACjBnF,WAAmB,EACnByB,qBAA4C,EACxB;IACpB,MAAM2D,WAAW,GACfrE,IAA2B,IACGA,IAAI,CAACiC,IAAI,KAAKqC,4BAAa,CAACC,SAAS;IACrE,MAAMrF,aAAa,GACjBwB,qBAAqB,CAAC8D,mBAAmB,CAACvF,WAAW,CAAC;IAExD,IAAIC,aAAa,EAAE;MACjB,MAAMuF,YAAY,GAAGvF,aAAa,CAC/B2B,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACd,IAAI,CAAC,CACxBtD,MAAM,CAAC2H,WAAW,CAAC;MAEtB,IAAII,YAAY,CAACrH,MAAM,EAAE;QACvB,MAAM,CAACsH,aAAa,CAAC,GAAGD,YAAY;QAEpC,OAAOC,aAAa,CAAC7G,KAAK;MAC5B;IACF;IAEA,OAAOY,SAAS;EAClB;EAEA,OAAOkG,WAAWA,CAAC;IACjBC,YAAY;IACZ3F,WAAW;IACXE,YAAY;IACZkC;EACyB,CAAC,EAAQ;IAClC,MAAMwD,SAAS,GAAGD,YAAY,CAACE,YAAY,CAAC7F,WAAW,CAAC;IAExD,MAAM8F,YAAY,GAAGF,SAAS,GAAA7H,aAAA,KAAQ6H,SAAS,IAAK,CAAC,CAAC;IAEtDE,YAAY,CAAC5F,YAAY,CAAC,GAAG;MAC3BkC,WAAW;MACX2D,cAAc,EAAEC,IAAI,CAACC,GAAG,EAAE,GAAGC,+BAAmB,GAAGC,mBAAY,CAACC;IAClE,CAAC;IAEDT,YAAY,CAACU,GAAG,CAAC;MACf/H,GAAG,EAAE0B,WAAW;MAChBe,IAAI,EAAE+E,YAAY;MAClBQ,QAAQ,EAAEJ;IACZ,CAAC,CAAC;EACJ;EAEA,OAAOK,eAAeA,CACpBC,aAAkD,EAClDxG,WAAmB,EACX;IACR,IAAIyG,YAAY,GAAG,kDAAkD;IAErE,MAAMb,SAAS,GAAGY,aAAa,CAACX,YAAY,CAAC7F,WAAW,CAAC;IAEzD,IAAI,CAAC4F,SAAS,EAAE;MACd,OAAOa,YAAY;IACrB;IAEA,MAAMC,gBAAuC,GAAG,CAAC,CAAC;IAElDpJ,MAAM,CAACqJ,OAAO,CAACf,SAAS,CAAC,CAACvH,OAAO,CAC/B,CAAC,CAAC6B,YAAY,EAAE;MAAEkC,WAAW;MAAE2D;IAAe,CAAC,CAAC,KAAK;MACnD,IAAIA,cAAc,GAAGC,IAAI,CAACC,GAAG,EAAE,EAAE;QAC/BQ,YAAY,IAAK,6DAA4DvG,YAAa,IAAGkC,WAAY,KAAI;QAC7GqE,YAAY,IAAK,qDAAoDvG,YAAa,UAAS;QAE3FwG,gBAAgB,CAAC9G,MAAM,CAACM,YAAY,CAAC,CAAC,GAAG;UACvCkC,WAAW;UACX2D;QACF,CAAC;MACH;IACF,CAAC,CACF;;IAED;IACA;IACAS,aAAa,CAACH,GAAG,CAAC;MAChB/H,GAAG,EAAE0B,WAAW;MAChBe,IAAI,EAAE2F,gBAAgB;MACtBJ,QAAQ,EAAEJ;IACZ,CAAC,CAAC;IAEF,OAAOO,YAAY;EACrB;AACF;AAACG,OAAA,CAAA/G,SAAA,GAAAA,SAAA"}
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.VariationConfiguration = void 0;
7
7
  var _tsRes = require("ts-res");
8
8
  var _hasher = require("../hasher");
9
- var _variation = require("./variation");
10
9
  var _kameleoonError = require("../kameleoonError");
11
10
  var _utilities = require("../utilities");
12
11
  var _types = require("../campaignConfiguration/types");
@@ -23,18 +22,29 @@ class VariationConfiguration {
23
22
  _defineProperty(this, "experiments", void 0);
24
23
  _defineProperty(this, "storage", void 0);
25
24
  _defineProperty(this, "getAssociatedVariationId", (visitorCode, experimentId) => {
26
- let associatedVariation;
27
- this.storage.read().and(data => {
28
- associatedVariation = data?.[visitorCode]?.[experimentId];
29
- });
25
+ // TODO:
26
+ // --- Variation from storage is not checked anymore
27
+ // --- If nothing changes the commented code should be deleted
28
+ // along with the `Variation` class and according tests/types
29
+ // --- Mind `todo` in `getAssociatedVariationId.spec.ts`
30
+ //
31
+ // let associatedVariation: VariationType | undefined;
32
+
33
+ // this.storage.read().and((data) => {
34
+ // associatedVariation = data?.[visitorCode]?.[experimentId];
35
+ // });
36
+
30
37
  const experiment = this.experiments.find(experiment => experiment.id === String(experimentId));
31
38
  if (!experiment) {
32
39
  return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.ExperimentConfigurationNotFound, experimentId, visitorCode));
33
40
  }
34
- const variation = new _variation.Variation(associatedVariation);
35
- if (variation.isValid(experiment?.respoolTime)) {
36
- return (0, _tsRes.Ok)(variation.id);
37
- }
41
+
42
+ // const variation = new Variation(associatedVariation);
43
+
44
+ // if (variation.isValid(experiment?.respoolTime)) {
45
+ // return Ok(variation.id);
46
+ // }
47
+
38
48
  return this.assignVariation(visitorCode, experiment);
39
49
  });
40
50
  this.experiments = experiments;
@@ -1 +1 @@
1
- {"version":3,"file":"variationConfiguration.js","names":["_tsRes","require","_hasher","_variation","_kameleoonError","_utilities","_types","_excluded","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","indexOf","prototype","propertyIsEnumerable","call","sourceKeys","obj","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","TypeError","Number","VariationConfiguration","constructor","experiments","externalStorage","visitorCode","experimentId","associatedVariation","storage","read","and","data","experiment","find","id","Err","KameleoonError","KameleoonException","ExperimentConfigurationNotFound","variation","Variation","isValid","respoolTime","Ok","assignVariation","getAssignedVariations","result","ok","StorageRead","getFeatureFlagVariation","featureFlag","targetingData","withAssignment","validateResult","Utilities","validateVisitorCode","error","rules","featureKey","featureFlagId","defaultVariationKey","rule","segment","exposition","variationByExposition","targetingResult","checkTargeting","variationConfiguration","ruleHash","Hasher","obtainFeatureFlagHashDouble","campaignId","totalDeviation","variationHash","type","RuleType","EXPERIMENTATION","updateStorageData","variationId","restParameters","TARGETED_DELIVERY","variationKey","getExperimentVariation","deviations","hashDouble","obtainExperimentHashDouble","isUnallocated","resultVariationId","deviation","NotAllocated","variationResult","StorageParse","updatedVariationData","updatedVariation","assignmentDate","Date","toString","write","exports"],"sources":["../../src/variationConfiguration/variationConfiguration.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { ExperimentItemType } from '../campaignConfiguration';\nimport { Hasher } from '../hasher';\nimport { Variation } from './variation';\nimport { KameleoonError, KameleoonException } from '../kameleoonError';\nimport {\n IStorage,\n VariationDataType,\n ExperimentVariationsType,\n} from '../storage';\nimport {\n FeatureFlagVariationType,\n GetFeatureFlagVariationParametersType,\n VariationType,\n UpdateStorageParamsType,\n} from './types';\nimport { Utilities } from '../utilities';\nimport { RuleType } from '../campaignConfiguration/types';\n\ninterface IVariationConfiguration {\n /**\n * @method getAssociatedVariationId - gets the id of a variation assigned to a visitor with `visitorCode` from the storage. If the visitor doesn't have associated variation yet, assigns a new one, stores it and returns it's id.\n */\n getAssociatedVariationId: (\n visitorCode: string,\n experimentId: number,\n ) => Result<number, KameleoonError>;\n /**\n * @method getAssignedVariations - obtains experiments with according variations that are *already assigned* and *stored* in the `variationStorage`. If `getAssociatedVariationId` had not been called before, there will be no variations to get.\n */\n getAssignedVariations(\n visitorCode: string,\n ): Result<ExperimentVariationsType, KameleoonError>;\n /**\n * @method getFeatureFlagVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getFeatureFlagVariation: (\n params: GetFeatureFlagVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n /**\n * @method getExperimentVariation - obtains variation for the experiment by calculating the variation for the visitor *without assigning* it to a visitor\n */\n getExperimentVariation: (\n visitorCode: string,\n experiment: ExperimentItemType,\n ) => Result<number, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private experiments: ExperimentItemType[];\n private storage: IStorage<VariationDataType>;\n\n constructor(\n experiments: ExperimentItemType[],\n externalStorage: IStorage<VariationDataType>,\n ) {\n this.experiments = experiments;\n this.storage = externalStorage;\n }\n\n public getAssociatedVariationId = (\n visitorCode: string,\n experimentId: number,\n ): Result<number, KameleoonError> => {\n let associatedVariation: VariationType | undefined;\n\n this.storage.read().and((data) => {\n associatedVariation = data?.[visitorCode]?.[experimentId];\n });\n\n const experiment = this.experiments.find(\n (experiment) => experiment.id === String(experimentId),\n );\n\n if (!experiment) {\n return Err(\n new KameleoonError(\n KameleoonException.ExperimentConfigurationNotFound,\n experimentId,\n visitorCode,\n ),\n );\n }\n\n const variation = new Variation(associatedVariation);\n\n if (variation.isValid(experiment?.respoolTime)) {\n return Ok(variation.id);\n }\n\n return this.assignVariation(visitorCode, experiment);\n };\n\n public getAssignedVariations(\n visitorCode: string,\n ): Result<ExperimentVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const experiments = result.data[visitorCode];\n\n if (!experiments) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(experiments);\n }\n\n public getFeatureFlagVariation({\n visitorCode,\n featureFlag,\n targetingData,\n withAssignment = false,\n }: GetFeatureFlagVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n const validateResult = Utilities.validateVisitorCode(visitorCode);\n\n if (!validateResult.ok) {\n return Err(validateResult.error);\n }\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n // --- Check targeting ---\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.obtainFeatureFlagHashDouble({\n visitorCode,\n respoolTime,\n campaignId: String(id),\n });\n\n if (ruleHash <= exposition) {\n let totalDeviation = 0;\n\n const variationHash = Hasher.obtainFeatureFlagHashDouble({\n visitorCode,\n respoolTime,\n campaignId: String(experimentId),\n });\n\n for (const variation of variationByExposition) {\n totalDeviation += variation.exposition;\n\n if (variationHash <= totalDeviation) {\n // --- Note ---\n // For the `RuleType.EXPERIMENTATION` variation assignment must happen without\n // calculating experiment deviation\n if (rule.type === RuleType.EXPERIMENTATION && withAssignment) {\n this.updateStorageData({\n visitorCode,\n experimentId: String(experimentId),\n // --- Note ---\n // For `RuleType.EXPERIMENTATION` `variationId` can not be null\n variationId: variation.variationId as number,\n });\n }\n\n const { exposition, ...restParameters } = variation;\n\n return Ok({\n ...restParameters,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n });\n }\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n break;\n }\n }\n\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n });\n }\n\n public getExperimentVariation(\n visitorCode: string,\n experiment: ExperimentItemType,\n ): Result<number, KameleoonError> {\n const { id, respoolTime, deviations } = experiment;\n\n const hashDouble = Hasher.obtainExperimentHashDouble({\n visitorCode,\n campaignId: id,\n respoolTime,\n });\n\n let isUnallocated = true;\n let totalDeviation = 0;\n let resultVariationId = 0;\n\n for (const deviation of deviations) {\n totalDeviation += deviation.value;\n\n if (totalDeviation >= hashDouble) {\n // --- Note ---\n // If sum of all variations is less than 1 (100%), then there is a chance\n // user will end up outside of any variation\n isUnallocated = false;\n // --- Note ---\n // 'origin' is the default `variationId`, it must return id of 0\n if (deviation.variationId !== 'origin') {\n resultVariationId = Number(deviation.variationId);\n }\n\n break;\n }\n }\n\n if (isUnallocated) {\n return Err(\n new KameleoonError(KameleoonException.NotAllocated, visitorCode),\n );\n }\n\n return Ok(resultVariationId);\n }\n\n private assignVariation(\n visitorCode: string,\n experiment: ExperimentItemType,\n ): Result<number, KameleoonError> {\n const variationResult = this.getExperimentVariation(\n visitorCode,\n experiment,\n );\n\n if (!variationResult.ok) {\n return variationResult;\n }\n\n const result = this.updateStorageData({\n visitorCode,\n experimentId: experiment.id,\n variationId: variationResult.data,\n });\n\n if (!result.ok) {\n return result;\n }\n\n return Ok(variationResult.data);\n }\n\n private updateStorageData({\n visitorCode,\n experimentId,\n variationId,\n }: UpdateStorageParamsType): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n const updatedVariationData: VariationDataType = result.ok\n ? result.data\n : {};\n\n const updatedVariation = {\n variationId,\n assignmentDate: new Date().toString(),\n };\n\n if (updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode][experimentId] = updatedVariation;\n } else {\n updatedVariationData[visitorCode] = {\n [experimentId]: updatedVariation,\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n\n // --- TODO: commented out in case of future logic rework ---\n // --- Mind: `variationId` could cause the `undefined` issue ---\n // --- Reference: https://development.kameleoon.net/sdk/javascript-sdk-packages/-/merge_requests/89 ---\n // private getAssignedRuleVariation(\n // visitorCode: string,\n // rule: RuleItemType,\n // ): Result<GetAssignedRuleVariationResultType, KameleoonError> {\n // const emptyVariation: Omit<VariationByExpositionType, 'exposition'> = {\n // variationId: null,\n // variationKey: '',\n // };\n // const { experimentId, variationByExposition } = rule;\n\n // const variationsResult = this.getAssignedVariations(visitorCode);\n\n // // --- Note ---\n // // If there is an error, we just want to skip seeking\n // // for variation in the storage, not throw an error\n // if (!variationsResult.ok) {\n // return Ok(emptyVariation);\n // }\n\n // const variations = variationsResult.data;\n\n // if (\n // experimentId &&\n // typeof variations[experimentId].variationId !== undefined\n // ) {\n // const id = variations[experimentId].variationId;\n // const featureFlagVariation = variationByExposition.find(\n // (item) => item.variationId == id,\n // );\n\n // if (!featureFlagVariation) {\n // // --- Note ---\n // // This error is not described for public methods as\n // // it serves internal purpose of checking whether\n // // the persistent variation has been updated and should be re-allocated\n // return Err(new KameleoonError(KameleoonException.DataInconsistency));\n // }\n\n // const { exposition, ...restParameters } = featureFlagVariation;\n\n // return Ok({ ...restParameters });\n // }\n\n // return Ok(emptyVariation);\n // }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AAYA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAA0D,MAAAM,SAAA;AAAA,SAAAC,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,IAAAC,eAAA,CAAAP,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAkB,yBAAA,GAAAlB,MAAA,CAAAmB,gBAAA,CAAAT,MAAA,EAAAV,MAAA,CAAAkB,yBAAA,CAAAJ,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAoB,cAAA,CAAAV,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAAA,SAAAW,yBAAAP,MAAA,EAAAQ,QAAA,QAAAR,MAAA,yBAAAJ,MAAA,GAAAa,6BAAA,CAAAT,MAAA,EAAAQ,QAAA,OAAAN,GAAA,EAAAL,CAAA,MAAAX,MAAA,CAAAC,qBAAA,QAAAuB,gBAAA,GAAAxB,MAAA,CAAAC,qBAAA,CAAAa,MAAA,QAAAH,CAAA,MAAAA,CAAA,GAAAa,gBAAA,CAAAX,MAAA,EAAAF,CAAA,MAAAK,GAAA,GAAAQ,gBAAA,CAAAb,CAAA,OAAAW,QAAA,CAAAG,OAAA,CAAAT,GAAA,uBAAAhB,MAAA,CAAA0B,SAAA,CAAAC,oBAAA,CAAAC,IAAA,CAAAd,MAAA,EAAAE,GAAA,aAAAN,MAAA,CAAAM,GAAA,IAAAF,MAAA,CAAAE,GAAA,cAAAN,MAAA;AAAA,SAAAa,8BAAAT,MAAA,EAAAQ,QAAA,QAAAR,MAAA,yBAAAJ,MAAA,WAAAmB,UAAA,GAAA7B,MAAA,CAAAD,IAAA,CAAAe,MAAA,OAAAE,GAAA,EAAAL,CAAA,OAAAA,CAAA,MAAAA,CAAA,GAAAkB,UAAA,CAAAhB,MAAA,EAAAF,CAAA,MAAAK,GAAA,GAAAa,UAAA,CAAAlB,CAAA,OAAAW,QAAA,CAAAG,OAAA,CAAAT,GAAA,kBAAAN,MAAA,CAAAM,GAAA,IAAAF,MAAA,CAAAE,GAAA,YAAAN,MAAA;AAAA,SAAAO,gBAAAa,GAAA,EAAAd,GAAA,EAAAe,KAAA,IAAAf,GAAA,GAAAgB,cAAA,CAAAhB,GAAA,OAAAA,GAAA,IAAAc,GAAA,IAAA9B,MAAA,CAAAoB,cAAA,CAAAU,GAAA,EAAAd,GAAA,IAAAe,KAAA,EAAAA,KAAA,EAAAzB,UAAA,QAAA2B,YAAA,QAAAC,QAAA,oBAAAJ,GAAA,CAAAd,GAAA,IAAAe,KAAA,WAAAD,GAAA;AAAA,SAAAE,eAAAG,GAAA,QAAAnB,GAAA,GAAAoB,YAAA,CAAAD,GAAA,2BAAAnB,GAAA,gBAAAA,GAAA,GAAAqB,MAAA,CAAArB,GAAA;AAAA,SAAAoB,aAAAE,KAAA,EAAAC,IAAA,eAAAD,KAAA,iBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAAG,MAAA,CAAAC,WAAA,OAAAF,IAAA,KAAAG,SAAA,QAAAC,GAAA,GAAAJ,IAAA,CAAAZ,IAAA,CAAAU,KAAA,EAAAC,IAAA,2BAAAK,GAAA,sBAAAA,GAAA,YAAAC,SAAA,4DAAAN,IAAA,gBAAAF,MAAA,GAAAS,MAAA,EAAAR,KAAA;AA+BnD,MAAMS,sBAAsB,CAAoC;EAIrEC,WAAWA,CACTC,WAAiC,EACjCC,eAA4C,EAC5C;IAAAjC,eAAA;IAAAA,eAAA;IAAAA,eAAA,mCAKgC,CAChCkC,WAAmB,EACnBC,YAAoB,KACe;MACnC,IAAIC,mBAA8C;MAElD,IAAI,CAACC,OAAO,CAACC,IAAI,EAAE,CAACC,GAAG,CAAEC,IAAI,IAAK;QAChCJ,mBAAmB,GAAGI,IAAI,GAAGN,WAAW,CAAC,GAAGC,YAAY,CAAC;MAC3D,CAAC,CAAC;MAEF,MAAMM,UAAU,GAAG,IAAI,CAACT,WAAW,CAACU,IAAI,CACrCD,UAAU,IAAKA,UAAU,CAACE,EAAE,KAAKvB,MAAM,CAACe,YAAY,CAAC,CACvD;MAED,IAAI,CAACM,UAAU,EAAE;QACf,OAAO,IAAAG,UAAG,EACR,IAAIC,8BAAc,CAChBC,kCAAkB,CAACC,+BAA+B,EAClDZ,YAAY,EACZD,WAAW,CACZ,CACF;MACH;MAEA,MAAMc,SAAS,GAAG,IAAIC,oBAAS,CAACb,mBAAmB,CAAC;MAEpD,IAAIY,SAAS,CAACE,OAAO,CAACT,UAAU,EAAEU,WAAW,CAAC,EAAE;QAC9C,OAAO,IAAAC,SAAE,EAACJ,SAAS,CAACL,EAAE,CAAC;MACzB;MAEA,OAAO,IAAI,CAACU,eAAe,CAACnB,WAAW,EAAEO,UAAU,CAAC;IACtD,CAAC;IAnCC,IAAI,CAACT,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACK,OAAO,GAAGJ,eAAe;EAChC;EAmCOqB,qBAAqBA,CAC1BpB,WAAmB,EAC+B;IAClD,MAAMqB,MAAM,GAAG,IAAI,CAAClB,OAAO,CAACC,IAAI,EAAE;IAElC,IAAI,CAACiB,MAAM,CAACC,EAAE,EAAE;MACd,OAAOD,MAAM;IACf;IAEA,MAAMvB,WAAW,GAAGuB,MAAM,CAACf,IAAI,CAACN,WAAW,CAAC;IAE5C,IAAI,CAACF,WAAW,EAAE;MAChB,OAAO,IAAAY,UAAG,EACR,IAAIC,8BAAc,CAACC,kCAAkB,CAACW,WAAW,EAAEvB,WAAW,CAAC,CAChE;IACH;IAEA,OAAO,IAAAkB,SAAE,EAACpB,WAAW,CAAC;EACxB;EAEO0B,uBAAuBA,CAAC;IAC7BxB,WAAW;IACXyB,WAAW;IACXC,aAAa;IACbC,cAAc,GAAG;EACoB,CAAC,EAGtC;IACA,MAAMC,cAAc,GAAGC,oBAAS,CAACC,mBAAmB,CAAC9B,WAAW,CAAC;IAEjE,IAAI,CAAC4B,cAAc,CAACN,EAAE,EAAE;MACtB,OAAO,IAAAZ,UAAG,EAACkB,cAAc,CAACG,KAAK,CAAC;IAClC;IAEA,MAAM;MACJC,KAAK;MACLC,UAAU;MACVxB,EAAE,EAAEyB,aAAa;MACjBC;IACF,CAAC,GAAGV,WAAW;IAEf,KAAK,MAAMW,IAAI,IAAIJ,KAAK,EAAE;MACxB,MAAM;QACJK,OAAO;QACPpC,YAAY;QACZQ,EAAE;QACF6B,UAAU;QACVrB,WAAW;QACXsB;MACF,CAAC,GAAGH,IAAI;;MAER;MACA,MAAMI,eAAe,GAAGX,oBAAS,CAACY,cAAc,CAAC;QAC/CJ,OAAO;QACPrC,WAAW;QACXC,YAAY;QACZyB,aAAa;QACbgB,sBAAsB,EAAE;MAC1B,CAAC,CAAC;MAEF,IAAI,CAACF,eAAe,CAAClB,EAAE,EAAE;QACvB,OAAOkB,eAAe;MACxB;MAEA,IAAI,CAACA,eAAe,CAAClC,IAAI,EAAE;QACzB;MACF;;MAEA;MACA;MACA;MACA,MAAMqC,QAAQ,GAAGC,cAAM,CAACC,2BAA2B,CAAC;QAClD7C,WAAW;QACXiB,WAAW;QACX6B,UAAU,EAAE5D,MAAM,CAACuB,EAAE;MACvB,CAAC,CAAC;MAEF,IAAIkC,QAAQ,IAAIL,UAAU,EAAE;QAC1B,IAAIS,cAAc,GAAG,CAAC;QAEtB,MAAMC,aAAa,GAAGJ,cAAM,CAACC,2BAA2B,CAAC;UACvD7C,WAAW;UACXiB,WAAW;UACX6B,UAAU,EAAE5D,MAAM,CAACe,YAAY;QACjC,CAAC,CAAC;QAEF,KAAK,MAAMa,SAAS,IAAIyB,qBAAqB,EAAE;UAC7CQ,cAAc,IAAIjC,SAAS,CAACwB,UAAU;UAEtC,IAAIU,aAAa,IAAID,cAAc,EAAE;YACnC;YACA;YACA;YACA,IAAIX,IAAI,CAACa,IAAI,KAAKC,eAAQ,CAACC,eAAe,IAAIxB,cAAc,EAAE;cAC5D,IAAI,CAACyB,iBAAiB,CAAC;gBACrBpD,WAAW;gBACXC,YAAY,EAAEf,MAAM,CAACe,YAAY,CAAC;gBAClC;gBACA;gBACAoD,WAAW,EAAEvC,SAAS,CAACuC;cACzB,CAAC,CAAC;YACJ;YAEA,MAAM;gBAAEf;cAA8B,CAAC,GAAGxB,SAAS;cAA5BwC,cAAc,GAAApF,wBAAA,CAAK4C,SAAS,EAAAtE,SAAA;YAEnD,OAAO,IAAA0E,SAAE,EAAA5D,aAAA,CAAAA,aAAA,KACJgG,cAAc;cACjBlB,IAAI;cACJF,aAAa;cACbD,UAAU;cACVhC;YAAY,GACZ;UACJ;QACF;MACF;MAEA,IAAImC,IAAI,CAACa,IAAI,KAAKC,eAAQ,CAACK,iBAAiB,EAAE;QAC5C;MACF;IACF;IAEA,OAAO,IAAArC,SAAE,EAAC;MACRe,UAAU;MACVC,aAAa;MACbjC,YAAY,EAAE,IAAI;MAClBuD,YAAY,EAAErB,mBAAmB;MACjCkB,WAAW,EAAE,IAAI;MACjBjB,IAAI,EAAE;IACR,CAAC,CAAC;EACJ;EAEOqB,sBAAsBA,CAC3BzD,WAAmB,EACnBO,UAA8B,EACE;IAChC,MAAM;MAAEE,EAAE;MAAEQ,WAAW;MAAEyC;IAAW,CAAC,GAAGnD,UAAU;IAElD,MAAMoD,UAAU,GAAGf,cAAM,CAACgB,0BAA0B,CAAC;MACnD5D,WAAW;MACX8C,UAAU,EAAErC,EAAE;MACdQ;IACF,CAAC,CAAC;IAEF,IAAI4C,aAAa,GAAG,IAAI;IACxB,IAAId,cAAc,GAAG,CAAC;IACtB,IAAIe,iBAAiB,GAAG,CAAC;IAEzB,KAAK,MAAMC,SAAS,IAAIL,UAAU,EAAE;MAClCX,cAAc,IAAIgB,SAAS,CAACnF,KAAK;MAEjC,IAAImE,cAAc,IAAIY,UAAU,EAAE;QAChC;QACA;QACA;QACAE,aAAa,GAAG,KAAK;QACrB;QACA;QACA,IAAIE,SAAS,CAACV,WAAW,KAAK,QAAQ,EAAE;UACtCS,iBAAiB,GAAGnE,MAAM,CAACoE,SAAS,CAACV,WAAW,CAAC;QACnD;QAEA;MACF;IACF;IAEA,IAAIQ,aAAa,EAAE;MACjB,OAAO,IAAAnD,UAAG,EACR,IAAIC,8BAAc,CAACC,kCAAkB,CAACoD,YAAY,EAAEhE,WAAW,CAAC,CACjE;IACH;IAEA,OAAO,IAAAkB,SAAE,EAAC4C,iBAAiB,CAAC;EAC9B;EAEQ3C,eAAeA,CACrBnB,WAAmB,EACnBO,UAA8B,EACE;IAChC,MAAM0D,eAAe,GAAG,IAAI,CAACR,sBAAsB,CACjDzD,WAAW,EACXO,UAAU,CACX;IAED,IAAI,CAAC0D,eAAe,CAAC3C,EAAE,EAAE;MACvB,OAAO2C,eAAe;IACxB;IAEA,MAAM5C,MAAM,GAAG,IAAI,CAAC+B,iBAAiB,CAAC;MACpCpD,WAAW;MACXC,YAAY,EAAEM,UAAU,CAACE,EAAE;MAC3B4C,WAAW,EAAEY,eAAe,CAAC3D;IAC/B,CAAC,CAAC;IAEF,IAAI,CAACe,MAAM,CAACC,EAAE,EAAE;MACd,OAAOD,MAAM;IACf;IAEA,OAAO,IAAAH,SAAE,EAAC+C,eAAe,CAAC3D,IAAI,CAAC;EACjC;EAEQ8C,iBAAiBA,CAAC;IACxBpD,WAAW;IACXC,YAAY;IACZoD;EACuB,CAAC,EAAgC;IACxD,MAAMhC,MAAM,GAAG,IAAI,CAAClB,OAAO,CAACC,IAAI,EAAE;IAElC,IAAI,CAACiB,MAAM,CAACC,EAAE,EAAE;MACd;MACA;MACA;MACA;MACA;MACA,IAAID,MAAM,CAACU,KAAK,CAACkB,IAAI,KAAKrC,kCAAkB,CAACsD,YAAY,EAAE;QACzD,OAAO7C,MAAM;MACf;IACF;IAEA,MAAM8C,oBAAuC,GAAG9C,MAAM,CAACC,EAAE,GACrDD,MAAM,CAACf,IAAI,GACX,CAAC,CAAC;IAEN,MAAM8D,gBAAgB,GAAG;MACvBf,WAAW;MACXgB,cAAc,EAAE,IAAIC,IAAI,EAAE,CAACC,QAAQ;IACrC,CAAC;IAED,IAAIJ,oBAAoB,CAACnE,WAAW,CAAC,EAAE;MACrCmE,oBAAoB,CAACnE,WAAW,CAAC,CAACC,YAAY,CAAC,GAAGmE,gBAAgB;IACpE,CAAC,MAAM;MACLD,oBAAoB,CAACnE,WAAW,CAAC,GAAG;QAClC,CAACC,YAAY,GAAGmE;MAClB,CAAC;IACH;IAEA,OAAO,IAAI,CAACjE,OAAO,CAACqE,KAAK,CAACL,oBAAoB,CAAC;EACjD;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;EACA;;EAEA;EACA;AACF;AAACM,OAAA,CAAA7E,sBAAA,GAAAA,sBAAA"}
1
+ {"version":3,"file":"variationConfiguration.js","names":["_tsRes","require","_hasher","_kameleoonError","_utilities","_types","_excluded","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","indexOf","prototype","propertyIsEnumerable","call","sourceKeys","obj","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","TypeError","Number","VariationConfiguration","constructor","experiments","externalStorage","visitorCode","experimentId","experiment","find","id","Err","KameleoonError","KameleoonException","ExperimentConfigurationNotFound","assignVariation","storage","getAssignedVariations","result","read","ok","data","StorageRead","Ok","getFeatureFlagVariation","featureFlag","targetingData","withAssignment","validateResult","Utilities","validateVisitorCode","error","rules","featureKey","featureFlagId","defaultVariationKey","rule","segment","exposition","respoolTime","variationByExposition","targetingResult","checkTargeting","variationConfiguration","ruleHash","Hasher","obtainFeatureFlagHashDouble","campaignId","totalDeviation","variationHash","variation","type","RuleType","EXPERIMENTATION","updateStorageData","variationId","restParameters","TARGETED_DELIVERY","variationKey","getExperimentVariation","deviations","hashDouble","obtainExperimentHashDouble","isUnallocated","resultVariationId","deviation","NotAllocated","variationResult","StorageParse","updatedVariationData","updatedVariation","assignmentDate","Date","toString","write","exports"],"sources":["../../src/variationConfiguration/variationConfiguration.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { ExperimentItemType } from '../campaignConfiguration';\nimport { Hasher } from '../hasher';\nimport { KameleoonError, KameleoonException } from '../kameleoonError';\nimport {\n IStorage,\n VariationDataType,\n ExperimentVariationsType,\n} from '../storage';\nimport {\n FeatureFlagVariationType,\n GetFeatureFlagVariationParametersType,\n UpdateStorageParamsType,\n} from './types';\nimport { Utilities } from '../utilities';\nimport { RuleType } from '../campaignConfiguration/types';\n\ninterface IVariationConfiguration {\n /**\n * @method getAssociatedVariationId - gets the id of a variation assigned to a visitor with `visitorCode` from the storage. If the visitor doesn't have associated variation yet, assigns a new one, stores it and returns it's id.\n */\n getAssociatedVariationId: (\n visitorCode: string,\n experimentId: number,\n ) => Result<number, KameleoonError>;\n /**\n * @method getAssignedVariations - obtains experiments with according variations that are *already assigned* and *stored* in the `variationStorage`. If `getAssociatedVariationId` had not been called before, there will be no variations to get.\n */\n getAssignedVariations(\n visitorCode: string,\n ): Result<ExperimentVariationsType, KameleoonError>;\n /**\n * @method getFeatureFlagVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getFeatureFlagVariation: (\n params: GetFeatureFlagVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n /**\n * @method getExperimentVariation - obtains variation for the experiment by calculating the variation for the visitor *without assigning* it to a visitor\n */\n getExperimentVariation: (\n visitorCode: string,\n experiment: ExperimentItemType,\n ) => Result<number, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private experiments: ExperimentItemType[];\n private storage: IStorage<VariationDataType>;\n\n constructor(\n experiments: ExperimentItemType[],\n externalStorage: IStorage<VariationDataType>,\n ) {\n this.experiments = experiments;\n this.storage = externalStorage;\n }\n\n public getAssociatedVariationId = (\n visitorCode: string,\n experimentId: number,\n ): Result<number, KameleoonError> => {\n // TODO:\n // --- Variation from storage is not checked anymore\n // --- If nothing changes the commented code should be deleted\n // along with the `Variation` class and according tests/types\n // --- Mind `todo` in `getAssociatedVariationId.spec.ts`\n //\n // let associatedVariation: VariationType | undefined;\n\n // this.storage.read().and((data) => {\n // associatedVariation = data?.[visitorCode]?.[experimentId];\n // });\n\n const experiment = this.experiments.find(\n (experiment) => experiment.id === String(experimentId),\n );\n\n if (!experiment) {\n return Err(\n new KameleoonError(\n KameleoonException.ExperimentConfigurationNotFound,\n experimentId,\n visitorCode,\n ),\n );\n }\n\n // const variation = new Variation(associatedVariation);\n\n // if (variation.isValid(experiment?.respoolTime)) {\n // return Ok(variation.id);\n // }\n\n return this.assignVariation(visitorCode, experiment);\n };\n\n public getAssignedVariations(\n visitorCode: string,\n ): Result<ExperimentVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const experiments = result.data[visitorCode];\n\n if (!experiments) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(experiments);\n }\n\n public getFeatureFlagVariation({\n visitorCode,\n featureFlag,\n targetingData,\n withAssignment = false,\n }: GetFeatureFlagVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n const validateResult = Utilities.validateVisitorCode(visitorCode);\n\n if (!validateResult.ok) {\n return Err(validateResult.error);\n }\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n // --- Check targeting ---\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.obtainFeatureFlagHashDouble({\n visitorCode,\n respoolTime,\n campaignId: String(id),\n });\n\n if (ruleHash <= exposition) {\n let totalDeviation = 0;\n\n const variationHash = Hasher.obtainFeatureFlagHashDouble({\n visitorCode,\n respoolTime,\n campaignId: String(experimentId),\n });\n\n for (const variation of variationByExposition) {\n totalDeviation += variation.exposition;\n\n if (variationHash <= totalDeviation) {\n // --- Note ---\n // For the `RuleType.EXPERIMENTATION` variation assignment must happen without\n // calculating experiment deviation\n if (rule.type === RuleType.EXPERIMENTATION && withAssignment) {\n this.updateStorageData({\n visitorCode,\n experimentId: String(experimentId),\n // --- Note ---\n // For `RuleType.EXPERIMENTATION` `variationId` can not be null\n variationId: variation.variationId as number,\n });\n }\n\n const { exposition, ...restParameters } = variation;\n\n return Ok({\n ...restParameters,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n });\n }\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n break;\n }\n }\n\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n });\n }\n\n public getExperimentVariation(\n visitorCode: string,\n experiment: ExperimentItemType,\n ): Result<number, KameleoonError> {\n const { id, respoolTime, deviations } = experiment;\n\n const hashDouble = Hasher.obtainExperimentHashDouble({\n visitorCode,\n campaignId: id,\n respoolTime,\n });\n\n let isUnallocated = true;\n let totalDeviation = 0;\n let resultVariationId = 0;\n\n for (const deviation of deviations) {\n totalDeviation += deviation.value;\n\n if (totalDeviation >= hashDouble) {\n // --- Note ---\n // If sum of all variations is less than 1 (100%), then there is a chance\n // user will end up outside of any variation\n isUnallocated = false;\n // --- Note ---\n // 'origin' is the default `variationId`, it must return id of 0\n if (deviation.variationId !== 'origin') {\n resultVariationId = Number(deviation.variationId);\n }\n\n break;\n }\n }\n\n if (isUnallocated) {\n return Err(\n new KameleoonError(KameleoonException.NotAllocated, visitorCode),\n );\n }\n\n return Ok(resultVariationId);\n }\n\n private assignVariation(\n visitorCode: string,\n experiment: ExperimentItemType,\n ): Result<number, KameleoonError> {\n const variationResult = this.getExperimentVariation(\n visitorCode,\n experiment,\n );\n\n if (!variationResult.ok) {\n return variationResult;\n }\n\n const result = this.updateStorageData({\n visitorCode,\n experimentId: experiment.id,\n variationId: variationResult.data,\n });\n\n if (!result.ok) {\n return result;\n }\n\n return Ok(variationResult.data);\n }\n\n private updateStorageData({\n visitorCode,\n experimentId,\n variationId,\n }: UpdateStorageParamsType): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n const updatedVariationData: VariationDataType = result.ok\n ? result.data\n : {};\n\n const updatedVariation = {\n variationId,\n assignmentDate: new Date().toString(),\n };\n\n if (updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode][experimentId] = updatedVariation;\n } else {\n updatedVariationData[visitorCode] = {\n [experimentId]: updatedVariation,\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n\n // --- TODO: commented out in case of future logic rework ---\n // --- Mind: `variationId` could cause the `undefined` issue ---\n // --- Reference: https://development.kameleoon.net/sdk/javascript-sdk-packages/-/merge_requests/89 ---\n // private getAssignedRuleVariation(\n // visitorCode: string,\n // rule: RuleItemType,\n // ): Result<GetAssignedRuleVariationResultType, KameleoonError> {\n // const emptyVariation: Omit<VariationByExpositionType, 'exposition'> = {\n // variationId: null,\n // variationKey: '',\n // };\n // const { experimentId, variationByExposition } = rule;\n\n // const variationsResult = this.getAssignedVariations(visitorCode);\n\n // // --- Note ---\n // // If there is an error, we just want to skip seeking\n // // for variation in the storage, not throw an error\n // if (!variationsResult.ok) {\n // return Ok(emptyVariation);\n // }\n\n // const variations = variationsResult.data;\n\n // if (\n // experimentId &&\n // typeof variations[experimentId].variationId !== undefined\n // ) {\n // const id = variations[experimentId].variationId;\n // const featureFlagVariation = variationByExposition.find(\n // (item) => item.variationId == id,\n // );\n\n // if (!featureFlagVariation) {\n // // --- Note ---\n // // This error is not described for public methods as\n // // it serves internal purpose of checking whether\n // // the persistent variation has been updated and should be re-allocated\n // return Err(new KameleoonError(KameleoonException.DataInconsistency));\n // }\n\n // const { exposition, ...restParameters } = featureFlagVariation;\n\n // return Ok({ ...restParameters });\n // }\n\n // return Ok(emptyVariation);\n // }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kameleoon/javascript-sdk-core",
3
- "version": "2.2.1",
3
+ "version": "2.4.0",
4
4
  "description": "Kameleoon JS SDK Core",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",