@kameleoon/javascript-sdk-core 0.0.3 → 1.0.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 (261) hide show
  1. package/README.md +7 -3
  2. package/dist/campaignConfiguration/campaignConfiguration.d.ts +46 -0
  3. package/dist/campaignConfiguration/campaignConfiguration.js +217 -0
  4. package/dist/campaignConfiguration/campaignConfiguration.js.map +1 -0
  5. package/dist/campaignConfiguration/constants.d.ts +18 -0
  6. package/dist/campaignConfiguration/constants.js +23 -0
  7. package/dist/campaignConfiguration/constants.js.map +1 -0
  8. package/dist/campaignConfiguration/index.d.ts +2 -0
  9. package/dist/campaignConfiguration/index.js +8 -0
  10. package/dist/campaignConfiguration/index.js.map +1 -0
  11. package/dist/campaignConfiguration/types.d.ts +126 -0
  12. package/dist/campaignConfiguration/types.js +47 -0
  13. package/dist/campaignConfiguration/types.js.map +1 -0
  14. package/dist/clientSettings/clientSettings.d.ts +12 -0
  15. package/dist/clientSettings/clientSettings.js +29 -0
  16. package/dist/clientSettings/clientSettings.js.map +1 -0
  17. package/dist/clientSettings/index.d.ts +2 -0
  18. package/dist/clientSettings/index.js +6 -0
  19. package/dist/clientSettings/index.js.map +1 -0
  20. package/dist/clientSettings/types.d.ts +6 -0
  21. package/dist/{interfaces/interfaces.js → clientSettings/types.js} +1 -1
  22. package/dist/clientSettings/types.js.map +1 -0
  23. package/dist/constants.d.ts +10 -16
  24. package/dist/constants.js +13 -20
  25. package/dist/constants.js.map +1 -1
  26. package/dist/eventSource/constants.d.ts +1 -0
  27. package/dist/eventSource/constants.js +5 -0
  28. package/dist/eventSource/constants.js.map +1 -0
  29. package/dist/eventSource/externalEventSource.d.ts +12 -0
  30. package/dist/eventSource/externalEventSource.js +26 -0
  31. package/dist/eventSource/externalEventSource.js.map +1 -0
  32. package/dist/eventSource/index.d.ts +3 -0
  33. package/dist/eventSource/index.js +8 -0
  34. package/dist/eventSource/index.js.map +1 -0
  35. package/dist/eventSource/types.d.ts +47 -0
  36. package/dist/eventSource/types.js +3 -0
  37. package/dist/eventSource/types.js.map +1 -0
  38. package/dist/hasher/constants.d.ts +1 -0
  39. package/dist/hasher/constants.js +5 -0
  40. package/dist/hasher/constants.js.map +1 -0
  41. package/dist/hasher/hasher.d.ts +6 -0
  42. package/dist/hasher/hasher.js +34 -0
  43. package/dist/hasher/hasher.js.map +1 -0
  44. package/dist/hasher/index.d.ts +1 -0
  45. package/dist/hasher/index.js +6 -0
  46. package/dist/hasher/index.js.map +1 -0
  47. package/dist/hasher/types.d.ts +12 -0
  48. package/dist/hasher/types.js +3 -0
  49. package/dist/hasher/types.js.map +1 -0
  50. package/dist/index.d.ts +10 -3
  51. package/dist/index.js +25 -7
  52. package/dist/index.js.map +1 -1
  53. package/dist/kameleoonClient.d.ts +189 -100
  54. package/dist/kameleoonClient.js +238 -701
  55. package/dist/kameleoonClient.js.map +1 -1
  56. package/dist/kameleoonData/browser.d.ts +21 -0
  57. package/dist/kameleoonData/browser.js +41 -0
  58. package/dist/kameleoonData/browser.js.map +1 -0
  59. package/dist/kameleoonData/constants.d.ts +1 -0
  60. package/dist/kameleoonData/constants.js +5 -0
  61. package/dist/kameleoonData/constants.js.map +1 -0
  62. package/dist/kameleoonData/conversion.d.ts +23 -0
  63. package/dist/kameleoonData/conversion.js +49 -0
  64. package/dist/kameleoonData/conversion.js.map +1 -0
  65. package/dist/kameleoonData/customData.d.ts +33 -0
  66. package/dist/kameleoonData/customData.js +68 -0
  67. package/dist/kameleoonData/customData.js.map +1 -0
  68. package/dist/kameleoonData/device.d.ts +21 -0
  69. package/dist/kameleoonData/device.js +41 -0
  70. package/dist/kameleoonData/device.js.map +1 -0
  71. package/dist/kameleoonData/index.d.ts +7 -0
  72. package/dist/kameleoonData/index.js +20 -0
  73. package/dist/kameleoonData/index.js.map +1 -0
  74. package/dist/kameleoonData/nonce.d.ts +5 -0
  75. package/dist/kameleoonData/nonce.js +20 -0
  76. package/dist/kameleoonData/nonce.js.map +1 -0
  77. package/dist/kameleoonData/pageView.d.ts +24 -0
  78. package/dist/kameleoonData/pageView.js +54 -0
  79. package/dist/kameleoonData/pageView.js.map +1 -0
  80. package/dist/kameleoonData/types.d.ts +100 -0
  81. package/dist/kameleoonData/types.js +36 -0
  82. package/dist/kameleoonData/types.js.map +1 -0
  83. package/dist/kameleoonData/userAgent.d.ts +18 -0
  84. package/dist/kameleoonData/userAgent.js +33 -0
  85. package/dist/kameleoonData/userAgent.js.map +1 -0
  86. package/dist/kameleoonError/constants.d.ts +22 -0
  87. package/dist/kameleoonError/constants.js +25 -0
  88. package/dist/kameleoonError/constants.js.map +1 -0
  89. package/dist/kameleoonError/helpers.d.ts +1 -0
  90. package/dist/kameleoonError/helpers.js +8 -0
  91. package/dist/kameleoonError/helpers.js.map +1 -0
  92. package/dist/kameleoonError/index.d.ts +3 -0
  93. package/dist/kameleoonError/index.js +10 -0
  94. package/dist/kameleoonError/index.js.map +1 -0
  95. package/dist/kameleoonError/kameleoonError.d.ts +24 -0
  96. package/dist/kameleoonError/kameleoonError.js +64 -0
  97. package/dist/kameleoonError/kameleoonError.js.map +1 -0
  98. package/dist/kameleoonError/types.d.ts +20 -0
  99. package/dist/kameleoonError/types.js +25 -0
  100. package/dist/kameleoonError/types.js.map +1 -0
  101. package/dist/kameleoonUtils.d.ts +11 -10
  102. package/dist/kameleoonUtils.js +42 -128
  103. package/dist/kameleoonUtils.js.map +1 -1
  104. package/dist/requester/constants.d.ts +15 -0
  105. package/dist/requester/constants.js +53 -0
  106. package/dist/requester/constants.js.map +1 -0
  107. package/dist/requester/index.d.ts +3 -0
  108. package/dist/requester/index.js +10 -0
  109. package/dist/requester/index.js.map +1 -0
  110. package/dist/requester/requester.d.ts +23 -0
  111. package/dist/requester/requester.js +121 -0
  112. package/dist/requester/requester.js.map +1 -0
  113. package/dist/requester/types.d.ts +43 -0
  114. package/dist/requester/types.js +39 -0
  115. package/dist/requester/types.js.map +1 -0
  116. package/dist/storage/constants.d.ts +9 -0
  117. package/dist/storage/constants.js +14 -0
  118. package/dist/storage/constants.js.map +1 -0
  119. package/dist/storage/externalStorage.d.ts +11 -0
  120. package/dist/storage/externalStorage.js +34 -0
  121. package/dist/storage/externalStorage.js.map +1 -0
  122. package/dist/storage/index.d.ts +3 -0
  123. package/dist/storage/index.js +8 -0
  124. package/dist/storage/index.js.map +1 -0
  125. package/dist/storage/types.d.ts +52 -11
  126. package/dist/targeting/conditions/conditionFactory.d.ts +6 -0
  127. package/dist/targeting/conditions/conditionFactory.js +26 -0
  128. package/dist/targeting/conditions/conditionFactory.js.map +1 -0
  129. package/dist/targeting/conditions/customDataCondition.d.ts +16 -0
  130. package/dist/targeting/conditions/customDataCondition.js +99 -0
  131. package/dist/targeting/conditions/customDataCondition.js.map +1 -0
  132. package/dist/targeting/conditions/exclusiveExperimentCondition.d.ts +9 -0
  133. package/dist/targeting/conditions/exclusiveExperimentCondition.js +21 -0
  134. package/dist/targeting/conditions/exclusiveExperimentCondition.js.map +1 -0
  135. package/dist/targeting/conditions/index.d.ts +5 -0
  136. package/dist/targeting/conditions/index.js +12 -0
  137. package/dist/targeting/conditions/index.js.map +1 -0
  138. package/dist/targeting/conditions/targetExperimentCondition.d.ts +13 -0
  139. package/dist/targeting/conditions/targetExperimentCondition.js +42 -0
  140. package/dist/targeting/conditions/targetExperimentCondition.js.map +1 -0
  141. package/dist/targeting/conditions/types.d.ts +22 -11
  142. package/dist/targeting/index.d.ts +3 -0
  143. package/dist/targeting/index.js +15 -0
  144. package/dist/targeting/index.js.map +1 -0
  145. package/dist/targeting/targetingNode.d.ts +21 -0
  146. package/dist/targeting/targetingNode.js +40 -0
  147. package/dist/targeting/targetingNode.js.map +1 -0
  148. package/dist/targeting/targetingTree.d.ts +16 -8
  149. package/dist/targeting/targetingTree.js +112 -10
  150. package/dist/targeting/targetingTree.js.map +1 -1
  151. package/dist/targeting/types.d.ts +127 -0
  152. package/dist/targeting/types.js +93 -0
  153. package/dist/targeting/types.js.map +1 -0
  154. package/dist/types.d.ts +135 -5
  155. package/dist/types.js +28 -0
  156. package/dist/types.js.map +1 -1
  157. package/dist/utilities/constants.d.ts +1 -0
  158. package/dist/utilities/constants.js +5 -0
  159. package/dist/utilities/constants.js.map +1 -0
  160. package/dist/utilities/index.d.ts +1 -0
  161. package/dist/utilities/index.js +6 -0
  162. package/dist/utilities/index.js.map +1 -0
  163. package/dist/utilities/types.d.ts +18 -0
  164. package/dist/utilities/types.js +3 -0
  165. package/dist/utilities/types.js.map +1 -0
  166. package/dist/utilities/utilities.d.ts +13 -0
  167. package/dist/utilities/utilities.js +119 -0
  168. package/dist/utilities/utilities.js.map +1 -0
  169. package/dist/variationConfiguration/index.d.ts +2 -0
  170. package/dist/variationConfiguration/index.js +6 -0
  171. package/dist/variationConfiguration/index.js.map +1 -0
  172. package/dist/variationConfiguration/types.d.ts +25 -0
  173. package/dist/variationConfiguration/types.js +3 -0
  174. package/dist/variationConfiguration/types.js.map +1 -0
  175. package/dist/variationConfiguration/variation.d.ts +13 -0
  176. package/dist/variationConfiguration/variation.js +38 -0
  177. package/dist/variationConfiguration/variation.js.map +1 -0
  178. package/dist/variationConfiguration/variationConfiguration.d.ts +36 -0
  179. package/dist/variationConfiguration/variationConfiguration.js +248 -0
  180. package/dist/variationConfiguration/variationConfiguration.js.map +1 -0
  181. package/package.json +19 -9
  182. package/dist/configurations/configuration.d.ts +0 -15
  183. package/dist/configurations/configuration.js +0 -31
  184. package/dist/configurations/configuration.js.map +0 -1
  185. package/dist/configurations/experiment.d.ts +0 -13
  186. package/dist/configurations/experiment.js +0 -54
  187. package/dist/configurations/experiment.js.map +0 -1
  188. package/dist/configurations/featureFlag.d.ts +0 -23
  189. package/dist/configurations/featureFlag.js +0 -105
  190. package/dist/configurations/featureFlag.js.map +0 -1
  191. package/dist/configurations/variation.d.ts +0 -15
  192. package/dist/configurations/variation.js +0 -14
  193. package/dist/configurations/variation.js.map +0 -1
  194. package/dist/data.d.ts +0 -67
  195. package/dist/data.js +0 -127
  196. package/dist/data.js.map +0 -1
  197. package/dist/exceptions/credentialsNotFound.d.ts +0 -6
  198. package/dist/exceptions/credentialsNotFound.js +0 -29
  199. package/dist/exceptions/credentialsNotFound.js.map +0 -1
  200. package/dist/exceptions/experimentConfigurationNotFound.d.ts +0 -6
  201. package/dist/exceptions/experimentConfigurationNotFound.js +0 -29
  202. package/dist/exceptions/experimentConfigurationNotFound.js.map +0 -1
  203. package/dist/exceptions/featureConfigurationNotFound.d.ts +0 -6
  204. package/dist/exceptions/featureConfigurationNotFound.js +0 -29
  205. package/dist/exceptions/featureConfigurationNotFound.js.map +0 -1
  206. package/dist/exceptions/notActivated.d.ts +0 -6
  207. package/dist/exceptions/notActivated.js +0 -29
  208. package/dist/exceptions/notActivated.js.map +0 -1
  209. package/dist/exceptions/notTargeted.d.ts +0 -6
  210. package/dist/exceptions/notTargeted.js +0 -29
  211. package/dist/exceptions/notTargeted.js.map +0 -1
  212. package/dist/exceptions/siteCodeDisabled.d.ts +0 -5
  213. package/dist/exceptions/siteCodeDisabled.js +0 -30
  214. package/dist/exceptions/siteCodeDisabled.js.map +0 -1
  215. package/dist/exceptions/variationConfigurationNotFound.d.ts +0 -6
  216. package/dist/exceptions/variationConfigurationNotFound.js +0 -29
  217. package/dist/exceptions/variationConfigurationNotFound.js.map +0 -1
  218. package/dist/exceptions/visitorCodeNotValid.d.ts +0 -5
  219. package/dist/exceptions/visitorCodeNotValid.js +0 -30
  220. package/dist/exceptions/visitorCodeNotValid.js.map +0 -1
  221. package/dist/interfaces/interfaces.d.ts +0 -81
  222. package/dist/interfaces/interfaces.js.map +0 -1
  223. package/dist/nonce.d.ts +0 -1
  224. package/dist/nonce.js +0 -16
  225. package/dist/nonce.js.map +0 -1
  226. package/dist/realTimeConfigurationService.d.ts +0 -12
  227. package/dist/realTimeConfigurationService.js +0 -24
  228. package/dist/realTimeConfigurationService.js.map +0 -1
  229. package/dist/storage/variationStorage.d.ts +0 -11
  230. package/dist/storage/variationStorage.js +0 -159
  231. package/dist/storage/variationStorage.js.map +0 -1
  232. package/dist/storage/visitorVariation.d.ts +0 -9
  233. package/dist/storage/visitorVariation.js +0 -22
  234. package/dist/storage/visitorVariation.js.map +0 -1
  235. package/dist/targeting/conditions/customDatum.d.ts +0 -12
  236. package/dist/targeting/conditions/customDatum.js +0 -129
  237. package/dist/targeting/conditions/customDatum.js.map +0 -1
  238. package/dist/targeting/conditions/exclusiveExperiment.d.ts +0 -9
  239. package/dist/targeting/conditions/exclusiveExperiment.js +0 -45
  240. package/dist/targeting/conditions/exclusiveExperiment.js.map +0 -1
  241. package/dist/targeting/conditions/targetExperiment.d.ts +0 -14
  242. package/dist/targeting/conditions/targetExperiment.js +0 -57
  243. package/dist/targeting/conditions/targetExperiment.js.map +0 -1
  244. package/dist/targeting/targetingCondition.d.ts +0 -7
  245. package/dist/targeting/targetingCondition.js +0 -9
  246. package/dist/targeting/targetingCondition.js.map +0 -1
  247. package/dist/targeting/targetingConditionsFactory.d.ts +0 -7
  248. package/dist/targeting/targetingConditionsFactory.js +0 -30
  249. package/dist/targeting/targetingConditionsFactory.js.map +0 -1
  250. package/dist/targeting/targetingData.d.ts +0 -7
  251. package/dist/targeting/targetingData.js +0 -11
  252. package/dist/targeting/targetingData.js.map +0 -1
  253. package/dist/targeting/targetingEngine.d.ts +0 -6
  254. package/dist/targeting/targetingEngine.js +0 -130
  255. package/dist/targeting/targetingEngine.js.map +0 -1
  256. package/dist/targeting/targetingSegment.d.ts +0 -5
  257. package/dist/targeting/targetingSegment.js +0 -9
  258. package/dist/targeting/targetingSegment.js.map +0 -1
  259. package/dist/targeting/targetingTreeBuilder.d.ts +0 -8
  260. package/dist/targeting/targetingTreeBuilder.js +0 -127
  261. package/dist/targeting/targetingTreeBuilder.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/requester/constants.ts"],"names":[],"mappings":";;;AAWA,IAAY,MAGX;AAHD,WAAY,MAAM;IAChB,8CAAoC,CAAA;IACpC,kCAAwB,CAAA;AAC1B,CAAC,EAHW,MAAM,GAAN,cAAM,KAAN,cAAM,QAGjB;AAED,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAE1D,QAAA,GAAG,GAAG;IACjB,MAAM,EAAE,4BAA4B,cAAc,QAAQ;IAC1D,OAAO,EAAE,6BAA6B,cAAc,GAAG;IACvD,QAAQ,EAAE,8BAA8B,cAAc,GAAG;IACzD,oBAAoB,EAAE,mCAAmC,cAAc,GAAG;CAC3E,CAAC;AAEW,QAAA,YAAY,GAAqC;IAC5D,UAAU,EAAE,sBAAsB;IAClC,UAAU,EAAE,sBAAsB;IAClC,IAAI,EAAE,gBAAgB;IACtB,UAAU,EAAE,sBAAsB;CACnC,CAAC;AACW,QAAA,YAAY,GAAyC;IAChE,YAAY,EAAE,gBAAgB;IAC9B,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,gBAAgB,EAAE,oBAAoB;IACtC,QAAQ,EAAE,YAAY;IACtB,OAAO,EAAE,WAAW;IACpB,SAAS,EAAE,aAAa;IACxB,KAAK,EAAE,SAAS;IAChB,YAAY,EAAE,gBAAgB;IAC9B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,cAAc;IAC1B,QAAQ,EAAE,YAAY;IACtB,MAAM,EAAE,UAAU;IAClB,WAAW,EAAE,eAAe;IAC5B,YAAY,EAAE,gBAAgB;IAC9B,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,eAAe;IAC5B,aAAa,EAAE,iBAAiB;IAChC,EAAE,EAAE,MAAM;IACV,GAAG,EAAE,OAAO;CACb,CAAC;AACW,QAAA,QAAQ,GAAiC;IACpD,IAAI,EAAE,gBAAgB;IACtB,GAAG,EAAE,eAAe;IACpB,MAAM,EAAE,kBAAkB;CAC3B,CAAC;AACW,QAAA,WAAW,GAAuC;IAC7D,UAAU,EAAE,qBAAqB;IACjC,IAAI,EAAE,eAAe;CACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Requester } from './requester';
