@kameleoon/javascript-sdk-core 2.3.0 → 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.
- package/dist/campaignConfiguration/campaignConfiguration.d.ts +2 -2
- package/dist/campaignConfiguration/campaignConfiguration.js +21 -5
- package/dist/campaignConfiguration/campaignConfiguration.js.map +1 -1
- package/dist/campaignConfiguration/types.d.ts +4 -0
- package/dist/campaignConfiguration/types.js.map +1 -1
- package/dist/clientSettings/clientSettings.js +1 -1
- package/dist/clientSettings/clientSettings.js.map +1 -1
- package/dist/eventSource/externalEventSource.js +1 -1
- package/dist/eventSource/externalEventSource.js.map +1 -1
- package/dist/kameleoonClient.d.ts +18 -5
- package/dist/kameleoonClient.js +29 -20
- package/dist/kameleoonClient.js.map +1 -1
- package/dist/requester/constants.d.ts +4 -3
- package/dist/requester/constants.js +16 -8
- package/dist/requester/constants.js.map +1 -1
- package/dist/requester/index.d.ts +2 -2
- package/dist/requester/index.js +12 -0
- package/dist/requester/index.js.map +1 -1
- package/dist/requester/requester.d.ts +2 -1
- package/dist/requester/requester.js +10 -2
- package/dist/requester/requester.js.map +1 -1
- package/dist/requester/types.d.ts +27 -2
- package/dist/requester/types.js +2 -2
- package/dist/requester/types.js.map +1 -1
- package/dist/utilities/utilities.d.ts +3 -0
- package/dist/utilities/utilities.js +28 -0
- package/dist/utilities/utilities.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@ import { KameleoonDataType } from '../kameleoonData';
|
|
|
5
5
|
import { TargetingDataType } from '../targeting';
|
|
6
6
|
import { IExternalEventSourceConstructor } from '../eventSource';
|
|
7
7
|
interface ICampaignConfiguration {
|
|
8
|
-
initialize: (eventSource: IExternalEventSourceConstructor) => Promise<Result<void, KameleoonError>>;
|
|
8
|
+
initialize: (eventSource: IExternalEventSourceConstructor, useCache?: boolean) => Promise<Result<void, KameleoonError>>;
|
|
9
9
|
addTargetingData: (visitorCode: string, ...data: KameleoonDataType[]) => Result<void, KameleoonError>;
|
|
10
10
|
getUnsentData: (visitorCode: string) => KameleoonDataType[];
|
|
11
11
|
clearUnsentData: (visitorCode: string) => void;
|
|
@@ -29,7 +29,7 @@ export declare class CampaignConfiguration implements ICampaignConfiguration {
|
|
|
29
29
|
private eventSource?;
|
|
30
30
|
private externalClientConfiguration?;
|
|
31
31
|
constructor({ settings, storage, requester, externalClientConfiguration, targetingCleanupInterval, }: CampaignConfigurationParametersType);
|
|
32
|
-
initialize(externalEventSource: IExternalEventSourceConstructor): Promise<Result<void, KameleoonError>>;
|
|
32
|
+
initialize(externalEventSource: IExternalEventSourceConstructor, useCache?: boolean): Promise<Result<void, KameleoonError>>;
|
|
33
33
|
addTargetingData(visitorCode: string, ...data: KameleoonDataType[]): Result<void, KameleoonError>;
|
|
34
34
|
getUnsentData(visitorCode: string): KameleoonDataType[];
|
|
35
35
|
clearUnsentData(visitorCode: string): void;
|
|
@@ -55,12 +55,14 @@ class CampaignConfiguration {
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
async initialize(externalEventSource) {
|
|
58
|
+
async initialize(externalEventSource, useCache) {
|
|
59
59
|
const shouldUpdate = this.checkShouldUpdate();
|
|
60
60
|
|
|
61
61
|
// --- Initial data fetch ---
|
|
62
62
|
if (shouldUpdate) {
|
|
63
|
-
const updateResult = await this.updateClientConfiguration(
|
|
63
|
+
const updateResult = await this.updateClientConfiguration({
|
|
64
|
+
useCache
|
|
65
|
+
});
|
|
64
66
|
if (!updateResult.ok) {
|
|
65
67
|
return updateResult;
|
|
66
68
|
}
|
|
@@ -75,7 +77,9 @@ class CampaignConfiguration {
|
|
|
75
77
|
}
|
|
76
78
|
this.eventSource = new _eventSource.ExternalEventSource(this.settings.siteCode, externalEventSource);
|
|
77
79
|
const updateEventCallback = _timeStamp => {
|
|
78
|
-
this.updateClientConfiguration(
|
|
80
|
+
this.updateClientConfiguration({
|
|
81
|
+
useCache
|
|
82
|
+
});
|
|
79
83
|
if (this.configurationUpdateCallback) {
|
|
80
84
|
this.configurationUpdateCallback();
|
|
81
85
|
}
|
|
@@ -96,7 +100,9 @@ class CampaignConfiguration {
|
|
|
96
100
|
// Same as targeting data interval we don't want to make failed configuration
|
|
97
101
|
// retrieval recoverable
|
|
98
102
|
try {
|
|
99
|
-
this.updateConfigurationIntervalId = setInterval(this.updateClientConfiguration.bind(this)
|
|
103
|
+
this.updateConfigurationIntervalId = setInterval(() => this.updateClientConfiguration.bind(this)({
|
|
104
|
+
useCache
|
|
105
|
+
}), this.settings.updateInterval);
|
|
100
106
|
} catch (err) {
|
|
101
107
|
if (this.updateConfigurationIntervalId) {
|
|
102
108
|
clearInterval(this.updateConfigurationIntervalId);
|
|
@@ -208,7 +214,10 @@ class CampaignConfiguration {
|
|
|
208
214
|
this.lastUpdate = new Date(Date.parse(lastUpdate));
|
|
209
215
|
}
|
|
210
216
|
}
|
|
211
|
-
async updateClientConfiguration(
|
|
217
|
+
async updateClientConfiguration({
|
|
218
|
+
useCache = false,
|
|
219
|
+
timeStamp
|
|
220
|
+
} = {}) {
|
|
212
221
|
// --- Note ---
|
|
213
222
|
// if `externalClientConfiguration` is passed, fetching is disabled and passed config is used instead
|
|
214
223
|
if (this.externalClientConfiguration) {
|
|
@@ -228,6 +237,13 @@ class CampaignConfiguration {
|
|
|
228
237
|
} else {
|
|
229
238
|
const clientConfigurationResult = await this.requester.getClientConfiguration(timeStamp);
|
|
230
239
|
if (!clientConfigurationResult.ok) {
|
|
240
|
+
const {
|
|
241
|
+
featureFlags,
|
|
242
|
+
experiments
|
|
243
|
+
} = this.configurationData;
|
|
244
|
+
if (useCache && featureFlags.length && experiments.length) {
|
|
245
|
+
return (0, _tsRes.Ok)(true);
|
|
246
|
+
}
|
|
231
247
|
return clientConfigurationResult;
|
|
232
248
|
}
|
|
233
249
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"campaignConfiguration.js","names":["_tsRes","require","_constants","_eventSource","_types","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","CampaignConfiguration","constructor","settings","storage","requester","externalClientConfiguration","targetingCleanupInterval","DEFAULT_CAMPAIGN_CONFIGURATION","targetingData","configurationData","lastUpdate","Date","readStorageData","cleanupIntervalMinutes","targetingDataIntervalId","setInterval","cleanupOutdatedTargetingData","Milliseconds","Minute","err","clearInterval","initialize","externalEventSource","shouldUpdate","checkShouldUpdate","updateResult","updateClientConfiguration","ok","configuration","realTimeUpdate","updateConfigurationIntervalId","eventSource","ExternalEventSource","siteCode","updateEventCallback","_timeStamp","configurationUpdateCallback","open","close","bind","updateInterval","Ok","addTargetingData","visitorCode","data","dataItem","lastActivityTime","now","result","updateStorageData","unsentTargetingData","getUnsentData","unsentDataItem","clearUnsentData","onConfigurationUpdate","callback","storedTargetingData","experiments","featureFlags","lastUpdateTime","getTime","updateWindowEdge","currentTime","resultTargetingData","entries","resultValue","item","isDataExpired","SESSION_DURATION","throw","read","kameleoonTargetingData","kameleoonConfiguration","parse","timeStamp","featureFlagConfigurations","clientConfigurationResult","getClientConfiguration","toString","write","exports"],"sources":["../../src/campaignConfiguration/campaignConfiguration.ts"],"sourcesContent":["import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from '../kameleoonError/kameleoonError';\nimport { ClientSettingsType } from '../clientSettings/types';\nimport { DEFAULT_CAMPAIGN_CONFIGURATION, SESSION_DURATION } from './constants';\nimport {\n CampaignConfigurationParametersType,\n ConfigurationDataType,\n ConfigurationType,\n ExperimentItemType,\n FeatureFlagType,\n UnsentTargetingDataType,\n} from './types';\nimport { KameleoonDataType } from '../kameleoonData';\nimport { Requester, GetClientConfigurationResultType } from '../requester';\nimport { TargetingDataItemType, TargetingDataType } from '../targeting';\nimport { IStorage, ClientDataType } from '../storage';\nimport {\n ExternalEventSource,\n IEventSource,\n IExternalEventSourceConstructor,\n} from '../eventSource';\nimport { Milliseconds } from '../types';\n\ninterface ICampaignConfiguration {\n initialize: (\n eventSource: IExternalEventSourceConstructor,\n ) => Promise<Result<void, KameleoonError>>;\n addTargetingData: (\n visitorCode: string,\n ...data: KameleoonDataType[]\n ) => Result<void, KameleoonError>;\n getUnsentData: (visitorCode: string) => KameleoonDataType[];\n clearUnsentData: (visitorCode: string) => void;\n onConfigurationUpdate: (callback: () => void) => void;\n readonly experiments: ExperimentItemType[];\n readonly storedTargetingData: TargetingDataType;\n readonly featureFlags: FeatureFlagType[];\n readonly configuration: ConfigurationType;\n}\n\nexport class CampaignConfiguration implements ICampaignConfiguration {\n private configurationUpdateCallback?: () => void;\n private updateConfigurationIntervalId: NodeJS.Timer | null = null;\n private targetingDataIntervalId: NodeJS.Timer | null = null;\n private unsentTargetingData: UnsentTargetingDataType = {};\n private targetingData: TargetingDataType =\n DEFAULT_CAMPAIGN_CONFIGURATION.targetingData;\n private configurationData: ConfigurationDataType =\n DEFAULT_CAMPAIGN_CONFIGURATION.configurationData;\n private settings: ClientSettingsType;\n private lastUpdate: Date;\n private storage: IStorage<ClientDataType>;\n private requester: Requester;\n private eventSource?: IEventSource;\n private externalClientConfiguration?: GetClientConfigurationResultType;\n\n constructor({\n settings,\n storage,\n requester,\n externalClientConfiguration,\n targetingCleanupInterval,\n }: CampaignConfigurationParametersType) {\n this.requester = requester;\n this.settings = settings;\n this.lastUpdate = new Date();\n this.storage = storage;\n this.readStorageData();\n this.externalClientConfiguration = externalClientConfiguration;\n\n if (targetingCleanupInterval) {\n const cleanupIntervalMinutes =\n targetingCleanupInterval < 0 ? 1 : targetingCleanupInterval;\n\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.targetingDataIntervalId = setInterval(\n () =>\n this.cleanupOutdatedTargetingData.call(this, this.targetingData),\n cleanupIntervalMinutes * Milliseconds.Minute,\n );\n } catch (err) {\n if (this.targetingDataIntervalId) {\n clearInterval(this.targetingDataIntervalId);\n }\n\n throw err;\n }\n }\n }\n\n public async initialize(\n externalEventSource: IExternalEventSourceConstructor,\n ): Promise<Result<void, KameleoonError>> {\n const shouldUpdate = this.checkShouldUpdate();\n\n // --- Initial data fetch ---\n if (shouldUpdate) {\n const updateResult = await this.updateClientConfiguration();\n\n if (!updateResult.ok) {\n return updateResult;\n }\n }\n\n // --- Note ---\n // Interval is cleaned up in case real time update\n // was activated while initialized client already exists\n if (\n this.configurationData.configuration.realTimeUpdate &&\n !this.externalClientConfiguration\n ) {\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n\n this.eventSource = new ExternalEventSource(\n this.settings.siteCode,\n externalEventSource,\n );\n\n const updateEventCallback = (_timeStamp: number) => {\n this.updateClientConfiguration();\n\n if (this.configurationUpdateCallback) {\n this.configurationUpdateCallback();\n }\n };\n\n this.eventSource.open(updateEventCallback);\n } else {\n // --- Note ---\n // Event Source is cleaned up in case real time update\n // was disabled while initialized client already exists\n if (this.eventSource) {\n this.eventSource.close();\n }\n\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n\n // --- Note ---\n // Same as targeting data interval we don't want to make failed configuration\n // retrieval recoverable\n try {\n this.updateConfigurationIntervalId = setInterval(\n this.updateClientConfiguration.bind(this),\n this.settings.updateInterval,\n );\n } catch (err) {\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n\n throw err;\n }\n }\n\n return Ok();\n }\n\n public addTargetingData(\n visitorCode: string,\n ...data: KameleoonDataType[]\n ): Result<void, KameleoonError> {\n if (!(visitorCode in this.targetingData)) {\n this.targetingData[visitorCode] = [];\n }\n\n data.forEach((dataItem) => {\n // --- Note ---\n // Previous check excludes the failure possibility\n (this.targetingData[visitorCode] as TargetingDataItemType[]).push({\n data: dataItem.data,\n lastActivityTime: Date.now(),\n });\n });\n\n // --- Note ---\n // `targetingData` should not refresh `lastUpdate` time\n const result = this.updateStorageData(this.lastUpdate);\n\n if (result.ok) {\n data.forEach((dataItem) => {\n if (!this.unsentTargetingData[visitorCode]) {\n this.unsentTargetingData[visitorCode] = [];\n }\n\n this.unsentTargetingData[visitorCode].push(dataItem);\n });\n }\n\n return result;\n }\n\n public getUnsentData(visitorCode: string): KameleoonDataType[] {\n const unsentDataItem = this.unsentTargetingData[visitorCode];\n\n if (!unsentDataItem) {\n return [];\n }\n\n return unsentDataItem;\n }\n\n public clearUnsentData(visitorCode: string): void {\n this.unsentTargetingData[visitorCode] = [];\n }\n\n public onConfigurationUpdate(callback: () => void): void {\n this.configurationUpdateCallback = callback;\n }\n\n get storedTargetingData(): TargetingDataType {\n return this.targetingData;\n }\n\n get experiments(): ExperimentItemType[] {\n return this.configurationData.experiments;\n }\n\n get featureFlags(): FeatureFlagType[] {\n return this.configurationData.featureFlags;\n }\n\n get configuration(): ConfigurationType {\n return this.configurationData.configuration;\n }\n\n private checkShouldUpdate(): boolean {\n const { featureFlags, experiments, configuration } = this.configurationData;\n const { updateInterval } = this.settings;\n\n if (!featureFlags.length && !experiments.length) {\n return true;\n }\n\n if (configuration.realTimeUpdate) {\n return true;\n }\n\n const lastUpdateTime = this.lastUpdate.getTime();\n const updateWindowEdge = Date.now() - updateInterval;\n\n return lastUpdateTime < updateWindowEdge;\n }\n\n private cleanupOutdatedTargetingData(data: TargetingDataType): void {\n const currentTime = Date.now();\n const resultTargetingData: TargetingDataType = { ...data };\n\n for (const [key, value] of Object.entries(resultTargetingData)) {\n if (value) {\n const resultValue = value.filter((item) => {\n const isDataExpired =\n item.lastActivityTime + SESSION_DURATION < currentTime;\n\n return isDataExpired;\n });\n\n resultTargetingData[key] = resultValue;\n } else {\n resultTargetingData[key] = [];\n }\n }\n\n this.targetingData = resultTargetingData;\n // --- Note ---\n // `targetingData` should not refresh `lastUpdate` time\n this.updateStorageData(this.lastUpdate).throw();\n }\n\n private readStorageData(): void {\n const result = this.storage.read();\n\n if (result.ok) {\n const { kameleoonTargetingData, kameleoonConfiguration, lastUpdate } =\n result.data;\n\n this.configurationData = kameleoonConfiguration;\n this.targetingData = kameleoonTargetingData;\n this.lastUpdate = new Date(Date.parse(lastUpdate));\n }\n }\n\n private async updateClientConfiguration(\n timeStamp?: number,\n ): Promise<Result<boolean, KameleoonError>> {\n // --- Note ---\n // if `externalClientConfiguration` is passed, fetching is disabled and passed config is used instead\n if (this.externalClientConfiguration) {\n // --- Note ---\n // `featureFlags` field is omitted (v1)\n // instead `featureFlagConfigurations` is used (v2)\n const { configuration, experiments, featureFlagConfigurations } =\n this.externalClientConfiguration;\n\n this.configurationData = {\n configuration,\n experiments,\n featureFlags: featureFlagConfigurations,\n };\n } else {\n const clientConfigurationResult =\n await this.requester.getClientConfiguration(timeStamp);\n\n if (!clientConfigurationResult.ok) {\n return clientConfigurationResult;\n }\n\n // --- Note ---\n // `featureFlags` field is omitted (v1)\n // instead `featureFlagConfigurations` is used (v2)\n const { configuration, experiments, featureFlagConfigurations } =\n clientConfigurationResult.data;\n\n this.configurationData = {\n configuration,\n experiments,\n featureFlags: featureFlagConfigurations,\n };\n }\n\n const result = this.updateStorageData(new Date());\n\n if (!result.ok) {\n return result;\n }\n\n return Ok(true);\n }\n\n private updateStorageData(lastUpdate: Date): Result<void, KameleoonError> {\n const data: ClientDataType = {\n kameleoonTargetingData: this.targetingData,\n kameleoonConfiguration: this.configurationData,\n lastUpdate: lastUpdate.toString(),\n };\n\n return this.storage.write(data);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"campaignConfiguration.js","names":["_tsRes","require","_constants","_eventSource","_types","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","CampaignConfiguration","constructor","settings","storage","requester","externalClientConfiguration","targetingCleanupInterval","DEFAULT_CAMPAIGN_CONFIGURATION","targetingData","configurationData","lastUpdate","Date","readStorageData","cleanupIntervalMinutes","targetingDataIntervalId","setInterval","cleanupOutdatedTargetingData","Milliseconds","Minute","err","clearInterval","initialize","externalEventSource","useCache","shouldUpdate","checkShouldUpdate","updateResult","updateClientConfiguration","ok","configuration","realTimeUpdate","updateConfigurationIntervalId","eventSource","ExternalEventSource","siteCode","updateEventCallback","_timeStamp","configurationUpdateCallback","open","close","bind","updateInterval","Ok","addTargetingData","visitorCode","data","dataItem","lastActivityTime","now","result","updateStorageData","unsentTargetingData","getUnsentData","unsentDataItem","clearUnsentData","onConfigurationUpdate","callback","storedTargetingData","experiments","featureFlags","lastUpdateTime","getTime","updateWindowEdge","currentTime","resultTargetingData","entries","resultValue","item","isDataExpired","SESSION_DURATION","throw","read","kameleoonTargetingData","kameleoonConfiguration","parse","timeStamp","featureFlagConfigurations","clientConfigurationResult","getClientConfiguration","toString","write","exports"],"sources":["../../src/campaignConfiguration/campaignConfiguration.ts"],"sourcesContent":["import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from '../kameleoonError/kameleoonError';\nimport { ClientSettingsType } from '../clientSettings/types';\nimport { DEFAULT_CAMPAIGN_CONFIGURATION, SESSION_DURATION } from './constants';\nimport {\n CampaignConfigurationParametersType,\n ConfigurationDataType,\n ConfigurationType,\n ExperimentItemType,\n FeatureFlagType,\n UnsentTargetingDataType,\n UpdateClientConfigurationParameters,\n} from './types';\nimport { KameleoonDataType } from '../kameleoonData';\nimport { Requester, GetClientConfigurationResultType } from '../requester';\nimport { TargetingDataItemType, TargetingDataType } from '../targeting';\nimport { IStorage, ClientDataType } from '../storage';\nimport {\n ExternalEventSource,\n IEventSource,\n IExternalEventSourceConstructor,\n} from '../eventSource';\nimport { Milliseconds } from '../types';\n\ninterface ICampaignConfiguration {\n initialize: (\n eventSource: IExternalEventSourceConstructor,\n useCache?: boolean,\n ) => Promise<Result<void, KameleoonError>>;\n addTargetingData: (\n visitorCode: string,\n ...data: KameleoonDataType[]\n ) => Result<void, KameleoonError>;\n getUnsentData: (visitorCode: string) => KameleoonDataType[];\n clearUnsentData: (visitorCode: string) => void;\n onConfigurationUpdate: (callback: () => void) => void;\n readonly experiments: ExperimentItemType[];\n readonly storedTargetingData: TargetingDataType;\n readonly featureFlags: FeatureFlagType[];\n readonly configuration: ConfigurationType;\n}\n\nexport class CampaignConfiguration implements ICampaignConfiguration {\n private configurationUpdateCallback?: () => void;\n private updateConfigurationIntervalId: NodeJS.Timer | null = null;\n private targetingDataIntervalId: NodeJS.Timer | null = null;\n private unsentTargetingData: UnsentTargetingDataType = {};\n private targetingData: TargetingDataType =\n DEFAULT_CAMPAIGN_CONFIGURATION.targetingData;\n private configurationData: ConfigurationDataType =\n DEFAULT_CAMPAIGN_CONFIGURATION.configurationData;\n private settings: ClientSettingsType;\n private lastUpdate: Date;\n private storage: IStorage<ClientDataType>;\n private requester: Requester;\n private eventSource?: IEventSource;\n private externalClientConfiguration?: GetClientConfigurationResultType;\n\n constructor({\n settings,\n storage,\n requester,\n externalClientConfiguration,\n targetingCleanupInterval,\n }: CampaignConfigurationParametersType) {\n this.requester = requester;\n this.settings = settings;\n this.lastUpdate = new Date();\n this.storage = storage;\n this.readStorageData();\n this.externalClientConfiguration = externalClientConfiguration;\n\n if (targetingCleanupInterval) {\n const cleanupIntervalMinutes =\n targetingCleanupInterval < 0 ? 1 : targetingCleanupInterval;\n\n // --- Note ---\n // We can not make delayed code execution recoverable, as it might lead\n // to targeting data storage size overflow\n try {\n this.targetingDataIntervalId = setInterval(\n () =>\n this.cleanupOutdatedTargetingData.call(this, this.targetingData),\n cleanupIntervalMinutes * Milliseconds.Minute,\n );\n } catch (err) {\n if (this.targetingDataIntervalId) {\n clearInterval(this.targetingDataIntervalId);\n }\n\n throw err;\n }\n }\n }\n\n public async initialize(\n externalEventSource: IExternalEventSourceConstructor,\n useCache?: boolean,\n ): Promise<Result<void, KameleoonError>> {\n const shouldUpdate = this.checkShouldUpdate();\n\n // --- Initial data fetch ---\n if (shouldUpdate) {\n const updateResult = await this.updateClientConfiguration({ useCache });\n\n if (!updateResult.ok) {\n return updateResult;\n }\n }\n\n // --- Note ---\n // Interval is cleaned up in case real time update\n // was activated while initialized client already exists\n if (\n this.configurationData.configuration.realTimeUpdate &&\n !this.externalClientConfiguration\n ) {\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n\n this.eventSource = new ExternalEventSource(\n this.settings.siteCode,\n externalEventSource,\n );\n\n const updateEventCallback = (_timeStamp: number) => {\n this.updateClientConfiguration({ useCache });\n\n if (this.configurationUpdateCallback) {\n this.configurationUpdateCallback();\n }\n };\n\n this.eventSource.open(updateEventCallback);\n } else {\n // --- Note ---\n // Event Source is cleaned up in case real time update\n // was disabled while initialized client already exists\n if (this.eventSource) {\n this.eventSource.close();\n }\n\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n\n // --- Note ---\n // Same as targeting data interval we don't want to make failed configuration\n // retrieval recoverable\n try {\n this.updateConfigurationIntervalId = setInterval(\n () => this.updateClientConfiguration.bind(this)({ useCache }),\n this.settings.updateInterval,\n );\n } catch (err) {\n if (this.updateConfigurationIntervalId) {\n clearInterval(this.updateConfigurationIntervalId);\n }\n\n throw err;\n }\n }\n\n return Ok();\n }\n\n public addTargetingData(\n visitorCode: string,\n ...data: KameleoonDataType[]\n ): Result<void, KameleoonError> {\n if (!(visitorCode in this.targetingData)) {\n this.targetingData[visitorCode] = [];\n }\n\n data.forEach((dataItem) => {\n // --- Note ---\n // Previous check excludes the failure possibility\n (this.targetingData[visitorCode] as TargetingDataItemType[]).push({\n data: dataItem.data,\n lastActivityTime: Date.now(),\n });\n });\n\n // --- Note ---\n // `targetingData` should not refresh `lastUpdate` time\n const result = this.updateStorageData(this.lastUpdate);\n\n if (result.ok) {\n data.forEach((dataItem) => {\n if (!this.unsentTargetingData[visitorCode]) {\n this.unsentTargetingData[visitorCode] = [];\n }\n\n this.unsentTargetingData[visitorCode].push(dataItem);\n });\n }\n\n return result;\n }\n\n public getUnsentData(visitorCode: string): KameleoonDataType[] {\n const unsentDataItem = this.unsentTargetingData[visitorCode];\n\n if (!unsentDataItem) {\n return [];\n }\n\n return unsentDataItem;\n }\n\n public clearUnsentData(visitorCode: string): void {\n this.unsentTargetingData[visitorCode] = [];\n }\n\n public onConfigurationUpdate(callback: () => void): void {\n this.configurationUpdateCallback = callback;\n }\n\n get storedTargetingData(): TargetingDataType {\n return this.targetingData;\n }\n\n get experiments(): ExperimentItemType[] {\n return this.configurationData.experiments;\n }\n\n get featureFlags(): FeatureFlagType[] {\n return this.configurationData.featureFlags;\n }\n\n get configuration(): ConfigurationType {\n return this.configurationData.configuration;\n }\n\n private checkShouldUpdate(): boolean {\n const { featureFlags, experiments, configuration } = this.configurationData;\n const { updateInterval } = this.settings;\n\n if (!featureFlags.length && !experiments.length) {\n return true;\n }\n\n if (configuration.realTimeUpdate) {\n return true;\n }\n\n const lastUpdateTime = this.lastUpdate.getTime();\n const updateWindowEdge = Date.now() - updateInterval;\n\n return lastUpdateTime < updateWindowEdge;\n }\n\n private cleanupOutdatedTargetingData(data: TargetingDataType): void {\n const currentTime = Date.now();\n const resultTargetingData: TargetingDataType = { ...data };\n\n for (const [key, value] of Object.entries(resultTargetingData)) {\n if (value) {\n const resultValue = value.filter((item) => {\n const isDataExpired =\n item.lastActivityTime + SESSION_DURATION < currentTime;\n\n return isDataExpired;\n });\n\n resultTargetingData[key] = resultValue;\n } else {\n resultTargetingData[key] = [];\n }\n }\n\n this.targetingData = resultTargetingData;\n // --- Note ---\n // `targetingData` should not refresh `lastUpdate` time\n this.updateStorageData(this.lastUpdate).throw();\n }\n\n private readStorageData(): void {\n const result = this.storage.read();\n\n if (result.ok) {\n const { kameleoonTargetingData, kameleoonConfiguration, lastUpdate } =\n result.data;\n\n this.configurationData = kameleoonConfiguration;\n this.targetingData = kameleoonTargetingData;\n this.lastUpdate = new Date(Date.parse(lastUpdate));\n }\n }\n\n private async updateClientConfiguration({\n useCache = false,\n timeStamp,\n }: UpdateClientConfigurationParameters = {}): Promise<\n Result<boolean, KameleoonError>\n > {\n // --- Note ---\n // if `externalClientConfiguration` is passed, fetching is disabled and passed config is used instead\n if (this.externalClientConfiguration) {\n // --- Note ---\n // `featureFlags` field is omitted (v1)\n // instead `featureFlagConfigurations` is used (v2)\n const { configuration, experiments, featureFlagConfigurations } =\n this.externalClientConfiguration;\n\n this.configurationData = {\n configuration,\n experiments,\n featureFlags: featureFlagConfigurations,\n };\n } else {\n const clientConfigurationResult =\n await this.requester.getClientConfiguration(timeStamp);\n\n if (!clientConfigurationResult.ok) {\n const { featureFlags, experiments } = this.configurationData;\n\n if (useCache && featureFlags.length && experiments.length) {\n return Ok(true);\n }\n\n return clientConfigurationResult;\n }\n\n // --- Note ---\n // `featureFlags` field is omitted (v1)\n // instead `featureFlagConfigurations` is used (v2)\n const { configuration, experiments, featureFlagConfigurations } =\n clientConfigurationResult.data;\n\n this.configurationData = {\n configuration,\n experiments,\n featureFlags: featureFlagConfigurations,\n };\n }\n\n const result = this.updateStorageData(new Date());\n\n if (!result.ok) {\n return result;\n }\n\n return Ok(true);\n }\n\n private updateStorageData(lastUpdate: Date): Result<void, KameleoonError> {\n const data: ClientDataType = {\n kameleoonTargetingData: this.targetingData,\n kameleoonConfiguration: this.configurationData,\n lastUpdate: lastUpdate.toString(),\n };\n\n return this.storage.write(data);\n }\n}\n"],"mappings":"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"}
|
|
@@ -4,6 +4,10 @@ import { Requester, GetClientConfigurationResultType } from '../requester';
|
|
|
4
4
|
import { ClientDataType, IStorage } from '../storage';
|
|
5
5
|
import { SegmentType, TargetingDataType } from '../targeting';
|
|
6
6
|
import { VariableType } from '../types';
|
|
7
|
+
export type UpdateClientConfigurationParameters = {
|
|
8
|
+
timeStamp?: number;
|
|
9
|
+
useCache?: boolean;
|
|
10
|
+
};
|
|
7
11
|
export type ScheduleType = {
|
|
8
12
|
dateStart: string;
|
|
9
13
|
dateEnd: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["ExperimentType","exports","RuleType","FeatureFlagSdkLanguageType","FeatureStatus","ExperimentStatus"],"sources":["../../src/campaignConfiguration/types.ts"],"sourcesContent":["import { ClientSettingsType } from '../clientSettings';\nimport { KameleoonDataType } from '../kameleoonData';\nimport { Requester, GetClientConfigurationResultType } from '../requester';\nimport { ClientDataType, IStorage } from '../storage';\nimport { SegmentType, TargetingDataType } from '../targeting';\nimport { VariableType } from '../types';\n\nexport type ScheduleType = {\n dateStart: string;\n dateEnd: string;\n};\n\nexport type JSONValue =\n | string\n | number\n | boolean\n | { [x: string]: JSONValue }\n | JSONValue[];\n\nexport type JSONType = Record<string | number | symbol, JSONValue> | null;\n\nexport enum ExperimentType {\n CLASSIC = 'CLASSIC',\n SERVER_SIDE = 'SERVER_SIDE',\n DEVELOPER = 'DEVELOPER',\n MVT = 'MVT',\n HYBRID = 'HYBRID',\n}\n\nexport enum RuleType {\n PROGRESSIVE_DELIVERY = 'PROGRESSIVE_DELIVERY',\n TARGETED_DELIVERY = 'TARGETED_DELIVERY',\n EXPERIMENTATION = 'EXPERIMENTATION',\n}\n\nexport enum FeatureFlagSdkLanguageType {\n ANDROID = 'ANDROID',\n SWIFT = 'SWIFT',\n JAVA = 'JAVA',\n CSHARP = 'CSHARP',\n NODEJS = 'NODEJS',\n PHP = 'PHP',\n RUBY = 'RUBY',\n GO = 'GO',\n FLUTTER = 'FLUTTER',\n REACTJS = 'REACTJS',\n}\n\nexport enum FeatureStatus {\n ACTIVATED = 'ACTIVATED',\n DEACTIVATED = 'DEACTIVATED',\n SCHEDULED = 'SCHEDULED',\n}\n\nexport type ExperimentItemType = {\n id: string;\n name: string;\n type: ExperimentType;\n siteId: string;\n siteCode: string;\n status: ExperimentStatus;\n siteEnabled: boolean;\n variations: ExperimentVariationType[];\n deviations: DeviationType[];\n respoolTime: RespoolTimeType[];\n segment: SegmentType | null;\n};\n\nexport type ExperimentVariationType = {\n id: string;\n customJson: string;\n};\n\nexport type DeviationType = {\n variationId: string;\n value: number;\n};\n\nexport type RespoolTimeType = {\n variationId: string;\n value: number;\n};\n\nexport enum ExperimentStatus {\n DRAFT = 'DRAFT',\n ACTIVE = 'ACTIVE',\n PAUSED = 'PAUSED',\n SCHEDULED = 'SCHEDULED',\n STOPPED = 'STOPPED',\n USED_AS_PERSONALIZATION = 'USED_AS_PERSONALIZATION',\n DEVIATED = 'DEVIATED',\n}\n\nexport type FeatureFlagType = {\n id: number;\n featureKey: string;\n variations: FeatureVariationType[];\n defaultVariationKey: string;\n rules: RuleItemType[];\n};\n\nexport type FeatureVariationType = {\n key: string;\n variables: FeatureVariableType[];\n};\n\nexport type FeatureVariableType = {\n key: string;\n type: VariableType;\n value: string | number | boolean;\n};\n\nexport type RuleItemType = {\n type: RuleType;\n id: number;\n respoolTime: number | null;\n order: number;\n exposition: number;\n experimentId: number;\n variationByExposition: VariationByExpositionType[];\n segment: SegmentType | null;\n};\n\nexport type VariationByExpositionType = {\n variationKey: string;\n variationId: number | null;\n exposition: number;\n};\n\nexport type ConfigurationDataType = {\n experiments: ExperimentItemType[];\n featureFlags: FeatureFlagType[];\n configuration: ConfigurationType;\n};\n\nexport type ConfigurationType = {\n realTimeUpdate: boolean;\n};\n\nexport type CampaignConfigurationType = {\n targetingData: TargetingDataType;\n configurationData: ConfigurationDataType;\n};\n\nexport type UnsentTargetingDataType = {\n [visitorCode: string]: KameleoonDataType[];\n};\n\nexport type CampaignConfigurationParametersType = {\n settings: ClientSettingsType;\n storage: IStorage<ClientDataType>;\n requester: Requester;\n externalClientConfiguration?: GetClientConfigurationResultType;\n targetingCleanupInterval?: number;\n};\n"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"types.js","names":["ExperimentType","exports","RuleType","FeatureFlagSdkLanguageType","FeatureStatus","ExperimentStatus"],"sources":["../../src/campaignConfiguration/types.ts"],"sourcesContent":["import { ClientSettingsType } from '../clientSettings';\nimport { KameleoonDataType } from '../kameleoonData';\nimport { Requester, GetClientConfigurationResultType } from '../requester';\nimport { ClientDataType, IStorage } from '../storage';\nimport { SegmentType, TargetingDataType } from '../targeting';\nimport { VariableType } from '../types';\n\nexport type UpdateClientConfigurationParameters = {\n timeStamp?: number;\n useCache?: boolean;\n};\n\nexport type ScheduleType = {\n dateStart: string;\n dateEnd: string;\n};\n\nexport type JSONValue =\n | string\n | number\n | boolean\n | { [x: string]: JSONValue }\n | JSONValue[];\n\nexport type JSONType = Record<string | number | symbol, JSONValue> | null;\n\nexport enum ExperimentType {\n CLASSIC = 'CLASSIC',\n SERVER_SIDE = 'SERVER_SIDE',\n DEVELOPER = 'DEVELOPER',\n MVT = 'MVT',\n HYBRID = 'HYBRID',\n}\n\nexport enum RuleType {\n PROGRESSIVE_DELIVERY = 'PROGRESSIVE_DELIVERY',\n TARGETED_DELIVERY = 'TARGETED_DELIVERY',\n EXPERIMENTATION = 'EXPERIMENTATION',\n}\n\nexport enum FeatureFlagSdkLanguageType {\n ANDROID = 'ANDROID',\n SWIFT = 'SWIFT',\n JAVA = 'JAVA',\n CSHARP = 'CSHARP',\n NODEJS = 'NODEJS',\n PHP = 'PHP',\n RUBY = 'RUBY',\n GO = 'GO',\n FLUTTER = 'FLUTTER',\n REACTJS = 'REACTJS',\n}\n\nexport enum FeatureStatus {\n ACTIVATED = 'ACTIVATED',\n DEACTIVATED = 'DEACTIVATED',\n SCHEDULED = 'SCHEDULED',\n}\n\nexport type ExperimentItemType = {\n id: string;\n name: string;\n type: ExperimentType;\n siteId: string;\n siteCode: string;\n status: ExperimentStatus;\n siteEnabled: boolean;\n variations: ExperimentVariationType[];\n deviations: DeviationType[];\n respoolTime: RespoolTimeType[];\n segment: SegmentType | null;\n};\n\nexport type ExperimentVariationType = {\n id: string;\n customJson: string;\n};\n\nexport type DeviationType = {\n variationId: string;\n value: number;\n};\n\nexport type RespoolTimeType = {\n variationId: string;\n value: number;\n};\n\nexport enum ExperimentStatus {\n DRAFT = 'DRAFT',\n ACTIVE = 'ACTIVE',\n PAUSED = 'PAUSED',\n SCHEDULED = 'SCHEDULED',\n STOPPED = 'STOPPED',\n USED_AS_PERSONALIZATION = 'USED_AS_PERSONALIZATION',\n DEVIATED = 'DEVIATED',\n}\n\nexport type FeatureFlagType = {\n id: number;\n featureKey: string;\n variations: FeatureVariationType[];\n defaultVariationKey: string;\n rules: RuleItemType[];\n};\n\nexport type FeatureVariationType = {\n key: string;\n variables: FeatureVariableType[];\n};\n\nexport type FeatureVariableType = {\n key: string;\n type: VariableType;\n value: string | number | boolean;\n};\n\nexport type RuleItemType = {\n type: RuleType;\n id: number;\n respoolTime: number | null;\n order: number;\n exposition: number;\n experimentId: number;\n variationByExposition: VariationByExpositionType[];\n segment: SegmentType | null;\n};\n\nexport type VariationByExpositionType = {\n variationKey: string;\n variationId: number | null;\n exposition: number;\n};\n\nexport type ConfigurationDataType = {\n experiments: ExperimentItemType[];\n featureFlags: FeatureFlagType[];\n configuration: ConfigurationType;\n};\n\nexport type ConfigurationType = {\n realTimeUpdate: boolean;\n};\n\nexport type CampaignConfigurationType = {\n targetingData: TargetingDataType;\n configurationData: ConfigurationDataType;\n};\n\nexport type UnsentTargetingDataType = {\n [visitorCode: string]: KameleoonDataType[];\n};\n\nexport type CampaignConfigurationParametersType = {\n settings: ClientSettingsType;\n storage: IStorage<ClientDataType>;\n requester: Requester;\n externalClientConfiguration?: GetClientConfigurationResultType;\n targetingCleanupInterval?: number;\n};\n"],"mappings":";;;;;;IA0BYA,cAAc,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA;AAAAC,OAAA,CAAAD,cAAA,GAAAA,cAAA;AAAA,IAQdE,QAAQ,0BAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;AAAAD,OAAA,CAAAC,QAAA,GAAAA,QAAA;AAAA,IAMRC,0BAA0B,0BAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAA1BA,0BAA0B;EAAA,OAA1BA,0BAA0B;AAAA;AAAAF,OAAA,CAAAE,0BAAA,GAAAA,0BAAA;AAAA,IAa1BC,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAAAH,OAAA,CAAAG,aAAA,GAAAA,aAAA;AAAA,IAmCbC,gBAAgB,0BAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAA,OAAhBA,gBAAgB;AAAA;AAAAJ,OAAA,CAAAI,gBAAA,GAAAA,gBAAA"}
|
|
@@ -10,7 +10,7 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
|
|
|
10
10
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
11
11
|
class ClientSettings {
|
|
12
12
|
constructor(siteCode, configuration) {
|
|
13
|
-
_defineProperty(this, "updateInterval",
|
|
13
|
+
_defineProperty(this, "updateInterval", 60 * _types.Milliseconds.Minute);
|
|
14
14
|
_defineProperty(this, "environment", void 0);
|
|
15
15
|
_defineProperty(this, "siteCode", void 0);
|
|
16
16
|
this.siteCode = siteCode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientSettings.js","names":["_types","require","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","ClientSettings","constructor","siteCode","configuration","Milliseconds","Minute","environment","updateInterval","settings","exports"],"sources":["../../src/clientSettings/clientSettings.ts"],"sourcesContent":["import { Environment, Milliseconds, SDKConfigurationType } from '../types';\nimport { ClientSettingsType } from './types';\n\nexport interface IClientSettings {\n readonly settings: ClientSettingsType;\n}\n\nexport class ClientSettings implements IClientSettings {\n private updateInterval: number =
|
|
1
|
+
{"version":3,"file":"clientSettings.js","names":["_types","require","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","ClientSettings","constructor","siteCode","configuration","Milliseconds","Minute","environment","updateInterval","settings","exports"],"sources":["../../src/clientSettings/clientSettings.ts"],"sourcesContent":["import { Environment, Milliseconds, SDKConfigurationType } from '../types';\nimport { ClientSettingsType } from './types';\n\nexport interface IClientSettings {\n readonly settings: ClientSettingsType;\n}\n\nexport class ClientSettings implements IClientSettings {\n private updateInterval: number = 60 * Milliseconds.Minute;\n private environment?: Environment;\n private siteCode: string;\n\n constructor(siteCode: string, configuration?: Partial<SDKConfigurationType>) {\n this.siteCode = siteCode;\n\n if (configuration?.environment) {\n this.environment = configuration.environment;\n }\n\n if (configuration?.updateInterval) {\n if (configuration.updateInterval < 1) {\n this.updateInterval = 1 * Milliseconds.Minute;\n }\n\n this.updateInterval = configuration.updateInterval * Milliseconds.Minute;\n }\n }\n\n get settings(): ClientSettingsType {\n return {\n updateInterval: this.updateInterval,\n environment: this.environment,\n siteCode: this.siteCode,\n };\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAA2E,SAAAC,gBAAAC,GAAA,EAAAC,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAD,GAAA,IAAAI,MAAA,CAAAC,cAAA,CAAAL,GAAA,EAAAC,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAR,GAAA,CAAAC,GAAA,IAAAC,KAAA,WAAAF,GAAA;AAAA,SAAAG,eAAAM,GAAA,QAAAR,GAAA,GAAAS,YAAA,CAAAD,GAAA,2BAAAR,GAAA,gBAAAA,GAAA,GAAAU,MAAA,CAAAV,GAAA;AAAA,SAAAS,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;AAOpE,MAAMU,cAAc,CAA4B;EAKrDC,WAAWA,CAACC,QAAgB,EAAEC,aAA6C,EAAE;IAAA1B,eAAA,yBAJ5C,EAAE,GAAG2B,mBAAY,CAACC,MAAM;IAAA5B,eAAA;IAAAA,eAAA;IAKvD,IAAI,CAACyB,QAAQ,GAAGA,QAAQ;IAExB,IAAIC,aAAa,EAAEG,WAAW,EAAE;MAC9B,IAAI,CAACA,WAAW,GAAGH,aAAa,CAACG,WAAW;IAC9C;IAEA,IAAIH,aAAa,EAAEI,cAAc,EAAE;MACjC,IAAIJ,aAAa,CAACI,cAAc,GAAG,CAAC,EAAE;QACpC,IAAI,CAACA,cAAc,GAAG,CAAC,GAAGH,mBAAY,CAACC,MAAM;MAC/C;MAEA,IAAI,CAACE,cAAc,GAAGJ,aAAa,CAACI,cAAc,GAAGH,mBAAY,CAACC,MAAM;IAC1E;EACF;EAEA,IAAIG,QAAQA,CAAA,EAAuB;IACjC,OAAO;MACLD,cAAc,EAAE,IAAI,CAACA,cAAc;MACnCD,WAAW,EAAE,IAAI,CAACA,WAAW;MAC7BJ,QAAQ,EAAE,IAAI,CAACA;IACjB,CAAC;EACH;AACF;AAACO,OAAA,CAAAT,cAAA,GAAAA,cAAA"}
|
|
@@ -14,7 +14,7 @@ class ExternalEventSource {
|
|
|
14
14
|
constructor(siteCode, externalEventSource) {
|
|
15
15
|
_defineProperty(this, "eventSource", void 0);
|
|
16
16
|
_defineProperty(this, "siteCode", void 0);
|
|
17
|
-
const url = _requester.URL.
|
|
17
|
+
const url = _requester.URL.SERVER_SENT_EVENTS + _constants.UrlQuery.Sse + siteCode;
|
|
18
18
|
const eventSource = externalEventSource.initialize(url);
|
|
19
19
|
this.eventSource = eventSource;
|
|
20
20
|
this.siteCode = siteCode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"externalEventSource.js","names":["_requester","require","_constants","_constants2","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","ExternalEventSource","constructor","siteCode","externalEventSource","url","URL","
|
|
1
|
+
{"version":3,"file":"externalEventSource.js","names":["_requester","require","_constants","_constants2","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","ExternalEventSource","constructor","siteCode","externalEventSource","url","URL","SERVER_SENT_EVENTS","UrlQuery","Sse","eventSource","initialize","open","onEvent","eventType","REAL_TIME_EVENT","close","exports"],"sources":["../../src/eventSource/externalEventSource.ts"],"sourcesContent":["import { URL } from '../requester';\nimport { UrlQuery } from '../requester/constants';\nimport { REAL_TIME_EVENT } from './constants';\nimport { IExternalEventSource, IExternalEventSourceConstructor } from './types';\n\nexport interface IEventSource {\n open: (onEvent: (timestamp: number) => void) => void;\n close: () => void;\n}\n\nexport class ExternalEventSource implements IEventSource {\n private eventSource: IExternalEventSource;\n private siteCode: string;\n\n constructor(\n siteCode: string,\n externalEventSource: IExternalEventSourceConstructor,\n ) {\n const url = URL.SERVER_SENT_EVENTS + UrlQuery.Sse + siteCode;\n const eventSource = externalEventSource.initialize(url);\n\n this.eventSource = eventSource;\n this.siteCode = siteCode;\n }\n\n public open(onEvent: (timestamp: number) => void): void {\n this.eventSource.open({\n onEvent,\n siteCode: this.siteCode,\n eventType: REAL_TIME_EVENT,\n });\n }\n\n public close(): void {\n this.eventSource.close();\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AAA8C,SAAAG,gBAAAC,GAAA,EAAAC,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAD,GAAA,IAAAI,MAAA,CAAAC,cAAA,CAAAL,GAAA,EAAAC,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAR,GAAA,CAAAC,GAAA,IAAAC,KAAA,WAAAF,GAAA;AAAA,SAAAG,eAAAM,GAAA,QAAAR,GAAA,GAAAS,YAAA,CAAAD,GAAA,2BAAAR,GAAA,gBAAAA,GAAA,GAAAU,MAAA,CAAAV,GAAA;AAAA,SAAAS,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;AAQvC,MAAMU,mBAAmB,CAAyB;EAIvDC,WAAWA,CACTC,QAAgB,EAChBC,mBAAoD,EACpD;IAAA1B,eAAA;IAAAA,eAAA;IACA,MAAM2B,GAAG,GAAGC,cAAG,CAACC,kBAAkB,GAAGC,mBAAQ,CAACC,GAAG,GAAGN,QAAQ;IAC5D,MAAMO,WAAW,GAAGN,mBAAmB,CAACO,UAAU,CAACN,GAAG,CAAC;IAEvD,IAAI,CAACK,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACP,QAAQ,GAAGA,QAAQ;EAC1B;EAEOS,IAAIA,CAACC,OAAoC,EAAQ;IACtD,IAAI,CAACH,WAAW,CAACE,IAAI,CAAC;MACpBC,OAAO;MACPV,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBW,SAAS,EAAEC;IACb,CAAC,CAAC;EACJ;EAEOC,KAAKA,CAAA,EAAS;IACnB,IAAI,CAACN,WAAW,CAACM,KAAK,EAAE;EAC1B;AACF;AAACC,OAAA,CAAAhB,mBAAA,GAAAA,mBAAA"}
|
|
@@ -7,6 +7,7 @@ import { TrackConversionParamsType, ExperimentType, FeatureFlagType, GetFeatureF
|
|
|
7
7
|
export interface IKameleoonClient {
|
|
8
8
|
/**
|
|
9
9
|
* @method initialize - an asynchronous method for KameleoonClient initialization by fetching Kameleoon SDK related data from server or by retrieving data from local source if data is up-to-date or update interval has not been reached
|
|
10
|
+
* @param {boolean | undefined} useCache - optional parameter for activating SDK offline mode, if `true` is passed failed polls will not return error and will use cached data if such data is available, default value is `false`. Note: if offline mode is on, SDK will still try to retrieve the latest data.
|
|
10
11
|
* @returns {Promise<boolean>} Promise resolved into boolean field indicating success or fail
|
|
11
12
|
* @throws `KameleoonError` with one of the following `type` s:
|
|
12
13
|
*
|
|
@@ -14,7 +15,8 @@ export interface IKameleoonClient {
|
|
|
14
15
|
* - `KameleoonException.ClientConfiguration` Couldn't retrieve client configuration from Kameleoon Api
|
|
15
16
|
* - `KameleoonException.MaximumRetriesReached` Maximum retries reached, request failed
|
|
16
17
|
*/
|
|
17
|
-
initialize
|
|
18
|
+
initialize(useCache?: boolean): Promise<boolean>;
|
|
19
|
+
initialize(): Promise<boolean>;
|
|
18
20
|
/**
|
|
19
21
|
* @method addData - method for adding targeting data to the storage so that other methods could decide whether the current visitor is targeted or not. Note: userAgent data will not be stored in storage like other data, and it will be sent with every tracking request for bot filtration.
|
|
20
22
|
* @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length
|
|
@@ -27,6 +29,16 @@ export interface IKameleoonClient {
|
|
|
27
29
|
* - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`
|
|
28
30
|
*/
|
|
29
31
|
addData: (visitorCode: string, ...data: KameleoonDataType[]) => void;
|
|
32
|
+
/**
|
|
33
|
+
* @method getRemoteVisitorData - an asynchronous method for retrieving custom data for the latest visit of `visitorCode` from Kameleoon Data API and optionally adding it to the storage so that other methods could decide whether the current visitor is targeted or not.
|
|
34
|
+
* @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length
|
|
35
|
+
* @param {boolean | undefined} shouldAddData - optional parameter for adding retrieved data to the storage like `addData` method does, default value is `true`
|
|
36
|
+
* @returns {KameleoonDataType[]} promise resolved to an array of `KameleoonData` instances, only includes custom data
|
|
37
|
+
* @throws `KameleoonError` with one of the following `type` s:
|
|
38
|
+
*
|
|
39
|
+
* - `KameleoonException.RemoteData` - Couldn't retrieve data from Kameleoon server
|
|
40
|
+
*/
|
|
41
|
+
getRemoteVisitorData: (visitorCode: string, shouldAddData?: boolean) => Promise<KameleoonDataType[]>;
|
|
30
42
|
/**
|
|
31
43
|
* @method triggerExperiment - triggers experiment by assigning the variation to the user with `visitorCode`, if the variation is already assigned just returns it's id. Note: returned id `0` indicates default variation. At the same time executes `flushData` without sending extra request.
|
|
32
44
|
* @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length
|
|
@@ -182,18 +194,19 @@ export interface IKameleoonClient {
|
|
|
182
194
|
* for communicating with Kameleoon JavaScript SDK Core, when new instance is created
|
|
183
195
|
*/
|
|
184
196
|
export declare class KameleoonClient implements IKameleoonClient {
|
|
185
|
-
private internalConfiguration;
|
|
186
197
|
private variationConfiguration?;
|
|
187
|
-
private campaignConfiguration
|
|
188
|
-
private
|
|
198
|
+
private campaignConfiguration;
|
|
199
|
+
private variationDataStorage;
|
|
189
200
|
private trackingCache;
|
|
190
201
|
private requester;
|
|
202
|
+
private externalEventSource;
|
|
191
203
|
/**
|
|
192
204
|
* @param {SDKCoreParameters} sdkCoreParameters - parameters for initializing sdk core
|
|
193
205
|
*/
|
|
194
206
|
constructor({ siteCode, configuration, internalConfiguration, }: SDKCoreParameters);
|
|
195
|
-
initialize(): Promise<boolean>;
|
|
207
|
+
initialize(useCache?: boolean): Promise<boolean>;
|
|
196
208
|
addData(visitorCode: string, ...data: KameleoonDataType[]): void;
|
|
209
|
+
getRemoteVisitorData(visitorCode: string, shouldAddData?: boolean): Promise<KameleoonDataType[]>;
|
|
197
210
|
triggerExperiment(visitorCode: string, experimentId: number): number;
|
|
198
211
|
trackConversion({ visitorCode, goalId, revenue, }: TrackConversionParamsType): void;
|
|
199
212
|
flushData(visitorCode: string): void;
|
package/dist/kameleoonClient.js
CHANGED
|
@@ -35,18 +35,22 @@ class KameleoonClient {
|
|
|
35
35
|
configuration,
|
|
36
36
|
internalConfiguration
|
|
37
37
|
}) {
|
|
38
|
-
_defineProperty(this, "internalConfiguration", void 0);
|
|
39
38
|
_defineProperty(this, "variationConfiguration", void 0);
|
|
40
39
|
_defineProperty(this, "campaignConfiguration", void 0);
|
|
41
|
-
_defineProperty(this, "
|
|
40
|
+
_defineProperty(this, "variationDataStorage", void 0);
|
|
42
41
|
_defineProperty(this, "trackingCache", void 0);
|
|
43
42
|
_defineProperty(this, "requester", void 0);
|
|
43
|
+
_defineProperty(this, "externalEventSource", void 0);
|
|
44
44
|
const {
|
|
45
45
|
settings: clientSettings
|
|
46
46
|
} = new _clientSettings.ClientSettings(siteCode, configuration);
|
|
47
47
|
const {
|
|
48
|
+
externalStorage,
|
|
49
|
+
externalEventSource,
|
|
48
50
|
externalPackageInfo,
|
|
49
|
-
externalRequestDispatcher
|
|
51
|
+
externalRequestDispatcher,
|
|
52
|
+
externalClientConfiguration,
|
|
53
|
+
targetingDataCleanupInterval
|
|
50
54
|
} = internalConfiguration;
|
|
51
55
|
const requester = new _requester.Requester({
|
|
52
56
|
siteCode,
|
|
@@ -55,32 +59,26 @@ class KameleoonClient {
|
|
|
55
59
|
requestDispatcher: externalRequestDispatcher
|
|
56
60
|
});
|
|
57
61
|
const trackingCache = new _cacheManager.CacheManager(_constants.CACHE_CLEANUP_TIMEOUT);
|
|
58
|
-
this.requester = requester;
|
|
59
|
-
this.settings = clientSettings;
|
|
60
|
-
this.trackingCache = trackingCache;
|
|
61
|
-
this.internalConfiguration = internalConfiguration;
|
|
62
|
-
}
|
|
63
|
-
async initialize() {
|
|
64
|
-
const {
|
|
65
|
-
externalStorage,
|
|
66
|
-
externalEventSource,
|
|
67
|
-
externalClientConfiguration,
|
|
68
|
-
targetingDataCleanupInterval
|
|
69
|
-
} = this.internalConfiguration;
|
|
70
62
|
const clientDataStorage = new _externalStorage.ExternalStorage(externalStorage.initialize(_storage.KameleoonStorageKey.ClientData));
|
|
71
63
|
const variationDataStorage = new _externalStorage.ExternalStorage(externalStorage.initialize(_storage.KameleoonStorageKey.VariationData));
|
|
72
64
|
const campaignConfiguration = new _campaignConfiguration.CampaignConfiguration({
|
|
73
|
-
settings:
|
|
65
|
+
settings: clientSettings,
|
|
74
66
|
storage: clientDataStorage,
|
|
75
|
-
requester
|
|
67
|
+
requester,
|
|
76
68
|
externalClientConfiguration,
|
|
77
69
|
targetingCleanupInterval: targetingDataCleanupInterval
|
|
78
70
|
});
|
|
79
|
-
|
|
71
|
+
this.requester = requester;
|
|
72
|
+
this.trackingCache = trackingCache;
|
|
73
|
+
this.campaignConfiguration = campaignConfiguration;
|
|
74
|
+
this.variationDataStorage = variationDataStorage;
|
|
75
|
+
this.externalEventSource = externalEventSource;
|
|
76
|
+
}
|
|
77
|
+
async initialize(useCache) {
|
|
78
|
+
const result = await this.campaignConfiguration.initialize(this.externalEventSource, useCache);
|
|
80
79
|
result.throw();
|
|
81
|
-
const variationConfiguration = new _variationConfiguration.VariationConfiguration(campaignConfiguration.experiments, variationDataStorage);
|
|
80
|
+
const variationConfiguration = new _variationConfiguration.VariationConfiguration(this.campaignConfiguration.experiments, this.variationDataStorage);
|
|
82
81
|
this.variationConfiguration = variationConfiguration;
|
|
83
|
-
this.campaignConfiguration = campaignConfiguration;
|
|
84
82
|
return result.ok;
|
|
85
83
|
}
|
|
86
84
|
addData(visitorCode, ...data) {
|
|
@@ -90,6 +88,17 @@ class KameleoonClient {
|
|
|
90
88
|
}
|
|
91
89
|
this.campaignConfiguration.addTargetingData(visitorCode, ...data).throw();
|
|
92
90
|
}
|
|
91
|
+
async getRemoteVisitorData(visitorCode, shouldAddData = true) {
|
|
92
|
+
const result = await this.requester.getVisitorData(visitorCode);
|
|
93
|
+
const data = result.throw();
|
|
94
|
+
const visitorData = _utilities.Utilities.parseVisitorData(data);
|
|
95
|
+
if (shouldAddData) {
|
|
96
|
+
for (const item of visitorData) {
|
|
97
|
+
this.addData(visitorCode, item);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return visitorData;
|
|
101
|
+
}
|
|
93
102
|
triggerExperiment(visitorCode, experimentId) {
|
|
94
103
|
_utilities.Utilities.validateVisitorCode(visitorCode).throw();
|
|
95
104
|
if (!this.campaignConfiguration || !this.variationConfiguration) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kameleoonClient.js","names":["_tsRes","require","_cacheManager","_campaignConfiguration","_clientSettings","_constants","_kameleoonData","_kameleoonError","_requester","_storage","_externalStorage","_utilities","_variationConfiguration","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","KameleoonClient","constructor","siteCode","configuration","internalConfiguration","settings","clientSettings","ClientSettings","externalPackageInfo","externalRequestDispatcher","requester","Requester","environment","packageInfo","requestDispatcher","trackingCache","CacheManager","CACHE_CLEANUP_TIMEOUT","initialize","externalStorage","externalEventSource","externalClientConfiguration","targetingDataCleanupInterval","clientDataStorage","ExternalStorage","KameleoonStorageKey","ClientData","variationDataStorage","VariationData","campaignConfiguration","CampaignConfiguration","storage","targetingCleanupInterval","result","throw","variationConfiguration","VariationConfiguration","experiments","ok","addData","visitorCode","data","Utilities","validateVisitorCode","KameleoonError","KameleoonException","Initialization","addTargetingData","triggerExperiment","experimentId","experiment","find","item","id","ExperimentConfigurationNotFound","userAgent","getUserAgent","dataUrl","getDataUrl","targetingData","storedTargetingData","trackingParameters","body","variationId","UNALLOCATED_VARIATION_ID","isUnallocated","targetingResult","checkTargeting","segment","getAssociatedVariationId","else","error","type","NotAllocated","trackExperiment","NotTargeted","updateCache","cacheManager","trackConversion","goalId","revenue","Conversion","flushData","trackData","getExperiments","map","name","getVisitorExperiments","isActive","experimentVariations","getAssignedVariations","experimentVariation","variationResult","getExperimentVariation","getExperimentVariationData","variation","variations","JSON","parse","customJson","err","JSONParse","VariationNotFound","getFeatureFlags","featureFlags","featureKey","getVisitorFeatureFlags","resultFeatureFlags","featureFlag","variationData","getFeatureFlagVariation","variationKey","OFF_VARIATION_KEY","featureFlagId","getFeatureFlagVariationKey","_getFeatureFlagVariation","getFeatureFlagVariable","variableKey","variable","variables","FeatureFlagConfigurationNotFound","featureVariable","parseFeatureVariable","isFeatureFlagActive","getRemoteData","remoteData","onConfigurationUpdate","callback","getEngineTrackingCode","getTrackingCode","Err","withAssignment","rule","trackRule","featureFlagVariation","Ok","exports"],"sources":["../src/kameleoonClient.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { CacheManager } from './cacheManager';\nimport { CampaignConfiguration, JSONType } from './campaignConfiguration';\nimport { ClientSettings, ClientSettingsType } from './clientSettings';\nimport {\n CACHE_CLEANUP_TIMEOUT,\n OFF_VARIATION_KEY,\n UNALLOCATED_VARIATION_ID,\n} from './constants';\nimport { Conversion, KameleoonDataType } from './kameleoonData';\nimport { KameleoonError, KameleoonException } from './kameleoonError';\nimport { Requester, TrackExperimentParamsType } from './requester';\nimport {\n ClientDataType,\n KameleoonStorageKey,\n VariationDataType,\n} from './storage';\nimport { ExternalStorage } from './storage/externalStorage';\nimport {\n TrackConversionParamsType,\n ExperimentType,\n FeatureFlagType,\n GetFeatureFlagVariableParamsType,\n FeatureVariableResultType,\n InternalSDKConfigurationType,\n SDKCoreParameters,\n TrackingCacheItemType,\n} from './types';\nimport { Utilities } from './utilities';\nimport {\n FeatureFlagVariationType,\n VariationConfiguration,\n} from './variationConfiguration';\n\n/**\n * @interface an interface of KameleoonClient instance\n */\nexport interface IKameleoonClient {\n /**\n * @method initialize - an asynchronous method for KameleoonClient initialization by fetching Kameleoon SDK related data from server or by retrieving data from local source if data is up-to-date or update interval has not been reached\n * @returns {Promise<boolean>} Promise resolved into boolean field indicating success or fail\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.StorageWrite` Couldn't update storage data\n * - `KameleoonException.ClientConfiguration` Couldn't retrieve client configuration from Kameleoon Api\n * - `KameleoonException.MaximumRetriesReached` Maximum retries reached, request failed\n */\n initialize: () => Promise<boolean>;\n /**\n * @method addData - method for adding targeting data to the storage so that other methods could decide whether the current visitor is targeted or not. Note: userAgent data will not be stored in storage like other data, and it will be sent with every tracking request for bot filtration.\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {KameleoonDataType[]} kameleoonData - number of instances of any type of `KameleoonData`, can be added solely in array or as a sequential arguments\n * @returns {void}\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` The visitor code length was exceeded\n * - `KameleoonException.StorageWrite` Couldn't update storage data\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n addData: (visitorCode: string, ...data: KameleoonDataType[]) => void;\n /**\n * @method triggerExperiment - triggers experiment by assigning the variation to the user with `visitorCode`, if the variation is already assigned just returns it's id. Note: returned id `0` indicates default variation. At the same time executes `flushData` without sending extra request.\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {number} experimentId - id of experiment running for the current visitor\n * @returns {number} associated variationId which is successfully searched/assigned\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.ExperimentConfigurationNotFound` No configuration found for provided `experimentId`\n * - `KameleoonException.VisitorCodeMaxLength` The visitor code length was exceeded\n * - `KameleoonException.StorageRead` Couldn't find associated experiment by provided `experimentId` and `visitorCode` inside the storage\n * - `KameleoonException.NotTargeted` Current visitor is not targeted\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n triggerExperiment: (visitorCode: string, experimentId: number) => number;\n /**\n * @method trackConversion - creates and adds `Conversion` data to the visitor with specified parameters and executes `flushData`. Note: it's a helper method for the quick and convenient conversion tracking, however creating and adding `Conversion` manually allows more flexible `Conversion` with `negative` parameter\n * @param {TrackConversionParamsType} conversionParameters - `visitorCode`, `goalId` and `revenue` parameters for data tracking\n * @returns {void}\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` The visitor code length was exceeded\n * - `KameleoonException.StorageWrite` Couldn't update storage data\n */\n trackConversion: ({\n visitorCode,\n goalId,\n revenue,\n }: TrackConversionParamsType) => void;\n /**\n * @method flushData - takes visitor associated kameleoon data and sends the data tracking request with collected data\n * sent data is removed from `KameleoonClient` instance but not from the storage for correct targeting checks\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @returns {void}\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n flushData: (visitorCode: string) => void;\n /**\n * @method getExperiments - returns a list of experiments stored in the client configuration\n * @returns {ExperimentType[]} a list of all experiments items with `id` and `name` fields\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n getExperiments: () => ExperimentType[];\n /**\n * @method getVisitorExperiments - returns a list of experiments that the visitor with `visitorCode` is targeted by and that are *active* for the visitor (visitor will have one of the variations allocated if the experiment will be triggered).\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {boolean | undefined} isAllocated - boolean value indicating that only experiments *allocated* for visitor will be returned. Default value is `true`\n * @returns {ExperimentType[]} a list of all experiments items with `id` and `name` fields\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n getVisitorExperiments: (\n visitorCode: string,\n isAllocated?: boolean,\n ) => ExperimentType[];\n /**\n * @method getExperimentVariationData - returns variation data in JSON format for the variation with `variationId`\n * @param {number} variationId - id of variation\n * @returns {JSONType} variation data in JSON format\n * @throws `KameleoonError` with one of the following `type` s:\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n * - `KameleoonException.JSONParse` - Couldn't pass JSON value\n * - `KameleoonException.VariationNotFound` - No variation found for provided `variationId`\n */\n getExperimentVariationData: (variationId: number) => JSONType | null;\n /**\n * @method getFeatureFlags - returns a list of feature flags stored in the client configuration\n * @returns {FeatureFlagType[]} a list of all feature flags items with `id` and `key` fields\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n getFeatureFlags: () => FeatureFlagType[];\n /**\n * @method getVisitorFeatureFlags - returns a list of feature flags that the visitor with `visitorCode` that is targeted by and that are *active* for the visitor (visitor will have one of the variations allocated).\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @returns {FeatureFlagType[]} a list of all feature flags items with `id` and `key` fields\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n * - `KameleoonException.NotTargeted` - Current visitor is not targeted\n */\n getVisitorFeatureFlags: (visitorCode: string) => FeatureFlagType[];\n /**\n * @method isFeatureFlagActive - returns a boolean indicating whether the visitor with `visitorCode` has `featureKey` active for him, this method includes targeting check, finding the according variation exposed to the visitor and saving it to storage along with sending tracking request\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {string} featureKey - a unique key for feature flag\n * @returns {boolean} a boolean indicator of whether the feature flag with `featureKey` is active for visitor with `visitorCode`\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n * - `KameleoonException.FeatureFlagConfigurationNotFound` - No feature flag was found for provided `visitorCode` and `featureKey`\n * - `KameleoonException.DataInconsistency` - Allocated variation was found but there is no feature flag with according `featureKey`.\n * - `KameleoonException.NotTargeted` - Current visitor is not targeted\n */\n isFeatureFlagActive: (visitorCode: string, featureKey: string) => boolean;\n /**\n * @method getFeatureFlagVariationKey - returns variation key for the visitor under `visitorCode` in the found feature flag, this method includes targeting check, finding the according variation exposed to the visitor and saving it to storage along with sending tracking request\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {string} featureKey - a unique key for feature flag\n * @returns {string} a string containing variable key for the allocated feature flag variation for the provided visitor\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n * - `KameleoonException.FeatureFlagConfigurationNotFound` - No feature flag was found for provided `visitorCode` and `featureKey`\n * - `KameleoonException.NotTargeted` - Current visitor is not targeted\n */\n getFeatureFlagVariationKey: (\n visitorCode: string,\n featureKey: string,\n ) => string;\n /**\n * @method getFeatureFlagVariable - returns a variable for the visitor under `visitorCode` in the found feature flag, this method includes targeting check, finding the according variation exposed to the visitor and saving it to storage along with sending tracking request\n * @param {GetFeatureFlagVariableParamsType} parameters - an object with parameters of a type `GetFeatureFlagVariableParamsType`, see the type for details.\n * @returns {FeatureVariableResultType} a variable object containing `type` and `value` fields, `type` can be checked against `FeatureVariableType` enum, if the `type` is `FeatureVariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n * - `KameleoonException.FeatureFlagConfigurationNotFound` - No feature flag was found for provided `visitorCode` and `featureKey`\n * - `KameleoonException.NotTargeted` - Current visitor is not targeted\n * - `KameleoonException.JSONParse` - Couldn't pass JSON value\n * - `KameleoonException.NumberParse` - Couldn't pass Number value\n */\n getFeatureFlagVariable: ({\n visitorCode,\n featureKey,\n variableKey,\n }: GetFeatureFlagVariableParamsType) => FeatureVariableResultType;\n /**\n * @method getRemoteData - returns a data which is stored for specified siteCode on a remote Kameleoon server.\n * @param {string} key - unique key that the data you try to get is associated with.\n * @returns {JSONType} - promise with retrieving data for specific key.\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.RemoteData` - Couldn't retrieve data from Kameleoon server\n */\n getRemoteData: (key: string) => Promise<JSONType>;\n /**\n * @method getEngineTrackingCode - returns Kameleoon tracking code for the current visitor. Tracking code is built of the experiments that were triggered and feature flag variations that were assigned during the last 5 seconds\n * See [Kameleoon Automation API](https://developers.kameleoon.com/apis/activation-api-js/api-reference#trigger-1) for the details\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @returns {string} Kameleoon tracking code\n */\n getEngineTrackingCode: (visitorCode: string) => string;\n /**\n * @method onConfigurationUpdate - fires a callback on client configuration update. Note: this method only works for server sent events of real time update.\n * @param {() => void} callback - callback function with no parameters that will be called upon configuration update\n * @returns {void}\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n onConfigurationUpdate: (callback: () => void) => void;\n}\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * for communicating with Kameleoon JavaScript SDK Core, when new instance is created\n */\nexport class KameleoonClient implements IKameleoonClient {\n private internalConfiguration: InternalSDKConfigurationType;\n private variationConfiguration?: VariationConfiguration;\n private campaignConfiguration?: CampaignConfiguration;\n private settings: ClientSettingsType;\n private trackingCache: CacheManager<TrackingCacheItemType>;\n private requester: Requester;\n\n /**\n * @param {SDKCoreParameters} sdkCoreParameters - parameters for initializing sdk core\n */\n constructor({\n siteCode,\n configuration,\n internalConfiguration,\n }: SDKCoreParameters) {\n const { settings: clientSettings } = new ClientSettings(\n siteCode,\n configuration,\n );\n const { externalPackageInfo, externalRequestDispatcher } =\n internalConfiguration;\n const requester = new Requester({\n siteCode,\n environment: clientSettings.environment,\n packageInfo: externalPackageInfo,\n requestDispatcher: externalRequestDispatcher,\n });\n const trackingCache = new CacheManager<TrackingCacheItemType>(\n CACHE_CLEANUP_TIMEOUT,\n );\n\n this.requester = requester;\n this.settings = clientSettings;\n this.trackingCache = trackingCache;\n this.internalConfiguration = internalConfiguration;\n }\n\n public async initialize(): Promise<boolean> {\n const {\n externalStorage,\n externalEventSource,\n externalClientConfiguration,\n targetingDataCleanupInterval,\n } = this.internalConfiguration;\n\n const clientDataStorage = new ExternalStorage<ClientDataType>(\n externalStorage.initialize(KameleoonStorageKey.ClientData),\n );\n const variationDataStorage = new ExternalStorage<VariationDataType>(\n externalStorage.initialize(KameleoonStorageKey.VariationData),\n );\n\n const campaignConfiguration = new CampaignConfiguration({\n settings: this.settings,\n storage: clientDataStorage,\n requester: this.requester,\n externalClientConfiguration,\n targetingCleanupInterval: targetingDataCleanupInterval,\n });\n\n const result = await campaignConfiguration.initialize(externalEventSource);\n result.throw();\n\n const variationConfiguration = new VariationConfiguration(\n campaignConfiguration.experiments,\n variationDataStorage,\n );\n\n this.variationConfiguration = variationConfiguration;\n this.campaignConfiguration = campaignConfiguration;\n\n return result.ok;\n }\n\n public addData(visitorCode: string, ...data: KameleoonDataType[]): void {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.campaignConfiguration.addTargetingData(visitorCode, ...data).throw();\n }\n\n public triggerExperiment(visitorCode: string, experimentId: number): number {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n if (!this.campaignConfiguration || !this.variationConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const experiment = this.campaignConfiguration.experiments.find(\n (item) => item.id === String(experimentId),\n );\n\n if (!experiment) {\n throw new KameleoonError(\n KameleoonException.ExperimentConfigurationNotFound,\n experimentId,\n visitorCode,\n );\n }\n\n const userAgent = Utilities.getUserAgent(\n visitorCode,\n this.campaignConfiguration,\n );\n const dataUrl = Utilities.getDataUrl(\n visitorCode,\n this.campaignConfiguration,\n );\n const targetingData =\n this.campaignConfiguration.storedTargetingData[visitorCode];\n const trackingParameters: Omit<\n TrackExperimentParamsType,\n 'variationId' | 'isUnallocated'\n > = {\n body: dataUrl,\n visitorCode,\n experimentId,\n };\n\n let variationId = UNALLOCATED_VARIATION_ID;\n let isUnallocated = true;\n\n const targetingResult = Utilities.checkTargeting({\n visitorCode,\n experimentId,\n targetingData,\n segment: experiment.segment,\n variationConfiguration: this.variationConfiguration,\n }).throw();\n\n variationId = this.variationConfiguration\n .getAssociatedVariationId(visitorCode, experimentId)\n .else((error) => {\n if (error.type === KameleoonException.NotAllocated) {\n this.requester.trackExperiment({\n isUnallocated: true,\n variationId,\n userAgent,\n ...trackingParameters,\n });\n\n return UNALLOCATED_VARIATION_ID;\n }\n\n throw error;\n });\n\n this.requester.trackExperiment({\n variationId,\n isUnallocated,\n userAgent,\n ...trackingParameters,\n });\n\n if (!targetingResult) {\n throw new KameleoonError(KameleoonException.NotTargeted, visitorCode);\n }\n\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n visitorCode,\n experimentId,\n variationId,\n });\n\n return variationId;\n }\n\n public trackConversion({\n visitorCode,\n goalId,\n revenue,\n }: TrackConversionParamsType): void {\n this.addData(visitorCode, new Conversion({ goalId, revenue }));\n this.flushData(visitorCode);\n }\n\n public flushData(visitorCode: string): void {\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const dataUrl = Utilities.getDataUrl(\n visitorCode,\n this.campaignConfiguration,\n );\n\n const userAgent = Utilities.getUserAgent(\n visitorCode,\n this.campaignConfiguration,\n );\n\n this.requester.trackData({ visitorCode, body: dataUrl, userAgent });\n }\n\n public getExperiments(): ExperimentType[] {\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n return this.campaignConfiguration.experiments.map(({ id, name }) => ({\n id: Number(id),\n name,\n }));\n }\n\n public getVisitorExperiments(\n visitorCode: string,\n isActive = true,\n ): ExperimentType[] {\n if (!this.variationConfiguration || !this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const experiments = this.campaignConfiguration.experiments;\n const result: ExperimentType[] = [];\n\n const targetingData =\n this.campaignConfiguration.storedTargetingData[visitorCode];\n\n for (const experiment of experiments) {\n const { id, name, segment } = experiment;\n\n const targetingResult = Utilities.checkTargeting({\n targetingData,\n visitorCode,\n segment,\n variationConfiguration: this.variationConfiguration,\n experimentId: Number(id),\n }).throw();\n\n if (!targetingResult) {\n continue;\n }\n\n // -- If `isActive=false` then return every experiment\n if (!isActive) {\n result.push({ id: Number(id), name });\n continue;\n }\n\n // -- Else first check if there are saved variations for the experiment\n // if there is at least one than it's active\n const experimentVariations =\n this.variationConfiguration.getAssignedVariations(visitorCode);\n\n if (experimentVariations.ok) {\n const experimentVariation = experimentVariations.data[experiment.id];\n\n if (experimentVariation) {\n result.push({ id: Number(id), name });\n continue;\n }\n }\n\n // -- Second check if the experiment will have an allocated variation upon triggering\n // if yes than it's active\n const variationResult =\n this.variationConfiguration.getExperimentVariation(\n visitorCode,\n experiment,\n );\n\n if (variationResult.ok) {\n result.push({ id: Number(id), name });\n }\n }\n\n return result;\n }\n\n public getExperimentVariationData(variationId: number): JSONType {\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const experiments = this.campaignConfiguration.experiments;\n\n for (const experiment of experiments) {\n const variation = experiment.variations.find(\n (item) => item.id === String(variationId),\n );\n\n if (variation) {\n try {\n return JSON.parse(variation.customJson);\n } catch (err) {\n throw new KameleoonError(KameleoonException.JSONParse, err);\n }\n }\n }\n\n throw new KameleoonError(KameleoonException.VariationNotFound);\n }\n\n public getFeatureFlags(): FeatureFlagType[] {\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n return this.campaignConfiguration.featureFlags.map(\n ({ id, featureKey }) => ({ id, key: featureKey }),\n );\n }\n\n public getVisitorFeatureFlags(visitorCode: string): FeatureFlagType[] {\n if (!this.variationConfiguration || !this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.campaignConfiguration.featureFlags;\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n const targetingData =\n this.campaignConfiguration.storedTargetingData[visitorCode];\n\n for (const featureFlag of featureFlags) {\n const variationData = this.variationConfiguration\n .getFeatureFlagVariation({\n visitorCode,\n targetingData,\n featureFlag,\n })\n .throw();\n\n if (variationData.variationKey !== OFF_VARIATION_KEY) {\n const { featureFlagId, featureKey } = variationData;\n\n resultFeatureFlags.push({ id: featureFlagId, key: featureKey });\n }\n }\n\n return resultFeatureFlags;\n }\n\n public getFeatureFlagVariationKey(\n visitorCode: string,\n featureKey: string,\n ): string {\n const { variationKey } = this._getFeatureFlagVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n return variationKey;\n }\n\n public getFeatureFlagVariable({\n visitorCode,\n featureKey,\n variableKey,\n }: GetFeatureFlagVariableParamsType): FeatureVariableResultType {\n const { variationKey } = this._getFeatureFlagVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n // --- Note ---\n // `_getFeatureFlagVariation` already checks `campaignConfiguration` initialization\n const featureFlags = (this.campaignConfiguration as CampaignConfiguration)\n .featureFlags;\n\n const variable = featureFlags\n .find((item) => item.featureKey === featureKey)\n ?.variations.find((item) => item.key === variationKey)\n ?.variables.find((item) => item.key === variableKey);\n\n if (!variable) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n visitorCode,\n );\n }\n\n const featureVariable = Utilities.parseFeatureVariable(variable).throw();\n\n return featureVariable;\n }\n\n public isFeatureFlagActive(visitorCode: string, featureKey: string): boolean {\n const variationKey = this.getFeatureFlagVariationKey(\n visitorCode,\n featureKey,\n );\n\n return variationKey !== OFF_VARIATION_KEY;\n }\n\n public async getRemoteData(key: string): Promise<JSONType> {\n const remoteData = await this.requester.getRemoteData(key);\n\n return remoteData.throw();\n }\n\n public onConfigurationUpdate(callback: () => void): void {\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.campaignConfiguration.onConfigurationUpdate(callback);\n }\n\n public getEngineTrackingCode(visitorCode: string): string {\n return Utilities.getTrackingCode(this.trackingCache, visitorCode);\n }\n\n private _getFeatureFlagVariation(\n visitorCode: string,\n featureKey: string,\n ): Result<FeatureFlagVariationType, KameleoonError> {\n if (!this.variationConfiguration || !this.campaignConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n const featureFlags = this.campaignConfiguration.featureFlags;\n const featureFlag = featureFlags.find(\n (item) => item.featureKey === featureKey,\n );\n\n if (!featureFlag) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n visitorCode,\n ),\n );\n }\n\n const targetingData =\n this.campaignConfiguration.storedTargetingData[visitorCode];\n\n const variationData = this.variationConfiguration\n .getFeatureFlagVariation({\n visitorCode,\n featureFlag,\n targetingData,\n withAssignment: true,\n })\n .throw();\n\n const { experimentId, variationId, rule } = variationData;\n\n if (typeof variationId === 'number' && typeof experimentId === 'number') {\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n visitorCode,\n experimentId,\n variationId,\n });\n }\n\n const userAgent = Utilities.getUserAgent(\n visitorCode,\n this.campaignConfiguration,\n );\n\n if (rule) {\n Utilities.trackRule({\n visitorCode,\n requester: this.requester,\n featureFlagVariation: variationData,\n campaignConfiguration: this.campaignConfiguration,\n userAgent,\n });\n }\n\n return Ok(variationData);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAKA,IAAAK,cAAA,GAAAL,OAAA;AACA,IAAAM,eAAA,GAAAN,OAAA;AACA,IAAAO,UAAA,GAAAP,OAAA;AACA,IAAAQ,QAAA,GAAAR,OAAA;AAKA,IAAAS,gBAAA,GAAAT,OAAA;AAWA,IAAAU,UAAA,GAAAV,OAAA;AACA,IAAAW,uBAAA,GAAAX,OAAA;AAGkC,SAAAY,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;AAgMlC;AACA;AACA;AACA;AACA;AACO,MAAMU,eAAe,CAA6B;EAQvD;AACF;AACA;EACEC,WAAWA,CAAC;IACVC,QAAQ;IACRC,aAAa;IACbC;EACiB,CAAC,EAAE;IAAA1B,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IACpB,MAAM;MAAE2B,QAAQ,EAAEC;IAAe,CAAC,GAAG,IAAIC,8BAAc,CACrDL,QAAQ,EACRC,aAAa,CACd;IACD,MAAM;MAAEK,mBAAmB;MAAEC;IAA0B,CAAC,GACtDL,qBAAqB;IACvB,MAAMM,SAAS,GAAG,IAAIC,oBAAS,CAAC;MAC9BT,QAAQ;MACRU,WAAW,EAAEN,cAAc,CAACM,WAAW;MACvCC,WAAW,EAAEL,mBAAmB;MAChCM,iBAAiB,EAAEL;IACrB,CAAC,CAAC;IACF,MAAMM,aAAa,GAAG,IAAIC,0BAAY,CACpCC,gCAAqB,CACtB;IAED,IAAI,CAACP,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACL,QAAQ,GAAGC,cAAc;IAC9B,IAAI,CAACS,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACX,qBAAqB,GAAGA,qBAAqB;EACpD;EAEA,MAAac,UAAUA,CAAA,EAAqB;IAC1C,MAAM;MACJC,eAAe;MACfC,mBAAmB;MACnBC,2BAA2B;MAC3BC;IACF,CAAC,GAAG,IAAI,CAAClB,qBAAqB;IAE9B,MAAMmB,iBAAiB,GAAG,IAAIC,gCAAe,CAC3CL,eAAe,CAACD,UAAU,CAACO,4BAAmB,CAACC,UAAU,CAAC,CAC3D;IACD,MAAMC,oBAAoB,GAAG,IAAIH,gCAAe,CAC9CL,eAAe,CAACD,UAAU,CAACO,4BAAmB,CAACG,aAAa,CAAC,CAC9D;IAED,MAAMC,qBAAqB,GAAG,IAAIC,4CAAqB,CAAC;MACtDzB,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvB0B,OAAO,EAAER,iBAAiB;MAC1Bb,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBW,2BAA2B;MAC3BW,wBAAwB,EAAEV;IAC5B,CAAC,CAAC;IAEF,MAAMW,MAAM,GAAG,MAAMJ,qBAAqB,CAACX,UAAU,CAACE,mBAAmB,CAAC;IAC1Ea,MAAM,CAACC,KAAK,EAAE;IAEd,MAAMC,sBAAsB,GAAG,IAAIC,8CAAsB,CACvDP,qBAAqB,CAACQ,WAAW,EACjCV,oBAAoB,CACrB;IAED,IAAI,CAACQ,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACN,qBAAqB,GAAGA,qBAAqB;IAElD,OAAOI,MAAM,CAACK,EAAE;EAClB;EAEOC,OAAOA,CAACC,WAAmB,EAAE,GAAGC,IAAyB,EAAQ;IACtEC,oBAAS,CAACC,mBAAmB,CAACH,WAAW,CAAC,CAACN,KAAK,EAAE;IAElD,IAAI,CAAC,IAAI,CAACL,qBAAqB,EAAE;MAC/B,MAAM,IAAIe,8BAAc,CAACC,kCAAkB,CAACC,cAAc,CAAC;IAC7D;IAEA,IAAI,CAACjB,qBAAqB,CAACkB,gBAAgB,CAACP,WAAW,EAAE,GAAGC,IAAI,CAAC,CAACP,KAAK,EAAE;EAC3E;EAEOc,iBAAiBA,CAACR,WAAmB,EAAES,YAAoB,EAAU;IAC1EP,oBAAS,CAACC,mBAAmB,CAACH,WAAW,CAAC,CAACN,KAAK,EAAE;IAElD,IAAI,CAAC,IAAI,CAACL,qBAAqB,IAAI,CAAC,IAAI,CAACM,sBAAsB,EAAE;MAC/D,MAAM,IAAIS,8BAAc,CAACC,kCAAkB,CAACC,cAAc,CAAC;IAC7D;IAEA,MAAMI,UAAU,GAAG,IAAI,CAACrB,qBAAqB,CAACQ,WAAW,CAACc,IAAI,CAC3DC,IAAI,IAAKA,IAAI,CAACC,EAAE,KAAKhE,MAAM,CAAC4D,YAAY,CAAC,CAC3C;IAED,IAAI,CAACC,UAAU,EAAE;MACf,MAAM,IAAIN,8BAAc,CACtBC,kCAAkB,CAACS,+BAA+B,EAClDL,YAAY,EACZT,WAAW,CACZ;IACH;IAEA,MAAMe,SAAS,GAAGb,oBAAS,CAACc,YAAY,CACtChB,WAAW,EACX,IAAI,CAACX,qBAAqB,CAC3B;IACD,MAAM4B,OAAO,GAAGf,oBAAS,CAACgB,UAAU,CAClClB,WAAW,EACX,IAAI,CAACX,qBAAqB,CAC3B;IACD,MAAM8B,aAAa,GACjB,IAAI,CAAC9B,qBAAqB,CAAC+B,mBAAmB,CAACpB,WAAW,CAAC;IAC7D,MAAMqB,kBAGL,GAAG;MACFC,IAAI,EAAEL,OAAO;MACbjB,WAAW;MACXS;IACF,CAAC;IAED,IAAIc,WAAW,GAAGC,mCAAwB;IAC1C,IAAIC,aAAa,GAAG,IAAI;IAExB,MAAMC,eAAe,GAAGxB,oBAAS,CAACyB,cAAc,CAAC;MAC/C3B,WAAW;MACXS,YAAY;MACZU,aAAa;MACbS,OAAO,EAAElB,UAAU,CAACkB,OAAO;MAC3BjC,sBAAsB,EAAE,IAAI,CAACA;IAC/B,CAAC,CAAC,CAACD,KAAK,EAAE;IAEV6B,WAAW,GAAG,IAAI,CAAC5B,sBAAsB,CACtCkC,wBAAwB,CAAC7B,WAAW,EAAES,YAAY,CAAC,CACnDqB,IAAI,CAAEC,KAAK,IAAK;MACf,IAAIA,KAAK,CAACC,IAAI,KAAK3B,kCAAkB,CAAC4B,YAAY,EAAE;QAClD,IAAI,CAAC/D,SAAS,CAACgE,eAAe,CAAAxG,aAAA;UAC5B+F,aAAa,EAAE,IAAI;UACnBF,WAAW;UACXR;QAAS,GACNM,kBAAkB,EACrB;QAEF,OAAOG,mCAAwB;MACjC;MAEA,MAAMO,KAAK;IACb,CAAC,CAAC;IAEJ,IAAI,CAAC7D,SAAS,CAACgE,eAAe,CAAAxG,aAAA;MAC5B6F,WAAW;MACXE,aAAa;MACbV;IAAS,GACNM,kBAAkB,EACrB;IAEF,IAAI,CAACK,eAAe,EAAE;MACpB,MAAM,IAAItB,8BAAc,CAACC,kCAAkB,CAAC8B,WAAW,EAAEnC,WAAW,CAAC;IACvE;IAEAE,oBAAS,CAACkC,WAAW,CAAC;MACpBC,YAAY,EAAE,IAAI,CAAC9D,aAAa;MAChCyB,WAAW;MACXS,YAAY;MACZc;IACF,CAAC,CAAC;IAEF,OAAOA,WAAW;EACpB;EAEOe,eAAeA,CAAC;IACrBtC,WAAW;IACXuC,MAAM;IACNC;EACyB,CAAC,EAAQ;IAClC,IAAI,CAACzC,OAAO,CAACC,WAAW,EAAE,IAAIyC,yBAAU,CAAC;MAAEF,MAAM;MAAEC;IAAQ,CAAC,CAAC,CAAC;IAC9D,IAAI,CAACE,SAAS,CAAC1C,WAAW,CAAC;EAC7B;EAEO0C,SAASA,CAAC1C,WAAmB,EAAQ;IAC1C,IAAI,CAAC,IAAI,CAACX,qBAAqB,EAAE;MAC/B,MAAM,IAAIe,8BAAc,CAACC,kCAAkB,CAACC,cAAc,CAAC;IAC7D;IAEA,MAAMW,OAAO,GAAGf,oBAAS,CAACgB,UAAU,CAClClB,WAAW,EACX,IAAI,CAACX,qBAAqB,CAC3B;IAED,MAAM0B,SAAS,GAAGb,oBAAS,CAACc,YAAY,CACtChB,WAAW,EACX,IAAI,CAACX,qBAAqB,CAC3B;IAED,IAAI,CAACnB,SAAS,CAACyE,SAAS,CAAC;MAAE3C,WAAW;MAAEsB,IAAI,EAAEL,OAAO;MAAEF;IAAU,CAAC,CAAC;EACrE;EAEO6B,cAAcA,CAAA,EAAqB;IACxC,IAAI,CAAC,IAAI,CAACvD,qBAAqB,EAAE;MAC/B,MAAM,IAAIe,8BAAc,CAACC,kCAAkB,CAACC,cAAc,CAAC;IAC7D;IAEA,OAAO,IAAI,CAACjB,qBAAqB,CAACQ,WAAW,CAACgD,GAAG,CAAC,CAAC;MAAEhC,EAAE;MAAEiC;IAAK,CAAC,MAAM;MACnEjC,EAAE,EAAEtD,MAAM,CAACsD,EAAE,CAAC;MACdiC;IACF,CAAC,CAAC,CAAC;EACL;EAEOC,qBAAqBA,CAC1B/C,WAAmB,EACnBgD,QAAQ,GAAG,IAAI,EACG;IAClB,IAAI,CAAC,IAAI,CAACrD,sBAAsB,IAAI,CAAC,IAAI,CAACN,qBAAqB,EAAE;MAC/D,MAAM,IAAIe,8BAAc,CAACC,kCAAkB,CAACC,cAAc,CAAC;IAC7D;IAEAJ,oBAAS,CAACC,mBAAmB,CAACH,WAAW,CAAC,CAACN,KAAK,EAAE;IAElD,MAAMG,WAAW,GAAG,IAAI,CAACR,qBAAqB,CAACQ,WAAW;IAC1D,MAAMJ,MAAwB,GAAG,EAAE;IAEnC,MAAM0B,aAAa,GACjB,IAAI,CAAC9B,qBAAqB,CAAC+B,mBAAmB,CAACpB,WAAW,CAAC;IAE7D,KAAK,MAAMU,UAAU,IAAIb,WAAW,EAAE;MACpC,MAAM;QAAEgB,EAAE;QAAEiC,IAAI;QAAElB;MAAQ,CAAC,GAAGlB,UAAU;MAExC,MAAMgB,eAAe,GAAGxB,oBAAS,CAACyB,cAAc,CAAC;QAC/CR,aAAa;QACbnB,WAAW;QACX4B,OAAO;QACPjC,sBAAsB,EAAE,IAAI,CAACA,sBAAsB;QACnDc,YAAY,EAAElD,MAAM,CAACsD,EAAE;MACzB,CAAC,CAAC,CAACnB,KAAK,EAAE;MAEV,IAAI,CAACgC,eAAe,EAAE;QACpB;MACF;;MAEA;MACA,IAAI,CAACsB,QAAQ,EAAE;QACbvD,MAAM,CAACjE,IAAI,CAAC;UAAEqF,EAAE,EAAEtD,MAAM,CAACsD,EAAE,CAAC;UAAEiC;QAAK,CAAC,CAAC;QACrC;MACF;;MAEA;MACA;MACA,MAAMG,oBAAoB,GACxB,IAAI,CAACtD,sBAAsB,CAACuD,qBAAqB,CAAClD,WAAW,CAAC;MAEhE,IAAIiD,oBAAoB,CAACnD,EAAE,EAAE;QAC3B,MAAMqD,mBAAmB,GAAGF,oBAAoB,CAAChD,IAAI,CAACS,UAAU,CAACG,EAAE,CAAC;QAEpE,IAAIsC,mBAAmB,EAAE;UACvB1D,MAAM,CAACjE,IAAI,CAAC;YAAEqF,EAAE,EAAEtD,MAAM,CAACsD,EAAE,CAAC;YAAEiC;UAAK,CAAC,CAAC;UACrC;QACF;MACF;;MAEA;MACA;MACA,MAAMM,eAAe,GACnB,IAAI,CAACzD,sBAAsB,CAAC0D,sBAAsB,CAChDrD,WAAW,EACXU,UAAU,CACX;MAEH,IAAI0C,eAAe,CAACtD,EAAE,EAAE;QACtBL,MAAM,CAACjE,IAAI,CAAC;UAAEqF,EAAE,EAAEtD,MAAM,CAACsD,EAAE,CAAC;UAAEiC;QAAK,CAAC,CAAC;MACvC;IACF;IAEA,OAAOrD,MAAM;EACf;EAEO6D,0BAA0BA,CAAC/B,WAAmB,EAAY;IAC/D,IAAI,CAAC,IAAI,CAAClC,qBAAqB,EAAE;MAC/B,MAAM,IAAIe,8BAAc,CAACC,kCAAkB,CAACC,cAAc,CAAC;IAC7D;IAEA,MAAMT,WAAW,GAAG,IAAI,CAACR,qBAAqB,CAACQ,WAAW;IAE1D,KAAK,MAAMa,UAAU,IAAIb,WAAW,EAAE;MACpC,MAAM0D,SAAS,GAAG7C,UAAU,CAAC8C,UAAU,CAAC7C,IAAI,CACzCC,IAAI,IAAKA,IAAI,CAACC,EAAE,KAAKhE,MAAM,CAAC0E,WAAW,CAAC,CAC1C;MAED,IAAIgC,SAAS,EAAE;QACb,IAAI;UACF,OAAOE,IAAI,CAACC,KAAK,CAACH,SAAS,CAACI,UAAU,CAAC;QACzC,CAAC,CAAC,OAAOC,GAAG,EAAE;UACZ,MAAM,IAAIxD,8BAAc,CAACC,kCAAkB,CAACwD,SAAS,EAAED,GAAG,CAAC;QAC7D;MACF;IACF;IAEA,MAAM,IAAIxD,8BAAc,CAACC,kCAAkB,CAACyD,iBAAiB,CAAC;EAChE;EAEOC,eAAeA,CAAA,EAAsB;IAC1C,IAAI,CAAC,IAAI,CAAC1E,qBAAqB,EAAE;MAC/B,MAAM,IAAIe,8BAAc,CAACC,kCAAkB,CAACC,cAAc,CAAC;IAC7D;IAEA,OAAO,IAAI,CAACjB,qBAAqB,CAAC2E,YAAY,CAACnB,GAAG,CAChD,CAAC;MAAEhC,EAAE;MAAEoD;IAAW,CAAC,MAAM;MAAEpD,EAAE;MAAE5E,GAAG,EAAEgI;IAAW,CAAC,CAAC,CAClD;EACH;EAEOC,sBAAsBA,CAAClE,WAAmB,EAAqB;IACpE,IAAI,CAAC,IAAI,CAACL,sBAAsB,IAAI,CAAC,IAAI,CAACN,qBAAqB,EAAE;MAC/D,MAAM,IAAIe,8BAAc,CAACC,kCAAkB,CAACC,cAAc,CAAC;IAC7D;IAEA,MAAM0D,YAAY,GAAG,IAAI,CAAC3E,qBAAqB,CAAC2E,YAAY;IAC5D,MAAMG,kBAAqC,GAAG,EAAE;IAEhD,MAAMhD,aAAa,GACjB,IAAI,CAAC9B,qBAAqB,CAAC+B,mBAAmB,CAACpB,WAAW,CAAC;IAE7D,KAAK,MAAMoE,WAAW,IAAIJ,YAAY,EAAE;MACtC,MAAMK,aAAa,GAAG,IAAI,CAAC1E,sBAAsB,CAC9C2E,uBAAuB,CAAC;QACvBtE,WAAW;QACXmB,aAAa;QACbiD;MACF,CAAC,CAAC,CACD1E,KAAK,EAAE;MAEV,IAAI2E,aAAa,CAACE,YAAY,KAAKC,4BAAiB,EAAE;QACpD,MAAM;UAAEC,aAAa;UAAER;QAAW,CAAC,GAAGI,aAAa;QAEnDF,kBAAkB,CAAC3I,IAAI,CAAC;UAAEqF,EAAE,EAAE4D,aAAa;UAAExI,GAAG,EAAEgI;QAAW,CAAC,CAAC;MACjE;IACF;IAEA,OAAOE,kBAAkB;EAC3B;EAEOO,0BAA0BA,CAC/B1E,WAAmB,EACnBiE,UAAkB,EACV;IACR,MAAM;MAAEM;IAAa,CAAC,GAAG,IAAI,CAACI,wBAAwB,CACpD3E,WAAW,EACXiE,UAAU,CACX,CAACvE,KAAK,EAAE;IAET,OAAO6E,YAAY;EACrB;EAEOK,sBAAsBA,CAAC;IAC5B5E,WAAW;IACXiE,UAAU;IACVY;EACgC,CAAC,EAA6B;IAC9D,MAAM;MAAEN;IAAa,CAAC,GAAG,IAAI,CAACI,wBAAwB,CACpD3E,WAAW,EACXiE,UAAU,CACX,CAACvE,KAAK,EAAE;;IAET;IACA;IACA,MAAMsE,YAAY,GAAI,IAAI,CAAC3E,qBAAqB,CAC7C2E,YAAY;IAEf,MAAMc,QAAQ,GAAGd,YAAY,CAC1BrD,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAACqD,UAAU,KAAKA,UAAU,CAAC,EAC7CT,UAAU,CAAC7C,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAAC3E,GAAG,KAAKsI,YAAY,CAAC,EACpDQ,SAAS,CAACpE,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAAC3E,GAAG,KAAK4I,WAAW,CAAC;IAEtD,IAAI,CAACC,QAAQ,EAAE;MACb,MAAM,IAAI1E,8BAAc,CACtBC,kCAAkB,CAAC2E,gCAAgC,EACnDf,UAAU,EACVjE,WAAW,CACZ;IACH;IAEA,MAAMiF,eAAe,GAAG/E,oBAAS,CAACgF,oBAAoB,CAACJ,QAAQ,CAAC,CAACpF,KAAK,EAAE;IAExE,OAAOuF,eAAe;EACxB;EAEOE,mBAAmBA,CAACnF,WAAmB,EAAEiE,UAAkB,EAAW;IAC3E,MAAMM,YAAY,GAAG,IAAI,CAACG,0BAA0B,CAClD1E,WAAW,EACXiE,UAAU,CACX;IAED,OAAOM,YAAY,KAAKC,4BAAiB;EAC3C;EAEA,MAAaY,aAAaA,CAACnJ,GAAW,EAAqB;IACzD,MAAMoJ,UAAU,GAAG,MAAM,IAAI,CAACnH,SAAS,CAACkH,aAAa,CAACnJ,GAAG,CAAC;IAE1D,OAAOoJ,UAAU,CAAC3F,KAAK,EAAE;EAC3B;EAEO4F,qBAAqBA,CAACC,QAAoB,EAAQ;IACvD,IAAI,CAAC,IAAI,CAAClG,qBAAqB,EAAE;MAC/B,MAAM,IAAIe,8BAAc,CAACC,kCAAkB,CAACC,cAAc,CAAC;IAC7D;IAEA,IAAI,CAACjB,qBAAqB,CAACiG,qBAAqB,CAACC,QAAQ,CAAC;EAC5D;EAEOC,qBAAqBA,CAACxF,WAAmB,EAAU;IACxD,OAAOE,oBAAS,CAACuF,eAAe,CAAC,IAAI,CAAClH,aAAa,EAAEyB,WAAW,CAAC;EACnE;EAEQ2E,wBAAwBA,CAC9B3E,WAAmB,EACnBiE,UAAkB,EACgC;IAClD,IAAI,CAAC,IAAI,CAACtE,sBAAsB,IAAI,CAAC,IAAI,CAACN,qBAAqB,EAAE;MAC/D,OAAO,IAAAqG,UAAG,EAAC,IAAItF,8BAAc,CAACC,kCAAkB,CAACC,cAAc,CAAC,CAAC;IACnE;IAEA,MAAM0D,YAAY,GAAG,IAAI,CAAC3E,qBAAqB,CAAC2E,YAAY;IAC5D,MAAMI,WAAW,GAAGJ,YAAY,CAACrD,IAAI,CAClCC,IAAI,IAAKA,IAAI,CAACqD,UAAU,KAAKA,UAAU,CACzC;IAED,IAAI,CAACG,WAAW,EAAE;MAChB,OAAO,IAAAsB,UAAG,EACR,IAAItF,8BAAc,CAChBC,kCAAkB,CAAC2E,gCAAgC,EACnDf,UAAU,EACVjE,WAAW,CACZ,CACF;IACH;IAEA,MAAMmB,aAAa,GACjB,IAAI,CAAC9B,qBAAqB,CAAC+B,mBAAmB,CAACpB,WAAW,CAAC;IAE7D,MAAMqE,aAAa,GAAG,IAAI,CAAC1E,sBAAsB,CAC9C2E,uBAAuB,CAAC;MACvBtE,WAAW;MACXoE,WAAW;MACXjD,aAAa;MACbwE,cAAc,EAAE;IAClB,CAAC,CAAC,CACDjG,KAAK,EAAE;IAEV,MAAM;MAAEe,YAAY;MAAEc,WAAW;MAAEqE;IAAK,CAAC,GAAGvB,aAAa;IAEzD,IAAI,OAAO9C,WAAW,KAAK,QAAQ,IAAI,OAAOd,YAAY,KAAK,QAAQ,EAAE;MACvEP,oBAAS,CAACkC,WAAW,CAAC;QACpBC,YAAY,EAAE,IAAI,CAAC9D,aAAa;QAChCyB,WAAW;QACXS,YAAY;QACZc;MACF,CAAC,CAAC;IACJ;IAEA,MAAMR,SAAS,GAAGb,oBAAS,CAACc,YAAY,CACtChB,WAAW,EACX,IAAI,CAACX,qBAAqB,CAC3B;IAED,IAAIuG,IAAI,EAAE;MACR1F,oBAAS,CAAC2F,SAAS,CAAC;QAClB7F,WAAW;QACX9B,SAAS,EAAE,IAAI,CAACA,SAAS;QACzB4H,oBAAoB,EAAEzB,aAAa;QACnChF,qBAAqB,EAAE,IAAI,CAACA,qBAAqB;QACjD0B;MACF,CAAC,CAAC;IACJ;IAEA,OAAO,IAAAgF,SAAE,EAAC1B,aAAa,CAAC;EAC1B;AACF;AAAC2B,OAAA,CAAAxI,eAAA,GAAAA,eAAA"}
|
|
1
|
+
{"version":3,"file":"kameleoonClient.js","names":["_tsRes","require","_cacheManager","_campaignConfiguration","_clientSettings","_constants","_kameleoonData","_kameleoonError","_requester","_storage","_externalStorage","_utilities","_variationConfiguration","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","KameleoonClient","constructor","siteCode","configuration","internalConfiguration","settings","clientSettings","ClientSettings","externalStorage","externalEventSource","externalPackageInfo","externalRequestDispatcher","externalClientConfiguration","targetingDataCleanupInterval","requester","Requester","environment","packageInfo","requestDispatcher","trackingCache","CacheManager","CACHE_CLEANUP_TIMEOUT","clientDataStorage","ExternalStorage","initialize","KameleoonStorageKey","ClientData","variationDataStorage","VariationData","campaignConfiguration","CampaignConfiguration","storage","targetingCleanupInterval","useCache","result","throw","variationConfiguration","VariationConfiguration","experiments","ok","addData","visitorCode","data","Utilities","validateVisitorCode","KameleoonError","KameleoonException","Initialization","addTargetingData","getRemoteVisitorData","shouldAddData","getVisitorData","visitorData","parseVisitorData","item","triggerExperiment","experimentId","experiment","find","id","ExperimentConfigurationNotFound","userAgent","getUserAgent","dataUrl","getDataUrl","targetingData","storedTargetingData","trackingParameters","body","variationId","UNALLOCATED_VARIATION_ID","isUnallocated","targetingResult","checkTargeting","segment","getAssociatedVariationId","else","error","type","NotAllocated","trackExperiment","NotTargeted","updateCache","cacheManager","trackConversion","goalId","revenue","Conversion","flushData","trackData","getExperiments","map","name","getVisitorExperiments","isActive","experimentVariations","getAssignedVariations","experimentVariation","variationResult","getExperimentVariation","getExperimentVariationData","variation","variations","JSON","parse","customJson","err","JSONParse","VariationNotFound","getFeatureFlags","featureFlags","featureKey","getVisitorFeatureFlags","resultFeatureFlags","featureFlag","variationData","getFeatureFlagVariation","variationKey","OFF_VARIATION_KEY","featureFlagId","getFeatureFlagVariationKey","_getFeatureFlagVariation","getFeatureFlagVariable","variableKey","variable","variables","FeatureFlagConfigurationNotFound","featureVariable","parseFeatureVariable","isFeatureFlagActive","getRemoteData","remoteData","onConfigurationUpdate","callback","getEngineTrackingCode","getTrackingCode","Err","withAssignment","rule","trackRule","featureFlagVariation","Ok","exports"],"sources":["../src/kameleoonClient.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { CacheManager } from './cacheManager';\nimport { CampaignConfiguration, JSONType } from './campaignConfiguration';\nimport { ClientSettings } from './clientSettings';\nimport {\n CACHE_CLEANUP_TIMEOUT,\n OFF_VARIATION_KEY,\n UNALLOCATED_VARIATION_ID,\n} from './constants';\nimport { IExternalEventSourceConstructor } from './eventSource';\nimport { Conversion, KameleoonDataType } from './kameleoonData';\nimport { KameleoonError, KameleoonException } from './kameleoonError';\nimport { Requester, TrackExperimentParamsType } from './requester';\nimport {\n ClientDataType,\n KameleoonStorageKey,\n VariationDataType,\n} from './storage';\nimport { ExternalStorage } from './storage/externalStorage';\nimport {\n TrackConversionParamsType,\n ExperimentType,\n FeatureFlagType,\n GetFeatureFlagVariableParamsType,\n FeatureVariableResultType,\n SDKCoreParameters,\n TrackingCacheItemType,\n} from './types';\nimport { Utilities } from './utilities';\nimport {\n FeatureFlagVariationType,\n VariationConfiguration,\n} from './variationConfiguration';\n\n/**\n * @interface an interface of KameleoonClient instance\n */\nexport interface IKameleoonClient {\n /**\n * @method initialize - an asynchronous method for KameleoonClient initialization by fetching Kameleoon SDK related data from server or by retrieving data from local source if data is up-to-date or update interval has not been reached\n * @param {boolean | undefined} useCache - optional parameter for activating SDK offline mode, if `true` is passed failed polls will not return error and will use cached data if such data is available, default value is `false`. Note: if offline mode is on, SDK will still try to retrieve the latest data.\n * @returns {Promise<boolean>} Promise resolved into boolean field indicating success or fail\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.StorageWrite` Couldn't update storage data\n * - `KameleoonException.ClientConfiguration` Couldn't retrieve client configuration from Kameleoon Api\n * - `KameleoonException.MaximumRetriesReached` Maximum retries reached, request failed\n */\n initialize(useCache?: boolean): Promise<boolean>;\n initialize(): Promise<boolean>;\n /**\n * @method addData - method for adding targeting data to the storage so that other methods could decide whether the current visitor is targeted or not. Note: userAgent data will not be stored in storage like other data, and it will be sent with every tracking request for bot filtration.\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {KameleoonDataType[]} kameleoonData - number of instances of any type of `KameleoonData`, can be added solely in array or as a sequential arguments\n * @returns {void}\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` The visitor code length was exceeded\n * - `KameleoonException.StorageWrite` Couldn't update storage data\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n addData: (visitorCode: string, ...data: KameleoonDataType[]) => void;\n /**\n * @method getRemoteVisitorData - an asynchronous method for retrieving custom data for the latest visit of `visitorCode` from Kameleoon Data API and optionally adding it to the storage so that other methods could decide whether the current visitor is targeted or not.\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {boolean | undefined} shouldAddData - optional parameter for adding retrieved data to the storage like `addData` method does, default value is `true`\n * @returns {KameleoonDataType[]} promise resolved to an array of `KameleoonData` instances, only includes custom data\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.RemoteData` - Couldn't retrieve data from Kameleoon server\n */\n getRemoteVisitorData: (\n visitorCode: string,\n shouldAddData?: boolean,\n ) => Promise<KameleoonDataType[]>;\n /**\n * @method triggerExperiment - triggers experiment by assigning the variation to the user with `visitorCode`, if the variation is already assigned just returns it's id. Note: returned id `0` indicates default variation. At the same time executes `flushData` without sending extra request.\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {number} experimentId - id of experiment running for the current visitor\n * @returns {number} associated variationId which is successfully searched/assigned\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.ExperimentConfigurationNotFound` No configuration found for provided `experimentId`\n * - `KameleoonException.VisitorCodeMaxLength` The visitor code length was exceeded\n * - `KameleoonException.StorageRead` Couldn't find associated experiment by provided `experimentId` and `visitorCode` inside the storage\n * - `KameleoonException.NotTargeted` Current visitor is not targeted\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n triggerExperiment: (visitorCode: string, experimentId: number) => number;\n /**\n * @method trackConversion - creates and adds `Conversion` data to the visitor with specified parameters and executes `flushData`. Note: it's a helper method for the quick and convenient conversion tracking, however creating and adding `Conversion` manually allows more flexible `Conversion` with `negative` parameter\n * @param {TrackConversionParamsType} conversionParameters - `visitorCode`, `goalId` and `revenue` parameters for data tracking\n * @returns {void}\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` The visitor code length was exceeded\n * - `KameleoonException.StorageWrite` Couldn't update storage data\n */\n trackConversion: ({\n visitorCode,\n goalId,\n revenue,\n }: TrackConversionParamsType) => void;\n /**\n * @method flushData - takes visitor associated kameleoon data and sends the data tracking request with collected data\n * sent data is removed from `KameleoonClient` instance but not from the storage for correct targeting checks\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @returns {void}\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n flushData: (visitorCode: string) => void;\n /**\n * @method getExperiments - returns a list of experiments stored in the client configuration\n * @returns {ExperimentType[]} a list of all experiments items with `id` and `name` fields\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n getExperiments: () => ExperimentType[];\n /**\n * @method getVisitorExperiments - returns a list of experiments that the visitor with `visitorCode` is targeted by and that are *active* for the visitor (visitor will have one of the variations allocated if the experiment will be triggered).\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {boolean | undefined} isAllocated - boolean value indicating that only experiments *allocated* for visitor will be returned. Default value is `true`\n * @returns {ExperimentType[]} a list of all experiments items with `id` and `name` fields\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n getVisitorExperiments: (\n visitorCode: string,\n isAllocated?: boolean,\n ) => ExperimentType[];\n /**\n * @method getExperimentVariationData - returns variation data in JSON format for the variation with `variationId`\n * @param {number} variationId - id of variation\n * @returns {JSONType} variation data in JSON format\n * @throws `KameleoonError` with one of the following `type` s:\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n * - `KameleoonException.JSONParse` - Couldn't pass JSON value\n * - `KameleoonException.VariationNotFound` - No variation found for provided `variationId`\n */\n getExperimentVariationData: (variationId: number) => JSONType | null;\n /**\n * @method getFeatureFlags - returns a list of feature flags stored in the client configuration\n * @returns {FeatureFlagType[]} a list of all feature flags items with `id` and `key` fields\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n getFeatureFlags: () => FeatureFlagType[];\n /**\n * @method getVisitorFeatureFlags - returns a list of feature flags that the visitor with `visitorCode` that is targeted by and that are *active* for the visitor (visitor will have one of the variations allocated).\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @returns {FeatureFlagType[]} a list of all feature flags items with `id` and `key` fields\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n * - `KameleoonException.NotTargeted` - Current visitor is not targeted\n */\n getVisitorFeatureFlags: (visitorCode: string) => FeatureFlagType[];\n /**\n * @method isFeatureFlagActive - returns a boolean indicating whether the visitor with `visitorCode` has `featureKey` active for him, this method includes targeting check, finding the according variation exposed to the visitor and saving it to storage along with sending tracking request\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {string} featureKey - a unique key for feature flag\n * @returns {boolean} a boolean indicator of whether the feature flag with `featureKey` is active for visitor with `visitorCode`\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n * - `KameleoonException.FeatureFlagConfigurationNotFound` - No feature flag was found for provided `visitorCode` and `featureKey`\n * - `KameleoonException.DataInconsistency` - Allocated variation was found but there is no feature flag with according `featureKey`.\n * - `KameleoonException.NotTargeted` - Current visitor is not targeted\n */\n isFeatureFlagActive: (visitorCode: string, featureKey: string) => boolean;\n /**\n * @method getFeatureFlagVariationKey - returns variation key for the visitor under `visitorCode` in the found feature flag, this method includes targeting check, finding the according variation exposed to the visitor and saving it to storage along with sending tracking request\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @param {string} featureKey - a unique key for feature flag\n * @returns {string} a string containing variable key for the allocated feature flag variation for the provided visitor\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n * - `KameleoonException.FeatureFlagConfigurationNotFound` - No feature flag was found for provided `visitorCode` and `featureKey`\n * - `KameleoonException.NotTargeted` - Current visitor is not targeted\n */\n getFeatureFlagVariationKey: (\n visitorCode: string,\n featureKey: string,\n ) => string;\n /**\n * @method getFeatureFlagVariable - returns a variable for the visitor under `visitorCode` in the found feature flag, this method includes targeting check, finding the according variation exposed to the visitor and saving it to storage along with sending tracking request\n * @param {GetFeatureFlagVariableParamsType} parameters - an object with parameters of a type `GetFeatureFlagVariableParamsType`, see the type for details.\n * @returns {FeatureVariableResultType} a variable object containing `type` and `value` fields, `type` can be checked against `FeatureVariableType` enum, if the `type` is `FeatureVariableType.BOOLEAN` then the `value` type will be `boolean` and so on.\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.VisitorCodeMaxLength` - The visitor code length was exceeded\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n * - `KameleoonException.FeatureFlagConfigurationNotFound` - No feature flag was found for provided `visitorCode` and `featureKey`\n * - `KameleoonException.NotTargeted` - Current visitor is not targeted\n * - `KameleoonException.JSONParse` - Couldn't pass JSON value\n * - `KameleoonException.NumberParse` - Couldn't pass Number value\n */\n getFeatureFlagVariable: ({\n visitorCode,\n featureKey,\n variableKey,\n }: GetFeatureFlagVariableParamsType) => FeatureVariableResultType;\n /**\n * @method getRemoteData - returns a data which is stored for specified siteCode on a remote Kameleoon server.\n * @param {string} key - unique key that the data you try to get is associated with.\n * @returns {JSONType} - promise with retrieving data for specific key.\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.RemoteData` - Couldn't retrieve data from Kameleoon server\n */\n getRemoteData: (key: string) => Promise<JSONType>;\n /**\n * @method getEngineTrackingCode - returns Kameleoon tracking code for the current visitor. Tracking code is built of the experiments that were triggered and feature flag variations that were assigned during the last 5 seconds\n * See [Kameleoon Automation API](https://developers.kameleoon.com/apis/activation-api-js/api-reference#trigger-1) for the details\n * @param {string} visitorCode - unique visitor identification string, can't exceed 255 characters length\n * @returns {string} Kameleoon tracking code\n */\n getEngineTrackingCode: (visitorCode: string) => string;\n /**\n * @method onConfigurationUpdate - fires a callback on client configuration update. Note: this method only works for server sent events of real time update.\n * @param {() => void} callback - callback function with no parameters that will be called upon configuration update\n * @returns {void}\n * @throws `KameleoonError` with one of the following `type` s:\n *\n * - `KameleoonException.Initialization` - Method was executed before `initialize` was done for `kameleoonClient`\n */\n onConfigurationUpdate: (callback: () => void) => void;\n}\n\n/**\n * @class\n * KameleoonClient - a class for creating kameleoon client instance\n * for communicating with Kameleoon JavaScript SDK Core, when new instance is created\n */\nexport class KameleoonClient implements IKameleoonClient {\n private variationConfiguration?: VariationConfiguration;\n private campaignConfiguration: CampaignConfiguration;\n private variationDataStorage: ExternalStorage<VariationDataType>;\n private trackingCache: CacheManager<TrackingCacheItemType>;\n private requester: Requester;\n private externalEventSource: IExternalEventSourceConstructor;\n\n /**\n * @param {SDKCoreParameters} sdkCoreParameters - parameters for initializing sdk core\n */\n constructor({\n siteCode,\n configuration,\n internalConfiguration,\n }: SDKCoreParameters) {\n const { settings: clientSettings } = new ClientSettings(\n siteCode,\n configuration,\n );\n const {\n externalStorage,\n externalEventSource,\n externalPackageInfo,\n externalRequestDispatcher,\n externalClientConfiguration,\n targetingDataCleanupInterval,\n } = internalConfiguration;\n const requester = new Requester({\n siteCode,\n environment: clientSettings.environment,\n packageInfo: externalPackageInfo,\n requestDispatcher: externalRequestDispatcher,\n });\n const trackingCache = new CacheManager<TrackingCacheItemType>(\n CACHE_CLEANUP_TIMEOUT,\n );\n const clientDataStorage = new ExternalStorage<ClientDataType>(\n externalStorage.initialize(KameleoonStorageKey.ClientData),\n );\n const variationDataStorage = new ExternalStorage<VariationDataType>(\n externalStorage.initialize(KameleoonStorageKey.VariationData),\n );\n const campaignConfiguration = new CampaignConfiguration({\n settings: clientSettings,\n storage: clientDataStorage,\n requester,\n externalClientConfiguration,\n targetingCleanupInterval: targetingDataCleanupInterval,\n });\n\n this.requester = requester;\n this.trackingCache = trackingCache;\n this.campaignConfiguration = campaignConfiguration;\n this.variationDataStorage = variationDataStorage;\n this.externalEventSource = externalEventSource;\n }\n\n public async initialize(useCache?: boolean): Promise<boolean> {\n const result = await this.campaignConfiguration.initialize(\n this.externalEventSource,\n useCache,\n );\n result.throw();\n\n const variationConfiguration = new VariationConfiguration(\n this.campaignConfiguration.experiments,\n this.variationDataStorage,\n );\n\n this.variationConfiguration = variationConfiguration;\n\n return result.ok;\n }\n\n public addData(visitorCode: string, ...data: KameleoonDataType[]): void {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.campaignConfiguration.addTargetingData(visitorCode, ...data).throw();\n }\n\n public async getRemoteVisitorData(\n visitorCode: string,\n shouldAddData = true,\n ): Promise<KameleoonDataType[]> {\n const result = await this.requester.getVisitorData(visitorCode);\n const data = result.throw();\n\n const visitorData = Utilities.parseVisitorData(data);\n\n if (shouldAddData) {\n for (const item of visitorData) {\n this.addData(visitorCode, item);\n }\n }\n\n return visitorData;\n }\n\n public triggerExperiment(visitorCode: string, experimentId: number): number {\n Utilities.validateVisitorCode(visitorCode).throw();\n\n if (!this.campaignConfiguration || !this.variationConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const experiment = this.campaignConfiguration.experiments.find(\n (item) => item.id === String(experimentId),\n );\n\n if (!experiment) {\n throw new KameleoonError(\n KameleoonException.ExperimentConfigurationNotFound,\n experimentId,\n visitorCode,\n );\n }\n\n const userAgent = Utilities.getUserAgent(\n visitorCode,\n this.campaignConfiguration,\n );\n const dataUrl = Utilities.getDataUrl(\n visitorCode,\n this.campaignConfiguration,\n );\n const targetingData =\n this.campaignConfiguration.storedTargetingData[visitorCode];\n const trackingParameters: Omit<\n TrackExperimentParamsType,\n 'variationId' | 'isUnallocated'\n > = {\n body: dataUrl,\n visitorCode,\n experimentId,\n };\n\n let variationId = UNALLOCATED_VARIATION_ID;\n let isUnallocated = true;\n\n const targetingResult = Utilities.checkTargeting({\n visitorCode,\n experimentId,\n targetingData,\n segment: experiment.segment,\n variationConfiguration: this.variationConfiguration,\n }).throw();\n\n variationId = this.variationConfiguration\n .getAssociatedVariationId(visitorCode, experimentId)\n .else((error) => {\n if (error.type === KameleoonException.NotAllocated) {\n this.requester.trackExperiment({\n isUnallocated: true,\n variationId,\n userAgent,\n ...trackingParameters,\n });\n\n return UNALLOCATED_VARIATION_ID;\n }\n\n throw error;\n });\n\n this.requester.trackExperiment({\n variationId,\n isUnallocated,\n userAgent,\n ...trackingParameters,\n });\n\n if (!targetingResult) {\n throw new KameleoonError(KameleoonException.NotTargeted, visitorCode);\n }\n\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n visitorCode,\n experimentId,\n variationId,\n });\n\n return variationId;\n }\n\n public trackConversion({\n visitorCode,\n goalId,\n revenue,\n }: TrackConversionParamsType): void {\n this.addData(visitorCode, new Conversion({ goalId, revenue }));\n this.flushData(visitorCode);\n }\n\n public flushData(visitorCode: string): void {\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const dataUrl = Utilities.getDataUrl(\n visitorCode,\n this.campaignConfiguration,\n );\n\n const userAgent = Utilities.getUserAgent(\n visitorCode,\n this.campaignConfiguration,\n );\n\n this.requester.trackData({ visitorCode, body: dataUrl, userAgent });\n }\n\n public getExperiments(): ExperimentType[] {\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n return this.campaignConfiguration.experiments.map(({ id, name }) => ({\n id: Number(id),\n name,\n }));\n }\n\n public getVisitorExperiments(\n visitorCode: string,\n isActive = true,\n ): ExperimentType[] {\n if (!this.variationConfiguration || !this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n Utilities.validateVisitorCode(visitorCode).throw();\n\n const experiments = this.campaignConfiguration.experiments;\n const result: ExperimentType[] = [];\n\n const targetingData =\n this.campaignConfiguration.storedTargetingData[visitorCode];\n\n for (const experiment of experiments) {\n const { id, name, segment } = experiment;\n\n const targetingResult = Utilities.checkTargeting({\n targetingData,\n visitorCode,\n segment,\n variationConfiguration: this.variationConfiguration,\n experimentId: Number(id),\n }).throw();\n\n if (!targetingResult) {\n continue;\n }\n\n // -- If `isActive=false` then return every experiment\n if (!isActive) {\n result.push({ id: Number(id), name });\n continue;\n }\n\n // -- Else first check if there are saved variations for the experiment\n // if there is at least one than it's active\n const experimentVariations =\n this.variationConfiguration.getAssignedVariations(visitorCode);\n\n if (experimentVariations.ok) {\n const experimentVariation = experimentVariations.data[experiment.id];\n\n if (experimentVariation) {\n result.push({ id: Number(id), name });\n continue;\n }\n }\n\n // -- Second check if the experiment will have an allocated variation upon triggering\n // if yes than it's active\n const variationResult =\n this.variationConfiguration.getExperimentVariation(\n visitorCode,\n experiment,\n );\n\n if (variationResult.ok) {\n result.push({ id: Number(id), name });\n }\n }\n\n return result;\n }\n\n public getExperimentVariationData(variationId: number): JSONType {\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const experiments = this.campaignConfiguration.experiments;\n\n for (const experiment of experiments) {\n const variation = experiment.variations.find(\n (item) => item.id === String(variationId),\n );\n\n if (variation) {\n try {\n return JSON.parse(variation.customJson);\n } catch (err) {\n throw new KameleoonError(KameleoonException.JSONParse, err);\n }\n }\n }\n\n throw new KameleoonError(KameleoonException.VariationNotFound);\n }\n\n public getFeatureFlags(): FeatureFlagType[] {\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n return this.campaignConfiguration.featureFlags.map(\n ({ id, featureKey }) => ({ id, key: featureKey }),\n );\n }\n\n public getVisitorFeatureFlags(visitorCode: string): FeatureFlagType[] {\n if (!this.variationConfiguration || !this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n const featureFlags = this.campaignConfiguration.featureFlags;\n const resultFeatureFlags: FeatureFlagType[] = [];\n\n const targetingData =\n this.campaignConfiguration.storedTargetingData[visitorCode];\n\n for (const featureFlag of featureFlags) {\n const variationData = this.variationConfiguration\n .getFeatureFlagVariation({\n visitorCode,\n targetingData,\n featureFlag,\n })\n .throw();\n\n if (variationData.variationKey !== OFF_VARIATION_KEY) {\n const { featureFlagId, featureKey } = variationData;\n\n resultFeatureFlags.push({ id: featureFlagId, key: featureKey });\n }\n }\n\n return resultFeatureFlags;\n }\n\n public getFeatureFlagVariationKey(\n visitorCode: string,\n featureKey: string,\n ): string {\n const { variationKey } = this._getFeatureFlagVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n return variationKey;\n }\n\n public getFeatureFlagVariable({\n visitorCode,\n featureKey,\n variableKey,\n }: GetFeatureFlagVariableParamsType): FeatureVariableResultType {\n const { variationKey } = this._getFeatureFlagVariation(\n visitorCode,\n featureKey,\n ).throw();\n\n // --- Note ---\n // `_getFeatureFlagVariation` already checks `campaignConfiguration` initialization\n const featureFlags = (this.campaignConfiguration as CampaignConfiguration)\n .featureFlags;\n\n const variable = featureFlags\n .find((item) => item.featureKey === featureKey)\n ?.variations.find((item) => item.key === variationKey)\n ?.variables.find((item) => item.key === variableKey);\n\n if (!variable) {\n throw new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n visitorCode,\n );\n }\n\n const featureVariable = Utilities.parseFeatureVariable(variable).throw();\n\n return featureVariable;\n }\n\n public isFeatureFlagActive(visitorCode: string, featureKey: string): boolean {\n const variationKey = this.getFeatureFlagVariationKey(\n visitorCode,\n featureKey,\n );\n\n return variationKey !== OFF_VARIATION_KEY;\n }\n\n public async getRemoteData(key: string): Promise<JSONType> {\n const remoteData = await this.requester.getRemoteData(key);\n\n return remoteData.throw();\n }\n\n public onConfigurationUpdate(callback: () => void): void {\n if (!this.campaignConfiguration) {\n throw new KameleoonError(KameleoonException.Initialization);\n }\n\n this.campaignConfiguration.onConfigurationUpdate(callback);\n }\n\n public getEngineTrackingCode(visitorCode: string): string {\n return Utilities.getTrackingCode(this.trackingCache, visitorCode);\n }\n\n private _getFeatureFlagVariation(\n visitorCode: string,\n featureKey: string,\n ): Result<FeatureFlagVariationType, KameleoonError> {\n if (!this.variationConfiguration || !this.campaignConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n const featureFlags = this.campaignConfiguration.featureFlags;\n const featureFlag = featureFlags.find(\n (item) => item.featureKey === featureKey,\n );\n\n if (!featureFlag) {\n return Err(\n new KameleoonError(\n KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey,\n visitorCode,\n ),\n );\n }\n\n const targetingData =\n this.campaignConfiguration.storedTargetingData[visitorCode];\n\n const variationData = this.variationConfiguration\n .getFeatureFlagVariation({\n visitorCode,\n featureFlag,\n targetingData,\n withAssignment: true,\n })\n .throw();\n\n const { experimentId, variationId, rule } = variationData;\n\n if (typeof variationId === 'number' && typeof experimentId === 'number') {\n Utilities.updateCache({\n cacheManager: this.trackingCache,\n visitorCode,\n experimentId,\n variationId,\n });\n }\n\n const userAgent = Utilities.getUserAgent(\n visitorCode,\n this.campaignConfiguration,\n );\n\n if (rule) {\n Utilities.trackRule({\n visitorCode,\n requester: this.requester,\n featureFlagVariation: variationData,\n campaignConfiguration: this.campaignConfiguration,\n userAgent,\n });\n }\n\n return Ok(variationData);\n }\n}\n"],"mappings":"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"}
|
|
@@ -7,8 +7,9 @@ export declare const UrlParameter: StrictParameterRecord<ParameterType>;
|
|
|
7
7
|
export declare const UrlQuery: StrictQueryRecord<QueryType>;
|
|
8
8
|
export declare const UrlTracking: StrictTrackingRecord<TrackingType>;
|
|
9
9
|
export declare const URL: {
|
|
10
|
-
|
|
11
|
-
TRACKING: string;
|
|
12
|
-
DATA: string;
|
|
10
|
+
SERVER_SENT_EVENTS: string;
|
|
13
11
|
CLIENT_CONFIGURATION: string;
|
|
12
|
+
VISIT_EVENT: string;
|
|
13
|
+
VISIT_DATA: string;
|
|
14
|
+
DATA_MAP: string;
|
|
14
15
|
};
|
|
@@ -7,9 +7,11 @@ exports.UrlTracking = exports.UrlQuery = exports.UrlParameter = exports.UrlEvent
|
|
|
7
7
|
let Header = /*#__PURE__*/function (Header) {
|
|
8
8
|
Header["UserAgent"] = "User-Agent";
|
|
9
9
|
return Header;
|
|
10
|
-
}({});
|
|
10
|
+
}({}); // TODO:
|
|
11
|
+
// IMPORTANT! Change the top level domain to 'net' for test environment when test server is fixed
|
|
12
|
+
// Temporary workaround for an urgent release
|
|
11
13
|
exports.Header = Header;
|
|
12
|
-
const topLevelDomain = undefined === 'test' ? '
|
|
14
|
+
const topLevelDomain = undefined === 'test' ? 'com' : 'com';
|
|
13
15
|
const dataTopLevelDomain = undefined === 'test' ? 'net' : 'io';
|
|
14
16
|
const UrlEventType = {
|
|
15
17
|
CustomData: 'eventType=customData',
|
|
@@ -41,14 +43,18 @@ const UrlParameter = {
|
|
|
41
43
|
SdkVersion: '&sdkVersion=',
|
|
42
44
|
ValuesCountMap: '&valuesCountMap=',
|
|
43
45
|
Nonce: '&nonce=',
|
|
44
|
-
Id: '&id='
|
|
46
|
+
Id: '&id=',
|
|
47
|
+
CustomData: '&customData=',
|
|
48
|
+
CurrentVisit: '¤tVisit=',
|
|
49
|
+
MaxNumberPreviousVisits: '&maxNumberPreviousVisits='
|
|
45
50
|
};
|
|
46
51
|
exports.UrlParameter = UrlParameter;
|
|
47
52
|
const UrlQuery = {
|
|
48
53
|
Sse: 'sse?siteCode=',
|
|
49
54
|
Mobile: 'mobile?siteCode=',
|
|
50
55
|
Map: 'map?siteCode=',
|
|
51
|
-
Events: 'events?siteCode='
|
|
56
|
+
Events: 'events?siteCode=',
|
|
57
|
+
Visitor: 'visitor?siteCode='
|
|
52
58
|
};
|
|
53
59
|
exports.UrlQuery = UrlQuery;
|
|
54
60
|
const UrlTracking = {
|
|
@@ -56,11 +62,13 @@ const UrlTracking = {
|
|
|
56
62
|
Map: 'map/'
|
|
57
63
|
};
|
|
58
64
|
exports.UrlTracking = UrlTracking;
|
|
65
|
+
const URL_DATA_API = `https://data.kameleoon.${dataTopLevelDomain}`;
|
|
59
66
|
const URL = {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
SERVER_SENT_EVENTS: `https://events.kameleoon.${topLevelDomain}:8110/`,
|
|
68
|
+
CLIENT_CONFIGURATION: `https://client-config.kameleoon.${topLevelDomain}/`,
|
|
69
|
+
VISIT_EVENT: `${URL_DATA_API}/${UrlTracking.Visit + UrlQuery.Events}`,
|
|
70
|
+
VISIT_DATA: `${URL_DATA_API}/${UrlTracking.Visit + UrlQuery.Visitor}`,
|
|
71
|
+
DATA_MAP: `${URL_DATA_API}/${UrlTracking.Map + UrlQuery.Map}`
|
|
64
72
|
};
|
|
65
73
|
exports.URL = URL;
|
|
66
74
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["Header","exports","topLevelDomain","undefined","dataTopLevelDomain","UrlEventType","CustomData","StaticData","Page","Conversion","Activity","Experiment","UrlParameter","Title","ReferrersIndices","Negative","Revenue","Overwrite","Index","BrowserIndex","Href","DeviceType","SiteCode","GoalId","VisitorCode","Environment","VariationId","Ts","Key","SdkName","SdkVersion","ValuesCountMap","Nonce","Id","UrlQuery","Sse","Mobile","Map","Events","UrlTracking","Visit","URL","
|
|
1
|
+
{"version":3,"file":"constants.js","names":["Header","exports","topLevelDomain","undefined","dataTopLevelDomain","UrlEventType","CustomData","StaticData","Page","Conversion","Activity","Experiment","UrlParameter","Title","ReferrersIndices","Negative","Revenue","Overwrite","Index","BrowserIndex","Href","DeviceType","SiteCode","GoalId","VisitorCode","Environment","VariationId","Ts","Key","SdkName","SdkVersion","ValuesCountMap","Nonce","Id","CurrentVisit","MaxNumberPreviousVisits","UrlQuery","Sse","Mobile","Map","Events","Visitor","UrlTracking","Visit","URL_DATA_API","URL","SERVER_SENT_EVENTS","CLIENT_CONFIGURATION","VISIT_EVENT","VISIT_DATA","DATA_MAP"],"sources":["../../src/requester/constants.ts"],"sourcesContent":["import {\n EventType,\n ParameterType,\n QueryType,\n StrictEventTypeRecord,\n StrictParameterRecord,\n StrictQueryRecord,\n StrictTrackingRecord,\n TrackingType,\n} from './types';\n\nexport enum Header {\n UserAgent = 'User-Agent',\n}\n\n// TODO:\n// IMPORTANT! Change the top level domain to 'net' for test environment when test server is fixed\n// Temporary workaround for an urgent release\nconst topLevelDomain = process.env.NODE_ENV === 'test' ? 'com' : 'com';\nconst dataTopLevelDomain = process.env.NODE_ENV === 'test' ? 'net' : 'io';\n\nexport const UrlEventType: StrictEventTypeRecord<EventType> = {\n CustomData: 'eventType=customData',\n StaticData: 'eventType=staticData',\n Page: 'eventType=page',\n Conversion: 'eventType=conversion',\n Activity: 'eventType=activity',\n Experiment: 'eventType=experiment',\n};\nexport const UrlParameter: StrictParameterRecord<ParameterType> = {\n Title: '&title=',\n ReferrersIndices: '&referrersIndices=',\n Negative: '&negative=',\n Revenue: '&revenue=',\n Overwrite: '&overwrite=',\n Index: '&index=',\n BrowserIndex: '&browserIndex=',\n Href: '&href=',\n DeviceType: '&deviceType=',\n SiteCode: '&siteCode=',\n GoalId: '&goalId=',\n VisitorCode: '&visitorCode=',\n Environment: '&environment=',\n VariationId: '&variationId=',\n Ts: '&ts=',\n Key: '&key=',\n SdkName: '&sdkName=',\n SdkVersion: '&sdkVersion=',\n ValuesCountMap: '&valuesCountMap=',\n Nonce: '&nonce=',\n Id: '&id=',\n CustomData: '&customData=',\n CurrentVisit: '¤tVisit=',\n MaxNumberPreviousVisits: '&maxNumberPreviousVisits=',\n};\nexport const UrlQuery: StrictQueryRecord<QueryType> = {\n Sse: 'sse?siteCode=',\n Mobile: 'mobile?siteCode=',\n Map: 'map?siteCode=',\n Events: 'events?siteCode=',\n Visitor: 'visitor?siteCode=',\n};\nexport const UrlTracking: StrictTrackingRecord<TrackingType> = {\n Visit: 'visit/',\n Map: 'map/',\n};\n\nconst URL_DATA_API = `https://data.kameleoon.${dataTopLevelDomain}`;\n\nexport const URL = {\n SERVER_SENT_EVENTS: `https://events.kameleoon.${topLevelDomain}:8110/`,\n CLIENT_CONFIGURATION: `https://client-config.kameleoon.${topLevelDomain}/`,\n VISIT_EVENT: `${URL_DATA_API}/${UrlTracking.Visit + UrlQuery.Events}`,\n VISIT_DATA: `${URL_DATA_API}/${UrlTracking.Visit + UrlQuery.Visitor}`,\n DATA_MAP: `${URL_DATA_API}/${UrlTracking.Map + UrlQuery.Map}`,\n};\n"],"mappings":";;;;;;IAWYA,MAAM,0BAANA,MAAM;EAANA,MAAM;EAAA,OAANA,MAAM;AAAA,OAIlB;AACA;AACA;AAAAC,OAAA,CAAAD,MAAA,GAAAA,MAAA;AACA,MAAME,cAAc,GAAGC,SAAA,KAAyB,MAAM,GAAG,KAAK,GAAG,KAAK;AACtE,MAAMC,kBAAkB,GAAGD,SAAA,KAAyB,MAAM,GAAG,KAAK,GAAG,IAAI;AAElE,MAAME,YAA8C,GAAG;EAC5DC,UAAU,EAAE,sBAAsB;EAClCC,UAAU,EAAE,sBAAsB;EAClCC,IAAI,EAAE,gBAAgB;EACtBC,UAAU,EAAE,sBAAsB;EAClCC,QAAQ,EAAE,oBAAoB;EAC9BC,UAAU,EAAE;AACd,CAAC;AAACV,OAAA,CAAAI,YAAA,GAAAA,YAAA;AACK,MAAMO,YAAkD,GAAG;EAChEC,KAAK,EAAE,SAAS;EAChBC,gBAAgB,EAAE,oBAAoB;EACtCC,QAAQ,EAAE,YAAY;EACtBC,OAAO,EAAE,WAAW;EACpBC,SAAS,EAAE,aAAa;EACxBC,KAAK,EAAE,SAAS;EAChBC,YAAY,EAAE,gBAAgB;EAC9BC,IAAI,EAAE,QAAQ;EACdC,UAAU,EAAE,cAAc;EAC1BC,QAAQ,EAAE,YAAY;EACtBC,MAAM,EAAE,UAAU;EAClBC,WAAW,EAAE,eAAe;EAC5BC,WAAW,EAAE,eAAe;EAC5BC,WAAW,EAAE,eAAe;EAC5BC,EAAE,EAAE,MAAM;EACVC,GAAG,EAAE,OAAO;EACZC,OAAO,EAAE,WAAW;EACpBC,UAAU,EAAE,cAAc;EAC1BC,cAAc,EAAE,kBAAkB;EAClCC,KAAK,EAAE,SAAS;EAChBC,EAAE,EAAE,MAAM;EACV3B,UAAU,EAAE,cAAc;EAC1B4B,YAAY,EAAE,gBAAgB;EAC9BC,uBAAuB,EAAE;AAC3B,CAAC;AAAClC,OAAA,CAAAW,YAAA,GAAAA,YAAA;AACK,MAAMwB,QAAsC,GAAG;EACpDC,GAAG,EAAE,eAAe;EACpBC,MAAM,EAAE,kBAAkB;EAC1BC,GAAG,EAAE,eAAe;EACpBC,MAAM,EAAE,kBAAkB;EAC1BC,OAAO,EAAE;AACX,CAAC;AAACxC,OAAA,CAAAmC,QAAA,GAAAA,QAAA;AACK,MAAMM,WAA+C,GAAG;EAC7DC,KAAK,EAAE,QAAQ;EACfJ,GAAG,EAAE;AACP,CAAC;AAACtC,OAAA,CAAAyC,WAAA,GAAAA,WAAA;AAEF,MAAME,YAAY,GAAI,0BAAyBxC,kBAAmB,EAAC;AAE5D,MAAMyC,GAAG,GAAG;EACjBC,kBAAkB,EAAG,4BAA2B5C,cAAe,QAAO;EACtE6C,oBAAoB,EAAG,mCAAkC7C,cAAe,GAAE;EAC1E8C,WAAW,EAAG,GAAEJ,YAAa,IAAGF,WAAW,CAACC,KAAK,GAAGP,QAAQ,CAACI,MAAO,EAAC;EACrES,UAAU,EAAG,GAAEL,YAAa,IAAGF,WAAW,CAACC,KAAK,GAAGP,QAAQ,CAACK,OAAQ,EAAC;EACrES,QAAQ,EAAG,GAAEN,YAAa,IAAGF,WAAW,CAACH,GAAG,GAAGH,QAAQ,CAACG,GAAI;AAC9D,CAAC;AAACtC,OAAA,CAAA4C,GAAA,GAAAA,GAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { Requester } from './requester';
|
|
2
|
-
export { URL, UrlEventType, UrlParameter, Header
|
|
3
|
-
export { HttpMethod, TrackParametersType, TrackExperimentParamsType, IExternalRequestDispatcher, GetClientConfigurationResultType, } from './types';
|
|
2
|
+
export { URL, UrlEventType, UrlParameter, Header } from './constants';
|
|
3
|
+
export { HttpMethod, VisitType, TrackParametersType, TrackExperimentParamsType, IExternalRequestDispatcher, GetVisitorDataResultType, GetClientConfigurationResultType, } from './types';
|
package/dist/requester/index.js
CHANGED
|
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "GetClientConfigurationResultType", {
|
|
|
9
9
|
return _types.GetClientConfigurationResultType;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
Object.defineProperty(exports, "GetVisitorDataResultType", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _types.GetVisitorDataResultType;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
12
18
|
Object.defineProperty(exports, "Header", {
|
|
13
19
|
enumerable: true,
|
|
14
20
|
get: function () {
|
|
@@ -63,6 +69,12 @@ Object.defineProperty(exports, "UrlParameter", {
|
|
|
63
69
|
return _constants.UrlParameter;
|
|
64
70
|
}
|
|
65
71
|
});
|
|
72
|
+
Object.defineProperty(exports, "VisitType", {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
get: function () {
|
|
75
|
+
return _types.VisitType;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
66
78
|
var _requester = require("./requester");
|
|
67
79
|
var _constants = require("./constants");
|
|
68
80
|
var _types = require("./types");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_requester","require","_constants","_types"],"sources":["../../src/requester/index.ts"],"sourcesContent":["export { Requester } from './requester';\nexport { URL, UrlEventType, UrlParameter, Header
|
|
1
|
+
{"version":3,"file":"index.js","names":["_requester","require","_constants","_types"],"sources":["../../src/requester/index.ts"],"sourcesContent":["export { Requester } from './requester';\nexport { URL, UrlEventType, UrlParameter, Header } from './constants';\nexport {\n HttpMethod,\n VisitType,\n TrackParametersType,\n TrackExperimentParamsType,\n IExternalRequestDispatcher,\n GetVisitorDataResultType,\n GetClientConfigurationResultType,\n} from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from 'ts-res';
|
|
2
2
|
import { KameleoonError } from '../kameleoonError';
|
|
3
|
-
import { GetClientConfigurationResultType, RequesterParamsType, TrackDataParamsType, TrackExperimentParamsType } from './types';
|
|
3
|
+
import { GetClientConfigurationResultType, RequesterParamsType, TrackDataParamsType, TrackExperimentParamsType, GetVisitorDataResultType } from './types';
|
|
4
4
|
import { JSONType } from '../campaignConfiguration';
|
|
5
5
|
import { Nonce } from '../kameleoonData/nonce';
|
|
6
6
|
export interface IRequester {
|
|
@@ -17,6 +17,7 @@ export declare class Requester extends Nonce implements IRequester {
|
|
|
17
17
|
constructor({ siteCode, environment, packageInfo, requestDispatcher, }: RequesterParamsType);
|
|
18
18
|
getClientConfiguration(timeStamp?: number): Promise<Result<GetClientConfigurationResultType, KameleoonError>>;
|
|
19
19
|
getRemoteData(key: string): Promise<Result<JSONType, KameleoonError>>;
|
|
20
|
+
getVisitorData(visitorCode: string): Promise<Result<GetVisitorDataResultType, KameleoonError>>;
|
|
20
21
|
trackExperiment({ variationId, visitorCode, experimentId, isUnallocated, body, userAgent, callback, }: TrackExperimentParamsType): Promise<void>;
|
|
21
22
|
trackData({ visitorCode, body, userAgent, }: TrackDataParamsType): Promise<void>;
|
|
22
23
|
private getTrackingUrl;
|
|
@@ -40,7 +40,15 @@ class Requester extends _nonce.Nonce {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
async getRemoteData(key) {
|
|
43
|
-
const requestUrl = _constants.URL.
|
|
43
|
+
const requestUrl = _constants.URL.DATA_MAP + this.siteCode + _constants.UrlParameter.Key + encodeURI(key);
|
|
44
|
+
const response = await this.requestDispatcher.getRemoteData(requestUrl);
|
|
45
|
+
if (!response) {
|
|
46
|
+
return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData));
|
|
47
|
+
}
|
|
48
|
+
return (0, _tsRes.Ok)(response);
|
|
49
|
+
}
|
|
50
|
+
async getVisitorData(visitorCode) {
|
|
51
|
+
const requestUrl = _constants.URL.VISIT_DATA + this.siteCode + _constants.UrlParameter.VisitorCode + visitorCode + _constants.UrlParameter.MaxNumberPreviousVisits + 1 + _constants.UrlParameter.CustomData + true + _constants.UrlParameter.CurrentVisit + true;
|
|
44
52
|
const response = await this.requestDispatcher.getRemoteData(requestUrl);
|
|
45
53
|
if (!response) {
|
|
46
54
|
return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData));
|
|
@@ -92,7 +100,7 @@ class Requester extends _nonce.Nonce {
|
|
|
92
100
|
type,
|
|
93
101
|
version
|
|
94
102
|
} = this.packageInfo;
|
|
95
|
-
return _constants.URL.
|
|
103
|
+
return _constants.URL.VISIT_EVENT + this.siteCode + _constants.UrlParameter.VisitorCode + encodeURIComponent(visitorCode) + _constants.UrlParameter.SdkName + type + _constants.UrlParameter.SdkVersion + version;
|
|
96
104
|
}
|
|
97
105
|
}
|
|
98
106
|
exports.Requester = Requester;
|
|
@@ -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","Ok","error","Err","getRemoteData","DATA","Key","encodeURI","KameleoonError","KameleoonException","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 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 + 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 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>;
|
package/dist/requester/types.js
CHANGED
|
@@ -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 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":";;;;;;
|
|
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":"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"}
|