@splitsoftware/splitio-commons 1.2.1-rc.0 → 1.2.1-rc.4
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/cjs/evaluator/Engine.js +6 -6
- package/cjs/evaluator/combiners/and.js +1 -1
- package/cjs/evaluator/combiners/ifelseif.js +2 -2
- package/cjs/evaluator/condition/engineUtils.js +2 -2
- package/cjs/evaluator/condition/index.js +4 -4
- package/cjs/evaluator/index.js +5 -5
- package/cjs/evaluator/matchers/cont_all.js +1 -1
- package/cjs/evaluator/matchers/cont_any.js +1 -1
- package/cjs/evaluator/matchers/cont_str.js +1 -1
- package/cjs/evaluator/matchers/dependency.js +1 -1
- package/cjs/evaluator/matchers/eq_set.js +1 -1
- package/cjs/evaluator/matchers/ew.js +3 -3
- package/cjs/evaluator/matchers/part_of.js +1 -1
- package/cjs/evaluator/matchers/segment.js +1 -1
- package/cjs/evaluator/matchers/sw.js +1 -1
- package/cjs/evaluator/matchers/whitelist.js +1 -1
- package/cjs/evaluator/matchersTransform/index.js +12 -12
- package/cjs/evaluator/parser/index.js +6 -6
- package/cjs/evaluator/treatments/index.js +1 -1
- package/cjs/evaluator/value/index.js +1 -1
- package/cjs/evaluator/value/sanitize.js +4 -4
- package/cjs/integrations/browser.js +3 -3
- package/cjs/integrations/ga/GaToSplit.js +14 -14
- package/cjs/integrations/ga/GoogleAnalyticsToSplit.js +5 -3
- package/cjs/integrations/ga/SplitToGa.js +1 -1
- package/cjs/integrations/ga/SplitToGoogleAnalytics.js +4 -2
- package/cjs/listeners/browser.js +1 -1
- package/cjs/listeners/node.js +1 -1
- package/cjs/logger/constants.js +4 -2
- package/cjs/logger/index.js +2 -2
- package/cjs/logger/messages/debug.js +1 -1
- package/cjs/logger/messages/error.js +2 -2
- package/cjs/logger/messages/info.js +3 -3
- package/cjs/logger/messages/warn.js +1 -1
- package/cjs/logger/sdkLogger.js +1 -1
- package/cjs/readiness/readinessManager.js +2 -2
- package/cjs/readiness/sdkReadinessManager.js +4 -4
- package/cjs/sdkClient/client.js +9 -9
- package/cjs/sdkClient/clientAttributesDecoration.js +4 -4
- package/cjs/sdkClient/clientCS.js +2 -2
- package/cjs/sdkClient/clientInputValidation.js +14 -14
- package/cjs/sdkClient/sdkClient.js +3 -3
- package/cjs/sdkClient/sdkClientMethod.js +1 -1
- package/cjs/sdkClient/sdkClientMethodCS.js +6 -6
- package/cjs/sdkClient/sdkClientMethodCSWithTT.js +8 -8
- package/cjs/sdkFactory/index.js +9 -8
- package/cjs/sdkManager/index.js +11 -11
- package/cjs/services/splitApi.js +3 -2
- package/cjs/services/splitHttpClient.js +2 -2
- package/cjs/storages/KeyBuilder.js +2 -2
- package/cjs/storages/KeyBuilderCS.js +2 -2
- package/cjs/storages/KeyBuilderSS.js +1 -1
- package/cjs/storages/findLatencyIndex.js +1 -1
- package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +1 -1
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +12 -12
- package/cjs/storages/inLocalStorage/index.js +4 -4
- package/cjs/storages/inMemory/AttributesCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/ImpressionsCacheInMemory.js +15 -1
- package/cjs/storages/inMemory/InMemoryStorage.js +1 -1
- package/cjs/storages/inMemory/InMemoryStorageCS.js +1 -1
- package/cjs/storages/inMemory/LatenciesCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/SegmentsCacheInMemory.js +2 -2
- package/cjs/storages/inMemory/SplitsCacheInMemory.js +5 -5
- package/cjs/storages/inRedis/LatenciesCacheInRedis.js +1 -1
- package/cjs/storages/inRedis/RedisAdapter.js +16 -10
- package/cjs/storages/inRedis/SegmentsCacheInRedis.js +1 -1
- package/cjs/storages/inRedis/SplitsCacheInRedis.js +3 -3
- package/cjs/storages/inRedis/index.js +1 -1
- package/cjs/storages/pluggable/SegmentsCachePluggable.js +1 -1
- package/cjs/storages/pluggable/SplitsCachePluggable.js +3 -3
- package/cjs/storages/pluggable/inMemoryWrapper.js +4 -4
- package/cjs/storages/pluggable/index.js +6 -6
- package/cjs/sync/offline/LocalhostFromFile.js +1 -1
- package/cjs/sync/offline/LocalhostFromObject.js +1 -1
- package/cjs/sync/offline/splitsParser/parseCondition.js +1 -1
- package/cjs/sync/offline/splitsParser/splitsParserFromFile.js +13 -13
- package/cjs/sync/offline/splitsParser/splitsParserFromSettings.js +3 -3
- package/cjs/sync/offline/syncManagerOffline.js +1 -1
- package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +2 -2
- package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +2 -2
- package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
- package/cjs/sync/polling/pollingManagerCS.js +8 -7
- package/cjs/sync/polling/pollingManagerSS.js +5 -4
- package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +1 -1
- package/cjs/sync/polling/syncTasks/segmentsSyncTask.js +1 -1
- package/cjs/sync/polling/syncTasks/splitsSyncTask.js +1 -1
- package/cjs/sync/polling/updaters/mySegmentsUpdater.js +3 -3
- package/cjs/sync/polling/updaters/segmentChangesUpdater.js +2 -2
- package/cjs/sync/polling/updaters/splitChangesUpdater.js +2 -2
- package/cjs/sync/streaming/AuthClient/index.js +3 -3
- package/cjs/sync/streaming/SSEHandler/NotificationParser.js +1 -1
- package/cjs/sync/streaming/SSEHandler/index.js +3 -3
- package/cjs/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +1 -1
- package/cjs/sync/streaming/mySegmentsV2utils.js +1 -1
- package/cjs/sync/streaming/pushManager.js +27 -19
- package/cjs/sync/submitters/eventsSyncTask.js +4 -3
- package/cjs/sync/submitters/impressionCountsSyncTask.js +1 -1
- package/cjs/sync/submitters/impressionsSyncTask.js +11 -3
- package/cjs/sync/submitters/metricsSyncTask.js +3 -3
- package/cjs/sync/submitters/submitterManager.js +6 -5
- package/cjs/sync/submitters/submitterSyncTask.js +1 -1
- package/cjs/sync/syncManagerOnline.js +8 -13
- package/cjs/trackers/eventTracker.js +3 -3
- package/cjs/trackers/impressionObserver/impressionObserverCS.js +1 -1
- package/cjs/trackers/impressionObserver/impressionObserverSS.js +1 -1
- package/cjs/trackers/impressionsTracker.js +3 -3
- package/cjs/utils/MinEvents.js +2 -1
- package/cjs/utils/inputValidation/apiKey.js +1 -1
- package/cjs/utils/inputValidation/attribute.js +4 -4
- package/cjs/utils/inputValidation/attributes.js +2 -2
- package/cjs/utils/inputValidation/event.js +1 -1
- package/cjs/utils/inputValidation/eventProperties.js +7 -5
- package/cjs/utils/inputValidation/eventValue.js +1 -1
- package/cjs/utils/inputValidation/key.js +6 -5
- package/cjs/utils/inputValidation/preloadedData.js +8 -8
- package/cjs/utils/inputValidation/split.js +1 -1
- package/cjs/utils/inputValidation/splits.js +2 -2
- package/cjs/utils/inputValidation/trafficType.js +1 -1
- package/cjs/utils/inputValidation/trafficTypeExistance.js +1 -1
- package/cjs/utils/jwt/index.js +1 -1
- package/cjs/utils/key/index.js +3 -3
- package/cjs/utils/lang/index.js +2 -14
- package/cjs/utils/murmur3/common.js +1 -1
- package/cjs/utils/murmur3/murmur3.js +10 -10
- package/cjs/utils/murmur3/murmur3_128.js +1 -1
- package/cjs/utils/murmur3/murmur3_128_x86.js +37 -37
- package/cjs/utils/murmur3/murmur3_64.js +1 -1
- package/cjs/utils/settingsValidation/index.js +7 -10
- package/cjs/utils/settingsValidation/integrations/configurable.js +1 -1
- package/cjs/utils/settingsValidation/integrations/pluggable.js +1 -1
- package/cjs/utils/settingsValidation/localhost/builtin.js +2 -2
- package/cjs/utils/settingsValidation/logger/builtinLogger.js +3 -3
- package/cjs/utils/settingsValidation/logger/commons.js +1 -1
- package/cjs/utils/settingsValidation/logger/pluggableLogger.js +1 -1
- package/cjs/utils/settingsValidation/runtime.js +11 -0
- package/cjs/utils/settingsValidation/splitFilters.js +1 -1
- package/cjs/utils/settingsValidation/storage/storageCS.js +1 -1
- package/cjs/utils/timeTracker/index.js +3 -3
- package/esm/evaluator/matchers/ew.js +4 -4
- package/esm/integrations/ga/GoogleAnalyticsToSplit.js +4 -2
- package/esm/integrations/ga/SplitToGoogleAnalytics.js +4 -2
- package/esm/logger/constants.js +1 -1
- package/esm/logger/messages/error.js +1 -1
- package/esm/logger/messages/info.js +2 -2
- package/esm/sdkFactory/index.js +1 -0
- package/esm/services/splitApi.js +2 -1
- package/esm/storages/inLocalStorage/index.js +1 -1
- package/esm/storages/inMemory/ImpressionsCacheInMemory.js +15 -1
- package/esm/storages/inMemory/InMemoryStorage.js +1 -1
- package/esm/storages/inMemory/InMemoryStorageCS.js +1 -1
- package/esm/storages/inRedis/RedisAdapter.js +7 -1
- package/esm/storages/pluggable/index.js +2 -2
- package/esm/sync/offline/splitsParser/splitsParserFromFile.js +1 -1
- package/esm/sync/polling/fetchers/mySegmentsFetcher.js +2 -2
- package/esm/sync/polling/fetchers/segmentChangesFetcher.js +2 -2
- package/esm/sync/polling/pollingManagerCS.js +2 -1
- package/esm/sync/polling/pollingManagerSS.js +2 -1
- package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +1 -1
- package/esm/sync/polling/updaters/mySegmentsUpdater.js +2 -2
- package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +1 -1
- package/esm/sync/streaming/pushManager.js +13 -5
- package/esm/sync/submitters/eventsSyncTask.js +5 -4
- package/esm/sync/submitters/impressionsSyncTask.js +9 -1
- package/esm/sync/submitters/submitterManager.js +2 -1
- package/esm/sync/syncManagerOnline.js +8 -13
- package/esm/utils/inputValidation/eventProperties.js +4 -2
- package/esm/utils/inputValidation/key.js +2 -1
- package/esm/utils/lang/index.js +2 -13
- package/esm/utils/settingsValidation/index.js +3 -6
- package/esm/utils/settingsValidation/runtime.js +7 -0
- package/package.json +6 -6
- package/src/evaluator/matchers/ew.ts +4 -4
- package/src/integrations/ga/GoogleAnalyticsToSplit.ts +7 -4
- package/src/integrations/ga/SplitToGoogleAnalytics.ts +7 -4
- package/src/integrations/types.ts +5 -0
- package/src/logger/constants.ts +1 -1
- package/src/logger/messages/error.ts +1 -1
- package/src/logger/messages/info.ts +2 -2
- package/src/logger/types.ts +4 -0
- package/src/sdkFactory/index.ts +1 -0
- package/src/storages/inLocalStorage/index.ts +1 -1
- package/src/storages/inMemory/ImpressionsCacheInMemory.ts +22 -1
- package/src/storages/inMemory/InMemoryStorage.ts +1 -1
- package/src/storages/inMemory/InMemoryStorageCS.ts +1 -1
- package/src/storages/pluggable/index.ts +2 -2
- package/src/storages/types.ts +6 -2
- package/src/sync/offline/splitsParser/splitsParserFromFile.ts +1 -1
- package/src/sync/polling/fetchers/mySegmentsFetcher.ts +2 -1
- package/src/sync/polling/fetchers/types.ts +1 -0
- package/src/sync/polling/pollingManagerCS.ts +3 -6
- package/src/sync/polling/pollingManagerSS.ts +3 -8
- package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +2 -1
- package/src/sync/polling/types.ts +0 -12
- package/src/sync/polling/updaters/mySegmentsUpdater.ts +2 -1
- package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
- package/src/sync/streaming/pushManager.ts +19 -16
- package/src/sync/streaming/types.ts +5 -25
- package/src/sync/submitters/eventsSyncTask.ts +6 -4
- package/src/sync/submitters/impressionsSyncTask.ts +12 -1
- package/src/sync/submitters/submitterManager.ts +4 -8
- package/src/sync/syncManagerOnline.ts +14 -24
- package/src/types.ts +15 -0
- package/src/utils/inputValidation/eventProperties.ts +4 -2
- package/src/utils/lang/index.ts +0 -14
- package/src/utils/settingsValidation/index.ts +3 -6
- package/src/utils/settingsValidation/runtime.ts +9 -0
- package/src/utils/settingsValidation/types.ts +6 -6
- package/types/integrations/ga/GoogleAnalyticsToSplit.d.ts +2 -2
- package/types/integrations/ga/SplitToGoogleAnalytics.d.ts +2 -3
- package/types/integrations/types.d.ts +4 -0
- package/types/logger/constants.d.ts +1 -1
- package/types/logger/types.d.ts +4 -0
- package/types/sdkClient/clientAttributesDecoration.d.ts +1 -1
- package/types/storages/inMemory/ImpressionsCacheInMemory.d.ts +9 -0
- package/types/storages/inMemory/index.d.ts +10 -0
- package/types/storages/parseSegments.d.ts +6 -0
- package/types/storages/types.d.ts +3 -1
- package/types/sync/polling/fetchers/mySegmentsFetcher.d.ts +1 -1
- package/types/sync/polling/fetchers/types.d.ts +1 -1
- package/types/sync/polling/pollingManagerCS.d.ts +2 -5
- package/types/sync/polling/pollingManagerSS.d.ts +2 -5
- package/types/sync/polling/types.d.ts +0 -11
- package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +1 -1
- package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -1
- package/types/sync/streaming/pushManager.d.ts +3 -7
- package/types/sync/streaming/pushManagerCS.d.ts +1 -12
- package/types/sync/streaming/pushManagerSS.d.ts +1 -11
- package/types/sync/streaming/types.d.ts +3 -23
- package/types/sync/submitters/submitterManager.d.ts +2 -4
- package/types/sync/syncManagerOnline.d.ts +3 -3
- package/types/types.d.ts +15 -0
- package/types/utils/lang/index.d.ts +0 -4
- package/types/utils/settingsValidation/runtime/browser.d.ts +2 -0
- package/types/utils/settingsValidation/runtime/node.d.ts +2 -0
- package/types/utils/settingsValidation/runtime.d.ts +2 -0
- package/types/utils/settingsValidation/types.d.ts +6 -6
|
@@ -4,16 +4,16 @@ exports.splitsParserFromFileFactory = void 0;
|
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
/* eslint-disable no-undef */
|
|
6
6
|
// @TODO consider moving it to Node-SDK and remove js-yaml dependency from Js-commons
|
|
7
|
-
var fs_1 = tslib_1.__importDefault(require("fs"));
|
|
8
|
-
var path_1 = tslib_1.__importDefault(require("path"));
|
|
7
|
+
var fs_1 = (0, tslib_1.__importDefault)(require("fs"));
|
|
8
|
+
var path_1 = (0, tslib_1.__importDefault)(require("path"));
|
|
9
9
|
// @ts-ignore
|
|
10
|
-
var js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
10
|
+
var js_yaml_1 = (0, tslib_1.__importDefault)(require("js-yaml"));
|
|
11
11
|
var lang_1 = require("../../../utils/lang");
|
|
12
12
|
var parseCondition_1 = require("./parseCondition");
|
|
13
13
|
var logPrefix = 'sync:offline:splits-fetcher: ';
|
|
14
14
|
var DEFAULT_FILENAME = '.split';
|
|
15
15
|
function configFilesPath(configFilePath) {
|
|
16
|
-
if (configFilePath === DEFAULT_FILENAME || !lang_1.isString(configFilePath)) {
|
|
16
|
+
if (configFilePath === DEFAULT_FILENAME || !(0, lang_1.isString)(configFilePath)) {
|
|
17
17
|
var root = process.env.HOME;
|
|
18
18
|
if (process.env.SPLIT_CONFIG_ROOT)
|
|
19
19
|
root = process.env.SPLIT_CONFIG_ROOT;
|
|
@@ -22,7 +22,7 @@ function configFilesPath(configFilePath) {
|
|
|
22
22
|
configFilePath = path_1.default.join(root, DEFAULT_FILENAME);
|
|
23
23
|
}
|
|
24
24
|
// Validate the extensions
|
|
25
|
-
if (!(lang_1.endsWith(configFilePath, '.yaml', true) || lang_1.endsWith(configFilePath, '.yml', true) || lang_1.endsWith(configFilePath, '.split', true)))
|
|
25
|
+
if (!((0, lang_1.endsWith)(configFilePath, '.yaml', true) || (0, lang_1.endsWith)(configFilePath, '.yml', true) || (0, lang_1.endsWith)(configFilePath, '.split', true)))
|
|
26
26
|
throw new Error("Invalid extension specified for Splits mock file. Accepted extensions are \".yml\" and \".yaml\". Your specified file is " + configFilePath);
|
|
27
27
|
if (!fs_1.default.existsSync(configFilePath))
|
|
28
28
|
throw new Error("Split configuration not found in " + configFilePath + " - Please review your Split file location.");
|
|
@@ -32,13 +32,13 @@ function configFilesPath(configFilePath) {
|
|
|
32
32
|
// for behaviour that's ensured by the BE.
|
|
33
33
|
function arrangeConditions(mocksData) {
|
|
34
34
|
// Iterate through each Split data
|
|
35
|
-
lang_1.forOwn(mocksData, function (data) {
|
|
35
|
+
(0, lang_1.forOwn)(mocksData, function (data) {
|
|
36
36
|
var conditions = data.conditions;
|
|
37
37
|
// On the manager, as the split jsons come with all treatments on the partitions prop,
|
|
38
38
|
// we'll add all the treatments to the first condition.
|
|
39
|
-
var firstRolloutCondition = lang_1.find(conditions, function (cond) { return cond.conditionType === 'ROLLOUT'; });
|
|
39
|
+
var firstRolloutCondition = (0, lang_1.find)(conditions, function (cond) { return cond.conditionType === 'ROLLOUT'; });
|
|
40
40
|
// Malformed mocks may have
|
|
41
|
-
var treatments = lang_1.uniq(data.treatments);
|
|
41
|
+
var treatments = (0, lang_1.uniq)(data.treatments);
|
|
42
42
|
// If they're only specifying a whitelist we add the treatments there.
|
|
43
43
|
var allTreatmentsCondition = firstRolloutCondition ? firstRolloutCondition : conditions[0];
|
|
44
44
|
var fullyAllocatedTreatment = allTreatmentsCondition.partitions[0].treatment;
|
|
@@ -66,7 +66,7 @@ function splitsParserFromFileFactory() {
|
|
|
66
66
|
data = fs_1.default.readFileSync(filePath, 'utf-8');
|
|
67
67
|
}
|
|
68
68
|
catch (e) {
|
|
69
|
-
log.error(e.message);
|
|
69
|
+
log.error(e && e.message);
|
|
70
70
|
return {};
|
|
71
71
|
}
|
|
72
72
|
if (data === previousMock)
|
|
@@ -84,7 +84,7 @@ function splitsParserFromFileFactory() {
|
|
|
84
84
|
}
|
|
85
85
|
else {
|
|
86
86
|
var splitName = tuple[SPLIT_POSITION];
|
|
87
|
-
var condition = parseCondition_1.parseCondition({ treatment: tuple[TREATMENT_POSITION] });
|
|
87
|
+
var condition = (0, parseCondition_1.parseCondition)({ treatment: tuple[TREATMENT_POSITION] });
|
|
88
88
|
accum[splitName] = { conditions: [condition], configurations: {}, trafficTypeName: 'localhost' };
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -110,7 +110,7 @@ function splitsParserFromFileFactory() {
|
|
|
110
110
|
// Each entry will be mapped to a condition, but we'll also keep the configurations map.
|
|
111
111
|
var mocksData = yamldoc.reduce(function (accum, splitEntry) {
|
|
112
112
|
var splitName = Object.keys(splitEntry)[0];
|
|
113
|
-
if (!splitName || !lang_1.isString(splitEntry[splitName].treatment))
|
|
113
|
+
if (!splitName || !(0, lang_1.isString)(splitEntry[splitName].treatment))
|
|
114
114
|
log.error(logPrefix + 'Ignoring entry on YAML since the format is incorrect.');
|
|
115
115
|
var mockData = splitEntry[splitName];
|
|
116
116
|
// "Template" for each split accumulated data
|
|
@@ -123,7 +123,7 @@ function splitsParserFromFileFactory() {
|
|
|
123
123
|
if (mockData.config)
|
|
124
124
|
accum[splitName].configurations[mockData.treatment] = mockData.config;
|
|
125
125
|
// Parse the condition from the entry.
|
|
126
|
-
var condition = parseCondition_1.parseCondition(mockData);
|
|
126
|
+
var condition = (0, parseCondition_1.parseCondition)(mockData);
|
|
127
127
|
accum[splitName].conditions[condition.conditionType === 'ROLLOUT' ? 'push' : 'unshift'](condition);
|
|
128
128
|
// Also keep track of the treatments, will be useful for manager functionality.
|
|
129
129
|
accum[splitName].treatments.push(mockData.treatment);
|
|
@@ -138,7 +138,7 @@ function splitsParserFromFileFactory() {
|
|
|
138
138
|
var filePath = configFilesPath(features);
|
|
139
139
|
var mockData;
|
|
140
140
|
// If we have a filePath, it means the extension is correct, choose the parser.
|
|
141
|
-
if (lang_1.endsWith(filePath, '.split')) {
|
|
141
|
+
if ((0, lang_1.endsWith)(filePath, '.split')) {
|
|
142
142
|
log.warn(logPrefix + '.split mocks will be deprecated soon in favor of YAML files, which provide more targeting power. Take a look in our documentation.');
|
|
143
143
|
mockData = readSplitConfigFile(log, filePath);
|
|
144
144
|
}
|
|
@@ -40,10 +40,10 @@ function splitsParserFromSettingsFactory() {
|
|
|
40
40
|
if (!mockUpdated(features))
|
|
41
41
|
return false;
|
|
42
42
|
var splitObjects = {};
|
|
43
|
-
lang_1.forOwn(features, function (data, splitName) {
|
|
43
|
+
(0, lang_1.forOwn)(features, function (data, splitName) {
|
|
44
44
|
var treatment = data;
|
|
45
45
|
var config = null;
|
|
46
|
-
if (lang_1.isObject(data)) {
|
|
46
|
+
if ((0, lang_1.isObject)(data)) {
|
|
47
47
|
treatment = data.treatment;
|
|
48
48
|
config = data.config || config;
|
|
49
49
|
}
|
|
@@ -52,7 +52,7 @@ function splitsParserFromSettingsFactory() {
|
|
|
52
52
|
configurations[treatment] = config;
|
|
53
53
|
splitObjects[splitName] = {
|
|
54
54
|
trafficTypeName: 'localhost',
|
|
55
|
-
conditions: [parseCondition_1.parseCondition({ treatment: treatment })],
|
|
55
|
+
conditions: [(0, parseCondition_1.parseCondition)({ treatment: treatment })],
|
|
56
56
|
configurations: configurations
|
|
57
57
|
};
|
|
58
58
|
});
|
|
@@ -19,7 +19,7 @@ function syncManagerOfflineFactory(splitsParserFactory) {
|
|
|
19
19
|
*/
|
|
20
20
|
return function (_a) {
|
|
21
21
|
var settings = _a.settings, readiness = _a.readiness, storage = _a.storage;
|
|
22
|
-
return objectAssign_1.objectAssign(fromObjectSyncTask_1.fromObjectSyncTaskFactory(splitsParserFactory(), storage, readiness, settings), {
|
|
22
|
+
return (0, objectAssign_1.objectAssign)((0, fromObjectSyncTask_1.fromObjectSyncTaskFactory)(splitsParserFactory(), storage, readiness, settings), {
|
|
23
23
|
// fake flush, that resolves immediately
|
|
24
24
|
flush: flush,
|
|
25
25
|
// [Only used for client-side]
|
|
@@ -25,7 +25,7 @@ function fromObjectUpdaterFactory(splitsParser, storage, readiness, settings) {
|
|
|
25
25
|
}
|
|
26
26
|
if (!loadError && splitsMock) {
|
|
27
27
|
log.debug(constants_3.SYNC_OFFLINE_DATA, [JSON.stringify(splitsMock)]);
|
|
28
|
-
lang_1.forOwn(splitsMock, function (val, name) {
|
|
28
|
+
(0, lang_1.forOwn)(splitsMock, function (val, name) {
|
|
29
29
|
splits.push([
|
|
30
30
|
name,
|
|
31
31
|
JSON.stringify({
|
|
@@ -68,6 +68,6 @@ exports.fromObjectUpdaterFactory = fromObjectUpdaterFactory;
|
|
|
68
68
|
* PollingManager in Offline mode
|
|
69
69
|
*/
|
|
70
70
|
function fromObjectSyncTaskFactory(splitsParser, storage, readiness, settings) {
|
|
71
|
-
return syncTask_1.syncTaskFactory(settings.log, fromObjectUpdaterFactory(splitsParser, storage, readiness, settings), settings.scheduler.offlineRefreshRate, 'offlineUpdater');
|
|
71
|
+
return (0, syncTask_1.syncTaskFactory)(settings.log, fromObjectUpdaterFactory(splitsParser, storage, readiness, settings), settings.scheduler.offlineRefreshRate, 'offlineUpdater');
|
|
72
72
|
}
|
|
73
73
|
exports.fromObjectSyncTaskFactory = fromObjectSyncTaskFactory;
|
|
@@ -5,8 +5,8 @@ exports.mySegmentsFetcherFactory = void 0;
|
|
|
5
5
|
* Factory of MySegments fetcher.
|
|
6
6
|
* MySegments fetcher is a wrapper around `mySegments` API service that parses the response and handle errors.
|
|
7
7
|
*/
|
|
8
|
-
function mySegmentsFetcherFactory(fetchMySegments
|
|
9
|
-
return function mySegmentsFetcher(noCache,
|
|
8
|
+
function mySegmentsFetcherFactory(fetchMySegments) {
|
|
9
|
+
return function mySegmentsFetcher(userMatchingKey, noCache,
|
|
10
10
|
// Optional decorator for `fetchMySegments` promise, such as timeout or time tracker
|
|
11
11
|
decorator) {
|
|
12
12
|
var mySegmentsPromise = fetchMySegments(userMatchingKey, noCache);
|
|
@@ -12,7 +12,7 @@ function greedyFetch(fetchSegmentChanges, since, segmentName, noCache) {
|
|
|
12
12
|
}
|
|
13
13
|
else {
|
|
14
14
|
return Promise.all([json, greedyFetch(fetchSegmentChanges, till, segmentName, noCache)]).then(function (flatMe) {
|
|
15
|
-
return tslib_1.
|
|
15
|
+
return (0, tslib_1.__spreadArray)([flatMe[0]], flatMe[1], true);
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
18
|
});
|
|
@@ -11,20 +11,21 @@ var constants_2 = require("../../logger/constants");
|
|
|
11
11
|
* Expose start / stop mechanism for polling data from services.
|
|
12
12
|
* For client-side API with multiple clients.
|
|
13
13
|
*/
|
|
14
|
-
function pollingManagerCSFactory(
|
|
14
|
+
function pollingManagerCSFactory(params) {
|
|
15
|
+
var splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
|
|
15
16
|
var log = settings.log;
|
|
16
|
-
var splitsSyncTask = splitsSyncTask_1.splitsSyncTaskFactory(splitApi.fetchSplitChanges, storage, readiness, settings);
|
|
17
|
+
var splitsSyncTask = (0, splitsSyncTask_1.splitsSyncTaskFactory)(splitApi.fetchSplitChanges, storage, readiness, settings);
|
|
17
18
|
// Map of matching keys to their corresponding MySegmentsSyncTask.
|
|
18
19
|
var mySegmentsSyncTasks = {};
|
|
19
|
-
var matchingKey = key_1.getMatching(settings.core.key);
|
|
20
|
+
var matchingKey = (0, key_1.getMatching)(settings.core.key);
|
|
20
21
|
var mySegmentsSyncTask = add(matchingKey, readiness, storage);
|
|
21
22
|
function startMySegmentsSyncTasks() {
|
|
22
|
-
lang_1.forOwn(mySegmentsSyncTasks, function (mySegmentsSyncTask) {
|
|
23
|
+
(0, lang_1.forOwn)(mySegmentsSyncTasks, function (mySegmentsSyncTask) {
|
|
23
24
|
mySegmentsSyncTask.start();
|
|
24
25
|
});
|
|
25
26
|
}
|
|
26
27
|
function stopMySegmentsSyncTasks() {
|
|
27
|
-
lang_1.forOwn(mySegmentsSyncTasks, function (mySegmentsSyncTask) {
|
|
28
|
+
(0, lang_1.forOwn)(mySegmentsSyncTasks, function (mySegmentsSyncTask) {
|
|
28
29
|
if (mySegmentsSyncTask.isRunning())
|
|
29
30
|
mySegmentsSyncTask.stop();
|
|
30
31
|
});
|
|
@@ -45,7 +46,7 @@ function pollingManagerCSFactory(splitApi, storage, readiness, settings) {
|
|
|
45
46
|
}
|
|
46
47
|
});
|
|
47
48
|
function add(matchingKey, readiness, storage) {
|
|
48
|
-
var mySegmentsSyncTask = mySegmentsSyncTask_1.mySegmentsSyncTaskFactory(splitApi.fetchMySegments, storage, readiness, settings, matchingKey);
|
|
49
|
+
var mySegmentsSyncTask = (0, mySegmentsSyncTask_1.mySegmentsSyncTaskFactory)(splitApi.fetchMySegments, storage, readiness, settings, matchingKey);
|
|
49
50
|
// smart ready
|
|
50
51
|
function smartReady() {
|
|
51
52
|
if (!readiness.isReady() && !storage.splits.usesSegments())
|
|
@@ -80,7 +81,7 @@ function pollingManagerCSFactory(splitApi, storage, readiness, settings) {
|
|
|
80
81
|
// fetch splits and segments
|
|
81
82
|
syncAll: function () {
|
|
82
83
|
var promises = [splitsSyncTask.execute()];
|
|
83
|
-
lang_1.forOwn(mySegmentsSyncTasks, function (mySegmentsSyncTask) {
|
|
84
|
+
(0, lang_1.forOwn)(mySegmentsSyncTasks, function (mySegmentsSyncTask) {
|
|
84
85
|
promises.push(mySegmentsSyncTask.execute());
|
|
85
86
|
});
|
|
86
87
|
return Promise.all(promises);
|
|
@@ -8,10 +8,11 @@ var constants_1 = require("../../logger/constants");
|
|
|
8
8
|
/**
|
|
9
9
|
* Expose start / stop mechanism for pulling data from services.
|
|
10
10
|
*/
|
|
11
|
-
function pollingManagerSSFactory(
|
|
11
|
+
function pollingManagerSSFactory(params) {
|
|
12
|
+
var splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
|
|
12
13
|
var log = settings.log;
|
|
13
|
-
var splitsSyncTask = splitsSyncTask_1.splitsSyncTaskFactory(splitApi.fetchSplitChanges, storage, readiness, settings);
|
|
14
|
-
var segmentsSyncTask = segmentsSyncTask_1.segmentsSyncTaskFactory(splitApi.fetchSegmentChanges, storage, readiness, settings);
|
|
14
|
+
var splitsSyncTask = (0, splitsSyncTask_1.splitsSyncTaskFactory)(splitApi.fetchSplitChanges, storage, readiness, settings);
|
|
15
|
+
var segmentsSyncTask = (0, segmentsSyncTask_1.segmentsSyncTaskFactory)(splitApi.fetchSegmentChanges, storage, readiness, settings);
|
|
15
16
|
return {
|
|
16
17
|
splitsSyncTask: splitsSyncTask,
|
|
17
18
|
segmentsSyncTask: segmentsSyncTask,
|
|
@@ -21,7 +22,7 @@ function pollingManagerSSFactory(splitApi, storage, readiness, settings) {
|
|
|
21
22
|
log.debug(constants_1.LOG_PREFIX_SYNC_POLLING + ("Splits will be refreshed each " + settings.scheduler.featuresRefreshRate + " millis"));
|
|
22
23
|
log.debug(constants_1.LOG_PREFIX_SYNC_POLLING + ("Segments will be refreshed each " + settings.scheduler.segmentsRefreshRate + " millis"));
|
|
23
24
|
var startingUp = splitsSyncTask.start();
|
|
24
|
-
if (thenable_1.thenable(startingUp)) {
|
|
25
|
+
if ((0, thenable_1.thenable)(startingUp)) {
|
|
25
26
|
startingUp.then(function () {
|
|
26
27
|
segmentsSyncTask.start();
|
|
27
28
|
});
|
|
@@ -8,6 +8,6 @@ var mySegmentsUpdater_1 = require("../updaters/mySegmentsUpdater");
|
|
|
8
8
|
* Creates a sync task that periodically executes a `mySegmentsUpdater` task
|
|
9
9
|
*/
|
|
10
10
|
function mySegmentsSyncTaskFactory(fetchMySegments, storage, readiness, settings, matchingKey) {
|
|
11
|
-
return syncTask_1.syncTaskFactory(settings.log, mySegmentsUpdater_1.mySegmentsUpdaterFactory(settings.log, mySegmentsFetcher_1.mySegmentsFetcherFactory(fetchMySegments
|
|
11
|
+
return (0, syncTask_1.syncTaskFactory)(settings.log, (0, mySegmentsUpdater_1.mySegmentsUpdaterFactory)(settings.log, (0, mySegmentsFetcher_1.mySegmentsFetcherFactory)(fetchMySegments), storage.splits, storage.segments, readiness.segments, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, matchingKey), settings.scheduler.segmentsRefreshRate, 'mySegmentsUpdater');
|
|
12
12
|
}
|
|
13
13
|
exports.mySegmentsSyncTaskFactory = mySegmentsSyncTaskFactory;
|
|
@@ -8,6 +8,6 @@ var segmentChangesUpdater_1 = require("../updaters/segmentChangesUpdater");
|
|
|
8
8
|
* Creates a sync task that periodically executes a `segmentChangesUpdater` task
|
|
9
9
|
*/
|
|
10
10
|
function segmentsSyncTaskFactory(fetchSegmentChanges, storage, readiness, settings) {
|
|
11
|
-
return syncTask_1.syncTaskFactory(settings.log, segmentChangesUpdater_1.segmentChangesUpdaterFactory(settings.log, segmentChangesFetcher_1.segmentChangesFetcherFactory(fetchSegmentChanges), storage.segments, readiness), settings.scheduler.segmentsRefreshRate, 'segmentChangesUpdater');
|
|
11
|
+
return (0, syncTask_1.syncTaskFactory)(settings.log, (0, segmentChangesUpdater_1.segmentChangesUpdaterFactory)(settings.log, (0, segmentChangesFetcher_1.segmentChangesFetcherFactory)(fetchSegmentChanges), storage.segments, readiness), settings.scheduler.segmentsRefreshRate, 'segmentChangesUpdater');
|
|
12
12
|
}
|
|
13
13
|
exports.segmentsSyncTaskFactory = segmentsSyncTaskFactory;
|
|
@@ -8,6 +8,6 @@ var splitChangesUpdater_1 = require("../updaters/splitChangesUpdater");
|
|
|
8
8
|
* Creates a sync task that periodically executes a `splitChangesUpdater` task
|
|
9
9
|
*/
|
|
10
10
|
function splitsSyncTaskFactory(fetchSplitChanges, storage, readiness, settings) {
|
|
11
|
-
return syncTask_1.syncTaskFactory(settings.log, splitChangesUpdater_1.splitChangesUpdaterFactory(settings.log, splitChangesFetcher_1.splitChangesFetcherFactory(fetchSplitChanges), storage.splits, storage.segments, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.featuresRefreshRate, 'splitChangesUpdater');
|
|
11
|
+
return (0, syncTask_1.syncTaskFactory)(settings.log, (0, splitChangesUpdater_1.splitChangesUpdaterFactory)(settings.log, (0, splitChangesFetcher_1.splitChangesFetcherFactory)(fetchSplitChanges), storage.splits, storage.segments, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.featuresRefreshRate, 'splitChangesUpdater');
|
|
12
12
|
}
|
|
13
13
|
exports.splitsSyncTaskFactory = splitsSyncTaskFactory;
|
|
@@ -10,13 +10,13 @@ var constants_2 = require("../../../logger/constants");
|
|
|
10
10
|
* - updates `mySegmentsCache`
|
|
11
11
|
* - uses `segmentsEventEmitter` to emit events related to segments data updates
|
|
12
12
|
*/
|
|
13
|
-
function mySegmentsUpdaterFactory(log, mySegmentsFetcher, splitsCache, mySegmentsCache, segmentsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady) {
|
|
13
|
+
function mySegmentsUpdaterFactory(log, mySegmentsFetcher, splitsCache, mySegmentsCache, segmentsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, matchingKey) {
|
|
14
14
|
var readyOnAlreadyExistentState = true;
|
|
15
15
|
var startingUp = true;
|
|
16
16
|
/** timeout and telemetry decorator for `splitChangesFetcher` promise */
|
|
17
17
|
function _promiseDecorator(promise) {
|
|
18
18
|
if (startingUp)
|
|
19
|
-
promise = timeout_1.timeout(requestTimeoutBeforeReady, promise);
|
|
19
|
+
promise = (0, timeout_1.timeout)(requestTimeoutBeforeReady, promise);
|
|
20
20
|
return promise;
|
|
21
21
|
// @TODO telemetry
|
|
22
22
|
// NOTE: We only collect metrics on startup.
|
|
@@ -54,7 +54,7 @@ function mySegmentsUpdaterFactory(log, mySegmentsFetcher, splitsCache, mySegment
|
|
|
54
54
|
// If segmentsData is provided, there is no need to fetch mySegments
|
|
55
55
|
new Promise(function (res) { updateSegments(segmentsData); res(true); }) :
|
|
56
56
|
// If not provided, fetch mySegments
|
|
57
|
-
mySegmentsFetcher(noCache, _promiseDecorator).then(function (segments) {
|
|
57
|
+
mySegmentsFetcher(matchingKey, noCache, _promiseDecorator).then(function (segments) {
|
|
58
58
|
// Only when we have downloaded segments completely, we should not keep retrying anymore
|
|
59
59
|
startingUp = false;
|
|
60
60
|
updateSegments(segments);
|
|
@@ -65,7 +65,7 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
|
|
|
65
65
|
log.debug(constants_2.LOG_PREFIX_SYNC_SEGMENTS + "Processed " + segmentName + " with till = " + x.till + ". Added: " + x.added.length + ". Removed: " + x.removed.length);
|
|
66
66
|
});
|
|
67
67
|
// If at least one storage operation result is a promise, join all in a single promise.
|
|
68
|
-
if (results.some(function (result) { return thenable_1.thenable(result); }))
|
|
68
|
+
if (results.some(function (result) { return (0, thenable_1.thenable)(result); }))
|
|
69
69
|
return Promise.all(results).then(function () { return changeNumber; });
|
|
70
70
|
return changeNumber;
|
|
71
71
|
});
|
|
@@ -76,7 +76,7 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
|
|
|
76
76
|
}
|
|
77
77
|
return Promise.all(updaters).then(function (shouldUpdateFlags) {
|
|
78
78
|
// if at least one segment fetch succeeded, mark segments ready
|
|
79
|
-
if (lang_1.findIndex(shouldUpdateFlags, function (v) { return v !== -1; }) !== -1 || readyOnAlreadyExistentState) {
|
|
79
|
+
if ((0, lang_1.findIndex)(shouldUpdateFlags, function (v) { return v !== -1; }) !== -1 || readyOnAlreadyExistentState) {
|
|
80
80
|
readyOnAlreadyExistentState = false;
|
|
81
81
|
if (readiness)
|
|
82
82
|
readiness.segments.emit(constants_1.SDK_SEGMENTS_ARRIVED);
|
|
@@ -51,7 +51,7 @@ function computeSplitsMutation(entries) {
|
|
|
51
51
|
}
|
|
52
52
|
return accum;
|
|
53
53
|
}, { added: [], removed: [], segments: [] });
|
|
54
|
-
computed.segments = sets_1.setToArray(segments);
|
|
54
|
+
computed.segments = (0, sets_1.setToArray)(segments);
|
|
55
55
|
return computed;
|
|
56
56
|
}
|
|
57
57
|
exports.computeSplitsMutation = computeSplitsMutation;
|
|
@@ -76,7 +76,7 @@ function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, segments,
|
|
|
76
76
|
/** timeout and telemetry decorator for `splitChangesFetcher` promise */
|
|
77
77
|
function _promiseDecorator(promise) {
|
|
78
78
|
if (startingUp && requestTimeoutBeforeReady)
|
|
79
|
-
promise = timeout_1.timeout(requestTimeoutBeforeReady, promise);
|
|
79
|
+
promise = (0, timeout_1.timeout)(requestTimeoutBeforeReady, promise);
|
|
80
80
|
return promise;
|
|
81
81
|
// @TODO telemetry
|
|
82
82
|
// const collectMetrics = startingUp || isNode; // If we are on the browser, only collect this metric for first fetch. On node do it always.
|
|
@@ -20,11 +20,11 @@ function authenticateFactory(fetchAuth) {
|
|
|
20
20
|
.then(function (resp) { return resp.json(); })
|
|
21
21
|
.then(function (json) {
|
|
22
22
|
if (json.token) { // empty token when `"pushEnabled": false`
|
|
23
|
-
var decodedToken = jwt_1.decodeJWTtoken(json.token);
|
|
23
|
+
var decodedToken = (0, jwt_1.decodeJWTtoken)(json.token);
|
|
24
24
|
if (typeof decodedToken.iat !== 'number' || typeof decodedToken.exp !== 'number')
|
|
25
25
|
throw new Error('token properties "issuedAt" (iat) or "expiration" (exp) are missing or invalid');
|
|
26
26
|
var channels = JSON.parse(decodedToken['x-ably-capability']);
|
|
27
|
-
return objectAssign_1.objectAssign({
|
|
27
|
+
return (0, objectAssign_1.objectAssign)({
|
|
28
28
|
decodedToken: decodedToken,
|
|
29
29
|
channels: channels
|
|
30
30
|
}, json);
|
|
@@ -38,6 +38,6 @@ exports.authenticateFactory = authenticateFactory;
|
|
|
38
38
|
* Returns the hash of a given user key
|
|
39
39
|
*/
|
|
40
40
|
function hashUserKey(userKey) {
|
|
41
|
-
return base64_1.encodeToBase64(murmur3_1.hash(userKey, 0).toString());
|
|
41
|
+
return (0, base64_1.encodeToBase64)((0, murmur3_1.hash)(userKey, 0).toString());
|
|
42
42
|
}
|
|
43
43
|
exports.hashUserKey = hashUserKey;
|
|
@@ -13,7 +13,7 @@ var lang_1 = require("../../../utils/lang");
|
|
|
13
13
|
*/
|
|
14
14
|
function errorParser(error) {
|
|
15
15
|
// @ts-ignore
|
|
16
|
-
if (lang_1.isString(error.data))
|
|
16
|
+
if ((0, lang_1.isString)(error.data))
|
|
17
17
|
error.parsedData = JSON.parse(error.data); // cannot assign to read only property 'data'
|
|
18
18
|
return error;
|
|
19
19
|
}
|
|
@@ -25,7 +25,7 @@ function isRetryableError(error) {
|
|
|
25
25
|
* @param pushEmitter emitter for events related to streaming support
|
|
26
26
|
*/
|
|
27
27
|
function SSEHandlerFactory(log, pushEmitter) {
|
|
28
|
-
var notificationKeeper = NotificationKeeper_1.notificationKeeperFactory(pushEmitter);
|
|
28
|
+
var notificationKeeper = (0, NotificationKeeper_1.notificationKeeperFactory)(pushEmitter);
|
|
29
29
|
return {
|
|
30
30
|
handleOpen: function () {
|
|
31
31
|
notificationKeeper.handleOpen();
|
|
@@ -34,7 +34,7 @@ function SSEHandlerFactory(log, pushEmitter) {
|
|
|
34
34
|
handleError: function (error) {
|
|
35
35
|
var errorWithParsedData = error;
|
|
36
36
|
try {
|
|
37
|
-
errorWithParsedData = NotificationParser_1.errorParser(error);
|
|
37
|
+
errorWithParsedData = (0, NotificationParser_1.errorParser)(error);
|
|
38
38
|
}
|
|
39
39
|
catch (err) {
|
|
40
40
|
log.warn(constants_2.STREAMING_PARSING_ERROR_FAILS, [err]);
|
|
@@ -52,7 +52,7 @@ function SSEHandlerFactory(log, pushEmitter) {
|
|
|
52
52
|
handleMessage: function (message) {
|
|
53
53
|
var messageWithParsedData;
|
|
54
54
|
try {
|
|
55
|
-
messageWithParsedData = NotificationParser_1.messageParser(message);
|
|
55
|
+
messageWithParsedData = (0, NotificationParser_1.messageParser)(message);
|
|
56
56
|
if (!messageWithParsedData)
|
|
57
57
|
return; // Messages with empty data are ignored
|
|
58
58
|
}
|
|
@@ -10,7 +10,7 @@ var SegmentsUpdateWorker = /** @class */ (function () {
|
|
|
10
10
|
* @param {Object} segmentsCache segments data cache
|
|
11
11
|
* @param {Object} segmentsSyncTask task for syncing segments data
|
|
12
12
|
*/
|
|
13
|
-
function SegmentsUpdateWorker(
|
|
13
|
+
function SegmentsUpdateWorker(segmentsSyncTask, segmentsCache) {
|
|
14
14
|
this.segmentsCache = segmentsCache;
|
|
15
15
|
this.segmentsSyncTask = segmentsSyncTask;
|
|
16
16
|
this.maxChangeNumbers = {};
|
|
@@ -21,7 +21,7 @@ function StringToUint8Array(myString) {
|
|
|
21
21
|
* @throws if data string cannot be decoded, decompressed or the provided compression value is invalid (not 1 or 2)
|
|
22
22
|
*/
|
|
23
23
|
function decompress(data, compression) {
|
|
24
|
-
var compressData = base64_1.decodeFromBase64(data);
|
|
24
|
+
var compressData = (0, base64_1.decodeFromBase64)(data);
|
|
25
25
|
var binData = StringToUint8Array(compressData);
|
|
26
26
|
if (typeof decompress_1.algorithms === 'string')
|
|
27
27
|
throw new Error(decompress_1.algorithms);
|
|
@@ -22,10 +22,11 @@ var murmur3_64_1 = require("../../utils/murmur3/murmur3_64");
|
|
|
22
22
|
* - for server-side if key is not provided in settings.
|
|
23
23
|
* - for client-side, with support for multiple clients, if key is provided in settings
|
|
24
24
|
*/
|
|
25
|
-
function pushManagerFactory(
|
|
25
|
+
function pushManagerFactory(params, pollingManager) {
|
|
26
|
+
var settings = params.settings, storage = params.storage, splitApi = params.splitApi, readiness = params.readiness, platform = params.platform;
|
|
26
27
|
// `userKey` is the matching key of main client in client-side SDK.
|
|
27
28
|
// It can be used to check if running on client-side or server-side SDK.
|
|
28
|
-
var userKey = settings.core.key ? key_1.getMatching(settings.core.key) : undefined;
|
|
29
|
+
var userKey = settings.core.key ? (0, key_1.getMatching)(settings.core.key) : undefined;
|
|
29
30
|
var log = settings.log;
|
|
30
31
|
var sseClient;
|
|
31
32
|
try {
|
|
@@ -36,14 +37,14 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
36
37
|
log.warn(constants_2.STREAMING_FALLBACK, [e]);
|
|
37
38
|
return;
|
|
38
39
|
}
|
|
39
|
-
var authenticate = AuthClient_1.authenticateFactory(fetchAuth);
|
|
40
|
+
var authenticate = (0, AuthClient_1.authenticateFactory)(splitApi.fetchAuth);
|
|
40
41
|
// init feedback loop
|
|
41
42
|
var pushEmitter = new platform.EventEmitter();
|
|
42
|
-
var sseHandler = SSEHandler_1.SSEHandlerFactory(log, pushEmitter);
|
|
43
|
+
var sseHandler = (0, SSEHandler_1.SSEHandlerFactory)(log, pushEmitter);
|
|
43
44
|
sseClient.setEventHandler(sseHandler);
|
|
44
45
|
// init workers
|
|
45
46
|
// MySegmentsUpdateWorker (client-side) are initiated in `add` method
|
|
46
|
-
var segmentsUpdateWorker = userKey ? undefined : new SegmentsUpdateWorker_1.SegmentsUpdateWorker(
|
|
47
|
+
var segmentsUpdateWorker = userKey ? undefined : new SegmentsUpdateWorker_1.SegmentsUpdateWorker(pollingManager.segmentsSyncTask, storage.segments);
|
|
47
48
|
// For server-side we pass the segmentsSyncTask, used by SplitsUpdateWorker to fetch new segments
|
|
48
49
|
var splitsUpdateWorker = new SplitsUpdateWorker_1.SplitsUpdateWorker(storage.splits, pollingManager.splitsSyncTask, readiness.splits, userKey ? undefined : pollingManager.segmentsSyncTask);
|
|
49
50
|
// [Only for client-side] map of hashes to user keys, to dispatch MY_SEGMENTS_UPDATE events to the corresponding MySegmentsUpdateWorker
|
|
@@ -57,6 +58,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
57
58
|
// It is used to halt the `connectPush` process if it was in progress.
|
|
58
59
|
var disconnected;
|
|
59
60
|
// flag that indicates a PUSH_NONRETRYABLE_ERROR, condition with which starting pushManager again is ignored.
|
|
61
|
+
// true if STREAMING_DISABLED control event, or 'pushEnabled: false', or non-recoverable SSE or Auth errors.
|
|
60
62
|
var disabled; // `disabled` implies `disconnected === true`
|
|
61
63
|
/** PushManager functions related to initialization */
|
|
62
64
|
var connectPushRetryBackoff = new Backoff_1.Backoff(connectPush, settings.scheduler.pushRetryBackoffBase);
|
|
@@ -137,7 +139,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
137
139
|
function stopWorkers() {
|
|
138
140
|
splitsUpdateWorker.backoff.reset();
|
|
139
141
|
if (userKey)
|
|
140
|
-
lang_1.forOwn(clients, function (_a) {
|
|
142
|
+
(0, lang_1.forOwn)(clients, function (_a) {
|
|
141
143
|
var worker = _a.worker;
|
|
142
144
|
return worker.backoff.reset();
|
|
143
145
|
});
|
|
@@ -193,15 +195,15 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
193
195
|
case types_1.UpdateStrategy.BoundedFetchRequest: {
|
|
194
196
|
var bitmap_1;
|
|
195
197
|
try {
|
|
196
|
-
bitmap_1 = mySegmentsV2utils_1.parseBitmap(parsedData.d, parsedData.c);
|
|
198
|
+
bitmap_1 = (0, mySegmentsV2utils_1.parseBitmap)(parsedData.d, parsedData.c);
|
|
197
199
|
}
|
|
198
200
|
catch (e) {
|
|
199
201
|
log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['BoundedFetchRequest', e]);
|
|
200
202
|
break;
|
|
201
203
|
}
|
|
202
|
-
lang_1.forOwn(clients, function (_a) {
|
|
204
|
+
(0, lang_1.forOwn)(clients, function (_a) {
|
|
203
205
|
var hash64 = _a.hash64, worker = _a.worker;
|
|
204
|
-
if (mySegmentsV2utils_1.isInBitmap(bitmap_1, hash64.hex)) {
|
|
206
|
+
if ((0, mySegmentsV2utils_1.isInBitmap)(bitmap_1, hash64.hex)) {
|
|
205
207
|
worker.put(parsedData.changeNumber); // fetch mySegments
|
|
206
208
|
}
|
|
207
209
|
});
|
|
@@ -210,7 +212,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
210
212
|
case types_1.UpdateStrategy.KeyList: {
|
|
211
213
|
var keyList = void 0, added_1, removed_1;
|
|
212
214
|
try {
|
|
213
|
-
keyList = mySegmentsV2utils_1.parseKeyList(parsedData.d, parsedData.c);
|
|
215
|
+
keyList = (0, mySegmentsV2utils_1.parseKeyList)(parsedData.d, parsedData.c);
|
|
214
216
|
added_1 = new sets_1._Set(keyList.a);
|
|
215
217
|
removed_1 = new sets_1._Set(keyList.r);
|
|
216
218
|
}
|
|
@@ -218,7 +220,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
218
220
|
log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['KeyList', e]);
|
|
219
221
|
break;
|
|
220
222
|
}
|
|
221
|
-
lang_1.forOwn(clients, function (_a) {
|
|
223
|
+
(0, lang_1.forOwn)(clients, function (_a) {
|
|
222
224
|
var hash64 = _a.hash64, worker = _a.worker;
|
|
223
225
|
var add = added_1.has(hash64.dec) ? true : removed_1.has(hash64.dec) ? false : undefined;
|
|
224
226
|
if (add !== undefined) {
|
|
@@ -235,7 +237,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
235
237
|
log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['SegmentRemoval', 'No segment name was provided']);
|
|
236
238
|
break;
|
|
237
239
|
}
|
|
238
|
-
lang_1.forOwn(clients, function (_a) {
|
|
240
|
+
(0, lang_1.forOwn)(clients, function (_a) {
|
|
239
241
|
var worker = _a.worker;
|
|
240
242
|
return worker.put(parsedData.changeNumber, {
|
|
241
243
|
name: parsedData.segmentName,
|
|
@@ -245,7 +247,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
245
247
|
return;
|
|
246
248
|
}
|
|
247
249
|
// `UpdateStrategy.UnboundedFetchRequest` and fallbacks of other cases
|
|
248
|
-
lang_1.forOwn(clients, function (_a) {
|
|
250
|
+
(0, lang_1.forOwn)(clients, function (_a) {
|
|
249
251
|
var worker = _a.worker;
|
|
250
252
|
worker.put(parsedData.changeNumber);
|
|
251
253
|
});
|
|
@@ -254,16 +256,18 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
254
256
|
else {
|
|
255
257
|
pushEmitter.on(constants_1.SEGMENT_UPDATE, segmentsUpdateWorker.put);
|
|
256
258
|
}
|
|
257
|
-
return objectAssign_1.objectAssign(
|
|
259
|
+
return (0, objectAssign_1.objectAssign)(
|
|
258
260
|
// Expose Event Emitter functionality and Event constants
|
|
259
261
|
Object.create(pushEmitter), {
|
|
260
|
-
// Stop/pause push mode
|
|
262
|
+
// Stop/pause push mode.
|
|
263
|
+
// It doesn't emit events. Neither PUSH_SUBSYSTEM_DOWN to start polling.
|
|
261
264
|
stop: function () {
|
|
262
265
|
disconnectPush(); // `handleNonRetryableError` cannot be used as `stop`, because it emits PUSH_SUBSYSTEM_DOWN event, which starts polling.
|
|
263
266
|
if (userKey)
|
|
264
267
|
this.remove(userKey); // Necessary to properly resume streaming in client-side (e.g., RN SDK transition to foreground).
|
|
265
268
|
},
|
|
266
|
-
// Start/resume push mode
|
|
269
|
+
// Start/resume push mode.
|
|
270
|
+
// It eventually emits PUSH_SUBSYSTEM_DOWN, that starts polling, or PUSH_SUBSYSTEM_UP, that executes a syncAll
|
|
267
271
|
start: function () {
|
|
268
272
|
// Guard condition to avoid calling `connectPush` again if the `start` method is called multiple times or if push has been disabled.
|
|
269
273
|
if (disabled || disconnected === false)
|
|
@@ -274,12 +278,16 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
274
278
|
else
|
|
275
279
|
setTimeout(connectPush); // server-side runs in next cycle as in client-side, for consistency with client-side
|
|
276
280
|
},
|
|
281
|
+
// true/false if start or stop was called last respectively
|
|
282
|
+
isRunning: function () {
|
|
283
|
+
return disconnected === false;
|
|
284
|
+
},
|
|
277
285
|
// [Only for client-side]
|
|
278
286
|
add: function (userKey, mySegmentsSyncTask) {
|
|
279
|
-
var hash = AuthClient_1.hashUserKey(userKey);
|
|
287
|
+
var hash = (0, AuthClient_1.hashUserKey)(userKey);
|
|
280
288
|
if (!userKeyHashes[hash]) {
|
|
281
289
|
userKeyHashes[hash] = userKey;
|
|
282
|
-
clients[userKey] = { hash64: murmur3_64_1.hash64(userKey), worker: new MySegmentsUpdateWorker_1.MySegmentsUpdateWorker(mySegmentsSyncTask) };
|
|
290
|
+
clients[userKey] = { hash64: (0, murmur3_64_1.hash64)(userKey), worker: new MySegmentsUpdateWorker_1.MySegmentsUpdateWorker(mySegmentsSyncTask) };
|
|
283
291
|
connectForNewClient = true; // we must reconnect on start, to listen the channel for the new user key
|
|
284
292
|
// Reconnects in case of a new client.
|
|
285
293
|
// Run in next event-loop cycle to save authentication calls
|
|
@@ -294,7 +302,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
294
302
|
},
|
|
295
303
|
// [Only for client-side]
|
|
296
304
|
remove: function (userKey) {
|
|
297
|
-
var hash = AuthClient_1.hashUserKey(userKey);
|
|
305
|
+
var hash = (0, AuthClient_1.hashUserKey)(userKey);
|
|
298
306
|
delete userKeyHashes[hash];
|
|
299
307
|
delete clients[userKey];
|
|
300
308
|
}
|
|
@@ -3,12 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.eventsSyncTaskFactory = void 0;
|
|
4
4
|
var submitterSyncTask_1 = require("./submitterSyncTask");
|
|
5
5
|
var constants_1 = require("../../logger/constants");
|
|
6
|
+
var DATA_NAME = 'events';
|
|
6
7
|
/**
|
|
7
8
|
* Sync task that periodically posts tracked events
|
|
8
9
|
*/
|
|
9
10
|
function eventsSyncTaskFactory(log, postEventsBulk, eventsCache, eventsPushRate, eventsFirstPushWindow, latencyTracker) {
|
|
10
11
|
// don't retry events.
|
|
11
|
-
var syncTask = submitterSyncTask_1.submitterSyncTaskFactory(log, postEventsBulk, eventsCache, eventsPushRate,
|
|
12
|
+
var syncTask = (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postEventsBulk, eventsCache, eventsPushRate, DATA_NAME, latencyTracker);
|
|
12
13
|
// Set a timer for the first push of events,
|
|
13
14
|
if (eventsFirstPushWindow > 0) {
|
|
14
15
|
var stopEventPublisherTimeout_1;
|
|
@@ -22,9 +23,9 @@ function eventsSyncTaskFactory(log, postEventsBulk, eventsCache, eventsPushRate,
|
|
|
22
23
|
originalStop_1();
|
|
23
24
|
};
|
|
24
25
|
}
|
|
25
|
-
// register
|
|
26
|
+
// register events submitter to be executed when events cache is full
|
|
26
27
|
eventsCache.setOnFullQueueCb(function () {
|
|
27
|
-
log.info(constants_1.
|
|
28
|
+
log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [DATA_NAME]);
|
|
28
29
|
syncTask.execute();
|
|
29
30
|
});
|
|
30
31
|
return syncTask;
|
|
@@ -30,6 +30,6 @@ var IMPRESSIONS_COUNT_RATE = 1800000; // 30 minutes
|
|
|
30
30
|
*/
|
|
31
31
|
function impressionCountsSyncTaskFactory(log, postTestImpressionsCount, impressionCountsCache, latencyTracker) {
|
|
32
32
|
// retry impressions counts only once.
|
|
33
|
-
return submitterSyncTask_1.submitterSyncTaskFactory(log, postTestImpressionsCount, impressionCountsCache, IMPRESSIONS_COUNT_RATE, 'impression counts', latencyTracker, fromImpressionCountsCollector, 1);
|
|
33
|
+
return (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postTestImpressionsCount, impressionCountsCache, IMPRESSIONS_COUNT_RATE, 'impression counts', latencyTracker, fromImpressionCountsCollector, 1);
|
|
34
34
|
}
|
|
35
35
|
exports.impressionCountsSyncTaskFactory = impressionCountsSyncTaskFactory;
|