2
+ export { URL, UrlEventType, UrlParameter } from './constants';
3
+ export { TrackExperimentParamsType } from './types';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UrlParameter = exports.UrlEventType = exports.URL = exports.Requester = void 0;
4
+ var requester_1 = require("./requester");
5
+ Object.defineProperty(exports, "Requester", { enumerable: true, get: function () { return requester_1.Requester; } });
6
+ var constants_1 = require("./constants");
7
+ Object.defineProperty(exports, "URL", { enumerable: true, get: function () { return constants_1.URL; } });
8
+ Object.defineProperty(exports, "UrlEventType", { enumerable: true, get: function () { return constants_1.UrlEventType; } });
9
+ Object.defineProperty(exports, "UrlParameter", { enumerable: true, get: function () { return constants_1.UrlParameter; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/requester/index.ts"],"names":[],"mappings":";;;AAAA,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,yCAA8D;AAArD,gGAAA,GAAG,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,yGAAA,YAAY,OAAA"}
@@ -0,0 +1,23 @@
1
+ import { Result } from 'ts-res';
2
+ import { Environment } from '../types';
3
+ import { KameleoonError } from '../kameleoonError';
4
+ import { GetClientConfigurationResultType, TrackDataParamsType, TrackExperimentParamsType } from './types';
5
+ import { Nonce } from '../kameleoonData/nonce';
6
+ import { JSONType } from '../campaignConfiguration';
7
+ export interface IRequester {
8
+ getClientConfiguration: () => Promise<Result<GetClientConfigurationResultType, KameleoonError>>;
9
+ getRemoteData: (key: string) => Promise<Result<JSONType, KameleoonError>>;
10
+ trackExperiment: ({ variationId, visitorCode, experimentId, isUnallocated, callback, body, }: TrackExperimentParamsType) => Promise<void>;
11
+ trackData: ({ visitorCode, body }: TrackDataParamsType) => Promise<void>;
12
+ }
13
+ export declare class Requester extends Nonce implements IRequester {
14
+ private siteCode;
15
+ private environment;
16
+ private headers;
17
+ constructor(siteCode: string, environment: Environment | null);
18
+ getClientConfiguration(timeStamp?: number): Promise<Result<GetClientConfigurationResultType, KameleoonError>>;
19
+ getRemoteData(key: string): Promise<Result<JSONType, KameleoonError>>;
20
+ trackExperiment({ variationId, visitorCode, experimentId, isUnallocated, body, userAgent, callback, }: TrackExperimentParamsType): Promise<void>;
21
+ trackData({ visitorCode, body, userAgent, }: TrackDataParamsType): Promise<void>;
22
+ private getTrackingParameters;
23
+ }
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.Requester = void 0;
16
+ const node_fetch_1 = __importDefault(require("node-fetch"));
17
+ const ts_res_1 = require("ts-res");
18
+ const kameleoonError_1 = require("../kameleoonError");
19
+ const constants_1 = require("./constants");
20
+ const types_1 = require("./types");
21
+ const nonce_1 = require("../kameleoonData/nonce");
22
+ class Requester extends nonce_1.Nonce {
23
+ constructor(siteCode, environment) {
24
+ super();
25
+ const { npm_package_name, npm_package_version } = process.env;
26
+ this.siteCode = siteCode;
27
+ this.environment = environment;
28
+ this.headers = {
29
+ [constants_1.Header.KameleoonClient]: `${npm_package_name}/${npm_package_version}`,
30
+ };
31
+ }
32
+ getClientConfiguration(timeStamp) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ const environmentParam = this.environment
35
+ ? constants_1.UrlParameter.Environment + this.environment
36
+ : '';
37
+ const timeStampParam = timeStamp ? constants_1.UrlParameter.Ts + timeStamp : '';
38
+ const requestUrl = constants_1.URL.CLIENT_CONFIGURATION +
39
+ constants_1.UrlQuery.Mobile +
40
+ this.siteCode +
41
+ environmentParam +
42
+ timeStampParam;
43
+ const response = yield (0, node_fetch_1.default)(requestUrl, { method: types_1.HttpMethod.Get });
44
+ if (!response.ok) {
45
+ return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.ClientConfiguration));
46
+ }
47
+ const responseData = yield response.json();
48
+ if (responseData) {
49
+ return (0, ts_res_1.Ok)(responseData);
50
+ }
51
+ return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.ClientConfiguration));
52
+ });
53
+ }
54
+ getRemoteData(key) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const requestUrl = constants_1.URL.API_DATA +
57
+ constants_1.UrlQuery.Data +
58
+ this.siteCode +
59
+ constants_1.UrlParameter.Key +
60
+ encodeURI(key);
61
+ const response = yield (0, node_fetch_1.default)(requestUrl, { method: types_1.HttpMethod.Get });
62
+ if (!response.ok) {
63
+ return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.RemoteData));
64
+ }
65
+ const responseData = yield response.json();
66
+ if (responseData) {
67
+ return (0, ts_res_1.Ok)(responseData);
68
+ }
69
+ return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.RemoteData));
70
+ });
71
+ }
72
+ trackExperiment({ variationId, visitorCode, experimentId, isUnallocated, body, userAgent, callback, }) {
73
+ return __awaiter(this, void 0, void 0, function* () {
74
+ const noneVariation = isUnallocated
75
+ ? constants_1.UrlParameter.NoneVariation + isUnallocated
76
+ : '';
77
+ const trackingParameters = this.getTrackingParameters(visitorCode);
78
+ const requestUrl = constants_1.URL.API_SSX +
79
+ constants_1.UrlTracking.Experiment +
80
+ trackingParameters +
81
+ constants_1.UrlParameter.ExperimentId +
82
+ experimentId +
83
+ constants_1.UrlParameter.VariationId +
84
+ variationId +
85
+ noneVariation;
86
+ const headers = userAgent
87
+ ? Object.assign(Object.assign({}, this.headers), { [constants_1.Header.UserAgent]: userAgent }) : this.headers;
88
+ const response = yield (0, node_fetch_1.default)(requestUrl, {
89
+ method: types_1.HttpMethod.Post,
90
+ headers,
91
+ body,
92
+ });
93
+ if (response.ok && callback) {
94
+ callback();
95
+ }
96
+ });
97
+ }
98
+ trackData({ visitorCode, body, userAgent, }) {
99
+ return __awaiter(this, void 0, void 0, function* () {
100
+ const trackingParameters = this.getTrackingParameters(visitorCode);
101
+ const requestUrl = constants_1.URL.API_SSX + constants_1.UrlTracking.Data + trackingParameters;
102
+ const headers = userAgent
103
+ ? Object.assign(Object.assign({}, this.headers), { [constants_1.Header.UserAgent]: userAgent }) : this.headers;
104
+ (0, node_fetch_1.default)(requestUrl, {
105
+ method: types_1.HttpMethod.Post,
106
+ headers,
107
+ body,
108
+ });
109
+ });
110
+ }
111
+ getTrackingParameters(visitorCode) {
112
+ return (constants_1.UrlParameter.Nonce +
113
+ this.nonce +
114
+ constants_1.UrlParameter.SiteCode +
115
+ this.siteCode +
116
+ constants_1.UrlParameter.VisitorCode +
117
+ encodeURIComponent(visitorCode));
118
+ }
119
+ }
120
+ exports.Requester = Requester;
121
+ //# sourceMappingURL=requester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requester.js","sourceRoot":"","sources":["../../src/requester/requester.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { ConfigurationDataType, FeatureFlagType } from '../campaignConfiguration';
2
+ export type TrackExperimentParamsType = {
3
+ body: string;
4
+ variationId: number;
5
+ visitorCode: string;
6
+ experimentId: number;
7
+ isUnallocated: boolean;
8
+ userAgent?: string;
9
+ callback?: () => void;
10
+ };
11
+ export type TrackDataParamsType = {
12
+ visitorCode: string;
13
+ body: string;
14
+ userAgent?: string;
15
+ };
16
+ export type GetClientConfigurationResultType = Omit<ConfigurationDataType, 'featureFlags'> & {
17
+ featureFlagConfigurations: FeatureFlagType[];
18
+ };
19
+ export declare enum HttpMethod {
20
+ Get = "GET",
21
+ Post = "POST"
22
+ }
23
+ declare const EVENT_TYPE_KEYS: readonly ["customData", "staticData", "page", "conversion"];
24
+ declare const PARAMETER_KEYS: readonly ["valueToCount", "nonce", "browserIndex", "siteCode", "environment", "visitorCode", "experimentId", "negative", "revenue", "title", "referrersIndices", "overwrite", "index", "noneVariation", "href", "variationId", "deviceType", "goalId", "ts", "key"];
25
+ declare const TRACKING_KEYS: readonly ["experiment", "data"];
26
+ declare const QUERY_KEYS: readonly ["data", "sse", "mobile"];
27
+ export type TrackingType = Record<Capitalize<typeof TRACKING_KEYS[number]>, string>;
28
+ export type QueryType = Record<Capitalize<typeof QUERY_KEYS[number]>, string>;
29
+ export type ParameterType = Record<Capitalize<typeof PARAMETER_KEYS[number]>, string>;
30
+ export type EventType = Record<Capitalize<typeof EVENT_TYPE_KEYS[number]>, string>;
31
+ export type StrictTrackingRecord<T> = {
32
+ [K in keyof T]: K extends string ? `${Uncapitalize<K>}Tracking?` : never;
33
+ };
34
+ export type StrictQueryRecord<T> = {
35
+ [K in keyof T]: K extends string ? `${Uncapitalize<K>}?siteCode=` : never;
36
+ };
37
+ export type StrictEventTypeRecord<T> = {
38
+ [K in keyof T]: K extends string ? `eventType=${Uncapitalize<K>}` : never;
39
+ };
40
+ export type StrictParameterRecord<T> = {
41
+ [K in keyof T]: K extends string ? `&${Uncapitalize<K>}=` : never;
42
+ };
43
+ export {};
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpMethod = void 0;
4
+ var HttpMethod;
5
+ (function (HttpMethod) {
6
+ HttpMethod["Get"] = "GET";
7
+ HttpMethod["Post"] = "POST";
8
+ })(HttpMethod = exports.HttpMethod || (exports.HttpMethod = {}));
9
+ const EVENT_TYPE_KEYS = [
10
+ 'customData',
11
+ 'staticData',
12
+ 'page',
13
+ 'conversion',
14
+ ];
15
+ const PARAMETER_KEYS = [
16
+ 'valueToCount',
17
+ 'nonce',
18
+ 'browserIndex',
19
+ 'siteCode',
20
+ 'environment',
21
+ 'visitorCode',
22
+ 'experimentId',
23
+ 'negative',
24
+ 'revenue',
25
+ 'title',
26
+ 'referrersIndices',
27
+ 'overwrite',
28
+ 'index',
29
+ 'noneVariation',
30
+ 'href',
31
+ 'variationId',
32
+ 'deviceType',
33
+ 'goalId',
34
+ 'ts',
35
+ 'key',
36
+ ];
37
+ const TRACKING_KEYS = ['experiment', 'data'];
38
+ const QUERY_KEYS = ['data', 'sse', 'mobile'];
39
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/requester/types.ts"],"names":[],"mappings":";;;AA0BA,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,yBAAW,CAAA;IACX,2BAAa,CAAA;AACf,CAAC,EAHW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAGrB;AAED,MAAM,eAAe,GAAG;IACtB,YAAY;IACZ,YAAY;IACZ,MAAM;IACN,YAAY;CACJ,CAAC;AACX,MAAM,cAAc,GAAG;IACrB,cAAc;IACd,OAAO;IACP,cAAc;IACd,UAAU;IACV,aAAa;IACb,aAAa;IACb,cAAc;IACd,UAAU;IACV,SAAS;IACT,OAAO;IACP,kBAAkB;IAClB,WAAW;IACX,OAAO;IACP,eAAe;IACf,MAAM;IACN,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,IAAI;IACJ,KAAK;CACG,CAAC;AACX,MAAM,aAAa,GAAG,CAAC,YAAY,EAAE,MAAM,CAAU,CAAC;AACtD,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @readonly
3
+ * @enum {string} an Enum containing keys for Kameleoon SDK related data stored on storage
4
+ * */
5
+ export declare enum KameleoonStorageKey {
6
+ ClientData = "kameleoonClientData",
7
+ VariationData = "kameleoonVariationData",
8
+ VisitorCode = "kameleoonVisitorCode"
9
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KameleoonStorageKey = void 0;
4
+ /**
5
+ * @readonly
6
+ * @enum {string} an Enum containing keys for Kameleoon SDK related data stored on storage
7
+ * */
8
+ var KameleoonStorageKey;
9
+ (function (KameleoonStorageKey) {
10
+ KameleoonStorageKey["ClientData"] = "kameleoonClientData";
11
+ KameleoonStorageKey["VariationData"] = "kameleoonVariationData";
12
+ KameleoonStorageKey["VisitorCode"] = "kameleoonVisitorCode";
13
+ })(KameleoonStorageKey = exports.KameleoonStorageKey || (exports.KameleoonStorageKey = {}));
14
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/storage/constants.ts"],"names":[],"mappings":";;;AAAA;;;KAGK;AACL,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,yDAAkC,CAAA;IAClC,+DAAwC,CAAA;IACxC,2DAAoC,CAAA;AACtC,CAAC,EAJW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAI9B"}
@@ -0,0 +1,11 @@
1
+ import { Result } from 'ts-res';
2
+ import { IExternalStorage, IStorage, StorageDataType } from './types';
3
+ import { KameleoonError } from '../kameleoonError';
4
+ export declare class ExternalStorage<T extends StorageDataType> implements IStorage<T> {
5
+ private key;
6
+ private storage;
7
+ constructor(externalStorage: IExternalStorage);
8
+ read(): Result<T, KameleoonError>;
9
+ write(data: T): Result<void, KameleoonError>;
10
+ private parse;
11
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExternalStorage = void 0;
4
+ const ts_res_1 = require("ts-res");
5
+ const kameleoonError_1 = require("../kameleoonError");
6
+ class ExternalStorage {
7
+ constructor(externalStorage) {
8
+ this.key = externalStorage.key;
9
+ this.storage = externalStorage;
10
+ }
11
+ read() {
12
+ const result = this.storage.read();
13
+ if (!result.ok) {
14
+ return result;
15
+ }
16
+ return this.parse(result.data);
17
+ }
18
+ write(data) {
19
+ this.storage.write(JSON.stringify(data));
20
+ return (0, ts_res_1.Ok)();
21
+ }
22
+ parse(data) {
23
+ let result;
24
+ try {
25
+ result = JSON.parse(data);
26
+ }
27
+ catch (err) {
28
+ throw new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.StorageParse, err, this.key);
29
+ }
30
+ return (0, ts_res_1.Ok)(result);
31
+ }
32
+ }
33
+ exports.ExternalStorage = ExternalStorage;
34
+ //# sourceMappingURL=externalStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"externalStorage.js","sourceRoot":"","sources":["../../src/storage/externalStorage.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAEpC,sDAAuE;AAGvE,MAAa,eAAe;IAI1B,YAAY,eAAiC;QAC3C,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC;IACjC,CAAC;IAEM,IAAI;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;YACd,OAAO,MAAM,CAAC;SACf;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,IAAO;QAClB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzC,OAAO,IAAA,WAAE,GAAE,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,IAAY;QACxB,IAAI,MAAS,CAAC;QAEd,IAAI;YACF,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC3B;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,+BAAc,CAAC,mCAAkB,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;SAC1E;QAED,OAAO,IAAA,WAAE,EAAC,MAAM,CAAC,CAAC;IACpB,CAAC;CACF;AApCD,0CAoCC"}
@@ -0,0 +1,3 @@
1
+ export { KameleoonStorageKey } from './constants';
2
+ export { ExternalStorage } from './externalStorage';
3
+ export { IStorage, ClientDataType, IExternalStorage, VariationDataType, ExperimentVariationsType, IExternalStorageConstructor, } from './types';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExternalStorage = exports.KameleoonStorageKey = void 0;
4
+ var constants_1 = require("./constants");
5
+ Object.defineProperty(exports, "KameleoonStorageKey", { enumerable: true, get: function () { return constants_1.KameleoonStorageKey; } });
6
+ var externalStorage_1 = require("./externalStorage");
7
+ Object.defineProperty(exports, "ExternalStorage", { enumerable: true, get: function () { return externalStorage_1.ExternalStorage; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":";;;AAAA,yCAAkD;AAAzC,gHAAA,mBAAmB,OAAA;AAC5B,qDAAoD;AAA3C,kHAAA,eAAe,OAAA"}
@@ -1,13 +1,54 @@
1
- import Variation from '../configurations/variation';
2
- export declare type VariationStorageRecordType = Record<string, Record<number, VisitorVariationInterface>>;
3
- export interface VariationStorageInterface {
4
- getVariationId: (visitorCode: string, experimentId: number) => number | null;
5
- updateVariation: (visitorCode: string, experimentId: number, variation: Variation) => void;
6
- getMapVariationId: (visitorCode: string) => Record<number, number> | null;
1
+ import { Result } from 'ts-res';
2
+ import { ConfigurationDataType } from '../campaignConfiguration';
3
+ import { KameleoonError } from '../kameleoonError';
4
+ import { TargetingDataType } from '../targeting';
5
+ import { VariationType } from '../variationConfiguration';
6
+ import { KameleoonStorageKey } from './constants';
7
+ export type ClientDataType = {
8
+ kameleoonTargetingData: TargetingDataType;
9
+ kameleoonConfiguration: ConfigurationDataType;
10
+ lastUpdate: string;
11
+ };
12
+ export type ExperimentVariationsType = {
13
+ [experimentId: string]: VariationType;
14
+ };
15
+ export type VariationDataType = {
16
+ [visitorCode: string]: ExperimentVariationsType;
17
+ };
18
+ export type StorageDataType = ClientDataType | VariationDataType;
19
+ export interface IStorage<T> {
20
+ read: () => Result<T, KameleoonError>;
21
+ write: (data: T) => Result<void, KameleoonError>;
7
22
  }
8
- export interface VisitorVariationInterface {
9
- variationId: number;
10
- respoolTime?: number;
11
- assignmentDate?: Date;
12
- isValid: () => boolean;
23
+ /**
24
+ * @interface an interface of External Constructor for Storage which must be implemented by the wrapper constructor to initialize new `IExternalStorage` in order to be able to pass necessary initialization parameters
25
+ * */
26
+ export interface IExternalStorageConstructor {
27
+ /**
28
+ * @method initialize - creates and instance of `IExternalStorage` and returns it
29
+ * @param {KameleoonStorageKey} key - an enum variant containing keys for Kameleoon SDK related data stored on storage
30
+ * @returns {IExternalEventSource} an initialized instance of `IExternalEventSource`
31
+ * */
32
+ initialize: (key: KameleoonStorageKey) => IExternalStorage;
33
+ }
34
+ /**
35
+ * @interface an interface of External Storage which must be implemented to be used as external storage for initialized JS SDK Core.
36
+ * Note: Only React Native SDK supports external storage for the moment
37
+ * */
38
+ export interface IExternalStorage {
39
+ /**
40
+ * @property key - an Enum `KameleoonStorageKey` variant containing a key for Kameleoon SDK related data stored on storage
41
+ * */
42
+ readonly key: KameleoonStorageKey;
43
+ /**
44
+ * @method read - reads data from the storage
45
+ * @returns {Result<string, KameleoonError>} result with an `ok` boolean field indicated success or error. If result is ok contains `data` field with a type `string`, if not contains `error` field with a type of `KameleoonError`
46
+ * */
47
+ read: () => Result<string, KameleoonError>;
48
+ /**
49
+ * @method write - writes data to storage
50
+ * @param {string} data - string representation of data
51
+ * @returns {Result<void, KameleoonError>} result with an `ok` boolean field indicated success or error. If result is ok contains an empty `data`, if not contains `error` field with a type of `KameleoonError`
52
+ * */
53
+ write: (data: string) => Result<void, KameleoonError>;
13
54
  }
@@ -0,0 +1,6 @@
1
+ import { Result } from 'ts-res';
2
+ import { KameleoonError } from '../../kameleoonError';
3
+ import { ConditionDataType, ConditionType } from './types';
4
+ export declare class ConditionFactory {
5
+ static createCondition(data: ConditionDataType): Result<ConditionType, KameleoonError>;
6
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConditionFactory = void 0;
4
+ const ts_res_1 = require("ts-res");
5
+ const kameleoonError_1 = require("../../kameleoonError");
6
+ const types_1 = require("../types");
7
+ const customDataCondition_1 = require("./customDataCondition");
8
+ const exclusiveExperimentCondition_1 = require("./exclusiveExperimentCondition");
9
+ const targetExperimentCondition_1 = require("./targetExperimentCondition");
10
+ class ConditionFactory {
11
+ static createCondition(data) {
12
+ const { targetingType } = data;
13
+ switch (targetingType) {
14
+ case types_1.TargetingType.CUSTOM_DATUM:
15
+ return (0, ts_res_1.Ok)(new customDataCondition_1.CustomDataCondition(data));
16
+ case types_1.TargetingType.EXCLUSIVE_EXPERIMENT:
17
+ return (0, ts_res_1.Ok)(new exclusiveExperimentCondition_1.ExclusiveExperimentCondition(data));
18
+ case types_1.TargetingType.TARGET_EXPERIMENT:
19
+ return (0, ts_res_1.Ok)(new targetExperimentCondition_1.TargetExperimentCondition(data));
20
+ default:
21
+ return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.TargetingCondition, targetingType));
22
+ }
23
+ }
24
+ }
25
+ exports.ConditionFactory = ConditionFactory;
26
+ //# sourceMappingURL=conditionFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditionFactory.js","sourceRoot":"","sources":["../../../src/targeting/conditions/conditionFactory.ts"],"names":[],"mappings":";;;AAAA,mCAAyC;AACzC,yDAA0E;AAC1E,oCAAyC;AACzC,+DAA4D;AAC5D,iFAA8E;AAC9E,2EAAwE;AAGxE,MAAa,gBAAgB;IAC3B,MAAM,CAAC,eAAe,CACpB,IAAuB;QAEvB,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAE/B,QAAQ,aAAa,EAAE;YACrB,KAAK,qBAAa,CAAC,YAAY;gBAC7B,OAAO,IAAA,WAAE,EAAC,IAAI,yCAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C,KAAK,qBAAa,CAAC,oBAAoB;gBACrC,OAAO,IAAA,WAAE,EAAC,IAAI,2DAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;YACpD,KAAK,qBAAa,CAAC,iBAAiB;gBAClC,OAAO,IAAA,WAAE,EAAC,IAAI,qDAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD;gBACE,OAAO,IAAA,YAAG,EACR,IAAI,+BAAc,CAChB,mCAAkB,CAAC,kBAAkB,EACrC,aAAa,CACd,CACF,CAAC;SACL;IACH,CAAC;CACF;AAtBD,4CAsBC"}
@@ -0,0 +1,16 @@
1
+ import { Result } from 'ts-res';
2
+ import { KameleoonError } from '../../kameleoonError';
3
+ import { EvaluationDataType } from '../types';
4
+ import { ConditionDataType, ICondition } from './types';
5
+ export declare class CustomDataCondition implements ICondition {
6
+ private customDataIndex;
7
+ private matchType;
8
+ private inverseResult;
9
+ private conditionValue;
10
+ private error?;
11
+ constructor({ customDataIndex, valueMatchType, isInclude, value, }: ConditionDataType);
12
+ evaluate({ targetingData, }: EvaluationDataType): Result<boolean, KameleoonError>;
13
+ private checkCondition;
14
+ private parseRegExp;
15
+ private parseArray;
16
+ }
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomDataCondition = void 0;
4
+ const ts_res_1 = require("ts-res");
5
+ const kameleoonData_1 = require("../../kameleoonData");
6
+ const kameleoonError_1 = require("../../kameleoonError");
7
+ const types_1 = require("../types");
8
+ class CustomDataCondition {
9
+ constructor({ customDataIndex, valueMatchType, isInclude, value, }) {
10
+ this.customDataIndex = Number(customDataIndex);
11
+ this.inverseResult = !(isInclude !== null && isInclude !== void 0 ? isInclude : true);
12
+ this.matchType = valueMatchType;
13
+ this.conditionValue = value;
14
+ }
15
+ evaluate({ targetingData, }) {
16
+ const isCustomData = (data) => data.type === kameleoonData_1.KameleoonData.CustomData;
17
+ const filteredData = targetingData
18
+ .map((item) => item.data)
19
+ .filter(isCustomData)
20
+ .filter((item) => item.index === this.customDataIndex);
21
+ if (filteredData.length) {
22
+ const lastDataItem = filteredData[filteredData.length - 1];
23
+ const { value: customDataValue } = lastDataItem;
24
+ const result = this.inverseResult
25
+ ? !this.checkCondition(customDataValue)
26
+ : this.checkCondition(customDataValue);
27
+ if (this.error) {
28
+ return (0, ts_res_1.Err)(this.error);
29
+ }
30
+ else {
31
+ return (0, ts_res_1.Ok)(result);
32
+ }
33
+ }
34
+ return (0, ts_res_1.Ok)(this.matchType === types_1.MatchTypeCustomData.UNDEFINED);
35
+ }
36
+ checkCondition(customDataValue) {
37
+ if (this.conditionValue === null) {
38
+ return false;
39
+ }
40
+ // --- Note ---
41
+ // `AMONG_VALUES` is checked separately to avoid recursion overhead
42
+ // for `JSON.parse` inside `this.parseArray`
43
+ if (this.matchType === types_1.MatchTypeCustomData.AMONG_VALUES) {
44
+ const result = this.parseArray(this.conditionValue);
45
+ if (!result.ok) {
46
+ this.error = result.error;
47
+ return false;
48
+ }
49
+ const resultData = new Set(result.data);
50
+ return Array.isArray(customDataValue)
51
+ ? customDataValue.some((value) => resultData.has(value))
52
+ : result.data.includes(customDataValue);
53
+ }
54
+ if (Array.isArray(customDataValue)) {
55
+ return customDataValue.some((value) => this.checkCondition(value));
56
+ }
57
+ switch (this.matchType) {
58
+ case types_1.MatchTypeCustomData.CONTAINS:
59
+ return customDataValue.includes(this.conditionValue);
60
+ case types_1.MatchTypeCustomData.EXACT:
61
+ return customDataValue === this.conditionValue;
62
+ case types_1.MatchTypeCustomData.REGULAR_EXPRESSION:
63
+ return this.parseRegExp(this.conditionValue).test(customDataValue);
64
+ case types_1.MatchTypeCustomData.LOWER:
65
+ return Number(customDataValue) < Number(this.conditionValue);
66
+ case types_1.MatchTypeCustomData.EQUAL:
67
+ return Number(customDataValue) === Number(this.conditionValue);
68
+ case types_1.MatchTypeCustomData.GREATER:
69
+ return Number(customDataValue) > Number(this.conditionValue);
70
+ case types_1.MatchTypeCustomData.TRUE:
71
+ return customDataValue.toLowerCase() === 'true';
72
+ case types_1.MatchTypeCustomData.FALSE:
73
+ return customDataValue.toLowerCase() === 'false';
74
+ default:
75
+ return false;
76
+ }
77
+ }
78
+ parseRegExp(value) {
79
+ if (value[0] === '/') {
80
+ const [_, expression, flags] = value.split('/');
81
+ return new RegExp(expression, flags);
82
+ }
83
+ return new RegExp(value);
84
+ }
85
+ parseArray(value) {
86
+ try {
87
+ const result = JSON.parse(value);
88
+ if (Array.isArray(result)) {
89
+ return (0, ts_res_1.Ok)(result);
90
+ }
91
+ }
92
+ catch (err) {
93
+ return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.AmongValuesCheck, err, value));
94
+ }
95
+ return (0, ts_res_1.Ok)([]);
96
+ }
97
+ }
98
+ exports.CustomDataCondition = CustomDataCondition;
99
+ //# sourceMappingURL=customDataCondition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customDataCondition.js","sourceRoot":"","sources":["../../../src/targeting/conditions/customDataCondition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Result } from 'ts-res';
2
+ import { KameleoonError } from '../../kameleoonError';
3
+ import { EvaluationDataType } from '../types';
4
+ import { ConditionDataType, ICondition } from './types';
5
+ export declare class ExclusiveExperimentCondition implements ICondition {
6
+ private inverseResult;
7
+ constructor({ isInclude }: ConditionDataType);
8
+ evaluate({ experimentId, variationData, }: EvaluationDataType): Result<boolean, KameleoonError>;
9
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExclusiveExperimentCondition = void 0;
4
+ const ts_res_1 = require("ts-res");
5
+ class ExclusiveExperimentCondition {
6
+ constructor({ isInclude }) {
7
+ this.inverseResult = !(isInclude !== null && isInclude !== void 0 ? isInclude : true);
8
+ }
9
+ evaluate({ experimentId, variationData, }) {
10
+ const keys = Object.keys(variationData);
11
+ const isEmpty = !keys.length;
12
+ // --- Note ---
13
+ // Meaning the next variation assignment won't add new experiment
14
+ // but rather overwrite the existing one
15
+ const isExclusive = keys.length === 1 && keys[0] === String(experimentId);
16
+ const isSatisfied = isEmpty || isExclusive;
17
+ return (0, ts_res_1.Ok)(this.inverseResult ? !isSatisfied : isSatisfied);
18
+ }
19
+ }
20
+ exports.ExclusiveExperimentCondition = ExclusiveExperimentCondition;
21
+ //# sourceMappingURL=exclusiveExperimentCondition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exclusiveExperimentCondition.js","sourceRoot":"","sources":["../../../src/targeting/conditions/exclusiveExperimentCondition.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAKpC,MAAa,4BAA4B;IAGvC,YAAY,EAAE,SAAS,EAAqB;QAC1C,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ,CAAC,EACP,YAAY,EACZ,aAAa,GACM;QACnB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,eAAe;QACf,iEAAiE;QACjE,wCAAwC;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC;QAE1E,MAAM,WAAW,GAAG,OAAO,IAAI,WAAW,CAAC;QAE3C,OAAO,IAAA,WAAE,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC;CACF;AAtBD,oEAsBC"}