@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.
Files changed (135) hide show
  1. package/cjs/evaluator/index.js +1 -18
  2. package/cjs/logger/constants.js +2 -7
  3. package/cjs/logger/messages/error.js +0 -2
  4. package/cjs/logger/messages/info.js +1 -1
  5. package/cjs/logger/messages/warn.js +1 -3
  6. package/cjs/sdkClient/client.js +0 -33
  7. package/cjs/sdkClient/clientAttributesDecoration.js +0 -20
  8. package/cjs/sdkClient/clientCS.js +4 -5
  9. package/cjs/sdkClient/clientInputValidation.js +3 -52
  10. package/cjs/sdkManager/index.js +1 -2
  11. package/cjs/services/splitApi.js +1 -7
  12. package/cjs/storages/KeyBuilder.js +0 -3
  13. package/cjs/storages/KeyBuilderSS.js +0 -4
  14. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +27 -63
  15. package/cjs/storages/inLocalStorage/index.js +2 -2
  16. package/cjs/storages/inMemory/InMemoryStorage.js +2 -2
  17. package/cjs/storages/inMemory/InMemoryStorageCS.js +3 -3
  18. package/cjs/storages/inMemory/SplitsCacheInMemory.js +2 -47
  19. package/cjs/storages/inRedis/SplitsCacheInRedis.js +0 -11
  20. package/cjs/storages/pluggable/SplitsCachePluggable.js +0 -11
  21. package/cjs/sync/polling/syncTasks/splitsSyncTask.js +1 -1
  22. package/cjs/sync/polling/updaters/splitChangesUpdater.js +4 -24
  23. package/cjs/sync/submitters/telemetrySubmitter.js +1 -15
  24. package/cjs/utils/constants/index.js +2 -6
  25. package/cjs/utils/lang/sets.js +1 -9
  26. package/cjs/utils/settingsValidation/splitFilters.js +2 -77
  27. package/esm/evaluator/index.js +0 -16
  28. package/esm/logger/constants.js +0 -5
  29. package/esm/logger/messages/error.js +0 -2
  30. package/esm/logger/messages/info.js +1 -1
  31. package/esm/logger/messages/warn.js +1 -3
  32. package/esm/sdkClient/client.js +2 -35
  33. package/esm/sdkClient/clientAttributesDecoration.js +0 -20
  34. package/esm/sdkClient/clientCS.js +4 -5
  35. package/esm/sdkClient/clientInputValidation.js +3 -52
  36. package/esm/sdkManager/index.js +1 -2
  37. package/esm/services/splitApi.js +1 -7
  38. package/esm/storages/KeyBuilder.js +0 -3
  39. package/esm/storages/KeyBuilderSS.js +0 -4
  40. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +27 -63
  41. package/esm/storages/inLocalStorage/index.js +2 -2
  42. package/esm/storages/inMemory/InMemoryStorage.js +2 -2
  43. package/esm/storages/inMemory/InMemoryStorageCS.js +3 -3
  44. package/esm/storages/inMemory/SplitsCacheInMemory.js +2 -47
  45. package/esm/storages/inRedis/SplitsCacheInRedis.js +0 -11
  46. package/esm/storages/pluggable/SplitsCachePluggable.js +0 -11
  47. package/esm/sync/polling/syncTasks/splitsSyncTask.js +1 -1
  48. package/esm/sync/polling/updaters/splitChangesUpdater.js +4 -24
  49. package/esm/sync/submitters/telemetrySubmitter.js +1 -15
  50. package/esm/utils/constants/index.js +0 -4
  51. package/esm/utils/lang/sets.js +0 -7
  52. package/esm/utils/settingsValidation/splitFilters.js +2 -76
  53. package/package.json +1 -1
  54. package/src/dtos/types.ts +2 -3
  55. package/src/evaluator/index.ts +0 -24
  56. package/src/logger/constants.ts +0 -5
  57. package/src/logger/messages/error.ts +0 -2
  58. package/src/logger/messages/info.ts +1 -1
  59. package/src/logger/messages/warn.ts +1 -3
  60. package/src/sdkClient/client.ts +2 -42
  61. package/src/sdkClient/clientAttributesDecoration.ts +0 -24
  62. package/src/sdkClient/clientCS.ts +4 -5
  63. package/src/sdkClient/clientInputValidation.ts +4 -56
  64. package/src/sdkManager/index.ts +1 -2
  65. package/src/services/splitApi.ts +1 -6
  66. package/src/storages/AbstractSegmentsCacheSync.ts +1 -0
  67. package/src/storages/AbstractSplitsCacheAsync.ts +0 -2
  68. package/src/storages/AbstractSplitsCacheSync.ts +0 -3
  69. package/src/storages/KeyBuilder.ts +0 -4
  70. package/src/storages/KeyBuilderSS.ts +0 -4
  71. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +28 -74
  72. package/src/storages/inLocalStorage/index.ts +2 -2
  73. package/src/storages/inMemory/InMemoryStorage.ts +2 -2
  74. package/src/storages/inMemory/InMemoryStorageCS.ts +3 -3
  75. package/src/storages/inMemory/SplitsCacheInMemory.ts +1 -50
  76. package/src/storages/inRedis/SplitsCacheInRedis.ts +0 -12
  77. package/src/storages/pluggable/SplitsCachePluggable.ts +0 -12
  78. package/src/storages/types.ts +3 -7
  79. package/src/sync/polling/syncTasks/splitsSyncTask.ts +0 -1
  80. package/src/sync/polling/updaters/splitChangesUpdater.ts +4 -27
  81. package/src/sync/submitters/telemetrySubmitter.ts +2 -19
  82. package/src/sync/submitters/types.ts +1 -7
  83. package/src/types.ts +1 -118
  84. package/src/utils/constants/index.ts +0 -4
  85. package/src/utils/lang/sets.ts +0 -8
  86. package/src/utils/settingsValidation/splitFilters.ts +2 -82
  87. package/types/dtos/types.d.ts +0 -1
  88. package/types/evaluator/index.d.ts +0 -1
  89. package/types/logger/constants.d.ts +0 -5
  90. package/types/sdkClient/clientAttributesDecoration.d.ts +0 -4
  91. package/types/sdkClient/identity.d.ts +6 -0
  92. package/types/storages/AbstractSegmentsCacheSync.d.ts +1 -0
  93. package/types/storages/AbstractSplitsCacheAsync.d.ts +0 -2
  94. package/types/storages/AbstractSplitsCacheSync.d.ts +0 -2
  95. package/types/storages/KeyBuilder.d.ts +0 -1
  96. package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +1 -6
  97. package/types/storages/inMemory/SplitsCacheInMemory.d.ts +1 -9
  98. package/types/storages/inRedis/SplitsCacheInRedis.d.ts +0 -8
  99. package/types/storages/pluggable/SplitsCachePluggable.d.ts +0 -8
  100. package/types/storages/types.d.ts +0 -4
  101. package/types/sync/polling/updaters/splitChangesUpdater.d.ts +3 -3
  102. package/types/sync/submitters/types.d.ts +1 -7
  103. package/types/types.d.ts +1 -118
  104. package/types/utils/constants/index.d.ts +0 -4
  105. package/types/utils/inputValidation/sdkKey.d.ts +7 -0
  106. package/types/utils/lang/sets.d.ts +0 -1
  107. package/types/utils/settingsValidation/splitFilters.d.ts +0 -1
  108. package/cjs/myLogger.js +0 -34
  109. package/esm/myLogger.js +0 -31
  110. package/src/myLogger.ts +0 -36
  111. package/types/myLogger.d.ts +0 -5
  112. package/types/sdkClient/types.d.ts +0 -18
  113. package/types/storages/inMemory/CountsCacheInMemory.d.ts +0 -20
  114. package/types/storages/inMemory/LatenciesCacheInMemory.d.ts +0 -20
  115. package/types/storages/inRedis/CountsCacheInRedis.d.ts +0 -9
  116. package/types/storages/inRedis/LatenciesCacheInRedis.d.ts +0 -9
  117. package/types/storages/metadataBuilder.d.ts +0 -3
  118. package/types/sync/offline/LocalhostFromFile.d.ts +0 -2
  119. package/types/sync/offline/splitsParser/splitsParserFromFile.d.ts +0 -2
  120. package/types/sync/offline/updaters/splitChangesUpdater.d.ts +0 -0
  121. package/types/sync/submitters/eventsSyncTask.d.ts +0 -8
  122. package/types/sync/submitters/impressionCountsSubmitterInRedis.d.ts +0 -5
  123. package/types/sync/submitters/impressionCountsSyncTask.d.ts +0 -13
  124. package/types/sync/submitters/impressionsSyncTask.d.ts +0 -14
  125. package/types/sync/submitters/metricsSyncTask.d.ts +0 -12
  126. package/types/sync/submitters/submitterSyncTask.d.ts +0 -10
  127. package/types/sync/submitters/uniqueKeysSubmitterInRedis.d.ts +0 -5
  128. package/types/sync/syncTaskComposite.d.ts +0 -5
  129. package/types/trackers/filter/bloomFilter.d.ts +0 -10
  130. package/types/trackers/filter/dictionaryFilter.d.ts +0 -8
  131. package/types/trackers/filter/types.d.ts +0 -5
  132. package/types/utils/timeTracker/index.d.ts +0 -70
  133. /package/types/storages/inMemory/{uniqueKeysCacheInMemory.d.ts → UniqueKeysCacheInMemory.d.ts} +0 -0
  134. /package/types/storages/inMemory/{uniqueKeysCacheInMemoryCS.d.ts → UniqueKeysCacheInMemoryCS.d.ts} +0 -0
  135. /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, maybeFlagSetNameOrNames) {
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 = false;
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 && (splitOrSplits || flagSetOrFlagSets.length > 0) && attributes !== false;
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
  }
