@kameleoon/javascript-sdk-core 1.1.1 → 2.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 (138) hide show
  1. package/dist/campaignConfiguration/campaignConfiguration.d.ts +2 -1
  2. package/dist/campaignConfiguration/campaignConfiguration.js +239 -197
  3. package/dist/campaignConfiguration/campaignConfiguration.js.map +1 -1
  4. package/dist/campaignConfiguration/constants.js +20 -14
  5. package/dist/campaignConfiguration/constants.js.map +1 -1
  6. package/dist/campaignConfiguration/index.js +78 -6
  7. package/dist/campaignConfiguration/index.js.map +1 -1
  8. package/dist/campaignConfiguration/types.d.ts +3 -2
  9. package/dist/campaignConfiguration/types.js +53 -45
  10. package/dist/campaignConfiguration/types.js.map +1 -1
  11. package/dist/clientSettings/clientSettings.d.ts +1 -1
  12. package/dist/clientSettings/clientSettings.js +28 -21
  13. package/dist/clientSettings/clientSettings.js.map +1 -1
  14. package/dist/clientSettings/index.js +18 -4
  15. package/dist/clientSettings/index.js.map +1 -1
  16. package/dist/clientSettings/types.d.ts +1 -1
  17. package/dist/clientSettings/types.js +4 -1
  18. package/dist/clientSettings/types.js.map +1 -1
  19. package/dist/constants.js +22 -14
  20. package/dist/constants.js.map +1 -1
  21. package/dist/eventSource/constants.js +6 -2
  22. package/dist/eventSource/constants.js.map +1 -1
  23. package/dist/eventSource/externalEventSource.js +28 -20
  24. package/dist/eventSource/externalEventSource.js.map +1 -1
  25. package/dist/eventSource/index.js +49 -6
  26. package/dist/eventSource/index.js.map +1 -1
  27. package/dist/eventSource/types.d.ts +1 -1
  28. package/dist/eventSource/types.js +4 -1
  29. package/dist/eventSource/types.js.map +1 -1
  30. package/dist/hasher/constants.js +6 -2
  31. package/dist/hasher/constants.js.map +1 -1
  32. package/dist/hasher/hasher.js +35 -24
  33. package/dist/hasher/hasher.js.map +1 -1
  34. package/dist/hasher/index.js +11 -4
  35. package/dist/hasher/index.js.map +1 -1
  36. package/dist/hasher/types.js +4 -1
  37. package/dist/hasher/types.js.map +1 -1
  38. package/dist/index.d.ts +2 -1
  39. package/dist/index.js +297 -28
  40. package/dist/index.js.map +1 -1
  41. package/dist/kameleoonClient.d.ts +16 -16
  42. package/dist/kameleoonClient.js +307 -236
  43. package/dist/kameleoonClient.js.map +1 -1
  44. package/dist/kameleoonData/browser.js +37 -32
  45. package/dist/kameleoonData/browser.js.map +1 -1
  46. package/dist/kameleoonData/constants.js +6 -2
  47. package/dist/kameleoonData/constants.js.map +1 -1
  48. package/dist/kameleoonData/conversion.js +47 -40
  49. package/dist/kameleoonData/conversion.js.map +1 -1
  50. package/dist/kameleoonData/customData.js +62 -58
  51. package/dist/kameleoonData/customData.js.map +1 -1
  52. package/dist/kameleoonData/device.js +37 -32
  53. package/dist/kameleoonData/device.js.map +1 -1
  54. package/dist/kameleoonData/index.js +101 -18
  55. package/dist/kameleoonData/index.js.map +1 -1
  56. package/dist/kameleoonData/nonce.js +25 -13
  57. package/dist/kameleoonData/nonce.js.map +1 -1
  58. package/dist/kameleoonData/pageView.js +52 -44
  59. package/dist/kameleoonData/pageView.js.map +1 -1
  60. package/dist/kameleoonData/types.js +41 -26
  61. package/dist/kameleoonData/types.js.map +1 -1
  62. package/dist/kameleoonData/userAgent.js +33 -24
  63. package/dist/kameleoonData/userAgent.js.map +1 -1
  64. package/dist/kameleoonError/constants.js +25 -21
  65. package/dist/kameleoonError/constants.js.map +1 -1
  66. package/dist/kameleoonError/helpers.js +6 -4
  67. package/dist/kameleoonError/helpers.js.map +1 -1
  68. package/dist/kameleoonError/index.js +25 -8
  69. package/dist/kameleoonError/index.js.map +1 -1
  70. package/dist/kameleoonError/kameleoonError.js +64 -53
  71. package/dist/kameleoonError/kameleoonError.js.map +1 -1
  72. package/dist/kameleoonError/types.js +26 -22
  73. package/dist/kameleoonError/types.js.map +1 -1
  74. package/dist/kameleoonUtils.js +34 -33
  75. package/dist/kameleoonUtils.js.map +1 -1
  76. package/dist/requester/constants.d.ts +6 -7
  77. package/dist/requester/constants.js +58 -45
  78. package/dist/requester/constants.js.map +1 -1
  79. package/dist/requester/index.d.ts +2 -2
  80. package/dist/requester/index.js +67 -8
  81. package/dist/requester/index.js.map +1 -1
  82. package/dist/requester/requester.d.ts +7 -7
  83. package/dist/requester/requester.js +100 -113
  84. package/dist/requester/requester.js.map +1 -1
  85. package/dist/requester/types.d.ts +38 -10
  86. package/dist/requester/types.js +14 -36
  87. package/dist/requester/types.js.map +1 -1
  88. package/dist/storage/constants.js +11 -7
  89. package/dist/storage/constants.js.map +1 -1
  90. package/dist/storage/externalStorage.js +33 -26
  91. package/dist/storage/externalStorage.js.map +1 -1
  92. package/dist/storage/index.js +55 -6
  93. package/dist/storage/index.js.map +1 -1
  94. package/dist/storage/types.js +4 -1
  95. package/dist/storage/types.js.map +1 -1
  96. package/dist/targeting/conditions/conditionFactory.js +24 -19
  97. package/dist/targeting/conditions/conditionFactory.js.map +1 -1
  98. package/dist/targeting/conditions/customDataCondition.js +99 -88
  99. package/dist/targeting/conditions/customDataCondition.js.map +1 -1
  100. package/dist/targeting/conditions/exclusiveExperimentCondition.js +27 -15
  101. package/dist/targeting/conditions/exclusiveExperimentCondition.js.map +1 -1
  102. package/dist/targeting/conditions/index.js +45 -10
  103. package/dist/targeting/conditions/index.js.map +1 -1
  104. package/dist/targeting/conditions/targetExperimentCondition.js +54 -32
  105. package/dist/targeting/conditions/targetExperimentCondition.js.map +1 -1
  106. package/dist/targeting/conditions/types.js +4 -1
  107. package/dist/targeting/conditions/types.js.map +1 -1
  108. package/dist/targeting/index.js +79 -13
  109. package/dist/targeting/index.js.map +1 -1
  110. package/dist/targeting/targetingNode.js +41 -33
  111. package/dist/targeting/targetingNode.js.map +1 -1
  112. package/dist/targeting/targetingTree.js +125 -104
  113. package/dist/targeting/targetingTree.js.map +1 -1
  114. package/dist/targeting/types.js +99 -91
  115. package/dist/targeting/types.js.map +1 -1
  116. package/dist/types.d.ts +17 -2
  117. package/dist/types.js +50 -21
  118. package/dist/types.js.map +1 -1
  119. package/dist/utilities/constants.js +6 -2
  120. package/dist/utilities/constants.js.map +1 -1
  121. package/dist/utilities/index.js +11 -4
  122. package/dist/utilities/index.js.map +1 -1
  123. package/dist/utilities/types.d.ts +1 -1
  124. package/dist/utilities/types.js +4 -1
  125. package/dist/utilities/types.js.map +1 -1
  126. package/dist/utilities/utilities.d.ts +2 -2
  127. package/dist/utilities/utilities.js +117 -105
  128. package/dist/utilities/utilities.js.map +1 -1
  129. package/dist/variationConfiguration/index.js +24 -4
  130. package/dist/variationConfiguration/index.js.map +1 -1
  131. package/dist/variationConfiguration/types.js +4 -1
  132. package/dist/variationConfiguration/types.js.map +1 -1
  133. package/dist/variationConfiguration/variation.js +35 -28
  134. package/dist/variationConfiguration/variation.js.map +1 -1
  135. package/dist/variationConfiguration/variationConfiguration.d.ts +5 -5
  136. package/dist/variationConfiguration/variationConfiguration.js +270 -228
  137. package/dist/variationConfiguration/variationConfiguration.js.map +1 -1
  138. package/package.json +6 -4
