@splitsoftware/splitio-commons 3.0.0-rc.0 → 3.0.0-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 (189) hide show
  1. package/CHANGES.txt +8 -3
  2. package/cjs/evaluator/index.js +11 -11
  3. package/cjs/logger/constants.js +4 -4
  4. package/cjs/logger/messages/warn.js +0 -1
  5. package/cjs/readiness/constants.js +4 -4
  6. package/cjs/readiness/readinessManager.js +22 -22
  7. package/cjs/readiness/sdkReadinessManager.js +0 -16
  8. package/cjs/sdkClient/sdkLifecycle.js +2 -1
  9. package/cjs/sdkClient/trackMethod.js +2 -2
  10. package/cjs/sdkFactory/index.js +5 -5
  11. package/cjs/sdkManager/index.js +2 -2
  12. package/cjs/services/authProvider.js +67 -0
  13. package/cjs/services/secureSplitHttpClient.js +39 -0
  14. package/cjs/services/splitApi.js +15 -6
  15. package/cjs/storages/AbstractDefinitionsCacheAsync.js +51 -0
  16. package/cjs/storages/AbstractDefinitionsCacheSync.js +76 -0
  17. package/cjs/storages/KeyBuilder.js +6 -6
  18. package/cjs/storages/KeyBuilderCS.js +5 -5
  19. package/cjs/storages/KeyBuilderSS.js +2 -2
  20. package/cjs/storages/getRolloutPlan.js +3 -3
  21. package/cjs/storages/inLocalStorage/DefinitionsCacheInLocal.js +194 -0
  22. package/cjs/storages/inLocalStorage/RBSegmentsCacheInLocal.js +9 -9
  23. package/cjs/storages/inLocalStorage/index.js +6 -6
  24. package/cjs/storages/inLocalStorage/validateCache.js +3 -3
  25. package/cjs/storages/inMemory/DefinitionsCacheInMemory.js +121 -0
  26. package/cjs/storages/inMemory/InMemoryStorage.js +4 -4
  27. package/cjs/storages/inMemory/InMemoryStorageCS.js +5 -5
  28. package/cjs/storages/inMemory/RBSegmentsCacheInMemory.js +4 -4
  29. package/cjs/storages/inMemory/SegmentsCacheInMemory.js +1 -1
  30. package/cjs/storages/inMemory/TelemetryCacheInMemory.js +3 -3
  31. package/cjs/storages/inRedis/{SplitsCacheInRedis.js → DefinitionsCacheInRedis.js} +77 -77
  32. package/cjs/storages/inRedis/index.js +2 -2
  33. package/cjs/storages/pluggable/DefinitionsCachePluggable.js +212 -0
  34. package/cjs/storages/pluggable/index.js +2 -2
  35. package/cjs/storages/setRolloutPlan.js +5 -5
  36. package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +5 -5
  37. package/cjs/sync/polling/fetchers/splitChangesFetcher.js +1 -1
  38. package/cjs/sync/polling/pollingManagerCS.js +7 -7
  39. package/cjs/sync/polling/pollingManagerSS.js +3 -3
  40. package/cjs/sync/polling/syncTasks/definitionsSyncTask.js +1 -1
  41. package/cjs/sync/polling/syncTasks/segmentsSyncTask.js +2 -3
  42. package/cjs/sync/polling/updaters/definitionChangesUpdater.js +8 -8
  43. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +2 -2
  44. package/cjs/sync/streaming/SSEHandler/NotificationKeeper.js +1 -1
  45. package/cjs/sync/streaming/SSEHandler/index.js +1 -1
  46. package/cjs/sync/streaming/UpdateWorkers/{SplitsUpdateWorker.js → DefinitionsUpdateWorker.js} +15 -15
  47. package/cjs/sync/streaming/constants.js +3 -3
  48. package/cjs/sync/streaming/pushManager.js +13 -13
  49. package/cjs/sync/submitters/telemetrySubmitter.js +1 -2
  50. package/cjs/sync/syncManagerOnline.js +10 -8
  51. package/cjs/utils/Backoff.js +20 -0
  52. package/cjs/utils/lang/sets.js +4 -4
  53. package/cjs/utils/settingsValidation/index.js +2 -0
  54. package/cjs/utils/settingsValidation/url.js +6 -2
  55. package/esm/evaluator/index.js +11 -11
  56. package/esm/logger/constants.js +1 -1
  57. package/esm/logger/messages/warn.js +0 -1
  58. package/esm/readiness/constants.js +3 -3
  59. package/esm/readiness/readinessManager.js +23 -23
  60. package/esm/readiness/sdkReadinessManager.js +1 -17
  61. package/esm/sdkClient/sdkLifecycle.js +2 -1
  62. package/esm/sdkClient/trackMethod.js +2 -2
  63. package/esm/sdkFactory/index.js +6 -6
  64. package/esm/sdkManager/index.js +2 -2
  65. package/esm/services/authProvider.js +63 -0
  66. package/esm/services/secureSplitHttpClient.js +35 -0
  67. package/esm/services/splitApi.js +15 -6
  68. package/esm/storages/AbstractDefinitionsCacheAsync.js +48 -0
  69. package/esm/storages/AbstractDefinitionsCacheSync.js +71 -0
  70. package/esm/storages/KeyBuilder.js +6 -6
  71. package/esm/storages/KeyBuilderCS.js +5 -5
  72. package/esm/storages/KeyBuilderSS.js +2 -2
  73. package/esm/storages/getRolloutPlan.js +3 -3
  74. package/esm/storages/inLocalStorage/DefinitionsCacheInLocal.js +191 -0
  75. package/esm/storages/inLocalStorage/RBSegmentsCacheInLocal.js +6 -6
  76. package/esm/storages/inLocalStorage/index.js +6 -6
  77. package/esm/storages/inLocalStorage/validateCache.js +3 -3
  78. package/esm/storages/inMemory/DefinitionsCacheInMemory.js +118 -0
  79. package/esm/storages/inMemory/InMemoryStorage.js +4 -4
  80. package/esm/storages/inMemory/InMemoryStorageCS.js +5 -5
  81. package/esm/storages/inMemory/RBSegmentsCacheInMemory.js +1 -1
  82. package/esm/storages/inMemory/SegmentsCacheInMemory.js +1 -1
  83. package/esm/storages/inMemory/TelemetryCacheInMemory.js +3 -3
  84. package/esm/storages/inRedis/{SplitsCacheInRedis.js → DefinitionsCacheInRedis.js} +76 -76
  85. package/esm/storages/inRedis/index.js +2 -2
  86. package/esm/storages/pluggable/DefinitionsCachePluggable.js +209 -0
  87. package/esm/storages/pluggable/index.js +2 -2
  88. package/esm/storages/setRolloutPlan.js +5 -5
  89. package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +6 -6
  90. package/esm/sync/polling/fetchers/splitChangesFetcher.js +1 -1
  91. package/esm/sync/polling/pollingManagerCS.js +4 -4
  92. package/esm/sync/polling/pollingManagerSS.js +3 -3
  93. package/esm/sync/polling/syncTasks/definitionsSyncTask.js +1 -1
  94. package/esm/sync/polling/syncTasks/segmentsSyncTask.js +2 -3
  95. package/esm/sync/polling/updaters/definitionChangesUpdater.js +9 -9
  96. package/esm/sync/polling/updaters/mySegmentsUpdater.js +1 -1
  97. package/esm/sync/streaming/SSEHandler/NotificationKeeper.js +2 -2
  98. package/esm/sync/streaming/SSEHandler/index.js +2 -2
  99. package/esm/sync/streaming/UpdateWorkers/{SplitsUpdateWorker.js → DefinitionsUpdateWorker.js} +14 -14
  100. package/esm/sync/streaming/constants.js +2 -2
  101. package/esm/sync/streaming/pushManager.js +14 -14
  102. package/esm/sync/submitters/telemetrySubmitter.js +1 -2
  103. package/esm/sync/syncManagerOnline.js +9 -7
  104. package/esm/utils/Backoff.js +20 -0
  105. package/esm/utils/lang/sets.js +4 -4
  106. package/esm/utils/settingsValidation/index.js +2 -0
  107. package/esm/utils/settingsValidation/url.js +6 -2
  108. package/package.json +1 -1
  109. package/src/dtos/types.ts +2 -2
  110. package/src/evaluator/index.ts +11 -11
  111. package/src/logger/constants.ts +1 -1
  112. package/src/logger/messages/warn.ts +0 -1
  113. package/src/readiness/constants.ts +3 -3
  114. package/src/readiness/readinessManager.ts +22 -22
  115. package/src/readiness/sdkReadinessManager.ts +1 -16
  116. package/src/readiness/types.ts +10 -16
  117. package/src/sdkClient/sdkLifecycle.ts +2 -1
  118. package/src/sdkClient/trackMethod.ts +2 -2
  119. package/src/sdkFactory/index.ts +5 -5
  120. package/src/sdkManager/index.ts +6 -6
  121. package/src/services/authProvider.ts +86 -0
  122. package/src/services/secureSplitHttpClient.ts +44 -0
  123. package/src/services/splitApi.ts +18 -7
  124. package/src/services/types.ts +6 -1
  125. package/src/storages/AbstractDefinitionsCacheAsync.ts +63 -0
  126. package/src/storages/AbstractDefinitionsCacheSync.ts +95 -0
  127. package/src/storages/KeyBuilder.ts +6 -6
  128. package/src/storages/KeyBuilderCS.ts +6 -6
  129. package/src/storages/KeyBuilderSS.ts +2 -2
  130. package/src/storages/getRolloutPlan.ts +3 -3
  131. package/src/storages/inLocalStorage/DefinitionsCacheInLocal.ts +234 -0
  132. package/src/storages/inLocalStorage/RBSegmentsCacheInLocal.ts +6 -6
  133. package/src/storages/inLocalStorage/index.ts +6 -6
  134. package/src/storages/inLocalStorage/validateCache.ts +4 -4
  135. package/src/storages/inMemory/DefinitionsCacheInMemory.ts +130 -0
  136. package/src/storages/inMemory/InMemoryStorage.ts +4 -4
  137. package/src/storages/inMemory/InMemoryStorageCS.ts +5 -5
  138. package/src/storages/inMemory/RBSegmentsCacheInMemory.ts +1 -1
  139. package/src/storages/inMemory/SegmentsCacheInMemory.ts +1 -1
  140. package/src/storages/inMemory/TelemetryCacheInMemory.ts +3 -3
  141. package/src/storages/inRedis/{SplitsCacheInRedis.ts → DefinitionsCacheInRedis.ts} +67 -67
  142. package/src/storages/inRedis/index.ts +2 -2
  143. package/src/storages/pluggable/DefinitionsCachePluggable.ts +230 -0
  144. package/src/storages/pluggable/index.ts +2 -2
  145. package/src/storages/setRolloutPlan.ts +7 -7
  146. package/src/storages/types.ts +19 -19
  147. package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +8 -8
  148. package/src/sync/polling/fetchers/splitChangesFetcher.ts +3 -3
  149. package/src/sync/polling/pollingManagerCS.ts +4 -4
  150. package/src/sync/polling/pollingManagerSS.ts +5 -4
  151. package/src/sync/polling/syncTasks/definitionsSyncTask.ts +1 -1
  152. package/src/sync/polling/syncTasks/segmentsSyncTask.ts +3 -4
  153. package/src/sync/polling/types.ts +1 -1
  154. package/src/sync/polling/updaters/definitionChangesUpdater.ts +11 -11
  155. package/src/sync/polling/updaters/mySegmentsUpdater.ts +1 -1
  156. package/src/sync/streaming/AuthClient/index.ts +2 -2
  157. package/src/sync/streaming/AuthClient/types.ts +14 -11
  158. package/src/sync/streaming/SSEClient/index.ts +2 -2
  159. package/src/sync/streaming/SSEClient/types.ts +2 -2
  160. package/src/sync/streaming/SSEHandler/NotificationKeeper.ts +2 -2
  161. package/src/sync/streaming/SSEHandler/index.ts +2 -2
  162. package/src/sync/streaming/UpdateWorkers/{SplitsUpdateWorker.ts → DefinitionsUpdateWorker.ts} +16 -16
  163. package/src/sync/streaming/constants.ts +2 -2
  164. package/src/sync/streaming/pushManager.ts +16 -16
  165. package/src/sync/streaming/types.ts +2 -2
  166. package/src/sync/submitters/telemetrySubmitter.ts +1 -2
  167. package/src/sync/syncManagerOnline.ts +10 -8
  168. package/src/utils/Backoff.ts +21 -0
  169. package/src/utils/inputValidation/trafficTypeExistence.ts +2 -2
  170. package/src/utils/jwt/types.ts +1 -1
  171. package/src/utils/lang/sets.ts +4 -2
  172. package/src/utils/settingsValidation/index.ts +2 -0
  173. package/src/utils/settingsValidation/url.ts +6 -2
  174. package/types/splitio.d.ts +27 -8
  175. package/cjs/storages/AbstractSplitsCacheAsync.js +0 -51
  176. package/cjs/storages/AbstractSplitsCacheSync.js +0 -76
  177. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +0 -194
  178. package/cjs/storages/inMemory/SplitsCacheInMemory.js +0 -121
  179. package/cjs/storages/pluggable/SplitsCachePluggable.js +0 -212
  180. package/esm/storages/AbstractSplitsCacheAsync.js +0 -48
  181. package/esm/storages/AbstractSplitsCacheSync.js +0 -71
  182. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +0 -191
  183. package/esm/storages/inMemory/SplitsCacheInMemory.js +0 -118
  184. package/esm/storages/pluggable/SplitsCachePluggable.js +0 -209
  185. package/src/storages/AbstractSplitsCacheAsync.ts +0 -63
  186. package/src/storages/AbstractSplitsCacheSync.ts +0 -95
  187. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +0 -234
  188. package/src/storages/inMemory/SplitsCacheInMemory.ts +0 -130
  189. package/src/storages/pluggable/SplitsCachePluggable.ts +0 -230
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PluggableStorage = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var KeyBuilderSS_1 = require("../KeyBuilderSS");
6
- var SplitsCachePluggable_1 = require("./SplitsCachePluggable");
6
+ var DefinitionsCachePluggable_1 = require("./DefinitionsCachePluggable");
7
7
  var SegmentsCachePluggable_1 = require("./SegmentsCachePluggable");
