@kameleoon/javascript-sdk-core 2.0.0 → 2.1.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/cacheManager/cacheManager.d.ts +38 -0
- package/dist/cacheManager/cacheManager.js +74 -0
- package/dist/cacheManager/cacheManager.js.map +1 -0
- package/dist/cacheManager/index.d.ts +2 -0
- package/dist/cacheManager/index.js +20 -0
- package/dist/cacheManager/index.js.map +1 -0
- package/dist/cacheManager/types.d.ts +14 -0
- package/dist/cacheManager/types.js +6 -0
- package/dist/cacheManager/types.js.map +1 -0
- package/dist/campaignConfiguration/campaignConfiguration.d.ts +1 -1
- package/dist/campaignConfiguration/campaignConfiguration.js +15 -10
- package/dist/campaignConfiguration/campaignConfiguration.js.map +1 -1
- package/dist/campaignConfiguration/constants.d.ts +3 -3
- package/dist/campaignConfiguration/constants.js +3 -3
- package/dist/campaignConfiguration/constants.js.map +1 -1
- package/dist/campaignConfiguration/index.d.ts +1 -0
- package/dist/campaignConfiguration/index.js +7 -0
- package/dist/campaignConfiguration/index.js.map +1 -1
- package/dist/campaignConfiguration/types.d.ts +4 -1
- package/dist/campaignConfiguration/types.js.map +1 -1
- package/dist/constants.d.ts +11 -0
- package/dist/constants.js +16 -1
- package/dist/constants.js.map +1 -1
- package/dist/hasher/hasher.d.ts +1 -1
- package/dist/hasher/hasher.js +7 -7
- package/dist/hasher/hasher.js.map +1 -1
- package/dist/hasher/types.d.ts +1 -1
- package/dist/hasher/types.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/kameleoonClient.d.ts +16 -3
- package/dist/kameleoonClient.js +50 -3
- package/dist/kameleoonClient.js.map +1 -1
- package/dist/kameleoonError/constants.d.ts +1 -1
- package/dist/kameleoonError/constants.js +1 -1
- package/dist/kameleoonError/constants.js.map +1 -1
- package/dist/kameleoonError/kameleoonError.d.ts +1 -1
- package/dist/kameleoonError/kameleoonError.js +1 -1
- package/dist/kameleoonError/kameleoonError.js.map +1 -1
- package/dist/kameleoonError/types.d.ts +1 -1
- package/dist/kameleoonError/types.js +1 -1
- package/dist/kameleoonError/types.js.map +1 -1
- package/dist/requester/requester.js +3 -13
- package/dist/requester/requester.js.map +1 -1
- package/dist/types.d.ts +19 -2
- package/dist/types.js +9 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/types.d.ts +8 -0
- package/dist/utilities/types.js.map +1 -1
- package/dist/utilities/utilities.d.ts +5 -2
- package/dist/utilities/utilities.js +54 -0
- package/dist/utilities/utilities.js.map +1 -1
- package/dist/variationConfiguration/types.d.ts +1 -1
- package/dist/variationConfiguration/types.js.map +1 -1
- package/dist/variationConfiguration/variationConfiguration.d.ts +0 -1
- package/dist/variationConfiguration/variationConfiguration.js +70 -79
- package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
- package/package.json +1 -1
- package/dist/hasher/constants.d.ts +0 -1
- package/dist/hasher/constants.js +0 -9
- package/dist/hasher/constants.js.map +0 -1
|
@@ -23,20 +23,10 @@ class Requester extends _nonce.Nonce {
|
|
|
23
23
|
_defineProperty(this, "environment", void 0);
|
|
24
24
|
_defineProperty(this, "requestDispatcher", void 0);
|
|
25
25
|
_defineProperty(this, "packageInfo", void 0);
|
|
26
|
-
const {
|
|
27
|
-
name,
|
|
28
|
-
version
|
|
29
|
-
} = packageInfo;
|
|
30
|
-
// --- Note ---
|
|
31
|
-
// Name looks like this: "@kameleoon/javascript-sdk"
|
|
32
|
-
const parsedName = name.split('/')[1].split('-')[0];
|
|
33
26
|
this.requestDispatcher = requestDispatcher;
|
|
34
27
|
this.siteCode = siteCode;
|
|
35
28
|
this.environment = environment;
|
|
36
|
-
this.packageInfo =
|
|
37
|
-
name: parsedName,
|
|
38
|
-
version
|
|
39
|
-
};
|
|
29
|
+
this.packageInfo = packageInfo;
|
|
40
30
|
}
|
|
41
31
|
async getClientConfiguration(timeStamp) {
|
|
42
32
|
const environmentParam = this.environment ? _constants.UrlParameter.Environment + this.environment : '';
|
|
@@ -98,10 +88,10 @@ class Requester extends _nonce.Nonce {
|
|
|
98
88
|
}
|
|
99
89
|
getTrackingUrl(visitorCode) {
|
|
100
90
|
const {
|
|
101
|
-
|
|
91
|
+
type,
|
|
102
92
|
version
|
|
103
93
|
} = this.packageInfo;
|
|
104
|
-
return _constants.URL.TRACKING + this.siteCode + _constants.UrlParameter.VisitorCode + encodeURIComponent(visitorCode) + _constants.UrlParameter.SdkName +
|
|
94
|
+
return _constants.URL.TRACKING + this.siteCode + _constants.UrlParameter.VisitorCode + encodeURIComponent(visitorCode) + _constants.UrlParameter.SdkName + type + _constants.UrlParameter.SdkVersion + version;
|
|
105
95
|
}
|
|
106
96
|
}
|
|
107
97
|
exports.Requester = Requester;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requester.js","names":["_tsRes","require","_kameleoonError","_constants","_nonce","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","Requester","Nonce","constructor","siteCode","environment","packageInfo","requestDispatcher","
|
|
1
|
+
{"version":3,"file":"requester.js","names":["_tsRes","require","_kameleoonError","_constants","_nonce","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","Requester","Nonce","constructor","siteCode","environment","packageInfo","requestDispatcher","getClientConfiguration","timeStamp","environmentParam","UrlParameter","Environment","timeStampParam","Ts","requestUrl","URL","CLIENT_CONFIGURATION","UrlQuery","Mobile","response","get","Err","KameleoonError","KameleoonException","ClientConfiguration","Ok","getRemoteData","DATA","Key","encodeURI","RemoteData","trackExperiment","variationId","visitorCode","experimentId","isUnallocated","body","userAgent","callback","url","getTrackingUrl","unallocatedAddition","UrlEventType","Activity","nonce","bodyAddition","Experiment","Id","VariationId","extendedBody","headers","Header","UserAgent","track","trackData","type","version","TRACKING","VisitorCode","encodeURIComponent","SdkName","SdkVersion","exports"],"sources":["../../src/requester/requester.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { Environment, ExternalPackageInfoType } from '../types';\nimport { KameleoonError, KameleoonException } from '../kameleoonError';\nimport { URL, UrlParameter, Header, UrlQuery, UrlEventType } from './constants';\nimport {\n GetClientConfigurationResultType,\n RequesterParamsType,\n TrackDataParamsType,\n TrackExperimentParamsType,\n IExternalRequestDispatcher,\n} from './types';\nimport { JSONType } from '../campaignConfiguration';\nimport { Nonce } from '../kameleoonData/nonce';\n\nexport interface IRequester {\n getClientConfiguration: () => Promise<\n Result<GetClientConfigurationResultType, KameleoonError>\n >;\n getRemoteData: (key: string) => Promise<Result<JSONType, KameleoonError>>;\n trackExperiment: ({\n variationId,\n visitorCode,\n experimentId,\n isUnallocated,\n callback,\n body,\n }: TrackExperimentParamsType) => Promise<void>;\n trackData: ({ visitorCode, body }: TrackDataParamsType) => Promise<void>;\n}\n\nexport class Requester extends Nonce implements IRequester {\n private siteCode: string;\n private environment?: Environment;\n private requestDispatcher: IExternalRequestDispatcher;\n private packageInfo: ExternalPackageInfoType;\n\n constructor({\n siteCode,\n environment,\n packageInfo,\n requestDispatcher,\n }: RequesterParamsType) {\n super();\n\n this.requestDispatcher = requestDispatcher;\n this.siteCode = siteCode;\n this.environment = environment;\n this.packageInfo = packageInfo;\n }\n\n public async getClientConfiguration(\n timeStamp?: number,\n ): Promise<Result<GetClientConfigurationResultType, KameleoonError>> {\n const environmentParam = this.environment\n ? UrlParameter.Environment + this.environment\n : '';\n const timeStampParam = timeStamp ? UrlParameter.Ts + timeStamp : '';\n\n const requestUrl =\n URL.CLIENT_CONFIGURATION +\n UrlQuery.Mobile +\n this.siteCode +\n environmentParam +\n timeStampParam;\n\n const response = await this.requestDispatcher.get(requestUrl);\n\n if (!response) {\n return Err(new KameleoonError(KameleoonException.ClientConfiguration));\n }\n\n return Ok(response as GetClientConfigurationResultType);\n }\n\n public async getRemoteData(\n key: string,\n ): Promise<Result<JSONType, KameleoonError>> {\n const requestUrl: string =\n URL.DATA + this.siteCode + UrlParameter.Key + encodeURI(key);\n\n const response = await this.requestDispatcher.get(requestUrl);\n\n if (!response) {\n return Err(new KameleoonError(KameleoonException.RemoteData));\n }\n\n return Ok(response);\n }\n\n public async trackExperiment({\n variationId,\n visitorCode,\n experimentId,\n isUnallocated,\n body,\n userAgent,\n callback,\n }: TrackExperimentParamsType): Promise<void> {\n const url = this.getTrackingUrl(visitorCode);\n\n const unallocatedAddition = !body\n ? UrlEventType.Activity + UrlParameter.Nonce + this.nonce\n : '';\n const bodyAddition = isUnallocated\n ? unallocatedAddition\n : UrlEventType.Experiment +\n UrlParameter.Id +\n experimentId +\n UrlParameter.VariationId +\n variationId +\n UrlParameter.Nonce +\n this.nonce;\n const extendedBody = bodyAddition ? body + '\\n' + bodyAddition : body;\n\n const headers = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n const response = await this.requestDispatcher.track({\n url,\n headers,\n body: extendedBody,\n });\n\n if (response && callback) {\n callback();\n }\n }\n\n public async trackData({\n visitorCode,\n body,\n userAgent,\n }: TrackDataParamsType): Promise<void> {\n const url = this.getTrackingUrl(visitorCode);\n\n const headers = userAgent\n ? {\n [Header.UserAgent]: userAgent,\n }\n : undefined;\n\n this.requestDispatcher.track({\n url,\n headers,\n body,\n });\n }\n\n private getTrackingUrl(visitorCode: string): string {\n const { type, version } = this.packageInfo;\n\n return (\n URL.TRACKING +\n this.siteCode +\n UrlParameter.VisitorCode +\n encodeURIComponent(visitorCode) +\n UrlParameter.SdkName +\n type +\n UrlParameter.SdkVersion +\n version\n );\n }\n}\n"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { IncomingMessage, ServerResponse } from 'http';
|
|
3
3
|
import { JSONType } from './campaignConfiguration/types';
|
|
4
|
+
import { SDKType } from './constants';
|
|
4
5
|
import { IExternalEventSourceConstructor } from './eventSource';
|
|
5
6
|
import { IExternalStorageConstructor } from './storage';
|
|
6
7
|
import { IExternalRequestDispatcher, GetClientConfigurationResultType } from './requester';
|
|
@@ -10,10 +11,18 @@ import { IExternalRequestDispatcher, GetClientConfigurationResultType } from './
|
|
|
10
11
|
*
|
|
11
12
|
* @param {Environment} environment - feature flag environment
|
|
12
13
|
* @defaultvalue Environment.Production
|
|
14
|
+
*
|
|
15
|
+
* @param {number | undefined} targetingDataCleanupInterval - interval in _minutes_ for cleaning up targeting data, minimum value is 1 minute
|
|
16
|
+
* Note: if not specified, default value will be used
|
|
17
|
+
* @defaultvalue
|
|
18
|
+
* - JavaScript SDK: `undefined` (no cleanup)
|
|
19
|
+
* - React/React Native SDK: `undefined` (no cleanup)
|
|
20
|
+
* - NodeJS SDK: `30`
|
|
13
21
|
* */
|
|
14
22
|
export type SDKConfigurationType = {
|
|
15
23
|
updateInterval?: number;
|
|
16
24
|
environment?: Environment;
|
|
25
|
+
targetingDataCleanupInterval?: number;
|
|
17
26
|
};
|
|
18
27
|
/**
|
|
19
28
|
* @param {string} siteCode - client's siteCode defined on Kameleoon platform
|
|
@@ -26,11 +35,11 @@ export type SDKCoreParameters = {
|
|
|
26
35
|
internalConfiguration: InternalSDKConfigurationType;
|
|
27
36
|
};
|
|
28
37
|
/**
|
|
29
|
-
* @param {
|
|
38
|
+
* @param {SDKType} type - type of the SDK
|
|
30
39
|
* @param {string} version - version of the package
|
|
31
40
|
* */
|
|
32
41
|
export type ExternalPackageInfoType = {
|
|
33
|
-
|
|
42
|
+
type: SDKType;
|
|
34
43
|
version: string;
|
|
35
44
|
};
|
|
36
45
|
/**
|
|
@@ -39,6 +48,7 @@ export type ExternalPackageInfoType = {
|
|
|
39
48
|
* @param {ExternalPackageInfoType} externalPackageInfo - external package info, used to get package version and name
|
|
40
49
|
* @param {GetClientConfigurationResultType} externalClientConfiguration - external fetched client configuration
|
|
41
50
|
* @param {IExternalRequestDispatcher} externalRequestDispatcher - external request dispatcher, used to track data or get data
|
|
51
|
+
* @param {number} targetingDataCleanupInterval - interval in *minutes* for cleaning up targeting data, minimum value is 1 minute
|
|
42
52
|
* */
|
|
43
53
|
export type InternalSDKConfigurationType = {
|
|
44
54
|
externalStorage: IExternalStorageConstructor;
|
|
@@ -46,6 +56,7 @@ export type InternalSDKConfigurationType = {
|
|
|
46
56
|
externalPackageInfo: ExternalPackageInfoType;
|
|
47
57
|
externalRequestDispatcher: IExternalRequestDispatcher;
|
|
48
58
|
externalClientConfiguration?: GetClientConfigurationResultType;
|
|
59
|
+
targetingDataCleanupInterval?: number;
|
|
49
60
|
};
|
|
50
61
|
/**
|
|
51
62
|
* @readonly
|
|
@@ -148,3 +159,9 @@ export type ClientGetVisitorCodeParametersType = {
|
|
|
148
159
|
export type MobileGetVisitorCodeParametersType = {
|
|
149
160
|
defaultVisitorCode?: string;
|
|
150
161
|
};
|
|
162
|
+
export type TrackingCacheItemType = {
|
|
163
|
+
[experimentId: number]: {
|
|
164
|
+
variationId: number;
|
|
165
|
+
expirationTime: number;
|
|
166
|
+
};
|
|
167
|
+
};
|
package/dist/types.js
CHANGED
|
@@ -10,6 +10,13 @@ exports.VariableType = exports.Milliseconds = exports.Environment = void 0;
|
|
|
10
10
|
*
|
|
11
11
|
* @param {Environment} environment - feature flag environment
|
|
12
12
|
* @defaultvalue Environment.Production
|
|
13
|
+
*
|
|
14
|
+
* @param {number | undefined} targetingDataCleanupInterval - interval in _minutes_ for cleaning up targeting data, minimum value is 1 minute
|
|
15
|
+
* Note: if not specified, default value will be used
|
|
16
|
+
* @defaultvalue
|
|
17
|
+
* - JavaScript SDK: `undefined` (no cleanup)
|
|
18
|
+
* - React/React Native SDK: `undefined` (no cleanup)
|
|
19
|
+
* - NodeJS SDK: `30`
|
|
13
20
|
* */
|
|
14
21
|
/**
|
|
15
22
|
* @param {string} siteCode - client's siteCode defined on Kameleoon platform
|
|
@@ -17,7 +24,7 @@ exports.VariableType = exports.Milliseconds = exports.Environment = void 0;
|
|
|
17
24
|
* @param {InternalSDKConfigurationType} internalConfiguration - internal configuration for sdk core to be initialized with certain parameters to certain type of JavaScript SDK
|
|
18
25
|
* */
|
|
19
26
|
/**
|
|
20
|
-
* @param {
|
|
27
|
+
* @param {SDKType} type - type of the SDK
|
|
21
28
|
* @param {string} version - version of the package
|
|
22
29
|
* */
|
|
23
30
|
/**
|
|
@@ -26,6 +33,7 @@ exports.VariableType = exports.Milliseconds = exports.Environment = void 0;
|
|
|
26
33
|
* @param {ExternalPackageInfoType} externalPackageInfo - external package info, used to get package version and name
|
|
27
34
|
* @param {GetClientConfigurationResultType} externalClientConfiguration - external fetched client configuration
|
|
28
35
|
* @param {IExternalRequestDispatcher} externalRequestDispatcher - external request dispatcher, used to track data or get data
|
|
36
|
+
* @param {number} targetingDataCleanupInterval - interval in *minutes* for cleaning up targeting data, minimum value is 1 minute
|
|
29
37
|
* */
|
|
30
38
|
/**
|
|
31
39
|
* @readonly
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["Environment","exports","VariableType","Milliseconds","Second","Minute"],"sources":["../src/types.ts"],"sourcesContent":["import { IncomingMessage, ServerResponse } from 'http';\nimport { JSONType } from './campaignConfiguration/types';\nimport { IExternalEventSourceConstructor } from './eventSource';\nimport { IExternalStorageConstructor } from './storage';\nimport {\n IExternalRequestDispatcher,\n GetClientConfigurationResultType,\n} from './requester';\n\n/**\n * @param {number} updateInterval - update interval in _minutes_ for sdk configuration, minimum value is 1 minute\n * @defaultvalue 60\n *\n * @param {Environment} environment - feature flag environment\n * @defaultvalue Environment.Production\n * */\nexport type SDKConfigurationType = {\n updateInterval?: number;\n environment?: Environment;\n};\n\n/**\n * @param {string} siteCode - client's siteCode defined on Kameleoon platform\n * @param {Partial<SDKConfigurationType>} configuration - client's configuration\n * @param {InternalSDKConfigurationType} internalConfiguration - internal configuration for sdk core to be initialized with certain parameters to certain type of JavaScript SDK\n * */\nexport type SDKCoreParameters = {\n siteCode: string;\n configuration?: Partial<SDKConfigurationType>;\n internalConfiguration: InternalSDKConfigurationType;\n};\n\n/**\n * @param {
|
|
1
|
+
{"version":3,"file":"types.js","names":["Environment","exports","VariableType","Milliseconds","Second","Minute"],"sources":["../src/types.ts"],"sourcesContent":["import { IncomingMessage, ServerResponse } from 'http';\nimport { JSONType } from './campaignConfiguration/types';\nimport { SDKType } from './constants';\nimport { IExternalEventSourceConstructor } from './eventSource';\nimport { IExternalStorageConstructor } from './storage';\nimport {\n IExternalRequestDispatcher,\n GetClientConfigurationResultType,\n} from './requester';\n\n/**\n * @param {number} updateInterval - update interval in _minutes_ for sdk configuration, minimum value is 1 minute\n * @defaultvalue 60\n *\n * @param {Environment} environment - feature flag environment\n * @defaultvalue Environment.Production\n *\n * @param {number | undefined} targetingDataCleanupInterval - interval in _minutes_ for cleaning up targeting data, minimum value is 1 minute\n * Note: if not specified, default value will be used\n * @defaultvalue\n * - JavaScript SDK: `undefined` (no cleanup)\n * - React/React Native SDK: `undefined` (no cleanup)\n * - NodeJS SDK: `30`\n * */\nexport type SDKConfigurationType = {\n updateInterval?: number;\n environment?: Environment;\n targetingDataCleanupInterval?: number;\n};\n\n/**\n * @param {string} siteCode - client's siteCode defined on Kameleoon platform\n * @param {Partial<SDKConfigurationType>} configuration - client's configuration\n * @param {InternalSDKConfigurationType} internalConfiguration - internal configuration for sdk core to be initialized with certain parameters to certain type of JavaScript SDK\n * */\nexport type SDKCoreParameters = {\n siteCode: string;\n configuration?: Partial<SDKConfigurationType>;\n internalConfiguration: InternalSDKConfigurationType;\n};\n\n/**\n * @param {SDKType} type - type of the SDK\n * @param {string} version - version of the package\n * */\nexport type ExternalPackageInfoType = {\n type: SDKType;\n version: string;\n};\n\n/**\n * @param {IExternalStorage | undefined} externalStorage - external file system storage implemented outside client initialization\n * @param {IExternalEventSourceConstructor | undefined} externalEventSource - constructor for building external event source implementation\n * @param {ExternalPackageInfoType} externalPackageInfo - external package info, used to get package version and name\n * @param {GetClientConfigurationResultType} externalClientConfiguration - external fetched client configuration\n * @param {IExternalRequestDispatcher} externalRequestDispatcher - external request dispatcher, used to track data or get data\n * @param {number} targetingDataCleanupInterval - interval in *minutes* for cleaning up targeting data, minimum value is 1 minute\n * */\nexport type InternalSDKConfigurationType = {\n externalStorage: IExternalStorageConstructor;\n externalEventSource: IExternalEventSourceConstructor;\n externalPackageInfo: ExternalPackageInfoType;\n externalRequestDispatcher: IExternalRequestDispatcher;\n externalClientConfiguration?: GetClientConfigurationResultType;\n targetingDataCleanupInterval?: number;\n};\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of environment, passed as an argument to KameleoonClient `configuration`s `environment` field\n * */\nexport enum Environment {\n Production = 'production',\n Staging = 'staging',\n Development = 'development',\n}\n\n/**\n * @readonly\n * @enum {string} an Enum containing all possible variants of feature variable types\n * */\nexport enum VariableType {\n BOOLEAN = 'BOOLEAN',\n NUMBER = 'NUMBER',\n STRING = 'STRING',\n JSON = 'JSON',\n}\n\nexport type BooleanVariableType = {\n type: VariableType.BOOLEAN;\n value: boolean;\n};\nexport type NumberVariableType = { type: VariableType.NUMBER; value: number };\nexport type StringVariableType = { type: VariableType.STRING; value: string };\nexport type JSONVariableType = { type: VariableType.JSON; value: JSONType };\n\n/**\n * @type FeatureVariableResultType - tuple of possible feature variable result types, each possible variation is an 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 * */\nexport type FeatureVariableResultType =\n | BooleanVariableType\n | NumberVariableType\n | StringVariableType\n | JSONVariableType;\n\nexport enum Milliseconds {\n Second = 1000,\n Minute = 60 * Milliseconds.Second,\n Hour = 60 * Milliseconds.Minute,\n}\n\nexport type TrackConversionParamsType = {\n visitorCode: string;\n goalId: number;\n revenue: number;\n};\n\nexport type ExperimentType = {\n id: number;\n name: string;\n};\n\nexport type FeatureFlagType = {\n id: number;\n key: string;\n};\n\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {string} featureKey - key of the feature flag to look for, can be found on Kameleoon Platform\n * @param {string} variableKey - key of the variable to be found for a feature flag with provided `featureKey`, can be found on Kameleoon Platform\n * */\nexport type GetFeatureFlagVariableParamsType = {\n visitorCode: string;\n featureKey: string;\n variableKey: string;\n};\n\n/**\n * @param {string} domain - domain which cookie belongs to\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * */\nexport type GetResultCookieParametersType = {\n domain: string;\n visitorCode: string;\n};\n\n/**\n * @param {Request} request - request object to get the cookie from\n * @param {Response} response - response object to write the updated cookie to\n * @param {string} domain - domain which cookie belongs to\n * @param {string | undefined} defaultVisitorCode - visitor code to be used in case there is no visitor code in cookies *Note*: if not passed visitor code will be randomly generated\n * */\nexport type ServerGetVisitorCodeParametersType = {\n request: IncomingMessage;\n response: ServerResponse;\n domain: string;\n defaultVisitorCode?: string;\n};\n\n/**\n * @param {string} domain - domain which cookie belongs to\n * @param {string | undefined} defaultVisitorCode - visitor code to be used in case there is no visitor code in cookies *Note*: if not passed visitor code will be randomly generated\n * */\nexport type ClientGetVisitorCodeParametersType = {\n domain: string;\n defaultVisitorCode?: string;\n};\n\n/**\n * @param {string | undefined} defaultVisitorCode - visitor code to be used in case there is no visitor code in cookies *Note*: if not passed visitor code will be randomly generated\n * */\nexport type MobileGetVisitorCodeParametersType = {\n defaultVisitorCode?: string;\n};\n\nexport type TrackingCacheItemType = {\n [experimentId: number]: { variationId: number; expirationTime: number };\n};\n"],"mappings":";;;;;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AAHA,IAIYA,WAAW,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;AAMvB;AACA;AACA;AACA;AAHAC,OAAA,CAAAD,WAAA,GAAAA,WAAA;AAAA,IAIYE,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAAAD,OAAA,CAAAC,YAAA,GAAAA,YAAA;AAAA,IAwBZC,YAAY,aAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY;EAAZA,YAAY,CAAZA,YAAY,aAEb,EAAE,GAAGA,YAAY,CAACC,MAAM;EAFvBD,YAAY,CAAZA,YAAY,WAGf,EAAE,GAAGA,YAAY,CAACE,MAAM;EAAA,OAHrBF,YAAY;AAAA;AAAAF,OAAA,CAAAE,YAAA,GAAAA,YAAA"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { CacheManager } from '../cacheManager';
|
|
1
2
|
import { CampaignConfiguration } from '../campaignConfiguration';
|
|
2
3
|
import { Requester } from '../requester';
|
|
3
4
|
import { SegmentType, TargetingDataItemType } from '../targeting';
|
|
5
|
+
import { TrackingCacheItemType } from '../types';
|
|
4
6
|
import { VariationConfiguration, FeatureFlagVariationType } from '../variationConfiguration';
|
|
5
7
|
export type CheckTargetingParamsType = {
|
|
6
8
|
segment: SegmentType | null;
|
|
@@ -16,3 +18,9 @@ export type TrackRuleParamsType = {
|
|
|
16
18
|
requester: Requester;
|
|
17
19
|
userAgent?: string;
|
|
18
20
|
};
|
|
21
|
+
export type ManageCacheParametersType = {
|
|
22
|
+
cacheManager: CacheManager<TrackingCacheItemType>;
|
|
23
|
+
visitorCode: string;
|
|
24
|
+
experimentId: number;
|
|
25
|
+
variationId: number;
|
|
26
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/utilities/types.ts"],"sourcesContent":["import { CampaignConfiguration } from '../campaignConfiguration';\nimport { Requester } from '../requester';\nimport { SegmentType, TargetingDataItemType } from '../targeting';\nimport {\n VariationConfiguration,\n FeatureFlagVariationType,\n} from '../variationConfiguration';\n\nexport type CheckTargetingParamsType = {\n segment: SegmentType | null;\n experimentId: number | null;\n visitorCode: string;\n targetingData?: TargetingDataItemType[];\n variationConfiguration?: VariationConfiguration;\n};\n\nexport type TrackRuleParamsType = {\n featureFlagVariation: FeatureFlagVariationType;\n campaignConfiguration: CampaignConfiguration;\n visitorCode: string;\n requester: Requester;\n userAgent?: string;\n};\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/utilities/types.ts"],"sourcesContent":["import { CacheManager } from '../cacheManager';\nimport { CampaignConfiguration } from '../campaignConfiguration';\nimport { Requester } from '../requester';\nimport { SegmentType, TargetingDataItemType } from '../targeting';\nimport { TrackingCacheItemType } from '../types';\nimport {\n VariationConfiguration,\n FeatureFlagVariationType,\n} from '../variationConfiguration';\n\nexport type CheckTargetingParamsType = {\n segment: SegmentType | null;\n experimentId: number | null;\n visitorCode: string;\n targetingData?: TargetingDataItemType[];\n variationConfiguration?: VariationConfiguration;\n};\n\nexport type TrackRuleParamsType = {\n featureFlagVariation: FeatureFlagVariationType;\n campaignConfiguration: CampaignConfiguration;\n visitorCode: string;\n requester: Requester;\n userAgent?: string;\n};\n\nexport type ManageCacheParametersType = {\n cacheManager: CacheManager<TrackingCacheItemType>;\n visitorCode: string;\n experimentId: number;\n variationId: number;\n};\n"],"mappings":""}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Result } from 'ts-res';
|
|
2
2
|
import { KameleoonError } from '../kameleoonError';
|
|
3
|
-
import { CheckTargetingParamsType, TrackRuleParamsType } from './types';
|
|
4
|
-
import { FeatureVariableResultType } from '../types';
|
|
3
|
+
import { CheckTargetingParamsType, ManageCacheParametersType, TrackRuleParamsType } from './types';
|
|
4
|
+
import { FeatureVariableResultType, TrackingCacheItemType } from '../types';
|
|
5
5
|
import { CampaignConfiguration, FeatureVariableType } from '../campaignConfiguration';
|
|
6
|
+
import { CacheManager } from '../cacheManager';
|
|
6
7
|
export declare class Utilities {
|
|
7
8
|
static checkTargeting({ segment, visitorCode, targetingData, experimentId, variationConfiguration, }: CheckTargetingParamsType): Result<boolean, KameleoonError>;
|
|
8
9
|
static validateVisitorCode(visitorCode: string): Result<void, KameleoonError>;
|
|
@@ -10,4 +11,6 @@ export declare class Utilities {
|
|
|
10
11
|
static trackRule({ featureFlagVariation, campaignConfiguration, visitorCode, requester, userAgent, }: TrackRuleParamsType): void;
|
|
11
12
|
static parseFeatureVariable(variable: FeatureVariableType): Result<FeatureVariableResultType, KameleoonError>;
|
|
12
13
|
static getUserAgent(visitorCode: string, campaignConfiguration: CampaignConfiguration): string | undefined;
|
|
14
|
+
static updateCache({ cacheManager, visitorCode, experimentId, variationId, }: ManageCacheParametersType): void;
|
|
15
|
+
static getTrackingCode(trackingCache: CacheManager<TrackingCacheItemType>, visitorCode: string): string;
|
|
13
16
|
}
|
|
@@ -10,6 +10,12 @@ var _types = require("../types");
|
|
|
10
10
|
var _targeting = require("../targeting");
|
|
11
11
|
var _constants = require("./constants");
|
|
12
12
|
var _kameleoonData = require("../kameleoonData");
|
|
13
|
+
var _constants2 = require("../constants");
|
|
14
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
15
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
16
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
17
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
18
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
13
19
|
class Utilities {
|
|
14
20
|
static checkTargeting({
|
|
15
21
|
segment,
|
|
@@ -126,6 +132,54 @@ class Utilities {
|
|
|
126
132
|
}
|
|
127
133
|
return undefined;
|
|
128
134
|
}
|
|
135
|
+
static updateCache({
|
|
136
|
+
cacheManager,
|
|
137
|
+
visitorCode,
|
|
138
|
+
experimentId,
|
|
139
|
+
variationId
|
|
140
|
+
}) {
|
|
141
|
+
const cacheData = cacheManager.getAliveItem(visitorCode);
|
|
142
|
+
const newCacheData = cacheData ? _objectSpread({}, cacheData) : {};
|
|
143
|
+
newCacheData[experimentId] = {
|
|
144
|
+
variationId,
|
|
145
|
+
expirationTime: Date.now() + _constants2.CACHE_ITEM_LIFETIME * _types.Milliseconds.Second
|
|
146
|
+
};
|
|
147
|
+
cacheManager.add({
|
|
148
|
+
key: visitorCode,
|
|
149
|
+
data: newCacheData,
|
|
150
|
+
lifetime: _constants2.CACHE_ITEM_LIFETIME
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
static getTrackingCode(trackingCache, visitorCode) {
|
|
154
|
+
let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';
|
|
155
|
+
const cacheData = trackingCache.getAliveItem(visitorCode);
|
|
156
|
+
if (!cacheData) {
|
|
157
|
+
return resultString;
|
|
158
|
+
}
|
|
159
|
+
const updatedCacheData = {};
|
|
160
|
+
Object.entries(cacheData).forEach(([experimentId, {
|
|
161
|
+
variationId,
|
|
162
|
+
expirationTime
|
|
163
|
+
}]) => {
|
|
164
|
+
if (expirationTime > Date.now()) {
|
|
165
|
+
resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;
|
|
166
|
+
resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;
|
|
167
|
+
updatedCacheData[Number(experimentId)] = {
|
|
168
|
+
variationId,
|
|
169
|
+
expirationTime
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// --- Note ---
|
|
175
|
+
// Cache is updated with only alive experiments
|
|
176
|
+
trackingCache.add({
|
|
177
|
+
key: visitorCode,
|
|
178
|
+
data: updatedCacheData,
|
|
179
|
+
lifetime: _constants2.CACHE_ITEM_LIFETIME
|
|
180
|
+
});
|
|
181
|
+
return resultString;
|
|
182
|
+
}
|
|
129
183
|
}
|
|
130
184
|
exports.Utilities = Utilities;
|
|
131
185
|
//# sourceMappingURL=utilities.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.js","names":["_tsRes","require","_kameleoonError","_types","_targeting","_constants","_kameleoonData","Utilities","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getAssignedVariations","ok","data","targetingTree","TargetingTree","result","evaluate","variationData","validateVisitorCode","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","campaignConfiguration","unsentData","getUnsentData","map","item","url","join","trackRule","featureFlagVariation","requester","userAgent","variationId","rule","Error","dataUrl","resultVariationId","isUnallocated","callback","clearUnsentData","trackExperiment","body","parseFeatureVariable","variable","type","value","VariableType","BOOLEAN","Boolean","STRING","String","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","getUserAgent","isUserAgent","KameleoonData","UserAgent","storedTargetingData","filteredData","filter","userAgentData","undefined","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from '../kameleoonError';\nimport { ExperimentVariationsType } from '../storage';\nimport { CheckTargetingParamsType, TrackRuleParamsType } from './types';\nimport { FeatureVariableResultType, VariableType } from '../types';\nimport { TargetingTree } from '../targeting';\nimport { VISITOR_CODE_MAX_LENGTH } from './constants';\nimport {\n CampaignConfiguration,\n FeatureVariableType,\n JSONType,\n} from '../campaignConfiguration';\nimport {\n KameleoonData,\n KameleoonDataItemType,\n UserAgentDataType,\n} from '../kameleoonData';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n }: CheckTargetingParamsType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: ExperimentVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getAssignedVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = new TargetingTree(segment);\n\n const result = targetingTree.evaluate({\n targetingData: targetingData || [],\n variationData: variations,\n experimentId,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string {\n const unsentData = campaignConfiguration.getUnsentData(visitorCode);\n\n return unsentData.map((item) => item.url).join('\\n');\n }\n\n static trackRule({\n featureFlagVariation,\n campaignConfiguration,\n visitorCode,\n requester,\n userAgent,\n }: TrackRuleParamsType): void {\n const { variationId, rule } = featureFlagVariation;\n\n if (!rule) {\n throw new Error(\n 'Internal usage error, make sure to use `trackRule` for existing rule',\n );\n }\n\n const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);\n\n const resultVariationId = variationId || 0;\n const isUnallocated = !variationId;\n const callback = () => campaignConfiguration.clearUnsentData;\n\n requester.trackExperiment({\n visitorCode,\n isUnallocated,\n body: dataUrl,\n callback,\n experimentId: rule.experimentId,\n variationId: resultVariationId,\n userAgent,\n });\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static getUserAgent(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string | undefined {\n const isUserAgent = (\n data: KameleoonDataItemType,\n ): data is UserAgentDataType => data.type === KameleoonData.UserAgent;\n const targetingData =\n campaignConfiguration.storedTargetingData[visitorCode];\n\n if (targetingData) {\n const filteredData = targetingData\n .map((item) => item.data)\n .filter(isUserAgent);\n\n if (filteredData.length) {\n const [userAgentData] = filteredData;\n\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utilities.js","names":["_tsRes","require","_kameleoonError","_types","_targeting","_constants","_kameleoonData","_constants2","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","Utilities","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","conditionsData","firstLevel","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getAssignedVariations","ok","data","targetingTree","TargetingTree","result","evaluate","variationData","validateVisitorCode","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","campaignConfiguration","unsentData","getUnsentData","map","item","url","join","trackRule","featureFlagVariation","requester","userAgent","variationId","rule","Error","dataUrl","resultVariationId","isUnallocated","callback","clearUnsentData","trackExperiment","body","parseFeatureVariable","variable","type","VariableType","BOOLEAN","Boolean","STRING","NUMBER","numberValue","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","getUserAgent","isUserAgent","KameleoonData","UserAgent","storedTargetingData","filteredData","userAgentData","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Milliseconds","Second","add","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","entries","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from '../kameleoonError';\nimport { ExperimentVariationsType } from '../storage';\nimport {\n CheckTargetingParamsType,\n ManageCacheParametersType,\n TrackRuleParamsType,\n} from './types';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from '../types';\nimport { TargetingTree } from '../targeting';\nimport { VISITOR_CODE_MAX_LENGTH } from './constants';\nimport {\n CampaignConfiguration,\n FeatureVariableType,\n JSONType,\n} from '../campaignConfiguration';\nimport {\n KameleoonData,\n KameleoonDataItemType,\n UserAgentDataType,\n} from '../kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from '../constants';\nimport { CacheManager } from '../cacheManager';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n }: CheckTargetingParamsType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: ExperimentVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getAssignedVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = new TargetingTree(segment);\n\n const result = targetingTree.evaluate({\n targetingData: targetingData || [],\n variationData: variations,\n experimentId,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string {\n const unsentData = campaignConfiguration.getUnsentData(visitorCode);\n\n return unsentData.map((item) => item.url).join('\\n');\n }\n\n static trackRule({\n featureFlagVariation,\n campaignConfiguration,\n visitorCode,\n requester,\n userAgent,\n }: TrackRuleParamsType): void {\n const { variationId, rule } = featureFlagVariation;\n\n if (!rule) {\n throw new Error(\n 'Internal usage error, make sure to use `trackRule` for existing rule',\n );\n }\n\n const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);\n\n const resultVariationId = variationId || 0;\n const isUnallocated = !variationId;\n const callback = () => campaignConfiguration.clearUnsentData;\n\n requester.trackExperiment({\n visitorCode,\n isUnallocated,\n body: dataUrl,\n callback,\n experimentId: rule.experimentId,\n variationId: resultVariationId,\n userAgent,\n });\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static getUserAgent(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string | undefined {\n const isUserAgent = (\n data: KameleoonDataItemType,\n ): data is UserAgentDataType => data.type === KameleoonData.UserAgent;\n const targetingData =\n campaignConfiguration.storedTargetingData[visitorCode];\n\n if (targetingData) {\n const filteredData = targetingData\n .map((item) => item.data)\n .filter(isUserAgent);\n\n if (filteredData.length) {\n const [userAgentData] = filteredData;\n\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n}\n"],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export type UpdateStorageParamsType = {
|
|
|
12
12
|
export type FeatureFlagVariationType = {
|
|
13
13
|
variationKey: string;
|
|
14
14
|
variationId: number | null;
|
|
15
|
+
experimentId: number | null;
|
|
15
16
|
featureFlagId: number;
|
|
16
17
|
featureKey: string;
|
|
17
18
|
rule: RuleItemType | null;
|
|
@@ -22,4 +23,3 @@ export type GetFeatureFlagVariationParametersType = {
|
|
|
22
23
|
targetingData?: TargetingDataItemType[];
|
|
23
24
|
withAssignment?: boolean;
|
|
24
25
|
};
|
|
25
|
-
export type GetAssignedRuleVariationResultType = Pick<FeatureFlagVariationType, 'variationId' | 'variationKey'>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/variationConfiguration/types.ts"],"sourcesContent":["import { FeatureFlagType, RuleItemType } from '../campaignConfiguration';\nimport { TargetingDataItemType } from '../targeting';\n\nexport type VariationType = {\n variationId: number;\n assignmentDate: string;\n};\n\nexport type UpdateStorageParamsType = {\n visitorCode: string;\n experimentId: string;\n variationId: number;\n};\n\nexport type FeatureFlagVariationType = {\n variationKey: string;\n variationId: number | null;\n featureFlagId: number;\n featureKey: string;\n rule: RuleItemType | null;\n};\n\nexport type GetFeatureFlagVariationParametersType = {\n visitorCode: string;\n featureFlag: FeatureFlagType;\n targetingData?: TargetingDataItemType[];\n withAssignment?: boolean;\n};\n
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/variationConfiguration/types.ts"],"sourcesContent":["import { FeatureFlagType, RuleItemType } from '../campaignConfiguration';\nimport { TargetingDataItemType } from '../targeting';\n\nexport type VariationType = {\n variationId: number;\n assignmentDate: string;\n};\n\nexport type UpdateStorageParamsType = {\n visitorCode: string;\n experimentId: string;\n variationId: number;\n};\n\nexport type FeatureFlagVariationType = {\n variationKey: string;\n variationId: number | null;\n experimentId: number | null;\n featureFlagId: number;\n featureKey: string;\n rule: RuleItemType | null;\n};\n\nexport type GetFeatureFlagVariationParametersType = {\n visitorCode: string;\n featureFlag: FeatureFlagType;\n targetingData?: TargetingDataItemType[];\n withAssignment?: boolean;\n};\n"],"mappings":""}
|
|
@@ -31,6 +31,5 @@ export declare class VariationConfiguration implements IVariationConfiguration {
|
|
|
31
31
|
getExperimentVariation(visitorCode: string, experiment: ExperimentItemType): Result<number, KameleoonError>;
|
|
32
32
|
private assignVariation;
|
|
33
33
|
private updateStorageData;
|
|
34
|
-
private getAssignedRuleVariation;
|
|
35
34
|
}
|
|
36
35
|
export {};
|