@splitsoftware/splitio-commons 1.13.2-rc.6 → 1.13.2-rc.8

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 (152) hide show
  1. package/CHANGES.txt +3 -1
  2. package/cjs/evaluator/index.js +1 -1
  3. package/cjs/evaluator/matchers/all.js +3 -1
  4. package/cjs/evaluator/matchers/between.js +3 -1
  5. package/cjs/evaluator/matchers/boolean.js +3 -1
  6. package/cjs/evaluator/matchers/cont_all.js +3 -1
  7. package/cjs/evaluator/matchers/cont_any.js +3 -1
  8. package/cjs/evaluator/matchers/cont_str.js +3 -1
  9. package/cjs/evaluator/matchers/dependency.js +1 -1
  10. package/cjs/evaluator/matchers/eq.js +3 -1
  11. package/cjs/evaluator/matchers/eq_set.js +3 -1
  12. package/cjs/evaluator/matchers/ew.js +3 -1
  13. package/cjs/evaluator/matchers/gte.js +3 -1
  14. package/cjs/evaluator/matchers/index.js +1 -1
  15. package/cjs/evaluator/matchers/lte.js +3 -1
  16. package/cjs/evaluator/matchers/part_of.js +3 -1
  17. package/cjs/evaluator/matchers/segment.js +6 -1
  18. package/cjs/evaluator/matchers/semver_between.js +1 -1
  19. package/cjs/evaluator/matchers/semver_eq.js +1 -1
  20. package/cjs/evaluator/matchers/semver_gte.js +1 -1
  21. package/cjs/evaluator/matchers/semver_inlist.js +2 -2
  22. package/cjs/evaluator/matchers/semver_lte.js +1 -1
  23. package/cjs/evaluator/matchers/string.js +3 -1
  24. package/cjs/evaluator/matchers/sw.js +3 -1
  25. package/cjs/evaluator/matchers/whitelist.js +3 -1
  26. package/cjs/evaluator/matchersTransform/index.js +1 -0
  27. package/cjs/evaluator/matchersTransform/whitelist.js +1 -1
  28. package/cjs/evaluator/parser/index.js +10 -18
  29. package/cjs/logger/constants.js +19 -4
  30. package/cjs/logger/messages/debug.js +19 -4
  31. package/cjs/logger/messages/error.js +1 -1
  32. package/cjs/logger/messages/warn.js +1 -1
  33. package/cjs/services/splitApi.js +5 -5
  34. package/cjs/storages/KeyBuilder.js +3 -2
  35. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +1 -1
  36. package/cjs/storages/pluggable/index.js +1 -1
  37. package/cjs/utils/constants/index.js +2 -1
  38. package/cjs/utils/labels/index.js +1 -1
  39. package/esm/evaluator/index.js +1 -1
  40. package/esm/evaluator/matchers/all.js +3 -1
  41. package/esm/evaluator/matchers/between.js +3 -1
  42. package/esm/evaluator/matchers/boolean.js +3 -1
  43. package/esm/evaluator/matchers/cont_all.js +3 -1
  44. package/esm/evaluator/matchers/cont_any.js +3 -1
  45. package/esm/evaluator/matchers/cont_str.js +3 -1
  46. package/esm/evaluator/matchers/dependency.js +1 -1
  47. package/esm/evaluator/matchers/eq.js +3 -1
  48. package/esm/evaluator/matchers/eq_set.js +3 -1
  49. package/esm/evaluator/matchers/ew.js +3 -1
  50. package/esm/evaluator/matchers/gte.js +3 -1
  51. package/esm/evaluator/matchers/index.js +1 -1
  52. package/esm/evaluator/matchers/lte.js +3 -1
  53. package/esm/evaluator/matchers/part_of.js +3 -1
  54. package/esm/evaluator/matchers/segment.js +6 -1
  55. package/esm/evaluator/matchers/semver_between.js +1 -1
  56. package/esm/evaluator/matchers/semver_eq.js +1 -1
  57. package/esm/evaluator/matchers/semver_gte.js +1 -1
  58. package/esm/evaluator/matchers/semver_inlist.js +2 -2
  59. package/esm/evaluator/matchers/semver_lte.js +1 -1
  60. package/esm/evaluator/matchers/string.js +3 -1
  61. package/esm/evaluator/matchers/sw.js +3 -1
  62. package/esm/evaluator/matchers/whitelist.js +3 -1
  63. package/esm/evaluator/matchersTransform/index.js +1 -0
  64. package/esm/evaluator/matchersTransform/whitelist.js +1 -1
  65. package/esm/evaluator/parser/index.js +11 -19
  66. package/esm/logger/constants.js +16 -1
  67. package/esm/logger/messages/debug.js +19 -4
  68. package/esm/logger/messages/error.js +1 -1
  69. package/esm/logger/messages/warn.js +1 -1
  70. package/esm/services/splitApi.js +6 -6
  71. package/esm/storages/KeyBuilder.js +3 -2
  72. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +1 -1
  73. package/esm/storages/pluggable/index.js +1 -1
  74. package/esm/utils/constants/index.js +1 -0
  75. package/esm/utils/labels/index.js +1 -1
  76. package/package.json +1 -1
  77. package/src/evaluator/index.ts +1 -1
  78. package/src/evaluator/matchers/all.ts +5 -1
  79. package/src/evaluator/matchers/between.ts +7 -3
  80. package/src/evaluator/matchers/boolean.ts +6 -2
  81. package/src/evaluator/matchers/cont_all.ts +5 -1
  82. package/src/evaluator/matchers/cont_any.ts +5 -1
  83. package/src/evaluator/matchers/cont_str.ts +6 -2
  84. package/src/evaluator/matchers/dependency.ts +1 -1
  85. package/src/evaluator/matchers/eq.ts +6 -2
  86. package/src/evaluator/matchers/eq_set.ts +5 -1
  87. package/src/evaluator/matchers/ew.ts +6 -2
  88. package/src/evaluator/matchers/gte.ts +6 -2
  89. package/src/evaluator/matchers/index.ts +1 -1
  90. package/src/evaluator/matchers/lte.ts +6 -2
  91. package/src/evaluator/matchers/part_of.ts +5 -1
  92. package/src/evaluator/matchers/segment.ts +8 -1
  93. package/src/evaluator/matchers/semver_between.ts +2 -1
  94. package/src/evaluator/matchers/semver_eq.ts +2 -1
  95. package/src/evaluator/matchers/semver_gte.ts +2 -1
  96. package/src/evaluator/matchers/semver_inlist.ts +3 -3
  97. package/src/evaluator/matchers/semver_lte.ts +2 -1
  98. package/src/evaluator/matchers/string.ts +6 -1
  99. package/src/evaluator/matchers/sw.ts +6 -2
  100. package/src/evaluator/matchers/whitelist.ts +5 -1
  101. package/src/evaluator/matchersTransform/index.ts +2 -1
  102. package/src/evaluator/matchersTransform/whitelist.ts +1 -1
  103. package/src/evaluator/parser/index.ts +8 -13
  104. package/src/evaluator/types.ts +1 -0
  105. package/src/logger/constants.ts +16 -1
  106. package/src/logger/messages/debug.ts +19 -4
  107. package/src/logger/messages/error.ts +1 -1
  108. package/src/logger/messages/warn.ts +1 -1
  109. package/src/services/splitApi.ts +5 -6
  110. package/src/storages/KeyBuilder.ts +3 -2
  111. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +1 -1
  112. package/src/storages/pluggable/index.ts +1 -1
  113. package/src/utils/constants/index.ts +2 -0
  114. package/src/utils/labels/index.ts +1 -1
  115. package/types/evaluator/matchers/all.d.ts +2 -1
  116. package/types/evaluator/matchers/between.d.ts +2 -1
  117. package/types/evaluator/matchers/boolean.d.ts +2 -1
  118. package/types/evaluator/matchers/cont_all.d.ts +2 -1
  119. package/types/evaluator/matchers/cont_any.d.ts +2 -1
  120. package/types/evaluator/matchers/cont_str.d.ts +2 -1
  121. package/types/evaluator/matchers/dependency.d.ts +1 -1
  122. package/types/evaluator/matchers/eq.d.ts +2 -1
  123. package/types/evaluator/matchers/eq_set.d.ts +2 -1
  124. package/types/evaluator/matchers/ew.d.ts +2 -1
  125. package/types/evaluator/matchers/gte.d.ts +2 -1
  126. package/types/evaluator/matchers/lte.d.ts +2 -1
  127. package/types/evaluator/matchers/part_of.d.ts +2 -1
  128. package/types/evaluator/matchers/segment.d.ts +2 -1
  129. package/types/evaluator/matchers/semver_between.d.ts +2 -1
  130. package/types/evaluator/matchers/semver_eq.d.ts +2 -1
  131. package/types/evaluator/matchers/semver_gte.d.ts +2 -1
  132. package/types/evaluator/matchers/semver_inlist.d.ts +2 -1
  133. package/types/evaluator/matchers/semver_lte.d.ts +2 -1
  134. package/types/evaluator/matchers/string.d.ts +2 -1
  135. package/types/evaluator/matchers/sw.d.ts +2 -1
  136. package/types/evaluator/matchers/whitelist.d.ts +2 -1
  137. package/types/evaluator/matchersTransform/set.d.ts +2 -2
  138. package/types/evaluator/matchersTransform/whitelist.d.ts +1 -1
  139. package/types/evaluator/types.d.ts +1 -0
  140. package/types/logger/constants.d.ts +16 -1
  141. package/types/storages/KeyBuilder.d.ts +1 -1
  142. package/types/trackers/impressionObserver/utils.d.ts +1 -1
  143. package/types/utils/constants/index.d.ts +1 -0
  144. package/types/utils/labels/index.d.ts +1 -1
  145. package/types/evaluator/matchers/sember_inlist.d.ts +0 -3
  146. package/types/evaluator/matchersTransform/string.d.ts +0 -7
  147. package/types/sdkClient/identity.d.ts +0 -6
  148. package/types/storages/AbstractSplitsCache.d.ts +0 -46
  149. package/types/sync/streaming/mySegmentsV2utils.d.ts +0 -27
  150. package/types/utils/inputValidation/sdkKey.d.ts +0 -7
  151. package/types/utils/settingsValidation/logger/globalLogLevel.d.ts +0 -8
  152. /package/types/utils/{semVer.d.ts → Semver.d.ts} +0 -0
