@splitsoftware/splitio-commons 1.9.2-rc.0 → 1.9.2-rc.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/cjs/evaluator/index.js +1 -18
- package/cjs/logger/constants.js +2 -7
- package/cjs/logger/messages/error.js +0 -2
- package/cjs/logger/messages/info.js +1 -1
- package/cjs/logger/messages/warn.js +1 -3
- package/cjs/sdkClient/client.js +0 -33
- package/cjs/sdkClient/clientAttributesDecoration.js +0 -20
- package/cjs/sdkClient/clientCS.js +4 -5
- package/cjs/sdkClient/clientInputValidation.js +3 -52
- package/cjs/sdkManager/index.js +1 -2
- package/cjs/services/splitApi.js +1 -7
- package/cjs/storages/KeyBuilder.js +0 -3
- package/cjs/storages/KeyBuilderSS.js +0 -4
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +27 -63
- package/cjs/storages/inLocalStorage/index.js +2 -2
- package/cjs/storages/inMemory/InMemoryStorage.js +2 -2
- package/cjs/storages/inMemory/InMemoryStorageCS.js +3 -3
- package/cjs/storages/inMemory/SplitsCacheInMemory.js +2 -47
- package/cjs/storages/inRedis/SplitsCacheInRedis.js +0 -11
- package/cjs/storages/pluggable/SplitsCachePluggable.js +0 -11
- package/cjs/sync/polling/syncTasks/splitsSyncTask.js +1 -1
- package/cjs/sync/polling/updaters/splitChangesUpdater.js +4 -24
- package/cjs/sync/submitters/telemetrySubmitter.js +1 -15
- package/cjs/utils/constants/index.js +2 -6
- package/cjs/utils/lang/sets.js +1 -9
- package/cjs/utils/settingsValidation/splitFilters.js +2 -77
- package/esm/evaluator/index.js +0 -16
- package/esm/logger/constants.js +0 -5
- package/esm/logger/messages/error.js +0 -2
- package/esm/logger/messages/info.js +1 -1
- package/esm/logger/messages/warn.js +1 -3
- package/esm/sdkClient/client.js +2 -35
- package/esm/sdkClient/clientAttributesDecoration.js +0 -20
- package/esm/sdkClient/clientCS.js +4 -5
- package/esm/sdkClient/clientInputValidation.js +3 -52
- package/esm/sdkManager/index.js +1 -2
- package/esm/services/splitApi.js +1 -7
- package/esm/storages/KeyBuilder.js +0 -3
- package/esm/storages/KeyBuilderSS.js +0 -4
- package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +27 -63
- package/esm/storages/inLocalStorage/index.js +2 -2
- package/esm/storages/inMemory/InMemoryStorage.js +2 -2
- package/esm/storages/inMemory/InMemoryStorageCS.js +3 -3
- package/esm/storages/inMemory/SplitsCacheInMemory.js +2 -47
- package/esm/storages/inRedis/SplitsCacheInRedis.js +0 -11
- package/esm/storages/pluggable/SplitsCachePluggable.js +0 -11
- package/esm/sync/polling/syncTasks/splitsSyncTask.js +1 -1
- package/esm/sync/polling/updaters/splitChangesUpdater.js +4 -24
- package/esm/sync/submitters/telemetrySubmitter.js +1 -15
- package/esm/utils/constants/index.js +0 -4
- package/esm/utils/lang/sets.js +0 -7
- package/esm/utils/settingsValidation/splitFilters.js +2 -76
- package/package.json +1 -1
- package/src/dtos/types.ts +2 -3
- package/src/evaluator/index.ts +0 -24
- package/src/logger/constants.ts +0 -5
- package/src/logger/messages/error.ts +0 -2
- package/src/logger/messages/info.ts +1 -1
- package/src/logger/messages/warn.ts +1 -3
- package/src/sdkClient/client.ts +2 -42
- package/src/sdkClient/clientAttributesDecoration.ts +0 -24
- package/src/sdkClient/clientCS.ts +4 -5
- package/src/sdkClient/clientInputValidation.ts +4 -56
- package/src/sdkManager/index.ts +1 -2
- package/src/services/splitApi.ts +1 -6
- package/src/storages/AbstractSegmentsCacheSync.ts +1 -0
- package/src/storages/AbstractSplitsCacheAsync.ts +0 -2
- package/src/storages/AbstractSplitsCacheSync.ts +0 -3
- package/src/storages/KeyBuilder.ts +0 -4
- package/src/storages/KeyBuilderSS.ts +0 -4
- package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +28 -74
- package/src/storages/inLocalStorage/index.ts +2 -2
- package/src/storages/inMemory/InMemoryStorage.ts +2 -2
- package/src/storages/inMemory/InMemoryStorageCS.ts +3 -3
- package/src/storages/inMemory/SplitsCacheInMemory.ts +1 -50
- package/src/storages/inRedis/SplitsCacheInRedis.ts +0 -12
- package/src/storages/pluggable/SplitsCachePluggable.ts +0 -12
- package/src/storages/types.ts +3 -7
- package/src/sync/polling/syncTasks/splitsSyncTask.ts +0 -1
- package/src/sync/polling/updaters/splitChangesUpdater.ts +4 -27
- package/src/sync/submitters/telemetrySubmitter.ts +2 -19
- package/src/sync/submitters/types.ts +1 -7
- package/src/types.ts +1 -118
- package/src/utils/constants/index.ts +0 -4
- package/src/utils/lang/sets.ts +0 -8
- package/src/utils/settingsValidation/splitFilters.ts +2 -82
- package/types/dtos/types.d.ts +0 -1
- package/types/evaluator/index.d.ts +0 -1
- package/types/logger/constants.d.ts +0 -5
- package/types/sdkClient/clientAttributesDecoration.d.ts +0 -4
- package/types/sdkClient/identity.d.ts +6 -0
- package/types/storages/AbstractSegmentsCacheSync.d.ts +1 -0
- package/types/storages/AbstractSplitsCacheAsync.d.ts +0 -2
- package/types/storages/AbstractSplitsCacheSync.d.ts +0 -2
- package/types/storages/KeyBuilder.d.ts +0 -1
- package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +1 -6
- package/types/storages/inMemory/SplitsCacheInMemory.d.ts +1 -9
- package/types/storages/inRedis/SplitsCacheInRedis.d.ts +0 -8
- package/types/storages/pluggable/SplitsCachePluggable.d.ts +0 -8
- package/types/storages/types.d.ts +0 -4
- package/types/sync/polling/updaters/splitChangesUpdater.d.ts +3 -3
- package/types/sync/submitters/types.d.ts +1 -7
- package/types/types.d.ts +1 -118
- package/types/utils/constants/index.d.ts +0 -4
- package/types/utils/inputValidation/sdkKey.d.ts +7 -0
- package/types/utils/lang/sets.d.ts +0 -1
- package/types/utils/settingsValidation/splitFilters.d.ts +0 -1
- package/cjs/myLogger.js +0 -34
- package/esm/myLogger.js +0 -31
- package/src/myLogger.ts +0 -36
- package/types/myLogger.d.ts +0 -5
- package/types/sdkClient/types.d.ts +0 -18
- package/types/storages/inMemory/CountsCacheInMemory.d.ts +0 -20
- package/types/storages/inMemory/LatenciesCacheInMemory.d.ts +0 -20
- package/types/storages/inRedis/CountsCacheInRedis.d.ts +0 -9
- package/types/storages/inRedis/LatenciesCacheInRedis.d.ts +0 -9
- package/types/storages/metadataBuilder.d.ts +0 -3
- package/types/sync/offline/LocalhostFromFile.d.ts +0 -2
- package/types/sync/offline/splitsParser/splitsParserFromFile.d.ts +0 -2
- package/types/sync/offline/updaters/splitChangesUpdater.d.ts +0 -0
- package/types/sync/submitters/eventsSyncTask.d.ts +0 -8
- package/types/sync/submitters/impressionCountsSubmitterInRedis.d.ts +0 -5
- package/types/sync/submitters/impressionCountsSyncTask.d.ts +0 -13
- package/types/sync/submitters/impressionsSyncTask.d.ts +0 -14
- package/types/sync/submitters/metricsSyncTask.d.ts +0 -12
- package/types/sync/submitters/submitterSyncTask.d.ts +0 -10
- package/types/sync/submitters/uniqueKeysSubmitterInRedis.d.ts +0 -5
- package/types/sync/syncTaskComposite.d.ts +0 -5
- package/types/trackers/filter/bloomFilter.d.ts +0 -10
- package/types/trackers/filter/dictionaryFilter.d.ts +0 -8
- package/types/trackers/filter/types.d.ts +0 -5
- package/types/utils/timeTracker/index.d.ts +0 -70
- /package/types/storages/inMemory/{uniqueKeysCacheInMemory.d.ts → UniqueKeysCacheInMemory.d.ts} +0 -0
- /package/types/storages/inMemory/{uniqueKeysCacheInMemoryCS.d.ts → UniqueKeysCacheInMemoryCS.d.ts} +0 -0
- /package/types/storages/inRedis/{uniqueKeysCacheInRedis.d.ts → UniqueKeysCacheInRedis.d.ts} +0 -0
|
@@ -3,7 +3,6 @@ import { validateAttributes, validateEvent, validateEventValue, validateEventPro
|
|
|
3
3
|
import { startsWith } from '../utils/lang';
|
|
4
4
|
import { CONTROL, CONTROL_WITH_CONFIG } from '../utils/constants';
|
|
5
5
|
import { isStorageSync } from '../trackers/impressionObserver/utils';
|
|
6
|
-
import { flagSetsAreValid } from '../utils/settingsValidation/splitFilters';
|
|
7
6
|
/**
|
|
8
7
|
* Decorator that validates the input before actually executing the client methods.
|
|
9
8
|
* We should "guard" the client here, while not polluting the "real" implementation of those methods.
|
|
@@ -14,26 +13,18 @@ export function clientInputValidationDecorator(settings, client, readinessManage
|
|
|
14
13
|
/**
|
|
15
14
|
* Avoid repeating this validations code
|
|
16
15
|
*/
|
|
17
|
-
function validateEvaluationParams(maybeKey, maybeFeatureFlagNameOrNames, maybeAttributes, methodName
|
|
16
|
+
function validateEvaluationParams(maybeKey, maybeFeatureFlagNameOrNames, maybeAttributes, methodName) {
|
|
18
17
|
var multi = startsWith(methodName, 'getTreatments');
|
|
19
18
|
var key = validateKey(log, maybeKey, methodName);
|
|
20
|
-
var splitOrSplits =
|
|
21
|
-
var flagSetOrFlagSets = [];
|
|
22
|
-
if (maybeFeatureFlagNameOrNames) {
|
|
23
|
-
splitOrSplits = multi ? validateSplits(log, maybeFeatureFlagNameOrNames, methodName) : validateSplit(log, maybeFeatureFlagNameOrNames, methodName);
|
|
24
|
-
}
|
|
19
|
+
var splitOrSplits = multi ? validateSplits(log, maybeFeatureFlagNameOrNames, methodName) : validateSplit(log, maybeFeatureFlagNameOrNames, methodName);
|
|
25
20
|
var attributes = validateAttributes(log, maybeAttributes, methodName);
|
|
26
21
|
var isNotDestroyed = validateIfNotDestroyed(log, readinessManager, methodName);
|
|
27
|
-
if (maybeFlagSetNameOrNames) {
|
|
28
|
-
flagSetOrFlagSets = flagSetsAreValid(log, methodName, maybeFlagSetNameOrNames, settings.sync.__splitFiltersValidation.groupedFilters.bySet);
|
|
29
|
-
}
|
|
30
22
|
validateIfOperational(log, readinessManager, methodName);
|
|
31
|
-
var valid = isNotDestroyed && key &&
|
|
23
|
+
var valid = isNotDestroyed && key && splitOrSplits && attributes !== false;
|
|
32
24
|
return {
|
|
33
25
|
valid: valid,
|
|
34
26
|
key: key,
|
|
35
27
|
splitOrSplits: splitOrSplits,
|
|
36
|
-
flagSetOrFlagSets: flagSetOrFlagSets,
|
|
37
28
|
attributes: attributes
|
|
38
29
|
};
|
|
39
30
|
}
|
|
@@ -82,42 +73,6 @@ export function clientInputValidationDecorator(settings, client, readinessManage
|
|
|
82
73
|
return wrapResult(res_2);
|
|
83
74
|
}
|
|
84
75
|
}
|
|
85
|
-
function getTreatmentsByFlagSets(maybeKey, maybeFlagSets, maybeAttributes) {
|
|
86
|
-
var params = validateEvaluationParams(maybeKey, undefined, maybeAttributes, 'getTreatmentsByFlagSets', maybeFlagSets);
|
|
87
|
-
if (params.valid) {
|
|
88
|
-
return client.getTreatmentsByFlagSets(params.key, params.flagSetOrFlagSets, params.attributes);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
return wrapResult({});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
function getTreatmentsWithConfigByFlagSets(maybeKey, maybeFlagSets, maybeAttributes) {
|
|
95
|
-
var params = validateEvaluationParams(maybeKey, undefined, maybeAttributes, 'getTreatmentsWithConfigByFlagSets', maybeFlagSets);
|
|
96
|
-
if (params.valid) {
|
|
97
|
-
return client.getTreatmentsWithConfigByFlagSets(params.key, params.flagSetOrFlagSets, params.attributes);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
return wrapResult({});
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
function getTreatmentsByFlagSet(maybeKey, maybeFlagSet, maybeAttributes) {
|
|
104
|
-
var params = validateEvaluationParams(maybeKey, undefined, maybeAttributes, 'getTreatmentsByFlagSet', [maybeFlagSet]);
|
|
105
|
-
if (params.valid) {
|
|
106
|
-
return client.getTreatmentsByFlagSet(params.key, params.flagSetOrFlagSets[0], params.attributes);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
return wrapResult({});
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
function getTreatmentsWithConfigByFlagSet(maybeKey, maybeFlagSet, maybeAttributes) {
|
|
113
|
-
var params = validateEvaluationParams(maybeKey, undefined, maybeAttributes, 'getTreatmentsWithConfigByFlagSet', [maybeFlagSet]);
|
|
114
|
-
if (params.valid) {
|
|
115
|
-
return client.getTreatmentsWithConfigByFlagSet(params.key, params.flagSetOrFlagSets[0], params.attributes);
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
return wrapResult({});
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
76
|
function track(maybeKey, maybeTT, maybeEvent, maybeEventValue, maybeProperties) {
|
|
122
77
|
var key = validateKey(log, maybeKey, 'track');
|
|
123
78
|
var tt = validateTrafficType(log, maybeTT, 'track');
|
|
@@ -137,10 +92,6 @@ export function clientInputValidationDecorator(settings, client, readinessManage
|
|
|
137
92
|
getTreatmentWithConfig: getTreatmentWithConfig,
|
|
138
93
|
getTreatments: getTreatments,
|
|
139
94
|
getTreatmentsWithConfig: getTreatmentsWithConfig,
|
|
140
|
-
getTreatmentsByFlagSets: getTreatmentsByFlagSets,
|
|
141
|
-
getTreatmentsWithConfigByFlagSets: getTreatmentsWithConfigByFlagSets,
|
|
142
|
-
getTreatmentsByFlagSet: getTreatmentsByFlagSet,
|
|
143
|
-
getTreatmentsWithConfigByFlagSet: getTreatmentsWithConfigByFlagSet,
|
|
144
95
|
track: track
|
|
145
96
|
};
|
|
146
97
|
}
|
package/esm/sdkManager/index.js
CHANGED
|
@@ -24,8 +24,7 @@ function objectToView(splitObject) {
|
|
|
24
24
|
killed: splitObject.killed,
|
|
25
25
|
changeNumber: splitObject.changeNumber || 0,
|
|
26
26
|
treatments: collectTreatments(splitObject),
|
|
27
|
-
configs: splitObject.configurations || {}
|
|
28
|
-
sets: splitObject.sets || []
|
|
27
|
+
configs: splitObject.configurations || {}
|
|
29
28
|
};
|
|
30
29
|
}
|
|
31
30
|
function objectsToViews(splitObjects) {
|
package/esm/services/splitApi.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { splitHttpClientFactory } from './splitHttpClient';
|
|
2
2
|
import { objectAssign } from '../utils/lang/objectAssign';
|
|
3
3
|
import { SPLITS, IMPRESSIONS, IMPRESSIONS_COUNT, EVENTS, TELEMETRY, TOKEN, SEGMENT, MY_SEGMENT } from '../utils/constants';
|
|
4
|
-
import { ERROR_TOO_MANY_SETS } from '../logger/constants';
|
|
5
4
|
var noCacheHeaderOptions = { headers: { 'Cache-Control': 'no-cache' } };
|
|
6
5
|
function userKeyToQueryParam(userKey) {
|
|
7
6
|
return 'users=' + encodeURIComponent(userKey); // no need to check availability of `encodeURIComponent`, since it is a global highly supported.
|
|
@@ -38,12 +37,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
|
|
|
38
37
|
},
|
|
39
38
|
fetchSplitChanges: function (since, noCache, till) {
|
|
40
39
|
var url = urls.sdk + "/splitChanges?since=" + since + (till ? '&till=' + till : '') + (filterQueryString || '');
|
|
41
|
-
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SPLITS))
|
|
42
|
-
.catch(function (err) {
|
|
43
|
-
if (err.statusCode === 414)
|
|
44
|
-
settings.log.error(ERROR_TOO_MANY_SETS);
|
|
45
|
-
throw err;
|
|
46
|
-
});
|
|
40
|
+
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SPLITS));
|
|
47
41
|
},
|
|
48
42
|
fetchSegmentChanges: function (since, segmentName, noCache, till) {
|
|
49
43
|
var url = urls.sdk + "/segmentChanges/" + segmentName + "?since=" + since + (till ? '&till=' + till : '');
|
|
@@ -12,9 +12,6 @@ var KeyBuilder = /** @class */ (function () {
|
|
|
12
12
|
KeyBuilder.prototype.buildTrafficTypeKey = function (trafficType) {
|
|
13
13
|
return this.prefix + ".trafficType." + trafficType;
|
|
14
14
|
};
|
|
15
|
-
KeyBuilder.prototype.buildFlagSetKey = function (flagSet) {
|
|
16
|
-
return this.prefix + ".flagset." + flagSet;
|
|
17
|
-
};
|
|
18
15
|
KeyBuilder.prototype.buildSplitKey = function (splitName) {
|
|
19
16
|
return this.prefix + ".split." + splitName;
|
|
20
17
|
};
|
|
@@ -5,10 +5,6 @@ export var METHOD_NAMES = {
|
|
|
5
5
|
ts: 'treatments',
|
|
6
6
|
tc: 'treatmentWithConfig',
|
|
7
7
|
tcs: 'treatmentsWithConfig',
|
|
8
|
-
tf: 'treatmentsByFlagSet',
|
|
9
|
-
tfs: 'treatmentsByFlagSets',
|
|
10
|
-
tcf: 'treatmentsWithConfigByFlagSet',
|
|
11
|
-
tcfs: 'treatmentsWithConfigByFlagSets',
|
|
12
8
|
tr: 'track'
|
|
13
9
|
};
|
|
14
10
|
var KeyBuilderSS = /** @class */ (function (_super) {
|
|
@@ -2,7 +2,6 @@ import { __extends } from "tslib";
|
|
|
2
2
|
import { AbstractSplitsCacheSync, usesSegments } from '../AbstractSplitsCacheSync';
|
|
3
3
|
import { isFiniteNumber, toNumber, isNaNNumber } from '../../utils/lang';
|
|
4
4
|
import { LOG_PREFIX } from './constants';
|
|
5
|
-
import { _Set, returnSetsUnion, setToArray } from '../../utils/lang/sets';
|
|
6
5
|
/**
|
|
7
6
|
* ISplitsCacheSync implementation that stores split definitions in browser LocalStorage.
|
|
8
7
|
*/
|
|
@@ -14,12 +13,12 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
14
13
|
* @param {ISplitFiltersValidation} splitFiltersValidation
|
|
15
14
|
*/
|
|
16
15
|
function SplitsCacheInLocal(log, keys, expirationTimestamp, splitFiltersValidation) {
|
|
17
|
-
if (splitFiltersValidation === void 0) { splitFiltersValidation = { queryString: null, groupedFilters: {
|
|
16
|
+
if (splitFiltersValidation === void 0) { splitFiltersValidation = { queryString: null, groupedFilters: { byName: [], byPrefix: [] }, validFilters: [] }; }
|
|
18
17
|
var _this = _super.call(this) || this;
|
|
19
18
|
_this.log = log;
|
|
19
|
+
_this.cacheReadyButNeedsToFlush = false;
|
|
20
20
|
_this.keys = keys;
|
|
21
21
|
_this.splitFiltersValidation = splitFiltersValidation;
|
|
22
|
-
_this.flagSetsFilter = _this.splitFiltersValidation.groupedFilters.bySet;
|
|
23
22
|
_this._checkExpiration(expirationTimestamp);
|
|
24
23
|
_this._checkFilterQuery();
|
|
25
24
|
return _this;
|
|
@@ -92,9 +91,6 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
92
91
|
localStorage.setItem(splitKey, JSON.stringify(split));
|
|
93
92
|
this._incrementCounts(split);
|
|
94
93
|
this._decrementCounts(previousSplit);
|
|
95
|
-
if (previousSplit)
|
|
96
|
-
this.removeFromFlagSets(previousSplit.name, previousSplit.sets);
|
|
97
|
-
this.addToFlagSets(split);
|
|
98
94
|
return true;
|
|
99
95
|
}
|
|
100
96
|
catch (e) {
|
|
@@ -107,8 +103,6 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
107
103
|
var split = this.getSplit(name);
|
|
108
104
|
localStorage.removeItem(this.keys.buildSplitKey(name));
|
|
109
105
|
this._decrementCounts(split);
|
|
110
|
-
if (split)
|
|
111
|
-
this.removeFromFlagSets(split.name, split.sets);
|
|
112
106
|
return true;
|
|
113
107
|
}
|
|
114
108
|
catch (e) {
|
|
@@ -121,6 +115,11 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
121
115
|
return item && JSON.parse(item);
|
|
122
116
|
};
|
|
123
117
|
SplitsCacheInLocal.prototype.setChangeNumber = function (changeNumber) {
|
|
118
|
+
// when cache is ready but using a new split query, we must clear all split data
|
|
119
|
+
if (this.cacheReadyButNeedsToFlush) {
|
|
120
|
+
this.clear();
|
|
121
|
+
this.cacheReadyButNeedsToFlush = false;
|
|
122
|
+
}
|
|
124
123
|
// when using a new split query, we must update it at the store
|
|
125
124
|
if (this.updateNewFilter) {
|
|
126
125
|
this.log.info(LOG_PREFIX + 'Split filter query was modified. Updating cache.');
|
|
@@ -193,7 +192,7 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
193
192
|
* @override
|
|
194
193
|
*/
|
|
195
194
|
SplitsCacheInLocal.prototype.checkCache = function () {
|
|
196
|
-
return this.getChangeNumber() > -1;
|
|
195
|
+
return this.getChangeNumber() > -1 || this.cacheReadyButNeedsToFlush;
|
|
197
196
|
};
|
|
198
197
|
/**
|
|
199
198
|
* Clean Splits cache if its `lastUpdated` timestamp is older than the given `expirationTimestamp`,
|
|
@@ -209,16 +208,31 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
209
208
|
}
|
|
210
209
|
};
|
|
211
210
|
SplitsCacheInLocal.prototype._checkFilterQuery = function () {
|
|
212
|
-
var
|
|
211
|
+
var _this = this;
|
|
212
|
+
var _a = this.splitFiltersValidation, queryString = _a.queryString, groupedFilters = _a.groupedFilters;
|
|
213
213
|
var queryKey = this.keys.buildSplitsFilterQueryKey();
|
|
214
214
|
var currentQueryString = localStorage.getItem(queryKey);
|
|
215
215
|
if (currentQueryString !== queryString) {
|
|
216
216
|
try {
|
|
217
217
|
// mark cache to update the new query filter on first successful splits fetch
|
|
218
218
|
this.updateNewFilter = true;
|
|
219
|
-
// if
|
|
220
|
-
if (this.checkCache())
|
|
221
|
-
|
|
219
|
+
// if cache is ready:
|
|
220
|
+
if (this.checkCache()) {
|
|
221
|
+
// * set change number to -1, to fetch splits with -1 `since` value.
|
|
222
|
+
localStorage.setItem(this.keys.buildSplitsTillKey(), '-1');
|
|
223
|
+
// * remove from cache splits that doesn't match with the new filters
|
|
224
|
+
this.getSplitNames().forEach(function (splitName) {
|
|
225
|
+
if (queryString && (
|
|
226
|
+
// @TODO consider redefining `groupedFilters` to expose a method like `groupedFilters::filter(splitName): boolean`
|
|
227
|
+
groupedFilters.byName.indexOf(splitName) > -1 ||
|
|
228
|
+
groupedFilters.byPrefix.some(function (prefix) { return splitName.startsWith(prefix + '__'); }))) {
|
|
229
|
+
// * set `cacheReadyButNeedsToFlush` so that `checkCache` returns true (the storage is ready to be used) and the data is cleared before updating on first successful splits fetch
|
|
230
|
+
_this.cacheReadyButNeedsToFlush = true;
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
_this.removeSplit(splitName);
|
|
234
|
+
});
|
|
235
|
+
}
|
|
222
236
|
}
|
|
223
237
|
catch (e) {
|
|
224
238
|
this.log.error(LOG_PREFIX + e);
|
|
@@ -226,56 +240,6 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
226
240
|
}
|
|
227
241
|
// if the filter didn't change, nothing is done
|
|
228
242
|
};
|
|
229
|
-
SplitsCacheInLocal.prototype.getNamesByFlagSets = function (flagSets) {
|
|
230
|
-
var _this = this;
|
|
231
|
-
var toReturn = new _Set([]);
|
|
232
|
-
flagSets.forEach(function (flagSet) {
|
|
233
|
-
var flagSetKey = _this.keys.buildFlagSetKey(flagSet);
|
|
234
|
-
var flagSetFromLocalStorage = localStorage.getItem(flagSetKey);
|
|
235
|
-
if (flagSetFromLocalStorage) {
|
|
236
|
-
var flagSetCache = new _Set(JSON.parse(flagSetFromLocalStorage));
|
|
237
|
-
toReturn = returnSetsUnion(toReturn, flagSetCache);
|
|
238
|
-
}
|
|
239
|
-
});
|
|
240
|
-
return toReturn;
|
|
241
|
-
};
|
|
242
|
-
SplitsCacheInLocal.prototype.addToFlagSets = function (featureFlag) {
|
|
243
|
-
var _this = this;
|
|
244
|
-
if (!featureFlag.sets)
|
|
245
|
-
return;
|
|
246
|
-
featureFlag.sets.forEach(function (featureFlagSet) {
|
|
247
|
-
if (_this.flagSetsFilter.length > 0 && !_this.flagSetsFilter.some(function (filterFlagSet) { return filterFlagSet === featureFlagSet; }))
|
|
248
|
-
return;
|
|
249
|
-
var flagSetKey = _this.keys.buildFlagSetKey(featureFlagSet);
|
|
250
|
-
var flagSetFromLocalStorage = localStorage.getItem(flagSetKey);
|
|
251
|
-
if (!flagSetFromLocalStorage)
|
|
252
|
-
flagSetFromLocalStorage = '[]';
|
|
253
|
-
var flagSetCache = new _Set(JSON.parse(flagSetFromLocalStorage));
|
|
254
|
-
flagSetCache.add(featureFlag.name);
|
|
255
|
-
localStorage.setItem(flagSetKey, JSON.stringify(setToArray(flagSetCache)));
|
|
256
|
-
});
|
|
257
|
-
};
|
|
258
|
-
SplitsCacheInLocal.prototype.removeFromFlagSets = function (featureFlagName, flagSets) {
|
|
259
|
-
var _this = this;
|
|
260
|
-
if (!flagSets)
|
|
261
|
-
return;
|
|
262
|
-
flagSets.forEach(function (flagSet) {
|
|
263
|
-
_this.removeNames(flagSet, featureFlagName);
|
|
264
|
-
});
|
|
265
|
-
};
|
|
266
|
-
SplitsCacheInLocal.prototype.removeNames = function (flagSetName, featureFlagName) {
|
|
267
|
-
var flagSetKey = this.keys.buildFlagSetKey(flagSetName);
|
|
268
|
-
var flagSetFromLocalStorage = localStorage.getItem(flagSetKey);
|
|
269
|
-
if (!flagSetFromLocalStorage)
|
|
270
|
-
return;
|
|
271
|
-
var flagSetCache = new _Set(JSON.parse(flagSetFromLocalStorage));
|
|
272
|
-
flagSetCache.delete(featureFlagName);
|
|
273
|
-
if (flagSetCache.size === 0) {
|
|
274
|
-
localStorage.removeItem(flagSetKey);
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
localStorage.setItem(flagSetKey, JSON.stringify(setToArray(flagSetCache)));
|
|
278
|
-
};
|
|
279
243
|
return SplitsCacheInLocal;
|
|
280
244
|
}(AbstractSplitsCacheSync));
|
|
281
245
|
export { SplitsCacheInLocal };
|
|
@@ -43,7 +43,7 @@ export function InLocalStorage(options) {
|
|
|
43
43
|
uniqueKeys: impressionsMode === NONE ? new UniqueKeysCacheInMemoryCS() : undefined,
|
|
44
44
|
destroy: function () {
|
|
45
45
|
var _a;
|
|
46
|
-
this.splits = new SplitsCacheInMemory(
|
|
46
|
+
this.splits = new SplitsCacheInMemory();
|
|
47
47
|
this.segments = new MySegmentsCacheInMemory();
|
|
48
48
|
this.impressions.clear();
|
|
49
49
|
this.impressionCounts && this.impressionCounts.clear();
|
|
@@ -61,7 +61,7 @@ export function InLocalStorage(options) {
|
|
|
61
61
|
events: this.events,
|
|
62
62
|
telemetry: this.telemetry,
|
|
63
63
|
destroy: function () {
|
|
64
|
-
this.splits = new SplitsCacheInMemory(
|
|
64
|
+
this.splits = new SplitsCacheInMemory();
|
|
65
65
|
this.segments = new MySegmentsCacheInMemory();
|
|
66
66
|
}
|
|
67
67
|
};
|
|
@@ -12,8 +12,8 @@ import { UniqueKeysCacheInMemory } from './UniqueKeysCacheInMemory';
|
|
|
12
12
|
* @param params parameters required by EventsCacheSync
|
|
13
13
|
*/
|
|
14
14
|
export function InMemoryStorageFactory(params) {
|
|
15
|
-
var _a = params.settings, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize,
|
|
16
|
-
var splits = new SplitsCacheInMemory(
|
|
15
|
+
var _a = params.settings, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize, impressionsMode = _a.sync.impressionsMode;
|
|
16
|
+
var splits = new SplitsCacheInMemory();
|
|
17
17
|
var segments = new SegmentsCacheInMemory();
|
|
18
18
|
var storage = {
|
|
19
19
|
splits: splits,
|
|
@@ -12,8 +12,8 @@ import { UniqueKeysCacheInMemoryCS } from './UniqueKeysCacheInMemoryCS';
|
|
|
12
12
|
* @param params parameters required by EventsCacheSync
|
|
13
13
|
*/
|
|
14
14
|
export function InMemoryStorageCSFactory(params) {
|
|
15
|
-
var _a = params.settings, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize,
|
|
16
|
-
var splits = new SplitsCacheInMemory(
|
|
15
|
+
var _a = params.settings, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize, impressionsMode = _a.sync.impressionsMode;
|
|
16
|
+
var splits = new SplitsCacheInMemory();
|
|
17
17
|
var segments = new MySegmentsCacheInMemory();
|
|
18
18
|
var storage = {
|
|
19
19
|
splits: splits,
|
|
@@ -43,7 +43,7 @@ export function InMemoryStorageCSFactory(params) {
|
|
|
43
43
|
telemetry: this.telemetry,
|
|
44
44
|
// Set a new splits cache to clean it for the client without affecting other clients
|
|
45
45
|
destroy: function () {
|
|
46
|
-
this.splits = new SplitsCacheInMemory(
|
|
46
|
+
this.splits = new SplitsCacheInMemory();
|
|
47
47
|
this.segments.clear();
|
|
48
48
|
}
|
|
49
49
|
};
|
|
@@ -1,22 +1,18 @@
|
|
|
1
1
|
import { __extends } from "tslib";
|
|
2
2
|
import { AbstractSplitsCacheSync, usesSegments } from '../AbstractSplitsCacheSync';
|
|
3
3
|
import { isFiniteNumber } from '../../utils/lang';
|
|
4
|
-
import { _Set, returnSetsUnion } from '../../utils/lang/sets';
|
|
5
4
|
/**
|
|
6
5
|
* Default ISplitsCacheSync implementation that stores split definitions in memory.
|
|
7
6
|
* Supported by all JS runtimes.
|
|
8
7
|
*/
|
|
9
8
|
var SplitsCacheInMemory = /** @class */ (function (_super) {
|
|
10
9
|
__extends(SplitsCacheInMemory, _super);
|
|
11
|
-
function SplitsCacheInMemory(
|
|
12
|
-
|
|
13
|
-
var _this = _super.call(this) || this;
|
|
10
|
+
function SplitsCacheInMemory() {
|
|
11
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
14
12
|
_this.splitsCache = {};
|
|
15
13
|
_this.ttCache = {};
|
|
16
14
|
_this.changeNumber = -1;
|
|
17
15
|
_this.splitsWithSegmentsCount = 0;
|
|
18
|
-
_this.flagSetsCache = {};
|
|
19
|
-
_this.flagSetsFilter = splitFiltersValidation.groupedFilters.bySet;
|
|
20
16
|
return _this;
|
|
21
17
|
}
|
|
22
18
|
SplitsCacheInMemory.prototype.clear = function () {
|
|
@@ -32,7 +28,6 @@ var SplitsCacheInMemory = /** @class */ (function (_super) {
|
|
|
32
28
|
this.ttCache[previousTtName]--;
|
|
33
29
|
if (!this.ttCache[previousTtName])
|
|
34
30
|
delete this.ttCache[previousTtName];
|
|
35
|
-
this.removeFromFlagSets(previousSplit.name, previousSplit.sets);
|
|
36
31
|
if (usesSegments(previousSplit)) { // Substract from segments count for the previous version of this Split.
|
|
37
32
|
this.splitsWithSegmentsCount--;
|
|
38
33
|
}
|
|
@@ -43,7 +38,6 @@ var SplitsCacheInMemory = /** @class */ (function (_super) {
|
|
|
43
38
|
// Update TT cache
|
|
44
39
|
var ttName = split.trafficTypeName;
|
|
45
40
|
this.ttCache[ttName] = (this.ttCache[ttName] || 0) + 1;
|
|
46
|
-
this.addToFlagSets(split);
|
|
47
41
|
// Add to segments count for the new version of the Split
|
|
48
42
|
if (usesSegments(split))
|
|
49
43
|
this.splitsWithSegmentsCount++;
|
|
@@ -62,7 +56,6 @@ var SplitsCacheInMemory = /** @class */ (function (_super) {
|
|
|
62
56
|
this.ttCache[ttName]--; // Update tt cache
|
|
63
57
|
if (!this.ttCache[ttName])
|
|
64
58
|
delete this.ttCache[ttName];
|
|
65
|
-
this.removeFromFlagSets(split.name, split.sets);
|
|
66
59
|
// Update the segments count.
|
|
67
60
|
if (usesSegments(split))
|
|
68
61
|
this.splitsWithSegmentsCount--;
|
|
@@ -91,44 +84,6 @@ var SplitsCacheInMemory = /** @class */ (function (_super) {
|
|
|
91
84
|
SplitsCacheInMemory.prototype.usesSegments = function () {
|
|
92
85
|
return this.getChangeNumber() === -1 || this.splitsWithSegmentsCount > 0;
|
|
93
86
|
};
|
|
94
|
-
SplitsCacheInMemory.prototype.getNamesByFlagSets = function (flagSets) {
|
|
95
|
-
var _this = this;
|
|
96
|
-
var toReturn = new _Set([]);
|
|
97
|
-
flagSets.forEach(function (flagSet) {
|
|
98
|
-
var featureFlagNames = _this.flagSetsCache[flagSet];
|
|
99
|
-
if (featureFlagNames) {
|
|
100
|
-
toReturn = returnSetsUnion(toReturn, featureFlagNames);
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
return toReturn;
|
|
104
|
-
};
|
|
105
|
-
SplitsCacheInMemory.prototype.addToFlagSets = function (featureFlag) {
|
|
106
|
-
var _this = this;
|
|
107
|
-
if (!featureFlag.sets)
|
|
108
|
-
return;
|
|
109
|
-
featureFlag.sets.forEach(function (featureFlagSet) {
|
|
110
|
-
if (_this.flagSetsFilter.length > 0 && !_this.flagSetsFilter.some(function (filterFlagSet) { return filterFlagSet === featureFlagSet; }))
|
|
111
|
-
return;
|
|
112
|
-
if (!_this.flagSetsCache[featureFlagSet])
|
|
113
|
-
_this.flagSetsCache[featureFlagSet] = new _Set([]);
|
|
114
|
-
_this.flagSetsCache[featureFlagSet].add(featureFlag.name);
|
|
115
|
-
});
|
|
116
|
-
};
|
|
117
|
-
SplitsCacheInMemory.prototype.removeFromFlagSets = function (featureFlagName, flagSets) {
|
|
118
|
-
var _this = this;
|
|
119
|
-
if (!flagSets)
|
|
120
|
-
return;
|
|
121
|
-
flagSets.forEach(function (flagSet) {
|
|
122
|
-
_this.removeNames(flagSet, featureFlagName);
|
|
123
|
-
});
|
|
124
|
-
};
|
|
125
|
-
SplitsCacheInMemory.prototype.removeNames = function (flagSetName, featureFlagName) {
|
|
126
|
-
if (!this.flagSetsCache[flagSetName])
|
|
127
|
-
return;
|
|
128
|
-
this.flagSetsCache[flagSetName].delete(featureFlagName);
|
|
129
|
-
if (this.flagSetsCache[flagSetName].size === 0)
|
|
130
|
-
delete this.flagSetsCache[flagSetName];
|
|
131
|
-
};
|
|
132
87
|
return SplitsCacheInMemory;
|
|
133
88
|
}(AbstractSplitsCacheSync));
|
|
134
89
|
export { SplitsCacheInMemory };
|
|
@@ -2,7 +2,6 @@ import { __extends } from "tslib";
|
|
|
2
2
|
import { isFiniteNumber, isNaNNumber } from '../../utils/lang';
|
|
3
3
|
import { LOG_PREFIX } from './constants';
|
|
4
4
|
import { AbstractSplitsCacheAsync } from '../AbstractSplitsCacheAsync';
|
|
5
|
-
import { _Set } from '../../utils/lang/sets';
|
|
6
5
|
/**
|
|
7
6
|
* Discard errors for an answer of multiple operations.
|
|
8
7
|
*/
|
|
@@ -169,16 +168,6 @@ var SplitsCacheInRedis = /** @class */ (function (_super) {
|
|
|
169
168
|
var _this = this;
|
|
170
169
|
return this.redis.keys(this.keys.searchPatternForSplitKeys()).then(function (listOfKeys) { return listOfKeys.map(_this.keys.extractKey); });
|
|
171
170
|
};
|
|
172
|
-
/**
|
|
173
|
-
* Get list of split names related to a given flag set names list.
|
|
174
|
-
* The returned promise is resolved with the list of split names,
|
|
175
|
-
* or rejected if wrapper operation fails.
|
|
176
|
-
* @todo this is a no-op method to be implemented
|
|
177
|
-
*/
|
|
178
|
-
SplitsCacheInRedis.prototype.getNamesByFlagSets = function () {
|
|
179
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
180
|
-
return new Promise(function (flagSets) { return new _Set([]); });
|
|
181
|
-
};
|
|
182
171
|
/**
|
|
183
172
|
* Check traffic type existence.
|
|
184
173
|
* The returned promise is resolved with a boolean indicating whether the TT exist or not.
|
|
@@ -2,7 +2,6 @@ import { __extends } from "tslib";
|
|
|
2
2
|
import { isFiniteNumber, isNaNNumber } from '../../utils/lang';
|
|
3
3
|
import { LOG_PREFIX } from './constants';
|
|
4
4
|
import { AbstractSplitsCacheAsync } from '../AbstractSplitsCacheAsync';
|
|
5
|
-
import { _Set } from '../../utils/lang/sets';
|
|
6
5
|
/**
|
|
7
6
|
* ISplitsCacheAsync implementation for pluggable storages.
|
|
8
7
|
*/
|
|
@@ -143,16 +142,6 @@ var SplitsCachePluggable = /** @class */ (function (_super) {
|
|
|
143
142
|
var _this = this;
|
|
144
143
|
return this.wrapper.getKeysByPrefix(this.keys.buildSplitKeyPrefix()).then(function (listOfKeys) { return listOfKeys.map(_this.keys.extractKey); });
|
|
145
144
|
};
|
|
146
|
-
/**
|
|
147
|
-
* Get list of split names related to a given flag set names list.
|
|
148
|
-
* The returned promise is resolved with the list of split names,
|
|
149
|
-
* or rejected if wrapper operation fails.
|
|
150
|
-
* @todo this is a no-op method to be implemented
|
|
151
|
-
*/
|
|
152
|
-
SplitsCachePluggable.prototype.getNamesByFlagSets = function () {
|
|
153
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
154
|
-
return new Promise(function (flagSets) { return new _Set([]); });
|
|
155
|
-
};
|
|
156
145
|
/**
|
|
157
146
|
* Check traffic type existence.
|
|
158
147
|
* The returned promise is resolved with a boolean indicating whether the TT exist or not.
|
|
@@ -5,5 +5,5 @@ import { splitChangesUpdaterFactory } from '../updaters/splitChangesUpdater';
|
|
|
5
5
|
* Creates a sync task that periodically executes a `splitChangesUpdater` task
|
|
6
6
|
*/
|
|
7
7
|
export function splitsSyncTaskFactory(fetchSplitChanges, storage, readiness, settings, isClientSide) {
|
|
8
|
-
return syncTaskFactory(settings.log, splitChangesUpdaterFactory(settings.log, splitChangesFetcherFactory(fetchSplitChanges), storage.splits, storage.segments,
|
|
8
|
+
return syncTaskFactory(settings.log, splitChangesUpdaterFactory(settings.log, splitChangesFetcherFactory(fetchSplitChanges), storage.splits, storage.segments, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, isClientSide), settings.scheduler.featuresRefreshRate, 'splitChangesUpdater');
|
|
9
9
|
}
|
|
@@ -2,7 +2,6 @@ import { _Set, setToArray } from '../../../utils/lang/sets';
|
|
|
2
2
|
import { timeout } from '../../../utils/promise/timeout';
|
|
3
3
|
import { SDK_SPLITS_ARRIVED, SDK_SPLITS_CACHE_LOADED } from '../../../readiness/constants';
|
|
4
4
|
import { SYNC_SPLITS_FETCH, SYNC_SPLITS_NEW, SYNC_SPLITS_REMOVED, SYNC_SPLITS_SEGMENTS, SYNC_SPLITS_FETCH_FAILS, SYNC_SPLITS_FETCH_RETRY } from '../../../logger/constants';
|
|
5
|
-
import { startsWith } from '../../../utils/lang';
|
|
6
5
|
// Checks that all registered segments have been fetched (changeNumber !== -1 for every segment).
|
|
7
6
|
// Returns a promise that could be rejected.
|
|
8
7
|
// @TODO review together with Segments and MySegments storage APIs
|
|
@@ -29,34 +28,15 @@ export function parseSegments(_a) {
|
|
|
29
28
|
}
|
|
30
29
|
return segments;
|
|
31
30
|
}
|
|
32
|
-
/**
|
|
33
|
-
* If there are defined filters and one feature flag doesn't match with them, its status is changed to 'ARCHIVE' to avoid storing it
|
|
34
|
-
* If there are set filter defined, names filter is ignored
|
|
35
|
-
*
|
|
36
|
-
* @param featureFlag feature flag to be evaluated
|
|
37
|
-
* @param filters splitFiltersValidation bySet | byName
|
|
38
|
-
*/
|
|
39
|
-
function matchFilters(featureFlag, filters) {
|
|
40
|
-
var _a = filters.groupedFilters, setsFilter = _a.bySet, namesFilter = _a.byName, prefixFilter = _a.byPrefix;
|
|
41
|
-
if (setsFilter.length > 0)
|
|
42
|
-
return featureFlag.sets && featureFlag.sets.some(function (featureFlagSet) { return setsFilter.indexOf(featureFlagSet) > -1; });
|
|
43
|
-
var namesFilterConfigured = namesFilter.length > 0;
|
|
44
|
-
var prefixFilterConfigured = prefixFilter.length > 0;
|
|
45
|
-
if (!namesFilterConfigured && !prefixFilterConfigured)
|
|
46
|
-
return true;
|
|
47
|
-
var matchNames = namesFilterConfigured && namesFilter.indexOf(featureFlag.name) > -1;
|
|
48
|
-
var matchPrefix = prefixFilterConfigured && prefixFilter.some(function (prefix) { return startsWith(featureFlag.name, prefix); });
|
|
49
|
-
return matchNames || matchPrefix;
|
|
50
|
-
}
|
|
51
31
|
/**
|
|
52
32
|
* Given the list of splits from /splitChanges endpoint, it returns the mutations,
|
|
53
33
|
* i.e., an object with added splits, removed splits and used segments.
|
|
54
34
|
* Exported for testing purposes.
|
|
55
35
|
*/
|
|
56
|
-
export function computeSplitsMutation(entries
|
|
36
|
+
export function computeSplitsMutation(entries) {
|
|
57
37
|
var segments = new _Set();
|
|
58
38
|
var computed = entries.reduce(function (accum, split) {
|
|
59
|
-
if (split.status === 'ACTIVE'
|
|
39
|
+
if (split.status === 'ACTIVE') {
|
|
60
40
|
accum.added.push([split.name, split]);
|
|
61
41
|
parseSegments(split).forEach(function (segmentName) {
|
|
62
42
|
segments.add(segmentName);
|
|
@@ -84,7 +64,7 @@ export function computeSplitsMutation(entries, filters) {
|
|
|
84
64
|
* @param requestTimeoutBeforeReady How long the updater will wait for the request to timeout. Default 0, i.e., never timeout.
|
|
85
65
|
* @param retriesOnFailureBeforeReady How many retries on `/splitChanges` we the updater do in case of failure or timeout. Default 0, i.e., no retries.
|
|
86
66
|
*/
|
|
87
|
-
export function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, segments,
|
|
67
|
+
export function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, segments, splitsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, isClientSide) {
|
|
88
68
|
if (requestTimeoutBeforeReady === void 0) { requestTimeoutBeforeReady = 0; }
|
|
89
69
|
if (retriesOnFailureBeforeReady === void 0) { retriesOnFailureBeforeReady = 0; }
|
|
90
70
|
var startingUp = true;
|
|
@@ -114,7 +94,7 @@ export function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, seg
|
|
|
114
94
|
splitChangesFetcher(since, noCache, till, _promiseDecorator))
|
|
115
95
|
.then(function (splitChanges) {
|
|
116
96
|
startingUp = false;
|
|
117
|
-
var mutation = computeSplitsMutation(splitChanges.splits
|
|
97
|
+
var mutation = computeSplitsMutation(splitChanges.splits);
|
|
118
98
|
log.debug(SYNC_SPLITS_NEW, [mutation.added.length]);
|
|
119
99
|
log.debug(SYNC_SPLITS_REMOVED, [mutation.removed.length]);
|
|
120
100
|
log.debug(SYNC_SPLITS_SEGMENTS, [mutation.segments.length]);
|
|
@@ -29,17 +29,6 @@ function getRedundantActiveFactories() {
|
|
|
29
29
|
return acum + usedKeysMap[sdkKey] - 1;
|
|
30
30
|
}, 0);
|
|
31
31
|
}
|
|
32
|
-
function getTelemetryFlagSetsStats(splitFiltersValidation) {
|
|
33
|
-
// Group every configured flag set in an unique array called originalSets
|
|
34
|
-
var flagSetsTotal = 0;
|
|
35
|
-
splitFiltersValidation.validFilters.forEach(function (filter) {
|
|
36
|
-
if (filter.type === 'bySet')
|
|
37
|
-
flagSetsTotal += filter.values.length;
|
|
38
|
-
});
|
|
39
|
-
var flagSetsValid = splitFiltersValidation.groupedFilters.bySet.length;
|
|
40
|
-
var flagSetsIgnored = flagSetsTotal - flagSetsValid;
|
|
41
|
-
return { flagSetsTotal: flagSetsTotal, flagSetsIgnored: flagSetsIgnored };
|
|
42
|
-
}
|
|
43
32
|
export function getTelemetryConfigStats(mode, storageType) {
|
|
44
33
|
return {
|
|
45
34
|
oM: OPERATION_MODE_MAP[mode],
|
|
@@ -58,7 +47,6 @@ export function telemetryCacheConfigAdapter(telemetry, settings) {
|
|
|
58
47
|
pop: function () {
|
|
59
48
|
var urls = settings.urls, scheduler = settings.scheduler;
|
|
60
49
|
var isClientSide = settings.core.key !== undefined;
|
|
61
|
-
var _a = getTelemetryFlagSetsStats(settings.sync.__splitFiltersValidation), flagSetsTotal = _a.flagSetsTotal, flagSetsIgnored = _a.flagSetsIgnored;
|
|
62
50
|
return objectAssign(getTelemetryConfigStats(settings.mode, settings.storage.type), {
|
|
63
51
|
sE: settings.streamingEnabled,
|
|
64
52
|
rR: {
|
|
@@ -86,9 +74,7 @@ export function telemetryCacheConfigAdapter(telemetry, settings) {
|
|
|
86
74
|
nR: telemetry.getNonReadyUsage(),
|
|
87
75
|
t: telemetry.popTags(),
|
|
88
76
|
i: settings.integrations && settings.integrations.map(function (int) { return int.type; }),
|
|
89
|
-
uC: settings.userConsent ? USER_CONSENT_MAP[settings.userConsent] : 0
|
|
90
|
-
fsT: flagSetsTotal,
|
|
91
|
-
fsI: flagSetsIgnored
|
|
77
|
+
uC: settings.userConsent ? USER_CONSENT_MAP[settings.userConsent] : 0
|
|
92
78
|
});
|
|
93
79
|
}
|
|
94
80
|
};
|
|
@@ -51,10 +51,6 @@ export var TREATMENT = 't';
|
|
|
51
51
|
export var TREATMENTS = 'ts';
|
|
52
52
|
export var TREATMENT_WITH_CONFIG = 'tc';
|
|
53
53
|
export var TREATMENTS_WITH_CONFIG = 'tcs';
|
|
54
|
-
export var TREATMENTS_BY_FLAGSET = 'tf';
|
|
55
|
-
export var TREATMENTS_BY_FLAGSETS = 'tfs';
|
|
56
|
-
export var TREATMENTS_WITH_CONFIG_BY_FLAGSET = 'tcf';
|
|
57
|
-
export var TREATMENTS_WITH_CONFIG_BY_FLAGSETS = 'tcfs';
|
|
58
54
|
export var TRACK = 'tr';
|
|
59
55
|
export var CONNECTION_ESTABLISHED = 0;
|
|
60
56
|
export var OCCUPANCY_PRI = 10;
|
package/esm/utils/lang/sets.js
CHANGED
|
@@ -95,10 +95,3 @@ export function __getSetConstructor() {
|
|
|
95
95
|
return SetPoly;
|
|
96
96
|
}
|
|
97
97
|
export var _Set = __getSetConstructor();
|
|
98
|
-
export function returnSetsUnion(set, set2) {
|
|
99
|
-
var result = new _Set(setToArray(set));
|
|
100
|
-
set2.forEach(function (value) {
|
|
101
|
-
result.add(value);
|
|
102
|
-
});
|
|
103
|
-
return result;
|
|
104
|
-
}
|