8
8
  var ImpressionsCachePluggable_1 = require("./ImpressionsCachePluggable");
9
9
  var EventsCachePluggable_1 = require("./EventsCachePluggable");
@@ -106,7 +106,7 @@ function PluggableStorage(options) {
106
106
  return e; // Propagate error for shared clients
107
107
  });
108
108
  return {
109
- splits: new SplitsCachePluggable_1.SplitsCachePluggable(log, keys, wrapper, settings.sync.__splitFiltersValidation),
109
+ definitions: new DefinitionsCachePluggable_1.DefinitionsCachePluggable(log, keys, wrapper, settings.sync.__splitFiltersValidation),
110
110
  rbSegments: new RBSegmentsCachePluggable_1.RBSegmentsCachePluggable(log, keys, wrapper),
111
111
  segments: new SegmentsCachePluggable_1.SegmentsCachePluggable(log, keys, wrapper),
112
112
  impressions: isPartialConsumer ? new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(impressionsQueueSize) : new ImpressionsCachePluggable_1.ImpressionsCachePluggable(log, keys.buildImpressionsKey(), wrapper, metadata),
@@ -24,16 +24,16 @@ exports.validateRolloutPlan = validateRolloutPlan;
24
24
  * Otherwise, the storage is handled as a server-side storage (segments is an instance of SegmentsCache).
25
25
  */
26
26
  function setRolloutPlan(log, rolloutPlan, storage, matchingKey) {
27
- var splits = storage.splits, rbSegments = storage.rbSegments, segments = storage.segments, largeSegments = storage.largeSegments;
27
+ var definitions = storage.definitions, rbSegments = storage.rbSegments, segments = storage.segments, largeSegments = storage.largeSegments;
28
28
  var _a = rolloutPlan.splitChanges, ff = _a.ff, rbs = _a.rbs;
29
29
  log.debug("storage: set feature flags and segments".concat(matchingKey ? " for key ".concat(matchingKey) : ''));
30
- if (splits && ff) {
31
- splits.clear();
32
- splits.update(ff.d, [], ff.t);
30
+ if (definitions && ff) {
31
+ definitions.clear();
32
+ definitions.update(ff.d || [], [], ff.t);
33
33
  }
34
34
  if (rbSegments && rbs) {
35
35
  rbSegments.clear();
36
- rbSegments.update(rbs.d, [], rbs.t);
36
+ rbSegments.update(rbs.d || [], [], rbs.t);
37
37
  }
38
38
  var segmentChanges = rolloutPlan.segmentChanges;
39
39
  if (matchingKey) { // add memberships data (client-side)
@@ -10,7 +10,7 @@ var constants_3 = require("../../../logger/constants");
10
10
  * Offline equivalent of `splitChangesUpdaterFactory`
11
11
  */
12
12
  function fromObjectUpdaterFactory(splitsParser, storage, readiness, settings) {
13
- var log = settings.log, splitsCache = storage.splits;
13
+ var log = settings.log, definitions = storage.definitions;
14
14
  var startingUp = true;
15
15
  return function objectUpdater() {
16
16
  var splits = [];
@@ -39,16 +39,16 @@ function fromObjectUpdaterFactory(splitsParser, storage, readiness, settings) {
39
39
  });
40
40
  });
41
41
  return Promise.all([
42
- splitsCache.clear(),
43
- splitsCache.update(splits, [], Date.now())
42
+ definitions.clear(),
43
+ definitions.update(splits, [], Date.now())
44
44
  ]).then(function () {
45
- readiness.splits.emit(constants_2.SDK_SPLITS_ARRIVED, { type: constants_2.FLAGS_UPDATE, names: [] });
45
+ readiness.definitions.emit(constants_2.SDK_DEFINITIONS_ARRIVED, { type: constants_2.FLAGS_UPDATE, names: [] });
46
46
  if (startingUp) {
47
47
  startingUp = false;
48
48
  Promise.resolve(storage.validateCache ? storage.validateCache() : { initialCacheLoad: true /* Fallback: assume initial load when validateCache doesn't exist */ }).then(function (cacheMetadata) {
49
49
  // Emits SDK_READY_FROM_CACHE
50
50
  if (!cacheMetadata.initialCacheLoad) {
51
- readiness.splits.emit(constants_2.SDK_SPLITS_CACHE_LOADED, cacheMetadata);
51
+ readiness.definitions.emit(constants_2.SDK_DEFINITIONS_CACHE_LOADED, cacheMetadata);
52
52
  }
53
53
  // Emits SDK_READY
54
54
  readiness.segments.emit(constants_2.SDK_SEGMENTS_ARRIVED, { type: constants_2.SEGMENTS_UPDATE, names: [] });
@@ -61,7 +61,7 @@ function splitChangesFetcherFactory(params) {
61
61
  lastProxyCheckTimestamp = undefined;
62
62
  return splitChangesFetcher(-1, undefined, undefined, -1)
63
63
  .then(function (splitChangesResponse) {
64
- return Promise.all([storage.splits.clear(), storage.rbSegments.clear()])
64
+ return Promise.all([storage.definitions.clear(), storage.rbSegments.clear()])
65
65
  .then(function () { return splitChangesResponse; });
66
66
  });
67
67
  }
@@ -7,7 +7,7 @@ var definitionsSyncTask_1 = require("./syncTasks/definitionsSyncTask");
7
7
  var key_1 = require("../../utils/key");
8
8
  var constants_1 = require("../../readiness/constants");
9
9
  var constants_2 = require("../../logger/constants");
10
- var AbstractSplitsCacheSync_1 = require("../../storages/AbstractSplitsCacheSync");
10
+ var AbstractDefinitionsCacheSync_1 = require("../../storages/AbstractDefinitionsCacheSync");
11
11
  /**
12
12
  * Expose start / stop mechanism for polling data from services.
13
13
  * For client-side API with multiple clients.
@@ -32,10 +32,10 @@ function pollingManagerCSFactory(params, definitionChangesFetcher) {
32
32
  });
33
33
  }
34
34
  // smart pausing
35
- readiness.splits.on(constants_1.SDK_SPLITS_ARRIVED, function () {
35
+ readiness.definitions.on(constants_1.SDK_DEFINITIONS_ARRIVED, function () {
36
36
  if (!definitionsSyncTask.isRunning())
37
37
  return; // noop if not doing polling
38
- var usingSegments = (0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage);
38
+ var usingSegments = (0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage);
39
39
  if (usingSegments !== mySegmentsSyncTask.isRunning()) {
40
40
  log.info(constants_2.POLLING_SMART_PAUSING, [usingSegments ? 'ON' : 'OFF']);
41
41
  if (usingSegments) {
@@ -50,13 +50,13 @@ function pollingManagerCSFactory(params, definitionChangesFetcher) {
50
50
  var mySegmentsSyncTask = (0, mySegmentsSyncTask_1.mySegmentsSyncTaskFactory)(splitApi.fetchMemberships, storage, readiness, settings, matchingKey);
51
51
  // smart ready
52
52
  function smartReady(metadata) {
53
- if (!readiness.isReady() && !(0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage))
53
+ if (!readiness.isReady() && !(0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage))
54
54
  readiness.segments.emit(constants_1.SDK_SEGMENTS_ARRIVED, metadata);
55
55
  }
56
- if (!(0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage))
56
+ if (!(0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage))
57
57
  setTimeout(smartReady, 0);
58
58
  else
59
- readiness.splits.once(constants_1.SDK_SPLITS_ARRIVED, smartReady);
59
+ readiness.definitions.once(constants_1.SDK_DEFINITIONS_ARRIVED, smartReady);
60
60
  mySegmentsSyncTasks[matchingKey] = mySegmentsSyncTask;
61
61
  return mySegmentsSyncTask;
62
62
  }
@@ -67,7 +67,7 @@ function pollingManagerCSFactory(params, definitionChangesFetcher) {
67
67
  start: function () {
68
68
  log.info(constants_2.POLLING_START);
69
69
  definitionsSyncTask.start();
70
- if ((0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage))
70
+ if ((0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage))
71
71
  startMySegmentsSyncTasks();
72
72
  },
73
73
  // Stop periodic fetching (polling)
@@ -7,11 +7,11 @@ var constants_1 = require("../../logger/constants");
7
7
  /**
8
8
  * Expose start / stop mechanism for pulling data from services.
9
9
  */
10
- function pollingManagerSSFactory(params, definitionChangesFetcher) {
11
- var splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
10
+ function pollingManagerSSFactory(params, definitionChangesFetcher, segmentChangesFetcher) {
11
+ var storage = params.storage, readiness = params.readiness, settings = params.settings;
12
12
  var log = settings.log;
13
13
  var definitionsSyncTask = (0, definitionsSyncTask_1.definitionsSyncTaskFactory)(definitionChangesFetcher, storage, readiness, settings);
14
- var segmentsSyncTask = (0, segmentsSyncTask_1.segmentsSyncTaskFactory)(splitApi.fetchSegmentChanges, storage, readiness, settings);
14
+ var segmentsSyncTask = (0, segmentsSyncTask_1.segmentsSyncTaskFactory)(segmentChangesFetcher, storage, readiness, settings);
15
15
  return {
16
16
  definitionsSyncTask: definitionsSyncTask,
17
17
  segmentsSyncTask: segmentsSyncTask,
@@ -7,6 +7,6 @@ var definitionChangesUpdater_1 = require("../updaters/definitionChangesUpdater")
7
7
  * Creates a sync task that periodically executes a `definitionChangesUpdater` task
8
8
  */
9
9
  function definitionsSyncTaskFactory(definitionChangesFetcher, storage, readiness, settings, isClientSide) {
10
- return (0, syncTask_1.syncTaskFactory)(settings.log, (0, definitionChangesUpdater_1.definitionChangesUpdaterFactory)(settings.log, definitionChangesFetcher, storage, settings.sync.__splitFiltersValidation, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, isClientSide), settings.scheduler.featuresRefreshRate, 'definitionChangesUpdater');
10
+ return (0, syncTask_1.syncTaskFactory)(settings.log, (0, definitionChangesUpdater_1.definitionChangesUpdaterFactory)(settings.log, definitionChangesFetcher, storage, settings.sync.__splitFiltersValidation, readiness.definitions, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, isClientSide), settings.scheduler.featuresRefreshRate, 'definitionChangesUpdater');
11
11
  }
12
12
  exports.definitionsSyncTaskFactory = definitionsSyncTaskFactory;
@@ -2,12 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.segmentsSyncTaskFactory = void 0;
4
4
  var syncTask_1 = require("../../syncTask");
5
- var segmentChangesFetcher_1 = require("../fetchers/segmentChangesFetcher");
6
5
  var segmentChangesUpdater_1 = require("../updaters/segmentChangesUpdater");
7
6
  /**
8
7
  * Creates a sync task that periodically executes a `segmentChangesUpdater` task
9
8
  */
10
- function segmentsSyncTaskFactory(fetchSegmentChanges, storage, readiness, settings) {
11
- return (0, syncTask_1.syncTaskFactory)(settings.log, (0, segmentChangesUpdater_1.segmentChangesUpdaterFactory)(settings.log, (0, segmentChangesFetcher_1.segmentChangesFetcherFactory)(fetchSegmentChanges), storage.segments, readiness, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.segmentsRefreshRate, 'segmentChangesUpdater');
9
+ function segmentsSyncTaskFactory(segmentChangesFetcher, storage, readiness, settings) {
10
+ return (0, syncTask_1.syncTaskFactory)(settings.log, (0, segmentChangesUpdater_1.segmentChangesUpdaterFactory)(settings.log, segmentChangesFetcher, storage.segments, readiness, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.segmentsRefreshRate, 'segmentChangesUpdater');
12
11
  }
13
12
  exports.segmentsSyncTaskFactory = segmentsSyncTaskFactory;
@@ -106,10 +106,10 @@ function convertInstantUpdateToDefinitionChanges(instantUpdate) {
106
106
  * @param requestTimeoutBeforeReady - How long the updater will wait for the request to timeout. Default 0, i.e., never timeout.
107
107
  * @param retriesOnFailureBeforeReady - How many retries on `/splitChanges` or `/configs` we the updater do in case of failure or timeout. Default 0, i.e., no retries.
108
108
  */
109
- function definitionChangesUpdaterFactory(log, definitionChangesFetcher, storage, splitFiltersValidation, splitsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, isClientSide) {
109
+ function definitionChangesUpdaterFactory(log, definitionChangesFetcher, storage, splitFiltersValidation, definitionsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, isClientSide) {
110
110
  if (requestTimeoutBeforeReady === void 0) { requestTimeoutBeforeReady = 0; }
111
111
  if (retriesOnFailureBeforeReady === void 0) { retriesOnFailureBeforeReady = 0; }
112
- var splits = storage.splits, rbSegments = storage.rbSegments, segments = storage.segments;
112
+ var definitions = storage.definitions, rbSegments = storage.rbSegments, segments = storage.segments;
113
113
  var startingUp = true;
114
114
  /** timeout decorator for `definitionChangesFetcher` promise */
115
115
  function _promiseDecorator(promise) {
@@ -151,7 +151,7 @@ function definitionChangesUpdaterFactory(log, definitionChangesFetcher, storage,
151
151
  var _a = computeMutation(definitionChanges.d, usedSegments, splitFiltersValidation), added = _a.added, removed = _a.removed, names = _a.names;
152
152
  updatedDefinitions = names;
153
153
  log.debug(constants_2.SYNC_UPDATE, [definitionChangesFetcher.type, added.length, removed.length]);
154
- ffUpdate = splits.update(added, removed, definitionChanges.d.till);
154
+ ffUpdate = definitions.update(added, removed, definitionChanges.d.till);
155
155
  }
156
156
  var rbsUpdate = false;
157
157
  if (definitionChanges.rbs) {
@@ -167,9 +167,9 @@ function definitionChangesUpdaterFactory(log, definitionChangesFetcher, storage,
167
167
  if (storage.save)
168
168
  storage.save();
169
169
  startingUp = false;
170
- if (splitsEventEmitter) {
171
- // To emit SDK_SPLITS_ARRIVED for server-side SDK, we must check that all registered segments have been fetched
172
- return Promise.resolve(!splitsEventEmitter.splitsArrived || ((ffChanged || rbsChanged) && (isClientSide || checkAllSegmentsExist(segments))))
170
+ if (definitionsEventEmitter) {
171
+ // To emit SDK_DEFINITIONS_ARRIVED for server-side SDK, we must check that all registered segments have been fetched
172
+ return Promise.resolve(!definitionsEventEmitter.definitionsArrived || ((ffChanged || rbsChanged) && (isClientSide || checkAllSegmentsExist(segments))))
173
173
  .catch(function () { return false; } /** noop. just to handle a possible `checkAllSegmentsExist` rejection, before emitting SDK event */)
174
174
  .then(function (emitSplitsArrivedEvent) {
175
175
  // emit SDK events
@@ -178,7 +178,7 @@ function definitionChangesUpdaterFactory(log, definitionChangesFetcher, storage,
178
178
  type: updatedDefinitions.length > 0 ? definitionChangesFetcher.type === 'configs' ? constants_1.CONFIGS_UPDATE : constants_1.FLAGS_UPDATE : constants_1.SEGMENTS_UPDATE,
179
179
  names: updatedDefinitions.length > 0 ? updatedDefinitions : []
180
180
  };
181
- splitsEventEmitter.emit(constants_1.SDK_SPLITS_ARRIVED, metadata);
181
+ definitionsEventEmitter.emit(constants_1.SDK_DEFINITIONS_ARRIVED, metadata);
182
182
  }
183
183
  return true;
184
184
  });
@@ -200,7 +200,7 @@ function definitionChangesUpdaterFactory(log, definitionChangesFetcher, storage,
200
200
  });
201
201
  }
202
202
  // `getChangeNumber` never rejects or throws error
203
- return Promise.all([splits.getChangeNumber(), rbSegments.getChangeNumber()]).then(_definitionChangesUpdater);
203
+ return Promise.all([definitions.getChangeNumber(), rbSegments.getChangeNumber()]).then(_definitionChangesUpdater);
204
204
  };
205
205
  }
206
206
  exports.definitionChangesUpdaterFactory = definitionChangesUpdaterFactory;
@@ -5,7 +5,7 @@ var timeout_1 = require("../../../utils/promise/timeout");
5
5
  var constants_1 = require("../../../readiness/constants");
6
6
  var constants_2 = require("../../../logger/constants");
7
7
  var constants_3 = require("../../streaming/constants");
8
- var AbstractSplitsCacheSync_1 = require("../../../storages/AbstractSplitsCacheSync");
8
+ var AbstractDefinitionsCacheSync_1 = require("../../../storages/AbstractDefinitionsCacheSync");
9
9
  /**
10
10
  * factory of MySegments updater, a task that:
11
11
  * - fetches mySegments using `mySegmentsFetcher`
@@ -37,7 +37,7 @@ function mySegmentsUpdaterFactory(log, mySegmentsFetcher, storage, segmentsEvent
37
37
  if (storage.save)
38
38
  storage.save();
39
39
  // Notify update if required
40
- if ((0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage) && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
40
+ if ((0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage) && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
41
41
  readyOnAlreadyExistentState = false;
42
42
  segmentsEventEmitter.emit(constants_1.SDK_SEGMENTS_ARRIVED, { type: constants_1.SEGMENTS_UPDATE, names: [] });
43
43
  }
@@ -73,7 +73,7 @@ function notificationKeeperFactory(pushEmitter, telemetryTracker) {
73
73
  c.cTime = timestamp;
74
74
  if (controlType === constants_2.ControlType.STREAMING_DISABLED) {
75
75
  telemetryTracker.streamingEvent(constants_1.STREAMING_STATUS, constants_1.DISABLED);
76
- pushEmitter.emit(constants_2.PUSH_NONRETRYABLE_ERROR);
76
+ pushEmitter.emit(constants_2.PUSH_NON_RETRYABLE_ERROR);
77
77
  }
78
78
  else if (hasPublishers) {
79
79
  if (controlType === constants_2.ControlType.STREAMING_PAUSED && hasResumed) {
@@ -51,7 +51,7 @@ function SSEHandlerFactory(log, pushEmitter, telemetryTracker) {
51
51
  pushEmitter.emit(constants_1.PUSH_RETRYABLE_ERROR);
52
52
  }
53
53
  else {
54
- pushEmitter.emit(constants_1.PUSH_NONRETRYABLE_ERROR);
54
+ pushEmitter.emit(constants_1.PUSH_NON_RETRYABLE_ERROR);
55
55
  }
56
56
  },
57
57
  /* NotificationProcessor */
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SplitsUpdateWorker = void 0;
3
+ exports.DefinitionsUpdateWorker = void 0;
4
4
  var constants_1 = require("../../../logger/constants");
5
5
  var constants_2 = require("../../../readiness/constants");
6
6
  var Backoff_1 = require("../../../utils/Backoff");
@@ -9,19 +9,19 @@ var constants_4 = require("../constants");
9
9
  var parseUtils_1 = require("../parseUtils");
10
10
  var constants_5 = require("./constants");
11
11
  /**
12
- * SplitsUpdateWorker factory
12
+ * DefinitionsUpdateWorker factory
13
13
  */
14
- function SplitsUpdateWorker(log, storage, definitionsSyncTask, splitsEventEmitter, telemetryTracker, segmentsSyncTask) {
15
- var ff = SplitsUpdateWorker(storage.splits);
16
- var rbs = SplitsUpdateWorker(storage.rbSegments);
17
- function SplitsUpdateWorker(cache) {
14
+ function DefinitionsUpdateWorker(log, storage, definitionsSyncTask, definitionsEventEmitter, telemetryTracker, segmentsSyncTask) {
15
+ var ff = DefinitionsUpdateWorker(storage.definitions);
16
+ var rbs = DefinitionsUpdateWorker(storage.rbSegments);
17
+ function DefinitionsUpdateWorker(cache) {
18
18
  var maxChangeNumber = -1;
19
19
  var handleNewEvent = false;
20
20
  var isHandlingEvent;
21
21
  var cdnBypass;
22
22
  var instantUpdate;
23
- var backoff = new Backoff_1.Backoff(__handleSplitUpdateCall, constants_5.FETCH_BACKOFF_BASE, constants_5.FETCH_BACKOFF_MAX_WAIT);
24
- function __handleSplitUpdateCall() {
23
+ var backoff = new Backoff_1.Backoff(__handleDefinitionUpdateCall, constants_5.FETCH_BACKOFF_BASE, constants_5.FETCH_BACKOFF_MAX_WAIT);
24
+ function __handleDefinitionUpdateCall() {
25
25
  isHandlingEvent = true;
26
26
  if (maxChangeNumber > cache.getChangeNumber()) {
27
27
  handleNewEvent = false;
@@ -30,7 +30,7 @@ function SplitsUpdateWorker(log, storage, definitionsSyncTask, splitsEventEmitte
30
30
  if (!isHandlingEvent)
31
31
  return; // halt if `stop` has been called
32
32
  if (handleNewEvent) {
33
- __handleSplitUpdateCall();
33
+ __handleDefinitionUpdateCall();
34
34
  }
35
35
  else {
36
36
  if (instantUpdate)
@@ -55,7 +55,7 @@ function SplitsUpdateWorker(log, storage, definitionsSyncTask, splitsEventEmitte
55
55
  else {
56
56
  backoff.reset();
57
57
  cdnBypass = true;
58
- __handleSplitUpdateCall();
58
+ __handleDefinitionUpdateCall();
59
59
  }
60
60
  }
61
61
  });
@@ -83,7 +83,7 @@ function SplitsUpdateWorker(log, storage, definitionsSyncTask, splitsEventEmitte
83
83
  instantUpdate = { payload: payload, changeNumber: changeNumber, type: type };
84
84
  }
85
85
  if (backoff.timeoutID || !isHandlingEvent)
86
- __handleSplitUpdateCall();
86
+ __handleDefinitionUpdateCall();
87
87
  backoff.reset();
88
88
  },
89
89
  stop: function () {
@@ -118,11 +118,11 @@ function SplitsUpdateWorker(log, storage, definitionsSyncTask, splitsEventEmitte
118
118
  * @param splitName - name of split to kill
119
119
  * @param defaultTreatment - default treatment value
120
120
  */
121
- killSplit: function (_a) {
121
+ killDefinition: function (_a) {
122
122
  var changeNumber = _a.changeNumber, splitName = _a.splitName, defaultTreatment = _a.defaultTreatment;
123
- if (storage.splits.killLocally(splitName, defaultTreatment, changeNumber)) {
123
+ if (storage.definitions.killLocally(splitName, defaultTreatment, changeNumber)) {
124
124
  // trigger an SDK_UPDATE if Split was killed locally
125
- splitsEventEmitter.emit(constants_2.SDK_SPLITS_ARRIVED, true);
125
+ definitionsEventEmitter.emit(constants_2.SDK_DEFINITIONS_ARRIVED, true);
126
126
  }
127
127
  // queues the SplitChanges fetch (only if changeNumber is newer)
128
128
  ff.put({ changeNumber: changeNumber });
@@ -133,4 +133,4 @@ function SplitsUpdateWorker(log, storage, definitionsSyncTask, splitsEventEmitte
133
133
  }
134
134
  };
135
135
  }
136
- exports.SplitsUpdateWorker = SplitsUpdateWorker;
136
+ exports.DefinitionsUpdateWorker = DefinitionsUpdateWorker;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ControlType = exports.OCCUPANCY = exports.CONTROL = exports.RB_SEGMENT_UPDATE = exports.SPLIT_UPDATE = exports.SPLIT_KILL = exports.SEGMENT_UPDATE = exports.MEMBERSHIPS_LS_UPDATE = exports.MEMBERSHIPS_MS_UPDATE = exports.PUSH_SUBSYSTEM_DOWN = exports.PUSH_SUBSYSTEM_UP = exports.PUSH_RETRYABLE_ERROR = exports.PUSH_NONRETRYABLE_ERROR = exports.SECONDS_BEFORE_EXPIRATION = void 0;
3
+ exports.ControlType = exports.OCCUPANCY = exports.CONTROL = exports.RB_SEGMENT_UPDATE = exports.SPLIT_UPDATE = exports.SPLIT_KILL = exports.SEGMENT_UPDATE = exports.MEMBERSHIPS_LS_UPDATE = exports.MEMBERSHIPS_MS_UPDATE = exports.PUSH_SUBSYSTEM_DOWN = exports.PUSH_SUBSYSTEM_UP = exports.PUSH_RETRYABLE_ERROR = exports.PUSH_NON_RETRYABLE_ERROR = exports.SECONDS_BEFORE_EXPIRATION = void 0;
4
4
  // time for refresh token
5
5
  exports.SECONDS_BEFORE_EXPIRATION = 600;
6
6
  // Internal SDK events, subscribed by SyncManager and PushManager
@@ -8,7 +8,7 @@ exports.SECONDS_BEFORE_EXPIRATION = 600;
8
8
  * emitted on SSE and Authenticate non-recoverable errors, STREAMING_DISABLED control notification and authentication with pushEnabled false
9
9
  * triggers `handleNonRetryableError` call
10
10
  */
11
- exports.PUSH_NONRETRYABLE_ERROR = 'PUSH_NONRETRYABLE_ERROR';
11
+ exports.PUSH_NON_RETRYABLE_ERROR = 'PUSH_NON_RETRYABLE_ERROR';
12
12
  /**
13
13
  * emitted on SSE and Authenticate recoverable errors
14
14
  * triggers `handleRetryableError` call
@@ -20,7 +20,7 @@ exports.PUSH_RETRYABLE_ERROR = 'PUSH_RETRYABLE_ERROR';
20
20
  */
21
21
  exports.PUSH_SUBSYSTEM_UP = 'PUSH_SUBSYSTEM_UP';
22
22
  /**
23
- * emitted on STREAMING_PAUSED control notification, OCCUPANCY equal to 0, PUSH_NONRETRYABLE_ERROR and PUSH_RETRYABLE_ERROR events.
23
+ * emitted on STREAMING_PAUSED control notification, OCCUPANCY equal to 0, PUSH_NON_RETRYABLE_ERROR and PUSH_RETRYABLE_ERROR events.
24
24
  * triggers `startPolling` and `stopWorkers` calls
25
25
  */
26
26
  exports.PUSH_SUBSYSTEM_DOWN = 'PUSH_SUBSYSTEM_DOWN';
@@ -6,7 +6,7 @@ var Backoff_1 = require("../../utils/Backoff");
6
6
  var SSEHandler_1 = require("./SSEHandler");
7
7
  var MySegmentsUpdateWorker_1 = require("./UpdateWorkers/MySegmentsUpdateWorker");
8
8
  var SegmentsUpdateWorker_1 = require("./UpdateWorkers/SegmentsUpdateWorker");
9
- var SplitsUpdateWorker_1 = require("./UpdateWorkers/SplitsUpdateWorker");
9
+ var DefinitionsUpdateWorker_1 = require("./UpdateWorkers/DefinitionsUpdateWorker");
10
10
  var AuthClient_1 = require("./AuthClient");
11
11
  var lang_1 = require("../../utils/lang");
12
12
  var SSEClient_1 = require("./SSEClient");
@@ -45,8 +45,8 @@ function pushManagerFactory(params, pollingManager) {
45
45
  // init workers
46
46
  // MySegmentsUpdateWorker (client-side) are initiated in `add` method
47
47
  var segmentsUpdateWorker = userKey ? undefined : (0, SegmentsUpdateWorker_1.SegmentsUpdateWorker)(log, pollingManager.segmentsSyncTask, storage.segments);
48
- // For server-side we pass the segmentsSyncTask, used by SplitsUpdateWorker to fetch new segments
49
- var splitsUpdateWorker = (0, SplitsUpdateWorker_1.SplitsUpdateWorker)(log, storage, pollingManager.definitionsSyncTask, readiness.splits, telemetryTracker, userKey ? undefined : pollingManager.segmentsSyncTask);
48
+ // For server-side we pass the segmentsSyncTask, used by DefinitionsUpdateWorker to fetch new segments
49
+ var definitionsUpdateWorker = (0, DefinitionsUpdateWorker_1.DefinitionsUpdateWorker)(log, storage, pollingManager.definitionsSyncTask, readiness.definitions, telemetryTracker, userKey ? undefined : pollingManager.segmentsSyncTask);
50
50
  // [Only for client-side] map of hashes to user keys, to dispatch membership update events to the corresponding MySegmentsUpdateWorker
51
51
  var userKeyHashes = {};
52
52
  // [Only for client-side] map of user keys to their corresponding hash64 and MySegmentsUpdateWorkers.
@@ -54,10 +54,10 @@ function pushManagerFactory(params, pollingManager) {
54
54
  var clients = {};
55
55
  // [Only for client-side] variable to flag that a new client was added. It is needed to reconnect streaming.
56
56
  var connectForNewClient = false;
57
- // flag that indicates if `stop/disconnectPush` was called, either by the SyncManager, when the client is destroyed, or due to a PUSH_NONRETRYABLE_ERROR error.
57
+ // flag that indicates if `stop/disconnectPush` was called, either by the SyncManager, when the client is destroyed, or due to a PUSH_NON_RETRYABLE_ERROR error.
58
58
  // It is used to halt the `connectPush` process if it was in progress.
59
59
  var disconnected;
60
- // flag that indicates a PUSH_NONRETRYABLE_ERROR, condition with which starting pushManager again is ignored.
60
+ // flag that indicates a PUSH_NON_RETRYABLE_ERROR, condition with which starting pushManager again is ignored.
61
61
  // true if STREAMING_DISABLED control event, or 'pushEnabled: false', or non-recoverable SSE or Auth errors.
62
62
  var disabled; // `disabled` implies `disconnected === true`
63
63
  /** PushManager functions related to initialization */
@@ -96,11 +96,11 @@ function pushManagerFactory(params, pollingManager) {
96
96
  authenticate(userKeys).then(function (authData) {
97
97
  if (disconnected)
98
98
  return;
99
- // 'pushEnabled: false' is handled as a PUSH_NONRETRYABLE_ERROR instead of PUSH_SUBSYSTEM_DOWN, in order to
99
+ // 'pushEnabled: false' is handled as a PUSH_NON_RETRYABLE_ERROR instead of PUSH_SUBSYSTEM_DOWN, in order to
100
100
  // close the sseClient in case the org has been bloqued while the instance was connected to streaming
101
101
  if (!authData.pushEnabled) {
102
102
  log.info(constants_2.STREAMING_DISABLED);
103
- pushEmitter.emit(constants_1.PUSH_NONRETRYABLE_ERROR);
103
+ pushEmitter.emit(constants_1.PUSH_NON_RETRYABLE_ERROR);
104
104
  return;
105
105
  }
106
106
  // [Only for client-side] don't open SSE connection if a new shared client was added, since it means that a new authentication is taking place
@@ -115,7 +115,7 @@ function pushManagerFactory(params, pollingManager) {
115
115
  // Handle 4XX HTTP errors: 401 (invalid SDK Key) or 400 (using incorrect SDK Key, i.e., client-side SDK Key on server-side)
116
116
  if (error.statusCode >= 400 && error.statusCode < 500) {
117
117
  telemetryTracker.streamingEvent(constants_3.AUTH_REJECTION);
118
- pushEmitter.emit(constants_1.PUSH_NONRETRYABLE_ERROR);
118
+ pushEmitter.emit(constants_1.PUSH_NON_RETRYABLE_ERROR);
119
119
  return;
120
120
  }
121
121
  // Handle other HTTP and network errors as recoverable errors
@@ -139,7 +139,7 @@ function pushManagerFactory(params, pollingManager) {
139
139
  }
140
140
  // cancel scheduled fetch retries of Splits, Segments, and MySegments Update Workers
141
141
  function stopWorkers() {
142
- splitsUpdateWorker.stop();
142
+ definitionsUpdateWorker.stop();
143
143
  if (userKey)
144
144
  (0, lang_1.forOwn)(clients, function (_a) {
145
145
  var worker = _a.worker;
@@ -155,7 +155,7 @@ function pushManagerFactory(params, pollingManager) {
155
155
  connectPushRetryBackoff.reset();
156
156
  });
157
157
  /** Fallback to polling without retry due to: STREAMING_DISABLED control event, or 'pushEnabled: false', or non-recoverable SSE and Authentication errors */
158
- pushEmitter.on(constants_1.PUSH_NONRETRYABLE_ERROR, function handleNonRetryableError() {
158
+ pushEmitter.on(constants_1.PUSH_NON_RETRYABLE_ERROR, function handleNonRetryableError() {
159
159
  disabled = true;
160
160
  // Note: `stopWorkers` is been called twice, but it is not harmful
161
161
  disconnectPush();
@@ -181,9 +181,9 @@ function pushManagerFactory(params, pollingManager) {
181
181
  connectPush();
182
182
  });
183
183
  /** Functions related to synchronization (Queues and Workers in the spec) */
184
- pushEmitter.on(constants_1.SPLIT_KILL, splitsUpdateWorker.killSplit);
185
- pushEmitter.on(constants_1.SPLIT_UPDATE, splitsUpdateWorker.put);
186
- pushEmitter.on(constants_1.RB_SEGMENT_UPDATE, splitsUpdateWorker.put);
184
+ pushEmitter.on(constants_1.SPLIT_KILL, definitionsUpdateWorker.killDefinition);
185
+ pushEmitter.on(constants_1.SPLIT_UPDATE, definitionsUpdateWorker.put);
186
+ pushEmitter.on(constants_1.RB_SEGMENT_UPDATE, definitionsUpdateWorker.put);
187
187
  function handleMySegmentsUpdate(parsedData) {
188
188
  switch (parsedData.u) {
189
189
  case types_1.UpdateStrategy.BoundedFetchRequest: {
@@ -107,13 +107,12 @@ function telemetrySubmitterFactory(params) {
107
107
  var telemetry = params.storage.telemetry, now = params.platform.now;
108
108
  if (!telemetry || !now)
109
109
  return; // No submitter created if telemetry cache is not defined
110
- var settings = params.settings, _a = params.settings, log = _a.log, telemetryRefreshRate = _a.scheduler.telemetryRefreshRate, splitApi = params.splitApi, readiness = params.readiness, sdkReadinessManager = params.sdkReadinessManager;
110
+ var settings = params.settings, _a = params.settings, log = _a.log, telemetryRefreshRate = _a.scheduler.telemetryRefreshRate, splitApi = params.splitApi, readiness = params.readiness;
111
111
  var stopTimer = (0, timer_1.timer)(now);
112
112
  var submitter = (0, submitter_1.firstPushWindowDecorator)((0, submitter_1.submitterFactory)(log, splitApi.postMetricsUsage, telemetry, telemetryRefreshRate, undefined, 0, true), telemetryRefreshRate);
113
113
  readiness.gate.once(constants_2.SDK_READY_FROM_CACHE, function () {
114
114
  telemetry.recordTimeUntilReadyFromCache(stopTimer());
115
115
  });
116
- sdkReadinessManager.incInternalReadyCbCount();
117
116
  readiness.gate.once(constants_2.SDK_READY, function () {
118
117
  telemetry.recordTimeUntilReady(stopTimer());
119
118
  // Post config data when the SDK is ready and if the telemetry submitter was started
@@ -7,8 +7,9 @@ var constants_2 = require("../logger/constants");
7
7
  var consent_1 = require("../consent");
8
8
  var constants_3 = require("../utils/constants");
9
9
  var constants_4 = require("../readiness/constants");
10
- var AbstractSplitsCacheSync_1 = require("../storages/AbstractSplitsCacheSync");
10
+ var AbstractDefinitionsCacheSync_1 = require("../storages/AbstractDefinitionsCacheSync");
11
11
  var splitChangesFetcher_1 = require("./polling/fetchers/splitChangesFetcher");
12
+ var segmentChangesFetcher_1 = require("./polling/fetchers/segmentChangesFetcher");
12
13
  /**
13
14
  * Online SyncManager factory.
14
15
  * Can be used for server-side API, and client-side API with or without multiple clients.
@@ -18,21 +19,22 @@ var splitChangesFetcher_1 = require("./polling/fetchers/splitChangesFetcher");
18
19
  * @param pushManagerFactory - optional to build a SyncManager with or without streaming support
19
20
  * @param definitionChangesFetcherFactory - optional to replace the default split changes fetcher
20
21
  */
21
- function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory, definitionChangesFetcherFactory) {
22
- if (definitionChangesFetcherFactory === void 0) { definitionChangesFetcherFactory = splitChangesFetcher_1.splitChangesFetcherFactory; }
22
+ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory, definitionFetcherFactory, segmentFetcherFactory) {
23
+ if (definitionFetcherFactory === void 0) { definitionFetcherFactory = splitChangesFetcher_1.splitChangesFetcherFactory; }
24
+ if (segmentFetcherFactory === void 0) { segmentFetcherFactory = function (params) { return (0, segmentChangesFetcher_1.segmentChangesFetcherFactory)(params.splitApi.fetchSegmentChanges); }; }
23
25
  /**
24
26
  * SyncManager factory for modular SDK
25
27
  */
26
28
  return function (params) {
27
29
  var settings = params.settings, _a = params.settings, log = _a.log, streamingEnabled = _a.streamingEnabled, syncEnabled = _a.sync.enabled, telemetryTracker = params.telemetryTracker, storage = params.storage, readiness = params.readiness;
28
30
  /** Polling Manager */
29
- var pollingManager = pollingManagerFactory && pollingManagerFactory(params, definitionChangesFetcherFactory(params));
31
+ var pollingManager = pollingManagerFactory && pollingManagerFactory(params, definitionFetcherFactory(params), segmentFetcherFactory(params));
30
32
  /** Push Manager */
31
33
  var pushManager = syncEnabled && streamingEnabled && pollingManager && pushManagerFactory ?
32
34
  pushManagerFactory(params, pollingManager) :
33
35
  undefined;
34
36
  /** Submitter Manager */
35
- // It is not inyected as push and polling managers, because at the moment it is required
37
+ // It is not injected as push and polling managers, because at the moment it is required
36
38
  var submitterManager = (0, submitterManager_1.submitterManagerFactory)(params);
37
39
  /** Sync Manager logic */
38
40
  function startPolling() {
@@ -80,7 +82,7 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory, def
80
82
  if (startFirstTime) {
81
83
  // Emits SDK_READY_FROM_CACHE
82
84
  if (!cacheMetadata.initialCacheLoad) {
83
- readiness.splits.emit(constants_4.SDK_SPLITS_CACHE_LOADED, cacheMetadata);
85
+ readiness.definitions.emit(constants_4.SDK_DEFINITIONS_CACHE_LOADED, cacheMetadata);
84
86
  }
85
87
  }
86
88
  // start syncing splits and segments
@@ -139,7 +141,7 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory, def
139
141
  if (pushManager) {
140
142
  if (pollingManager.isRunning()) {
141
143
  // if doing polling, we must start the periodic fetch of data
142
- if ((0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage))
144
+ if ((0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage))
143
145
  mySegmentsSyncTask.start();
144
146
  }
145
147
  else {
@@ -149,7 +151,7 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory, def
149
151
  }
150
152
  }
151
153
  else {
152
- if ((0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage))
154
+ if ((0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage))
153
155
  mySegmentsSyncTask.start();
154
156
  }
155
157
  }
@@ -27,6 +27,26 @@ var Backoff = /** @class */ (function () {
27
27
  this.attempts++;
28
28
  return delayInMillis;
29
29
  };
30
+ /**
31
+ * Schedule a delayed call to `cb`
32
+ * @returns a promise that resolves/rejects with the result of the `cb` function, which must return a promise.
33
+ */
34
+ Backoff.prototype.scheduleCallAsync = function () {
35
+ var _this = this;
36
+ var delayInMillis = Math.min(this.baseMillis * Math.pow(2, this.attempts), this.maxMillis);
37
+ if (this.timeoutID)
38
+ clearTimeout(this.timeoutID);
39
+ this.attempts++;
40
+ return new Promise(function (resolve, reject) {
41
+ _this.timeoutID = setTimeout(function () {
42
+ _this.timeoutID = undefined;
43
+ _this.cb().then(resolve, reject);
44
+ }, delayInMillis);
45
+ });
46
+ };
47
+ /**
48
+ * Reset the backoff attempts
49
+ */
30
50
  Backoff.prototype.reset = function () {
31
51
  this.attempts = 0;
32
52
  if (this.timeoutID) {
@@ -15,9 +15,9 @@ function returnSetsUnion(set, set2) {
15
15
  return new Set(setToArray(set).concat(setToArray(set2)));
16
16
  }
17
17
  exports.returnSetsUnion = returnSetsUnion;
18
- function returnDifference(list, list2) {
19
- if (list === void 0) { list = []; }
20
- if (list2 === void 0) { list2 = []; }
21
- return list.filter(function (item) { return list2.indexOf(item) === -1; });
18
+ function returnDifference(list1, list2) {
19
+ list1 = list1 || [];
20
+ list2 = list2 || [];
21
+ return list1.filter(function (item) { return list2.indexOf(item) === -1; });
22
22
  }
23
23
  exports.returnDifference = returnDifference;
@@ -55,6 +55,8 @@ exports.base = {
55
55
  streaming: 'https://streaming.split.io',
56
56
  // Telemetry Server
57
57
  telemetry: 'https://telemetry.split.io/api',
58
+ // Configs Server
59
+ configs: 'https://configs.split.io/api',
58
60
  },
59
61
  // Defines which kind of storage we should instantiate.
60
62
  storage: undefined,
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.url = void 0;
4
- var telemetryEndpointMatcher = /^\/v1\/metrics\/(config|usage)/;
4
+ var telemetryEndpointMatcher = /^\/v1\/(metrics|keys)\/(config|usage|ss|cs)/;
5
5
  var eventsEndpointMatcher = /^\/(testImpressions|metrics|events)/;
6
- var authEndpointMatcher = /^\/v2\/auth/;
6
+ var authEndpointMatcher = /^\/(v2|v3)\/auth/;
7
7
  var streamingEndpointMatcher = /^\/(sse|event-stream)/;
8
+ var configsEndpointMatcher = /^\/v1\/(configs|segmentChanges)/;
8
9
  /**
9
10
  * Get URL based on a given target (path).
10
11
  * ATM, it is only used for testing purposes.
@@ -26,6 +27,9 @@ function url(settings, target) {
26
27
  if (streamingEndpointMatcher.test(target)) {
27
28
  return "".concat(settings.urls.streaming).concat(target);
28
29
  }
30
+ if (configsEndpointMatcher.test(target)) {
31
+ return "".concat(settings.urls.configs).concat(target);
32
+ }
29
33
  return "".concat(settings.urls.sdk).concat(target);
30
34
  }
31
35
  exports.url = url;