@kameleoon/javascript-sdk-core 2.4.6 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/dist/cacheManager/cacheManager.js +3 -65
  2. package/dist/cacheManager/cacheManager.js.map +1 -1
  3. package/dist/cacheManager/index.js +1 -19
  4. package/dist/cacheManager/index.js.map +1 -1
  5. package/dist/cacheManager/types.js +1 -5
  6. package/dist/campaignConfiguration/campaignConfiguration.d.ts +7 -5
  7. package/dist/campaignConfiguration/campaignConfiguration.js +9 -283
  8. package/dist/campaignConfiguration/campaignConfiguration.js.map +1 -1
  9. package/dist/campaignConfiguration/constants.d.ts +2 -10
  10. package/dist/campaignConfiguration/constants.js +2 -21
  11. package/dist/campaignConfiguration/constants.js.map +1 -1
  12. package/dist/campaignConfiguration/index.js +1 -86
  13. package/dist/campaignConfiguration/index.js.map +1 -1
  14. package/dist/campaignConfiguration/types.d.ts +7 -6
  15. package/dist/campaignConfiguration/types.js +1 -54
  16. package/dist/campaignConfiguration/types.js.map +1 -1
  17. package/dist/clientSettings/clientSettings.d.ts +1 -1
  18. package/dist/clientSettings/clientSettings.js +1 -35
  19. package/dist/clientSettings/clientSettings.js.map +1 -1
  20. package/dist/clientSettings/index.js +1 -19
  21. package/dist/clientSettings/index.js.map +1 -1
  22. package/dist/clientSettings/types.d.ts +1 -1
  23. package/dist/clientSettings/types.js +1 -5
  24. package/dist/clientSettings/types.js.map +1 -1
  25. package/dist/constants.d.ts +13 -4
  26. package/dist/constants.js +2 -36
  27. package/dist/constants.js.map +1 -1
  28. package/dist/eventSource/constants.js +1 -8
  29. package/dist/eventSource/constants.js.map +1 -1
  30. package/dist/eventSource/externalEventSource.js +1 -33
  31. package/dist/eventSource/externalEventSource.js.map +1 -1
  32. package/dist/eventSource/index.js +1 -50
  33. package/dist/eventSource/index.js.map +1 -1
  34. package/dist/eventSource/types.js +1 -5
  35. package/dist/hasher/hasher.js +6 -44
  36. package/dist/hasher/hasher.js.map +1 -1
  37. package/dist/hasher/index.js +1 -12
  38. package/dist/hasher/index.js.map +1 -1
  39. package/dist/hasher/types.d.ts +1 -1
  40. package/dist/hasher/types.js +1 -5
  41. package/dist/hasher/types.js.map +1 -1
  42. package/dist/index.d.ts +3 -3
  43. package/dist/index.js +1 -310
  44. package/dist/index.js.map +1 -1
  45. package/dist/kameleoonClient.d.ts +16 -4
  46. package/dist/kameleoonClient.js +10 -384
  47. package/dist/kameleoonClient.js.map +1 -1
  48. package/dist/kameleoonData/browser.d.ts +8 -3
  49. package/dist/kameleoonData/browser.js +9 -40
  50. package/dist/kameleoonData/browser.js.map +1 -1
  51. package/dist/kameleoonData/conversion.d.ts +2 -2
  52. package/dist/kameleoonData/conversion.js +5 -50
  53. package/dist/kameleoonData/conversion.js.map +1 -1
  54. package/dist/kameleoonData/customData.d.ts +2 -2
  55. package/dist/kameleoonData/customData.js +5 -55
  56. package/dist/kameleoonData/customData.js.map +1 -1
  57. package/dist/kameleoonData/device.d.ts +2 -2
  58. package/dist/kameleoonData/device.js +5 -40
  59. package/dist/kameleoonData/device.js.map +1 -1
  60. package/dist/kameleoonData/index.d.ts +1 -1
  61. package/dist/kameleoonData/index.js +1 -102
  62. package/dist/kameleoonData/index.js.map +1 -1
  63. package/dist/kameleoonData/pageView.d.ts +2 -2
  64. package/dist/kameleoonData/pageView.js +5 -56
  65. package/dist/kameleoonData/pageView.js.map +1 -1
  66. package/dist/kameleoonData/types.d.ts +44 -27
  67. package/dist/kameleoonData/types.js +6 -42
  68. package/dist/kameleoonData/types.js.map +1 -1
  69. package/dist/kameleoonData/userAgent.d.ts +2 -2
  70. package/dist/kameleoonData/userAgent.js +4 -37
  71. package/dist/kameleoonData/userAgent.js.map +1 -1
  72. package/dist/kameleoonError/constants.d.ts +4 -2
  73. package/dist/kameleoonError/constants.js +1 -31
  74. package/dist/kameleoonError/constants.js.map +1 -1
  75. package/dist/kameleoonError/helpers.js +1 -9
  76. package/dist/kameleoonError/helpers.js.map +1 -1
  77. package/dist/kameleoonError/index.js +1 -26
  78. package/dist/kameleoonError/index.js.map +1 -1
  79. package/dist/kameleoonError/kameleoonError.d.ts +3 -3
  80. package/dist/kameleoonError/kameleoonError.js +2 -75
  81. package/dist/kameleoonError/kameleoonError.js.map +1 -1
  82. package/dist/kameleoonError/types.d.ts +2 -0
  83. package/dist/kameleoonError/types.js +1 -31
  84. package/dist/kameleoonError/types.js.map +1 -1
  85. package/dist/kameleoonUtils.js +2 -44
  86. package/dist/kameleoonUtils.js.map +1 -1
  87. package/dist/requester/constants.js +4 -73
  88. package/dist/requester/constants.js.map +1 -1
  89. package/dist/requester/index.js +1 -80
  90. package/dist/requester/index.js.map +1 -1
  91. package/dist/requester/requester.d.ts +4 -5
  92. package/dist/requester/requester.js +1 -106
  93. package/dist/requester/requester.js.map +1 -1
  94. package/dist/requester/types.d.ts +8 -7
  95. package/dist/requester/types.js +1 -16
  96. package/dist/requester/types.js.map +1 -1
  97. package/dist/storage/constants.js +2 -15
  98. package/dist/storage/constants.js.map +1 -1
  99. package/dist/storage/externalStorage.d.ts +1 -1
  100. package/dist/storage/externalStorage.js +1 -40
  101. package/dist/storage/externalStorage.js.map +1 -1
  102. package/dist/storage/index.js +1 -56
  103. package/dist/storage/index.js.map +1 -1
  104. package/dist/storage/types.d.ts +4 -4
  105. package/dist/storage/types.js +1 -5
  106. package/dist/storage/types.js.map +1 -1
  107. package/dist/targeting/conditions/browserCondition.d.ts +13 -0
  108. package/dist/targeting/conditions/browserCondition.js +2 -0
  109. package/dist/targeting/conditions/browserCondition.js.map +1 -0
  110. package/dist/targeting/conditions/conditionFactory.d.ts +1 -1
  111. package/dist/targeting/conditions/conditionFactory.js +1 -30
  112. package/dist/targeting/conditions/conditionFactory.js.map +1 -1
  113. package/dist/targeting/conditions/conversionCondition.d.ts +10 -0
  114. package/dist/targeting/conditions/conversionCondition.js +4 -0
  115. package/dist/targeting/conditions/conversionCondition.js.map +1 -0
  116. package/dist/targeting/conditions/customDataCondition.d.ts +5 -7
  117. package/dist/targeting/conditions/customDataCondition.js +7 -114
  118. package/dist/targeting/conditions/customDataCondition.js.map +1 -1
  119. package/dist/targeting/conditions/deviceCondition.d.ts +9 -0
  120. package/dist/targeting/conditions/deviceCondition.js +2 -0
  121. package/dist/targeting/conditions/deviceCondition.js.map +1 -0
  122. package/dist/targeting/conditions/exclusiveExperimentCondition.d.ts +3 -5
  123. package/dist/targeting/conditions/exclusiveExperimentCondition.js +1 -32
  124. package/dist/targeting/conditions/exclusiveExperimentCondition.js.map +1 -1
  125. package/dist/targeting/conditions/index.d.ts +7 -0
  126. package/dist/targeting/conditions/index.js +1 -46
  127. package/dist/targeting/conditions/index.js.map +1 -1
  128. package/dist/targeting/conditions/pageTitleCondition.d.ts +11 -0
  129. package/dist/targeting/conditions/pageTitleCondition.js +2 -0
  130. package/dist/targeting/conditions/pageTitleCondition.js.map +1 -0
  131. package/dist/targeting/conditions/pageUrlCondition.d.ts +11 -0
  132. package/dist/targeting/conditions/pageUrlCondition.js +2 -0
  133. package/dist/targeting/conditions/pageUrlCondition.js.map +1 -0
  134. package/dist/targeting/conditions/sdkLanguageCondition.d.ts +15 -0
  135. package/dist/targeting/conditions/sdkLanguageCondition.js +2 -0
  136. package/dist/targeting/conditions/sdkLanguageCondition.js.map +1 -0
  137. package/dist/targeting/conditions/targetExperimentCondition.d.ts +3 -4
  138. package/dist/targeting/conditions/targetExperimentCondition.js +1 -63
  139. package/dist/targeting/conditions/targetExperimentCondition.js.map +1 -1
  140. package/dist/targeting/conditions/types.d.ts +25 -6
  141. package/dist/targeting/conditions/types.js +1 -5
  142. package/dist/targeting/conditions/types.js.map +1 -1
  143. package/dist/targeting/conditions/visitorCodeCondition.d.ts +11 -0
  144. package/dist/targeting/conditions/visitorCodeCondition.js +2 -0
  145. package/dist/targeting/conditions/visitorCodeCondition.js.map +1 -0
  146. package/dist/targeting/index.d.ts +2 -2
  147. package/dist/targeting/index.js +1 -80
  148. package/dist/targeting/index.js.map +1 -1
  149. package/dist/targeting/targetingNode.d.ts +3 -1
  150. package/dist/targeting/targetingNode.js +1 -47
  151. package/dist/targeting/targetingNode.js.map +1 -1
  152. package/dist/targeting/targetingTree.d.ts +3 -1
  153. package/dist/targeting/targetingTree.js +34 -135
  154. package/dist/targeting/targetingTree.js.map +1 -1
  155. package/dist/targeting/types.d.ts +24 -9
  156. package/dist/targeting/types.js +1 -100
  157. package/dist/targeting/types.js.map +1 -1
  158. package/dist/types.d.ts +9 -4
  159. package/dist/types.js +12 -41
  160. package/dist/types.js.map +1 -1
  161. package/dist/utilities/constants.d.ts +1 -0
  162. package/dist/utilities/constants.js +1 -8
  163. package/dist/utilities/constants.js.map +1 -1
  164. package/dist/utilities/index.d.ts +1 -0
  165. package/dist/utilities/index.js +1 -12
  166. package/dist/utilities/index.js.map +1 -1
  167. package/dist/utilities/types.d.ts +14 -7
  168. package/dist/utilities/types.js +1 -5
  169. package/dist/utilities/types.js.map +1 -1
  170. package/dist/utilities/utilities.d.ts +12 -8
  171. package/dist/utilities/utilities.js +1 -216
  172. package/dist/utilities/utilities.js.map +1 -1
  173. package/dist/variationConfiguration/index.js +1 -25
  174. package/dist/variationConfiguration/index.js.map +1 -1
  175. package/dist/variationConfiguration/types.d.ts +5 -3
  176. package/dist/variationConfiguration/types.js +1 -5
  177. package/dist/variationConfiguration/types.js.map +1 -1
  178. package/dist/variationConfiguration/variation.d.ts +1 -1
  179. package/dist/variationConfiguration/variation.js +6 -44
  180. package/dist/variationConfiguration/variation.js.map +1 -1
  181. package/dist/variationConfiguration/variationConfiguration.d.ts +4 -4
  182. package/dist/variationConfiguration/variationConfiguration.js +65 -290
  183. package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
  184. package/package.json +1 -1
  185. package/dist/kameleoonData/constants.d.ts +0 -1
  186. package/dist/kameleoonData/constants.js +0 -9
  187. package/dist/kameleoonData/constants.js.map +0 -1
  188. package/dist/kameleoonData/nonce.d.ts +0 -5
  189. package/dist/kameleoonData/nonce.js +0 -32
  190. package/dist/kameleoonData/nonce.js.map +0 -1