@@ -1,119 +1,131 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
3
6
  exports.Utilities = void 0;
4
- const ts_res_1 = require("ts-res");
5
- const kameleoonError_1 = require("../kameleoonError");
6
- const types_1 = require("../types");
7
- const targeting_1 = require("../targeting");
8
- const constants_1 = require("./constants");
9
- const campaignConfiguration_1 = require("../campaignConfiguration");
10
- const kameleoonData_1 = require("../kameleoonData");
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");
11
13
  class Utilities {
12
- static checkTargeting({ segment, visitorCode, targetingData, experimentId, variationConfiguration, }) {
13
- if (!segment || !segment.conditionsData.firstLevel.length) {
14
- return (0, ts_res_1.Ok)(true);
15
- }
16
- if (!variationConfiguration) {
17
- return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.Initialization));
18
- }
19
- let variations = {};
20
- const assignedVariationsResult = variationConfiguration.getAssignedVariations(visitorCode);
21
- if (assignedVariationsResult.ok) {
22
- variations = assignedVariationsResult.data;
23
- }
24
- const targetingTree = new targeting_1.TargetingTree(segment);
25
- const result = targetingTree.evaluate({
26
- targetingData: targetingData || [],
27
- variationData: variations,
28
- experimentId,
29
- });
30
- return result;
14
+ static checkTargeting({
15
+ segment,
16
+ visitorCode,
17
+ targetingData,
18
+ experimentId,
19
+ variationConfiguration
20
+ }) {
21
+ if (!segment || !segment.conditionsData.firstLevel.length) {
22
+ return (0, _tsRes.Ok)(true);
31
23
  }
32
- static validateVisitorCode(visitorCode) {
33
- if (visitorCode.length > constants_1.VISITOR_CODE_MAX_LENGTH) {
34
- return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.VisitorCodeMaxLength));
35
- }
36
- return (0, ts_res_1.Ok)();
24
+ if (!variationConfiguration) {
25
+ return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.Initialization));
26
+ }
27
+ let variations = {};
28
+ const assignedVariationsResult = variationConfiguration.getAssignedVariations(visitorCode);
29
+ if (assignedVariationsResult.ok) {
30
+ variations = assignedVariationsResult.data;
37
31
  }
