@splitsoftware/splitio-commons 1.16.1-rc.1 → 1.16.1-rc.10

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 (138) hide show
  1. package/CHANGES.txt +4 -0
  2. package/cjs/logger/constants.js +5 -4
  3. package/cjs/logger/messages/info.js +2 -1
  4. package/cjs/logger/messages/warn.js +1 -1
  5. package/cjs/readiness/readinessManager.js +7 -12
  6. package/cjs/services/splitApi.js +4 -8
  7. package/cjs/storages/AbstractSegmentsCacheSync.js +1 -6
  8. package/cjs/storages/AbstractSplitsCacheAsync.js +2 -2
  9. package/cjs/storages/AbstractSplitsCacheSync.js +7 -5
  10. package/cjs/storages/KeyBuilder.js +0 -3
  11. package/cjs/storages/KeyBuilderCS.js +6 -0
  12. package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +23 -2
  13. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +4 -16
  14. package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +5 -1
  15. package/cjs/storages/inMemory/SplitsCacheInMemory.js +6 -15
  16. package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +4 -11
  17. package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
  18. package/cjs/sync/polling/pollingManagerCS.js +33 -51
  19. package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  20. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +23 -19
  21. package/cjs/sync/streaming/SSEHandler/index.js +7 -8
  22. package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +8 -4
  23. package/cjs/sync/streaming/constants.js +2 -3
  24. package/cjs/sync/streaming/parseUtils.js +14 -9
  25. package/cjs/sync/streaming/pushManager.js +29 -52
  26. package/cjs/sync/submitters/telemetrySubmitter.js +0 -2
  27. package/cjs/sync/syncManagerOnline.js +14 -24
  28. package/cjs/utils/constants/index.js +1 -1
  29. package/cjs/utils/settingsValidation/index.js +1 -5
  30. package/esm/logger/constants.js +2 -1
  31. package/esm/logger/messages/info.js +2 -1
  32. package/esm/logger/messages/warn.js +1 -1
  33. package/esm/readiness/readinessManager.js +7 -12
  34. package/esm/services/splitApi.js +5 -9
  35. package/esm/storages/AbstractSegmentsCacheSync.js +1 -6
  36. package/esm/storages/AbstractSplitsCacheAsync.js +2 -2
  37. package/esm/storages/AbstractSplitsCacheSync.js +5 -3
  38. package/esm/storages/KeyBuilder.js +0 -3
  39. package/esm/storages/KeyBuilderCS.js +6 -0
  40. package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +23 -2
  41. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +5 -17
  42. package/esm/storages/inMemory/MySegmentsCacheInMemory.js +5 -1
  43. package/esm/storages/inMemory/SplitsCacheInMemory.js +7 -16
  44. package/esm/sync/polling/fetchers/mySegmentsFetcher.js +4 -11
  45. package/esm/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
  46. package/esm/sync/polling/pollingManagerCS.js +34 -52
  47. package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  48. package/esm/sync/polling/updaters/mySegmentsUpdater.js +21 -17
  49. package/esm/sync/streaming/SSEHandler/index.js +8 -9
  50. package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +8 -4
  51. package/esm/sync/streaming/constants.js +1 -2
  52. package/esm/sync/streaming/parseUtils.js +12 -8
  53. package/esm/sync/streaming/pushManager.js +31 -53
  54. package/esm/sync/submitters/telemetrySubmitter.js +0 -2
  55. package/esm/sync/syncManagerOnline.js +15 -25
  56. package/esm/utils/constants/index.js +1 -1
  57. package/esm/utils/settingsValidation/index.js +1 -5
  58. package/package.json +1 -1
  59. package/src/dtos/types.ts +14 -12
  60. package/src/logger/constants.ts +2 -1
  61. package/src/logger/messages/info.ts +2 -1
  62. package/src/logger/messages/warn.ts +1 -1
  63. package/src/readiness/readinessManager.ts +7 -9
  64. package/src/readiness/types.ts +0 -1
  65. package/src/services/splitApi.ts +6 -11
  66. package/src/services/splitHttpClient.ts +1 -1
  67. package/src/services/types.ts +2 -3
  68. package/src/storages/AbstractSegmentsCacheSync.ts +2 -6
  69. package/src/storages/AbstractSplitsCacheAsync.ts +2 -2
  70. package/src/storages/AbstractSplitsCacheSync.ts +6 -4
  71. package/src/storages/KeyBuilder.ts +0 -3
  72. package/src/storages/KeyBuilderCS.ts +9 -0
  73. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +26 -2
  74. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +5 -20
  75. package/src/storages/inMemory/MySegmentsCacheInMemory.ts +7 -1
  76. package/src/storages/inMemory/SplitsCacheInMemory.ts +7 -13
  77. package/src/storages/types.ts +6 -5
  78. package/src/sync/polling/fetchers/mySegmentsFetcher.ts +7 -14
  79. package/src/sync/polling/fetchers/segmentChangesFetcher.ts +1 -1
  80. package/src/sync/polling/fetchers/types.ts +2 -2
  81. package/src/sync/polling/pollingManagerCS.ts +29 -61
  82. package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +12 -13
  83. package/src/sync/polling/types.ts +8 -7
  84. package/src/sync/polling/updaters/mySegmentsUpdater.ts +20 -16
  85. package/src/sync/streaming/SSEClient/index.ts +4 -6
  86. package/src/sync/streaming/SSEHandler/index.ts +11 -13
  87. package/src/sync/streaming/SSEHandler/types.ts +13 -25
  88. package/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts +11 -7
  89. package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
  90. package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +1 -1
  91. package/src/sync/streaming/UpdateWorkers/types.ts +2 -2
  92. package/src/sync/streaming/constants.ts +1 -2
  93. package/src/sync/streaming/parseUtils.ts +19 -11
  94. package/src/sync/streaming/pushManager.ts +37 -64
  95. package/src/sync/streaming/types.ts +9 -11
  96. package/src/sync/submitters/telemetrySubmitter.ts +0 -2
  97. package/src/sync/submitters/types.ts +1 -3
  98. package/src/sync/syncManagerOnline.ts +11 -19
  99. package/src/types.ts +1 -26
  100. package/src/utils/constants/index.ts +1 -1
  101. package/src/utils/settingsValidation/index.ts +1 -5
  102. package/types/dtos/types.d.ts +14 -11
  103. package/types/logger/constants.d.ts +2 -1
  104. package/types/readiness/types.d.ts +0 -1
  105. package/types/services/decorateHeaders.d.ts +2 -0
  106. package/types/services/splitApi.d.ts +1 -1
  107. package/types/services/splitHttpClient.d.ts +1 -1
  108. package/types/services/types.d.ts +2 -3
  109. package/types/storages/AbstractSegmentsCacheSync.d.ts +2 -6
  110. package/types/storages/AbstractSplitsCacheAsync.d.ts +1 -1
  111. package/types/storages/AbstractSplitsCacheSync.d.ts +3 -3
  112. package/types/storages/KeyBuilder.d.ts +0 -1
  113. package/types/storages/KeyBuilderCS.d.ts +2 -0
  114. package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +3 -2
  115. package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +1 -1
  116. package/types/storages/inMemory/MySegmentsCacheInMemory.d.ts +3 -1
  117. package/types/storages/inMemory/SplitsCacheInMemory.d.ts +1 -2
  118. package/types/storages/types.d.ts +4 -4
  119. package/types/sync/polling/fetchers/mySegmentsFetcher.d.ts +2 -2
  120. package/types/sync/polling/fetchers/types.d.ts +2 -2
  121. package/types/sync/polling/syncTasks/mySegmentsSyncTask.d.ts +4 -3
  122. package/types/sync/polling/types.d.ts +6 -12
  123. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +3 -2
  124. package/types/sync/streaming/SSEHandler/types.d.ts +13 -22
  125. package/types/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.d.ts +2 -2
  126. package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +2 -1
  127. package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +3 -2
  128. package/types/sync/streaming/UpdateWorkers/types.d.ts +2 -2
  129. package/types/sync/streaming/constants.d.ts +1 -2
  130. package/types/sync/streaming/parseUtils.d.ts +4 -5
  131. package/types/sync/streaming/pushManager.d.ts +0 -2
  132. package/types/sync/streaming/pushManagerCS_Spec1_3.d.ts +9 -0
  133. package/types/sync/streaming/pushManager_Spec1_3.d.ts +9 -0
  134. package/types/sync/streaming/types.d.ts +8 -9
  135. package/types/sync/submitters/types.d.ts +1 -3
  136. package/types/types.d.ts +0 -25
  137. package/types/utils/constants/index.d.ts +1 -1
  138. package/types/utils/settingsValidation/index.d.ts +0 -2
