@splitsoftware/splitio-commons 1.13.2-rc.1 → 1.13.2-rc.11
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.
- package/CHANGES.txt +4 -3
- package/cjs/evaluator/Engine.js +5 -6
- package/cjs/evaluator/combiners/ifelseif.js +2 -3
- package/cjs/evaluator/condition/index.js +2 -3
- package/cjs/evaluator/index.js +4 -5
- package/cjs/evaluator/matchers/gte.js +3 -3
- package/cjs/evaluator/matchers/index.js +11 -1
- package/cjs/evaluator/matchers/lte.js +3 -3
- package/cjs/evaluator/matchers/matcherTypes.js +6 -1
- package/cjs/evaluator/matchers/semver_between.js +14 -0
- package/cjs/evaluator/matchers/semver_eq.js +13 -0
- package/cjs/evaluator/matchers/semver_gte.js +13 -0
- package/cjs/evaluator/matchers/semver_inlist.js +17 -0
- package/cjs/evaluator/matchers/semver_lte.js +13 -0
- package/cjs/evaluator/matchers/string.js +2 -9
- package/cjs/evaluator/matchers/whitelist.js +3 -2
- package/cjs/evaluator/matchersTransform/index.js +21 -16
- package/cjs/evaluator/matchersTransform/whitelist.js +2 -3
- package/cjs/evaluator/parser/index.js +19 -6
- package/cjs/logger/constants.js +4 -4
- package/cjs/logger/index.js +8 -1
- package/cjs/logger/messages/debug.js +0 -1
- package/cjs/logger/messages/error.js +2 -1
- package/cjs/services/splitApi.js +5 -5
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +1 -1
- package/cjs/storages/pluggable/index.js +1 -1
- package/cjs/utils/Semver.js +103 -0
- package/cjs/utils/labels/index.js +1 -1
- package/cjs/utils/settingsValidation/logger/pluggableLogger.js +1 -1
- package/esm/evaluator/Engine.js +5 -5
- package/esm/evaluator/combiners/ifelseif.js +2 -2
- package/esm/evaluator/condition/index.js +2 -2
- package/esm/evaluator/index.js +4 -4
- package/esm/evaluator/matchers/gte.js +3 -3
- package/esm/evaluator/matchers/index.js +11 -1
- package/esm/evaluator/matchers/lte.js +3 -3
- package/esm/evaluator/matchers/matcherTypes.js +6 -1
- package/esm/evaluator/matchers/semver_between.js +10 -0
- package/esm/evaluator/matchers/semver_eq.js +9 -0
- package/esm/evaluator/matchers/semver_gte.js +9 -0
- package/esm/evaluator/matchers/semver_inlist.js +13 -0
- package/esm/evaluator/matchers/semver_lte.js +9 -0
- package/esm/evaluator/matchers/string.js +3 -10
- package/esm/evaluator/matchers/whitelist.js +4 -3
- package/esm/evaluator/matchersTransform/index.js +21 -16
- package/esm/evaluator/matchersTransform/whitelist.js +2 -3
- package/esm/evaluator/parser/index.js +19 -6
- package/esm/logger/constants.js +1 -1
- package/esm/logger/index.js +9 -2
- package/esm/logger/messages/debug.js +0 -1
- package/esm/logger/messages/error.js +2 -1
- package/esm/services/splitApi.js +5 -5
- package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +1 -1
- package/esm/storages/pluggable/index.js +1 -1
- package/esm/utils/Semver.js +100 -0
- package/esm/utils/labels/index.js +1 -1
- package/esm/utils/settingsValidation/logger/pluggableLogger.js +1 -1
- package/package.json +1 -2
- package/src/dtos/types.ts +34 -1
- package/src/evaluator/Engine.ts +5 -6
- package/src/evaluator/combiners/ifelseif.ts +2 -2
- package/src/evaluator/condition/index.ts +2 -2
- package/src/evaluator/index.ts +4 -4
- package/src/evaluator/matchers/between.ts +1 -1
- package/src/evaluator/matchers/boolean.ts +1 -1
- package/src/evaluator/matchers/cont_all.ts +1 -1
- package/src/evaluator/matchers/cont_any.ts +1 -1
- package/src/evaluator/matchers/cont_str.ts +1 -1
- package/src/evaluator/matchers/eq.ts +1 -1
- package/src/evaluator/matchers/eq_set.ts +1 -1
- package/src/evaluator/matchers/ew.ts +1 -1
- package/src/evaluator/matchers/gte.ts +4 -4
- package/src/evaluator/matchers/index.ts +28 -18
- package/src/evaluator/matchers/lte.ts +4 -4
- package/src/evaluator/matchers/matcherTypes.ts +6 -1
- package/src/evaluator/matchers/part_of.ts +1 -1
- package/src/evaluator/matchers/semver_between.ts +16 -0
- package/src/evaluator/matchers/semver_eq.ts +14 -0
- package/src/evaluator/matchers/semver_gte.ts +14 -0
- package/src/evaluator/matchers/semver_inlist.ts +17 -0
- package/src/evaluator/matchers/semver_lte.ts +14 -0
- package/src/evaluator/matchers/string.ts +5 -13
- package/src/evaluator/matchers/sw.ts +1 -1
- package/src/evaluator/matchers/whitelist.ts +6 -4
- package/src/evaluator/matchersTransform/index.ts +31 -23
- package/src/evaluator/matchersTransform/whitelist.ts +4 -5
- package/src/evaluator/parser/index.ts +19 -7
- package/src/evaluator/types.ts +3 -3
- package/src/logger/constants.ts +1 -1
- package/src/logger/index.ts +8 -2
- package/src/logger/messages/debug.ts +0 -1
- package/src/logger/messages/error.ts +2 -1
- package/src/services/splitApi.ts +4 -5
- package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +1 -1
- package/src/storages/pluggable/index.ts +1 -1
- package/src/utils/Semver.ts +111 -0
- package/src/utils/labels/index.ts +1 -1
- package/src/utils/settingsValidation/logger/pluggableLogger.ts +1 -1
- package/types/dtos/types.d.ts +26 -1
- package/types/evaluator/matchers/sember_inlist.d.ts +3 -0
- package/types/evaluator/matchers/semver_between.d.ts +3 -0
- package/types/evaluator/matchers/semver_eq.d.ts +2 -0
- package/types/evaluator/matchers/semver_gte.d.ts +2 -0
- package/types/evaluator/matchers/semver_inlist.d.ts +2 -0
- package/types/evaluator/matchers/semver_lte.d.ts +2 -0
- package/types/evaluator/matchers/whitelist.d.ts +1 -2
- package/types/evaluator/matchersTransform/set.d.ts +2 -2
- package/types/evaluator/matchersTransform/string.d.ts +7 -0
- package/types/evaluator/matchersTransform/whitelist.d.ts +3 -3
- package/types/evaluator/types.d.ts +3 -3
- package/types/logger/constants.d.ts +1 -1
- package/types/utils/labels/index.d.ts +1 -1
- package/types/utils/semVer.d.ts +15 -0
- package/cjs/evaluator/matchersTransform/set.js +0 -10
- package/esm/evaluator/matchersTransform/set.js +0 -6
- package/src/evaluator/matchersTransform/set.ts +0 -8
package/CHANGES.txt
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
1.14.0 (
|
|
2
|
-
-
|
|
3
|
-
-
|
|
1
|
+
1.14.0 (May 3, 2024)
|
|
2
|
+
- Added support for targeting rules based on semantic versions (https://semver.org/).
|
|
3
|
+
- Added special impression label "targeting rule type unsupported by sdk" when the matcher type is not supported by the SDK, which returns 'control' treatment.
|
|
4
|
+
- Updated Split API client to include the flags spec version query parameter for the `splitChanges` and `auth` endpoints.
|
|
4
5
|
|
|
5
6
|
1.13.1 (January 10, 2024)
|
|
6
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.
|
package/cjs/evaluator/Engine.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Engine = void 0;
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
4
|
var lang_1 = require("../utils/lang");
|
|
6
5
|
var parser_1 = require("./parser");
|
|
7
6
|
var key_1 = require("../utils/key");
|
|
8
7
|
var thenable_1 = require("../utils/promise/thenable");
|
|
9
|
-
var
|
|
8
|
+
var labels_1 = require("../utils/labels");
|
|
10
9
|
var constants_1 = require("../utils/constants");
|
|
11
10
|
function evaluationResult(result, defaultTreatment) {
|
|
12
11
|
return {
|
|
13
12
|
treatment: (0, lang_1.get)(result, 'treatment', defaultTreatment),
|
|
14
|
-
label: (0, lang_1.get)(result, 'label',
|
|
13
|
+
label: (0, lang_1.get)(result, 'label', labels_1.NO_CONDITION_MATCH)
|
|
15
14
|
};
|
|
16
15
|
}
|
|
17
16
|
var Engine = /** @class */ (function () {
|
|
@@ -42,16 +41,16 @@ var Engine = /** @class */ (function () {
|
|
|
42
41
|
catch (err) {
|
|
43
42
|
return {
|
|
44
43
|
treatment: constants_1.CONTROL,
|
|
45
|
-
label:
|
|
44
|
+
label: labels_1.EXCEPTION
|
|
46
45
|
};
|
|
47
46
|
}
|
|
48
47
|
if (this.isGarbage()) {
|
|
49
48
|
treatment = constants_1.CONTROL;
|
|
50
|
-
label =
|
|
49
|
+
label = labels_1.SPLIT_ARCHIVED;
|
|
51
50
|
}
|
|
52
51
|
else if (killed) {
|
|
53
52
|
treatment = defaultTreatment;
|
|
54
|
-
label =
|
|
53
|
+
label = labels_1.SPLIT_KILLED;
|
|
55
54
|
}
|
|
56
55
|
else {
|
|
57
56
|
var evaluation = this.evaluator(parsedKey, seed, trafficAllocation, trafficAllocationSeed, attributes, splitEvaluator);
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ifElseIfCombinerContext = void 0;
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
4
|
var lang_1 = require("../../utils/lang");
|
|
6
5
|
var thenable_1 = require("../../utils/promise/thenable");
|
|
7
|
-
var
|
|
6
|
+
var labels_1 = require("../../utils/labels");
|
|
8
7
|
var constants_1 = require("../../utils/constants");
|
|
9
8
|
var constants_2 = require("../../logger/constants");
|
|
10
9
|
function ifElseIfCombinerContext(log, predicates) {
|
|
@@ -12,7 +11,7 @@ function ifElseIfCombinerContext(log, predicates) {
|
|
|
12
11
|
log.error(constants_2.ERROR_ENGINE_COMBINER_IFELSEIF);
|
|
13
12
|
return {
|
|
14
13
|
treatment: constants_1.CONTROL,
|
|
15
|
-
label:
|
|
14
|
+
label: labels_1.UNSUPPORTED_MATCHER_TYPE
|
|
16
15
|
};
|
|
17
16
|
}
|
|
18
17
|
function computeTreatment(predicateResults) {
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.conditionContext = void 0;
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
4
|
var engineUtils_1 = require("./engineUtils");
|
|
6
5
|
var thenable_1 = require("../../utils/promise/thenable");
|
|
7
|
-
var
|
|
6
|
+
var labels_1 = require("../../utils/labels");
|
|
8
7
|
// Build Evaluation object if and only if matchingResult is true
|
|
9
8
|
function match(log, matchingResult, bucketingKey, seed, treatments, label) {
|
|
10
9
|
if (matchingResult) {
|
|
@@ -24,7 +23,7 @@ function conditionContext(log, matcherEvaluator, treatments, label, conditionTyp
|
|
|
24
23
|
if (conditionType === 'ROLLOUT' && !(0, engineUtils_1.shouldApplyRollout)(trafficAllocation, key.bucketingKey, trafficAllocationSeed)) {
|
|
25
24
|
return {
|
|
26
25
|
treatment: undefined,
|
|
27
|
-
label:
|
|
26
|
+
label: labels_1.NOT_IN_SPLIT
|
|
28
27
|
};
|
|
29
28
|
}
|
|
30
29
|
// matcherEvaluator could be Async, this relays on matchers return value, so we need
|
package/cjs/evaluator/index.js
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.evaluateFeaturesByFlagSets = exports.evaluateFeatures = exports.evaluateFeature = void 0;
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
4
|
var Engine_1 = require("./Engine");
|
|
6
5
|
var thenable_1 = require("../utils/promise/thenable");
|
|
7
|
-
var
|
|
6
|
+
var labels_1 = require("../utils/labels");
|
|
8
7
|
var constants_1 = require("../utils/constants");
|
|
9
8
|
var sets_1 = require("../utils/lang/sets");
|
|
10
9
|
var constants_2 = require("../logger/constants");
|
|
11
10
|
var treatmentException = {
|
|
12
11
|
treatment: constants_1.CONTROL,
|
|
13
|
-
label:
|
|
12
|
+
label: labels_1.EXCEPTION,
|
|
14
13
|
config: null
|
|
15
14
|
};
|
|
16
15
|
function treatmentsException(splitNames) {
|
|
@@ -94,13 +93,13 @@ exports.evaluateFeaturesByFlagSets = evaluateFeaturesByFlagSets;
|
|
|
94
93
|
function getEvaluation(log, splitJSON, key, attributes, storage) {
|
|
95
94
|
var evaluation = {
|
|
96
95
|
treatment: constants_1.CONTROL,
|
|
97
|
-
label:
|
|
96
|
+
label: labels_1.SPLIT_NOT_FOUND,
|
|
98
97
|
config: null
|
|
99
98
|
};
|
|
100
99
|
if (splitJSON) {
|
|
101
100
|
var split_1 = Engine_1.Engine.parse(log, splitJSON, storage);
|
|
102
101
|
evaluation = split_1.getTreatment(key, attributes, evaluateFeature);
|
|
103
|
-
// If the storage is async and the evaluated
|
|
102
|
+
// If the storage is async and the evaluated flag uses segments or dependencies, evaluation is thenable
|
|
104
103
|
if ((0, thenable_1.thenable)(evaluation)) {
|
|
105
104
|
return evaluation.then(function (result) {
|
|
106
105
|
result.changeNumber = split_1.getChangeNumber();
|
|
@@ -4,9 +4,9 @@ exports.greaterThanEqualMatcherContext = void 0;
|
|
|
4
4
|
var constants_1 = require("../../logger/constants");
|
|
5
5
|
function greaterThanEqualMatcherContext(log, ruleAttr) {
|
|
6
6
|
return function greaterThanEqualMatcher(runtimeAttr) {
|
|
7
|
-
var
|
|
8
|
-
log.debug(constants_1.ENGINE_MATCHER_GREATER, [runtimeAttr, ruleAttr,
|
|
9
|
-
return
|
|
7
|
+
var isGreaterThanEqual = runtimeAttr >= ruleAttr;
|
|
8
|
+
log.debug(constants_1.ENGINE_MATCHER_GREATER, [runtimeAttr, ruleAttr, isGreaterThanEqual]);
|
|
9
|
+
return isGreaterThanEqual;
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
12
|
exports.greaterThanEqualMatcherContext = greaterThanEqualMatcherContext;
|
|
@@ -18,6 +18,11 @@ var cont_str_1 = require("./cont_str");
|
|
|
18
18
|
var dependency_1 = require("./dependency");
|
|
19
19
|
var boolean_1 = require("./boolean");
|
|
20
20
|
var string_1 = require("./string");
|
|
21
|
+
var semver_eq_1 = require("./semver_eq");
|
|
22
|
+
var semver_gte_1 = require("./semver_gte");
|
|
23
|
+
var semver_lte_1 = require("./semver_lte");
|
|
24
|
+
var semver_between_1 = require("./semver_between");
|
|
25
|
+
var semver_inlist_1 = require("./semver_inlist");
|
|
21
26
|
var matchers = [
|
|
22
27
|
undefined,
|
|
23
28
|
all_1.allMatcherContext,
|
|
@@ -36,7 +41,12 @@ var matchers = [
|
|
|
36
41
|
cont_str_1.containsStringMatcherContext,
|
|
37
42
|
dependency_1.dependencyMatcherContext,
|
|
38
43
|
boolean_1.booleanMatcherContext,
|
|
39
|
-
string_1.stringMatcherContext
|
|
44
|
+
string_1.stringMatcherContext,
|
|
45
|
+
semver_eq_1.equalToSemverMatcherContext,
|
|
46
|
+
semver_gte_1.greaterThanEqualToSemverMatcherContext,
|
|
47
|
+
semver_lte_1.lessThanEqualToSemverMatcherContext,
|
|
48
|
+
semver_between_1.betweenSemverMatcherContext,
|
|
49
|
+
semver_inlist_1.inListSemverMatcherContext, // IN_LIST_SEMVER: 22
|
|
40
50
|
];
|
|
41
51
|
/**
|
|
42
52
|
* Matcher factory.
|
|
@@ -4,9 +4,9 @@ exports.lessThanEqualMatcherContext = void 0;
|
|
|
4
4
|
var constants_1 = require("../../logger/constants");
|
|
5
5
|
function lessThanEqualMatcherContext(log, ruleAttr) {
|
|
6
6
|
return function lessThanEqualMatcher(runtimeAttr) {
|
|
7
|
-
var
|
|
8
|
-
log.debug(constants_1.ENGINE_MATCHER_LESS, [runtimeAttr, ruleAttr,
|
|
9
|
-
return
|
|
7
|
+
var isLessThanEqual = runtimeAttr <= ruleAttr;
|
|
8
|
+
log.debug(constants_1.ENGINE_MATCHER_LESS, [runtimeAttr, ruleAttr, isLessThanEqual]);
|
|
9
|
+
return isLessThanEqual;
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
12
|
exports.lessThanEqualMatcherContext = lessThanEqualMatcherContext;
|
|
@@ -19,7 +19,12 @@ exports.matcherTypes = {
|
|
|
19
19
|
CONTAINS_STRING: 14,
|
|
20
20
|
IN_SPLIT_TREATMENT: 15,
|
|
21
21
|
EQUAL_TO_BOOLEAN: 16,
|
|
22
|
-
MATCHES_STRING: 17
|
|
22
|
+
MATCHES_STRING: 17,
|
|
23
|
+
EQUAL_TO_SEMVER: 18,
|
|
24
|
+
GREATER_THAN_OR_EQUAL_TO_SEMVER: 19,
|
|
25
|
+
LESS_THAN_OR_EQUAL_TO_SEMVER: 20,
|
|
26
|
+
BETWEEN_SEMVER: 21,
|
|
27
|
+
IN_LIST_SEMVER: 22,
|
|
23
28
|
};
|
|
24
29
|
exports.matcherDataTypes = {
|
|
25
30
|
BOOLEAN: 'BOOLEAN',
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.betweenSemverMatcherContext = void 0;
|
|
4
|
+
var Semver_1 = require("../../utils/Semver");
|
|
5
|
+
function betweenSemverMatcherContext(log, ruleAttr) {
|
|
6
|
+
var startSemver = new Semver_1.Semver(ruleAttr.start);
|
|
7
|
+
var endSemver = new Semver_1.Semver(ruleAttr.end);
|
|
8
|
+
return function betweenSemverMatcher(runtimeAttr) {
|
|
9
|
+
var runtimeSemver = new Semver_1.Semver(runtimeAttr);
|
|
10
|
+
var isBetween = startSemver.compare(runtimeSemver) <= 0 && endSemver.compare(runtimeSemver) >= 0;
|
|
11
|
+
return isBetween;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
exports.betweenSemverMatcherContext = betweenSemverMatcherContext;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.equalToSemverMatcherContext = void 0;
|
|
4
|
+
var Semver_1 = require("../../utils/Semver");
|
|
5
|
+
function equalToSemverMatcherContext(log, ruleAttr) {
|
|
6
|
+
var ruleSemver = new Semver_1.Semver(ruleAttr);
|
|
7
|
+
return function equalToSemverMatcher(runtimeAttr) {
|
|
8
|
+
var runtimeSemver = new Semver_1.Semver(runtimeAttr);
|
|
9
|
+
var isEqual = ruleSemver.version === runtimeSemver.version;
|
|
10
|
+
return isEqual;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
exports.equalToSemverMatcherContext = equalToSemverMatcherContext;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.greaterThanEqualToSemverMatcherContext = void 0;
|
|
4
|
+
var Semver_1 = require("../../utils/Semver");
|
|
5
|
+
function greaterThanEqualToSemverMatcherContext(log, ruleAttr) {
|
|
6
|
+
var ruleSemver = new Semver_1.Semver(ruleAttr);
|
|
7
|
+
return function greaterThanEqualToSemverMatcher(runtimeAttr) {
|
|
8
|
+
var runtimeSemver = new Semver_1.Semver(runtimeAttr);
|
|
9
|
+
var isGreaterThanEqual = runtimeSemver.compare(ruleSemver) >= 0;
|
|
10
|
+
return isGreaterThanEqual;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
exports.greaterThanEqualToSemverMatcherContext = greaterThanEqualToSemverMatcherContext;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inListSemverMatcherContext = void 0;
|
|
4
|
+
var sets_1 = require("../../utils/lang/sets");
|
|
5
|
+
var Semver_1 = require("../../utils/Semver");
|
|
6
|
+
function inListSemverMatcherContext(log, ruleAttr) {
|
|
7
|
+
// @TODO ruleAttr validation should be done at the `parser` or `matchersTransform` level to reuse for all matchers
|
|
8
|
+
if (!ruleAttr || ruleAttr.length === 0)
|
|
9
|
+
throw new Error('whitelistMatcherData is required for IN_LIST_SEMVER matcher type');
|
|
10
|
+
var listOfSemvers = new sets_1._Set(ruleAttr.map(function (version) { return new Semver_1.Semver(version).version; }));
|
|
11
|
+
return function inListSemverMatcher(runtimeAttr) {
|
|
12
|
+
var runtimeSemver = new Semver_1.Semver(runtimeAttr).version;
|
|
13
|
+
var isInList = listOfSemvers.has(runtimeSemver);
|
|
14
|
+
return isInList;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
exports.inListSemverMatcherContext = inListSemverMatcherContext;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lessThanEqualToSemverMatcherContext = void 0;
|
|
4
|
+
var Semver_1 = require("../../utils/Semver");
|
|
5
|
+
function lessThanEqualToSemverMatcherContext(log, ruleAttr) {
|
|
6
|
+
var ruleSemver = new Semver_1.Semver(ruleAttr);
|
|
7
|
+
return function lessThanEqualToSemverMatcher(runtimeAttr) {
|
|
8
|
+
var runtimeSemver = new Semver_1.Semver(runtimeAttr);
|
|
9
|
+
var isLessThanEqual = runtimeSemver.compare(ruleSemver) <= 0;
|
|
10
|
+
return isLessThanEqual;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
exports.lessThanEqualToSemverMatcherContext = lessThanEqualToSemverMatcherContext;
|
|
@@ -3,16 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.stringMatcherContext = void 0;
|
|
4
4
|
var constants_1 = require("../../logger/constants");
|
|
5
5
|
function stringMatcherContext(log, ruleAttr) {
|
|
6
|
+
var regex = new RegExp(ruleAttr);
|
|
6
7
|
return function stringMatcher(runtimeAttr) {
|
|
7
|
-
var
|
|
8
|
-
try {
|
|
9
|
-
re = new RegExp(ruleAttr);
|
|
10
|
-
}
|
|
11
|
-
catch (e) {
|
|
12
|
-
log.debug(constants_1.ENGINE_MATCHER_STRING_INVALID, [ruleAttr]);
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
var regexMatches = re.test(runtimeAttr);
|
|
8
|
+
var regexMatches = regex.test(runtimeAttr);
|
|
16
9
|
log.debug(constants_1.ENGINE_MATCHER_STRING, [runtimeAttr, ruleAttr, regexMatches ? 'yes' : 'no']);
|
|
17
10
|
return regexMatches;
|
|
18
11
|
};
|
|
@@ -4,9 +4,10 @@ exports.whitelistMatcherContext = void 0;
|
|
|
4
4
|
var sets_1 = require("../../utils/lang/sets");
|
|
5
5
|
var constants_1 = require("../../logger/constants");
|
|
6
6
|
function whitelistMatcherContext(log, ruleAttr) {
|
|
7
|
+
var whitelistSet = new sets_1._Set(ruleAttr);
|
|
7
8
|
return function whitelistMatcher(runtimeAttr) {
|
|
8
|
-
var isInWhitelist =
|
|
9
|
-
log.debug(constants_1.ENGINE_MATCHER_WHITELIST, [runtimeAttr,
|
|
9
|
+
var isInWhitelist = whitelistSet.has(runtimeAttr);
|
|
10
|
+
log.debug(constants_1.ENGINE_MATCHER_WHITELIST, [runtimeAttr, ruleAttr.join(','), isInWhitelist]);
|
|
10
11
|
return isInWhitelist;
|
|
11
12
|
};
|
|
12
13
|
}
|
|
@@ -5,7 +5,6 @@ var lang_1 = require("../../utils/lang");
|
|
|
5
5
|
var matcherTypes_1 = require("../matchers/matcherTypes");
|
|
6
6
|
var segment_1 = require("./segment");
|
|
7
7
|
var whitelist_1 = require("./whitelist");
|
|
8
|
-
var set_1 = require("./set");
|
|
9
8
|
var unaryNumeric_1 = require("./unaryNumeric");
|
|
10
9
|
var convertions_1 = require("../convertions");
|
|
11
10
|
/**
|
|
@@ -13,37 +12,34 @@ var convertions_1 = require("../convertions");
|
|
|
13
12
|
*/
|
|
14
13
|
function matchersTransform(matchers) {
|
|
15
14
|
var parsedMatchers = matchers.map(function (matcher) {
|
|
16
|
-
var matcherType = matcher.matcherType
|
|
15
|
+
var matcherType = matcher.matcherType, negate = matcher.negate, keySelector = matcher.keySelector, userDefinedSegmentMatcherData = matcher.userDefinedSegmentMatcherData, whitelistMatcherData = matcher.whitelistMatcherData, /* whitelistObject, provided by 'WHITELIST', 'IN_LIST_SEMVER', set and string matchers */ unaryNumericMatcherData = matcher.unaryNumericMatcherData, betweenMatcherData = matcher.betweenMatcherData, dependencyMatcherData = matcher.dependencyMatcherData, booleanMatcherData = matcher.booleanMatcherData, stringMatcherData = matcher.stringMatcherData, betweenStringMatcherData = matcher.betweenStringMatcherData;
|
|
17
16
|
var attribute = keySelector && keySelector.attribute;
|
|
18
17
|
var type = (0, matcherTypes_1.matcherTypesMapper)(matcherType);
|
|
19
18
|
// As default input data type we use string (even for ALL_KEYS)
|
|
20
19
|
var dataType = matcherTypes_1.matcherDataTypes.STRING;
|
|
21
20
|
var value = undefined;
|
|
22
21
|
if (type === matcherTypes_1.matcherTypes.IN_SEGMENT) {
|
|
23
|
-
value = (0, segment_1.segmentTransform)(
|
|
24
|
-
}
|
|
25
|
-
else if (type === matcherTypes_1.matcherTypes.WHITELIST) {
|
|
26
|
-
value = (0, whitelist_1.whitelistTransform)(whitelistObject);
|
|
22
|
+
value = (0, segment_1.segmentTransform)(userDefinedSegmentMatcherData);
|
|
27
23
|
}
|
|
28
24
|
else if (type === matcherTypes_1.matcherTypes.EQUAL_TO) {
|
|
29
|
-
value = (0, unaryNumeric_1.numericTransform)(
|
|
25
|
+
value = (0, unaryNumeric_1.numericTransform)(unaryNumericMatcherData);
|
|
30
26
|
dataType = matcherTypes_1.matcherDataTypes.NUMBER;
|
|
31
|
-
if (
|
|
27
|
+
if (unaryNumericMatcherData.dataType === 'DATETIME') {
|
|
32
28
|
value = (0, convertions_1.zeroSinceHH)(value);
|
|
33
29
|
dataType = matcherTypes_1.matcherDataTypes.DATETIME;
|
|
34
30
|
}
|
|
35
31
|
}
|
|
36
32
|
else if (type === matcherTypes_1.matcherTypes.GREATER_THAN_OR_EQUAL_TO ||
|
|
37
33
|
type === matcherTypes_1.matcherTypes.LESS_THAN_OR_EQUAL_TO) {
|
|
38
|
-
value = (0, unaryNumeric_1.numericTransform)(
|
|
34
|
+
value = (0, unaryNumeric_1.numericTransform)(unaryNumericMatcherData);
|
|
39
35
|
dataType = matcherTypes_1.matcherDataTypes.NUMBER;
|
|
40
|
-
if (
|
|
36
|
+
if (unaryNumericMatcherData.dataType === 'DATETIME') {
|
|
41
37
|
value = (0, convertions_1.zeroSinceSS)(value);
|
|
42
38
|
dataType = matcherTypes_1.matcherDataTypes.DATETIME;
|
|
43
39
|
}
|
|
44
40
|
}
|
|
45
41
|
else if (type === matcherTypes_1.matcherTypes.BETWEEN) {
|
|
46
|
-
value =
|
|
42
|
+
value = betweenMatcherData;
|
|
47
43
|
dataType = matcherTypes_1.matcherDataTypes.NUMBER;
|
|
48
44
|
if (value.dataType === 'DATETIME') {
|
|
49
45
|
value.start = (0, convertions_1.zeroSinceSS)(value.start);
|
|
@@ -51,33 +47,42 @@ function matchersTransform(matchers) {
|
|
|
51
47
|
dataType = matcherTypes_1.matcherDataTypes.DATETIME;
|
|
52
48
|
}
|
|
53
49
|
}
|
|
50
|
+
else if (type === matcherTypes_1.matcherTypes.BETWEEN_SEMVER) {
|
|
51
|
+
value = betweenStringMatcherData;
|
|
52
|
+
}
|
|
54
53
|
else if (type === matcherTypes_1.matcherTypes.EQUAL_TO_SET ||
|
|
55
54
|
type === matcherTypes_1.matcherTypes.CONTAINS_ANY_OF_SET ||
|
|
56
55
|
type === matcherTypes_1.matcherTypes.CONTAINS_ALL_OF_SET ||
|
|
57
56
|
type === matcherTypes_1.matcherTypes.PART_OF_SET) {
|
|
58
|
-
value = (0,
|
|
57
|
+
value = (0, whitelist_1.whitelistTransform)(whitelistMatcherData);
|
|
59
58
|
dataType = matcherTypes_1.matcherDataTypes.SET;
|
|
60
59
|
}
|
|
61
|
-
else if (type === matcherTypes_1.matcherTypes.
|
|
60
|
+
else if (type === matcherTypes_1.matcherTypes.WHITELIST ||
|
|
61
|
+
type === matcherTypes_1.matcherTypes.IN_LIST_SEMVER ||
|
|
62
|
+
type === matcherTypes_1.matcherTypes.STARTS_WITH ||
|
|
62
63
|
type === matcherTypes_1.matcherTypes.ENDS_WITH ||
|
|
63
64
|
type === matcherTypes_1.matcherTypes.CONTAINS_STRING) {
|
|
64
|
-
value = (0,
|
|
65
|
+
value = (0, whitelist_1.whitelistTransform)(whitelistMatcherData);
|
|
65
66
|
}
|
|
66
67
|
else if (type === matcherTypes_1.matcherTypes.IN_SPLIT_TREATMENT) {
|
|
67
|
-
value =
|
|
68
|
+
value = dependencyMatcherData;
|
|
68
69
|
dataType = matcherTypes_1.matcherDataTypes.NOT_SPECIFIED;
|
|
69
70
|
}
|
|
70
71
|
else if (type === matcherTypes_1.matcherTypes.EQUAL_TO_BOOLEAN) {
|
|
71
72
|
dataType = matcherTypes_1.matcherDataTypes.BOOLEAN;
|
|
72
73
|
value = booleanMatcherData;
|
|
73
74
|
}
|
|
74
|
-
else if (type === matcherTypes_1.matcherTypes.MATCHES_STRING
|
|
75
|
+
else if (type === matcherTypes_1.matcherTypes.MATCHES_STRING ||
|
|
76
|
+
type === matcherTypes_1.matcherTypes.EQUAL_TO_SEMVER ||
|
|
77
|
+
type === matcherTypes_1.matcherTypes.GREATER_THAN_OR_EQUAL_TO_SEMVER ||
|
|
78
|
+
type === matcherTypes_1.matcherTypes.LESS_THAN_OR_EQUAL_TO_SEMVER) {
|
|
75
79
|
value = stringMatcherData;
|
|
76
80
|
}
|
|
77
81
|
return {
|
|
78
82
|
attribute: attribute,
|
|
79
83
|
negate: negate,
|
|
80
84
|
type: type,
|
|
85
|
+
name: matcherType,
|
|
81
86
|
value: value,
|
|
82
87
|
dataType: dataType // runtime input data type
|
|
83
88
|
};
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.whitelistTransform = void 0;
|
|
4
|
-
var sets_1 = require("../../utils/lang/sets");
|
|
5
4
|
/**
|
|
6
|
-
* Extract whitelist
|
|
5
|
+
* Extract whitelist array.
|
|
7
6
|
*/
|
|
8
7
|
function whitelistTransform(whitelistObject) {
|
|
9
|
-
return
|
|
8
|
+
return whitelistObject && whitelistObject.whitelist;
|
|
10
9
|
}
|
|
11
10
|
exports.whitelistTransform = whitelistTransform;
|
|
@@ -9,6 +9,7 @@ var condition_1 = require("../condition");
|
|
|
9
9
|
var ifelseif_1 = require("../combiners/ifelseif");
|
|
10
10
|
var and_1 = require("../combiners/and");
|
|
11
11
|
var thenable_1 = require("../../utils/promise/thenable");
|
|
12
|
+
var constants_1 = require("../../logger/constants");
|
|
12
13
|
function parser(log, conditions, storage) {
|
|
13
14
|
var predicates = [];
|
|
14
15
|
for (var i = 0; i < conditions.length; i++) {
|
|
@@ -17,16 +18,28 @@ function parser(log, conditions, storage) {
|
|
|
17
18
|
var matchers = (0, matchersTransform_1.matchersTransform)(matcherGroup.matchers);
|
|
18
19
|
// create a set of pure functions from the matcher's dto
|
|
19
20
|
var expressions = matchers.map(function (matcherDto) {
|
|
20
|
-
var matcher
|
|
21
|
+
var matcher;
|
|
22
|
+
try {
|
|
23
|
+
matcher = (0, matchers_1.matcherFactory)(log, matcherDto, storage);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
log.error(constants_1.ENGINE_MATCHER_ERROR, [matcherDto.name, error]);
|
|
27
|
+
}
|
|
21
28
|
// Evaluator function.
|
|
22
29
|
return function (key, attributes, splitEvaluator) {
|
|
23
30
|
var value = (0, value_1.sanitizeValue)(log, key, matcherDto, attributes);
|
|
24
|
-
var result =
|
|
25
|
-
if (
|
|
26
|
-
|
|
27
|
-
|
|
31
|
+
var result = false;
|
|
32
|
+
if (value !== undefined && matcher) {
|
|
33
|
+
try {
|
|
34
|
+
result = matcher(value, splitEvaluator);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
log.error(constants_1.ENGINE_MATCHER_ERROR, [matcherDto.name, error]);
|
|
38
|
+
}
|
|
28
39
|
}
|
|
29
|
-
// @ts-ignore
|
|
40
|
+
if ((0, thenable_1.thenable)(result)) { // @ts-ignore
|
|
41
|
+
return result.then(function (res) { return Boolean(res ^ matcherDto.negate); });
|
|
42
|
+
} // @ts-ignore
|
|
30
43
|
return Boolean(result ^ matcherDto.negate);
|
|
31
44
|
};
|
|
32
45
|
});
|
package/cjs/logger/constants.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
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.
|
|
4
|
-
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 =
|
|
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.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 =
|
|
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.
|
|
@@ -30,7 +30,6 @@ exports.ENGINE_MATCHER_LESS = 16;
|
|
|
30
30
|
exports.ENGINE_MATCHER_PART_OF = 17;
|
|
31
31
|
exports.ENGINE_MATCHER_SEGMENT = 18;
|
|
32
32
|
exports.ENGINE_MATCHER_STRING = 19;
|
|
33
|
-
exports.ENGINE_MATCHER_STRING_INVALID = 20;
|
|
34
33
|
exports.ENGINE_MATCHER_STARTS_WITH = 21;
|
|
35
34
|
exports.ENGINE_MATCHER_WHITELIST = 22;
|
|
36
35
|
exports.ENGINE_VALUE = 23;
|
|
@@ -133,6 +132,7 @@ exports.ERROR_NOT_BOOLEAN = 325;
|
|
|
133
132
|
exports.ERROR_MIN_CONFIG_PARAM = 326;
|
|
134
133
|
exports.ERROR_TOO_MANY_SETS = 327;
|
|
135
134
|
exports.ERROR_SETS_FILTER_EXCLUSIVE = 328;
|
|
135
|
+
exports.ENGINE_MATCHER_ERROR = 329;
|
|
136
136
|
// Log prefixes (a.k.a. tags or categories)
|
|
137
137
|
exports.LOG_PREFIX_SETTINGS = 'settings';
|
|
138
138
|
exports.LOG_PREFIX_INSTANTIATION = 'Factory instantiation';
|
package/cjs/logger/index.js
CHANGED
|
@@ -28,7 +28,14 @@ function _sprintf(format, args) {
|
|
|
28
28
|
if (args === void 0) { args = []; }
|
|
29
29
|
var i = 0;
|
|
30
30
|
return format.replace(/%s/g, function () {
|
|
31
|
-
|
|
31
|
+
var arg = args[i++];
|
|
32
|
+
if ((0, lang_1.isObject)(arg) || Array.isArray(arg)) {
|
|
33
|
+
try {
|
|
34
|
+
arg = JSON.stringify(arg);
|
|
35
|
+
}
|
|
36
|
+
catch (e) { /* empty */ }
|
|
37
|
+
}
|
|
38
|
+
return arg;
|
|
32
39
|
});
|
|
33
40
|
}
|
|
34
41
|
exports._sprintf = _sprintf;
|
|
@@ -26,7 +26,6 @@ exports.codesDebug = info_1.codesInfo.concat([
|
|
|
26
26
|
[c.ENGINE_MATCHER_PART_OF, c.LOG_PREFIX_ENGINE_MATCHER + '[partOfMatcher] %s is part of %s? %s'],
|
|
27
27
|
[c.ENGINE_MATCHER_SEGMENT, c.LOG_PREFIX_ENGINE_MATCHER + '[segmentMatcher] evaluated %s / %s => %s'],
|
|
28
28
|
[c.ENGINE_MATCHER_STRING, c.LOG_PREFIX_ENGINE_MATCHER + '[stringMatcher] does %s matches with %s? %s'],
|
|
29
|
-
[c.ENGINE_MATCHER_STRING_INVALID, c.LOG_PREFIX_ENGINE_MATCHER + '[stringMatcher] %s is an invalid regex'],
|
|
30
29
|
[c.ENGINE_MATCHER_STARTS_WITH, c.LOG_PREFIX_ENGINE_MATCHER + '[startsWithMatcher] %s starts with %s? %s'],
|
|
31
30
|
[c.ENGINE_MATCHER_WHITELIST, c.LOG_PREFIX_ENGINE_MATCHER + '[whitelistMatcher] evaluated %s in [%s] => %s'],
|
|
32
31
|
[c.ENGINE_VALUE, c.LOG_PREFIX_ENGINE_VALUE + 'Extracted attribute [%s], [%s] will be used for matching.'],
|
|
@@ -5,7 +5,8 @@ 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
|
|
8
|
+
[c.ERROR_ENGINE_COMBINER_IFELSEIF, c.LOG_PREFIX_ENGINE_COMBINER + 'Invalid feature flag, no valid rules or unsupported targeting rule type found'],
|
|
9
|
+
[c.ENGINE_MATCHER_ERROR, c.LOG_PREFIX_ENGINE_MATCHER + '[%s] %s'],
|
|
9
10
|
// SDK
|
|
10
11
|
[c.ERROR_LOGLEVEL_INVALID, 'logger: Invalid Log Level - No changes to the logs will be applied.'],
|
|
11
12
|
[c.ERROR_CLIENT_CANNOT_GET_READY, 'The SDK will not get ready. Reason: %s'],
|
package/cjs/services/splitApi.js
CHANGED
|
@@ -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) { //
|
|
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)
|
|
39
|
-
url += '
|
|
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?s=" + constants_1.FLAGS_SPEC + "&since=" + since + (
|
|
44
|
+
var url = urls.sdk + "/splitChanges?s=" + constants_1.FLAGS_SPEC + "&since=" + since + (filterQueryString || '') + (till ? '&till=' + till : '');
|
|
45
45
|
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(constants_1.SPLITS))
|
|
46
46
|
.catch(function (err) {
|
|
47
47
|
if (err.statusCode === 414)
|
|
@@ -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
|
|
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
|
|
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); });
|