38
- static getDataUrl(visitorCode, campaignConfiguration) {
39
- const unsentData = campaignConfiguration.getUnsentData(visitorCode);
40
- const concatenatedUrl = unsentData.reduce((previousItem, currentItem) => {
41
- return previousItem + currentItem.url;
42
- }, '');
43
- return concatenatedUrl;
32
+ const targetingTree = new _targeting.TargetingTree(segment);
33
+ const result = targetingTree.evaluate({
34
+ targetingData: targetingData || [],
35
+ variationData: variations,
36
+ experimentId
37
+ });
38
+ return result;
39
+ }
40
+ static validateVisitorCode(visitorCode) {
41
+ if (visitorCode.length > _constants.VISITOR_CODE_MAX_LENGTH) {
42
+ return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.VisitorCodeMaxLength));
44
43
  }
45
- static trackExperimentationRule({ featureFlagVariation, campaignConfiguration, visitorCode, requester, userAgent, }) {
46
- const { variationId, rule } = featureFlagVariation;
47
- if (!rule || rule.type !== campaignConfiguration_1.RuleType.EXPERIMENTATION) {
48
- throw new Error('Internal usage error, make sure to use `trackExperimentationRule` for existing rule with type `RuleType.EXPERIMENTATION`');
44
+ return (0, _tsRes.Ok)();
45
+ }
46
+ static getDataUrl(visitorCode, campaignConfiguration) {
47
+ const unsentData = campaignConfiguration.getUnsentData(visitorCode);
48
+ return unsentData.map(item => item.url).join('\n');
49
+ }
50
+ static trackRule({
51
+ featureFlagVariation,
52
+ campaignConfiguration,
53
+ visitorCode,
54
+ requester,
55
+ userAgent
56
+ }) {
57
+ const {
58
+ variationId,
59
+ rule
60
+ } = featureFlagVariation;
61
+ if (!rule) {
62
+ throw new Error('Internal usage error, make sure to use `trackRule` for existing rule');
63
+ }
64
+ const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);
65
+ const resultVariationId = variationId || 0;
66
+ const isUnallocated = !variationId;
67
+ const callback = () => campaignConfiguration.clearUnsentData;
68
+ requester.trackExperiment({
69
+ visitorCode,
70
+ isUnallocated,
71
+ body: dataUrl,
72
+ callback,
73
+ experimentId: rule.experimentId,
74
+ variationId: resultVariationId,
75
+ userAgent
76
+ });
77
+ }
78
+ static parseFeatureVariable(variable) {
79
+ const {
80
+ type,
81
+ value
82
+ } = variable;
83
+ switch (type) {
84
+ case _types.VariableType.BOOLEAN:
85
+ return (0, _tsRes.Ok)({
86
+ type,
87
+ value: Boolean(value)
88
+ });
89
+ case _types.VariableType.STRING:
90
+ return (0, _tsRes.Ok)({
91
+ type,
92
+ value: String(value)
93
+ });
94
+ case _types.VariableType.NUMBER:
95
+ const numberValue = Number(value);
96
+ if (Number.isNaN(numberValue)) {
97
+ return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.NumberParse, String(value)));
49
98
  }
50
- const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);
51
- const resultVariationId = variationId || 0;
52
- const isUnallocated = !variationId;
53
- const callback = () => campaignConfiguration.clearUnsentData;
54
- requester.trackExperiment({
55
- visitorCode,
56
- isUnallocated,
57
- body: dataUrl,
58
- callback,
59
- // --- Note ---
60
- // For `RuleType.EXPERIMENTATION` `experimentId` can not be null
61
- experimentId: rule.experimentId,
62
- variationId: resultVariationId,
63
- userAgent,
99
+ return (0, _tsRes.Ok)({
100
+ type,
101
+ value: numberValue
64
102
  });
65
- }
66
- static parseFeatureVariable(variable) {
67
- const { type, value } = variable;
68
- switch (type) {
69
- case types_1.VariableType.BOOLEAN:
70
- return (0, ts_res_1.Ok)({
71
- type,
72
- value: Boolean(value),
73
- });
74
- case types_1.VariableType.STRING:
75
- return (0, ts_res_1.Ok)({
76
- type,
77
- value: String(value),
78
- });
79
- case types_1.VariableType.NUMBER:
80
- const numberValue = Number(value);
81
- if (Number.isNaN(numberValue)) {
82
- return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.NumberParse, String(value)));
83
- }
84
- return (0, ts_res_1.Ok)({
85
- type,
86
- value: numberValue,
87
- });
88
- case types_1.VariableType.JSON:
89
- try {
90
- const jsonValue = JSON.parse(String(variable.value));
91
- return (0, ts_res_1.Ok)({
92
- type,
93
- value: jsonValue,
94
- });
95
- }
96
- catch (err) {
97
- return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.JSONParse, err));
98
- }
99
- default:
100
- (0, kameleoonError_1.exhaustCheck)(type);
103
+ case _types.VariableType.JSON:
104
+ try {
105
+ const jsonValue = JSON.parse(String(variable.value));
106
+ return (0, _tsRes.Ok)({
107
+ type,
108
+ value: jsonValue
109
+ });
110
+ } catch (err) {
111
+ return (0, _tsRes.Err)(new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.JSONParse, err));
101
112
  }
