@kameleoon/javascript-sdk-core 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/cacheManager/cacheManager.d.ts +38 -0
  2. package/dist/cacheManager/cacheManager.js +74 -0
  3. package/dist/cacheManager/cacheManager.js.map +1 -0
  4. package/dist/cacheManager/index.d.ts +2 -0
  5. package/dist/cacheManager/index.js +20 -0
  6. package/dist/cacheManager/index.js.map +1 -0
  7. package/dist/cacheManager/types.d.ts +14 -0
  8. package/dist/cacheManager/types.js +6 -0
  9. package/dist/cacheManager/types.js.map +1 -0
  10. package/dist/campaignConfiguration/campaignConfiguration.d.ts +1 -1
  11. package/dist/campaignConfiguration/campaignConfiguration.js +15 -10
  12. package/dist/campaignConfiguration/campaignConfiguration.js.map +1 -1
  13. package/dist/campaignConfiguration/constants.d.ts +3 -3
  14. package/dist/campaignConfiguration/constants.js +3 -3
  15. package/dist/campaignConfiguration/constants.js.map +1 -1
  16. package/dist/campaignConfiguration/index.d.ts +1 -0
  17. package/dist/campaignConfiguration/index.js +7 -0
  18. package/dist/campaignConfiguration/index.js.map +1 -1
  19. package/dist/campaignConfiguration/types.d.ts +4 -1
  20. package/dist/campaignConfiguration/types.js.map +1 -1
  21. package/dist/constants.d.ts +12 -1
  22. package/dist/constants.js +17 -2
  23. package/dist/constants.js.map +1 -1
  24. package/dist/hasher/hasher.d.ts +1 -1
  25. package/dist/hasher/hasher.js +7 -7
  26. package/dist/hasher/hasher.js.map +1 -1
  27. package/dist/hasher/types.d.ts +1 -1
  28. package/dist/hasher/types.js.map +1 -1
  29. package/dist/index.d.ts +2 -1
  30. package/dist/index.js +12 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/kameleoonClient.d.ts +16 -3
  33. package/dist/kameleoonClient.js +50 -3
  34. package/dist/kameleoonClient.js.map +1 -1
  35. package/dist/kameleoonError/constants.d.ts +1 -1
  36. package/dist/kameleoonError/constants.js +1 -1
  37. package/dist/kameleoonError/constants.js.map +1 -1
  38. package/dist/kameleoonError/kameleoonError.d.ts +1 -1
  39. package/dist/kameleoonError/kameleoonError.js +1 -1
  40. package/dist/kameleoonError/kameleoonError.js.map +1 -1
  41. package/dist/kameleoonError/types.d.ts +1 -1
  42. package/dist/kameleoonError/types.js +1 -1
  43. package/dist/kameleoonError/types.js.map +1 -1
  44. package/dist/requester/requester.js +3 -13
  45. package/dist/requester/requester.js.map +1 -1
  46. package/dist/types.d.ts +19 -2
  47. package/dist/types.js +9 -1
  48. package/dist/types.js.map +1 -1
  49. package/dist/utilities/types.d.ts +8 -0
  50. package/dist/utilities/types.js.map +1 -1
  51. package/dist/utilities/utilities.d.ts +5 -2
  52. package/dist/utilities/utilities.js +54 -0
  53. package/dist/utilities/utilities.js.map +1 -1
  54. package/dist/variationConfiguration/types.d.ts +1 -1
  55. package/dist/variationConfiguration/types.js.map +1 -1
  56. package/dist/variationConfiguration/variationConfiguration.d.ts +0 -1
  57. package/dist/variationConfiguration/variationConfiguration.js +70 -79
  58. package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
  59. package/package.json +1 -1
  60. package/dist/hasher/constants.d.ts +0 -1
  61. package/dist/hasher/constants.js +0 -9
  62. 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
- name,
91
+ type,
102
92
  version
103
93
  } = this.packageInfo;
104
- return _constants.URL.TRACKING + this.siteCode + _constants.UrlParameter.VisitorCode + encodeURIComponent(visitorCode) + _constants.UrlParameter.SdkName + name + _constants.UrlParameter.SdkVersion + version;
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","name","version","parsedName","split","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","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 const { name, version } = packageInfo;\n // --- Note ---\n // Name looks like this: \"@kameleoon/javascript-sdk\"\n const parsedName = name.split('/')[1].split('-')[0];\n\n this.requestDispatcher = requestDispatcher;\n this.siteCode = siteCode;\n this.environment = environment;\n this.packageInfo = { name: parsedName, version };\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 { name, version } = this.packageInfo;\n\n return (\n URL.TRACKING +\n this.siteCode +\n UrlParameter.VisitorCode +\n encodeURIComponent(visitorCode) +\n UrlParameter.SdkName +\n name +\n UrlParameter.SdkVersion +\n version\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"requester.js","names":["_tsRes","require","_kameleoonError","_constants","_nonce","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","Requester","Nonce","constructor","siteCode","environment","packageInfo","requestDispatcher","getClientConfiguration","timeStamp","environmentParam","UrlParameter","Environment","timeStampParam","Ts","requestUrl","URL","CLIENT_CONFIGURATION","UrlQuery","Mobile","response","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 {string} name - name of the package
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
- name: string;
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 {string} name - name of the package
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 {string} name - name of the package\n * @param {string} version - version of the package\n * */\nexport type ExternalPackageInfoType = {\n name: string;\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 * */\nexport type InternalSDKConfigurationType = {\n externalStorage: IExternalStorageConstructor;\n externalEventSource: IExternalEventSourceConstructor;\n externalPackageInfo: ExternalPackageInfoType;\n externalRequestDispatcher: IExternalRequestDispatcher;\n externalClientConfiguration?: GetClientConfigurationResultType;\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// TODO: js docs + re-export (MAYBE just put all of this outside and no overload will be needed)\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"],"mappings":";;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;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
+ {"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\nexport type GetAssignedRuleVariationResultType = Pick<\n FeatureFlagVariationType,\n 'variationId' | 'variationKey'\n>;\n"],"mappings":""}
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 {};