@kameleoon/javascript-sdk-core 2.2.1 → 2.3.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/kameleoonClient.d.ts +1 -0
- package/dist/kameleoonClient.js.map +1 -1
- package/dist/kameleoonError/constants.d.ts +1 -0
- package/dist/kameleoonError/constants.js +2 -1
- package/dist/kameleoonError/constants.js.map +1 -1
- package/dist/kameleoonError/kameleoonError.d.ts +1 -1
- package/dist/kameleoonError/kameleoonError.js +1 -0
- package/dist/kameleoonError/kameleoonError.js.map +1 -1
- package/dist/kameleoonError/types.d.ts +2 -1
- package/dist/kameleoonError/types.js +1 -0
- package/dist/kameleoonError/types.js.map +1 -1
- package/dist/kameleoonUtils.js +1 -1
- package/dist/kameleoonUtils.js.map +1 -1
- package/dist/requester/requester.js +6 -5
- package/dist/requester/requester.js.map +1 -1
- package/dist/requester/types.d.ts +7 -2
- package/dist/requester/types.js.map +1 -1
- package/dist/variationConfiguration/variationConfiguration.js +19 -9
- package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
- package/package.json +1 -1
|
@@ -12,6 +12,7 @@ export interface IKameleoonClient {
|
|
|
12
12
|
*
|
|
13
13
|
* - `KameleoonException.StorageWrite` Couldn't update storage data
|
|
14
14
|
* - `KameleoonException.ClientConfiguration` Couldn't retrieve client configuration from Kameleoon Api
|
|
15
|
+
* - `KameleoonException.MaximumRetriesReached` Maximum retries reached, request failed
|
|
15
16
|
*/
|
|
16
17
|
initialize: () => Promise<boolean>;
|
|
17
18
|
/**
|
|
@@ -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 */\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":"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"}
|
|
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":"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"}
|
|
@@ -23,7 +23,8 @@ const ERROR_MESSAGES = {
|
|
|
23
23
|
[_types.KameleoonException.ClientConfiguration]: () => "Couldn't retrieve client configuration from Kameleoon Api",
|
|
24
24
|
[_types.KameleoonException.TargetingCondition]: targetingType => `${targetingType} targeting condition is not yet supported.`,
|
|
25
25
|
[_types.KameleoonException.AmongValuesCheck]: (err, value) => `Couldn't parse value "${value}": ${err}`,
|
|
26
|
-
[_types.KameleoonException.RemoteData]: () => `Couldn't retrieve data from Kameleoon server
|
|
26
|
+
[_types.KameleoonException.RemoteData]: () => `Couldn't retrieve data from Kameleoon server`,
|
|
27
|
+
[_types.KameleoonException.MaximumRetriesReached]: () => `Maximum retries reached, request failed`
|
|
27
28
|
};
|
|
28
29
|
exports.ERROR_MESSAGES = ERROR_MESSAGES;
|
|
29
30
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["_types","require","ERROR_MESSAGES","KameleoonException","JSONParse","err","NumberParse","value","Initialization","StorageInitialization","EventSourceInitialization","VariationNotFound","FeatureFlagConfigurationNotFound","featureKey","visitorCode","ExperimentConfigurationNotFound","experimentId","NotTargeted","NotAllocated","VisitorCodeMaxLength","StorageWrite","StorageRead","key","StorageParse","ClientConfiguration","TargetingCondition","targetingType","AmongValuesCheck","RemoteData","exports"],"sources":["../../src/kameleoonError/constants.ts"],"sourcesContent":["import { KameleoonStorageKey } from '../storage';\nimport { TargetingType } from '../targeting';\nimport { KameleoonException } from './types';\n\nexport const ERROR_MESSAGES = {\n [KameleoonException.JSONParse]: (err: unknown) =>\n `Couldn't parse JSON variable: ${err}`,\n [KameleoonException.NumberParse]: (value: string) =>\n `It's not possible to parse value ${value} to Number`,\n [KameleoonException.Initialization]: () =>\n \"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods\",\n [KameleoonException.StorageInitialization]: () =>\n \"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed\",\n [KameleoonException.EventSourceInitialization]: () =>\n \"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed\",\n [KameleoonException.VariationNotFound]: () =>\n \"Couldn't find experiment variation\",\n [KameleoonException.FeatureFlagConfigurationNotFound]: (\n featureKey: string,\n visitorCode: string,\n ) =>\n `No feature flag with key ${featureKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.ExperimentConfigurationNotFound]: (\n experimentId: number,\n visitorCode: string,\n ) =>\n `No experiment with id ${experimentId} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.NotTargeted]: (visitorCode: string) =>\n `Visitor code ${visitorCode} is not targeted`,\n [KameleoonException.NotAllocated]: (visitorCode: string) =>\n `Visitor with visitor code ${visitorCode} is in unallocated traffic, there is no variation id to be assigned to the visitor.`,\n [KameleoonException.VisitorCodeMaxLength]: () =>\n 'Visitor code can not be more than 255 characters long',\n [KameleoonException.StorageWrite]: (err: unknown) =>\n `Couldn't update storage for kameleoonClient: ${err}`,\n [KameleoonException.StorageRead]: (key: KameleoonStorageKey) =>\n `No data found in storage under ${key} key`,\n [KameleoonException.StorageParse]: (err: unknown, key: KameleoonStorageKey) =>\n `Couldn't parse ${key} storage data, the data may be corrupted. Error: ${err}`,\n [KameleoonException.ClientConfiguration]: () =>\n \"Couldn't retrieve client configuration from Kameleoon Api\",\n [KameleoonException.TargetingCondition]: (targetingType: TargetingType) =>\n `${targetingType} targeting condition is not yet supported.`,\n [KameleoonException.AmongValuesCheck]: (err: unknown, value: string) =>\n `Couldn't parse value \"${value}\": ${err}`,\n [KameleoonException.RemoteData]: () =>\n `Couldn't retrieve data from Kameleoon server`,\n};\n"],"mappings":";;;;;;AAEA,IAAAA,MAAA,GAAAC,OAAA;AAEO,MAAMC,cAAc,GAAG;EAC5B,CAACC,yBAAkB,CAACC,SAAS,GAAIC,GAAY,IAC1C,iCAAgCA,GAAI,EAAC;EACxC,CAACF,yBAAkB,CAACG,WAAW,GAAIC,KAAa,IAC7C,oCAAmCA,KAAM,YAAW;EACvD,CAACJ,yBAAkB,CAACK,cAAc,GAAG,MACnC,0HAA0H;EAC5H,CAACL,yBAAkB,CAACM,qBAAqB,GAAG,MAC1C,+HAA+H;EACjI,CAACN,yBAAkB,CAACO,yBAAyB,GAAG,MAC9C,oIAAoI;EACtI,CAACP,yBAAkB,CAACQ,iBAAiB,GAAG,MACtC,oCAAoC;EACtC,CAACR,yBAAkB,CAACS,gCAAgC,GAAG,CACrDC,UAAkB,EAClBC,WAAmB,KAElB,4BAA2BD,UAAW,kBAAiBC,WAAY,eAAc;EACpF,CAACX,yBAAkB,CAACY,+BAA+B,GAAG,CACpDC,YAAoB,EACpBF,WAAmB,KAElB,yBAAwBE,YAAa,kBAAiBF,WAAY,eAAc;EACnF,CAACX,yBAAkB,CAACc,WAAW,GAAIH,WAAmB,IACnD,gBAAeA,WAAY,kBAAiB;EAC/C,CAACX,yBAAkB,CAACe,YAAY,GAAIJ,WAAmB,IACpD,6BAA4BA,WAAY,qFAAoF;EAC/H,CAACX,yBAAkB,CAACgB,oBAAoB,GAAG,MACzC,uDAAuD;EACzD,CAAChB,yBAAkB,CAACiB,YAAY,GAAIf,GAAY,IAC7C,gDAA+CA,GAAI,EAAC;EACvD,CAACF,yBAAkB,CAACkB,WAAW,GAAIC,GAAwB,IACxD,kCAAiCA,GAAI,MAAK;EAC7C,CAACnB,yBAAkB,CAACoB,YAAY,GAAG,CAAClB,GAAY,EAAEiB,GAAwB,KACvE,kBAAiBA,GAAI,oDAAmDjB,GAAI,EAAC;EAChF,CAACF,yBAAkB,CAACqB,mBAAmB,GAAG,MACxC,2DAA2D;EAC7D,CAACrB,yBAAkB,CAACsB,kBAAkB,GAAIC,aAA4B,IACnE,GAAEA,aAAc,4CAA2C;EAC9D,CAACvB,yBAAkB,CAACwB,gBAAgB,GAAG,CAACtB,GAAY,EAAEE,KAAa,KAChE,yBAAwBA,KAAM,MAAKF,GAAI,EAAC;EAC3C,CAACF,yBAAkB,CAACyB,UAAU,GAAG,MAC9B;AACL,CAAC;AAACC,OAAA,
|
|
1
|
+
{"version":3,"file":"constants.js","names":["_types","require","ERROR_MESSAGES","KameleoonException","JSONParse","err","NumberParse","value","Initialization","StorageInitialization","EventSourceInitialization","VariationNotFound","FeatureFlagConfigurationNotFound","featureKey","visitorCode","ExperimentConfigurationNotFound","experimentId","NotTargeted","NotAllocated","VisitorCodeMaxLength","StorageWrite","StorageRead","key","StorageParse","ClientConfiguration","TargetingCondition","targetingType","AmongValuesCheck","RemoteData","MaximumRetriesReached","exports"],"sources":["../../src/kameleoonError/constants.ts"],"sourcesContent":["import { KameleoonStorageKey } from '../storage';\nimport { TargetingType } from '../targeting';\nimport { KameleoonException } from './types';\n\nexport const ERROR_MESSAGES = {\n [KameleoonException.JSONParse]: (err: unknown) =>\n `Couldn't parse JSON variable: ${err}`,\n [KameleoonException.NumberParse]: (value: string) =>\n `It's not possible to parse value ${value} to Number`,\n [KameleoonException.Initialization]: () =>\n \"It seems that the client wasn't properly initialized, make sure to run `initialize` method before invoking other methods\",\n [KameleoonException.StorageInitialization]: () =>\n \"There was an error while initializing React Native SDK storage, it seems that the storage library dependency wasn't installed\",\n [KameleoonException.EventSourceInitialization]: () =>\n \"There was an error while initializing Real Time Update service, it seems that the event source library dependency wasn't installed\",\n [KameleoonException.VariationNotFound]: () =>\n \"Couldn't find experiment variation\",\n [KameleoonException.FeatureFlagConfigurationNotFound]: (\n featureKey: string,\n visitorCode: string,\n ) =>\n `No feature flag with key ${featureKey} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.ExperimentConfigurationNotFound]: (\n experimentId: number,\n visitorCode: string,\n ) =>\n `No experiment with id ${experimentId} was found for ${visitorCode} visitorCode.`,\n [KameleoonException.NotTargeted]: (visitorCode: string) =>\n `Visitor code ${visitorCode} is not targeted`,\n [KameleoonException.NotAllocated]: (visitorCode: string) =>\n `Visitor with visitor code ${visitorCode} is in unallocated traffic, there is no variation id to be assigned to the visitor.`,\n [KameleoonException.VisitorCodeMaxLength]: () =>\n 'Visitor code can not be more than 255 characters long',\n [KameleoonException.StorageWrite]: (err: unknown) =>\n `Couldn't update storage for kameleoonClient: ${err}`,\n [KameleoonException.StorageRead]: (key: KameleoonStorageKey) =>\n `No data found in storage under ${key} key`,\n [KameleoonException.StorageParse]: (err: unknown, key: KameleoonStorageKey) =>\n `Couldn't parse ${key} storage data, the data may be corrupted. Error: ${err}`,\n [KameleoonException.ClientConfiguration]: () =>\n \"Couldn't retrieve client configuration from Kameleoon Api\",\n [KameleoonException.TargetingCondition]: (targetingType: TargetingType) =>\n `${targetingType} targeting condition is not yet supported.`,\n [KameleoonException.AmongValuesCheck]: (err: unknown, value: string) =>\n `Couldn't parse value \"${value}\": ${err}`,\n [KameleoonException.RemoteData]: () =>\n `Couldn't retrieve data from Kameleoon server`,\n [KameleoonException.MaximumRetriesReached]: () =>\n `Maximum retries reached, request failed`,\n};\n"],"mappings":";;;;;;AAEA,IAAAA,MAAA,GAAAC,OAAA;AAEO,MAAMC,cAAc,GAAG;EAC5B,CAACC,yBAAkB,CAACC,SAAS,GAAIC,GAAY,IAC1C,iCAAgCA,GAAI,EAAC;EACxC,CAACF,yBAAkB,CAACG,WAAW,GAAIC,KAAa,IAC7C,oCAAmCA,KAAM,YAAW;EACvD,CAACJ,yBAAkB,CAACK,cAAc,GAAG,MACnC,0HAA0H;EAC5H,CAACL,yBAAkB,CAACM,qBAAqB,GAAG,MAC1C,+HAA+H;EACjI,CAACN,yBAAkB,CAACO,yBAAyB,GAAG,MAC9C,oIAAoI;EACtI,CAACP,yBAAkB,CAACQ,iBAAiB,GAAG,MACtC,oCAAoC;EACtC,CAACR,yBAAkB,CAACS,gCAAgC,GAAG,CACrDC,UAAkB,EAClBC,WAAmB,KAElB,4BAA2BD,UAAW,kBAAiBC,WAAY,eAAc;EACpF,CAACX,yBAAkB,CAACY,+BAA+B,GAAG,CACpDC,YAAoB,EACpBF,WAAmB,KAElB,yBAAwBE,YAAa,kBAAiBF,WAAY,eAAc;EACnF,CAACX,yBAAkB,CAACc,WAAW,GAAIH,WAAmB,IACnD,gBAAeA,WAAY,kBAAiB;EAC/C,CAACX,yBAAkB,CAACe,YAAY,GAAIJ,WAAmB,IACpD,6BAA4BA,WAAY,qFAAoF;EAC/H,CAACX,yBAAkB,CAACgB,oBAAoB,GAAG,MACzC,uDAAuD;EACzD,CAAChB,yBAAkB,CAACiB,YAAY,GAAIf,GAAY,IAC7C,gDAA+CA,GAAI,EAAC;EACvD,CAACF,yBAAkB,CAACkB,WAAW,GAAIC,GAAwB,IACxD,kCAAiCA,GAAI,MAAK;EAC7C,CAACnB,yBAAkB,CAACoB,YAAY,GAAG,CAAClB,GAAY,EAAEiB,GAAwB,KACvE,kBAAiBA,GAAI,oDAAmDjB,GAAI,EAAC;EAChF,CAACF,yBAAkB,CAACqB,mBAAmB,GAAG,MACxC,2DAA2D;EAC7D,CAACrB,yBAAkB,CAACsB,kBAAkB,GAAIC,aAA4B,IACnE,GAAEA,aAAc,4CAA2C;EAC9D,CAACvB,yBAAkB,CAACwB,gBAAgB,GAAG,CAACtB,GAAY,EAAEE,KAAa,KAChE,yBAAwBA,KAAM,MAAKF,GAAI,EAAC;EAC3C,CAACF,yBAAkB,CAACyB,UAAU,GAAG,MAC9B,8CAA6C;EAChD,CAACzB,yBAAkB,CAAC0B,qBAAqB,GAAG,MACzC;AACL,CAAC;AAACC,OAAA,CAAA5B,cAAA,GAAAA,cAAA"}
|
|
@@ -10,7 +10,7 @@ export declare class KameleoonError extends Error {
|
|
|
10
10
|
/**
|
|
11
11
|
* @param {KameleoonException} type - type of KameleoonError represented by `KameleoonException` enum
|
|
12
12
|
* */
|
|
13
|
-
constructor(type: KameleoonException.Initialization | KameleoonException.ClientConfiguration | KameleoonException.VisitorCodeMaxLength | KameleoonException.StorageInitialization | KameleoonException.EventSourceInitialization | KameleoonException.VariationNotFound | KameleoonException.RemoteData);
|
|
13
|
+
constructor(type: KameleoonException.Initialization | KameleoonException.ClientConfiguration | KameleoonException.VisitorCodeMaxLength | KameleoonException.StorageInitialization | KameleoonException.EventSourceInitialization | KameleoonException.VariationNotFound | KameleoonException.RemoteData | KameleoonException.MaximumRetriesReached);
|
|
14
14
|
constructor(type: KameleoonException.FeatureFlagConfigurationNotFound, featureKey: string, visitorCode: string);
|
|
15
15
|
constructor(type: KameleoonException.NotTargeted | KameleoonException.NotAllocated, visitorCode: string);
|
|
16
16
|
constructor(type: KameleoonException.ExperimentConfigurationNotFound, experimentId: number, visitorCode: string);
|
|
@@ -32,6 +32,7 @@ class KameleoonError extends Error {
|
|
|
32
32
|
case _types.KameleoonException.VariationNotFound:
|
|
33
33
|
case _types.KameleoonException.EventSourceInitialization:
|
|
34
34
|
case _types.KameleoonException.RemoteData:
|
|
35
|
+
case _types.KameleoonException.MaximumRetriesReached:
|
|
35
36
|
this.message = _constants.ERROR_MESSAGES[type]();
|
|
36
37
|
break;
|
|
37
38
|
case _types.KameleoonException.NotAllocated:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kameleoonError.js","names":["_constants","require","_helpers","_types","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","KameleoonError","Error","constructor","type","secondParam","thirdParam","name","errorType","KameleoonException","Initialization","ClientConfiguration","VisitorCodeMaxLength","StorageInitialization","VariationNotFound","EventSourceInitialization","RemoteData","message","ERROR_MESSAGES","NotAllocated","NotTargeted","ExperimentConfigurationNotFound","FeatureFlagConfigurationNotFound","StorageWrite","JSONParse","StorageRead","StorageParse","TargetingCondition","NumberParse","AmongValuesCheck","exhaustCheck","exports"],"sources":["../../src/kameleoonError/kameleoonError.ts"],"sourcesContent":["import { KameleoonStorageKey } from '../storage';\nimport { TargetingType } from '../targeting';\nimport { ERROR_MESSAGES } from './constants';\nimport { exhaustCheck } from './helpers';\nimport { KameleoonException } from './types';\n\n/**\n * @class\n * KameleoonError - extends standard `Error` by adding custom `type` property with the type of `KameleoonException`\n * */\nexport class KameleoonError extends Error {\n private errorType: KameleoonException;\n\n /**\n * @param {KameleoonException} type - type of KameleoonError represented by `KameleoonException` enum\n * */\n constructor(\n type:\n | KameleoonException.Initialization\n | KameleoonException.ClientConfiguration\n | KameleoonException.VisitorCodeMaxLength\n | KameleoonException.StorageInitialization\n | KameleoonException.EventSourceInitialization\n | KameleoonException.VariationNotFound\n | KameleoonException.RemoteData,\n );\n constructor(\n type: KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey: string,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.NotTargeted | KameleoonException.NotAllocated,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.ExperimentConfigurationNotFound,\n experimentId: number,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.StorageWrite | KameleoonException.JSONParse,\n err: unknown,\n );\n constructor(type: KameleoonException.StorageRead, storageKey: string);\n constructor(\n type: KameleoonException.StorageParse,\n err: unknown,\n key: KameleoonStorageKey,\n );\n constructor(\n type: KameleoonException.TargetingCondition,\n targetingType: TargetingType,\n );\n constructor(\n type: KameleoonException.AmongValuesCheck,\n err: unknown,\n value: string,\n );\n constructor(type: KameleoonException.NumberParse, value: string);\n constructor(\n type: KameleoonException,\n secondParam?:\n | number\n | string\n | unknown\n | KameleoonStorageKey\n | TargetingType,\n thirdParam?: string | KameleoonStorageKey,\n ) {\n super(`Error: ${type}`);\n\n this.name = 'KameleoonError';\n this.errorType = type;\n\n switch (type) {\n case KameleoonException.Initialization:\n case KameleoonException.ClientConfiguration:\n case KameleoonException.VisitorCodeMaxLength:\n case KameleoonException.StorageInitialization:\n case KameleoonException.VariationNotFound:\n case KameleoonException.EventSourceInitialization:\n case KameleoonException.RemoteData:\n this.message = ERROR_MESSAGES[type]();\n break;\n case KameleoonException.NotAllocated:\n case KameleoonException.NotTargeted:\n this.message = ERROR_MESSAGES[type](secondParam as string);\n break;\n case KameleoonException.ExperimentConfigurationNotFound:\n this.message = ERROR_MESSAGES[type](\n secondParam as number,\n thirdParam as string,\n );\n break;\n case KameleoonException.FeatureFlagConfigurationNotFound:\n this.message = ERROR_MESSAGES[type](\n secondParam as string,\n thirdParam as string,\n );\n break;\n case KameleoonException.StorageWrite:\n case KameleoonException.JSONParse:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.StorageRead:\n this.message = ERROR_MESSAGES[type](secondParam as KameleoonStorageKey);\n break;\n case KameleoonException.StorageParse:\n this.message = ERROR_MESSAGES[type](\n secondParam,\n thirdParam as KameleoonStorageKey,\n );\n break;\n case KameleoonException.TargetingCondition:\n this.message = ERROR_MESSAGES[type](secondParam as TargetingType);\n break;\n case KameleoonException.NumberParse:\n this.message = ERROR_MESSAGES[type](secondParam as string);\n break;\n case KameleoonException.AmongValuesCheck:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam as string);\n break;\n default:\n exhaustCheck(type);\n }\n }\n\n get type(): KameleoonException {\n return this.errorType;\n }\n}\n"],"mappings":";;;;;;AAEA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAA6C,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;AAE7C;AACA;AACA;AACA;AACO,MAAMU,cAAc,SAASC,KAAK,CAAC;EAGxC;AACF;AACA;;
|
|
1
|
+
{"version":3,"file":"kameleoonError.js","names":["_constants","require","_helpers","_types","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","KameleoonError","Error","constructor","type","secondParam","thirdParam","name","errorType","KameleoonException","Initialization","ClientConfiguration","VisitorCodeMaxLength","StorageInitialization","VariationNotFound","EventSourceInitialization","RemoteData","MaximumRetriesReached","message","ERROR_MESSAGES","NotAllocated","NotTargeted","ExperimentConfigurationNotFound","FeatureFlagConfigurationNotFound","StorageWrite","JSONParse","StorageRead","StorageParse","TargetingCondition","NumberParse","AmongValuesCheck","exhaustCheck","exports"],"sources":["../../src/kameleoonError/kameleoonError.ts"],"sourcesContent":["import { KameleoonStorageKey } from '../storage';\nimport { TargetingType } from '../targeting';\nimport { ERROR_MESSAGES } from './constants';\nimport { exhaustCheck } from './helpers';\nimport { KameleoonException } from './types';\n\n/**\n * @class\n * KameleoonError - extends standard `Error` by adding custom `type` property with the type of `KameleoonException`\n * */\nexport class KameleoonError extends Error {\n private errorType: KameleoonException;\n\n /**\n * @param {KameleoonException} type - type of KameleoonError represented by `KameleoonException` enum\n * */\n constructor(\n type:\n | KameleoonException.Initialization\n | KameleoonException.ClientConfiguration\n | KameleoonException.VisitorCodeMaxLength\n | KameleoonException.StorageInitialization\n | KameleoonException.EventSourceInitialization\n | KameleoonException.VariationNotFound\n | KameleoonException.RemoteData\n | KameleoonException.MaximumRetriesReached,\n );\n constructor(\n type: KameleoonException.FeatureFlagConfigurationNotFound,\n featureKey: string,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.NotTargeted | KameleoonException.NotAllocated,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.ExperimentConfigurationNotFound,\n experimentId: number,\n visitorCode: string,\n );\n constructor(\n type: KameleoonException.StorageWrite | KameleoonException.JSONParse,\n err: unknown,\n );\n constructor(type: KameleoonException.StorageRead, storageKey: string);\n constructor(\n type: KameleoonException.StorageParse,\n err: unknown,\n key: KameleoonStorageKey,\n );\n constructor(\n type: KameleoonException.TargetingCondition,\n targetingType: TargetingType,\n );\n constructor(\n type: KameleoonException.AmongValuesCheck,\n err: unknown,\n value: string,\n );\n constructor(type: KameleoonException.NumberParse, value: string);\n constructor(\n type: KameleoonException,\n secondParam?:\n | number\n | string\n | unknown\n | KameleoonStorageKey\n | TargetingType,\n thirdParam?: string | KameleoonStorageKey,\n ) {\n super(`Error: ${type}`);\n\n this.name = 'KameleoonError';\n this.errorType = type;\n\n switch (type) {\n case KameleoonException.Initialization:\n case KameleoonException.ClientConfiguration:\n case KameleoonException.VisitorCodeMaxLength:\n case KameleoonException.StorageInitialization:\n case KameleoonException.VariationNotFound:\n case KameleoonException.EventSourceInitialization:\n case KameleoonException.RemoteData:\n case KameleoonException.MaximumRetriesReached:\n this.message = ERROR_MESSAGES[type]();\n break;\n case KameleoonException.NotAllocated:\n case KameleoonException.NotTargeted:\n this.message = ERROR_MESSAGES[type](secondParam as string);\n break;\n case KameleoonException.ExperimentConfigurationNotFound:\n this.message = ERROR_MESSAGES[type](\n secondParam as number,\n thirdParam as string,\n );\n break;\n case KameleoonException.FeatureFlagConfigurationNotFound:\n this.message = ERROR_MESSAGES[type](\n secondParam as string,\n thirdParam as string,\n );\n break;\n case KameleoonException.StorageWrite:\n case KameleoonException.JSONParse:\n this.message = ERROR_MESSAGES[type](secondParam);\n break;\n case KameleoonException.StorageRead:\n this.message = ERROR_MESSAGES[type](secondParam as KameleoonStorageKey);\n break;\n case KameleoonException.StorageParse:\n this.message = ERROR_MESSAGES[type](\n secondParam,\n thirdParam as KameleoonStorageKey,\n );\n break;\n case KameleoonException.TargetingCondition:\n this.message = ERROR_MESSAGES[type](secondParam as TargetingType);\n break;\n case KameleoonException.NumberParse:\n this.message = ERROR_MESSAGES[type](secondParam as string);\n break;\n case KameleoonException.AmongValuesCheck:\n this.message = ERROR_MESSAGES[type](secondParam, thirdParam as string);\n break;\n default:\n exhaustCheck(type);\n }\n }\n\n get type(): KameleoonException {\n return this.errorType;\n }\n}\n"],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ let KameleoonException = /*#__PURE__*/function (KameleoonException) {
|
|
|
23
23
|
KameleoonException["JSONParse"] = "JSONParse";
|
|
24
24
|
KameleoonException["NumberParse"] = "NumberParse";
|
|
25
25
|
KameleoonException["RemoteData"] = "RemoteData";
|
|
26
|
+
KameleoonException["MaximumRetriesReached"] = "MaximumRetriesReached";
|
|
26
27
|
return KameleoonException;
|
|
27
28
|
}({});
|
|
28
29
|
exports.KameleoonException = KameleoonException;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["KameleoonException","exports"],"sources":["../../src/kameleoonError/types.ts"],"sourcesContent":["export enum KameleoonException {\n ExperimentConfigurationNotFound = 'ExperimentConfigurationNotFound',\n EventSourceInitialization = 'EventSourceInitialization',\n VariationNotFound = 'VariationNotFound',\n FeatureFlagConfigurationNotFound = 'FeatureFlagConfigurationNotFound',\n NotTargeted = 'NotTargeted',\n NotAllocated = 'NotAllocated',\n VisitorCodeMaxLength = 'VisitorCodeMaxLength',\n StorageInitialization = 'StorageInitialization',\n StorageWrite = 'StorageWrite',\n StorageRead = 'StorageRead',\n StorageParse = 'StorageParse',\n ClientConfiguration = 'ClientConfiguration',\n TargetingCondition = 'TargetingCondition',\n AmongValuesCheck = 'AmongValuesCheck',\n Initialization = 'Initialization',\n JSONParse = 'JSONParse',\n NumberParse = 'NumberParse',\n RemoteData = 'RemoteData',\n}\n"],"mappings":";;;;;;IAAYA,kBAAkB,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AAAAC,OAAA,CAAAD,kBAAA,GAAAA,kBAAA"}
|
|
1
|
+
{"version":3,"file":"types.js","names":["KameleoonException","exports"],"sources":["../../src/kameleoonError/types.ts"],"sourcesContent":["export enum KameleoonException {\n ExperimentConfigurationNotFound = 'ExperimentConfigurationNotFound',\n EventSourceInitialization = 'EventSourceInitialization',\n VariationNotFound = 'VariationNotFound',\n FeatureFlagConfigurationNotFound = 'FeatureFlagConfigurationNotFound',\n NotTargeted = 'NotTargeted',\n NotAllocated = 'NotAllocated',\n VisitorCodeMaxLength = 'VisitorCodeMaxLength',\n StorageInitialization = 'StorageInitialization',\n StorageWrite = 'StorageWrite',\n StorageRead = 'StorageRead',\n StorageParse = 'StorageParse',\n ClientConfiguration = 'ClientConfiguration',\n TargetingCondition = 'TargetingCondition',\n AmongValuesCheck = 'AmongValuesCheck',\n Initialization = 'Initialization',\n JSONParse = 'JSONParse',\n NumberParse = 'NumberParse',\n RemoteData = 'RemoteData',\n MaximumRetriesReached = 'MaximumRetriesReached'\n}\n"],"mappings":";;;;;;IAAYA,kBAAkB,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AAAAC,OAAA,CAAAD,kBAAA,GAAAA,kBAAA"}
|
package/dist/kameleoonUtils.js
CHANGED
|
@@ -24,7 +24,7 @@ class KameleoonUtils {
|
|
|
24
24
|
}
|
|
25
25
|
getCookieVisitorCode(cookie) {
|
|
26
26
|
const pairs = cookie.split(_constants.Cookie.PairsDelimiter);
|
|
27
|
-
const pair = pairs
|
|
27
|
+
const pair = pairs.find(pair => {
|
|
28
28
|
const [key, _] = pair.split(_constants.Cookie.KeyValueDelimiter);
|
|
29
29
|
return key === _constants.KAMELEOON_COOKIE_KEY;
|
|
30
30
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kameleoonUtils.js","names":["_tsRes","require","_constants","KameleoonUtils","generateRandomString","length","characters","randomString","i","Math","floor","random","getCookieVisitorCode","cookie","pairs","split","Cookie","PairsDelimiter","pair","find","key","_","KeyValueDelimiter","KAMELEOON_COOKIE_KEY","value","Ok","Err","getResultCookie","domain","visitorCode","yearSeconds","cookieArray","MaxAge","Path","Domain","join","exports"],"sources":["../src/kameleoonUtils.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { Cookie, KAMELEOON_COOKIE_KEY } from './constants';\nimport {\n GetResultCookieParametersType,\n ClientGetVisitorCodeParametersType,\n ServerGetVisitorCodeParametersType,\n MobileGetVisitorCodeParametersType,\n} from './types';\n\n/**\n * @abstract\n * KameleoonUtils - an abstract class for extending kameleoon utils with pre-defined method signatures\n * */\nexport abstract class KameleoonUtils {\n abstract getVisitorCode(\n param:\n | ClientGetVisitorCodeParametersType\n | ServerGetVisitorCodeParametersType\n | MobileGetVisitorCodeParametersType,\n ): string;\n\n protected generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n let randomString = '';\n\n if (length < 0) {\n return randomString;\n }\n\n for (let i = 0; i < length; i++) {\n randomString += characters[Math.floor(Math.random() * characters.length)];\n }\n\n return randomString;\n }\n\n protected getCookieVisitorCode(cookie: string): Result<string, void> {\n const pairs = cookie.split(Cookie.PairsDelimiter);\n const pair = pairs
|
|
1
|
+
{"version":3,"file":"kameleoonUtils.js","names":["_tsRes","require","_constants","KameleoonUtils","generateRandomString","length","characters","randomString","i","Math","floor","random","getCookieVisitorCode","cookie","pairs","split","Cookie","PairsDelimiter","pair","find","key","_","KeyValueDelimiter","KAMELEOON_COOKIE_KEY","value","Ok","Err","getResultCookie","domain","visitorCode","yearSeconds","cookieArray","MaxAge","Path","Domain","join","exports"],"sources":["../src/kameleoonUtils.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { Cookie, KAMELEOON_COOKIE_KEY } from './constants';\nimport {\n GetResultCookieParametersType,\n ClientGetVisitorCodeParametersType,\n ServerGetVisitorCodeParametersType,\n MobileGetVisitorCodeParametersType,\n} from './types';\n\n/**\n * @abstract\n * KameleoonUtils - an abstract class for extending kameleoon utils with pre-defined method signatures\n * */\nexport abstract class KameleoonUtils {\n abstract getVisitorCode(\n param:\n | ClientGetVisitorCodeParametersType\n | ServerGetVisitorCodeParametersType\n | MobileGetVisitorCodeParametersType,\n ): string;\n\n protected generateRandomString(length: number): string {\n const characters = 'abcdefghijklmnopqrstuvwxyz0123456789';\n let randomString = '';\n\n if (length < 0) {\n return randomString;\n }\n\n for (let i = 0; i < length; i++) {\n randomString += characters[Math.floor(Math.random() * characters.length)];\n }\n\n return randomString;\n }\n\n protected getCookieVisitorCode(cookie: string): Result<string, void> {\n const pairs = cookie.split(Cookie.PairsDelimiter);\n const pair = pairs.find((pair) => {\n const [key, _] = pair.split(Cookie.KeyValueDelimiter) as [string, string];\n\n return key === KAMELEOON_COOKIE_KEY;\n });\n\n if (pair) {\n const [_, value] = pair.split(Cookie.KeyValueDelimiter);\n\n return Ok(value);\n }\n\n return Err();\n }\n\n protected getResultCookie({\n domain,\n visitorCode,\n }: GetResultCookieParametersType): string {\n const yearSeconds = 60 * 60 * 24 * 365;\n const cookieArray = [\n KAMELEOON_COOKIE_KEY + Cookie.KeyValueDelimiter + visitorCode,\n Cookie.MaxAge + Cookie.KeyValueDelimiter + yearSeconds,\n Cookie.Path + Cookie.KeyValueDelimiter + '/',\n Cookie.Domain + Cookie.KeyValueDelimiter + domain,\n ];\n\n return cookieArray.join(Cookie.PairsDelimiter);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAQA;AACA;AACA;AACA;AACO,MAAeE,cAAc,CAAC;EAQzBC,oBAAoBA,CAACC,MAAc,EAAU;IACrD,MAAMC,UAAU,GAAG,sCAAsC;IACzD,IAAIC,YAAY,GAAG,EAAE;IAErB,IAAIF,MAAM,GAAG,CAAC,EAAE;MACd,OAAOE,YAAY;IACrB;IAEA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,MAAM,EAAEG,CAAC,EAAE,EAAE;MAC/BD,YAAY,IAAID,UAAU,CAACG,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,EAAE,GAAGL,UAAU,CAACD,MAAM,CAAC,CAAC;IAC3E;IAEA,OAAOE,YAAY;EACrB;EAEUK,oBAAoBA,CAACC,MAAc,EAAwB;IACnE,MAAMC,KAAK,GAAGD,MAAM,CAACE,KAAK,CAACC,iBAAM,CAACC,cAAc,CAAC;IACjD,MAAMC,IAAI,GAAGJ,KAAK,CAACK,IAAI,CAAED,IAAI,IAAK;MAChC,MAAM,CAACE,GAAG,EAAEC,CAAC,CAAC,GAAGH,IAAI,CAACH,KAAK,CAACC,iBAAM,CAACM,iBAAiB,CAAqB;MAEzE,OAAOF,GAAG,KAAKG,+BAAoB;IACrC,CAAC,CAAC;IAEF,IAAIL,IAAI,EAAE;MACR,MAAM,CAACG,CAAC,EAAEG,KAAK,CAAC,GAAGN,IAAI,CAACH,KAAK,CAACC,iBAAM,CAACM,iBAAiB,CAAC;MAEvD,OAAO,IAAAG,SAAE,EAACD,KAAK,CAAC;IAClB;IAEA,OAAO,IAAAE,UAAG,GAAE;EACd;EAEUC,eAAeA,CAAC;IACxBC,MAAM;IACNC;EAC6B,CAAC,EAAU;IACxC,MAAMC,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG;IACtC,MAAMC,WAAW,GAAG,CAClBR,+BAAoB,GAAGP,iBAAM,CAACM,iBAAiB,GAAGO,WAAW,EAC7Db,iBAAM,CAACgB,MAAM,GAAGhB,iBAAM,CAACM,iBAAiB,GAAGQ,WAAW,EACtDd,iBAAM,CAACiB,IAAI,GAAGjB,iBAAM,CAACM,iBAAiB,GAAG,GAAG,EAC5CN,iBAAM,CAACkB,MAAM,GAAGlB,iBAAM,CAACM,iBAAiB,GAAGM,MAAM,CAClD;IAED,OAAOG,WAAW,CAACI,IAAI,CAACnB,iBAAM,CAACC,cAAc,CAAC;EAChD;AACF;AAACmB,OAAA,CAAAjC,cAAA,GAAAA,cAAA"}
|
|
@@ -32,15 +32,16 @@ class Requester extends _nonce.Nonce {
|
|
|
32
32
|
const environmentParam = this.environment ? _constants.UrlParameter.Environment + this.environment : '';
|
|
33
33
|
const timeStampParam = timeStamp ? _constants.UrlParameter.Ts + timeStamp : '';
|
|
34
34
|
const requestUrl = _constants.URL.CLIENT_CONFIGURATION + _constants.UrlQuery.Mobile + this.siteCode + environmentParam + timeStampParam;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return (0, _tsRes.
|
|
35
|
+
try {
|
|
36
|
+
const response = await this.requestDispatcher.getClientConfiguration(requestUrl);
|
|
37
|
+
return (0, _tsRes.Ok)(response);
|
|
38
|
+
} catch (error) {
|
|
39
|
+
return (0, _tsRes.Err)(error);
|
|
38
40
|
}
|
|
39
|
-
return (0, _tsRes.Ok)(response);
|
|
40
41
|
}
|
|
41
42
|
async getRemoteData(key) {
|
|
42
43
|
const requestUrl = _constants.URL.DATA + this.siteCode + _constants.UrlParameter.Key + encodeURI(key);
|
|
43
|
-
const response = await this.requestDispatcher.
|
|
44
|
+
const response = await this.requestDispatcher.getRemoteData(requestUrl);
|
|
44
45
|
if (!response) {
|
|
45
46
|
return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.RemoteData));
|
|
46
47
|
}
|
|
@@ -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","
|
|
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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"}
|
|
@@ -63,9 +63,14 @@ export interface IExternalRequestDispatcher {
|
|
|
63
63
|
* */
|
|
64
64
|
track: (params: TrackParametersType) => Promise<boolean>;
|
|
65
65
|
/**
|
|
66
|
-
* @method
|
|
66
|
+
* @method getClientConfiguration - get client configuration
|
|
67
67
|
* @param {string} url - url address
|
|
68
68
|
* */
|
|
69
|
-
|
|
69
|
+
getClientConfiguration: (url: string) => Promise<JSONType>;
|
|
70
|
+
/**
|
|
71
|
+
* @method getRemoteData - get data from remote server of Kameleoon
|
|
72
|
+
* @param {string} url - url address
|
|
73
|
+
* */
|
|
74
|
+
getRemoteData: (url: string) => Promise<JSONType>;
|
|
70
75
|
}
|
|
71
76
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["HttpMethod","exports","EVENT_TYPE_KEYS","PARAMETER_KEYS","TRACKING_KEYS","QUERY_KEYS"],"sources":["../../src/requester/types.ts"],"sourcesContent":["import {\n JSONType,\n FeatureFlagType,\n ConfigurationDataType,\n} from '../campaignConfiguration';\nimport { Environment, ExternalPackageInfoType } from '../types';\nimport { Header } from './constants';\n\nexport type RequesterParamsType = {\n siteCode: string;\n environment?: Environment;\n packageInfo: ExternalPackageInfoType;\n requestDispatcher: IExternalRequestDispatcher;\n};\n\nexport type TrackExperimentParamsType = {\n body: string;\n variationId: number;\n visitorCode: string;\n experimentId: number;\n isUnallocated: boolean;\n userAgent?: string;\n callback?: () => void;\n};\n\nexport type TrackDataParamsType = {\n visitorCode: string;\n body: string;\n userAgent?: string;\n};\n\nexport type GetClientConfigurationResultType = Omit<\n ConfigurationDataType,\n 'featureFlags'\n> & { featureFlagConfigurations: FeatureFlagType[] };\n\nexport enum HttpMethod {\n Get = 'GET',\n Post = 'POST',\n}\n\nconst EVENT_TYPE_KEYS = [\n 'customData',\n 'staticData',\n 'page',\n 'conversion',\n 'activity',\n 'experiment',\n] as const;\nconst PARAMETER_KEYS = [\n 'valuesCountMap',\n 'id',\n 'nonce',\n 'sdkName',\n 'sdkVersion',\n 'browserIndex',\n 'siteCode',\n 'environment',\n 'visitorCode',\n 'negative',\n 'revenue',\n 'title',\n 'referrersIndices',\n 'overwrite',\n 'index',\n 'href',\n 'variationId',\n 'deviceType',\n 'goalId',\n 'ts',\n 'key',\n] as const;\nconst TRACKING_KEYS = ['visit', 'map'] as const;\nconst QUERY_KEYS = ['sse', 'mobile', 'map', 'events'] as const;\n\nexport type TrackingType = Record<\n Capitalize<(typeof TRACKING_KEYS)[number]>,\n string\n>;\nexport type QueryType = Record<Capitalize<(typeof QUERY_KEYS)[number]>, string>;\nexport type ParameterType = Record<\n Capitalize<(typeof PARAMETER_KEYS)[number]>,\n string\n>;\nexport type EventType = Record<\n Capitalize<(typeof EVENT_TYPE_KEYS)[number]>,\n string\n>;\n\nexport type StrictTrackingRecord<T> = {\n [K in keyof T]: K extends string ? `${Uncapitalize<K>}/` : never;\n};\nexport type StrictQueryRecord<T> = {\n [K in keyof T]: K extends string ? `${Uncapitalize<K>}?siteCode=` : never;\n};\nexport type StrictEventTypeRecord<T> = {\n [K in keyof T]: K extends string ? `eventType=${Uncapitalize<K>}` : never;\n};\nexport type StrictParameterRecord<T> = {\n [K in keyof T]: K extends string ? `&${Uncapitalize<K>}=` : never;\n};\n\nexport type TrackParametersType = {\n url: string;\n headers?: Partial<Record<Header, string>>;\n body: string;\n};\n\n/**\n * @interface an interface of External Request Dispatcher which will be used to perform requests.\n * */\nexport interface IExternalRequestDispatcher {\n /**\n * @method track - send a track request\n * @param {TrackParametersType} parameters - track parameters\n * */\n track: (params: TrackParametersType) => Promise<boolean>;\n /**\n * @method get - get data\n * @param {string} url - url address\n * */\n
|
|
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":";;;;;;IAoCYA,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAAAC,OAAA,CAAAD,UAAA,GAAAA,UAAA;AAKtB,MAAME,eAAe,GAAG,CACtB,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,UAAU,EACV,YAAY,CACJ;AACV,MAAMC,cAAc,GAAG,CACrB,gBAAgB,EAChB,IAAI,EACJ,OAAO,EACP,SAAS,EACT,YAAY,EACZ,cAAc,EACd,UAAU,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,SAAS,EACT,OAAO,EACP,kBAAkB,EAClB,WAAW,EACX,OAAO,EACP,MAAM,EACN,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,KAAK,CACG;AACV,MAAMC,aAAa,GAAG,CAAC,OAAO,EAAE,KAAK,CAAU;AAC/C,MAAMC,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAU"}
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.VariationConfiguration = void 0;
|
|
7
7
|
var _tsRes = require("ts-res");
|
|
8
8
|
var _hasher = require("../hasher");
|
|
9
|
-
var _variation = require("./variation");
|
|
10
9
|
var _kameleoonError = require("../kameleoonError");
|
|
11
10
|
var _utilities = require("../utilities");
|
|
12
11
|
var _types = require("../campaignConfiguration/types");
|
|
@@ -23,18 +22,29 @@ class VariationConfiguration {
|
|
|
23
22
|
_defineProperty(this, "experiments", void 0);
|
|
24
23
|
_defineProperty(this, "storage", void 0);
|
|
25
24
|
_defineProperty(this, "getAssociatedVariationId", (visitorCode, experimentId) => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
// TODO:
|
|
26
|
+
// --- Variation from storage is not checked anymore
|
|
27
|
+
// --- If nothing changes the commented code should be deleted
|
|
28
|
+
// along with the `Variation` class and according tests/types
|
|
29
|
+
// --- Mind `todo` in `getAssociatedVariationId.spec.ts`
|
|
30
|
+
//
|
|
31
|
+
// let associatedVariation: VariationType | undefined;
|
|
32
|
+
|
|
33
|
+
// this.storage.read().and((data) => {
|
|
34
|
+
// associatedVariation = data?.[visitorCode]?.[experimentId];
|
|
35
|
+
// });
|
|
36
|
+
|
|
30
37
|
const experiment = this.experiments.find(experiment => experiment.id === String(experimentId));
|
|
31
38
|
if (!experiment) {
|
|
32
39
|
return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.ExperimentConfigurationNotFound, experimentId, visitorCode));
|
|
33
40
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
|
|
42
|
+
// const variation = new Variation(associatedVariation);
|
|
43
|
+
|
|
44
|
+
// if (variation.isValid(experiment?.respoolTime)) {
|
|
45
|
+
// return Ok(variation.id);
|
|
46
|
+
// }
|
|
47
|
+
|
|
38
48
|
return this.assignVariation(visitorCode, experiment);
|
|
39
49
|
});
|
|
40
50
|
this.experiments = experiments;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variationConfiguration.js","names":["_tsRes","require","_hasher","_variation","_kameleoonError","_utilities","_types","_excluded","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","indexOf","prototype","propertyIsEnumerable","call","sourceKeys","obj","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","TypeError","Number","VariationConfiguration","constructor","experiments","externalStorage","visitorCode","experimentId","associatedVariation","storage","read","and","data","experiment","find","id","Err","KameleoonError","KameleoonException","ExperimentConfigurationNotFound","variation","Variation","isValid","respoolTime","Ok","assignVariation","getAssignedVariations","result","ok","StorageRead","getFeatureFlagVariation","featureFlag","targetingData","withAssignment","validateResult","Utilities","validateVisitorCode","error","rules","featureKey","featureFlagId","defaultVariationKey","rule","segment","exposition","variationByExposition","targetingResult","checkTargeting","variationConfiguration","ruleHash","Hasher","obtainFeatureFlagHashDouble","campaignId","totalDeviation","variationHash","type","RuleType","EXPERIMENTATION","updateStorageData","variationId","restParameters","TARGETED_DELIVERY","variationKey","getExperimentVariation","deviations","hashDouble","obtainExperimentHashDouble","isUnallocated","resultVariationId","deviation","NotAllocated","variationResult","StorageParse","updatedVariationData","updatedVariation","assignmentDate","Date","toString","write","exports"],"sources":["../../src/variationConfiguration/variationConfiguration.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { ExperimentItemType } from '../campaignConfiguration';\nimport { Hasher } from '../hasher';\nimport { Variation } from './variation';\nimport { KameleoonError, KameleoonException } from '../kameleoonError';\nimport {\n IStorage,\n VariationDataType,\n ExperimentVariationsType,\n} from '../storage';\nimport {\n FeatureFlagVariationType,\n GetFeatureFlagVariationParametersType,\n VariationType,\n UpdateStorageParamsType,\n} from './types';\nimport { Utilities } from '../utilities';\nimport { RuleType } from '../campaignConfiguration/types';\n\ninterface IVariationConfiguration {\n /**\n * @method getAssociatedVariationId - gets the id of a variation assigned to a visitor with `visitorCode` from the storage. If the visitor doesn't have associated variation yet, assigns a new one, stores it and returns it's id.\n */\n getAssociatedVariationId: (\n visitorCode: string,\n experimentId: number,\n ) => Result<number, KameleoonError>;\n /**\n * @method getAssignedVariations - obtains experiments with according variations that are *already assigned* and *stored* in the `variationStorage`. If `getAssociatedVariationId` had not been called before, there will be no variations to get.\n */\n getAssignedVariations(\n visitorCode: string,\n ): Result<ExperimentVariationsType, KameleoonError>;\n /**\n * @method getFeatureFlagVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getFeatureFlagVariation: (\n params: GetFeatureFlagVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n /**\n * @method getExperimentVariation - obtains variation for the experiment by calculating the variation for the visitor *without assigning* it to a visitor\n */\n getExperimentVariation: (\n visitorCode: string,\n experiment: ExperimentItemType,\n ) => Result<number, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private experiments: ExperimentItemType[];\n private storage: IStorage<VariationDataType>;\n\n constructor(\n experiments: ExperimentItemType[],\n externalStorage: IStorage<VariationDataType>,\n ) {\n this.experiments = experiments;\n this.storage = externalStorage;\n }\n\n public getAssociatedVariationId = (\n visitorCode: string,\n experimentId: number,\n ): Result<number, KameleoonError> => {\n let associatedVariation: VariationType | undefined;\n\n this.storage.read().and((data) => {\n associatedVariation = data?.[visitorCode]?.[experimentId];\n });\n\n const experiment = this.experiments.find(\n (experiment) => experiment.id === String(experimentId),\n );\n\n if (!experiment) {\n return Err(\n new KameleoonError(\n KameleoonException.ExperimentConfigurationNotFound,\n experimentId,\n visitorCode,\n ),\n );\n }\n\n const variation = new Variation(associatedVariation);\n\n if (variation.isValid(experiment?.respoolTime)) {\n return Ok(variation.id);\n }\n\n return this.assignVariation(visitorCode, experiment);\n };\n\n public getAssignedVariations(\n visitorCode: string,\n ): Result<ExperimentVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const experiments = result.data[visitorCode];\n\n if (!experiments) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(experiments);\n }\n\n public getFeatureFlagVariation({\n visitorCode,\n featureFlag,\n targetingData,\n withAssignment = false,\n }: GetFeatureFlagVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n const validateResult = Utilities.validateVisitorCode(visitorCode);\n\n if (!validateResult.ok) {\n return Err(validateResult.error);\n }\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n // --- Check targeting ---\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.obtainFeatureFlagHashDouble({\n visitorCode,\n respoolTime,\n campaignId: String(id),\n });\n\n if (ruleHash <= exposition) {\n let totalDeviation = 0;\n\n const variationHash = Hasher.obtainFeatureFlagHashDouble({\n visitorCode,\n respoolTime,\n campaignId: String(experimentId),\n });\n\n for (const variation of variationByExposition) {\n totalDeviation += variation.exposition;\n\n if (variationHash <= totalDeviation) {\n // --- Note ---\n // For the `RuleType.EXPERIMENTATION` variation assignment must happen without\n // calculating experiment deviation\n if (rule.type === RuleType.EXPERIMENTATION && withAssignment) {\n this.updateStorageData({\n visitorCode,\n experimentId: String(experimentId),\n // --- Note ---\n // For `RuleType.EXPERIMENTATION` `variationId` can not be null\n variationId: variation.variationId as number,\n });\n }\n\n const { exposition, ...restParameters } = variation;\n\n return Ok({\n ...restParameters,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n });\n }\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n break;\n }\n }\n\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n });\n }\n\n public getExperimentVariation(\n visitorCode: string,\n experiment: ExperimentItemType,\n ): Result<number, KameleoonError> {\n const { id, respoolTime, deviations } = experiment;\n\n const hashDouble = Hasher.obtainExperimentHashDouble({\n visitorCode,\n campaignId: id,\n respoolTime,\n });\n\n let isUnallocated = true;\n let totalDeviation = 0;\n let resultVariationId = 0;\n\n for (const deviation of deviations) {\n totalDeviation += deviation.value;\n\n if (totalDeviation >= hashDouble) {\n // --- Note ---\n // If sum of all variations is less than 1 (100%), then there is a chance\n // user will end up outside of any variation\n isUnallocated = false;\n // --- Note ---\n // 'origin' is the default `variationId`, it must return id of 0\n if (deviation.variationId !== 'origin') {\n resultVariationId = Number(deviation.variationId);\n }\n\n break;\n }\n }\n\n if (isUnallocated) {\n return Err(\n new KameleoonError(KameleoonException.NotAllocated, visitorCode),\n );\n }\n\n return Ok(resultVariationId);\n }\n\n private assignVariation(\n visitorCode: string,\n experiment: ExperimentItemType,\n ): Result<number, KameleoonError> {\n const variationResult = this.getExperimentVariation(\n visitorCode,\n experiment,\n );\n\n if (!variationResult.ok) {\n return variationResult;\n }\n\n const result = this.updateStorageData({\n visitorCode,\n experimentId: experiment.id,\n variationId: variationResult.data,\n });\n\n if (!result.ok) {\n return result;\n }\n\n return Ok(variationResult.data);\n }\n\n private updateStorageData({\n visitorCode,\n experimentId,\n variationId,\n }: UpdateStorageParamsType): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n const updatedVariationData: VariationDataType = result.ok\n ? result.data\n : {};\n\n const updatedVariation = {\n variationId,\n assignmentDate: new Date().toString(),\n };\n\n if (updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode][experimentId] = updatedVariation;\n } else {\n updatedVariationData[visitorCode] = {\n [experimentId]: updatedVariation,\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n\n // --- TODO: commented out in case of future logic rework ---\n // --- Mind: `variationId` could cause the `undefined` issue ---\n // --- Reference: https://development.kameleoon.net/sdk/javascript-sdk-packages/-/merge_requests/89 ---\n // private getAssignedRuleVariation(\n // visitorCode: string,\n // rule: RuleItemType,\n // ): Result<GetAssignedRuleVariationResultType, KameleoonError> {\n // const emptyVariation: Omit<VariationByExpositionType, 'exposition'> = {\n // variationId: null,\n // variationKey: '',\n // };\n // const { experimentId, variationByExposition } = rule;\n\n // const variationsResult = this.getAssignedVariations(visitorCode);\n\n // // --- Note ---\n // // If there is an error, we just want to skip seeking\n // // for variation in the storage, not throw an error\n // if (!variationsResult.ok) {\n // return Ok(emptyVariation);\n // }\n\n // const variations = variationsResult.data;\n\n // if (\n // experimentId &&\n // typeof variations[experimentId].variationId !== undefined\n // ) {\n // const id = variations[experimentId].variationId;\n // const featureFlagVariation = variationByExposition.find(\n // (item) => item.variationId == id,\n // );\n\n // if (!featureFlagVariation) {\n // // --- Note ---\n // // This error is not described for public methods as\n // // it serves internal purpose of checking whether\n // // the persistent variation has been updated and should be re-allocated\n // return Err(new KameleoonError(KameleoonException.DataInconsistency));\n // }\n\n // const { exposition, ...restParameters } = featureFlagVariation;\n\n // return Ok({ ...restParameters });\n // }\n\n // return Ok(emptyVariation);\n // }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"variationConfiguration.js","names":["_tsRes","require","_hasher","_kameleoonError","_utilities","_types","_excluded","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","indexOf","prototype","propertyIsEnumerable","call","sourceKeys","obj","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","TypeError","Number","VariationConfiguration","constructor","experiments","externalStorage","visitorCode","experimentId","experiment","find","id","Err","KameleoonError","KameleoonException","ExperimentConfigurationNotFound","assignVariation","storage","getAssignedVariations","result","read","ok","data","StorageRead","Ok","getFeatureFlagVariation","featureFlag","targetingData","withAssignment","validateResult","Utilities","validateVisitorCode","error","rules","featureKey","featureFlagId","defaultVariationKey","rule","segment","exposition","respoolTime","variationByExposition","targetingResult","checkTargeting","variationConfiguration","ruleHash","Hasher","obtainFeatureFlagHashDouble","campaignId","totalDeviation","variationHash","variation","type","RuleType","EXPERIMENTATION","updateStorageData","variationId","restParameters","TARGETED_DELIVERY","variationKey","getExperimentVariation","deviations","hashDouble","obtainExperimentHashDouble","isUnallocated","resultVariationId","deviation","NotAllocated","variationResult","StorageParse","updatedVariationData","updatedVariation","assignmentDate","Date","toString","write","exports"],"sources":["../../src/variationConfiguration/variationConfiguration.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { ExperimentItemType } from '../campaignConfiguration';\nimport { Hasher } from '../hasher';\nimport { KameleoonError, KameleoonException } from '../kameleoonError';\nimport {\n IStorage,\n VariationDataType,\n ExperimentVariationsType,\n} from '../storage';\nimport {\n FeatureFlagVariationType,\n GetFeatureFlagVariationParametersType,\n UpdateStorageParamsType,\n} from './types';\nimport { Utilities } from '../utilities';\nimport { RuleType } from '../campaignConfiguration/types';\n\ninterface IVariationConfiguration {\n /**\n * @method getAssociatedVariationId - gets the id of a variation assigned to a visitor with `visitorCode` from the storage. If the visitor doesn't have associated variation yet, assigns a new one, stores it and returns it's id.\n */\n getAssociatedVariationId: (\n visitorCode: string,\n experimentId: number,\n ) => Result<number, KameleoonError>;\n /**\n * @method getAssignedVariations - obtains experiments with according variations that are *already assigned* and *stored* in the `variationStorage`. If `getAssociatedVariationId` had not been called before, there will be no variations to get.\n */\n getAssignedVariations(\n visitorCode: string,\n ): Result<ExperimentVariationsType, KameleoonError>;\n /**\n * @method getFeatureFlagVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage\n */\n getFeatureFlagVariation: (\n params: GetFeatureFlagVariationParametersType,\n ) => Result<FeatureFlagVariationType, KameleoonError>;\n /**\n * @method getExperimentVariation - obtains variation for the experiment by calculating the variation for the visitor *without assigning* it to a visitor\n */\n getExperimentVariation: (\n visitorCode: string,\n experiment: ExperimentItemType,\n ) => Result<number, KameleoonError>;\n}\n\nexport class VariationConfiguration implements IVariationConfiguration {\n private experiments: ExperimentItemType[];\n private storage: IStorage<VariationDataType>;\n\n constructor(\n experiments: ExperimentItemType[],\n externalStorage: IStorage<VariationDataType>,\n ) {\n this.experiments = experiments;\n this.storage = externalStorage;\n }\n\n public getAssociatedVariationId = (\n visitorCode: string,\n experimentId: number,\n ): Result<number, KameleoonError> => {\n // TODO:\n // --- Variation from storage is not checked anymore\n // --- If nothing changes the commented code should be deleted\n // along with the `Variation` class and according tests/types\n // --- Mind `todo` in `getAssociatedVariationId.spec.ts`\n //\n // let associatedVariation: VariationType | undefined;\n\n // this.storage.read().and((data) => {\n // associatedVariation = data?.[visitorCode]?.[experimentId];\n // });\n\n const experiment = this.experiments.find(\n (experiment) => experiment.id === String(experimentId),\n );\n\n if (!experiment) {\n return Err(\n new KameleoonError(\n KameleoonException.ExperimentConfigurationNotFound,\n experimentId,\n visitorCode,\n ),\n );\n }\n\n // const variation = new Variation(associatedVariation);\n\n // if (variation.isValid(experiment?.respoolTime)) {\n // return Ok(variation.id);\n // }\n\n return this.assignVariation(visitorCode, experiment);\n };\n\n public getAssignedVariations(\n visitorCode: string,\n ): Result<ExperimentVariationsType, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n return result;\n }\n\n const experiments = result.data[visitorCode];\n\n if (!experiments) {\n return Err(\n new KameleoonError(KameleoonException.StorageRead, visitorCode),\n );\n }\n\n return Ok(experiments);\n }\n\n public getFeatureFlagVariation({\n visitorCode,\n featureFlag,\n targetingData,\n withAssignment = false,\n }: GetFeatureFlagVariationParametersType): Result<\n FeatureFlagVariationType,\n KameleoonError\n > {\n const validateResult = Utilities.validateVisitorCode(visitorCode);\n\n if (!validateResult.ok) {\n return Err(validateResult.error);\n }\n\n const {\n rules,\n featureKey,\n id: featureFlagId,\n defaultVariationKey,\n } = featureFlag;\n\n for (const rule of rules) {\n const {\n segment,\n experimentId,\n id,\n exposition,\n respoolTime,\n variationByExposition,\n } = rule;\n\n // --- Check targeting ---\n const targetingResult = Utilities.checkTargeting({\n segment,\n visitorCode,\n experimentId,\n targetingData,\n variationConfiguration: this,\n });\n\n if (!targetingResult.ok) {\n return targetingResult;\n }\n\n if (!targetingResult.data) {\n continue;\n }\n\n // --- Note ---\n // Calculate new variation (and assign it if `withAssignment` is `true`)\n // First the the exposed rule is calculated and then the variation inside of it\n const ruleHash = Hasher.obtainFeatureFlagHashDouble({\n visitorCode,\n respoolTime,\n campaignId: String(id),\n });\n\n if (ruleHash <= exposition) {\n let totalDeviation = 0;\n\n const variationHash = Hasher.obtainFeatureFlagHashDouble({\n visitorCode,\n respoolTime,\n campaignId: String(experimentId),\n });\n\n for (const variation of variationByExposition) {\n totalDeviation += variation.exposition;\n\n if (variationHash <= totalDeviation) {\n // --- Note ---\n // For the `RuleType.EXPERIMENTATION` variation assignment must happen without\n // calculating experiment deviation\n if (rule.type === RuleType.EXPERIMENTATION && withAssignment) {\n this.updateStorageData({\n visitorCode,\n experimentId: String(experimentId),\n // --- Note ---\n // For `RuleType.EXPERIMENTATION` `variationId` can not be null\n variationId: variation.variationId as number,\n });\n }\n\n const { exposition, ...restParameters } = variation;\n\n return Ok({\n ...restParameters,\n rule,\n featureFlagId,\n featureKey,\n experimentId,\n });\n }\n }\n }\n\n if (rule.type === RuleType.TARGETED_DELIVERY) {\n break;\n }\n }\n\n return Ok({\n featureKey,\n featureFlagId,\n experimentId: null,\n variationKey: defaultVariationKey,\n variationId: null,\n rule: null,\n });\n }\n\n public getExperimentVariation(\n visitorCode: string,\n experiment: ExperimentItemType,\n ): Result<number, KameleoonError> {\n const { id, respoolTime, deviations } = experiment;\n\n const hashDouble = Hasher.obtainExperimentHashDouble({\n visitorCode,\n campaignId: id,\n respoolTime,\n });\n\n let isUnallocated = true;\n let totalDeviation = 0;\n let resultVariationId = 0;\n\n for (const deviation of deviations) {\n totalDeviation += deviation.value;\n\n if (totalDeviation >= hashDouble) {\n // --- Note ---\n // If sum of all variations is less than 1 (100%), then there is a chance\n // user will end up outside of any variation\n isUnallocated = false;\n // --- Note ---\n // 'origin' is the default `variationId`, it must return id of 0\n if (deviation.variationId !== 'origin') {\n resultVariationId = Number(deviation.variationId);\n }\n\n break;\n }\n }\n\n if (isUnallocated) {\n return Err(\n new KameleoonError(KameleoonException.NotAllocated, visitorCode),\n );\n }\n\n return Ok(resultVariationId);\n }\n\n private assignVariation(\n visitorCode: string,\n experiment: ExperimentItemType,\n ): Result<number, KameleoonError> {\n const variationResult = this.getExperimentVariation(\n visitorCode,\n experiment,\n );\n\n if (!variationResult.ok) {\n return variationResult;\n }\n\n const result = this.updateStorageData({\n visitorCode,\n experimentId: experiment.id,\n variationId: variationResult.data,\n });\n\n if (!result.ok) {\n return result;\n }\n\n return Ok(variationResult.data);\n }\n\n private updateStorageData({\n visitorCode,\n experimentId,\n variationId,\n }: UpdateStorageParamsType): Result<void, KameleoonError> {\n const result = this.storage.read();\n\n if (!result.ok) {\n // --- Note ---\n // If there is a parsing error we return error\n // But if there is `LocalStorageRead` error it means that\n // data was read successfully and it's empty, which is not problem\n // cause that might be initial `read`\n if (result.error.type === KameleoonException.StorageParse) {\n return result;\n }\n }\n\n const updatedVariationData: VariationDataType = result.ok\n ? result.data\n : {};\n\n const updatedVariation = {\n variationId,\n assignmentDate: new Date().toString(),\n };\n\n if (updatedVariationData[visitorCode]) {\n updatedVariationData[visitorCode][experimentId] = updatedVariation;\n } else {\n updatedVariationData[visitorCode] = {\n [experimentId]: updatedVariation,\n };\n }\n\n return this.storage.write(updatedVariationData);\n }\n\n // --- TODO: commented out in case of future logic rework ---\n // --- Mind: `variationId` could cause the `undefined` issue ---\n // --- Reference: https://development.kameleoon.net/sdk/javascript-sdk-packages/-/merge_requests/89 ---\n // private getAssignedRuleVariation(\n // visitorCode: string,\n // rule: RuleItemType,\n // ): Result<GetAssignedRuleVariationResultType, KameleoonError> {\n // const emptyVariation: Omit<VariationByExpositionType, 'exposition'> = {\n // variationId: null,\n // variationKey: '',\n // };\n // const { experimentId, variationByExposition } = rule;\n\n // const variationsResult = this.getAssignedVariations(visitorCode);\n\n // // --- Note ---\n // // If there is an error, we just want to skip seeking\n // // for variation in the storage, not throw an error\n // if (!variationsResult.ok) {\n // return Ok(emptyVariation);\n // }\n\n // const variations = variationsResult.data;\n\n // if (\n // experimentId &&\n // typeof variations[experimentId].variationId !== undefined\n // ) {\n // const id = variations[experimentId].variationId;\n // const featureFlagVariation = variationByExposition.find(\n // (item) => item.variationId == id,\n // );\n\n // if (!featureFlagVariation) {\n // // --- Note ---\n // // This error is not described for public methods as\n // // it serves internal purpose of checking whether\n // // the persistent variation has been updated and should be re-allocated\n // return Err(new KameleoonError(KameleoonException.DataInconsistency));\n // }\n\n // const { exposition, ...restParameters } = featureFlagVariation;\n\n // return Ok({ ...restParameters });\n // }\n\n // return Ok(emptyVariation);\n // }\n}\n"],"mappings":"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"}
|