113
+ default:
114
+ (0, _kameleoonError.exhaustCheck)(type);
102
115
  }
103
- static getUserAgent(visitorCode, campaignConfiguration) {
104
- const isUserAgent = (data) => data.type === kameleoonData_1.KameleoonData.UserAgent;
105
- const targetingData = campaignConfiguration.storedTargetingData[visitorCode];
106
- if (targetingData) {
107
- const filteredData = targetingData
108
- .map((item) => item.data)
109
- .filter(isUserAgent);
110
- if (filteredData.length) {
111
- const [userAgentData] = filteredData;
112
- return userAgentData.value;
113
- }
114
- }
115
- return undefined;
116
+ }
117
+ static getUserAgent(visitorCode, campaignConfiguration) {
118
+ const isUserAgent = data => data.type === _kameleoonData.KameleoonData.UserAgent;
119
+ const targetingData = campaignConfiguration.storedTargetingData[visitorCode];
120
+ if (targetingData) {
121
+ const filteredData = targetingData.map(item => item.data).filter(isUserAgent);
122
+ if (filteredData.length) {
123
+ const [userAgentData] = filteredData;
124
+ return userAgentData.value;
125
+ }
116
126
  }
127
+ return undefined;
128
+ }
117
129
  }
118
130
  exports.Utilities = Utilities;
119
131
  //# sourceMappingURL=utilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.js","sourceRoot":"","sources":["../../src/utilities/utilities.ts"],"names":[],"mappings":";;;AAAA,mCAAyC;AACzC,sDAI2B;AAM3B,oCAAmE;AACnE,4CAA6C;AAC7C,2CAAsD;AACtD,oEAKkC;AAClC,oDAI0B;AAE1B,MAAa,SAAS;IACpB,MAAM,CAAC,cAAc,CAAC,EACpB,OAAO,EACP,WAAW,EACX,aAAa,EACb,YAAY,EACZ,sBAAsB,GACG;QACzB,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE;YACzD,OAAO,IAAA,WAAE,EAAC,IAAI,CAAC,CAAC;SACjB;QAED,IAAI,CAAC,sBAAsB,EAAE;YAC3B,OAAO,IAAA,YAAG,EAAC,IAAI,+BAAc,CAAC,mCAAkB,CAAC,cAAc,CAAC,CAAC,CAAC;SACnE;QAED,IAAI,UAAU,GAA6B,EAAE,CAAC;QAE9C,MAAM,wBAAwB,GAC5B,sBAAsB,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAE5D,IAAI,wBAAwB,CAAC,EAAE,EAAE;YAC/B,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC;SAC5C;QAED,MAAM,aAAa,GAAG,IAAI,yBAAa,CAAC,OAAO,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;YACpC,aAAa,EAAE,aAAa,IAAI,EAAE;YAClC,aAAa,EAAE,UAAU;YACzB,YAAY;SACb,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,mBAAmB,CACxB,WAAmB;QAEnB,IAAI,WAAW,CAAC,MAAM,GAAG,mCAAuB,EAAE;YAChD,OAAO,IAAA,YAAG,EAAC,IAAI,+BAAc,CAAC,mCAAkB,CAAC,oBAAoB,CAAC,CAAC,CAAC;SACzE;QAED,OAAO,IAAA,WAAE,GAAE,CAAC;IACd,CAAC;IAED,MAAM,CAAC,UAAU,CACf,WAAmB,EACnB,qBAA4C;QAE5C,MAAM,UAAU,GAAG,qBAAqB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAEpE,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;YACtE,OAAO,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC;QACxC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,SAAS,EACT,SAAS,GAC0B;QACnC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,oBAAoB,CAAC;QAEnD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,gCAAQ,CAAC,eAAe,EAAE;YACnD,MAAM,IAAI,KAAK,CACb,0HAA0H,CAC3H,CAAC;SACH;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;QAEpE,MAAM,iBAAiB,GAAG,WAAW,IAAI,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,CAAC,WAAW,CAAC;QACnC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,qBAAqB,CAAC,eAAe,CAAC;QAE7D,SAAS,CAAC,eAAe,CAAC;YACxB,WAAW;YACX,aAAa;YACb,IAAI,EAAE,OAAO;YACb,QAAQ;YACR,eAAe;YACf,gEAAgE;YAChE,YAAY,EAAE,IAAI,CAAC,YAAsB;YACzC,WAAW,EAAE,iBAAiB;YAC9B,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,oBAAoB,CACzB,QAA6B;QAE7B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QAEjC,QAAQ,IAAI,EAAE;YACZ,KAAK,oBAAY,CAAC,OAAO;gBACvB,OAAO,IAAA,WAAE,EAAC;oBACR,IAAI;oBACJ,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;iBACtB,CAAC,CAAC;YACL,KAAK,oBAAY,CAAC,MAAM;gBACtB,OAAO,IAAA,WAAE,EAAC;oBACR,IAAI;oBACJ,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;iBACrB,CAAC,CAAC;YACL,KAAK,oBAAY,CAAC,MAAM;gBACtB,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAElC,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;oBAC7B,OAAO,IAAA,YAAG,EACR,IAAI,+BAAc,CAAC,mCAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAClE,CAAC;iBACH;gBAED,OAAO,IAAA,WAAE,EAAC;oBACR,IAAI;oBACJ,KAAK,EAAE,WAAW;iBACnB,CAAC,CAAC;YACL,KAAK,oBAAY,CAAC,IAAI;gBACpB,IAAI;oBACF,MAAM,SAAS,GAAa,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;oBAE/D,OAAO,IAAA,WAAE,EAAC;wBACR,IAAI;wBACJ,KAAK,EAAE,SAAS;qBACjB,CAAC,CAAC;iBACJ;gBAAC,OAAO,GAAG,EAAE;oBACZ,OAAO,IAAA,YAAG,EAAC,IAAI,+BAAc,CAAC,mCAAkB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;iBACnE;YACH;gBACE,IAAA,6BAAY,EAAC,IAAI,CAAC,CAAC;SACtB;IACH,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,WAAmB,EACnB,qBAA4C;QAE5C,MAAM,WAAW,GAAG,CAClB,IAA2B,EACA,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,6BAAa,CAAC,SAAS,CAAC;QACtE,MAAM,aAAa,GACjB,qBAAqB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAEzD,IAAI,aAAa,EAAE;YACjB,MAAM,YAAY,GAAG,aAAa;iBAC/B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;iBACxB,MAAM,CAAC,WAAW,CAAC,CAAC;YAEvB,IAAI,YAAY,CAAC,MAAM,EAAE;gBACvB,MAAM,CAAC,aAAa,CAAC,GAAG,YAAY,CAAC;gBAErC,OAAO,aAAa,CAAC,KAAK,CAAC;aAC5B;SACF;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAlKD,8BAkKC"}
