@splitsoftware/splitio-commons 2.12.0 → 2.12.2
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 +8 -1
- package/cjs/evaluator/condition/engineUtils.js +2 -2
- package/cjs/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +3 -3
- package/cjs/evaluator/fallbackTreatmentsCalculator/index.js +21 -32
- package/cjs/evaluator/matchers/whitelist.js +1 -1
- package/cjs/integrations/pluggable.js +1 -1
- package/cjs/listeners/node.js +2 -2
- package/cjs/logger/constants.js +3 -4
- package/cjs/logger/index.js +1 -1
- package/cjs/logger/messages/debug.js +1 -1
- package/cjs/logger/messages/error.js +1 -1
- package/cjs/logger/messages/info.js +2 -3
- package/cjs/logger/messages/warn.js +4 -4
- package/cjs/sdkClient/client.js +2 -3
- package/cjs/sdkClient/clientAttributesDecoration.js +3 -3
- package/cjs/sdkClient/clientInputValidation.js +36 -68
- package/cjs/sdkClient/identity.js +1 -1
- package/cjs/sdkClient/sdkClient.js +19 -7
- package/cjs/sdkFactory/index.js +8 -41
- package/cjs/services/splitApi.js +13 -13
- package/cjs/services/splitHttpClient.js +1 -1
- package/cjs/storages/KeyBuilder.js +12 -12
- package/cjs/storages/KeyBuilderCS.js +13 -13
- package/cjs/storages/KeyBuilderSS.js +15 -15
- package/cjs/storages/getRolloutPlan.js +1 -1
- package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +1 -1
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +1 -1
- package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/SplitsCacheInMemory.js +1 -1
- package/cjs/storages/inRedis/EventsCacheInRedis.js +1 -1
- package/cjs/storages/inRedis/ImpressionCountsCacheInRedis.js +5 -5
- package/cjs/storages/inRedis/ImpressionsCacheInRedis.js +1 -1
- package/cjs/storages/inRedis/RedisAdapter.js +8 -8
- package/cjs/storages/inRedis/SplitsCacheInRedis.js +6 -6
- package/cjs/storages/inRedis/TelemetryCacheInRedis.js +7 -7
- package/cjs/storages/inRedis/UniqueKeysCacheInRedis.js +3 -3
- package/cjs/storages/pluggable/EventsCachePluggable.js +1 -1
- package/cjs/storages/pluggable/ImpressionCountsCachePluggable.js +6 -6
- package/cjs/storages/pluggable/SplitsCachePluggable.js +4 -4
- package/cjs/storages/pluggable/TelemetryCachePluggable.js +7 -7
- package/cjs/storages/pluggable/UniqueKeysCachePluggable.js +2 -2
- package/cjs/storages/pluggable/index.js +3 -3
- package/cjs/storages/pluggable/wrapperAdapter.js +1 -1
- package/cjs/storages/setRolloutPlan.js +3 -3
- package/cjs/storages/utils.js +6 -6
- package/cjs/sync/offline/splitsParser/parseCondition.js +1 -1
- package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
- package/cjs/sync/polling/pollingManagerSS.js +2 -2
- package/cjs/sync/polling/updaters/segmentChangesUpdater.js +6 -6
- package/cjs/sync/polling/updaters/splitChangesUpdater.js +12 -10
- package/cjs/sync/streaming/SSEClient/index.js +2 -2
- package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +2 -2
- package/cjs/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +2 -2
- package/cjs/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +2 -2
- package/cjs/sync/streaming/parseUtils.js +1 -1
- package/cjs/sync/submitters/submitter.js +1 -1
- package/cjs/trackers/eventTracker.js +10 -12
- package/cjs/trackers/impressionObserver/buildKey.js +1 -1
- package/cjs/trackers/impressionsTracker.js +37 -20
- package/cjs/trackers/uniqueKeysTracker.js +1 -1
- package/cjs/utils/inputValidation/apiKey.js +1 -1
- package/cjs/utils/inputValidation/attribute.js +2 -2
- package/cjs/utils/inputValidation/eventProperties.js +1 -1
- package/cjs/utils/inputValidation/isOperational.js +1 -1
- package/cjs/utils/lang/index.js +1 -1
- package/cjs/utils/lang/sets.js +4 -4
- package/cjs/utils/promise/timeout.js +1 -1
- package/cjs/utils/settingsValidation/splitFilters.js +2 -2
- package/cjs/utils/settingsValidation/url.js +5 -5
- package/esm/evaluator/condition/engineUtils.js +2 -2
- package/esm/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +3 -3
- package/esm/evaluator/fallbackTreatmentsCalculator/index.js +21 -33
- package/esm/evaluator/matchers/whitelist.js +1 -1
- package/esm/integrations/pluggable.js +1 -1
- package/esm/listeners/node.js +2 -2
- package/esm/logger/constants.js +0 -1
- package/esm/logger/index.js +1 -1
- package/esm/logger/messages/info.js +1 -2
- package/esm/logger/messages/warn.js +3 -3
- package/esm/sdkClient/client.js +3 -4
- package/esm/sdkClient/clientAttributesDecoration.js +3 -3
- package/esm/sdkClient/clientInputValidation.js +36 -68
- package/esm/sdkClient/identity.js +1 -1
- package/esm/sdkClient/sdkClient.js +20 -8
- package/esm/sdkFactory/index.js +8 -41
- package/esm/services/splitApi.js +13 -13
- package/esm/services/splitHttpClient.js +1 -1
- package/esm/storages/KeyBuilder.js +12 -12
- package/esm/storages/KeyBuilderCS.js +12 -12
- package/esm/storages/KeyBuilderSS.js +14 -14
- package/esm/storages/getRolloutPlan.js +1 -1
- package/esm/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
- package/esm/storages/inRedis/EventsCacheInRedis.js +1 -1
- package/esm/storages/inRedis/ImpressionCountsCacheInRedis.js +4 -4
- package/esm/storages/inRedis/RedisAdapter.js +7 -7
- package/esm/storages/inRedis/SplitsCacheInRedis.js +4 -4
- package/esm/storages/inRedis/TelemetryCacheInRedis.js +7 -7
- package/esm/storages/inRedis/UniqueKeysCacheInRedis.js +1 -1
- package/esm/storages/pluggable/EventsCachePluggable.js +1 -1
- package/esm/storages/pluggable/ImpressionCountsCachePluggable.js +5 -5
- package/esm/storages/pluggable/SplitsCachePluggable.js +2 -2
- package/esm/storages/pluggable/TelemetryCachePluggable.js +7 -7
- package/esm/storages/pluggable/UniqueKeysCachePluggable.js +1 -1
- package/esm/storages/pluggable/index.js +2 -2
- package/esm/storages/pluggable/wrapperAdapter.js +1 -1
- package/esm/storages/setRolloutPlan.js +3 -3
- package/esm/storages/utils.js +6 -6
- package/esm/sync/offline/splitsParser/parseCondition.js +1 -1
- package/esm/sync/polling/pollingManagerSS.js +2 -2
- package/esm/sync/polling/updaters/segmentChangesUpdater.js +6 -6
- package/esm/sync/polling/updaters/splitChangesUpdater.js +12 -10
- package/esm/sync/streaming/SSEClient/index.js +2 -2
- package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +2 -2
- package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +2 -2
- package/esm/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +2 -2
- package/esm/sync/streaming/parseUtils.js +1 -1
- package/esm/sync/submitters/submitter.js +1 -1
- package/esm/trackers/eventTracker.js +10 -12
- package/esm/trackers/impressionObserver/buildKey.js +1 -1
- package/esm/trackers/impressionsTracker.js +38 -21
- package/esm/trackers/uniqueKeysTracker.js +1 -1
- package/esm/utils/inputValidation/apiKey.js +1 -1
- package/esm/utils/inputValidation/attribute.js +2 -2
- package/esm/utils/inputValidation/isOperational.js +1 -1
- package/esm/utils/lang/sets.js +4 -4
- package/esm/utils/promise/timeout.js +1 -1
- package/esm/utils/settingsValidation/splitFilters.js +2 -2
- package/esm/utils/settingsValidation/url.js +5 -5
- package/package.json +6 -6
- package/src/dtos/types.ts +15 -15
- package/src/evaluator/condition/engineUtils.ts +2 -2
- package/src/evaluator/fallbackTreatmentsCalculator/index.ts +23 -41
- package/src/evaluator/matchers/whitelist.ts +2 -2
- package/src/evaluator/types.ts +2 -2
- package/src/evaluator/value/index.ts +1 -1
- package/src/integrations/pluggable.ts +1 -1
- package/src/logger/constants.ts +0 -1
- package/src/logger/messages/info.ts +1 -2
- package/src/logger/messages/warn.ts +3 -3
- package/src/sdkClient/client.ts +3 -5
- package/src/sdkClient/clientInputValidation.ts +38 -61
- package/src/sdkClient/sdkClient.ts +20 -5
- package/src/sdkFactory/index.ts +10 -47
- package/src/sdkFactory/types.ts +6 -3
- package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +1 -1
- package/src/storages/inMemory/SplitsCacheInMemory.ts +1 -1
- package/src/storages/inRedis/SplitsCacheInRedis.ts +1 -1
- package/src/storages/pluggable/SplitsCachePluggable.ts +1 -1
- package/src/storages/setRolloutPlan.ts +2 -2
- package/src/sync/polling/updaters/segmentChangesUpdater.ts +1 -1
- package/src/sync/polling/updaters/splitChangesUpdater.ts +11 -9
- package/src/trackers/eventTracker.ts +7 -10
- package/src/trackers/impressionsTracker.ts +42 -26
- package/src/trackers/types.ts +3 -1
- package/src/utils/lang/sets.ts +4 -2
- package/types/splitio.d.ts +22 -18
|
@@ -34,97 +34,68 @@ export function clientInputValidationDecorator(settings, client, readinessManage
|
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
36
|
function evaluateFallBackTreatment(featureFlagName, withConfig) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return
|
|
37
|
+
if (Array.isArray(featureFlagName)) {
|
|
38
|
+
var res_1 = {};
|
|
39
|
+
featureFlagName.forEach(function (split) { return res_1[split] = evaluateFallBackTreatment(split, withConfig); });
|
|
40
|
+
return res_1;
|
|
41
|
+
}
|
|
42
|
+
var _a = fallbackTreatmentsCalculator(featureFlagName), treatment = _a.treatment, config = _a.config;
|
|
43
|
+
return withConfig ?
|
|
44
|
+
{
|
|
40
45
|
treatment: treatment,
|
|
41
46
|
config: config
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
return treatment;
|
|
47
|
+
} : treatment;
|
|
45
48
|
}
|
|
46
49
|
function wrapResult(value) {
|
|
47
50
|
return isAsync ? Promise.resolve(value) : value;
|
|
48
51
|
}
|
|
49
52
|
function getTreatment(maybeKey, maybeFeatureFlagName, maybeAttributes, maybeOptions) {
|
|
50
53
|
var params = validateEvaluationParams(GET_TREATMENT, maybeKey, maybeFeatureFlagName, maybeAttributes, maybeOptions);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
else {
|
|
55
|
-
var result = evaluateFallBackTreatment(params.nameOrNames, false);
|
|
56
|
-
return wrapResult(result);
|
|
57
|
-
}
|
|
54
|
+
return params.valid ?
|
|
55
|
+
client.getTreatment(params.key, params.nameOrNames, params.attributes, params.options) :
|
|
56
|
+
wrapResult(evaluateFallBackTreatment(params.nameOrNames, false));
|
|
58
57
|
}
|
|
59
58
|
function getTreatmentWithConfig(maybeKey, maybeFeatureFlagName, maybeAttributes, maybeOptions) {
|
|
60
59
|
var params = validateEvaluationParams(GET_TREATMENT_WITH_CONFIG, maybeKey, maybeFeatureFlagName, maybeAttributes, maybeOptions);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
else {
|
|
65
|
-
var result = evaluateFallBackTreatment(params.nameOrNames, true);
|
|
66
|
-
return wrapResult(result);
|
|
67
|
-
}
|
|
60
|
+
return params.valid ?
|
|
61
|
+
client.getTreatmentWithConfig(params.key, params.nameOrNames, params.attributes, params.options) :
|
|
62
|
+
wrapResult(evaluateFallBackTreatment(params.nameOrNames, true));
|
|
68
63
|
}
|
|
69
64
|
function getTreatments(maybeKey, maybeFeatureFlagNames, maybeAttributes, maybeOptions) {
|
|
70
65
|
var params = validateEvaluationParams(GET_TREATMENTS, maybeKey, maybeFeatureFlagNames, maybeAttributes, maybeOptions);
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
else {
|
|
75
|
-
var res_1 = {};
|
|
76
|
-
if (params.nameOrNames)
|
|
77
|
-
params.nameOrNames.forEach(function (split) { return res_1[split] = evaluateFallBackTreatment(split, false); });
|
|
78
|
-
return wrapResult(res_1);
|
|
79
|
-
}
|
|
66
|
+
return params.valid ?
|
|
67
|
+
client.getTreatments(params.key, params.nameOrNames, params.attributes, params.options) :
|
|
68
|
+
wrapResult(evaluateFallBackTreatment(params.nameOrNames || [], false));
|
|
80
69
|
}
|
|
81
70
|
function getTreatmentsWithConfig(maybeKey, maybeFeatureFlagNames, maybeAttributes, maybeOptions) {
|
|
82
71
|
var params = validateEvaluationParams(GET_TREATMENTS_WITH_CONFIG, maybeKey, maybeFeatureFlagNames, maybeAttributes, maybeOptions);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
else {
|
|
87
|
-
var res_2 = {};
|
|
88
|
-
if (params.nameOrNames)
|
|
89
|
-
params.nameOrNames.forEach(function (split) { return res_2[split] = evaluateFallBackTreatment(split, true); });
|
|
90
|
-
return wrapResult(res_2);
|
|
91
|
-
}
|
|
72
|
+
return params.valid ?
|
|
73
|
+
client.getTreatmentsWithConfig(params.key, params.nameOrNames, params.attributes, params.options) :
|
|
74
|
+
wrapResult(evaluateFallBackTreatment(params.nameOrNames || [], true));
|
|
92
75
|
}
|
|
93
76
|
function getTreatmentsByFlagSets(maybeKey, maybeFlagSets, maybeAttributes, maybeOptions) {
|
|
94
77
|
var params = validateEvaluationParams(GET_TREATMENTS_BY_FLAG_SETS, maybeKey, maybeFlagSets, maybeAttributes, maybeOptions);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
else {
|
|
99
|
-
return wrapResult({});
|
|
100
|
-
}
|
|
78
|
+
return params.valid ?
|
|
79
|
+
client.getTreatmentsByFlagSets(params.key, params.nameOrNames, params.attributes, params.options) :
|
|
80
|
+
wrapResult({});
|
|
101
81
|
}
|
|
102
82
|
function getTreatmentsWithConfigByFlagSets(maybeKey, maybeFlagSets, maybeAttributes, maybeOptions) {
|
|
103
83
|
var params = validateEvaluationParams(GET_TREATMENTS_WITH_CONFIG_BY_FLAG_SETS, maybeKey, maybeFlagSets, maybeAttributes, maybeOptions);
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
else {
|
|
108
|
-
return wrapResult({});
|
|
109
|
-
}
|
|
84
|
+
return params.valid ?
|
|
85
|
+
client.getTreatmentsWithConfigByFlagSets(params.key, params.nameOrNames, params.attributes, params.options) :
|
|
86
|
+
wrapResult({});
|
|
110
87
|
}
|
|
111
88
|
function getTreatmentsByFlagSet(maybeKey, maybeFlagSet, maybeAttributes, maybeOptions) {
|
|
112
89
|
var params = validateEvaluationParams(GET_TREATMENTS_BY_FLAG_SET, maybeKey, [maybeFlagSet], maybeAttributes, maybeOptions);
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
else {
|
|
117
|
-
return wrapResult({});
|
|
118
|
-
}
|
|
90
|
+
return params.valid ?
|
|
91
|
+
client.getTreatmentsByFlagSet(params.key, params.nameOrNames[0], params.attributes, params.options) :
|
|
92
|
+
wrapResult({});
|
|
119
93
|
}
|
|
120
94
|
function getTreatmentsWithConfigByFlagSet(maybeKey, maybeFlagSet, maybeAttributes, maybeOptions) {
|
|
121
95
|
var params = validateEvaluationParams(GET_TREATMENTS_WITH_CONFIG_BY_FLAG_SET, maybeKey, [maybeFlagSet], maybeAttributes, maybeOptions);
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
else {
|
|
126
|
-
return wrapResult({});
|
|
127
|
-
}
|
|
96
|
+
return params.valid ?
|
|
97
|
+
client.getTreatmentsWithConfigByFlagSet(params.key, params.nameOrNames[0], params.attributes, params.options) :
|
|
98
|
+
wrapResult({});
|
|
128
99
|
}
|
|
129
100
|
function track(maybeKey, maybeTT, maybeEvent, maybeEventValue, maybeProperties) {
|
|
130
101
|
var key = validateKey(log, maybeKey, TRACK_FN_LABEL);
|
|
@@ -133,12 +104,9 @@ export function clientInputValidationDecorator(settings, client, readinessManage
|
|
|
133
104
|
var eventValue = validateEventValue(log, maybeEventValue, TRACK_FN_LABEL);
|
|
134
105
|
var _a = validateEventProperties(log, maybeProperties, TRACK_FN_LABEL), properties = _a.properties, size = _a.size;
|
|
135
106
|
var isNotDestroyed = validateIfNotDestroyed(log, readinessManager, TRACK_FN_LABEL);
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
else {
|
|
140
|
-
return isAsync ? Promise.resolve(false) : false;
|
|
141
|
-
}
|
|
107
|
+
return isNotDestroyed && key && tt && event && eventValue !== false && properties !== false ? // @ts-expect-error
|
|
108
|
+
client.track(key, tt, event, eventValue, properties, size) :
|
|
109
|
+
wrapResult(false);
|
|
142
110
|
}
|
|
143
111
|
return {
|
|
144
112
|
getTreatment: getTreatment,
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export function buildInstanceId(key, trafficType) {
|
|
2
|
-
return (key.matchingKey ? key.matchingKey : key
|
|
2
|
+
return "".concat(key.matchingKey ? key.matchingKey : key, "-").concat(key.bucketingKey ? key.bucketingKey : key, "-").concat(trafficType ? trafficType : '');
|
|
3
3
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { objectAssign } from '../utils/lang/objectAssign';
|
|
2
|
-
import { releaseApiKey } from '../utils/inputValidation/apiKey';
|
|
2
|
+
import { releaseApiKey, validateAndTrackApiKey } from '../utils/inputValidation/apiKey';
|
|
3
3
|
import { clientFactory } from './client';
|
|
4
4
|
import { clientInputValidationDecorator } from './clientInputValidation';
|
|
5
5
|
var COOLDOWN_TIME_IN_MILLIS = 1000;
|
|
6
6
|
/**
|
|
7
|
-
* Creates an Sdk client, i.e., a base client with status and destroy interface
|
|
7
|
+
* Creates an Sdk client, i.e., a base client with status, init, flush and destroy interface
|
|
8
8
|
*/
|
|
9
9
|
export function sdkClientFactory(params, isSharedClient) {
|
|
10
|
-
var sdkReadinessManager = params.sdkReadinessManager, syncManager = params.syncManager, storage = params.storage, signalListener = params.signalListener, settings = params.settings, telemetryTracker = params.telemetryTracker,
|
|
10
|
+
var sdkReadinessManager = params.sdkReadinessManager, syncManager = params.syncManager, storage = params.storage, signalListener = params.signalListener, settings = params.settings, telemetryTracker = params.telemetryTracker, impressionsTracker = params.impressionsTracker;
|
|
11
|
+
var hasInit = false;
|
|
11
12
|
var lastActionTime = 0;
|
|
12
13
|
function __cooldown(func, time) {
|
|
13
14
|
var now = Date.now();
|
|
@@ -16,7 +17,7 @@ export function sdkClientFactory(params, isSharedClient) {
|
|
|
16
17
|
//check if the time elapsed is less than desired cooldown
|
|
17
18
|
if (timeElapsed < time) {
|
|
18
19
|
//if yes, return message with remaining time in seconds
|
|
19
|
-
settings.log.warn("Flush cooldown, remaining time "
|
|
20
|
+
settings.log.warn("Flush cooldown, remaining time ".concat((time - timeElapsed) / 1000, " seconds"));
|
|
20
21
|
return Promise.resolve();
|
|
21
22
|
}
|
|
22
23
|
else {
|
|
@@ -32,14 +33,25 @@ export function sdkClientFactory(params, isSharedClient) {
|
|
|
32
33
|
// Proto-linkage of the readiness Event Emitter
|
|
33
34
|
Object.create(sdkReadinessManager.sdkStatus),
|
|
34
35
|
// Client API (getTreatment* & track methods)
|
|
35
|
-
clientInputValidationDecorator(settings, clientFactory(params), sdkReadinessManager.readinessManager, params.fallbackTreatmentsCalculator),
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
clientInputValidationDecorator(settings, clientFactory(params), sdkReadinessManager.readinessManager, params.fallbackTreatmentsCalculator), {
|
|
37
|
+
init: function () {
|
|
38
|
+
if (hasInit)
|
|
39
|
+
return;
|
|
40
|
+
hasInit = true;
|
|
41
|
+
if (!isSharedClient) {
|
|
42
|
+
validateAndTrackApiKey(settings.log, settings.core.authorizationKey);
|
|
43
|
+
sdkReadinessManager.readinessManager.init();
|
|
44
|
+
impressionsTracker.start();
|
|
45
|
+
syncManager && syncManager.start();
|
|
46
|
+
signalListener && signalListener.start();
|
|
47
|
+
}
|
|
48
|
+
},
|
|
38
49
|
flush: function () {
|
|
39
50
|
// @TODO define cooldown time
|
|
40
51
|
return __cooldown(__flush, COOLDOWN_TIME_IN_MILLIS);
|
|
41
52
|
},
|
|
42
53
|
destroy: function () {
|
|
54
|
+
hasInit = false;
|
|
43
55
|
// Mark the SDK as destroyed immediately
|
|
44
56
|
sdkReadinessManager.readinessManager.destroy();
|
|
45
57
|
// For main client, cleanup the SDK Key, listeners and scheduled jobs, and record stat before flushing data
|
|
@@ -47,7 +59,7 @@ export function sdkClientFactory(params, isSharedClient) {
|
|
|
47
59
|
releaseApiKey(settings.core.authorizationKey);
|
|
48
60
|
telemetryTracker.sessionLength();
|
|
49
61
|
signalListener && signalListener.stop();
|
|
50
|
-
|
|
62
|
+
impressionsTracker.stop();
|
|
51
63
|
}
|
|
52
64
|
// Stop background jobs
|
|
53
65
|
syncManager && syncManager.stop();
|
package/esm/sdkFactory/index.js
CHANGED
|
@@ -2,16 +2,10 @@ import { sdkReadinessManagerFactory } from '../readiness/sdkReadinessManager';
|
|
|
2
2
|
import { impressionsTrackerFactory } from '../trackers/impressionsTracker';
|
|
3
3
|
import { eventTrackerFactory } from '../trackers/eventTracker';
|
|
4
4
|
import { telemetryTrackerFactory } from '../trackers/telemetryTracker';
|
|
5
|
-
import { validateAndTrackApiKey } from '../utils/inputValidation/apiKey';
|
|
6
5
|
import { createLoggerAPI } from '../logger/sdkLogger';
|
|
7
6
|
import { NEW_FACTORY, RETRIEVE_MANAGER } from '../logger/constants';
|
|
8
7
|
import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED, SDK_SPLITS_CACHE_LOADED } from '../readiness/constants';
|
|
9
8
|
import { objectAssign } from '../utils/lang/objectAssign';
|
|
10
|
-
import { strategyDebugFactory } from '../trackers/strategy/strategyDebug';
|
|
11
|
-
import { strategyOptimizedFactory } from '../trackers/strategy/strategyOptimized';
|
|
12
|
-
import { strategyNoneFactory } from '../trackers/strategy/strategyNone';
|
|
13
|
-
import { uniqueKeysTrackerFactory } from '../trackers/uniqueKeysTracker';
|
|
14
|
-
import { DEBUG, OPTIMIZED } from '../utils/constants';
|
|
15
9
|
import { setRolloutPlan } from '../storages/setRolloutPlan';
|
|
16
10
|
import { getMatching } from '../utils/key';
|
|
17
11
|
import { FallbackTreatmentsCalculator } from '../evaluator/fallbackTreatmentsCalculator';
|
|
@@ -19,19 +13,10 @@ import { FallbackTreatmentsCalculator } from '../evaluator/fallbackTreatmentsCal
|
|
|
19
13
|
* Modular SDK factory
|
|
20
14
|
*/
|
|
21
15
|
export function sdkFactory(params) {
|
|
22
|
-
var settings = params.settings, platform = params.platform, storageFactory = params.storageFactory, splitApiFactory = params.splitApiFactory, extraProps = params.extraProps, syncManagerFactory = params.syncManagerFactory, SignalListener = params.SignalListener,
|
|
23
|
-
var log = settings.log,
|
|
16
|
+
var settings = params.settings, platform = params.platform, storageFactory = params.storageFactory, splitApiFactory = params.splitApiFactory, extraProps = params.extraProps, syncManagerFactory = params.syncManagerFactory, SignalListener = params.SignalListener, integrationsManagerFactory = params.integrationsManagerFactory, sdkManagerFactory = params.sdkManagerFactory, sdkClientMethodFactory = params.sdkClientMethodFactory, lazyInit = params.lazyInit;
|
|
17
|
+
var log = settings.log, initialRolloutPlan = settings.initialRolloutPlan, key = settings.core.key;
|
|
24
18
|
// @TODO handle non-recoverable errors, such as, global `fetch` not available, invalid SDK Key, etc.
|
|
25
19
|
// On non-recoverable errors, we should mark the SDK as destroyed and not start synchronization.
|
|
26
|
-
// initialization
|
|
27
|
-
var hasInit = false;
|
|
28
|
-
var initCallbacks = [];
|
|
29
|
-
function whenInit(cb) {
|
|
30
|
-
if (hasInit)
|
|
31
|
-
cb();
|
|
32
|
-
else
|
|
33
|
-
initCallbacks.push(cb);
|
|
34
|
-
}
|
|
35
20
|
var sdkReadinessManager = sdkReadinessManagerFactory(platform.EventEmitter, settings);
|
|
36
21
|
var readiness = sdkReadinessManager.readinessManager;
|
|
37
22
|
var storage = storageFactory({
|
|
@@ -49,7 +34,7 @@ export function sdkFactory(params) {
|
|
|
49
34
|
readiness.splits.emit(SDK_SPLITS_CACHE_LOADED);
|
|
50
35
|
}
|
|
51
36
|
});
|
|
52
|
-
var fallbackTreatmentsCalculator =
|
|
37
|
+
var fallbackTreatmentsCalculator = FallbackTreatmentsCalculator(settings.fallbackTreatments);
|
|
53
38
|
if (initialRolloutPlan) {
|
|
54
39
|
setRolloutPlan(log, initialRolloutPlan, storage, key && getMatching(key));
|
|
55
40
|
if (storage.splits.getChangeNumber() > -1)
|
|
@@ -58,38 +43,21 @@ export function sdkFactory(params) {
|
|
|
58
43
|
var clients = {};
|
|
59
44
|
var telemetryTracker = telemetryTrackerFactory(storage.telemetry, platform.now);
|
|
60
45
|
var integrationsManager = integrationsManagerFactory && integrationsManagerFactory({ settings: settings, storage: storage, telemetryTracker: telemetryTracker });
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
var noneStrategy = strategyNoneFactory(storage.impressionCounts, uniqueKeysTracker);
|
|
64
|
-
var strategy = impressionsMode === OPTIMIZED ?
|
|
65
|
-
strategyOptimizedFactory(observer, storage.impressionCounts) :
|
|
66
|
-
impressionsMode === DEBUG ?
|
|
67
|
-
strategyDebugFactory(observer) :
|
|
68
|
-
noneStrategy;
|
|
69
|
-
var impressionsTracker = impressionsTrackerFactory(settings, storage.impressions, noneStrategy, strategy, whenInit, integrationsManager, storage.telemetry);
|
|
70
|
-
var eventTracker = eventTrackerFactory(settings, storage.events, whenInit, integrationsManager, storage.telemetry);
|
|
46
|
+
var impressionsTracker = impressionsTrackerFactory(params, storage, integrationsManager);
|
|
47
|
+
var eventTracker = eventTrackerFactory(settings, storage.events, integrationsManager, storage.telemetry);
|
|
71
48
|
// splitApi is used by SyncManager and Browser signal listener
|
|
72
49
|
var splitApi = splitApiFactory && splitApiFactory(settings, platform, telemetryTracker);
|
|
73
|
-
var ctx = { clients: clients, splitApi: splitApi, eventTracker: eventTracker, impressionsTracker: impressionsTracker, telemetryTracker: telemetryTracker,
|
|
50
|
+
var ctx = { clients: clients, splitApi: splitApi, eventTracker: eventTracker, impressionsTracker: impressionsTracker, telemetryTracker: telemetryTracker, sdkReadinessManager: sdkReadinessManager, readiness: readiness, settings: settings, storage: storage, platform: platform, fallbackTreatmentsCalculator: fallbackTreatmentsCalculator };
|
|
74
51
|
var syncManager = syncManagerFactory && syncManagerFactory(ctx);
|
|
75
52
|
ctx.syncManager = syncManager;
|
|
53
|
+
// @TODO: move into platform, and call inside sdkClientFactory (if it's used only there)
|
|
76
54
|
var signalListener = SignalListener && new SignalListener(syncManager, settings, storage, splitApi);
|
|
77
55
|
ctx.signalListener = signalListener;
|
|
78
56
|
// SDK client and manager
|
|
79
57
|
var clientMethod = sdkClientMethodFactory(ctx);
|
|
80
58
|
var managerInstance = sdkManagerFactory(settings, storage.splits, sdkReadinessManager);
|
|
81
59
|
function init() {
|
|
82
|
-
|
|
83
|
-
return;
|
|
84
|
-
hasInit = true;
|
|
85
|
-
// We will just log and allow for the SDK to end up throwing an SDK_TIMEOUT event for devs to handle.
|
|
86
|
-
validateAndTrackApiKey(log, settings.core.authorizationKey);
|
|
87
|
-
readiness.init();
|
|
88
|
-
uniqueKeysTracker.start();
|
|
89
|
-
syncManager && syncManager.start();
|
|
90
|
-
signalListener && signalListener.start();
|
|
91
|
-
initCallbacks.forEach(function (cb) { return cb(); });
|
|
92
|
-
initCallbacks.length = 0;
|
|
60
|
+
Object.keys(clients).map(function (key) { return clients[key].init(); });
|
|
93
61
|
}
|
|
94
62
|
log.info(NEW_FACTORY, [settings.version]);
|
|
95
63
|
// @ts-ignore
|
|
@@ -105,7 +73,6 @@ export function sdkFactory(params) {
|
|
|
105
73
|
Logger: createLoggerAPI(log),
|
|
106
74
|
settings: settings,
|
|
107
75
|
destroy: function () {
|
|
108
|
-
hasInit = false;
|
|
109
76
|
return Promise.all(Object.keys(clients).map(function (key) { return clients[key].destroy(); })).then(function () { });
|
|
110
77
|
}
|
|
111
78
|
}, extraProps && extraProps(ctx), lazyInit ? { init: init } : init());
|
package/esm/services/splitApi.js
CHANGED
|
@@ -21,15 +21,15 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
|
|
|
21
21
|
return {
|
|
22
22
|
// @TODO throw errors if health check requests fail, to log them in the Synchronizer
|
|
23
23
|
getSdkAPIHealthCheck: function () {
|
|
24
|
-
var url = urls.sdk
|
|
24
|
+
var url = "".concat(urls.sdk, "/version");
|
|
25
25
|
return splitHttpClient(url).then(function () { return true; }).catch(function () { return false; });
|
|
26
26
|
},
|
|
27
27
|
getEventsAPIHealthCheck: function () {
|
|
28
|
-
var url = urls.events
|
|
28
|
+
var url = "".concat(urls.events, "/version");
|
|
29
29
|
return splitHttpClient(url).then(function () { return true; }).catch(function () { return false; });
|
|
30
30
|
},
|
|
31
31
|
fetchAuth: function (userMatchingKeys) {
|
|
32
|
-
var url = urls.auth
|
|
32
|
+
var url = "".concat(urls.auth, "/v2/auth?s=").concat(settings.sync.flagSpecVersion);
|
|
33
33
|
if (userMatchingKeys) { // `userMatchingKeys` is undefined in server-side
|
|
34
34
|
var queryParams = userMatchingKeys.map(userKeyToQueryParam).join('&');
|
|
35
35
|
if (queryParams)
|
|
@@ -38,7 +38,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
|
|
|
38
38
|
return splitHttpClient(url, undefined, telemetryTracker.trackHttp(TOKEN));
|
|
39
39
|
},
|
|
40
40
|
fetchSplitChanges: function (since, noCache, till, rbSince) {
|
|
41
|
-
var url = urls.sdk
|
|
41
|
+
var url = "".concat(urls.sdk, "/splitChanges?s=").concat(settings.sync.flagSpecVersion, "&since=").concat(since).concat(rbSince ? '&rbSince=' + rbSince : '').concat(filterQueryString || '').concat(till ? '&till=' + till : '');
|
|
42
42
|
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SPLITS))
|
|
43
43
|
.catch(function (err) {
|
|
44
44
|
if (err.statusCode === 414)
|
|
@@ -47,7 +47,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
|
|
|
47
47
|
});
|
|
48
48
|
},
|
|
49
49
|
fetchSegmentChanges: function (since, segmentName, noCache, till) {
|
|
50
|
-
var url = urls.sdk
|
|
50
|
+
var url = "".concat(urls.sdk, "/segmentChanges/").concat(segmentName, "?since=").concat(since).concat(till ? '&till=' + till : '');
|
|
51
51
|
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SEGMENT));
|
|
52
52
|
},
|
|
53
53
|
fetchMemberships: function (userMatchingKey, noCache, till) {
|
|
@@ -57,7 +57,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
|
|
|
57
57
|
* - avoid 404 responses. E.g.: '/api/memberships/foo/bar'
|
|
58
58
|
* - match user keys with special characters. E.g.: 'foo%bar', 'foo/bar'
|
|
59
59
|
*/
|
|
60
|
-
var url = urls.sdk
|
|
60
|
+
var url = "".concat(urls.sdk, "/memberships/").concat(encodeURIComponent(userMatchingKey)).concat(till ? '?till=' + till : '');
|
|
61
61
|
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(MEMBERSHIPS));
|
|
62
62
|
},
|
|
63
63
|
/**
|
|
@@ -67,7 +67,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
|
|
|
67
67
|
* @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
|
|
68
68
|
*/
|
|
69
69
|
postEventsBulk: function (body, headers) {
|
|
70
|
-
var url = urls.events
|
|
70
|
+
var url = "".concat(urls.events, "/events/bulk");
|
|
71
71
|
return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(EVENTS));
|
|
72
72
|
},
|
|
73
73
|
/**
|
|
@@ -77,7 +77,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
|
|
|
77
77
|
* @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
|
|
78
78
|
*/
|
|
79
79
|
postTestImpressionsBulk: function (body, headers) {
|
|
80
|
-
var url = urls.events
|
|
80
|
+
var url = "".concat(urls.events, "/testImpressions/bulk");
|
|
81
81
|
return splitHttpClient(url, {
|
|
82
82
|
// Adding extra headers to send impressions in OPTIMIZED or DEBUG modes.
|
|
83
83
|
method: 'POST',
|
|
@@ -92,7 +92,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
|
|
|
92
92
|
* @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
|
|
93
93
|
*/
|
|
94
94
|
postTestImpressionsCount: function (body, headers) {
|
|
95
|
-
var url = urls.events
|
|
95
|
+
var url = "".concat(urls.events, "/testImpressions/count");
|
|
96
96
|
return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(IMPRESSIONS_COUNT));
|
|
97
97
|
},
|
|
98
98
|
/**
|
|
@@ -102,7 +102,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
|
|
|
102
102
|
* @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
|
|
103
103
|
*/
|
|
104
104
|
postUniqueKeysBulkCs: function (body, headers) {
|
|
105
|
-
var url = urls.telemetry
|
|
105
|
+
var url = "".concat(urls.telemetry, "/v1/keys/cs");
|
|
106
106
|
return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(TELEMETRY));
|
|
107
107
|
},
|
|
108
108
|
/**
|
|
@@ -112,15 +112,15 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
|
|
|
112
112
|
* @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
|
|
113
113
|
*/
|
|
114
114
|
postUniqueKeysBulkSs: function (body, headers) {
|
|
115
|
-
var url = urls.telemetry
|
|
115
|
+
var url = "".concat(urls.telemetry, "/v1/keys/ss");
|
|
116
116
|
return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(TELEMETRY));
|
|
117
117
|
},
|
|
118
118
|
postMetricsConfig: function (body, headers) {
|
|
119
|
-
var url = urls.telemetry
|
|
119
|
+
var url = "".concat(urls.telemetry, "/v1/metrics/config");
|
|
120
120
|
return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(TELEMETRY), true);
|
|
121
121
|
},
|
|
122
122
|
postMetricsUsage: function (body, headers) {
|
|
123
|
-
var url = urls.telemetry
|
|
123
|
+
var url = "".concat(urls.telemetry, "/v1/metrics/usage");
|
|
124
124
|
return splitHttpClient(url, { method: 'POST', body: body, headers: headers }, telemetryTracker.trackHttp(TELEMETRY), true);
|
|
125
125
|
}
|
|
126
126
|
};
|
|
@@ -21,7 +21,7 @@ export function splitHttpClientFactory(settings, _a) {
|
|
|
21
21
|
var commonHeaders = {
|
|
22
22
|
'Accept': 'application/json',
|
|
23
23
|
'Content-Type': 'application/json',
|
|
24
|
-
'Authorization': "Bearer "
|
|
24
|
+
'Authorization': "Bearer ".concat(authorizationKey),
|
|
25
25
|
'SplitSDKVersion': version
|
|
26
26
|
};
|
|
27
27
|
if (ip)
|
|
@@ -10,34 +10,34 @@ var KeyBuilder = /** @class */ (function () {
|
|
|
10
10
|
this.prefix = prefix;
|
|
11
11
|
}
|
|
12
12
|
KeyBuilder.prototype.buildTrafficTypeKey = function (trafficType) {
|
|
13
|
-
return this.prefix
|
|
13
|
+
return "".concat(this.prefix, ".trafficType.").concat(trafficType);
|
|
14
14
|
};
|
|
15
15
|
KeyBuilder.prototype.buildFlagSetKey = function (flagSet) {
|
|
16
|
-
return this.prefix
|
|
16
|
+
return "".concat(this.prefix, ".flagSet.").concat(flagSet);
|
|
17
17
|
};
|
|
18
18
|
KeyBuilder.prototype.buildSplitKey = function (splitName) {
|
|
19
|
-
return this.prefix
|
|
19
|
+
return "".concat(this.prefix, ".split.").concat(splitName);
|
|
20
20
|
};
|
|
21
21
|
KeyBuilder.prototype.buildSplitsTillKey = function () {
|
|
22
|
-
return this.prefix
|
|
22
|
+
return "".concat(this.prefix, ".splits.till");
|
|
23
23
|
};
|
|
24
24
|
KeyBuilder.prototype.buildSplitKeyPrefix = function () {
|
|
25
|
-
return this.prefix
|
|
25
|
+
return "".concat(this.prefix, ".split.");
|
|
26
26
|
};
|
|
27
27
|
KeyBuilder.prototype.buildRBSegmentKey = function (rbsegmentName) {
|
|
28
|
-
return this.prefix
|
|
28
|
+
return "".concat(this.prefix, ".rbsegment.").concat(rbsegmentName);
|
|
29
29
|
};
|
|
30
30
|
KeyBuilder.prototype.buildRBSegmentsTillKey = function () {
|
|
31
|
-
return this.prefix
|
|
31
|
+
return "".concat(this.prefix, ".rbsegments.till");
|
|
32
32
|
};
|
|
33
33
|
KeyBuilder.prototype.buildRBSegmentKeyPrefix = function () {
|
|
34
|
-
return this.prefix
|
|
34
|
+
return "".concat(this.prefix, ".rbsegment.");
|
|
35
35
|
};
|
|
36
36
|
KeyBuilder.prototype.buildSegmentNameKey = function (segmentName) {
|
|
37
|
-
return this.prefix
|
|
37
|
+
return "".concat(this.prefix, ".segment.").concat(segmentName);
|
|
38
38
|
};
|
|
39
39
|
KeyBuilder.prototype.buildSegmentTillKey = function (segmentName) {
|
|
40
|
-
return this.prefix
|
|
40
|
+
return "".concat(this.prefix, ".segment.").concat(segmentName, ".till");
|
|
41
41
|
};
|
|
42
42
|
KeyBuilder.prototype.extractKey = function (builtKey) {
|
|
43
43
|
var s = builtKey.match(everythingAtTheEnd);
|
|
@@ -49,7 +49,7 @@ var KeyBuilder = /** @class */ (function () {
|
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
51
|
KeyBuilder.prototype.buildHashKey = function () {
|
|
52
|
-
return this.prefix
|
|
52
|
+
return "".concat(this.prefix, ".hash");
|
|
53
53
|
};
|
|
54
54
|
return KeyBuilder;
|
|
55
55
|
}());
|
|
@@ -59,5 +59,5 @@ export { KeyBuilder };
|
|
|
59
59
|
* The hash is in hexadecimal format (8 characters max, 32 bits).
|
|
60
60
|
*/
|
|
61
61
|
export function getStorageHash(settings) {
|
|
62
|
-
return hash(settings.core.authorizationKey
|
|
62
|
+
return hash("".concat(settings.core.authorizationKey, "::").concat(settings.sync.__splitFiltersValidation.queryString, "::").concat(settings.sync.flagSpecVersion)).toString(16);
|
|
63
63
|
}
|
|
@@ -6,40 +6,40 @@ var KeyBuilderCS = /** @class */ (function (_super) {
|
|
|
6
6
|
function KeyBuilderCS(prefix, matchingKey) {
|
|
7
7
|
var _this = _super.call(this, prefix) || this;
|
|
8
8
|
_this.matchingKey = matchingKey;
|
|
9
|
-
_this.regexSplitsCacheKey = new RegExp("^"
|
|
9
|
+
_this.regexSplitsCacheKey = new RegExp("^".concat(prefix, "\\.(splits?|trafficType|flagSet)\\."));
|
|
10
10
|
return _this;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* @override
|
|
14
14
|
*/
|
|
15
15
|
KeyBuilderCS.prototype.buildSegmentNameKey = function (segmentName) {
|
|
16
|
-
return this.prefix
|
|
16
|
+
return "".concat(this.prefix, ".").concat(this.matchingKey, ".segment.").concat(segmentName);
|
|
17
17
|
};
|
|
18
18
|
KeyBuilderCS.prototype.extractSegmentName = function (builtSegmentKeyName) {
|
|
19
|
-
var prefix = this.prefix
|
|
19
|
+
var prefix = "".concat(this.prefix, ".").concat(this.matchingKey, ".segment.");
|
|
20
20
|
if (startsWith(builtSegmentKeyName, prefix))
|
|
21
21
|
return builtSegmentKeyName.slice(prefix.length);
|
|
22
22
|
};
|
|
23
23
|
KeyBuilderCS.prototype.buildLastUpdatedKey = function () {
|
|
24
|
-
return this.prefix
|
|
24
|
+
return "".concat(this.prefix, ".splits.lastUpdated");
|
|
25
25
|
};
|
|
26
26
|
KeyBuilderCS.prototype.isSplitsCacheKey = function (key) {
|
|
27
27
|
return this.regexSplitsCacheKey.test(key);
|
|
28
28
|
};
|
|
29
29
|
KeyBuilderCS.prototype.buildTillKey = function () {
|
|
30
|
-
return this.prefix
|
|
30
|
+
return "".concat(this.prefix, ".").concat(this.matchingKey, ".segments.till");
|
|
31
31
|
};
|
|
32
32
|
KeyBuilderCS.prototype.isSplitKey = function (key) {
|
|
33
|
-
return startsWith(key, this.prefix
|
|
33
|
+
return startsWith(key, "".concat(this.prefix, ".split."));
|
|
34
34
|
};
|
|
35
35
|
KeyBuilderCS.prototype.isRBSegmentKey = function (key) {
|
|
36
|
-
return startsWith(key, this.prefix
|
|
36
|
+
return startsWith(key, "".concat(this.prefix, ".rbsegment."));
|
|
37
37
|
};
|
|
38
38
|
KeyBuilderCS.prototype.buildSplitsWithSegmentCountKey = function () {
|
|
39
|
-
return this.prefix
|
|
39
|
+
return "".concat(this.prefix, ".splits.usingSegments");
|
|
40
40
|
};
|
|
41
41
|
KeyBuilderCS.prototype.buildLastClear = function () {
|
|
42
|
-
return this.prefix
|
|
42
|
+
return "".concat(this.prefix, ".lastClear");
|
|
43
43
|
};
|
|
44
44
|
return KeyBuilderCS;
|
|
45
45
|
}(KeyBuilder));
|
|
@@ -47,15 +47,15 @@ export { KeyBuilderCS };
|
|
|
47
47
|
export function myLargeSegmentsKeyBuilder(prefix, matchingKey) {
|
|
48
48
|
return {
|
|
49
49
|
buildSegmentNameKey: function (segmentName) {
|
|
50
|
-
return prefix
|
|
50
|
+
return "".concat(prefix, ".").concat(matchingKey, ".largeSegment.").concat(segmentName);
|
|
51
51
|
},
|
|
52
52
|
extractSegmentName: function (builtSegmentKeyName) {
|
|
53
|
-
var p = prefix
|
|
53
|
+
var p = "".concat(prefix, ".").concat(matchingKey, ".largeSegment.");
|
|
54
54
|
if (startsWith(builtSegmentKeyName, p))
|
|
55
55
|
return builtSegmentKeyName.slice(p.length);
|
|
56
56
|
},
|
|
57
57
|
buildTillKey: function () {
|
|
58
|
-
return prefix
|
|
58
|
+
return "".concat(prefix, ".").concat(matchingKey, ".largeSegments.till");
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
61
|
}
|
|
@@ -15,42 +15,42 @@ var KeyBuilderSS = /** @class */ (function (_super) {
|
|
|
15
15
|
__extends(KeyBuilderSS, _super);
|
|
16
16
|
function KeyBuilderSS(prefix, metadata) {
|
|
17
17
|
var _this = _super.call(this, prefix) || this;
|
|
18
|
-
_this.latencyPrefix = _this.prefix
|
|
19
|
-
_this.exceptionPrefix = _this.prefix
|
|
20
|
-
_this.initPrefix = _this.prefix
|
|
21
|
-
_this.versionablePrefix = metadata.s
|
|
18
|
+
_this.latencyPrefix = "".concat(_this.prefix, ".telemetry.latencies");
|
|
19
|
+
_this.exceptionPrefix = "".concat(_this.prefix, ".telemetry.exceptions");
|
|
20
|
+
_this.initPrefix = "".concat(_this.prefix, ".telemetry.init");
|
|
21
|
+
_this.versionablePrefix = "".concat(metadata.s, "/").concat(metadata.n, "/").concat(metadata.i);
|
|
22
22
|
return _this;
|
|
23
23
|
}
|
|
24
24
|
KeyBuilderSS.prototype.buildRegisteredSegmentsKey = function () {
|
|
25
|
-
return this.prefix
|
|
25
|
+
return "".concat(this.prefix, ".segments.registered");
|
|
26
26
|
};
|
|
27
27
|
KeyBuilderSS.prototype.buildImpressionsKey = function () {
|
|
28
|
-
return this.prefix
|
|
28
|
+
return "".concat(this.prefix, ".impressions");
|
|
29
29
|
};
|
|
30
30
|
KeyBuilderSS.prototype.buildImpressionsCountKey = function () {
|
|
31
|
-
return this.prefix
|
|
31
|
+
return "".concat(this.prefix, ".impressions.count");
|
|
32
32
|
};
|
|
33
33
|
KeyBuilderSS.prototype.buildUniqueKeysKey = function () {
|
|
34
|
-
return this.prefix
|
|
34
|
+
return "".concat(this.prefix, ".uniquekeys");
|
|
35
35
|
};
|
|
36
36
|
KeyBuilderSS.prototype.buildEventsKey = function () {
|
|
37
|
-
return this.prefix
|
|
37
|
+
return "".concat(this.prefix, ".events");
|
|
38
38
|
};
|
|
39
39
|
KeyBuilderSS.prototype.searchPatternForSplitKeys = function () {
|
|
40
|
-
return this.buildSplitKeyPrefix()
|
|
40
|
+
return "".concat(this.buildSplitKeyPrefix(), "*");
|
|
41
41
|
};
|
|
42
42
|
KeyBuilderSS.prototype.searchPatternForRBSegmentKeys = function () {
|
|
43
|
-
return this.buildRBSegmentKeyPrefix()
|
|
43
|
+
return "".concat(this.buildRBSegmentKeyPrefix(), "*");
|
|
44
44
|
};
|
|
45
45
|
/* Telemetry keys */
|
|
46
46
|
KeyBuilderSS.prototype.buildLatencyKey = function (method, bucket) {
|
|
47
|
-
return this.latencyPrefix
|
|
47
|
+
return "".concat(this.latencyPrefix, "::").concat(this.versionablePrefix, "/").concat(METHOD_NAMES[method], "/").concat(bucket);
|
|
48
48
|
};
|
|
49
49
|
KeyBuilderSS.prototype.buildExceptionKey = function (method) {
|
|
50
|
-
return this.exceptionPrefix
|
|
50
|
+
return "".concat(this.exceptionPrefix, "::").concat(this.versionablePrefix, "/").concat(METHOD_NAMES[method]);
|
|
51
51
|
};
|
|
52
52
|
KeyBuilderSS.prototype.buildInitKey = function () {
|
|
53
|
-
return this.initPrefix
|
|
53
|
+
return "".concat(this.initPrefix, "::").concat(this.versionablePrefix);
|
|
54
54
|
};
|
|
55
55
|
return KeyBuilderSS;
|
|
56
56
|
}(KeyBuilder));
|
|
@@ -7,7 +7,7 @@ export function getRolloutPlan(log, storage, options) {
|
|
|
7
7
|
if (options === void 0) { options = {}; }
|
|
8
8
|
var keys = options.keys, exposeSegments = options.exposeSegments;
|
|
9
9
|
var splits = storage.splits, segments = storage.segments, rbSegments = storage.rbSegments;
|
|
10
|
-
log.debug("storage: get feature flags"
|
|
10
|
+
log.debug("storage: get feature flags".concat(keys ? ", and memberships for keys: ".concat(keys) : '').concat(exposeSegments ? ', and segments' : ''));
|
|
11
11
|
return {
|
|
12
12
|
splitChanges: {
|
|
13
13
|
ff: {
|