package/CHANGES.txt CHANGED
@@ -1,5 +1,7 @@
1
1
  1.14.0 (April XX, 2024)
2
- - Updated impression label to 'unsupported matcher type' when the matcher type is not supported by the SDK.
2
+ - Added support for Semver matchers.
3
+ - Added special impression label of 'targeting rule type unsupported by sdk' when the matcher type is not supported by the SDK, which returns 'control'.
4
+ - Updated Split API client to include the flags spec version query parameter for the `splitChanges` and `auth` endpoints.
3
5
 
4
6
  1.13.1 (January 10, 2024)
5
7
  - Updated client `destroy` method to release SDK key immediately and avoid unexpected warning logs when a factory is created with the same SDK key after the previous one was destroyed.
@@ -99,7 +99,7 @@ function getEvaluation(log, splitJSON, key, attributes, storage) {
99
99
  if (splitJSON) {
100
100
  var split_1 = Engine_1.Engine.parse(log, splitJSON, storage);
101
101
  evaluation = split_1.getTreatment(key, attributes, evaluateFeature);
102
- // If the storage is async and the evaluated feature flag is type IN_SPLIT_TREATMENT or IN_SEGMENT, evaluation is thenable
102
+ // If the storage is async and the evaluated flag uses segments or dependencies, evaluation is thenable
103
103
  if ((0, thenable_1.thenable)(evaluation)) {
104
104
  return evaluation.then(function (result) {
105
105
  result.changeNumber = split_1.getChangeNumber();
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.allMatcherContext = void 0;
4
- function allMatcherContext() {
4
+ var constants_1 = require("../../logger/constants");
5
+ function allMatcherContext(log) {
5
6
  return function allMatcher(runtimeAttr) {
7
+ log.debug(constants_1.ENGINE_MATCHER_ALL);
6
8
  return runtimeAttr != null;
7
9
  };
8
10
  }
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.betweenMatcherContext = void 0;
4
- function betweenMatcherContext(ruleVO) {
4
+ var constants_1 = require("../../logger/constants");
5
+ function betweenMatcherContext(log, ruleVO) {
5
6
  return function betweenMatcher(runtimeAttr) {
6
7
  var isBetween = runtimeAttr >= ruleVO.start && runtimeAttr <= ruleVO.end;
8
+ log.debug(constants_1.ENGINE_MATCHER_BETWEEN, [runtimeAttr, ruleVO.start, ruleVO.end, isBetween]);
7
9
  return isBetween;
8
10
  };
9
11
  }
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.booleanMatcherContext = void 0;
4
- function booleanMatcherContext(ruleAttr) {
4
+ var constants_1 = require("../../logger/constants");
5
+ function booleanMatcherContext(log, ruleAttr) {
5
6
  return function booleanMatcher(runtimeAttr) {
6
7
  var booleanMatches = ruleAttr === runtimeAttr;
8
+ log.debug(constants_1.ENGINE_MATCHER_BOOLEAN, [ruleAttr, runtimeAttr]);
7
9
  return booleanMatches;
8
10
  };
9
11
  }
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.containsAllSetMatcherContext = void 0;
4
+ var constants_1 = require("../../logger/constants");
4
5
  var lang_1 = require("../../utils/lang");
5
- function containsAllSetMatcherContext(ruleAttr) {
6
+ function containsAllSetMatcherContext(log, ruleAttr) {
6
7
  return function containsAllMatcher(runtimeAttr) {
7
8
  var containsAll = true;
8
9
  if (runtimeAttr.length < ruleAttr.length) {
@@ -17,6 +18,7 @@ function containsAllSetMatcherContext(ruleAttr) {
17
18
  _loop_1(i);
18
19
  }
19
20
  }
21
+ log.debug(constants_1.ENGINE_MATCHER_CONTAINS_ALL, [runtimeAttr, ruleAttr, containsAll]);
20
22
  return containsAll;
21
23
  };
22
24
  }
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.containsAnySetMatcherContext = void 0;
4
+ var constants_1 = require("../../logger/constants");
4
5
  var lang_1 = require("../../utils/lang");
5
- function containsAnySetMatcherContext(ruleAttr) {
6
+ function containsAnySetMatcherContext(log, ruleAttr) {
6
7
  return function containsAnyMatcher(runtimeAttr) {
7
8
  var containsAny = false;
8
9
  var _loop_1 = function (i) {
@@ -12,6 +13,7 @@ function containsAnySetMatcherContext(ruleAttr) {
12
13
  for (var i = 0; i < ruleAttr.length && !containsAny; i++) {
13
14
  _loop_1(i);
14
15
  }
16
+ log.debug(constants_1.ENGINE_MATCHER_CONTAINS_ANY, [runtimeAttr, ruleAttr, containsAny]);
15
17
  return containsAny;
16
18
  };
17
19
  }
@@ -2,9 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.containsStringMatcherContext = void 0;
4
4
  var lang_1 = require("../../utils/lang");
5
- function containsStringMatcherContext(ruleAttr) {
5
+ var constants_1 = require("../../logger/constants");
6
+ function containsStringMatcherContext(log, ruleAttr) {
6
7
  return function containsStringMatcher(runtimeAttr) {
7
8
  var contains = ruleAttr.some(function (e) { return (0, lang_1.isString)(runtimeAttr) && runtimeAttr.indexOf(e) > -1; });
9
+ log.debug(constants_1.ENGINE_MATCHER_CONTAINS_STRING, [runtimeAttr, ruleAttr, contains]);
8
10
  return contains;
9
11
  };
10
12
  }
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.dependencyMatcherContext = void 0;
4
4
  var thenable_1 = require("../../utils/promise/thenable");
5
5
  var constants_1 = require("../../logger/constants");
6
- function dependencyMatcherContext(_a, storage, log) {
6
+ function dependencyMatcherContext(log, _a, storage) {
7
7
  var split = _a.split, treatments = _a.treatments;
8
8
  function checkTreatment(evaluation, acceptableTreatments, parentName) {
9
9
  var matches = false;
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.equalToMatcherContext = void 0;
4
- function equalToMatcherContext(ruleAttr) {
4
+ var constants_1 = require("../../logger/constants");
5
+ function equalToMatcherContext(log, ruleAttr) {
5
6
  return function equalToMatcher(runtimeAttr) {
6
7
  var isEqual = runtimeAttr === ruleAttr;
8
+ log.debug(constants_1.ENGINE_MATCHER_EQUAL, [runtimeAttr, ruleAttr, isEqual]);
7
9
  return isEqual;
8
10
  };
9
11
  }
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.equalToSetMatcherContext = void 0;
4
+ var constants_1 = require("../../logger/constants");
4
5
  var lang_1 = require("../../utils/lang");
5
- function equalToSetMatcherContext(ruleAttr) {
6
+ function equalToSetMatcherContext(log, ruleAttr) {
6
7
  return function equalToSetMatcher(runtimeAttr) {
7
8
  // Length being the same is the first condition.
8
9
  var isEqual = runtimeAttr.length === ruleAttr.length;
@@ -14,6 +15,7 @@ function equalToSetMatcherContext(ruleAttr) {
14
15
  for (var i = 0; i < runtimeAttr.length && isEqual; i++) {
15
16
  _loop_1(i);
16
17
  }
18
+ log.debug(constants_1.ENGINE_MATCHER_EQUAL_TO_SET, [runtimeAttr, ruleAttr, isEqual]);
17
19
  return isEqual;
18
20
  };
19
21
  }
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.endsWithMatcherContext = void 0;
4
+ var constants_1 = require("../../logger/constants");
4
5
  var lang_1 = require("../../utils/lang");
5
- function endsWithMatcherContext(ruleAttr) {
6
+ function endsWithMatcherContext(log, ruleAttr) {
6
7
  return function endsWithMatcher(runtimeAttr) {
7
8
  var strEndsWith = ruleAttr.some(function (e) { return (0, lang_1.endsWith)(runtimeAttr, e); });
9
+ log.debug(constants_1.ENGINE_MATCHER_ENDS_WITH, [runtimeAttr, ruleAttr, strEndsWith]);
8
10
  return strEndsWith;
9
11
  };
10
12
  }
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.greaterThanEqualMatcherContext = void 0;
4
- function greaterThanEqualMatcherContext(ruleAttr) {
4
+ var constants_1 = require("../../logger/constants");
5
+ function greaterThanEqualMatcherContext(log, ruleAttr) {
5
6
  return function greaterThanEqualMatcher(runtimeAttr) {
6
7
  var isGreaterThanEqual = runtimeAttr >= ruleAttr;
8
+ log.debug(constants_1.ENGINE_MATCHER_GREATER, [runtimeAttr, ruleAttr, isGreaterThanEqual]);
7
9
  return isGreaterThanEqual;
8
10
  };
9
11
  }
@@ -56,7 +56,7 @@ function matcherFactory(log, matcherDto, storage) {
56
56
  var matcherFn;
57
57
  // @ts-ignore
58
58
  if (matchers[type])
59
- matcherFn = matchers[type](value, storage, log); // There is no index-out-of-bound exception in JavaScript
59
+ matcherFn = matchers[type](log, value, storage); // There is no index-out-of-bound exception in JavaScript
60
60
  return matcherFn;
61
61
  }
62
62
  exports.matcherFactory = matcherFactory;
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.lessThanEqualMatcherContext = void 0;
4
- function lessThanEqualMatcherContext(ruleAttr) {
4
+ var constants_1 = require("../../logger/constants");
5
+ function lessThanEqualMatcherContext(log, ruleAttr) {
5
6
  return function lessThanEqualMatcher(runtimeAttr) {
6
7
  var isLessThanEqual = runtimeAttr <= ruleAttr;
8
+ log.debug(constants_1.ENGINE_MATCHER_LESS, [runtimeAttr, ruleAttr, isLessThanEqual]);
7
9
  return isLessThanEqual;
8
10
  };
9
11
  }
@@ -2,7 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.partOfSetMatcherContext = void 0;
4
4
  var lang_1 = require("../../utils/lang");
5
- function partOfSetMatcherContext(ruleAttr) {
5
+ var constants_1 = require("../../logger/constants");
6
+ function partOfSetMatcherContext(log, ruleAttr) {
6
7
  return function partOfMatcher(runtimeAttr) {
7
8
  // To be part of the length should be minor or equal.
8
9
  var isPartOf = runtimeAttr.length <= ruleAttr.length;
@@ -14,6 +15,7 @@ function partOfSetMatcherContext(ruleAttr) {
14
15
  for (var i = 0; i < runtimeAttr.length && isPartOf; i++) {
15
16
  _loop_1(i);
16
17
  }
18
+ log.debug(constants_1.ENGINE_MATCHER_PART_OF, [runtimeAttr, ruleAttr, isPartOf]);
17
19
  return isPartOf;
18
20
  };
19
21
  }
@@ -2,14 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.segmentMatcherContext = void 0;
4
4
  var thenable_1 = require("../../utils/promise/thenable");
5
- function segmentMatcherContext(segmentName, storage) {
5
+ var constants_1 = require("../../logger/constants");
6
+ function segmentMatcherContext(log, segmentName, storage) {
6
7
  return function segmentMatcher(key) {
7
8
  var isInSegment = storage.segments.isInSegment(segmentName, key);
8
9
  if ((0, thenable_1.thenable)(isInSegment)) {
9
10
  isInSegment.then(function (result) {
11
+ log.debug(constants_1.ENGINE_MATCHER_SEGMENT, [segmentName, key, isInSegment]);
10
12
  return result;
11
13
  });
12
14
  }
15
+ else {
16
+ log.debug(constants_1.ENGINE_MATCHER_SEGMENT, [segmentName, key, isInSegment]);
17
+ }
13
18
  return isInSegment;
14
19
  };
15
20
  }
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.betweenSemverMatcherContext = void 0;
4
4
  var Semver_1 = require("../../utils/Semver");
5
- function betweenSemverMatcherContext(ruleAttr) {
5
+ function betweenSemverMatcherContext(log, ruleAttr) {
6
6
  var startSemver = new Semver_1.Semver(ruleAttr.start);
7
7
  var endSemver = new Semver_1.Semver(ruleAttr.end);
8
8
  return function betweenSemverMatcher(runtimeAttr) {
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.equalToSemverMatcherContext = void 0;
4
4
  var Semver_1 = require("../../utils/Semver");
5
- function equalToSemverMatcherContext(ruleAttr) {
5
+ function equalToSemverMatcherContext(log, ruleAttr) {
6
6
  var ruleSemver = new Semver_1.Semver(ruleAttr);
7
7
  return function equalToSemverMatcher(runtimeAttr) {
8
8
  var runtimeSemver = new Semver_1.Semver(runtimeAttr);
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.greaterThanEqualToSemverMatcherContext = void 0;
4
4
  var Semver_1 = require("../../utils/Semver");
5
- function greaterThanEqualToSemverMatcherContext(ruleAttr) {
5
+ function greaterThanEqualToSemverMatcherContext(log, ruleAttr) {
6
6
  var ruleSemver = new Semver_1.Semver(ruleAttr);
7
7
  return function greaterThanEqualToSemverMatcher(runtimeAttr) {
8
8
  var runtimeSemver = new Semver_1.Semver(runtimeAttr);
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.inListSemverMatcherContext = void 0;
4
4
  var sets_1 = require("../../utils/lang/sets");
5
5
  var Semver_1 = require("../../utils/Semver");
6
- function inListSemverMatcherContext(ruleAttr) {
7
- // @TODO move eventually to `matchersTransform` and validate for all matchers
6
+ function inListSemverMatcherContext(log, ruleAttr) {
7
+ // @TODO ruleAttr validation should be done at the `parser` or `matchersTransform` level to reuse for all matchers
8
8
  if (!ruleAttr || ruleAttr.length === 0)
9
9
  throw new Error('whitelistMatcherData is required for IN_LIST_SEMVER matcher type');
10
10
  var listOfSemvers = new sets_1._Set(ruleAttr.map(function (version) { return new Semver_1.Semver(version).version; }));
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.lessThanEqualToSemverMatcherContext = void 0;
4
4
  var Semver_1 = require("../../utils/Semver");
5
- function lessThanEqualToSemverMatcherContext(ruleAttr) {
5
+ function lessThanEqualToSemverMatcherContext(log, ruleAttr) {
6
6
  var ruleSemver = new Semver_1.Semver(ruleAttr);
7
7
  return function lessThanEqualToSemverMatcher(runtimeAttr) {
8
8
  var runtimeSemver = new Semver_1.Semver(runtimeAttr);
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.stringMatcherContext = void 0;
4
- function stringMatcherContext(ruleAttr) {
4
+ var constants_1 = require("../../logger/constants");
5
+ function stringMatcherContext(log, ruleAttr) {
5
6
  var regex = new RegExp(ruleAttr);
6
7
  return function stringMatcher(runtimeAttr) {
7
8
  var regexMatches = regex.test(runtimeAttr);
9
+ log.debug(constants_1.ENGINE_MATCHER_STRING, [runtimeAttr, ruleAttr, regexMatches ? 'yes' : 'no']);
8
10
  return regexMatches;
9
11
  };
10
12
  }
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.startsWithMatcherContext = void 0;
4
+ var constants_1 = require("../../logger/constants");
4
5
  var lang_1 = require("../../utils/lang");
5
- function startsWithMatcherContext(ruleAttr) {
6
+ function startsWithMatcherContext(log, ruleAttr) {
6
7
  return function startsWithMatcher(runtimeAttr) {
7
8
  var matches = ruleAttr.some(function (e) { return (0, lang_1.startsWith)(runtimeAttr, e); });
9
+ log.debug(constants_1.ENGINE_MATCHER_STARTS_WITH, [runtimeAttr, ruleAttr, matches]);
8
10
  return matches;
9
11
  };
10
12
  }
@@ -2,10 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.whitelistMatcherContext = void 0;
4
4
  var sets_1 = require("../../utils/lang/sets");
5
- function whitelistMatcherContext(ruleAttr) {
5
+ var constants_1 = require("../../logger/constants");
6
+ function whitelistMatcherContext(log, ruleAttr) {
6
7
  var whitelistSet = new sets_1._Set(ruleAttr);
7
8
  return function whitelistMatcher(runtimeAttr) {
8
9
  var isInWhitelist = whitelistSet.has(runtimeAttr);
10
+ log.debug(constants_1.ENGINE_MATCHER_WHITELIST, [runtimeAttr, ruleAttr.join(','), isInWhitelist]);
9
11
  return isInWhitelist;
10
12
  };
11
13
  }
@@ -82,6 +82,7 @@ function matchersTransform(matchers) {
82
82
  attribute: attribute,
83
83
  negate: negate,
84
84
  type: type,
85
+ name: matcherType,
85
86
  value: value,
86
87
  dataType: dataType // runtime input data type
87
88
  };
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.whitelistTransform = void 0;
4
4
  /**
5
- * Extract whitelist as a set. Used by 'WHITELIST' matcher.
5
+ * Extract whitelist array.
6
6
  */
7
7
  function whitelistTransform(whitelistObject) {
8
8
  return whitelistObject && whitelistObject.whitelist;
@@ -12,18 +12,18 @@ var thenable_1 = require("../../utils/promise/thenable");
12
12
  var constants_1 = require("../../logger/constants");
13
13
  function parser(log, conditions, storage) {
14
14
  var predicates = [];
15
- var _loop_1 = function (i) {
15
+ for (var i = 0; i < conditions.length; i++) {
16
16
  var _a = conditions[i], matcherGroup = _a.matcherGroup, partitions = _a.partitions, label = _a.label, conditionType = _a.conditionType;
17
17
  // transform data structure
18
18
  var matchers = (0, matchersTransform_1.matchersTransform)(matcherGroup.matchers);
19
19
  // create a set of pure functions from the matcher's dto
20
- var expressions = matchers.map(function (matcherDto, index) {
20
+ var expressions = matchers.map(function (matcherDto) {
21
21
  var matcher;
22
22
  try {
23
23
  matcher = (0, matchers_1.matcherFactory)(log, matcherDto, storage);
24
24
  }
25
25
  catch (error) {
26
- log.error(constants_1.ENGINE_MATCHER_ERROR, [matcherGroup.matchers[index].matcherType, error]);
26
+ log.error(constants_1.ENGINE_MATCHER_ERROR, [matcherDto.name, error]);
27
27
  }
28
28
  // Evaluator function.
29
29
  return function (key, attributes, splitEvaluator) {
@@ -34,31 +34,23 @@ function parser(log, conditions, storage) {
34
34
  result = matcher(value, splitEvaluator);
35
35
  }
36
36
  catch (error) {
37
- // @TODO should we propagate the error, to create impressions with label EXCEPTION?
38
- log.error(constants_1.ENGINE_MATCHER_ERROR, [matcherGroup.matchers[index].matcherType, error]);
37
+ log.error(constants_1.ENGINE_MATCHER_ERROR, [matcherDto.name, error]);
39
38
  }
40
39
  }
41
- function handleResult(result) {
42
- log.debug(constants_1.ENGINE_MATCHER_RESULT, [matcherGroup.matchers[index].matcherType, result, matcherDto.value, value]); // @ts-ignore
43
- return Boolean(result ^ matcherDto.negate);
44
- }
45
- return (0, thenable_1.thenable)(result) ?
46
- result.then(handleResult) :
47
- handleResult(result);
40
+ if ((0, thenable_1.thenable)(result)) { // @ts-ignore
41
+ return result.then(function (res) { return Boolean(res ^ matcherDto.negate); });
42
+ } // @ts-ignore
43
+ return Boolean(result ^ matcherDto.negate);
48
44
  };
49
45
  });
50
46
  // if matcher's factory can't instantiate the matchers, the expressions array will be empty
51
47
  if (expressions.length === 0) {
52
48
  // reset any data collected during parsing
53
49
  predicates = [];
54
- return "break";
50
+ // and break the loop
51
+ break;
55
52
  }
56
53
  predicates.push((0, condition_1.conditionContext)(log, (0, and_1.andCombinerContext)(log, expressions), treatments_1.Treatments.parse(partitions), label, conditionType));
57
- };
58
- for (var i = 0; i < conditions.length; i++) {
59
- var state_1 = _loop_1(i);
60
- if (state_1 === "break")
61
- break;
62
54
  }
63
55
  // Instanciate evaluator given the set of conditions using if else if logic
64
56
  return (0, ifelseif_1.ifElseIfCombinerContext)(log, predicates);
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ENGINE_VALUE_INVALID = exports.USER_CONSENT_INITIAL = exports.USER_CONSENT_NOT_UPDATED = exports.USER_CONSENT_UPDATED = exports.IMPRESSIONS_TRACKER_SUCCESS = exports.EVENTS_TRACKER_SUCCESS = exports.SYNC_STOP_POLLING = exports.SYNC_CONTINUE_POLLING = exports.SYNC_START_POLLING = exports.SUBMITTERS_PUSH = exports.SUBMITTERS_PUSH_FULL_QUEUE = exports.STREAMING_DISCONNECTING = exports.STREAMING_DISABLED = exports.STREAMING_CONNECTING = exports.STREAMING_RECONNECT = exports.STREAMING_REFRESH_TOKEN = exports.SYNC_SPLITS_FETCH_RETRY = exports.POLLING_STOP = exports.POLLING_START = exports.POLLING_SMART_PAUSING = exports.NEW_FACTORY = exports.NEW_SHARED_CLIENT = exports.IMPRESSION_QUEUEING = exports.IMPRESSION = exports.CLIENT_READY = exports.CLIENT_READY_FROM_CACHE = exports.ENGINE_MATCHER_RESULT = exports.SETTINGS_SPLITS_FILTER = exports.SYNC_TASK_STOP = exports.SYNC_TASK_EXECUTE = exports.SYNC_TASK_START = exports.STREAMING_NEW_MESSAGE = exports.SYNC_SPLITS_SEGMENTS = exports.SYNC_SPLITS_REMOVED = exports.SYNC_SPLITS_NEW = exports.SYNC_SPLITS_FETCH = exports.SYNC_OFFLINE_DATA = exports.RETRIEVE_MANAGER = exports.RETRIEVE_CLIENT_EXISTING = exports.RETRIEVE_CLIENT_DEFAULT = exports.CLEANUP_DEREGISTERING = exports.CLEANUP_REGISTERING = exports.ENGINE_SANITIZE = exports.ENGINE_VALUE = exports.ENGINE_MATCHER_DEPENDENCY_PRE = exports.ENGINE_MATCHER_DEPENDENCY = exports.ENGINE_BUCKET = exports.ENGINE_COMBINER_IFELSEIF_NO_TREATMENT = exports.ENGINE_COMBINER_IFELSEIF = exports.ENGINE_COMBINER_AND = void 0;
4
- exports.ERROR_INVALID_CONFIG_PARAM = exports.ERROR_EMPTY_ARRAY = exports.ERROR_EMPTY = exports.ERROR_INVALID = exports.ERROR_INVALID_KEY_OBJECT = exports.ERROR_TOO_LONG = exports.ERROR_NULL = exports.ERROR_CLIENT_DESTROYED = exports.ERROR_NOT_FINITE = exports.ERROR_SIZE_EXCEEDED = exports.ERROR_NOT_PLAIN_OBJECT = exports.ERROR_EVENT_TYPE_FORMAT = exports.ERROR_EVENTS_TRACKER = exports.ERROR_IMPRESSIONS_LISTENER = exports.ERROR_IMPRESSIONS_TRACKER = exports.ERROR_STREAMING_AUTH = exports.ERROR_STREAMING_SSE = exports.ERROR_SYNC_OFFLINE_LOADING = exports.ERROR_CLIENT_CANNOT_GET_READY = exports.ERROR_CLIENT_LISTENER = exports.ERROR_LOGLEVEL_INVALID = exports.ERROR_ENGINE_COMBINER_IFELSEIF = exports.WARN_FLAGSET_WITHOUT_FLAGS = exports.WARN_FLAGSET_NOT_CONFIGURED = exports.WARN_LOWERCASE_FLAGSET = exports.WARN_INVALID_FLAGSET = exports.STREAMING_PARSING_SPLIT_UPDATE = exports.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2 = exports.WARN_SDK_KEY = exports.WARN_SPLITS_FILTER_EMPTY = exports.WARN_SPLITS_FILTER_INVALID = exports.WARN_SPLITS_FILTER_IGNORED = exports.WARN_INTEGRATION_INVALID = exports.WARN_NOT_EXISTENT_TT = exports.WARN_LOWERCASE_TRAFFIC_TYPE = exports.WARN_NOT_EXISTENT_SPLIT = exports.WARN_TRIMMING = exports.WARN_CONVERTING = exports.WARN_TRIMMING_PROPERTIES = exports.WARN_SETTING_NULL = exports.SUBMITTERS_PUSH_RETRY = exports.SUBMITTERS_PUSH_FAILS = exports.STREAMING_FALLBACK = exports.STREAMING_PARSING_MESSAGE_FAILS = exports.STREAMING_PARSING_ERROR_FAILS = exports.SYNC_SPLITS_FETCH_FAILS = exports.SYNC_MYSEGMENTS_FETCH_RETRY = exports.CLIENT_NOT_READY = exports.CLIENT_NO_LISTENER = exports.ENGINE_VALUE_NO_ATTRIBUTES = void 0;
5
- exports.LOG_PREFIX_CLEANUP = exports.LOG_PREFIX_UNIQUE_KEYS_TRACKER = exports.LOG_PREFIX_EVENTS_TRACKER = exports.LOG_PREFIX_IMPRESSIONS_TRACKER = exports.LOG_PREFIX_SYNC_SUBMITTERS = exports.LOG_PREFIX_SYNC_POLLING = exports.LOG_PREFIX_SYNC_MYSEGMENTS = exports.LOG_PREFIX_SYNC_SEGMENTS = exports.LOG_PREFIX_SYNC_SPLITS = exports.LOG_PREFIX_SYNC_STREAMING = exports.LOG_PREFIX_SYNC_OFFLINE = exports.LOG_PREFIX_SYNC_MANAGER = exports.LOG_PREFIX_SYNC = exports.LOG_PREFIX_ENGINE_VALUE = exports.LOG_PREFIX_ENGINE_MATCHER = exports.LOG_PREFIX_ENGINE_COMBINER = exports.LOG_PREFIX_ENGINE = exports.LOG_PREFIX_INSTANTIATION = exports.LOG_PREFIX_SETTINGS = exports.ENGINE_MATCHER_ERROR = exports.ERROR_SETS_FILTER_EXCLUSIVE = exports.ERROR_TOO_MANY_SETS = exports.ERROR_MIN_CONFIG_PARAM = exports.ERROR_NOT_BOOLEAN = exports.ERROR_STORAGE_INVALID = exports.ERROR_LOCALHOST_MODULE_REQUIRED = exports.ERROR_HTTP = void 0;
3
+ exports.STREAMING_REFRESH_TOKEN = exports.SYNC_SPLITS_FETCH_RETRY = exports.POLLING_STOP = exports.POLLING_START = exports.POLLING_SMART_PAUSING = exports.NEW_FACTORY = exports.NEW_SHARED_CLIENT = exports.IMPRESSION_QUEUEING = exports.IMPRESSION = exports.CLIENT_READY = exports.CLIENT_READY_FROM_CACHE = exports.SETTINGS_SPLITS_FILTER = exports.SYNC_TASK_STOP = exports.SYNC_TASK_EXECUTE = exports.SYNC_TASK_START = exports.STREAMING_NEW_MESSAGE = exports.SYNC_SPLITS_SEGMENTS = exports.SYNC_SPLITS_REMOVED = exports.SYNC_SPLITS_NEW = exports.SYNC_SPLITS_FETCH = exports.SYNC_OFFLINE_DATA = exports.RETRIEVE_MANAGER = exports.RETRIEVE_CLIENT_EXISTING = exports.RETRIEVE_CLIENT_DEFAULT = exports.CLEANUP_DEREGISTERING = exports.CLEANUP_REGISTERING = exports.ENGINE_SANITIZE = exports.ENGINE_VALUE = exports.ENGINE_MATCHER_WHITELIST = exports.ENGINE_MATCHER_STARTS_WITH = exports.ENGINE_MATCHER_STRING = exports.ENGINE_MATCHER_SEGMENT = exports.ENGINE_MATCHER_PART_OF = exports.ENGINE_MATCHER_LESS = exports.ENGINE_MATCHER_GREATER = exports.ENGINE_MATCHER_ENDS_WITH = exports.ENGINE_MATCHER_EQUAL_TO_SET = exports.ENGINE_MATCHER_EQUAL = exports.ENGINE_MATCHER_DEPENDENCY_PRE = exports.ENGINE_MATCHER_DEPENDENCY = exports.ENGINE_MATCHER_CONTAINS_STRING = exports.ENGINE_MATCHER_CONTAINS_ANY = exports.ENGINE_MATCHER_CONTAINS_ALL = exports.ENGINE_MATCHER_BOOLEAN = exports.ENGINE_MATCHER_BETWEEN = exports.ENGINE_MATCHER_ALL = exports.ENGINE_BUCKET = exports.ENGINE_COMBINER_IFELSEIF_NO_TREATMENT = exports.ENGINE_COMBINER_IFELSEIF = exports.ENGINE_COMBINER_AND = void 0;
4
+ exports.ERROR_STREAMING_AUTH = exports.ERROR_STREAMING_SSE = exports.ERROR_SYNC_OFFLINE_LOADING = exports.ERROR_CLIENT_CANNOT_GET_READY = exports.ERROR_CLIENT_LISTENER = exports.ERROR_LOGLEVEL_INVALID = exports.ERROR_ENGINE_COMBINER_IFELSEIF = exports.WARN_FLAGSET_WITHOUT_FLAGS = exports.WARN_FLAGSET_NOT_CONFIGURED = exports.WARN_LOWERCASE_FLAGSET = exports.WARN_INVALID_FLAGSET = exports.STREAMING_PARSING_SPLIT_UPDATE = exports.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2 = exports.WARN_SDK_KEY = exports.WARN_SPLITS_FILTER_EMPTY = exports.WARN_SPLITS_FILTER_INVALID = exports.WARN_SPLITS_FILTER_IGNORED = exports.WARN_INTEGRATION_INVALID = exports.WARN_NOT_EXISTENT_TT = exports.WARN_LOWERCASE_TRAFFIC_TYPE = exports.WARN_NOT_EXISTENT_SPLIT = exports.WARN_TRIMMING = exports.WARN_CONVERTING = exports.WARN_TRIMMING_PROPERTIES = exports.WARN_SETTING_NULL = exports.SUBMITTERS_PUSH_RETRY = exports.SUBMITTERS_PUSH_FAILS = exports.STREAMING_FALLBACK = exports.STREAMING_PARSING_MESSAGE_FAILS = exports.STREAMING_PARSING_ERROR_FAILS = exports.SYNC_SPLITS_FETCH_FAILS = exports.SYNC_MYSEGMENTS_FETCH_RETRY = exports.CLIENT_NOT_READY = exports.CLIENT_NO_LISTENER = exports.ENGINE_VALUE_NO_ATTRIBUTES = exports.ENGINE_VALUE_INVALID = exports.USER_CONSENT_INITIAL = exports.USER_CONSENT_NOT_UPDATED = exports.USER_CONSENT_UPDATED = exports.IMPRESSIONS_TRACKER_SUCCESS = exports.EVENTS_TRACKER_SUCCESS = exports.SYNC_STOP_POLLING = exports.SYNC_CONTINUE_POLLING = exports.SYNC_START_POLLING = exports.SUBMITTERS_PUSH = exports.SUBMITTERS_PUSH_FULL_QUEUE = exports.STREAMING_DISCONNECTING = exports.STREAMING_DISABLED = exports.STREAMING_CONNECTING = exports.STREAMING_RECONNECT = void 0;
5
+ exports.LOG_PREFIX_CLEANUP = exports.LOG_PREFIX_UNIQUE_KEYS_TRACKER = exports.LOG_PREFIX_EVENTS_TRACKER = exports.LOG_PREFIX_IMPRESSIONS_TRACKER = exports.LOG_PREFIX_SYNC_SUBMITTERS = exports.LOG_PREFIX_SYNC_POLLING = exports.LOG_PREFIX_SYNC_MYSEGMENTS = exports.LOG_PREFIX_SYNC_SEGMENTS = exports.LOG_PREFIX_SYNC_SPLITS = exports.LOG_PREFIX_SYNC_STREAMING = exports.LOG_PREFIX_SYNC_OFFLINE = exports.LOG_PREFIX_SYNC_MANAGER = exports.LOG_PREFIX_SYNC = exports.LOG_PREFIX_ENGINE_VALUE = exports.LOG_PREFIX_ENGINE_MATCHER = exports.LOG_PREFIX_ENGINE_COMBINER = exports.LOG_PREFIX_ENGINE = exports.LOG_PREFIX_INSTANTIATION = exports.LOG_PREFIX_SETTINGS = exports.ENGINE_MATCHER_ERROR = exports.ERROR_SETS_FILTER_EXCLUSIVE = exports.ERROR_TOO_MANY_SETS = exports.ERROR_MIN_CONFIG_PARAM = exports.ERROR_NOT_BOOLEAN = exports.ERROR_STORAGE_INVALID = exports.ERROR_LOCALHOST_MODULE_REQUIRED = exports.ERROR_HTTP = exports.ERROR_INVALID_CONFIG_PARAM = exports.ERROR_EMPTY_ARRAY = exports.ERROR_EMPTY = exports.ERROR_INVALID = exports.ERROR_INVALID_KEY_OBJECT = exports.ERROR_TOO_LONG = exports.ERROR_NULL = exports.ERROR_CLIENT_DESTROYED = exports.ERROR_NOT_FINITE = exports.ERROR_SIZE_EXCEEDED = exports.ERROR_NOT_PLAIN_OBJECT = exports.ERROR_EVENT_TYPE_FORMAT = exports.ERROR_EVENTS_TRACKER = exports.ERROR_IMPRESSIONS_LISTENER = exports.ERROR_IMPRESSIONS_TRACKER = void 0;
6
6
  /**
7
7
  * Message codes used to trim string log messages from commons and client-side API modules,
8
8
  * in order to reduce the minimal SDK size for Browser and eventually other client-side environments.
@@ -14,8 +14,24 @@ exports.ENGINE_COMBINER_AND = 0;
14
14
  exports.ENGINE_COMBINER_IFELSEIF = 1;
15
15
  exports.ENGINE_COMBINER_IFELSEIF_NO_TREATMENT = 2;
16
16
  exports.ENGINE_BUCKET = 3;
17
+ exports.ENGINE_MATCHER_ALL = 4;
18
+ exports.ENGINE_MATCHER_BETWEEN = 5;
19
+ exports.ENGINE_MATCHER_BOOLEAN = 6;
20
+ exports.ENGINE_MATCHER_CONTAINS_ALL = 7;
21
+ exports.ENGINE_MATCHER_CONTAINS_ANY = 8;
22
+ exports.ENGINE_MATCHER_CONTAINS_STRING = 9;
17
23
  exports.ENGINE_MATCHER_DEPENDENCY = 10;
18
24
  exports.ENGINE_MATCHER_DEPENDENCY_PRE = 11;
25
+ exports.ENGINE_MATCHER_EQUAL = 12;
26
+ exports.ENGINE_MATCHER_EQUAL_TO_SET = 13;
27
+ exports.ENGINE_MATCHER_ENDS_WITH = 14;
28
+ exports.ENGINE_MATCHER_GREATER = 15;
29
+ exports.ENGINE_MATCHER_LESS = 16;
30
+ exports.ENGINE_MATCHER_PART_OF = 17;
31
+ exports.ENGINE_MATCHER_SEGMENT = 18;
32
+ exports.ENGINE_MATCHER_STRING = 19;
33
+ exports.ENGINE_MATCHER_STARTS_WITH = 21;
34
+ exports.ENGINE_MATCHER_WHITELIST = 22;
19
35
  exports.ENGINE_VALUE = 23;
20
36
  exports.ENGINE_SANITIZE = 24;
21
37
  exports.CLEANUP_REGISTERING = 25;
@@ -33,7 +49,6 @@ exports.SYNC_TASK_START = 36;
33
49
  exports.SYNC_TASK_EXECUTE = 37;
34
50
  exports.SYNC_TASK_STOP = 38;
35
51
  exports.SETTINGS_SPLITS_FILTER = 39;
36
- exports.ENGINE_MATCHER_RESULT = 40;
37
52
  exports.CLIENT_READY_FROM_CACHE = 100;
38
53
  exports.CLIENT_READY = 101;
39
54
  exports.IMPRESSION = 102;
@@ -10,11 +10,26 @@ exports.codesDebug = info_1.codesInfo.concat([
10
10
  [c.ENGINE_COMBINER_IFELSEIF, c.LOG_PREFIX_ENGINE_COMBINER + 'Treatment found: %s'],
11
11
  [c.ENGINE_COMBINER_IFELSEIF_NO_TREATMENT, c.LOG_PREFIX_ENGINE_COMBINER + 'All predicates evaluated, no treatment found.'],
12
12
  [c.ENGINE_BUCKET, c.LOG_PREFIX_ENGINE + ': using algo "murmur" bucket %s for key %s using seed %s - treatment %s'],
13
- [c.ENGINE_MATCHER_DEPENDENCY, c.LOG_PREFIX_ENGINE_MATCHER + '[dependencyMatcher] parent feature flag "%s" evaluated to "%s" with label "%s". %s evaluated treatment is part of %s ? %s.'],
13
+ [c.ENGINE_MATCHER_ALL, c.LOG_PREFIX_ENGINE_MATCHER + '[allMatcher] is always true'],
14
+ [c.ENGINE_MATCHER_BETWEEN, c.LOG_PREFIX_ENGINE_MATCHER + '[betweenMatcher] is %s between %s and %s? %s'],
15
+ [c.ENGINE_MATCHER_BOOLEAN, c.LOG_PREFIX_ENGINE_MATCHER + '[booleanMatcher] %s === %s'],
16
+ [c.ENGINE_MATCHER_CONTAINS_ALL, c.LOG_PREFIX_ENGINE_MATCHER + '[containsAllMatcher] %s contains all elements of %s? %s'],
17
+ [c.ENGINE_MATCHER_CONTAINS_ANY, c.LOG_PREFIX_ENGINE_MATCHER + '[containsAnyMatcher] %s contains at least an element of %s? %s'],
18
+ [c.ENGINE_MATCHER_CONTAINS_STRING, c.LOG_PREFIX_ENGINE_MATCHER + '[containsStringMatcher] %s contains %s? %s'],
19
+ [c.ENGINE_MATCHER_DEPENDENCY, c.LOG_PREFIX_ENGINE_MATCHER + '[dependencyMatcher] parent feature flag "%s" evaluated to "%s" with label "%s". %s evaluated treatment is part of [%s] ? %s.'],
14
20
  [c.ENGINE_MATCHER_DEPENDENCY_PRE, c.LOG_PREFIX_ENGINE_MATCHER + '[dependencyMatcher] will evaluate parent feature flag: "%s" with key: %s %s'],
15
- [c.ENGINE_VALUE, c.LOG_PREFIX_ENGINE_VALUE + 'Extracted attribute `%s`. %s will be used for matching.'],
16
- [c.ENGINE_SANITIZE, c.LOG_PREFIX_ENGINE + ':sanitize: Attempted to sanitize %s which should be of type %s. Sanitized and processed value => %s'],
17
- [c.ENGINE_MATCHER_RESULT, c.LOG_PREFIX_ENGINE_MATCHER + '[%s] Result: %s. Rule value: %s. Evaluation value: %s'],
21
+ [c.ENGINE_MATCHER_EQUAL, c.LOG_PREFIX_ENGINE_MATCHER + '[equalToMatcher] is %s equal to %s? %s'],
22
+ [c.ENGINE_MATCHER_EQUAL_TO_SET, c.LOG_PREFIX_ENGINE_MATCHER + '[equalToSetMatcher] is %s equal to set %s? %s'],
23
+ [c.ENGINE_MATCHER_ENDS_WITH, c.LOG_PREFIX_ENGINE_MATCHER + '[endsWithMatcher] %s ends with %s? %s'],
24
+ [c.ENGINE_MATCHER_GREATER, c.LOG_PREFIX_ENGINE_MATCHER + '[greaterThanEqualMatcher] is %s greater than %s? %s'],
25
+ [c.ENGINE_MATCHER_LESS, c.LOG_PREFIX_ENGINE_MATCHER + '[lessThanEqualMatcher] is %s less than %s? %s'],
26
+ [c.ENGINE_MATCHER_PART_OF, c.LOG_PREFIX_ENGINE_MATCHER + '[partOfMatcher] %s is part of %s? %s'],
27
+ [c.ENGINE_MATCHER_SEGMENT, c.LOG_PREFIX_ENGINE_MATCHER + '[segmentMatcher] evaluated %s / %s => %s'],
28
+ [c.ENGINE_MATCHER_STRING, c.LOG_PREFIX_ENGINE_MATCHER + '[stringMatcher] does %s matches with %s? %s'],
29
+ [c.ENGINE_MATCHER_STARTS_WITH, c.LOG_PREFIX_ENGINE_MATCHER + '[startsWithMatcher] %s starts with %s? %s'],
30
+ [c.ENGINE_MATCHER_WHITELIST, c.LOG_PREFIX_ENGINE_MATCHER + '[whitelistMatcher] evaluated %s in [%s] => %s'],
31
+ [c.ENGINE_VALUE, c.LOG_PREFIX_ENGINE_VALUE + 'Extracted attribute [%s], [%s] will be used for matching.'],
32
+ [c.ENGINE_SANITIZE, c.LOG_PREFIX_ENGINE + ':sanitize: Attempted to sanitize [%s] which should be of type [%s]. Sanitized and processed value => [%s]'],
18
33
  // SDK
19
34
  [c.CLEANUP_REGISTERING, c.LOG_PREFIX_CLEANUP + 'Registering cleanup handler %s'],
20
35
  [c.CLEANUP_DEREGISTERING, c.LOG_PREFIX_CLEANUP + 'Deregistering cleanup handler %s'],
@@ -5,7 +5,7 @@ var tslib_1 = require("tslib");
5
5
  var c = (0, tslib_1.__importStar)(require("../constants"));
6
6
  exports.codesError = [
7
7
  // evaluator
8
- [c.ERROR_ENGINE_COMBINER_IFELSEIF, c.LOG_PREFIX_ENGINE_COMBINER + 'Invalid feature flag, no valid rules or unsupported matcher type found'],
8
+ [c.ERROR_ENGINE_COMBINER_IFELSEIF, c.LOG_PREFIX_ENGINE_COMBINER + 'Invalid feature flag, no valid rules or unsupported targeting rule type found'],
9
9
  [c.ENGINE_MATCHER_ERROR, c.LOG_PREFIX_ENGINE_MATCHER + '[%s] %s'],
10
10
  // SDK
11
11
  [c.ERROR_LOGLEVEL_INVALID, 'logger: Invalid Log Level - No changes to the logs will be applied.'],
@@ -7,7 +7,7 @@ var error_1 = require("./error");
7
7
  exports.codesWarn = error_1.codesError.concat([
8
8
  // evaluator
9
9
  [c.ENGINE_VALUE_INVALID, c.LOG_PREFIX_ENGINE_VALUE + 'Value %s doesn\'t match with expected type.'],
10
- [c.ENGINE_VALUE_NO_ATTRIBUTES, c.LOG_PREFIX_ENGINE_VALUE + 'Defined attribute `%s`. No attributes received.'],
10
+ [c.ENGINE_VALUE_NO_ATTRIBUTES, c.LOG_PREFIX_ENGINE_VALUE + 'Defined attribute [%s], no attributes received.'],
11
11
  // synchronizer
12
12
  [c.SYNC_MYSEGMENTS_FETCH_RETRY, c.LOG_PREFIX_SYNC_MYSEGMENTS + 'Retrying download of segments #%s. Reason: %s'],
13
13
  [c.SYNC_SPLITS_FETCH_FAILS, c.LOG_PREFIX_SYNC_SPLITS + 'Error while doing fetch of feature flags. %s'],
@@ -32,16 +32,16 @@ function splitApiFactory(settings, platform, telemetryTracker) {
32
32
  return splitHttpClient(url).then(function () { return true; }).catch(function () { return false; });
33
33
  },
34
34
  fetchAuth: function (userMatchingKeys) {
35
- var url = urls.auth + "/v2/auth";
36
- if (userMatchingKeys) { // accounting the possibility that `userMatchingKeys` is undefined (server-side API)
35
+ var url = urls.auth + "/v2/auth?s=" + constants_1.FLAGS_SPEC;
36
+ if (userMatchingKeys) { // `userMatchingKeys` is undefined in server-side
37
37
  var queryParams = userMatchingKeys.map(userKeyToQueryParam).join('&');
38
- if (queryParams) // accounting the possibility that `userKeys` and thus `queryParams` are empty
39
- url += '?' + queryParams;
38
+ if (queryParams)
39
+ url += '&' + queryParams;
40
40
  }
41
41
  return splitHttpClient(url, undefined, telemetryTracker.trackHttp(constants_1.TOKEN));
42
42
  },
43
43
  fetchSplitChanges: function (since, noCache, till) {
44
- var url = urls.sdk + "/splitChanges?since=" + since + (till ? '&till=' + till : '') + (filterQueryString || '');
44
+ var url = urls.sdk + "/splitChanges?s=" + constants_1.FLAGS_SPEC + "&since=" + since + (till ? '&till=' + till : '') + (filterQueryString || '');
45
45
  return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(constants_1.SPLITS))
46
46
  .catch(function (err) {
47
47
  if (err.statusCode === 414)
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getStorageHash = exports.KeyBuilder = exports.validatePrefix = void 0;
4
+ var constants_1 = require("../utils/constants");
4
5
  var lang_1 = require("../utils/lang");
5
6
  var murmur3_1 = require("../utils/murmur3/murmur3");
6
7
  var everythingAtTheEnd = /[^.]+$/;
@@ -66,10 +67,10 @@ var KeyBuilder = /** @class */ (function () {
66
67
  }());
67
68
  exports.KeyBuilder = KeyBuilder;
68
69
  /**
69
- * Generates a murmur32 hash based on the authorization key and the feature flags filter query.
70
+ * Generates a murmur32 hash based on the authorization key, the feature flags filter query, and version of SplitChanges API.
70
71
  * The hash is in hexadecimal format (8 characters max, 32 bits).
71
72
  */
72
73
  function getStorageHash(settings) {
73
- return (0, murmur3_1.hash)(settings.core.authorizationKey + "::" + settings.sync.__splitFiltersValidation.queryString).toString(16);
74
+ return (0, murmur3_1.hash)(settings.core.authorizationKey + "::" + settings.sync.__splitFiltersValidation.queryString + "::" + constants_1.FLAGS_SPEC).toString(16);
74
75
  }
75
76
  exports.getStorageHash = getStorageHash;
@@ -126,7 +126,7 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
126
126
  SplitsCacheInLocal.prototype.setChangeNumber = function (changeNumber) {
127
127
  // when using a new split query, we must update it at the store
128
128
  if (this.updateNewFilter) {
129
- this.log.info(constants_1.LOG_PREFIX + 'SDK key or feature flag filter criteria was modified. Updating cache');
129
+ this.log.info(constants_1.LOG_PREFIX + 'SDK key, flags filter criteria or flags spec version was modified. Updating cache');
130
130
  var storageHashKey = this.keys.buildHashKey();
131
131
  try {
132
132
  localStorage.setItem(storageHashKey, this.storageHash);
@@ -82,7 +82,7 @@ function PluggableStorage(options) {
82
82
  return wrapper.get(keys.buildHashKey()).then(function (hash) {
83
83
  var currentHash = (0, KeyBuilder_1.getStorageHash)(settings);
84
84
  if (hash !== currentHash) {
85
- log.info(constants_2.LOG_PREFIX + 'Storage HASH has changed (SDK key or feature flag filter criteria was modified). Clearing cache');
85
+ log.info(constants_2.LOG_PREFIX + 'Storage HASH has changed (SDK key, flags filter criteria or flags spec version was modified). Clearing cache');
86
86
  return wrapper.getKeysByPrefix(keys.prefix + ".").then(function (storageKeys) {
87
87
  return Promise.all(storageKeys.map(function (storageKey) { return wrapper.del(storageKey); }));
88
88
  }).then(function () { return wrapper.set(keys.buildHashKey(), currentHash); });