1
+ {"version":3,"file":"utilities.js","names":["_tsRes","require","_kameleoonError","_types","_targeting","_constants","_kameleoonData","Utilities","checkTargeting","segment","visitorCode","targetingData","experimentId","variationConfiguration","conditionsData","firstLevel","length","Ok","Err","KameleoonError","KameleoonException","Initialization","variations","assignedVariationsResult","getAssignedVariations","ok","data","targetingTree","TargetingTree","result","evaluate","variationData","validateVisitorCode","VISITOR_CODE_MAX_LENGTH","VisitorCodeMaxLength","getDataUrl","campaignConfiguration","unsentData","getUnsentData","map","item","url","join","trackRule","featureFlagVariation","requester","userAgent","variationId","rule","Error","dataUrl","resultVariationId","isUnallocated","callback","clearUnsentData","trackExperiment","body","parseFeatureVariable","variable","type","value","VariableType","BOOLEAN","Boolean","STRING","String","NUMBER","numberValue","Number","isNaN","NumberParse","JSON","jsonValue","parse","err","JSONParse","exhaustCheck","getUserAgent","isUserAgent","KameleoonData","UserAgent","storedTargetingData","filteredData","filter","userAgentData","undefined","exports"],"sources":["../../src/utilities/utilities.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport {\n KameleoonError,\n KameleoonException,\n exhaustCheck,\n} from '../kameleoonError';\nimport { ExperimentVariationsType } from '../storage';\nimport { CheckTargetingParamsType, TrackRuleParamsType } from './types';\nimport { FeatureVariableResultType, VariableType } from '../types';\nimport { TargetingTree } from '../targeting';\nimport { VISITOR_CODE_MAX_LENGTH } from './constants';\nimport {\n CampaignConfiguration,\n FeatureVariableType,\n JSONType,\n} from '../campaignConfiguration';\nimport {\n KameleoonData,\n KameleoonDataItemType,\n UserAgentDataType,\n} from '../kameleoonData';\n\nexport class Utilities {\n static checkTargeting({\n segment,\n visitorCode,\n targetingData,\n experimentId,\n variationConfiguration,\n }: CheckTargetingParamsType): Result<boolean, KameleoonError> {\n if (!segment || !segment.conditionsData.firstLevel.length) {\n return Ok(true);\n }\n\n if (!variationConfiguration) {\n return Err(new KameleoonError(KameleoonException.Initialization));\n }\n\n let variations: ExperimentVariationsType = {};\n\n const assignedVariationsResult =\n variationConfiguration.getAssignedVariations(visitorCode);\n\n if (assignedVariationsResult.ok) {\n variations = assignedVariationsResult.data;\n }\n\n const targetingTree = new TargetingTree(segment);\n\n const result = targetingTree.evaluate({\n targetingData: targetingData || [],\n variationData: variations,\n experimentId,\n });\n\n return result;\n }\n\n static validateVisitorCode(\n visitorCode: string,\n ): Result<void, KameleoonError> {\n if (visitorCode.length > VISITOR_CODE_MAX_LENGTH) {\n return Err(new KameleoonError(KameleoonException.VisitorCodeMaxLength));\n }\n\n return Ok();\n }\n\n static getDataUrl(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string {\n const unsentData = campaignConfiguration.getUnsentData(visitorCode);\n\n return unsentData.map((item) => item.url).join('\\n');\n }\n\n static trackRule({\n featureFlagVariation,\n campaignConfiguration,\n visitorCode,\n requester,\n userAgent,\n }: TrackRuleParamsType): void {\n const { variationId, rule } = featureFlagVariation;\n\n if (!rule) {\n throw new Error(\n 'Internal usage error, make sure to use `trackRule` for existing rule',\n );\n }\n\n const dataUrl = this.getDataUrl(visitorCode, campaignConfiguration);\n\n const resultVariationId = variationId || 0;\n const isUnallocated = !variationId;\n const callback = () => campaignConfiguration.clearUnsentData;\n\n requester.trackExperiment({\n visitorCode,\n isUnallocated,\n body: dataUrl,\n callback,\n experimentId: rule.experimentId,\n variationId: resultVariationId,\n userAgent,\n });\n }\n\n static parseFeatureVariable(\n variable: FeatureVariableType,\n ): Result<FeatureVariableResultType, KameleoonError> {\n const { type, value } = variable;\n\n switch (type) {\n case VariableType.BOOLEAN:\n return Ok({\n type,\n value: Boolean(value),\n });\n case VariableType.STRING:\n return Ok({\n type,\n value: String(value),\n });\n case VariableType.NUMBER:\n const numberValue = Number(value);\n\n if (Number.isNaN(numberValue)) {\n return Err(\n new KameleoonError(KameleoonException.NumberParse, String(value)),\n );\n }\n\n return Ok({\n type,\n value: numberValue,\n });\n case VariableType.JSON:\n try {\n const jsonValue: JSONType = JSON.parse(String(variable.value));\n\n return Ok({\n type,\n value: jsonValue,\n });\n } catch (err) {\n return Err(new KameleoonError(KameleoonException.JSONParse, err));\n }\n default:\n exhaustCheck(type);\n }\n }\n\n static getUserAgent(\n visitorCode: string,\n campaignConfiguration: CampaignConfiguration,\n ): string | undefined {\n const isUserAgent = (\n data: KameleoonDataItemType,\n ): data is UserAgentDataType => data.type === KameleoonData.UserAgent;\n const targetingData =\n campaignConfiguration.storedTargetingData[visitorCode];\n\n if (targetingData) {\n const filteredData = targetingData\n .map((item) => item.data)\n .filter(isUserAgent);\n\n if (filteredData.length) {\n const [userAgentData] = filteredData;\n\n return userAgentData.value;\n }\n }\n\n return undefined;\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,26 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VariationConfiguration = void 0;
4
- var variationConfiguration_1 = require("./variationConfiguration");
5
- Object.defineProperty(exports, "VariationConfiguration", { enumerable: true, get: function () { return variationConfiguration_1.VariationConfiguration; } });
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");
6
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/variationConfiguration/index.ts"],"names":[],"mappings":";;;AAAA,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA"}
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,3 +1,6 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
3
6
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/variationConfiguration/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/variationConfiguration/types.ts"],"sourcesContent":["import { FeatureFlagType, RuleItemType } from '../campaignConfiguration';\nimport { TargetingDataItemType } from '../targeting';\n\nexport type VariationType = {\n variationId: number;\n assignmentDate: string;\n};\n\nexport type UpdateStorageParamsType = {\n visitorCode: string;\n experimentId: string;\n variationId: number;\n};\n\nexport type FeatureFlagVariationType = {\n variationKey: string;\n variationId: number | null;\n featureFlagId: number;\n featureKey: string;\n rule: RuleItemType | null;\n};\n\nexport type GetFeatureFlagVariationParametersType = {\n visitorCode: string;\n featureFlag: FeatureFlagType;\n targetingData?: TargetingDataItemType[];\n withAssignment?: boolean;\n};\n\nexport type GetAssignedRuleVariationResultType = Pick<\n FeatureFlagVariationType,\n 'variationId' | 'variationKey'\n>;\n"],"mappings":""}
@@ -1,38 +1,45 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
3
6
  exports.Variation = void 0;
4
- const types_1 = require("../types");
7
+ var _types = require("../types");
8
+ 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; }
9
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
10
+ 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); }
5
11
  class Variation {
6
- constructor(variationData) {
7
- this.variationData = variationData;
12
+ constructor(variationData) {
13
+ _defineProperty(this, "variationData", void 0);
14
+ this.variationData = variationData;
15
+ }
16
+ get id() {
17
+ if (!this.variationData) {
18
+ throw new Error("Internal usage error: Check if the variation `isValid`, before getting it's `id`");
8
19
  }
9
- get id() {
10
- if (!this.variationData) {
11
- throw new Error("Internal usage error: Check if the variation `isValid`, before getting it's `id`");
12
- }
13
- return this.variationData.variationId;
20
+ return this.variationData.variationId;
21
+ }
22
+ isValid(respoolTime) {
23
+ const variation = this.variationData;
24
+ if (!variation) {
25
+ return false;
14
26
  }
15
- isValid(respoolTime) {
16
- const variation = this.variationData;
17
- if (!variation) {
18
- return false;
19
- }
20
- // --- Note ---
21
- // - Respool is a kind of shuffle parameter
22
- // it's presence indicates that variations assigned to
23
- // user has changed at certain time (time is the value of `respoolTime` in seconds)
24
- // - So the variation is valid unless it has been shuffled after it's assignment
25
- if (respoolTime === null || respoolTime === void 0 ? void 0 : respoolTime.length) {
26
- const assignmentTime = new Date(Date.parse(variation.assignmentDate)).getTime() /
27
- types_1.Milliseconds.Second;
28
- const variationRespoolTime = respoolTime.find((respool) => respool.variationId === String(variation.variationId));
29
- if (!variationRespoolTime) {
30
- return true;
31
- }
32
- return assignmentTime > variationRespoolTime.value;
33
- }
27
+
28
+ // --- Note ---
29
+ // - Respool is a kind of shuffle parameter
30
+ // it's presence indicates that variations assigned to
31
+ // user has changed at certain time (time is the value of `respoolTime` in seconds)
32
+ // - So the variation is valid unless it has been shuffled after it's assignment
33
+ if (respoolTime?.length) {
34
+ const assignmentTime = new Date(Date.parse(variation.assignmentDate)).getTime() / _types.Milliseconds.Second;
35
+ const variationRespoolTime = respoolTime.find(respool => respool.variationId === String(variation.variationId));
36
+ if (!variationRespoolTime) {
34
37
  return true;
38
+ }
39
+ return assignmentTime > variationRespoolTime.value;
35
40
  }
41
+ return true;
42
+ }
36
43
  }
37
44
  exports.Variation = Variation;
38
45
  //# sourceMappingURL=variation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"variation.js","sourceRoot":"","sources":["../../src/variationConfiguration/variation.ts"],"names":[],"mappings":";;;AACA,oCAAwC;AAQxC,MAAa,SAAS;IAGpB,YAAY,aAA6B;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,IAAI,EAAE;QACJ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;SACH;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;IACxC,CAAC;IAEM,OAAO,CAAC,WAA+B;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;QAErC,IAAI,CAAC,SAAS,EAAE;YACd,OAAO,KAAK,CAAC;SACd;QAED,eAAe;QACf,2CAA2C;QAC3C,sDAAsD;QACtD,mFAAmF;QACnF,gFAAgF;QAChF,IAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,EAAE;YACvB,MAAM,cAAc,GAClB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE;gBACxD,oBAAY,CAAC,MAAM,CAAC;YACtB,MAAM,oBAAoB,GAAG,WAAW,CAAC,IAAI,CAC3C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CACnE,CAAC;YAEF,IAAI,CAAC,oBAAoB,EAAE;gBACzB,OAAO,IAAI,CAAC;aACb;YAED,OAAO,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC;SACpD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA9CD,8BA8CC"}
1
+ {"version":3,"file":"variation.js","names":["_types","require","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","Variation","constructor","variationData","id","Error","variationId","isValid","respoolTime","variation","length","assignmentTime","Date","parse","assignmentDate","getTime","Milliseconds","Second","variationRespoolTime","find","respool","exports"],"sources":["../../src/variationConfiguration/variation.ts"],"sourcesContent":["import { RespoolTimeType } from '../campaignConfiguration/types';\nimport { Milliseconds } from '../types';\nimport { VariationType } from './types';\n\ninterface IVariation {\n readonly id: number;\n isValid: (respoolTime?: RespoolTimeType[]) => boolean;\n}\n\nexport class Variation implements IVariation {\n variationData?: VariationType;\n\n constructor(variationData?: VariationType) {\n this.variationData = variationData;\n }\n\n get id(): number {\n if (!this.variationData) {\n throw new Error(\n \"Internal usage error: Check if the variation `isValid`, before getting it's `id`\",\n );\n }\n\n return this.variationData.variationId;\n }\n\n public isValid(respoolTime?: RespoolTimeType[]): boolean {\n const variation = this.variationData;\n\n if (!variation) {\n return false;\n }\n\n // --- Note ---\n // - Respool is a kind of shuffle parameter\n // it's presence indicates that variations assigned to\n // user has changed at certain time (time is the value of `respoolTime` in seconds)\n // - So the variation is valid unless it has been shuffled after it's assignment\n if (respoolTime?.length) {\n const assignmentTime =\n new Date(Date.parse(variation.assignmentDate)).getTime() /\n Milliseconds.Second;\n const variationRespoolTime = respoolTime.find(\n (respool) => respool.variationId === String(variation.variationId),\n );\n\n if (!variationRespoolTime) {\n return true;\n }\n\n return assignmentTime > variationRespoolTime.value;\n }\n\n return true;\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAAwC,SAAAC,gBAAAC,GAAA,EAAAC,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAD,GAAA,IAAAI,MAAA,CAAAC,cAAA,CAAAL,GAAA,EAAAC,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAR,GAAA,CAAAC,GAAA,IAAAC,KAAA,WAAAF,GAAA;AAAA,SAAAG,eAAAM,GAAA,QAAAR,GAAA,GAAAS,YAAA,CAAAD,GAAA,2BAAAR,GAAA,gBAAAA,GAAA,GAAAU,MAAA,CAAAV,GAAA;AAAA,SAAAS,aAAAE,KAAA,EAAAC,IAAA,eAAAD,KAAA,iBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAAG,MAAA,CAAAC,WAAA,OAAAF,IAAA,KAAAG,SAAA,QAAAC,GAAA,GAAAJ,IAAA,CAAAK,IAAA,CAAAP,KAAA,EAAAC,IAAA,2BAAAK,GAAA,sBAAAA,GAAA,YAAAE,SAAA,4DAAAP,IAAA,gBAAAF,MAAA,GAAAU,MAAA,EAAAT,KAAA;AAQjC,MAAMU,SAAS,CAAuB;EAG3CC,WAAWA,CAACC,aAA6B,EAAE;IAAAzB,eAAA;IACzC,IAAI,CAACyB,aAAa,GAAGA,aAAa;EACpC;EAEA,IAAIC,EAAEA,CAAA,EAAW;IACf,IAAI,CAAC,IAAI,CAACD,aAAa,EAAE;MACvB,MAAM,IAAIE,KAAK,CACb,kFAAkF,CACnF;IACH;IAEA,OAAO,IAAI,CAACF,aAAa,CAACG,WAAW;EACvC;EAEOC,OAAOA,CAACC,WAA+B,EAAW;IACvD,MAAMC,SAAS,GAAG,IAAI,CAACN,aAAa;IAEpC,IAAI,CAACM,SAAS,EAAE;MACd,OAAO,KAAK;IACd;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAID,WAAW,EAAEE,MAAM,EAAE;MACvB,MAAMC,cAAc,GAClB,IAAIC,IAAI,CAACA,IAAI,CAACC,KAAK,CAACJ,SAAS,CAACK,cAAc,CAAC,CAAC,CAACC,OAAO,EAAE,GACxDC,mBAAY,CAACC,MAAM;MACrB,MAAMC,oBAAoB,GAAGV,WAAW,CAACW,IAAI,CAC1CC,OAAO,IAAKA,OAAO,CAACd,WAAW,KAAKhB,MAAM,CAACmB,SAAS,CAACH,WAAW,CAAC,CACnE;MAED,IAAI,CAACY,oBAAoB,EAAE;QACzB,OAAO,IAAI;MACb;MAEA,OAAOP,cAAc,GAAGO,oBAAoB,CAACrC,KAAK;IACpD;IAEA,OAAO,IAAI;EACb;AACF;AAACwC,OAAA,CAAApB,SAAA,GAAAA,SAAA"}
@@ -6,19 +6,19 @@ import { FeatureFlagVariationType, GetFeatureFlagVariationParametersType } from
6
6
  interface IVariationConfiguration {
7
7
  /**
8
8
  * @method getAssociatedVariationId - gets the id of a variation assigned to a visitor with `visitorCode` from the storage. If the visitor doesn't have associated variation yet, assigns a new one, stores it and returns it's id.
9
- * */
9
+ */
10
10
  getAssociatedVariationId: (visitorCode: string, experimentId: number) => Result<number, KameleoonError>;
11
11
  /**
12
- * @method getAssignedVariations - obtains experiments with according variations that are *already assigned* and *stored* in the `variationStorage`. If `getAssociatedVariationId` hadn't been called before, there will be no variations to get.
13
- * */
12
+ * @method getAssignedVariations - obtains experiments with according variations that are *already assigned* and *stored* in the `variationStorage`. If `getAssociatedVariationId` had not been called before, there will be no variations to get.
13
+ */
14
14
  getAssignedVariations(visitorCode: string): Result<ExperimentVariationsType, KameleoonError>;
15
15
  /**
16
16
  * @method getFeatureFlagVariation - obtains variation for the rule of the feature flag which is both targeted and has a variation, if no such rule was found, returns empty rule with default `variationKey`, given an option `withAssignment` of `true` will also assign a new variation and save it in the storage
17
- * */
17
+ */
18
18
  getFeatureFlagVariation: (params: GetFeatureFlagVariationParametersType) => Result<FeatureFlagVariationType, KameleoonError>;
19
19
  /**
20
20
  * @method getExperimentVariation - obtains variation for the experiment by calculating the variation for the visitor *without assigning* it to a visitor
21
- * */
21
+ */
22
22
  getExperimentVariation: (visitorCode: string, experiment: ExperimentItemType) => Result<number, KameleoonError>;
23
23
  }
24
24
  export declare class VariationConfiguration implements IVariationConfiguration {