@@ -7,7 +7,7 @@ var mySegmentsUpdater_1 = require("../updaters/mySegmentsUpdater");
7
7
  /**
8
8
  * Creates a sync task that periodically executes a `mySegmentsUpdater` task
9
9
  */
10
- function mySegmentsSyncTaskFactory(fetchMySegments, mySegmentsCache, notifyUpdate, settings, matchingKey, segmentsRefreshRate, NAME) {
11
- return (0, syncTask_1.syncTaskFactory)(settings.log, (0, mySegmentsUpdater_1.mySegmentsUpdaterFactory)(settings.log, (0, mySegmentsFetcher_1.mySegmentsFetcherFactory)(fetchMySegments), mySegmentsCache, notifyUpdate, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, matchingKey), segmentsRefreshRate, NAME);
10
+ function mySegmentsSyncTaskFactory(fetchMemberships, storage, readiness, settings, matchingKey) {
11
+ return (0, syncTask_1.syncTaskFactory)(settings.log, (0, mySegmentsUpdater_1.mySegmentsUpdaterFactory)(settings.log, (0, mySegmentsFetcher_1.mySegmentsFetcherFactory)(fetchMemberships), storage, readiness.segments, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, matchingKey), settings.scheduler.segmentsRefreshRate, 'mySegmentsUpdater');
12
12
  }
13
13
  exports.mySegmentsSyncTaskFactory = mySegmentsSyncTaskFactory;
@@ -2,14 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.mySegmentsUpdaterFactory = void 0;
4
4
  var timeout_1 = require("../../../utils/promise/timeout");
5
- var constants_1 = require("../../../logger/constants");
5
+ var constants_1 = require("../../../readiness/constants");
6
+ var constants_2 = require("../../../logger/constants");
6
7
  /**
7
8
  * factory of MySegments updater, a task that:
8
9
  * - fetches mySegments using `mySegmentsFetcher`
9
10
  * - updates `mySegmentsCache`
10
11
  * - uses `segmentsEventEmitter` to emit events related to segments data updates
11
12
  */
12
- function mySegmentsUpdaterFactory(log, mySegmentsFetcher, mySegmentsCache, notifyUpdate, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, matchingKey) {
13
+ function mySegmentsUpdaterFactory(log, mySegmentsFetcher, storage, segmentsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, matchingKey) {
14
+ var splits = storage.splits, segments = storage.segments, largeSegments = storage.largeSegments;
13
15
  var readyOnAlreadyExistentState = true;
14
16
  var startingUp = true;
15
17
  /** timeout and telemetry decorator for `splitChangesFetcher` promise */
@@ -20,29 +22,31 @@ function mySegmentsUpdaterFactory(log, mySegmentsFetcher, mySegmentsCache, notif
20
22
  }
21
23
  // @TODO if allowing pluggable storages, handle async execution
22
24
  function updateSegments(segmentsData) {
25
+ var _a, _b, _c, _d;
23
26
  var shouldNotifyUpdate;
24
27
  if (Array.isArray(segmentsData)) {
25
- // Update the list of segment names available
26
- shouldNotifyUpdate = mySegmentsCache.resetSegments(segmentsData);
28
+ // Add/Delete the segment names
29
+ segmentsData.forEach(function (_a) {
30
+ var isLS = _a.isLS, name = _a.name, add = _a.add;
31
+ var cache = isLS ? largeSegments : segments;
32
+ if (cache.isInSegment(name) !== add) {
33
+ shouldNotifyUpdate = true;
34
+ if (add)
35
+ cache.addToSegment(name);
36
+ else
37
+ cache.removeFromSegment(name);
38
+ }
39
+ });
27
40
  }
28
41
  else {
29
- // Add/Delete the segment
30
- var name_1 = segmentsData.name, add = segmentsData.add;
31
- if (mySegmentsCache.isInSegment(name_1) !== add) {
32
- shouldNotifyUpdate = true;
33
- if (add)
34
- mySegmentsCache.addToSegment(name_1);
35
- else
36
- mySegmentsCache.removeFromSegment(name_1);
37
- }
38
- else {
39
- shouldNotifyUpdate = false;
40
- }
42
+ // Reset the list of segment names
43
+ shouldNotifyUpdate = segments.resetSegments((((_a = segmentsData.ms) === null || _a === void 0 ? void 0 : _a.k) || []).map(function (segment) { return segment.n; }), (_b = segmentsData.ms) === null || _b === void 0 ? void 0 : _b.cn);
44
+ shouldNotifyUpdate = largeSegments.resetSegments((((_c = segmentsData.ls) === null || _c === void 0 ? void 0 : _c.k) || []).map(function (segment) { return segment.n; }), (_d = segmentsData.ls) === null || _d === void 0 ? void 0 : _d.cn) || shouldNotifyUpdate;
41
45
  }
42
46
  // Notify update if required
43
- if (shouldNotifyUpdate || readyOnAlreadyExistentState) {
47
+ if (splits.usesSegments() && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
44
48
  readyOnAlreadyExistentState = false;
45
- notifyUpdate();
49
+ segmentsEventEmitter.emit(constants_1.SDK_SEGMENTS_ARRIVED);
46
50
  }
47
51
  }
48
52
  function _mySegmentsUpdater(retry, segmentsData, noCache) {
@@ -59,7 +63,7 @@ function mySegmentsUpdaterFactory(log, mySegmentsFetcher, mySegmentsCache, notif
59
63
  return updaterPromise.catch(function (error) {
60
64
  if (startingUp && retriesOnFailureBeforeReady > retry) {
61
65
  retry += 1;
62
- log.warn(constants_1.SYNC_MYSEGMENTS_FETCH_RETRY, [retry, error]);
66
+ log.warn(constants_2.SYNC_MYSEGMENTS_FETCH_RETRY, [retry, error]);
63
67
  return _mySegmentsUpdater(retry); // no need to forward `segmentList` and `noCache` params
64
68
  }
65
69
  else {
@@ -68,20 +68,19 @@ function SSEHandlerFactory(log, pushEmitter, telemetryTracker) {
68
68
  }
69
69
  var parsedData = messageWithParsedData.parsedData, data = messageWithParsedData.data, channel = messageWithParsedData.channel, timestamp = messageWithParsedData.timestamp;
70
70
  log.debug(constants_2.STREAMING_NEW_MESSAGE, [data]);
71
- // we only handle update events if streaming is up.
72
- if (!notificationKeeper.isStreamingUp() && [constants_1.OCCUPANCY, constants_1.CONTROL].indexOf(parsedData.type) === -1)
71
+ // we only handle update events if streaming is up
72
+ // @ts-expect-error
73
+ var type = parsedData.type || parsedData.t;
74
+ if (!notificationKeeper.isStreamingUp() && [constants_1.OCCUPANCY, constants_1.CONTROL].indexOf(type) === -1)
73
75
  return;
74
- switch (parsedData.type) {
76
+ switch (type) {
75
77
  /* update events */
76
78
  case constants_1.SPLIT_UPDATE:
77
79
  case constants_1.SEGMENT_UPDATE:
78
- case constants_1.MY_SEGMENTS_UPDATE_V2:
80
+ case constants_1.MY_SEGMENTS_UPDATE_V3:
79
81
  case constants_1.MY_LARGE_SEGMENTS_UPDATE:
80
82
  case constants_1.SPLIT_KILL:
81
- pushEmitter.emit(parsedData.type, parsedData);
82
- break;
83
- case constants_1.MY_SEGMENTS_UPDATE:
84
- pushEmitter.emit(parsedData.type, parsedData, channel);
83
+ pushEmitter.emit(type, parsedData);
85
84
  break;
86
85
  /* occupancy & control events, handled by NotificationManagerKeeper */
87
86
  case constants_1.OCCUPANCY:
@@ -23,6 +23,7 @@ function MySegmentsUpdateWorker(mySegmentsSyncTask, telemetryTracker, updateType
23
23
  var syncTask = _delay ?
24
24
  new Promise(function (res) {
25
25
  _delayTimeoutID = setTimeout(function () {
26
+ _delay = undefined;
26
27
  mySegmentsSyncTask.execute(_segmentsData, true).then(res);
27
28
  }, _delay);
28
29
  }) :
@@ -49,13 +50,15 @@ function MySegmentsUpdateWorker(mySegmentsSyncTask, telemetryTracker, updateType
49
50
  }
50
51
  return {
51
52
  /**
52
- * Invoked by NotificationProcessor on MY_SEGMENTS_UPDATE event
53
+ * Invoked by NotificationProcessor on MY_(LARGE)_SEGMENTS_UPDATE notifications
53
54
  *
54
- * @param {number} changeNumber change number of the MY_SEGMENTS_UPDATE notification
55
- * @param {SegmentsData | undefined} segmentsData might be undefined
55
+ * @param changeNumber change number of the notification
56
+ * @param segmentsData data for KeyList or SegmentRemoval instant updates
57
+ * @param delay optional time to wait for BoundedFetchRequest or BoundedFetchRequest updates
56
58
  */
57
59
  put: function (changeNumber, segmentsData, delay) {
58
- if (changeNumber <= currentChangeNumber || changeNumber <= maxChangeNumber)
60
+ // Ignore event if it is outdated or if there is a pending fetch request (_delay is set)
61
+ if (changeNumber <= currentChangeNumber || changeNumber <= maxChangeNumber || _delay)
59
62
  return;
60
63
  maxChangeNumber = changeNumber;
61
64
  handleNewEvent = true;
@@ -67,6 +70,7 @@ function MySegmentsUpdateWorker(mySegmentsSyncTask, telemetryTracker, updateType
67
70
  },
68
71
  stop: function () {
69
72
  clearTimeout(_delayTimeoutID);
73
+ _delay = undefined;
70
74
  isHandlingEvent = false;
71
75
  backoff.reset();
72
76
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ControlType = exports.OCCUPANCY = exports.CONTROL = exports.MY_LARGE_SEGMENTS_UPDATE = exports.SPLIT_UPDATE = exports.SPLIT_KILL = exports.SEGMENT_UPDATE = exports.MY_SEGMENTS_UPDATE_V2 = exports.MY_SEGMENTS_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.MY_LARGE_SEGMENTS_UPDATE = exports.SPLIT_UPDATE = exports.SPLIT_KILL = exports.SEGMENT_UPDATE = exports.MY_SEGMENTS_UPDATE_V3 = exports.PUSH_SUBSYSTEM_DOWN = exports.PUSH_SUBSYSTEM_UP = exports.PUSH_RETRYABLE_ERROR = exports.PUSH_NONRETRYABLE_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
@@ -25,8 +25,7 @@ exports.PUSH_SUBSYSTEM_UP = 'PUSH_SUBSYSTEM_UP';
25
25
  */
26
26
  exports.PUSH_SUBSYSTEM_DOWN = 'PUSH_SUBSYSTEM_DOWN';
27
27
  // Update-type push notifications, handled by NotificationProcessor
28
- exports.MY_SEGMENTS_UPDATE = 'MY_SEGMENTS_UPDATE';
29
- exports.MY_SEGMENTS_UPDATE_V2 = 'MY_SEGMENTS_UPDATE_V2';
28
+ exports.MY_SEGMENTS_UPDATE_V3 = 'MY_SEGMENTS_UPDATE_V3';
30
29
  exports.SEGMENT_UPDATE = 'SEGMENT_UPDATE';
31
30
  exports.SPLIT_KILL = 'SPLIT_KILL';
32
31
  exports.SPLIT_UPDATE = 'SPLIT_UPDATE';
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseFFUpdatePayload = exports.isInBitmap = exports.parseBitmap = exports.parseKeyList = void 0;
3
+ exports.getDelay = exports.parseFFUpdatePayload = exports.isInBitmap = exports.parseBitmap = exports.parseKeyList = void 0;
4
4
  var decompress_1 = require("../../utils/decompress");
5
5
  var base64_1 = require("../../utils/base64");
6
+ var murmur3_1 = require("../../utils/murmur3/murmur3");
6
7
  var GZIP = 1;
7
8
  var ZLIB = 2;
8
9
  function Uint8ArrayToString(myUint8Arr) {
@@ -80,15 +81,19 @@ function isInBitmap(bitmap, hash64hex) {
80
81
  exports.isInBitmap = isInBitmap;
81
82
  /**
82
83
  * Parse feature flags notifications for instant feature flag updates
83
- *
84
- * @param {ISplitUpdateData} data
85
- * @returns {KeyList}
86
84
  */
87
85
  function parseFFUpdatePayload(compression, data) {
88
- var avoidPrecisionLoss = false;
89
- if (compression > 0)
90
- return parseKeyList(data, compression, avoidPrecisionLoss);
91
- else
92
- return JSON.parse((0, base64_1.decodeFromBase64)(data));
86
+ return compression > 0 ?
87
+ parseKeyList(data, compression, false) :
88
+ JSON.parse((0, base64_1.decodeFromBase64)(data));
93
89
  }
94
90
  exports.parseFFUpdatePayload = parseFFUpdatePayload;
91
+ var DEFAULT_MAX_INTERVAL = 60000;
92
+ function getDelay(parsedData, matchingKey) {
93
+ if (parsedData.h === 0)
94
+ return 0;
95
+ var interval = parsedData.i || DEFAULT_MAX_INTERVAL;
96
+ var seed = parsedData.s || 0;
97
+ return (0, murmur3_1.hash)(matchingKey, seed) % interval;
98
+ }
99
+ exports.getDelay = getDelay;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pushManagerFactory = exports.getDelay = void 0;
3
+ exports.pushManagerFactory = void 0;
4
4
  var objectAssign_1 = require("../../utils/lang/objectAssign");
5
5
  var Backoff_1 = require("../../utils/Backoff");
6
6
  var SSEHandler_1 = require("./SSEHandler");
@@ -16,15 +16,8 @@ var constants_2 = require("../../logger/constants");
16
16
  var types_1 = require("./SSEHandler/types");
17
17
  var parseUtils_1 = require("./parseUtils");
18
18
  var sets_1 = require("../../utils/lang/sets");
19
- var murmur3_1 = require("../../utils/murmur3/murmur3");
20
19
  var murmur3_64_1 = require("../../utils/murmur3/murmur3_64");
21
20
  var constants_3 = require("../../utils/constants");
22
- function getDelay(parsedData, matchingKey) {
23
- var interval = parsedData.i || 60000;
24
- var seed = parsedData.s || 0;
25
- return (0, murmur3_1.hash)(matchingKey, seed) % interval;
26
- }
27
- exports.getDelay = getDelay;
28
21
  /**
29
22
  * PushManager factory:
30
23
  * - for server-side if key is not provided in settings.
@@ -58,7 +51,7 @@ function pushManagerFactory(params, pollingManager) {
58
51
  // [Only for client-side] map of hashes to user keys, to dispatch MY_SEGMENTS_UPDATE events to the corresponding MySegmentsUpdateWorker
59
52
  var userKeyHashes = {};
60
53
  // [Only for client-side] map of user keys to their corresponding hash64 and MySegmentsUpdateWorkers.
61
- // Hash64 is used to process MY_SEGMENTS_UPDATE_V2 events and dispatch actions to the corresponding MySegmentsUpdateWorker.
54
+ // Hash64 is used to process MY_SEGMENTS_UPDATE events and dispatch actions to the corresponding MySegmentsUpdateWorker.
62
55
  var clients = {};
63
56
  // [Only for client-side] variable to flag that a new client was added. It is needed to reconnect streaming.
64
57
  var connectForNewClient = false;
@@ -152,7 +145,7 @@ function pushManagerFactory(params, pollingManager) {
152
145
  (0, lang_1.forOwn)(clients, function (_a) {
153
146
  var worker = _a.worker, workerLarge = _a.workerLarge;
154
147
  worker.stop();
155
- workerLarge && workerLarge.stop();
148
+ workerLarge.stop();
156
149
  });
157
150
  else
158
151
  segmentsUpdateWorker.stop();
@@ -207,7 +200,7 @@ function pushManagerFactory(params, pollingManager) {
207
200
  splitsUpdateWorker.put(parsedData);
208
201
  });
209
202
  function handleMySegmentsUpdate(parsedData) {
210
- var isLS = parsedData.type === constants_1.MY_LARGE_SEGMENTS_UPDATE;
203
+ var isLS = parsedData.t === constants_1.MY_LARGE_SEGMENTS_UPDATE;
211
204
  switch (parsedData.u) {
212
205
  case types_1.UpdateStrategy.BoundedFetchRequest: {
213
206
  var bitmap_1;
@@ -215,15 +208,13 @@ function pushManagerFactory(params, pollingManager) {
215
208
  bitmap_1 = (0, parseUtils_1.parseBitmap)(parsedData.d, parsedData.c);
216
209
  }
217
210
  catch (e) {
218
- log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['BoundedFetchRequest', e]);
211
+ log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE, ['BoundedFetchRequest', e]);
219
212
  break;
220
213
  }
221
214
  (0, lang_1.forOwn)(clients, function (_a, matchingKey) {
222
215
  var hash64 = _a.hash64, worker = _a.worker, workerLarge = _a.workerLarge;
223
216
  if ((0, parseUtils_1.isInBitmap)(bitmap_1, hash64.hex)) {
224
- isLS ?
225
- workerLarge && workerLarge.put(parsedData.changeNumber, undefined, getDelay(parsedData, matchingKey)) :
226
- worker.put(parsedData.changeNumber);
217
+ (isLS ? workerLarge : worker).put(parsedData.cn, undefined, (0, parseUtils_1.getDelay)(parsedData, matchingKey));
227
218
  }
228
219
  });
229
220
  return;
@@ -236,64 +227,50 @@ function pushManagerFactory(params, pollingManager) {
236
227
  removed_1 = new sets_1._Set(keyList.r);
237
228
  }
238
229
  catch (e) {
239
- log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['KeyList', e]);
230
+ log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE, ['KeyList', e]);
231
+ break;
232
+ }
233
+ if (!parsedData.n || !parsedData.n.length) {
234
+ log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE, ['KeyList', 'No segment name was provided']);
240
235
  break;
241
236
  }
242
237
  (0, lang_1.forOwn)(clients, function (_a) {
243
238
  var hash64 = _a.hash64, worker = _a.worker, workerLarge = _a.workerLarge;
244
239
  var add = added_1.has(hash64.dec) ? true : removed_1.has(hash64.dec) ? false : undefined;
245
240
  if (add !== undefined) {
246
- isLS ?
247
- workerLarge && workerLarge.put(parsedData.changeNumber, {
248
- name: parsedData.largeSegments[0],
249
- add: add
250
- }) :
251
- worker.put(parsedData.changeNumber, {
252
- name: parsedData.segmentName,
253
- add: add
254
- });
241
+ (isLS ? workerLarge : worker).put(parsedData.cn, [{
242
+ isLS: isLS,
243
+ name: parsedData.n[0],
244
+ add: add,
245
+ }]);
255
246
  }
256
247
  });
257
248
  return;
258
249
  }
259
250
  case types_1.UpdateStrategy.SegmentRemoval:
260
- if ((isLS && parsedData.largeSegments.length === 0) || (!isLS && !parsedData.segmentName)) {
261
- log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['SegmentRemoval', 'No segment name was provided']);
251
+ if (!parsedData.n || !parsedData.n.length) {
252
+ log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE, ['SegmentRemoval', 'No segment name was provided']);
262
253
  break;
263
254
  }
264
255
  (0, lang_1.forOwn)(clients, function (_a) {
265
256
  var worker = _a.worker, workerLarge = _a.workerLarge;
266
- isLS ?
267
- workerLarge && parsedData.largeSegments.forEach(function (largeSegment) {
268
- workerLarge.put(parsedData.changeNumber, {
269
- name: largeSegment,
270
- add: false
271
- });
272
- }) :
273
- worker.put(parsedData.changeNumber, {
274
- name: parsedData.segmentName,
275
- add: false
276
- });
257
+ (isLS ? workerLarge : worker).put(parsedData.cn, parsedData.n.map(function (largeSegment) { return ({
258
+ isLS: isLS,
259
+ name: largeSegment,
260
+ add: false,
261
+ cn: parsedData.cn
262
+ }); }));
277
263
  });
278
264
  return;
279
265
  }
280
266
  // `UpdateStrategy.UnboundedFetchRequest` and fallbacks of other cases
281
267
  (0, lang_1.forOwn)(clients, function (_a, matchingKey) {
282
268
  var worker = _a.worker, workerLarge = _a.workerLarge;
283
- isLS ?
284
- workerLarge && workerLarge.put(parsedData.changeNumber, undefined, getDelay(parsedData, matchingKey)) :
285
- worker.put(parsedData.changeNumber);
269
+ (isLS ? workerLarge : worker).put(parsedData.cn, undefined, (0, parseUtils_1.getDelay)(parsedData, matchingKey));
286
270
  });
287
271
  }
288
272
  if (userKey) {
289
- pushEmitter.on(constants_1.MY_SEGMENTS_UPDATE, function handleMySegmentsUpdate(parsedData, channel) {
290
- var userKeyHash = channel.split('_')[2];
291
- var userKey = userKeyHashes[userKeyHash];
292
- if (userKey && clients[userKey]) { // check existence since it can be undefined if client has been destroyed
293
- clients[userKey].worker.put(parsedData.changeNumber, parsedData.includesPayload ? parsedData.segmentList ? parsedData.segmentList : [] : undefined);
294
- }
295
- });
296
- pushEmitter.on(constants_1.MY_SEGMENTS_UPDATE_V2, handleMySegmentsUpdate);
273
+ pushEmitter.on(constants_1.MY_SEGMENTS_UPDATE_V3, handleMySegmentsUpdate);
297
274
  pushEmitter.on(constants_1.MY_LARGE_SEGMENTS_UPDATE, handleMySegmentsUpdate);
298
275
  }
299
276
  else {
@@ -317,7 +294,7 @@ function pushManagerFactory(params, pollingManager) {
317
294
  return;
318
295
  disconnected = false;
319
296
  if (userKey)
320
- this.add(userKey, pollingManager.segmentsSyncTask, pollingManager.largeSegmentsSyncTask); // client-side
297
+ this.add(userKey, pollingManager.segmentsSyncTask); // client-side
321
298
  else
322
299
  setTimeout(connectPush); // server-side runs in next cycle as in client-side, for consistency with client-side
323
300
  },
@@ -326,14 +303,14 @@ function pushManagerFactory(params, pollingManager) {
326
303
  return disconnected === false;
327
304
  },
328
305
  // [Only for client-side]
329
- add: function (userKey, mySegmentsSyncTask, myLargeSegmentsSyncTask) {
306
+ add: function (userKey, mySegmentsSyncTask) {
330
307
  var hash = (0, AuthClient_1.hashUserKey)(userKey);
331
308
  if (!userKeyHashes[hash]) {
332
309
  userKeyHashes[hash] = userKey;
333
310
  clients[userKey] = {
334
311
  hash64: (0, murmur3_64_1.hash64)(userKey),
335
312
  worker: (0, MySegmentsUpdateWorker_1.MySegmentsUpdateWorker)(mySegmentsSyncTask, telemetryTracker, constants_3.MY_SEGMENT),
336
- workerLarge: myLargeSegmentsSyncTask ? (0, MySegmentsUpdateWorker_1.MySegmentsUpdateWorker)(myLargeSegmentsSyncTask, telemetryTracker, constants_3.MY_LARGE_SEGMENT) : undefined
313
+ workerLarge: (0, MySegmentsUpdateWorker_1.MySegmentsUpdateWorker)(mySegmentsSyncTask, telemetryTracker, constants_3.MY_LARGE_SEGMENT)
337
314
  };
338
315
  connectForNewClient = true; // we must reconnect on start, to listen the channel for the new user key
339
316
  // Reconnects in case of a new client.
@@ -65,12 +65,10 @@ function telemetryCacheConfigAdapter(telemetry, settings) {
65
65
  var _a = getTelemetryFlagSetsStats(settings.sync.__splitFiltersValidation), flagSetsTotal = _a.flagSetsTotal, flagSetsIgnored = _a.flagSetsIgnored;
66
66
  return (0, objectAssign_1.objectAssign)(getTelemetryConfigStats(settings.mode, settings.storage.type), {
67
67
  sE: settings.streamingEnabled,
68
- lE: isClientSide ? settings.sync.largeSegmentsEnabled : undefined,
69
68
  rR: {
70
69
  sp: scheduler.featuresRefreshRate / 1000,
71
70
  se: isClientSide ? undefined : scheduler.segmentsRefreshRate / 1000,
72
71
  ms: isClientSide ? scheduler.segmentsRefreshRate / 1000 : undefined,
73
- mls: isClientSide && settings.sync.largeSegmentsEnabled ? scheduler.largeSegmentsRefreshRate / 1000 : undefined,
74
72
  im: scheduler.impressionsRefreshRate / 1000,
75
73
  ev: scheduler.eventsPushRate / 1000,
76
74
  te: scheduler.telemetryRefreshRate / 1000,
@@ -117,53 +117,43 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
117
117
  shared: function (matchingKey, readinessManager, storage) {
118
118
  if (!pollingManager)
119
119
  return;
120
- var _a = pollingManager.add(matchingKey, readinessManager, storage), msSyncTask = _a.msSyncTask, mlsSyncTask = _a.mlsSyncTask;
120
+ var mySegmentsSyncTask = pollingManager.add(matchingKey, readinessManager, storage);
121
121
  return {
122
- isRunning: msSyncTask.isRunning,
122
+ isRunning: mySegmentsSyncTask.isRunning,
123
123
  start: function () {
124
124
  if (syncEnabled) {
125
125
  if (pushManager) {
126
126
  if (pollingManager.isRunning()) {
127
127
  // if doing polling, we must start the periodic fetch of data
128
- if (storage.splits.usesMatcher(constants_3.IN_SEGMENT))
129
- msSyncTask.start();
130
- if (mlsSyncTask && storage.splits.usesMatcher(constants_3.IN_LARGE_SEGMENT))
131
- mlsSyncTask.start();
128
+ if (storage.splits.usesSegments())
129
+ mySegmentsSyncTask.start();
132
130
  }
133
131
  else {
134
132
  // if not polling, we must execute the sync task for the initial fetch
135
133
  // of segments since `syncAll` was already executed when starting the main client
136
- msSyncTask.execute();
137
- mlsSyncTask && mlsSyncTask.execute();
134
+ mySegmentsSyncTask.execute();
138
135
  }
139
- pushManager.add(matchingKey, msSyncTask, mlsSyncTask);
136
+ pushManager.add(matchingKey, mySegmentsSyncTask);
140
137
  }
141
138
  else {
142
- if (storage.splits.usesMatcher(constants_3.IN_SEGMENT))
143
- msSyncTask.start();
144
- if (mlsSyncTask && storage.splits.usesMatcher(constants_3.IN_LARGE_SEGMENT))
145
- mlsSyncTask.start();
139
+ if (storage.splits.usesSegments())
140
+ mySegmentsSyncTask.start();
146
141
  }
147
142
  }
148
143
  else {
149
- if (!readinessManager.isReady()) {
150
- msSyncTask.execute();
151
- mlsSyncTask && mlsSyncTask.execute();
152
- }
144
+ if (!readinessManager.isReady())
145
+ mySegmentsSyncTask.execute();
153
146
  }
154
147
  },
155
148
  stop: function () {
156
149
  // check in case `client.destroy()` has been invoked more than once for the same client
157
- var syncTasks = pollingManager.get(matchingKey);
158
- if (syncTasks) {
159
- var msSyncTask_1 = syncTasks.msSyncTask, mlsSyncTask_1 = syncTasks.mlsSyncTask;
150
+ var mySegmentsSyncTask = pollingManager.get(matchingKey);
151
+ if (mySegmentsSyncTask) {
160
152
  // stop syncing
161
153
  if (pushManager)
162
154
  pushManager.remove(matchingKey);
163
- if (msSyncTask_1.isRunning())
164
- msSyncTask_1.stop();
165
- if (mlsSyncTask_1 && mlsSyncTask_1.isRunning())
166
- mlsSyncTask_1.stop();
155
+ if (mySegmentsSyncTask.isRunning())
156
+ mySegmentsSyncTask.stop();
167
157
  pollingManager.remove(matchingKey);
168
158
  }
169
159
  },
@@ -91,7 +91,7 @@ exports.NON_REQUESTED = 1;
91
91
  exports.DISABLED = 0;
92
92
  exports.ENABLED = 1;
93
93
  exports.PAUSED = 2;
94
- exports.FLAG_SPEC_VERSION = '1.1';
94
+ exports.FLAG_SPEC_VERSION = '1.2';
95
95
  // Matcher types
96
96
  exports.IN_SEGMENT = 'IN_SEGMENT';
97
97
  exports.IN_LARGE_SEGMENT = 'IN_LARGE_SEGMENT';
@@ -30,8 +30,6 @@ exports.base = {
30
30
  featuresRefreshRate: 60,
31
31
  // fetch segments updates each 60 sec
32
32
  segmentsRefreshRate: 60,
33
- // fetch large segments updates each 60 sec
34
- largeSegmentsRefreshRate: 60,
35
33
  // publish telemetry stats each 3600 secs (1 hour)
36
34
  telemetryRefreshRate: 3600,
37
35
  // publish evaluations each 300 sec (default value for OPTIMIZED impressions mode)
@@ -77,8 +75,7 @@ exports.base = {
77
75
  impressionsMode: constants_1.OPTIMIZED,
78
76
  localhostMode: undefined,
79
77
  enabled: true,
80
- flagSpecVersion: constants_1.FLAG_SPEC_VERSION,
81
- largeSegmentsEnabled: false
78
+ flagSpecVersion: constants_1.FLAG_SPEC_VERSION
82
79
  },
83
80
  // Logger
84
81
  log: undefined
@@ -117,7 +114,6 @@ function settingsValidation(config, validationParams) {
117
114
  var scheduler = withDefaults.scheduler, startup = withDefaults.startup;
118
115
  scheduler.featuresRefreshRate = fromSecondsToMillis(scheduler.featuresRefreshRate);
119
116
  scheduler.segmentsRefreshRate = fromSecondsToMillis(scheduler.segmentsRefreshRate);
120
- scheduler.largeSegmentsRefreshRate = fromSecondsToMillis(scheduler.largeSegmentsRefreshRate);
121
117
  scheduler.offlineRefreshRate = fromSecondsToMillis(scheduler.offlineRefreshRate);
122
118
  scheduler.eventsPushRate = fromSecondsToMillis(scheduler.eventsPushRate);
123
119
  scheduler.telemetryRefreshRate = fromSecondsToMillis(validateMinValue('telemetryRefreshRate', scheduler.telemetryRefreshRate, 60));
@@ -35,6 +35,7 @@ export var IMPRESSION = 102;
35
35
  export var IMPRESSION_QUEUEING = 103;
36
36
  export var NEW_SHARED_CLIENT = 104;
37
37
  export var NEW_FACTORY = 105;
38
+ export var POLLING_SMART_PAUSING = 106;
38
39
  export var POLLING_START = 107;
39
40
  export var POLLING_STOP = 108;
40
41
  export var SYNC_SPLITS_FETCH_RETRY = 109;
@@ -76,7 +77,7 @@ export var WARN_SPLITS_FILTER_IGNORED = 219;
76
77
  export var WARN_SPLITS_FILTER_INVALID = 220;
77
78
  export var WARN_SPLITS_FILTER_EMPTY = 221;
78
79
  export var WARN_SDK_KEY = 222;
79
- export var STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2 = 223;
80
+ export var STREAMING_PARSING_MY_SEGMENTS_UPDATE = 223;
80
81
  export var STREAMING_PARSING_SPLIT_UPDATE = 224;
81
82
  export var WARN_INVALID_FLAGSET = 225;
82
83
  export var WARN_LOWERCASE_FLAGSET = 226;
@@ -16,10 +16,11 @@ export var codesInfo = codesWarn.concat([
16
16
  [c.USER_CONSENT_NOT_UPDATED, 'UserConsent: call had no effect because it was the current consent status (%s).'],
17
17
  [c.USER_CONSENT_INITIAL, 'Starting the SDK with %s user consent. No data will be sent.'],
18
18
  // synchronizer
19
+ [c.POLLING_SMART_PAUSING, c.LOG_PREFIX_SYNC_POLLING + 'Turning segments data polling %s.'],
19
20
  [c.POLLING_START, c.LOG_PREFIX_SYNC_POLLING + 'Starting polling'],
20
21
  [c.POLLING_STOP, c.LOG_PREFIX_SYNC_POLLING + 'Stopping polling'],
21
22
  [c.SYNC_SPLITS_FETCH_RETRY, c.LOG_PREFIX_SYNC_SPLITS + 'Retrying download of feature flags #%s. Reason: %s'],
22
- [c.SUBMITTERS_PUSH_FULL_QUEUE, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Flushing full %s queue and reseting timer.'],
23
+ [c.SUBMITTERS_PUSH_FULL_QUEUE, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Flushing full %s queue and resetting timer.'],
23
24
  [c.SUBMITTERS_PUSH, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Pushing %s.'],
24
25
  [c.STREAMING_REFRESH_TOKEN, c.LOG_PREFIX_SYNC_STREAMING + 'Refreshing streaming token in %s seconds, and connecting streaming in %s seconds.'],
25
26
  [c.STREAMING_RECONNECT, c.LOG_PREFIX_SYNC_STREAMING + 'Attempting to reconnect streaming in %s seconds.'],
@@ -30,7 +30,7 @@ export var codesWarn = codesError.concat([
30
30
  [c.WARN_SPLITS_FILTER_INVALID, c.LOG_PREFIX_SETTINGS + ': feature flag filter at position %s is invalid. It must be an object with a valid filter type ("bySet", "byName" or "byPrefix") and a list of "values".'],
31
31
  [c.WARN_SPLITS_FILTER_EMPTY, c.LOG_PREFIX_SETTINGS + ': feature flag filter configuration must be a non-empty array of filter objects.'],
32
32
  [c.WARN_SDK_KEY, c.LOG_PREFIX_SETTINGS + ': You already have %s. We recommend keeping only one instance of the factory at all times (Singleton pattern) and reusing it throughout your application'],
33
- [c.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, c.LOG_PREFIX_SYNC_STREAMING + 'Fetching MySegments due to an error processing %s notification: %s'],
33
+ [c.STREAMING_PARSING_MY_SEGMENTS_UPDATE, c.LOG_PREFIX_SYNC_STREAMING + 'Fetching Memberships due to an error processing %s notification: %s'],
34
34
  [c.STREAMING_PARSING_SPLIT_UPDATE, c.LOG_PREFIX_SYNC_STREAMING + 'Fetching SplitChanges due to an error processing SPLIT_UPDATE notification: %s'],
35
35
  [c.WARN_INVALID_FLAGSET, '%s: you passed %s, flag set must adhere to the regular expressions %s. This means a flag set must start with a letter or number, be in lowercase, alphanumeric and have a max length of 50 characters. %s was discarded.'],
36
36
  [c.WARN_LOWERCASE_FLAGSET, '%s: flag set %s should be all lowercase - converting string to lowercase.'],
@@ -6,16 +6,17 @@ function splitsEventEmitterFactory(EventEmitter) {
6
6
  splitsCacheLoaded: false,
7
7
  });
8
8
  // `isSplitKill` condition avoids an edge-case of wrongly emitting SDK_READY if:
9
- // - `/mySegments` fetch and SPLIT_KILL occurs before `/splitChanges` fetch, and
9
+ // - `/memberships` fetch and SPLIT_KILL occurs before `/splitChanges` fetch, and
10
10
  // - storage has cached splits (for which case `splitsStorage.killLocally` can return true)
11
11
  splitsEventEmitter.on(SDK_SPLITS_ARRIVED, function (isSplitKill) { if (!isSplitKill)
12
12
  splitsEventEmitter.splitsArrived = true; });
13
13
  splitsEventEmitter.once(SDK_SPLITS_CACHE_LOADED, function () { splitsEventEmitter.splitsCacheLoaded = true; });
14
14
  return splitsEventEmitter;
15
15
  }
16
- function segmentsEventEmitterFactory(EventEmitter, segmentsArrived) {
17
- if (segmentsArrived === void 0) { segmentsArrived = false; }
18
- var segmentsEventEmitter = objectAssign(new EventEmitter(), { segmentsArrived: segmentsArrived });
16
+ function segmentsEventEmitterFactory(EventEmitter) {
17
+ var segmentsEventEmitter = objectAssign(new EventEmitter(), {
18
+ segmentsArrived: false
19
+ });
19
20
  segmentsEventEmitter.once(SDK_SEGMENTS_ARRIVED, function () { segmentsEventEmitter.segmentsArrived = true; });
20
21
  return segmentsEventEmitter;
21
22
  }
@@ -24,9 +25,8 @@ function segmentsEventEmitterFactory(EventEmitter, segmentsArrived) {
24
25
  */
25
26
  export function readinessManagerFactory(EventEmitter, settings, splits) {
26
27
  if (splits === void 0) { splits = splitsEventEmitterFactory(EventEmitter); }
27
- var _a = settings.startup, readyTimeout = _a.readyTimeout, waitForLargeSegments = _a.waitForLargeSegments, largeSegmentsEnabled = settings.sync.largeSegmentsEnabled;
28
+ var readyTimeout = settings.startup.readyTimeout;
28
29
  var segments = segmentsEventEmitterFactory(EventEmitter);
29
- var largeSegments = largeSegmentsEnabled ? segmentsEventEmitterFactory(EventEmitter, !waitForLargeSegments) : undefined;
30
30
  var gate = new EventEmitter();
31
31
  // emit SDK_READY_FROM_CACHE
32
32
  var isReadyFromCache = false;
@@ -50,8 +50,6 @@ export function readinessManagerFactory(EventEmitter, settings, splits) {
50
50
  var isReady = false;
51
51
  splits.on(SDK_SPLITS_ARRIVED, checkIsReadyOrUpdate);
52
52
  segments.on(SDK_SEGMENTS_ARRIVED, checkIsReadyOrUpdate);
53
- if (largeSegments)
54
- largeSegments.on(SDK_SEGMENTS_ARRIVED, checkIsReadyOrUpdate);
55
53
  var isDestroyed = false;
56
54
  function checkIsReadyFromCache() {
57
55
  isReadyFromCache = true;
@@ -77,7 +75,7 @@ export function readinessManagerFactory(EventEmitter, settings, splits) {
77
75
  }
78
76
  }
79
77
  else {
80
- if (splits.splitsArrived && segments.segmentsArrived && (!largeSegments || largeSegments.segmentsArrived)) {
78
+ if (splits.splitsArrived && segments.segmentsArrived) {
81
79
  clearTimeout(readyTimeoutId);
82
80
  isReady = true;
83
81
  try {
@@ -94,7 +92,6 @@ export function readinessManagerFactory(EventEmitter, settings, splits) {
94
92
  return {
95
93
  splits: splits,
96
94
  segments: segments,
97
- largeSegments: largeSegments,
98
95
  gate: gate,
99
96
  shared: function () {
100
97
  refCount++;
@@ -109,8 +106,6 @@ export function readinessManagerFactory(EventEmitter, settings, splits) {
109
106
  destroy: function () {
110
107
  isDestroyed = true;
111
108
  segments.removeAllListeners();
112
- if (largeSegments)
113
- largeSegments.removeAllListeners();
114
109
  gate.removeAllListeners();
115
110
  clearTimeout(readyTimeoutId);
116
111
  if (refCount > 0)