package/dist/types.js CHANGED
@@ -1,10 +1,4 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.VariableType = exports.Milliseconds = exports.Environment = void 0;
7
- /**
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VariableType=exports.Milliseconds=exports.Environment=void 0;/**
8
2
  * @param {number} updateInterval - update interval in _minutes_ for sdk configuration, minimum value is 1 minute
9
3
  * @defaultvalue 60
10
4
  *
@@ -17,52 +11,29 @@ exports.VariableType = exports.Milliseconds = exports.Environment = void 0;
17
11
  * - JavaScript SDK: `undefined` (no cleanup)
18
12
  * - React/React Native SDK: `undefined` (no cleanup)
19
13
  * - NodeJS SDK: `30`
20
- * */
21
- /**
14
+ * */ /**
22
15
  * @param {string} siteCode - client's siteCode defined on Kameleoon platform
23
16
  * @param {Partial<SDKConfigurationType>} configuration - client's configuration
24
17
  * @param {InternalSDKConfigurationType} internalConfiguration - internal configuration for sdk core to be initialized with certain parameters to certain type of JavaScript SDK
25
- * */
26
- /**
27
- * @param {SDKType} type - type of the SDK
18
+ * */ /**
19
+ * @param {SdkLanguageType} type - type of the SDK
28
20
  * @param {string} version - version of the package
29
- * */
30
- /**
21
+ * */ /**
31
22
  * @param {IExternalStorage | undefined} externalStorage - external file system storage implemented outside client initialization
32
23
  * @param {IExternalEventSourceConstructor | undefined} externalEventSource - constructor for building external event source implementation
33
24
  * @param {ExternalPackageInfoType} externalPackageInfo - external package info, used to get package version and name
34
25
  * @param {GetClientConfigurationResultType} externalClientConfiguration - external fetched client configuration
35
26
  * @param {IExternalRequestDispatcher} externalRequestDispatcher - external request dispatcher, used to track data or get data
36
27
  * @param {number} targetingDataCleanupInterval - interval in *minutes* for cleaning up targeting data, minimum value is 1 minute
37
- * */
38
- /**
28
+ * */ /**
39
29
  * @readonly
40
30
  * @enum {string} an Enum containing all possible variants of environment, passed as an argument to KameleoonClient `configuration`s `environment` field
41
- * */
42
- let Environment = /*#__PURE__*/function (Environment) {
43
- Environment["Production"] = "production";
44
- Environment["Staging"] = "staging";
45
- Environment["Development"] = "development";
46
- return Environment;
47
- }({});
48
- /**
31
+ * */var Environment=/*#__PURE__*/function(a){return a.Production="production",a.Staging="staging",a.Development="development",a}({});/**
49
32
  * @readonly
50
33
  * @enum {string} an Enum containing all possible variants of feature variable types
51
- * */
52
- exports.Environment = Environment;
53
- let VariableType = /*#__PURE__*/function (VariableType) {
54
- VariableType["BOOLEAN"] = "BOOLEAN";
55
- VariableType["NUMBER"] = "NUMBER";
56
- VariableType["STRING"] = "STRING";
57
- VariableType["JSON"] = "JSON";
58
- return VariableType;
59
- }({});
60
- exports.VariableType = VariableType;
61
- let Milliseconds = function (Milliseconds) {
62
- Milliseconds[Milliseconds["Second"] = 1000] = "Second";
63
- Milliseconds[Milliseconds["Minute"] = 60 * Milliseconds.Second] = "Minute";
64
- Milliseconds[Milliseconds["Hour"] = 60 * Milliseconds.Minute] = "Hour";
65
- return Milliseconds;
66
- }({});
67
- exports.Milliseconds = Milliseconds;
34
+ * */exports.Environment=Environment;var VariableType=/*#__PURE__*/function(a){return a.BOOLEAN="BOOLEAN",a.NUMBER="NUMBER",a.STRING="STRING",a.JSON="JSON",a}({});exports.VariableType=VariableType;var Milliseconds=function(a){return a[a.Second=1000]="Second",a[a.Minute=60*a.Second]="Minute",a[a.Hour=60*a.Minute]="Hour",a}({});/**
35
+ * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters
36
+ * @param {number} goalId - an id of a goal to track
37
+ * @param {number | undefined} revenue - an optional parameter for revenue, default value is `0`
38
+ * */exports.Milliseconds=Milliseconds;
68
39
  //# sourceMappingURL=types.js.map
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 { 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};\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;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","Production","Staging","Development","exports","VariableType","BOOLEAN","NUMBER","STRING","JSON","Milliseconds","Second","Minute","Hour"],"sources":["../src/types.ts"],"sourcesContent":["import { IncomingMessage, ServerResponse } from 'http';\nimport { JSONType } from './campaignConfiguration/types';\nimport { SdkLanguageType } 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 {SdkLanguageType} type - type of the SDK\n * @param {string} version - version of the package\n * */\nexport type ExternalPackageInfoType = {\n type: SdkLanguageType;\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};\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\n/**\n * @param {string} visitorCode - unique visitor identifier, shouldn't exceed 255 characters\n * @param {number} goalId - an id of a goal to track\n * @param {number | undefined} revenue - an optional parameter for revenue, default value is `0`\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":"yIAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAbA,CAoBA;AACA;AACA;AACA;AACA,KAJA,CAWA;AACA;AACA;AACA,KAHA,CASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAPA,CAgBA;AACA;AACA;AACA,KAHA,GAIY,CAAAA,WAAW,uBAAXA,CAAW,QAAX,CAAAA,CAAW,CAAAC,UAAA,cAAXD,CAAW,CAAAE,OAAA,WAAXF,CAAW,CAAAG,WAAA,eAAXH,CAAW,MAMvB;AACA;AACA;AACA,KAHAI,OAAA,CAAAJ,WAAA,CAAAA,WAAA,IAIY,CAAAK,YAAY,uBAAZA,CAAY,QAAZ,CAAAA,CAAY,CAAAC,OAAA,WAAZD,CAAY,CAAAE,MAAA,UAAZF,CAAY,CAAAG,MAAA,UAAZH,CAAY,CAAAI,IAAA,QAAZJ,CAAY,MAAAD,OAAA,CAAAC,YAAA,CAAAA,YAAA,IAwBZ,CAAAK,YAAY,UAAZA,CAAY,QAAZ,CAAAA,CAAY,CAAZA,CAAY,CAAAC,MAAA,gBAAZD,CAAY,CAAZA,CAAY,CAAAE,MAAA,CAEb,EAAE,CAAGF,CAAY,CAACC,MAAM,WAFvBD,CAAY,CAAZA,CAAY,CAAAG,IAAA,CAGf,EAAE,CAAGH,CAAY,CAACE,MAAM,SAHrBF,CAAY,MAMxB;AACA;AACA;AACA;AACA,KAJAN,OAAA,CAAAM,YAAA,CAAAA,YAAA"}
@@ -1 +1,2 @@
1
1
  export declare const VISITOR_CODE_MAX_LENGTH = 255;
2
+ export declare const HEX_CHARACTERS = "0123456789ABCDEF";
@@ -1,9 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.VISITOR_CODE_MAX_LENGTH = void 0;
7
- const VISITOR_CODE_MAX_LENGTH = 255;
8
- exports.VISITOR_CODE_MAX_LENGTH = VISITOR_CODE_MAX_LENGTH;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VISITOR_CODE_MAX_LENGTH=exports.HEX_CHARACTERS=void 0;var VISITOR_CODE_MAX_LENGTH=255;exports.VISITOR_CODE_MAX_LENGTH=255;var HEX_CHARACTERS="0123456789ABCDEF";exports.HEX_CHARACTERS="0123456789ABCDEF";
9
2
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["VISITOR_CODE_MAX_LENGTH","exports"],"sources":["../../src/utilities/constants.ts"],"sourcesContent":["export const VISITOR_CODE_MAX_LENGTH = 255;\n"],"mappings":";;;;;;AAAO,MAAMA,uBAAuB,GAAG,GAAG;AAACC,OAAA,CAAAD,uBAAA,GAAAA,uBAAA"}
1
+ {"version":3,"file":"constants.js","names":["VISITOR_CODE_MAX_LENGTH","exports","HEX_CHARACTERS"],"sources":["../../src/utilities/constants.ts"],"sourcesContent":["export const VISITOR_CODE_MAX_LENGTH = 255;\nexport const HEX_CHARACTERS = '0123456789ABCDEF';\n"],"mappings":"kIAAO,GAAM,CAAAA,uBAAuB,CAAG,GAAG,CAACC,OAAA,CAAAD,uBAAA,KACpC,GAAM,CAAAE,cAAc,CAAG,kBAAkB,CAACD,OAAA,CAAAC,cAAA"}
@@ -1 +1,2 @@
1
1
  export { Utilities } from './utilities';
2
+ export { HEX_CHARACTERS } from './constants';
@@ -1,13 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "Utilities", {
7
- enumerable: true,
8
- get: function () {
9
- return _utilities.Utilities;
10
- }
11
- });
12
- var _utilities = require("./utilities");
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"HEX_CHARACTERS",{enumerable:!0,get:function get(){return _constants.HEX_CHARACTERS}}),Object.defineProperty(exports,"Utilities",{enumerable:!0,get:function get(){return _utilities.Utilities}});var _utilities=require("./utilities"),_constants=require("./constants");
13
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_utilities","require"],"sources":["../../src/utilities/index.ts"],"sourcesContent":["export { Utilities } from './utilities';\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/utilities/index.ts"],"sourcesContent":["export { Utilities } from './utilities';\nexport { HEX_CHARACTERS } from './constants';\n"],"mappings":""}
@@ -1,14 +1,16 @@
1
- import { CacheManager } from '../cacheManager';
2
- import { CampaignConfiguration } from '../campaignConfiguration';
3
- import { Requester } from '../requester';
4
- import { SegmentType, TargetingDataItemType } from '../targeting';
5
- import { TrackingCacheItemType } from '../types';
6
- import { VariationConfiguration, FeatureFlagVariationType } from '../variationConfiguration';
1
+ import { CacheManager } from 'src/cacheManager';
2
+ import { CampaignConfiguration } from 'src/campaignConfiguration';
3
+ import { KameleoonVisitorDataType } from 'src/kameleoonData/types';
4
+ import { Requester } from 'src/requester';
5
+ import { SegmentType } from 'src/targeting';
6
+ import { ExternalPackageInfoType, TrackingCacheItemType } from 'src/types';
7
+ import { VariationConfiguration, FeatureFlagVariationType } from 'src/variationConfiguration';
7
8
  export type CheckTargetingParamsType = {
8
9
  segment: SegmentType | null;
9
10
  experimentId: number | null;
10
11
  visitorCode: string;
11
- targetingData?: TargetingDataItemType[];
12
+ packageInfo: ExternalPackageInfoType;
13
+ targetingData: KameleoonVisitorDataType;
12
14
  variationConfiguration?: VariationConfiguration;
13
15
  };
14
16
  export type TrackRuleParamsType = {
@@ -24,3 +26,8 @@ export type ManageCacheParametersType = {
24
26
  experimentId: number;
25
27
  variationId: number;
26
28
  };
29
+ export type TrackDataParametersType = {
30
+ visitorCode: string;
31
+ campaignConfiguration: CampaignConfiguration;
32
+ requester: Requester;
33
+ };
@@ -1,6 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});
6
2
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
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
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/utilities/types.ts"],"sourcesContent":["import { CacheManager } from 'src/cacheManager';\nimport { CampaignConfiguration } from 'src/campaignConfiguration';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { Requester } from 'src/requester';\nimport { SegmentType } from 'src/targeting';\nimport { ExternalPackageInfoType, TrackingCacheItemType } from 'src/types';\nimport {\n VariationConfiguration,\n FeatureFlagVariationType,\n} from 'src/variationConfiguration';\n\nexport type CheckTargetingParamsType = {\n segment: SegmentType | null;\n experimentId: number | null;\n visitorCode: string;\n packageInfo: ExternalPackageInfoType;\n targetingData: KameleoonVisitorDataType;\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\nexport type TrackDataParametersType = {\n visitorCode: string;\n campaignConfiguration: CampaignConfiguration;\n requester: Requester;\n};\n"],"mappings":""}
@@ -1,19 +1,23 @@
1
1
  import { Result } from 'ts-res';
2
- import { KameleoonError } from '../kameleoonError';
3
- import { CheckTargetingParamsType, ManageCacheParametersType, TrackRuleParamsType } from './types';
4
- import { FeatureVariableResultType, TrackingCacheItemType } from '../types';
5
- import { CampaignConfiguration, FeatureVariableType } from '../campaignConfiguration';
6
- import { KameleoonDataType } from '../kameleoonData';
7
- import { CacheManager } from '../cacheManager';
8
- import { GetVisitorDataResultType } from '../requester';
2
+ import { KameleoonError } from 'src/kameleoonError';
3
+ import { FeatureVariableResultType, TrackingCacheItemType } from 'src/types';
4
+ import { CampaignConfiguration, FeatureVariableType } from 'src/campaignConfiguration';
5
+ import { CustomData, KameleoonDataType } from 'src/kameleoonData';
6
+ import { CacheManager } from 'src/cacheManager';
7
+ import { GetVisitorDataResultType } from 'src/requester';
8
+ import { CheckTargetingParamsType, ManageCacheParametersType, TrackDataParametersType, TrackRuleParamsType } from './types';
9
9
  export declare class Utilities {
10
- static checkTargeting({ segment, visitorCode, targetingData, experimentId, variationConfiguration, }: CheckTargetingParamsType): Result<boolean, KameleoonError>;
10
+ static checkTargeting({ segment, visitorCode, targetingData, experimentId, variationConfiguration, packageInfo, }: CheckTargetingParamsType): Result<boolean, KameleoonError>;
11
11
  static validateVisitorCode(visitorCode: string): Result<void, KameleoonError>;
12
12
  static getDataUrl(visitorCode: string, campaignConfiguration: CampaignConfiguration): string;
13
13
  static trackRule({ featureFlagVariation, campaignConfiguration, visitorCode, requester, userAgent, }: TrackRuleParamsType): void;
14
14
  static parseFeatureVariable(variable: FeatureVariableType): Result<FeatureVariableResultType, KameleoonError>;
15
15
  static parseVisitorData(data: GetVisitorDataResultType): KameleoonDataType[];
16
+ static parseRegExp(value: string): RegExp;
16
17
  static getUserAgent(visitorCode: string, campaignConfiguration: CampaignConfiguration): string | undefined;
18
+ static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData;
17
19
  static updateCache({ cacheManager, visitorCode, experimentId, variationId, }: ManageCacheParametersType): void;
18
20
  static getTrackingCode(trackingCache: CacheManager<TrackingCacheItemType>, visitorCode: string): string;
21
+ static trackData({ visitorCode, campaignConfiguration, requester, }: TrackDataParametersType): void;
22
+ static getNonce(): string;
19
23
  }
@@ -1,217 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Utilities = void 0;
7
- var _tsRes = require("ts-res");
8
- var _kameleoonError = require("../kameleoonError");
9
- var _types = require("../types");
10
- var _targeting = require("../targeting");
11
- var _constants = require("./constants");
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); }
19
- class Utilities {
20
- static checkTargeting({
21
- segment,
22
- visitorCode,
23
- targetingData,
24
- experimentId,
25
- variationConfiguration
26
- }) {
27
- if (!segment || !segment.conditionsData.firstLevel.length) {
28
- return (0, _tsRes.Ok)(true);
29
- }
30
- if (!variationConfiguration) {
31
- return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));
32
- }
33
- let variations = {};
34
- const assignedVariationsResult = variationConfiguration.getAssignedVariations(visitorCode);
35
- if (assignedVariationsResult.ok) {
36
- variations = assignedVariationsResult.data;
37
- }
38
- const targetingTree = new _targeting.TargetingTree(segment);
39
- const result = targetingTree.evaluate({
40
- targetingData: targetingData || [],
41
- variationData: variations,
42
- experimentId
43
- });
44
- return result;
45
- }
46
- static validateVisitorCode(visitorCode) {
47
- if (visitorCode.length === 0) {
48
- return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeEmpty));
49
- }
50
- if (visitorCode.length > _constants.VISITOR_CODE_MAX_LENGTH) {
51
- return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeMaxLength));
52
- }
53
- return (0, _tsRes.Ok)();
54
- }
55
- static getDataUrl(visitorCode, campaignConfiguration) {
56
- const unsentData = campaignConfiguration.getUnsentData(visitorCode);
57
- return unsentData.map(item => item.url).join('\n');
58
- }
59
- static trackRule({
60
- featureFlagVariation,
61
- campaignConfiguration,
62
- visitorCode,
63
- requester,
64
- userAgent
65
- }) {
66
- const {
67
- variationId,
68
- rule
69
- } = featureFlagVariation;
70
- const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);
71
- const resultVariationId = variationId || 0;
72
- const isUnallocated = variationId === null;
73
- // --- Note ---
74
- // Experiment id is not needed for unallocated visitors
75
- // So we just use 0 as a fallback
76
- const experimentId = rule ? rule.experimentId : 0;
77
- const callback = () => campaignConfiguration.clearUnsentData;
78
- requester.trackExperiment({
79
- visitorCode,
80
- isUnallocated,
81
- body: dataUrl,
82
- callback,
83
- experimentId,
84
- variationId: resultVariationId,
85
- userAgent
86
- });
87
- }
88
- static parseFeatureVariable(variable) {
89
- const {
90
- type,
91
- value
92
- } = variable;
93
- switch (type) {
94
- case _types.VariableType.BOOLEAN:
95
- return (0, _tsRes.Ok)({
96
- type,
97
- value: Boolean(value)
98
- });
99
- case _types.VariableType.STRING:
100
- return (0, _tsRes.Ok)({
101
- type,
102
- value: String(value)
103
- });
104
- case _types.VariableType.NUMBER:
105
- const numberValue = Number(value);
106
- if (Number.isNaN(numberValue)) {
107
- return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NumberParse, String(value)));
108
- }
109
- return (0, _tsRes.Ok)({
110
- type,
111
- value: numberValue
112
- });
113
- case _types.VariableType.JSON:
114
- try {
115
- const jsonValue = JSON.parse(String(variable.value));
116
- return (0, _tsRes.Ok)({
117
- type,
118
- value: jsonValue
119
- });
120
- } catch (err) {
121
- return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.JSONParse, err));
122
- }
123
- default:
124
- (0, _kameleoonError.exhaustCheck)(type);
125
- }
126
- }
127
- static parseVisitorData(data) {
128
- const {
129
- currentVisit,
130
- previousVisits
131
- } = data;
132
- let visits;
133
- if (currentVisit) {
134
- visits = [currentVisit];
135
- } else if (previousVisits) {
136
- visits = previousVisits;
137
- }
138
- if (!visits) {
139
- return [];
140
- }
141
- const indexMap = new Map();
142
- const resultData = [];
143
- const customDataEvents = [...visits[0].customDataEvents];
144
- customDataEvents.sort((a, b) => b.time - a.time);
145
- for (const customDataEvent of customDataEvents) {
146
- const customDataIndex = customDataEvent.data.index;
147
- if (!indexMap.has(customDataIndex)) {
148
- indexMap.set(customDataIndex, true);
149
- const values = Object.keys(customDataEvent.data.valuesCountMap);
150
- resultData.push(new _kameleoonData.CustomData(customDataIndex, ...values));
151
- }
152
- }
153
- return resultData;
154
- }
155
- static getUserAgent(visitorCode, campaignConfiguration) {
156
- const isUserAgent = data => data.type === _kameleoonData.KameleoonData.UserAgent;
157
- const targetingData = campaignConfiguration.storedTargetingData[visitorCode];
158
- if (targetingData) {
159
- const filteredData = targetingData.map(item => item.data).filter(isUserAgent);
160
- if (filteredData.length) {
161
- const [userAgentData] = filteredData;
162
- return userAgentData.value;
163
- }
164
- }
165
- return undefined;
166
- }
167
- static updateCache({
168
- cacheManager,
169
- visitorCode,
170
- experimentId,
171
- variationId
172
- }) {
173
- const cacheData = cacheManager.getAliveItem(visitorCode);
174
- const newCacheData = cacheData ? _objectSpread({}, cacheData) : {};
175
- newCacheData[experimentId] = {
176
- variationId,
177
- expirationTime: Date.now() + _constants2.CACHE_ITEM_LIFETIME * _types.Milliseconds.Second
178
- };
179
- cacheManager.add({
180
- key: visitorCode,
181
- data: newCacheData,
182
- lifetime: _constants2.CACHE_ITEM_LIFETIME
183
- });
184
- }
185
- static getTrackingCode(trackingCache, visitorCode) {
186
- let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';
187
- const cacheData = trackingCache.getAliveItem(visitorCode);
188
- if (!cacheData) {
189
- return resultString;
190
- }
191
- const updatedCacheData = {};
192
- Object.entries(cacheData).forEach(([experimentId, {
193
- variationId,
194
- expirationTime
195
- }]) => {
196
- if (expirationTime > Date.now()) {
197
- resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;
198
- resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;
199
- updatedCacheData[Number(experimentId)] = {
200
- variationId,
201
- expirationTime
202
- };
203
- }
204
- });
205
-
206
- // --- Note ---
207
- // Cache is updated with only alive experiments
208
- trackingCache.add({
209
- key: visitorCode,
210
- data: updatedCacheData,
211
- lifetime: _constants2.CACHE_ITEM_LIFETIME
212
- });
213
- return resultString;
214
- }
215
- }
216
- exports.Utilities = Utilities;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Utilities=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_types=require("../types"),_targeting=require("../targeting"),_kameleoonData=require("../kameleoonData"),_constants=require("../constants"),_constants2=require("./constants");function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_unsupportedIterableToArray(a,b)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArrayLimit(a,b){var c=null==a?null:"undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=c){var d,e,f,g,h=[],i=!0,j=!1;try{if(f=(c=c.call(a)).next,0===b){if(Object(c)!==c)return;i=!1}else for(;!(i=(d=f.call(c)).done)&&(h.push(d.value),h.length!==b);i=!0);}catch(a){j=!0,e=a}finally{try{if(!i&&null!=c.return&&(g=c.return(),Object(g)!==g))return}finally{if(j)throw e}}return h}}function _arrayWithHoles(a){if(Array.isArray(a))return a}function _construct(){return _construct=_isNativeReflectConstruct()?Reflect.construct.bind():function(b,c,d){var e=[null];e.push.apply(e,c);var a=Function.bind.apply(b,e),f=new a;return d&&_setPrototypeOf(f,d.prototype),f},_construct.apply(null,arguments)}function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(a){return!1}}function _setPrototypeOf(a,b){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(a,b){return a.__proto__=b,a},_setPrototypeOf(a,b)}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c.return||c.return()}finally{if(h)throw f}}}}function _toConsumableArray(a){return _arrayWithoutHoles(a)||_iterableToArray(a)||_unsupportedIterableToArray(a)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _iterableToArray(a){if("undefined"!=typeof Symbol&&null!=a[Symbol.iterator]||null!=a["@@iterator"])return Array.from(a)}function _arrayWithoutHoles(a){if(Array.isArray(a))return _arrayLikeToArray(a)}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var Utilities=/*#__PURE__*/function(){function a(){_classCallCheck(this,a)}return _createClass(a,null,[{key:"checkTargeting",value:function checkTargeting(a){var b=a.segment,c=a.visitorCode,d=a.targetingData,e=a.experimentId,f=a.variationConfiguration,g=a.packageInfo;if(!b||!b.conditionsData.firstLevel.length)return(0,_tsRes.Ok)(!0);if(!f)return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));var h={},i=f.getAssignedVariations(c);i.ok&&(h=i.data);var j=new _targeting.TargetingTree(b),k=j.evaluate({variationData:h,sdkInfo:g,targetingData:d,experimentId:e,visitorCode:c});return k}},{key:"validateVisitorCode",value:function validateVisitorCode(a){return 0===a.length?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeEmpty)):a.length>_constants2.VISITOR_CODE_MAX_LENGTH?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeMaxLength)):(0,_tsRes.Ok)()}},{key:"getDataUrl",value:function getDataUrl(a,b){var c=b.getUnsentData(a);return c.map(function(a){return a.url}).join("\n")}},{key:"trackRule",value:function trackRule(a){var b=a.featureFlagVariation,c=a.campaignConfiguration,d=a.visitorCode,e=a.requester,f=a.userAgent,g=b.variationId,h=b.rule,i=this.getDataUrl(d,c),j=h?h.experimentId:0;e.trackExperiment({visitorCode:d,isUnallocated:null===g,body:i,callback:function callback(){c.clearUnsentData(d)},experimentId:j,variationId:g||0,userAgent:f})}},{key:"parseFeatureVariable",value:function parseFeatureVariable(a){var b=a.type,c=a.value;switch(b){case _types.VariableType.BOOLEAN:return(0,_tsRes.Ok)({type:b,value:!!c});case _types.VariableType.STRING:return(0,_tsRes.Ok)({type:b,value:c+""});case _types.VariableType.NUMBER:var d=+c;return Number.isNaN(d)?(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NumberParse,c+"")):(0,_tsRes.Ok)({type:b,value:d});case _types.VariableType.JSON:try{var e=JSON.parse(a.value+"");return(0,_tsRes.Ok)({type:b,value:e})}catch(a){return(0,_tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.JSONParse,a))}default:(0,_kameleoonError.exhaustCheck)(b);}}},{key:"parseVisitorData",value:function parseVisitorData(a){var b,c=a.currentVisit,d=a.previousVisits;if(c?b=[c]:d&&(b=d),!b)return[];var e=new Map,f=[],g=_toConsumableArray(b[0].customDataEvents);g.sort(function(c,a){return a.time-c.time});var h,i=_createForOfIteratorHelper(g);try{for(i.s();!(h=i.n()).done;){var j=h.value,k=j.data.index;if(!e.has(k)){e.set(k,!0);var l=Object.keys(j.data.valuesCountMap);f.push(_construct(_kameleoonData.CustomData,[k].concat(l)))}}}catch(a){i.e(a)}finally{i.f()}return f}},{key:"parseRegExp",value:function parseRegExp(a){if("/"===a[0]){var b=a.split("/"),c=_slicedToArray(b,3),d=c[0],e=c[1],f=c[2];return new RegExp(e,f)}return new RegExp(a)}},{key:"getUserAgent",value:function getUserAgent(a,b){var c=b.storedTargetingData[a];if(c){var d=c[_kameleoonData.KameleoonData.UserAgent];if(d)return d.value}}},{key:"isCustomData",value:function isCustomData(a){return a.data.type===_kameleoonData.KameleoonData.CustomData}},{key:"updateCache",value:function updateCache(a){var b=a.cacheManager,c=a.visitorCode,d=a.experimentId,e=a.variationId,f=b.getAliveItem(c),g=f?_objectSpread({},f):{};g[d]={variationId:e,expirationTime:Date.now()+_constants.CACHE_ITEM_LIFETIME*_types.Milliseconds.Second},b.add({key:c,data:g,lifetime:_constants.CACHE_ITEM_LIFETIME})}},{key:"getTrackingCode",value:function getTrackingCode(a,b){var c="window.kameleoonQueue=window.kameleoonQueue||[];",d=a.getAliveItem(b);if(!d)return c;var e={};return Object.entries(d).forEach(function(a){var b=_slicedToArray(a,2),d=b[0],f=b[1],g=f.variationId,h=f.expirationTime;h>Date.now()&&(c+="window.kameleoonQueue.push(['Experiments.assignVariation',".concat(d,",").concat(g,"]);"),c+="window.kameleoonQueue.push(['Experiments.trigger',".concat(d,",true]);"),e[+d]={variationId:g,expirationTime:h})}),a.add({key:b,data:e,lifetime:_constants.CACHE_ITEM_LIFETIME}),c}},{key:"trackData",value:function trackData(a){var b=a.visitorCode,c=a.campaignConfiguration,d=a.requester,e=this.getDataUrl(b,c),f=this.getUserAgent(b,c);d.trackData({visitorCode:b,body:e,userAgent:f,callback:function callback(){c.clearUnsentData(b)}})}},{key:"getNonce",value:function getNonce(){for(var a,b=_constants2.HEX_CHARACTERS.length,c="",d=0;d<b;d++)a=Math.floor(Math.random()*b),c+=_constants2.HEX_CHARACTERS.substring(a,a+1);return c}}]),a}();exports.Utilities=Utilities;
217
2
  //# sourceMappingURL=utilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.js","names":["_tsRes","require","_kameleoonError","_types","_targeting","_constants","_kameleoonData","_constants2","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","obj","value","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","Utilities","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","conditionsData","firstLevel","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getAssignedVariations","ok","data","targetingTree","TargetingTree","result","evaluate","variationData","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","campaignConfiguration","unsentData","getUnsentData","map","item","url","join","trackRule","featureFlagVariation","requester","userAgent","variationId","rule","dataUrl","resultVariationId","isUnallocated","callback","clearUnsentData","trackExperiment","body","parseFeatureVariable","variable","type","VariableType","BOOLEAN","Boolean","STRING","NUMBER","numberValue","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","currentVisit","previousVisits","visits","indexMap","Map","resultData","customDataEvents","sort","a","b","time","customDataEvent","customDataIndex","index","has","set","values","valuesCountMap","CustomData","getUserAgent","isUserAgent","KameleoonData","UserAgent","storedTargetingData","filteredData","userAgentData","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Milliseconds","Second","add","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","entries","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from '../kameleoonError';\nimport { ExperimentVariationsType } from '../storage';\nimport {\n CheckTargetingParamsType,\n ManageCacheParametersType,\n TrackRuleParamsType,\n} from './types';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from '../types';\nimport { TargetingTree } from '../targeting';\nimport { VISITOR_CODE_MAX_LENGTH } from './constants';\nimport {\n CampaignConfiguration,\n FeatureVariableType,\n JSONType,\n} from '../campaignConfiguration';\nimport {\n CustomData,\n KameleoonData,\n KameleoonDataItemType,\n KameleoonDataType,\n UserAgentDataType,\n} from '../kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from '../constants';\nimport { CacheManager } from '../cacheManager';\nimport { GetVisitorDataResultType, VisitType } from '../requester';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n }: CheckTargetingParamsType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: ExperimentVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getAssignedVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = new TargetingTree(segment);\n\n const result = targetingTree.evaluate({\n targetingData: targetingData || [],\n variationData: variations,\n experimentId,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\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 const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);\n\n const resultVariationId = variationId || 0;\n const isUnallocated = variationId === null;\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n const callback = () => campaignConfiguration.clearUnsentData;\n\n requester.trackExperiment({\n visitorCode,\n isUnallocated,\n body: dataUrl,\n callback,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n });\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData(data: GetVisitorDataResultType): KameleoonDataType[] {\n const { currentVisit, previousVisits } = data;\n\n let visits: [VisitType] | undefined;\n\n if (currentVisit) {\n visits = [currentVisit];\n } else if (previousVisits) {\n visits = previousVisits;\n }\n\n if (!visits) {\n return [];\n }\n\n const indexMap = new Map();\n const resultData: KameleoonDataType[] = [];\n const customDataEvents = [...visits[0].customDataEvents];\n customDataEvents.sort((a, b) => b.time - a.time);\n\n for (const customDataEvent of customDataEvents) {\n const customDataIndex = customDataEvent.data.index;\n\n if (!indexMap.has(customDataIndex)) {\n indexMap.set(customDataIndex, true);\n\n const values = Object.keys(customDataEvent.data.valuesCountMap);\n resultData.push(new CustomData(customDataIndex, ...values));\n }\n }\n\n return resultData;\n }\n\n static getUserAgent(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string | undefined {\n const isUserAgent = (\n data: KameleoonDataItemType,\n ): data is UserAgentDataType => data.type === KameleoonData.UserAgent;\n const targetingData =\n campaignConfiguration.storedTargetingData[visitorCode];\n\n if (targetingData) {\n const filteredData = targetingData\n .map((item) => item.data)\n .filter(isUserAgent);\n\n if (filteredData.length) {\n const [userAgentData] = filteredData;\n\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static updateCache({\n cacheManager,\n visitorCode,\n experimentId,\n variationId,\n }: ManageCacheParametersType): void {\n const cacheData = cacheManager.getAliveItem(visitorCode);\n\n const newCacheData = cacheData ? { ...cacheData } : {};\n\n newCacheData[experimentId] = {\n variationId,\n expirationTime: Date.now() + CACHE_ITEM_LIFETIME * Milliseconds.Second,\n };\n\n cacheManager.add({\n key: visitorCode,\n data: newCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n }\n\n static getTrackingCode(\n trackingCache: CacheManager<TrackingCacheItemType>,\n visitorCode: string,\n ): string {\n let resultString = 'window.kameleoonQueue=window.kameleoonQueue||[];';\n\n const cacheData = trackingCache.getAliveItem(visitorCode);\n\n if (!cacheData) {\n return resultString;\n }\n\n const updatedCacheData: TrackingCacheItemType = {};\n\n Object.entries(cacheData).forEach(\n ([experimentId, { variationId, expirationTime }]) => {\n if (expirationTime > Date.now()) {\n resultString += `window.kameleoonQueue.push(['Experiments.assignVariation',${experimentId},${variationId}]);`;\n resultString += `window.kameleoonQueue.push(['Experiments.trigger',${experimentId},true]);`;\n\n updatedCacheData[Number(experimentId)] = {\n variationId,\n expirationTime,\n };\n }\n },\n );\n\n // --- Note ---\n // Cache is updated with only alive experiments\n trackingCache.add({\n key: visitorCode,\n data: updatedCacheData,\n lifetime: CACHE_ITEM_LIFETIME,\n });\n\n return resultString;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utilities.js","names":["Utilities","a","_classCallCheck","_createClass","key","value","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","packageInfo","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getAssignedVariations","ok","data","targetingTree","TargetingTree","result","evaluate","variationData","sdkInfo","validateVisitorCode","VisitorCodeEmpty","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","campaignConfiguration","unsentData","getUnsentData","map","item","url","join","trackRule","featureFlagVariation","requester","userAgent","variationId","rule","dataUrl","trackExperiment","isUnallocated","body","callback","clearUnsentData","parseFeatureVariable","variable","type","VariableType","BOOLEAN","STRING","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","parseVisitorData","visits","currentVisit","previousVisits","indexMap","Map","resultData","customDataEvents","_toConsumableArray","sort","b","time","h","i","_createForOfIteratorHelper","s","n","done","customDataEvent","customDataIndex","index","has","set","values","Object","keys","valuesCountMap","push","_construct","CustomData","concat","e","f","parseRegExp","split","c","_slicedToArray","_","expression","flags","RegExp","getUserAgent","storedTargetingData","userAgentData","KameleoonData","UserAgent","isCustomData","dataItem","updateCache","cacheManager","cacheData","getAliveItem","newCacheData","_objectSpread","expirationTime","Date","now","CACHE_ITEM_LIFETIME","Milliseconds","Second","add","lifetime","getTrackingCode","trackingCache","resultString","updatedCacheData","entries","forEach","trackData","getNonce","randomNumber","hexLength","HEX_CHARACTERS","nonce","Math","floor","random","substring","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from 'src/kameleoonError';\nimport { ExperimentVariationsType } from 'src/storage';\nimport {\n FeatureVariableResultType,\n Milliseconds,\n TrackingCacheItemType,\n VariableType,\n} from 'src/types';\nimport { TargetingTree } from 'src/targeting';\nimport {\n CampaignConfiguration,\n FeatureVariableType,\n JSONType,\n} from 'src/campaignConfiguration';\nimport {\n CustomData,\n KameleoonData,\n KameleoonDataType,\n} from 'src/kameleoonData';\nimport { CACHE_ITEM_LIFETIME } from 'src/constants';\nimport { CacheManager } from 'src/cacheManager';\nimport { GetVisitorDataResultType, VisitType } from 'src/requester';\nimport {\n CheckTargetingParamsType,\n ManageCacheParametersType,\n TrackDataParametersType,\n TrackRuleParamsType,\n} from './types';\nimport { VISITOR_CODE_MAX_LENGTH, HEX_CHARACTERS } from './constants';\nimport { KameleoonVisitorDataType } from 'src/kameleoonData/types';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n packageInfo,\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 variationData: variations,\n sdkInfo: packageInfo,\n targetingData,\n experimentId,\n visitorCode,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length === 0) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeEmpty));\n }\n\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 const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);\n\n const resultVariationId = variationId || 0;\n const isUnallocated = variationId === null;\n // --- Note ---\n // Experiment id is not needed for unallocated visitors\n // So we just use 0 as a fallback\n const experimentId = rule ? rule.experimentId : 0;\n\n const callback = () => {\n campaignConfiguration.clearUnsentData(visitorCode);\n };\n\n requester.trackExperiment({\n visitorCode,\n isUnallocated,\n body: dataUrl,\n callback,\n experimentId,\n variationId: resultVariationId,\n userAgent,\n });\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static parseVisitorData(data: GetVisitorDataResultType): KameleoonDataType[] {\n const { currentVisit, previousVisits } = data;\n\n let visits: [VisitType] | undefined;\n\n if (currentVisit) {\n visits = [currentVisit];\n } else if (previousVisits) {\n visits = previousVisits;\n }\n\n if (!visits) {\n return [];\n }\n\n const indexMap = new Map();\n const resultData: KameleoonDataType[] = [];\n const customDataEvents = [...visits[0].customDataEvents];\n customDataEvents.sort((a, b) => b.time - a.time);\n\n for (const customDataEvent of customDataEvents) {\n const customDataIndex = customDataEvent.data.index;\n\n if (!indexMap.has(customDataIndex)) {\n indexMap.set(customDataIndex, true);\n\n const values = Object.keys(customDataEvent.data.valuesCountMap);\n resultData.push(new CustomData(customDataIndex, ...values));\n }\n }\n\n return resultData;\n }\n\n static parseRegExp(value: string): RegExp {\n if (value[0] === '/') {\n const [_, expression, flags] = value.split('/');\n\n return new RegExp(expression, flags);\n }\n\n return new RegExp(value);\n }\n\n static getUserAgent(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string | undefined {\n const targetingData: KameleoonVisitorDataType | undefined =\n campaignConfiguration.storedTargetingData[visitorCode];\n\n if (targetingData) {\n const userAgentData = targetingData[KameleoonData.UserAgent];\n\n if (userAgentData) {\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n\n static isCustomData(dataItem: KameleoonDataType): dataItem is CustomData {\n return dataItem.data.type === KameleoonData.CustomData;\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 static trackData({\n visitorCode,\n campaignConfiguration,\n requester,\n }: TrackDataParametersType): void {\n const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);\n\n const userAgent = this.getUserAgent(visitorCode, campaignConfiguration);\n\n const callback = () => {\n campaignConfiguration.clearUnsentData(visitorCode);\n };\n\n requester.trackData({ visitorCode, body: dataUrl, userAgent, callback });\n }\n\n static getNonce(): string {\n const hexLength = HEX_CHARACTERS.length;\n let nonce: string = '';\n\n for (let i = 0; i < hexLength; i++) {\n const randomNumber = Math.floor(Math.random() * hexLength);\n nonce += HEX_CHARACTERS.substring(randomNumber, randomNumber + 1);\n }\n\n return nonce;\n }\n}\n"],"mappings":"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"}
