@splitsoftware/splitio-commons 2.11.1-rc.2 → 3.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGES.txt +15 -2
- package/cjs/evaluator/condition/engineUtils.js +2 -2
- package/cjs/evaluator/fallbackConfigsCalculator/fallbackSanitizer/index.js +70 -0
- package/cjs/evaluator/fallbackConfigsCalculator/index.js +25 -0
- package/cjs/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +5 -8
- package/cjs/evaluator/fallbackTreatmentsCalculator/index.js +21 -32
- package/cjs/evaluator/index.js +67 -42
- package/cjs/evaluator/matchers/whitelist.js +1 -1
- package/cjs/integrations/pluggable.js +1 -1
- package/cjs/listeners/browser.js +4 -3
- package/cjs/listeners/node.js +4 -4
- package/cjs/logger/constants.js +14 -20
- package/cjs/logger/index.js +1 -1
- package/cjs/logger/messages/debug.js +6 -7
- package/cjs/logger/messages/error.js +4 -4
- package/cjs/logger/messages/info.js +2 -4
- package/cjs/logger/messages/warn.js +9 -9
- package/cjs/platform/browser.js +15 -0
- package/cjs/platform/getEventSource/browser.js +8 -0
- package/cjs/platform/getEventSource/eventsource.js +480 -0
- package/cjs/platform/getEventSource/node.js +26 -0
- package/cjs/platform/getFetch/browser.js +9 -0
- package/cjs/platform/getFetch/node.js +27 -0
- package/cjs/platform/getOptions/node.js +25 -0
- package/cjs/platform/node.js +17 -0
- package/cjs/readiness/constants.js +2 -1
- package/cjs/sdkClient/client.js +9 -35
- package/cjs/sdkClient/clientAttributesDecoration.js +3 -3
- package/cjs/sdkClient/clientInputValidation.js +38 -81
- package/cjs/sdkClient/identity.js +1 -1
- package/cjs/sdkClient/sdkClient.js +4 -49
- package/cjs/sdkClient/sdkLifecycle.js +70 -0
- package/cjs/sdkClient/trackMethod.js +56 -0
- package/cjs/sdkFactory/index.js +8 -45
- package/cjs/sdkManager/index.js +3 -3
- package/cjs/services/splitApi.js +18 -13
- package/cjs/services/splitHttpClient.js +1 -1
- package/cjs/storages/AbstractSplitsCacheAsync.js +1 -1
- package/cjs/storages/AbstractSplitsCacheSync.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/RBSegmentsCacheInLocal.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/RBSegmentsCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/SplitsCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/TelemetryCacheInMemory.js +2 -2
- 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/RBSegmentsCacheInRedis.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/RBSegmentsCachePluggable.js +1 -1
- 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 +1 -1
- 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/fetchers/splitChangesFetcher.js +23 -14
- package/cjs/sync/polling/pollingManagerCS.js +11 -11
- package/cjs/sync/polling/pollingManagerSS.js +13 -13
- package/cjs/sync/polling/syncTasks/definitionsSyncTask.js +12 -0
- package/cjs/sync/polling/updaters/{splitChangesUpdater.js → definitionChangesUpdater.js} +67 -59
- package/cjs/sync/polling/updaters/mySegmentsUpdater.js +1 -1
- package/cjs/sync/polling/updaters/segmentChangesUpdater.js +6 -6
- 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 +4 -4
- package/cjs/sync/streaming/parseUtils.js +12 -12
- package/cjs/sync/streaming/pushManager.js +2 -2
- package/cjs/sync/submitters/impressionsSubmitter.js +6 -6
- package/cjs/sync/submitters/submitter.js +1 -1
- package/cjs/sync/syncManagerOnline.js +5 -2
- 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/EventEmitter.js +391 -0
- package/cjs/utils/filter/bloomFilter.js +37 -0
- package/cjs/utils/inputValidation/apiKey.js +1 -1
- package/cjs/utils/inputValidation/attribute.js +2 -2
- package/cjs/utils/inputValidation/{split.js → definition.js} +10 -10
- package/cjs/utils/inputValidation/{splitExistence.js → definitionExistence.js} +6 -6
- package/cjs/utils/inputValidation/definitions.js +25 -0
- package/cjs/utils/inputValidation/eventProperties.js +1 -1
- package/cjs/utils/inputValidation/index.js +7 -7
- package/cjs/utils/inputValidation/isOperational.js +4 -4
- package/cjs/utils/inputValidation/target.js +22 -0
- package/cjs/utils/labels/index.js +3 -3
- package/cjs/utils/lang/index.js +1 -1
- package/cjs/utils/promise/timeout.js +1 -1
- package/cjs/utils/settingsValidation/splitFilters.js +4 -4
- package/cjs/utils/settingsValidation/url.js +5 -5
- package/esm/evaluator/condition/engineUtils.js +2 -2
- package/esm/evaluator/fallbackConfigsCalculator/fallbackSanitizer/index.js +64 -0
- package/esm/evaluator/fallbackConfigsCalculator/index.js +21 -0
- package/esm/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +5 -8
- package/esm/evaluator/fallbackTreatmentsCalculator/index.js +21 -33
- package/esm/evaluator/index.js +66 -42
- package/esm/evaluator/matchers/whitelist.js +1 -1
- package/esm/integrations/pluggable.js +1 -1
- package/esm/listeners/browser.js +4 -3
- package/esm/listeners/node.js +4 -4
- package/esm/logger/constants.js +11 -17
- package/esm/logger/index.js +1 -1
- package/esm/logger/messages/debug.js +5 -6
- package/esm/logger/messages/error.js +3 -3
- package/esm/logger/messages/info.js +1 -3
- package/esm/logger/messages/warn.js +8 -8
- package/esm/platform/browser.js +12 -0
- package/esm/platform/getEventSource/browser.js +4 -0
- package/esm/platform/getEventSource/eventsource.js +480 -0
- package/esm/platform/getEventSource/node.js +20 -0
- package/esm/platform/getFetch/browser.js +5 -0
- package/esm/platform/getFetch/node.js +22 -0
- package/esm/platform/getOptions/node.js +20 -0
- package/esm/platform/node.js +14 -0
- package/esm/readiness/constants.js +1 -0
- package/esm/sdkClient/client.js +10 -37
- package/esm/sdkClient/clientAttributesDecoration.js +3 -3
- package/esm/sdkClient/clientInputValidation.js +40 -83
- package/esm/sdkClient/identity.js +1 -1
- package/esm/sdkClient/sdkClient.js +4 -49
- package/esm/sdkClient/sdkLifecycle.js +66 -0
- package/esm/sdkClient/trackMethod.js +52 -0
- package/esm/sdkFactory/index.js +8 -45
- package/esm/sdkManager/index.js +4 -4
- package/esm/services/splitApi.js +18 -13
- package/esm/services/splitHttpClient.js +1 -1
- package/esm/storages/AbstractSplitsCacheAsync.js +1 -1
- package/esm/storages/AbstractSplitsCacheSync.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/inLocalStorage/RBSegmentsCacheInLocal.js +1 -1
- package/esm/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
- package/esm/storages/inMemory/RBSegmentsCacheInMemory.js +1 -1
- package/esm/storages/inMemory/TelemetryCacheInMemory.js +2 -2
- package/esm/storages/inRedis/EventsCacheInRedis.js +1 -1
- package/esm/storages/inRedis/ImpressionCountsCacheInRedis.js +4 -4
- package/esm/storages/inRedis/RBSegmentsCacheInRedis.js +1 -1
- 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/RBSegmentsCachePluggable.js +1 -1
- 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 +1 -1
- package/esm/storages/utils.js +6 -6
- package/esm/sync/offline/splitsParser/parseCondition.js +1 -1
- package/esm/sync/polling/fetchers/splitChangesFetcher.js +24 -15
- package/esm/sync/polling/pollingManagerCS.js +11 -11
- package/esm/sync/polling/pollingManagerSS.js +13 -13
- package/esm/sync/polling/syncTasks/definitionsSyncTask.js +8 -0
- package/esm/sync/polling/updaters/{splitChangesUpdater.js → definitionChangesUpdater.js} +67 -59
- package/esm/sync/polling/updaters/mySegmentsUpdater.js +2 -2
- package/esm/sync/polling/updaters/segmentChangesUpdater.js +7 -7
- 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 +4 -4
- package/esm/sync/streaming/parseUtils.js +10 -10
- package/esm/sync/streaming/pushManager.js +3 -3
- package/esm/sync/submitters/impressionsSubmitter.js +6 -6
- package/esm/sync/submitters/submitter.js +1 -1
- package/esm/sync/syncManagerOnline.js +5 -2
- 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/EventEmitter.js +387 -0
- package/esm/utils/filter/bloomFilter.js +33 -0
- package/esm/utils/inputValidation/apiKey.js +1 -1
- package/esm/utils/inputValidation/attribute.js +2 -2
- package/esm/utils/inputValidation/{split.js → definition.js} +8 -8
- package/esm/utils/inputValidation/definitionExistence.js +15 -0
- package/esm/utils/inputValidation/definitions.js +21 -0
- package/esm/utils/inputValidation/index.js +3 -3
- package/esm/utils/inputValidation/isOperational.js +4 -4
- package/esm/utils/inputValidation/target.js +18 -0
- package/esm/utils/labels/index.js +2 -2
- package/esm/utils/promise/timeout.js +1 -1
- package/esm/utils/settingsValidation/splitFilters.js +4 -4
- package/esm/utils/settingsValidation/url.js +5 -5
- package/package.json +15 -6
- package/src/dtos/types.ts +65 -70
- package/src/evaluator/Engine.ts +4 -4
- package/src/evaluator/combiners/and.ts +3 -3
- package/src/evaluator/combiners/ifelseif.ts +2 -2
- package/src/evaluator/condition/engineUtils.ts +2 -2
- package/src/evaluator/condition/index.ts +3 -3
- package/src/evaluator/fallbackConfigsCalculator/fallbackSanitizer/index.ts +76 -0
- package/src/evaluator/fallbackConfigsCalculator/index.ts +24 -0
- package/src/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.ts +5 -7
- package/src/evaluator/fallbackTreatmentsCalculator/index.ts +27 -41
- package/src/evaluator/index.ts +80 -45
- package/src/evaluator/matchers/dependency.ts +2 -2
- package/src/evaluator/matchers/matcherTypes.ts +2 -2
- package/src/evaluator/matchers/prerequisites.ts +4 -4
- package/src/evaluator/matchers/rbsegment.ts +2 -2
- package/src/evaluator/matchers/whitelist.ts +2 -2
- package/src/evaluator/matchersTransform/index.ts +2 -2
- package/src/evaluator/matchersTransform/whitelist.ts +2 -2
- package/src/evaluator/parser/index.ts +4 -4
- package/src/evaluator/treatments/index.ts +2 -2
- package/src/evaluator/types.ts +6 -6
- package/src/evaluator/value/index.ts +1 -1
- package/src/integrations/pluggable.ts +1 -1
- package/src/listeners/browser.ts +11 -8
- package/src/listeners/node.ts +2 -5
- package/src/logger/constants.ts +11 -17
- package/src/logger/messages/debug.ts +5 -6
- package/src/logger/messages/error.ts +3 -3
- package/src/logger/messages/info.ts +1 -3
- package/src/logger/messages/warn.ts +8 -8
- package/src/platform/browser.ts +14 -0
- package/src/platform/getEventSource/browser.ts +4 -0
- package/src/platform/getEventSource/eventsource.js +519 -0
- package/src/platform/getEventSource/node.ts +23 -0
- package/src/platform/getFetch/browser.ts +5 -0
- package/src/platform/getFetch/node.ts +27 -0
- package/src/platform/getOptions/node.ts +24 -0
- package/src/platform/node.ts +16 -0
- package/src/readiness/constants.ts +1 -0
- package/src/sdkClient/client.ts +11 -41
- package/src/sdkClient/clientInputValidation.ts +44 -84
- package/src/sdkClient/sdkClient.ts +5 -54
- package/src/sdkClient/sdkLifecycle.ts +78 -0
- package/src/sdkClient/trackMethod.ts +59 -0
- package/src/sdkFactory/index.ts +10 -54
- package/src/sdkFactory/types.ts +19 -16
- package/src/sdkManager/index.ts +9 -9
- package/src/services/splitApi.ts +6 -0
- package/src/services/types.ts +3 -2
- package/src/storages/AbstractSplitsCacheAsync.ts +7 -7
- package/src/storages/AbstractSplitsCacheSync.ts +10 -10
- package/src/storages/inLocalStorage/RBSegmentsCacheInLocal.ts +2 -2
- package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +6 -6
- package/src/storages/inMemory/RBSegmentsCacheInMemory.ts +2 -2
- package/src/storages/inMemory/SplitsCacheInMemory.ts +5 -5
- package/src/storages/inMemory/TelemetryCacheInMemory.ts +2 -2
- package/src/storages/inRedis/RBSegmentsCacheInRedis.ts +2 -2
- package/src/storages/inRedis/SplitsCacheInRedis.ts +9 -9
- package/src/storages/pluggable/RBSegmentsCachePluggable.ts +2 -2
- package/src/storages/pluggable/SplitsCachePluggable.ts +9 -9
- package/src/storages/types.ts +21 -16
- package/src/sync/offline/splitsParser/parseCondition.ts +2 -2
- package/src/sync/offline/splitsParser/splitsParserFromSettings.ts +3 -3
- package/src/sync/offline/splitsParser/types.ts +6 -3
- package/src/sync/offline/syncManagerOffline.ts +2 -2
- package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +6 -6
- package/src/sync/polling/fetchers/splitChangesFetcher.ts +57 -22
- package/src/sync/polling/fetchers/types.ts +5 -3
- package/src/sync/polling/pollingManagerCS.ts +12 -10
- package/src/sync/polling/pollingManagerSS.ts +15 -13
- package/src/sync/polling/syncTasks/{splitsSyncTask.ts → definitionsSyncTask.ts} +10 -11
- package/src/sync/polling/types.ts +3 -3
- package/src/sync/polling/updaters/{splitChangesUpdater.ts → definitionChangesUpdater.ts} +77 -68
- package/src/sync/polling/updaters/mySegmentsUpdater.ts +2 -2
- package/src/sync/polling/updaters/segmentChangesUpdater.ts +7 -7
- package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +6 -6
- package/src/sync/streaming/parseUtils.ts +12 -12
- package/src/sync/streaming/pushManager.ts +3 -3
- package/src/sync/submitters/impressionsSubmitter.ts +9 -9
- package/src/sync/submitters/types.ts +3 -0
- package/src/sync/syncManagerOnline.ts +6 -2
- package/src/trackers/eventTracker.ts +7 -10
- package/src/trackers/impressionsTracker.ts +42 -26
- package/src/trackers/types.ts +3 -1
- package/src/utils/EventEmitter.js +444 -0
- package/src/utils/filter/bloomFilter.ts +38 -0
- package/src/utils/inputValidation/definition.ts +27 -0
- package/src/utils/inputValidation/definitionExistence.ts +19 -0
- package/src/utils/inputValidation/definitions.ts +21 -0
- package/src/utils/inputValidation/index.ts +3 -3
- package/src/utils/inputValidation/isOperational.ts +4 -4
- package/src/utils/inputValidation/target.ts +21 -0
- package/src/utils/labels/index.ts +2 -2
- package/src/utils/settingsValidation/splitFilters.ts +3 -3
- package/types/splitio.d.ts +202 -9
- package/cjs/sync/polling/syncTasks/splitsSyncTask.js +0 -13
- package/cjs/utils/inputValidation/splits.js +0 -25
- package/esm/sync/polling/syncTasks/splitsSyncTask.js +0 -9
- package/esm/utils/inputValidation/splitExistence.js +0 -15
- package/esm/utils/inputValidation/splits.js +0 -21
- package/src/utils/inputValidation/split.ts +0 -27
- package/src/utils/inputValidation/splitExistence.ts +0 -19
- package/src/utils/inputValidation/splits.ts +0 -21
|
@@ -21,10 +21,10 @@ var ImpressionCountsCachePluggable = /** @class */ (function (_super) {
|
|
|
21
21
|
if (!keys.length)
|
|
22
22
|
return Promise.resolve(false);
|
|
23
23
|
var pipeline = keys.reduce(function (pipeline, key) {
|
|
24
|
-
return pipeline.then(function () { return _this.wrapper.incr(_this.key
|
|
24
|
+
return pipeline.then(function () { return _this.wrapper.incr("".concat(_this.key, "::").concat(key), counts[key]); });
|
|
25
25
|
}, Promise.resolve());
|
|
26
26
|
return pipeline.catch(function (err) {
|
|
27
|
-
_this.log.error(LOG_PREFIX
|
|
27
|
+
_this.log.error("".concat(LOG_PREFIX, "Error in impression counts pipeline: ").concat(err, "."));
|
|
28
28
|
return false;
|
|
29
29
|
});
|
|
30
30
|
};
|
|
@@ -49,18 +49,18 @@ var ImpressionCountsCachePluggable = /** @class */ (function (_super) {
|
|
|
49
49
|
var count = counts[i];
|
|
50
50
|
var keyFeatureNameAndTime = key.split('::');
|
|
51
51
|
if (keyFeatureNameAndTime.length !== 3) {
|
|
52
|
-
_this.log.error(LOG_PREFIX
|
|
52
|
+
_this.log.error("".concat(LOG_PREFIX, "Error spliting key ").concat(key));
|
|
53
53
|
continue;
|
|
54
54
|
}
|
|
55
55
|
var timeFrame = parseInt(keyFeatureNameAndTime[2]);
|
|
56
56
|
if (isNaN(timeFrame)) {
|
|
57
|
-
_this.log.error(LOG_PREFIX
|
|
57
|
+
_this.log.error("".concat(LOG_PREFIX, "Error parsing time frame ").concat(keyFeatureNameAndTime[2]));
|
|
58
58
|
continue;
|
|
59
59
|
}
|
|
60
60
|
// @ts-ignore
|
|
61
61
|
var rawCount = parseInt(count);
|
|
62
62
|
if (isNaN(rawCount)) {
|
|
63
|
-
_this.log.error(LOG_PREFIX
|
|
63
|
+
_this.log.error("".concat(LOG_PREFIX, "Error parsing raw count ").concat(count));
|
|
64
64
|
continue;
|
|
65
65
|
}
|
|
66
66
|
pf.push({
|
|
@@ -31,7 +31,7 @@ var RBSegmentsCachePluggable = /** @class */ (function () {
|
|
|
31
31
|
return _this.wrapper.set(key, stringifiedNewRBSegment).then(function () { return true; });
|
|
32
32
|
})),
|
|
33
33
|
Promise.all(toRemove.map(function (toRemove) {
|
|
34
|
-
var key = _this.keys.buildRBSegmentKey(toRemove
|
|
34
|
+
var key = _this.keys.buildRBSegmentKey(toRemove);
|
|
35
35
|
return _this.wrapper.del(key);
|
|
36
36
|
}))
|
|
37
37
|
]).then(function (_a) {
|
|
@@ -167,12 +167,12 @@ var SplitsCachePluggable = /** @class */ (function (_super) {
|
|
|
167
167
|
return false; // if entry doesn't exist, means that TT doesn't exist
|
|
168
168
|
ttCount = parseInt(ttCount, 10);
|
|
169
169
|
if (!isFiniteNumber(ttCount) || ttCount < 0) {
|
|
170
|
-
_this.log.info(LOG_PREFIX +
|
|
170
|
+
_this.log.info(LOG_PREFIX + "Could not validate traffic type existence of ".concat(trafficType, " due to data corruption of some sorts."));
|
|
171
171
|
return false;
|
|
172
172
|
}
|
|
173
173
|
return ttCount > 0;
|
|
174
174
|
}).catch(function (e) {
|
|
175
|
-
_this.log.error(LOG_PREFIX +
|
|
175
|
+
_this.log.error(LOG_PREFIX + "Could not validate traffic type existence of ".concat(trafficType, " due to an error: ").concat(e, "."));
|
|
176
176
|
// If there is an error, bypass the validation so the event can get tracked.
|
|
177
177
|
return true;
|
|
178
178
|
});
|
|
@@ -42,18 +42,18 @@ var TelemetryCachePluggable = /** @class */ (function () {
|
|
|
42
42
|
var field = latencyKeys[i].split('::')[1];
|
|
43
43
|
var parsedField = parseLatencyField(field);
|
|
44
44
|
if (isString(parsedField)) {
|
|
45
|
-
_this.log.error("Ignoring invalid latency field: "
|
|
45
|
+
_this.log.error("Ignoring invalid latency field: ".concat(field, ": ").concat(parsedField));
|
|
46
46
|
continue;
|
|
47
47
|
}
|
|
48
48
|
// @ts-ignore
|
|
49
49
|
var count = parseInt(latencies[i]);
|
|
50
50
|
if (isNaNNumber(count)) {
|
|
51
|
-
_this.log.error("Ignoring latency with invalid count: "
|
|
51
|
+
_this.log.error("Ignoring latency with invalid count: ".concat(latencies[i]));
|
|
52
52
|
continue;
|
|
53
53
|
}
|
|
54
54
|
var metadata = parsedField[0], method = parsedField[1], bucket = parsedField[2];
|
|
55
55
|
if (bucket >= MAX_LATENCY_BUCKET_COUNT) {
|
|
56
|
-
_this.log.error("Ignoring latency with invalid bucket: "
|
|
56
|
+
_this.log.error("Ignoring latency with invalid bucket: ".concat(bucket));
|
|
57
57
|
continue;
|
|
58
58
|
}
|
|
59
59
|
var methodLatencies = result.get(metadata) || {};
|
|
@@ -81,13 +81,13 @@ var TelemetryCachePluggable = /** @class */ (function () {
|
|
|
81
81
|
var field = exceptionKeys[i].split('::')[1];
|
|
82
82
|
var parsedField = parseExceptionField(field);
|
|
83
83
|
if (isString(parsedField)) {
|
|
84
|
-
_this.log.error("Ignoring invalid exception field: "
|
|
84
|
+
_this.log.error("Ignoring invalid exception field: ".concat(field, ": ").concat(parsedField));
|
|
85
85
|
continue;
|
|
86
86
|
}
|
|
87
87
|
// @ts-ignore
|
|
88
88
|
var count = parseInt(exceptions[i]);
|
|
89
89
|
if (isNaNNumber(count)) {
|
|
90
|
-
_this.log.error("Ignoring exception with invalid count: "
|
|
90
|
+
_this.log.error("Ignoring exception with invalid count: ".concat(exceptions[i]));
|
|
91
91
|
continue;
|
|
92
92
|
}
|
|
93
93
|
var metadata = parsedField[0], method = parsedField[1];
|
|
@@ -115,7 +115,7 @@ var TelemetryCachePluggable = /** @class */ (function () {
|
|
|
115
115
|
var field = configKeys[i].split('::')[1];
|
|
116
116
|
var parsedField = parseMetadata(field);
|
|
117
117
|
if (isString(parsedField)) {
|
|
118
|
-
_this.log.error("Ignoring invalid config field: "
|
|
118
|
+
_this.log.error("Ignoring invalid config field: ".concat(field, ": ").concat(parsedField));
|
|
119
119
|
continue;
|
|
120
120
|
}
|
|
121
121
|
var metadata = parsedField[0];
|
|
@@ -124,7 +124,7 @@ var TelemetryCachePluggable = /** @class */ (function () {
|
|
|
124
124
|
result.set(metadata, config);
|
|
125
125
|
}
|
|
126
126
|
catch (e) {
|
|
127
|
-
_this.log.error("Ignoring invalid config: "
|
|
127
|
+
_this.log.error("Ignoring invalid config: ".concat(configs[i]));
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
return Promise.all(configKeys.map(function (configKey) { return _this.wrapper.del(configKey); })).then(function () { return result; });
|
|
@@ -32,7 +32,7 @@ var UniqueKeysCachePluggable = /** @class */ (function (_super) {
|
|
|
32
32
|
this.clear();
|
|
33
33
|
return this.wrapper.pushItems(this.key, uniqueKeysArray)
|
|
34
34
|
.catch(function (err) {
|
|
35
|
-
_this.log.error(LOG_PREFIX
|
|
35
|
+
_this.log.error("".concat(LOG_PREFIX, "Error in uniqueKeys pipeline: ").concat(err, "."));
|
|
36
36
|
return false;
|
|
37
37
|
});
|
|
38
38
|
};
|
|
@@ -35,7 +35,7 @@ function validatePluggableStorageOptions(options) {
|
|
|
35
35
|
var wrapper = options.wrapper;
|
|
36
36
|
var missingMethods = METHODS_TO_PROMISE_WRAP.filter(function (method) { return typeof wrapper[method] !== 'function'; });
|
|
37
37
|
if (missingMethods.length)
|
|
38
|
-
throw new Error(NO_VALID_WRAPPER_INTERFACE
|
|
38
|
+
throw new Error("".concat(NO_VALID_WRAPPER_INTERFACE, " The following methods are missing or invalid: ").concat(missingMethods));
|
|
39
39
|
}
|
|
40
40
|
// Async return type in `client.track` method on consumer partial mode
|
|
41
41
|
// No need to promisify impressions cache
|
|
@@ -79,7 +79,7 @@ export function PluggableStorage(options) {
|
|
|
79
79
|
var currentHash = getStorageHash(settings);
|
|
80
80
|
if (hash !== currentHash) {
|
|
81
81
|
log.info(LOG_PREFIX + 'Storage HASH has changed (SDK key, flags filter criteria or flags spec version was modified). Clearing cache');
|
|
82
|
-
return wrapper.getKeysByPrefix(keys.prefix
|
|
82
|
+
return wrapper.getKeysByPrefix("".concat(keys.prefix, ".")).then(function (storageKeys) {
|
|
83
83
|
return Promise.all(storageKeys.map(function (storageKey) { return wrapper.del(storageKey); }));
|
|
84
84
|
}).then(function () { return wrapper.set(keys.buildHashKey(), currentHash); });
|
|
85
85
|
}
|
|
@@ -31,7 +31,7 @@ export function wrapperAdapter(log, wrapper) {
|
|
|
31
31
|
METHODS_TO_PROMISE_WRAP.forEach(function (method) {
|
|
32
32
|
// Logs error and wraps it into a rejected promise.
|
|
33
33
|
function handleError(e) {
|
|
34
|
-
log.error(LOG_PREFIX
|
|
34
|
+
log.error("".concat(LOG_PREFIX, " Wrapper '").concat(method, "' operation threw an error. Message: ").concat(e));
|
|
35
35
|
return Promise.reject(e);
|
|
36
36
|
}
|
|
37
37
|
wrapperAdapter[method] = function () {
|
|
@@ -22,7 +22,7 @@ export function validateRolloutPlan(log, settings) {
|
|
|
22
22
|
export function setRolloutPlan(log, rolloutPlan, storage, matchingKey) {
|
|
23
23
|
var splits = storage.splits, rbSegments = storage.rbSegments, segments = storage.segments, largeSegments = storage.largeSegments;
|
|
24
24
|
var _a = rolloutPlan.splitChanges, ff = _a.ff, rbs = _a.rbs;
|
|
25
|
-
log.debug("storage: set feature flags and segments"
|
|
25
|
+
log.debug("storage: set feature flags and segments".concat(matchingKey ? " for key ".concat(matchingKey) : ''));
|
|
26
26
|
if (splits && ff) {
|
|
27
27
|
splits.clear();
|
|
28
28
|
splits.update(ff.d, [], ff.t);
|
package/esm/storages/utils.js
CHANGED
|
@@ -37,30 +37,30 @@ var REVERSE_METHOD_NAMES = Object.keys(METHOD_NAMES).reduce(function (acc, key)
|
|
|
37
37
|
export function parseMetadata(field) {
|
|
38
38
|
var parts = field.split('/');
|
|
39
39
|
if (parts.length !== 3)
|
|
40
|
-
return "invalid subsection count. Expected 3, got: "
|
|
40
|
+
return "invalid subsection count. Expected 3, got: ".concat(parts.length);
|
|
41
41
|
var s = parts[0] /* metadata.s */, n = parts[1] /* metadata.n */, i = parts[2] /* metadata.i */;
|
|
42
42
|
return [JSON.stringify({ s: s, n: n, i: i })];
|
|
43
43
|
}
|
|
44
44
|
export function parseExceptionField(field) {
|
|
45
45
|
var parts = field.split('/');
|
|
46
46
|
if (parts.length !== 4)
|
|
47
|
-
return "invalid subsection count. Expected 4, got: "
|
|
47
|
+
return "invalid subsection count. Expected 4, got: ".concat(parts.length);
|
|
48
48
|
var s = parts[0] /* metadata.s */, n = parts[1] /* metadata.n */, i = parts[2] /* metadata.i */, m = parts[3];
|
|
49
49
|
var method = REVERSE_METHOD_NAMES[m];
|
|
50
50
|
if (!method)
|
|
51
|
-
return "unknown method '"
|
|
51
|
+
return "unknown method '".concat(m, "'");
|
|
52
52
|
return [JSON.stringify({ s: s, n: n, i: i }), method];
|
|
53
53
|
}
|
|
54
54
|
export function parseLatencyField(field) {
|
|
55
55
|
var parts = field.split('/');
|
|
56
56
|
if (parts.length !== 5)
|
|
57
|
-
return "invalid subsection count. Expected 5, got: "
|
|
57
|
+
return "invalid subsection count. Expected 5, got: ".concat(parts.length);
|
|
58
58
|
var s = parts[0] /* metadata.s */, n = parts[1] /* metadata.n */, i = parts[2] /* metadata.i */, m = parts[3], b = parts[4];
|
|
59
59
|
var method = REVERSE_METHOD_NAMES[m];
|
|
60
60
|
if (!method)
|
|
61
|
-
return "unknown method '"
|
|
61
|
+
return "unknown method '".concat(m, "'");
|
|
62
62
|
var bucket = parseInt(b);
|
|
63
63
|
if (isNaN(bucket) || bucket >= MAX_LATENCY_BUCKET_COUNT)
|
|
64
|
-
return "invalid bucket. Expected a number between 0 and "
|
|
64
|
+
return "invalid bucket. Expected a number between 0 and ".concat(MAX_LATENCY_BUCKET_COUNT - 1, ", got: ").concat(b);
|
|
65
65
|
return [JSON.stringify({ s: s, n: n, i: i }), method, bucket];
|
|
66
66
|
}
|
|
@@ -1,22 +1,31 @@
|
|
|
1
1
|
import { FLAG_SPEC_VERSION } from '../../../utils/constants';
|
|
2
2
|
import { base } from '../../../utils/settingsValidation';
|
|
3
|
-
import {
|
|
3
|
+
import { LOG_PREFIX_SYNC } from '../../../logger/constants';
|
|
4
4
|
import { checkIfServerSide } from '../../../utils/key';
|
|
5
5
|
var PROXY_CHECK_INTERVAL_MILLIS_CS = 60 * 60 * 1000; // 1 hour in Client Side
|
|
6
6
|
var PROXY_CHECK_INTERVAL_MILLIS_SS = 24 * PROXY_CHECK_INTERVAL_MILLIS_CS; // 24 hours in Server Side
|
|
7
7
|
function sdkEndpointOverridden(settings) {
|
|
8
8
|
return settings.urls.sdk !== base.urls.sdk;
|
|
9
9
|
}
|
|
10
|
+
function isSplitChangesLegacyResponse(data) {
|
|
11
|
+
return data.splits != null;
|
|
12
|
+
}
|
|
13
|
+
function partitionByStatus(items, till, since) {
|
|
14
|
+
var updated = [], removed = [];
|
|
15
|
+
items.forEach(function (item) { return item.status === 'ARCHIVED' ? removed.push(item.name) : updated.push(item); });
|
|
16
|
+
return { updated: updated, removed: removed, till: till, since: since };
|
|
17
|
+
}
|
|
10
18
|
/**
|
|
11
19
|
* Factory of SplitChanges fetcher.
|
|
12
20
|
* SplitChanges fetcher is a wrapper around `splitChanges` API service that parses the response and handle errors.
|
|
13
21
|
*/
|
|
14
22
|
// @TODO breaking: drop support for Split Proxy below v5.10.0 and simplify the implementation
|
|
15
|
-
export function splitChangesFetcherFactory(
|
|
23
|
+
export function splitChangesFetcherFactory(params) {
|
|
24
|
+
var fetchSplitChanges = params.splitApi.fetchSplitChanges, settings = params.settings, storage = params.storage;
|
|
16
25
|
var log = settings.log;
|
|
17
26
|
var PROXY_CHECK_INTERVAL_MILLIS = checkIfServerSide(settings) ? PROXY_CHECK_INTERVAL_MILLIS_SS : PROXY_CHECK_INTERVAL_MILLIS_CS;
|
|
18
27
|
var lastProxyCheckTimestamp;
|
|
19
|
-
|
|
28
|
+
function splitChangesFetcher(since, noCache, till, rbSince,
|
|
20
29
|
// Optional decorator for `fetchSplitChanges` promise, such as timeout or time tracker
|
|
21
30
|
decorator) {
|
|
22
31
|
// Recheck proxy
|
|
@@ -27,7 +36,7 @@ export function splitChangesFetcherFactory(fetchSplitChanges, settings, storage)
|
|
|
27
36
|
.catch(function (err) {
|
|
28
37
|
// Handle proxy error with spec 1.3
|
|
29
38
|
if ((!err.statusCode || err.statusCode === 400) && sdkEndpointOverridden(settings) && settings.sync.flagSpecVersion === FLAG_SPEC_VERSION) {
|
|
30
|
-
log.error(
|
|
39
|
+
log.error(LOG_PREFIX_SYNC + 'Proxy error detected. Retrying with spec 1.2. If you are using Split Proxy, please upgrade to latest version');
|
|
31
40
|
lastProxyCheckTimestamp = Date.now();
|
|
32
41
|
settings.sync.flagSpecVersion = '1.2'; // fallback to 1.2 spec
|
|
33
42
|
return fetchSplitChanges(since, noCache, till); // retry request without rbSince
|
|
@@ -40,18 +49,12 @@ export function splitChangesFetcherFactory(fetchSplitChanges, settings, storage)
|
|
|
40
49
|
.then(function (resp) { return resp.json(); })
|
|
41
50
|
.then(function (data) {
|
|
42
51
|
// Using flag spec version 1.2 or below
|
|
43
|
-
if (data
|
|
44
|
-
return {
|
|
45
|
-
ff: {
|
|
46
|
-
d: data.splits,
|
|
47
|
-
s: data.since,
|
|
48
|
-
t: data.till
|
|
49
|
-
}
|
|
50
|
-
};
|
|
52
|
+
if (isSplitChangesLegacyResponse(data)) {
|
|
53
|
+
return { d: partitionByStatus(data.splits || [], data.till, data.since) };
|
|
51
54
|
}
|
|
52
55
|
// Proxy recovery
|
|
53
56
|
if (lastProxyCheckTimestamp) {
|
|
54
|
-
log.info(
|
|
57
|
+
log.info(LOG_PREFIX_SYNC + 'Proxy error recovered');
|
|
55
58
|
lastProxyCheckTimestamp = undefined;
|
|
56
59
|
return splitChangesFetcher(-1, undefined, undefined, -1)
|
|
57
60
|
.then(function (splitChangesResponse) {
|
|
@@ -59,7 +62,13 @@ export function splitChangesFetcherFactory(fetchSplitChanges, settings, storage)
|
|
|
59
62
|
.then(function () { return splitChangesResponse; });
|
|
60
63
|
});
|
|
61
64
|
}
|
|
62
|
-
|
|
65
|
+
var ff = data.ff, rbs = data.rbs;
|
|
66
|
+
return {
|
|
67
|
+
d: (ff === null || ff === void 0 ? void 0 : ff.d) ? partitionByStatus(ff.d, ff.t, ff.s) : undefined,
|
|
68
|
+
rbs: (rbs === null || rbs === void 0 ? void 0 : rbs.d) ? partitionByStatus(rbs.d, rbs.t, rbs.s) : undefined,
|
|
69
|
+
};
|
|
63
70
|
});
|
|
64
|
-
}
|
|
71
|
+
}
|
|
72
|
+
splitChangesFetcher.type = 'feature flags';
|
|
73
|
+
return splitChangesFetcher;
|
|
65
74
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { forOwn } from '../../utils/lang';
|
|
2
2
|
import { mySegmentsSyncTaskFactory } from './syncTasks/mySegmentsSyncTask';
|
|
3
|
-
import {
|
|
3
|
+
import { definitionsSyncTaskFactory } from './syncTasks/definitionsSyncTask';
|
|
4
4
|
import { getMatching } from '../../utils/key';
|
|
5
5
|
import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED } from '../../readiness/constants';
|
|
6
6
|
import { POLLING_SMART_PAUSING, POLLING_START, POLLING_STOP } from '../../logger/constants';
|
|
@@ -9,10 +9,10 @@ import { usesSegmentsSync } from '../../storages/AbstractSplitsCacheSync';
|
|
|
9
9
|
* Expose start / stop mechanism for polling data from services.
|
|
10
10
|
* For client-side API with multiple clients.
|
|
11
11
|
*/
|
|
12
|
-
export function pollingManagerCSFactory(params) {
|
|
12
|
+
export function pollingManagerCSFactory(params, definitionChangesFetcher) {
|
|
13
13
|
var splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
|
|
14
14
|
var log = settings.log;
|
|
15
|
-
var
|
|
15
|
+
var definitionsSyncTask = definitionsSyncTaskFactory(definitionChangesFetcher, storage, readiness, settings, true);
|
|
16
16
|
// Map of matching keys to their corresponding MySegmentsSyncTask.
|
|
17
17
|
var mySegmentsSyncTasks = {};
|
|
18
18
|
var matchingKey = getMatching(settings.core.key);
|
|
@@ -30,7 +30,7 @@ export function pollingManagerCSFactory(params) {
|
|
|
30
30
|
}
|
|
31
31
|
// smart pausing
|
|
32
32
|
readiness.splits.on(SDK_SPLITS_ARRIVED, function () {
|
|
33
|
-
if (!
|
|
33
|
+
if (!definitionsSyncTask.isRunning())
|
|
34
34
|
return; // noop if not doing polling
|
|
35
35
|
var usingSegments = usesSegmentsSync(storage);
|
|
36
36
|
if (usingSegments !== mySegmentsSyncTask.isRunning()) {
|
|
@@ -58,27 +58,27 @@ export function pollingManagerCSFactory(params) {
|
|
|
58
58
|
return mySegmentsSyncTask;
|
|
59
59
|
}
|
|
60
60
|
return {
|
|
61
|
-
|
|
61
|
+
definitionsSyncTask: definitionsSyncTask,
|
|
62
62
|
segmentsSyncTask: mySegmentsSyncTask,
|
|
63
63
|
// Start periodic fetching (polling)
|
|
64
64
|
start: function () {
|
|
65
65
|
log.info(POLLING_START);
|
|
66
|
-
|
|
66
|
+
definitionsSyncTask.start();
|
|
67
67
|
if (usesSegmentsSync(storage))
|
|
68
68
|
startMySegmentsSyncTasks();
|
|
69
69
|
},
|
|
70
70
|
// Stop periodic fetching (polling)
|
|
71
71
|
stop: function () {
|
|
72
72
|
log.info(POLLING_STOP);
|
|
73
|
-
if (
|
|
74
|
-
|
|
73
|
+
if (definitionsSyncTask.isRunning())
|
|
74
|
+
definitionsSyncTask.stop();
|
|
75
75
|
stopMySegmentsSyncTasks();
|
|
76
76
|
},
|
|
77
77
|
// Used by SyncManager to know if running in polling mode.
|
|
78
|
-
isRunning:
|
|
79
|
-
// fetch
|
|
78
|
+
isRunning: definitionsSyncTask.isRunning,
|
|
79
|
+
// fetch definitions and segments
|
|
80
80
|
syncAll: function () {
|
|
81
|
-
var promises = [
|
|
81
|
+
var promises = [definitionsSyncTask.execute()];
|
|
82
82
|
forOwn(mySegmentsSyncTasks, function (mySegmentsSyncTask) {
|
|
83
83
|
promises.push(mySegmentsSyncTask.execute());
|
|
84
84
|
});
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { definitionsSyncTaskFactory } from './syncTasks/definitionsSyncTask';
|
|
2
2
|
import { segmentsSyncTaskFactory } from './syncTasks/segmentsSyncTask';
|
|
3
3
|
import { POLLING_START, POLLING_STOP, LOG_PREFIX_SYNC_POLLING } from '../../logger/constants';
|
|
4
4
|
/**
|
|
5
5
|
* Expose start / stop mechanism for pulling data from services.
|
|
6
6
|
*/
|
|
7
|
-
export function pollingManagerSSFactory(params) {
|
|
7
|
+
export function pollingManagerSSFactory(params, definitionChangesFetcher) {
|
|
8
8
|
var splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
|
|
9
9
|
var log = settings.log;
|
|
10
|
-
var
|
|
10
|
+
var definitionsSyncTask = definitionsSyncTaskFactory(definitionChangesFetcher, storage, readiness, settings);
|
|
11
11
|
var segmentsSyncTask = segmentsSyncTaskFactory(splitApi.fetchSegmentChanges, storage, readiness, settings);
|
|
12
12
|
return {
|
|
13
|
-
|
|
13
|
+
definitionsSyncTask: definitionsSyncTask,
|
|
14
14
|
segmentsSyncTask: segmentsSyncTask,
|
|
15
15
|
// Start periodic fetching (polling)
|
|
16
16
|
start: function () {
|
|
17
17
|
log.info(POLLING_START);
|
|
18
|
-
log.debug(LOG_PREFIX_SYNC_POLLING + ("
|
|
19
|
-
log.debug(LOG_PREFIX_SYNC_POLLING +
|
|
20
|
-
var startingUp =
|
|
18
|
+
log.debug(LOG_PREFIX_SYNC_POLLING + "".concat(definitionChangesFetcher.type, " will be refreshed each ").concat(settings.scheduler.featuresRefreshRate, " millis"));
|
|
19
|
+
log.debug(LOG_PREFIX_SYNC_POLLING + "segments will be refreshed each ".concat(settings.scheduler.segmentsRefreshRate, " millis"));
|
|
20
|
+
var startingUp = definitionsSyncTask.start();
|
|
21
21
|
if (startingUp) {
|
|
22
22
|
startingUp.then(function () {
|
|
23
|
-
if (
|
|
23
|
+
if (definitionsSyncTask.isRunning())
|
|
24
24
|
segmentsSyncTask.start();
|
|
25
25
|
});
|
|
26
26
|
}
|
|
@@ -28,16 +28,16 @@ export function pollingManagerSSFactory(params) {
|
|
|
28
28
|
// Stop periodic fetching (polling)
|
|
29
29
|
stop: function () {
|
|
30
30
|
log.info(POLLING_STOP);
|
|
31
|
-
if (
|
|
32
|
-
|
|
31
|
+
if (definitionsSyncTask.isRunning())
|
|
32
|
+
definitionsSyncTask.stop();
|
|
33
33
|
if (segmentsSyncTask.isRunning())
|
|
34
34
|
segmentsSyncTask.stop();
|
|
35
35
|
},
|
|
36
36
|
// Used by SyncManager to know if running in polling mode.
|
|
37
|
-
isRunning:
|
|
37
|
+
isRunning: definitionsSyncTask.isRunning,
|
|
38
38
|
syncAll: function () {
|
|
39
|
-
// fetch
|
|
40
|
-
return
|
|
39
|
+
// fetch definitions and segments. There is no need to catch this promise (`DefinitionChangesUpdater` is always resolved with a boolean value)
|
|
40
|
+
return definitionsSyncTask.execute().then(function () {
|
|
41
41
|
return segmentsSyncTask.execute();
|
|
42
42
|
});
|
|
43
43
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { syncTaskFactory } from '../../syncTask';
|
|
2
|
+
import { definitionChangesUpdaterFactory } from '../updaters/definitionChangesUpdater';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a sync task that periodically executes a `definitionChangesUpdater` task
|
|
5
|
+
*/
|
|
6
|
+
export function definitionsSyncTaskFactory(definitionChangesFetcher, storage, readiness, settings, isClientSide) {
|
|
7
|
+
return syncTaskFactory(settings.log, definitionChangesUpdaterFactory(settings.log, definitionChangesFetcher, storage, settings.sync.__splitFiltersValidation, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, isClientSide), settings.scheduler.featuresRefreshRate, 'definitionChangesUpdater');
|
|
8
|
+
}
|