@@ -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) {
@@ -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: { bySet: [], byName: [], byPrefix: [] }, validFilters: [] }; }
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 queryString = this.splitFiltersValidation.queryString;
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 there is cache, clear it
220
- if (this.checkCache())
221
- this.clear();
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(__splitFiltersValidation);
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(__splitFiltersValidation);
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, _c = _a.sync, impressionsMode = _c.impressionsMode, __splitFiltersValidation = _c.__splitFiltersValidation;
16
- var splits = new SplitsCacheInMemory(__splitFiltersValidation);
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, _c = _a.sync, impressionsMode = _c.impressionsMode, __splitFiltersValidation = _c.__splitFiltersValidation;
16
- var splits = new SplitsCacheInMemory(__splitFiltersValidation);
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(__splitFiltersValidation);
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(splitFiltersValidation) {
12
- if (splitFiltersValidation === void 0) { splitFiltersValidation = { queryString: null, groupedFilters: { bySet: [], byName: [], byPrefix: [] }, validFilters: [] }; }
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, settings.sync.__splitFiltersValidation, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, isClientSide), settings.scheduler.featuresRefreshRate, 'splitChangesUpdater');
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, filters) {
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' && matchFilters(split, filters)) {
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, splitFiltersValidation, splitsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, isClientSide) {
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, splitFiltersValidation);
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;
@@ -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
- }