@@ -1,26 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "FeatureFlagVariationType", {
7
- enumerable: true,
8
- get: function () {
9
- return _types.FeatureFlagVariationType;
10
- }
11
- });
12
- Object.defineProperty(exports, "VariationConfiguration", {
13
- enumerable: true,
14
- get: function () {
15
- return _variationConfiguration.VariationConfiguration;
16
- }
17
- });
18
- Object.defineProperty(exports, "VariationType", {
19
- enumerable: true,
20
- get: function () {
21
- return _types.VariationType;
22
- }
23
- });
24
- var _variationConfiguration = require("./variationConfiguration");
25
- var _types = require("./types");
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"FeatureFlagVariationType",{enumerable:!0,get:function get(){return _types.FeatureFlagVariationType}}),Object.defineProperty(exports,"VariationConfiguration",{enumerable:!0,get:function get(){return _variationConfiguration.VariationConfiguration}}),Object.defineProperty(exports,"VariationType",{enumerable:!0,get:function get(){return _types.VariationType}});var _variationConfiguration=require("./variationConfiguration"),_types=require("./types");
26
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_variationConfiguration","require","_types"],"sources":["../../src/variationConfiguration/index.ts"],"sourcesContent":["export { VariationConfiguration } from './variationConfiguration';\nexport { VariationType, FeatureFlagVariationType } from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,uBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/variationConfiguration/index.ts"],"sourcesContent":["export { VariationConfiguration } from './variationConfiguration';\nexport { VariationType, FeatureFlagVariationType } from './types';\n"],"mappings":""}