@splitsoftware/splitio-commons 1.16.1-rc.7 → 1.17.0-rc.0

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 (165) hide show
  1. package/CHANGES.txt +2 -1
  2. package/cjs/evaluator/matchers/index.js +1 -3
  3. package/cjs/evaluator/matchers/matcherTypes.js +0 -1
  4. package/cjs/evaluator/matchersTransform/index.js +1 -1
  5. package/cjs/logger/constants.js +4 -3
  6. package/cjs/logger/messages/info.js +2 -1
  7. package/cjs/readiness/readinessManager.js +10 -14
  8. package/cjs/readiness/sdkReadinessManager.js +6 -5
  9. package/cjs/sdkClient/sdkClientMethodCS.js +2 -2
  10. package/cjs/sdkClient/sdkClientMethodCSWithTT.js +2 -2
  11. package/cjs/sdkFactory/index.js +1 -1
  12. package/cjs/services/decorateHeaders.js +42 -0
  13. package/cjs/services/splitApi.js +0 -4
  14. package/cjs/services/splitHttpClient.js +5 -4
  15. package/cjs/storages/AbstractSplitsCacheAsync.js +2 -2
  16. package/cjs/storages/AbstractSplitsCacheSync.js +6 -5
  17. package/cjs/storages/KeyBuilder.js +0 -3
  18. package/cjs/storages/KeyBuilderCS.js +5 -17
  19. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +4 -16
  20. package/cjs/storages/inLocalStorage/index.js +2 -6
  21. package/cjs/storages/inMemory/InMemoryStorageCS.js +0 -5
  22. package/cjs/storages/inMemory/SplitsCacheInMemory.js +11 -20
  23. package/cjs/storages/inMemory/TelemetryCacheInMemory.js +10 -7
  24. package/cjs/storages/pluggable/inMemoryWrapper.js +1 -1
  25. package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +1 -5
  26. package/cjs/sync/polling/pollingManagerCS.js +33 -51
  27. package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  28. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +21 -20
  29. package/cjs/sync/streaming/SSEClient/index.js +0 -4
  30. package/cjs/sync/streaming/SSEHandler/index.js +0 -1
  31. package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +9 -23
  32. package/cjs/sync/streaming/constants.js +1 -2
  33. package/cjs/sync/streaming/parseUtils.js +8 -3
  34. package/cjs/sync/streaming/pushManager.js +68 -97
  35. package/cjs/sync/submitters/telemetrySubmitter.js +0 -4
  36. package/cjs/sync/syncManagerOnline.js +14 -24
  37. package/cjs/utils/constants/index.js +2 -4
  38. package/cjs/utils/settingsValidation/index.js +2 -7
  39. package/esm/evaluator/matchers/index.js +1 -3
  40. package/esm/evaluator/matchers/matcherTypes.js +0 -1
  41. package/esm/evaluator/matchersTransform/index.js +1 -1
  42. package/esm/logger/constants.js +1 -0
  43. package/esm/logger/messages/info.js +2 -1
  44. package/esm/readiness/readinessManager.js +10 -14
  45. package/esm/readiness/sdkReadinessManager.js +6 -5
  46. package/esm/sdkClient/sdkClientMethodCS.js +2 -2
  47. package/esm/sdkClient/sdkClientMethodCSWithTT.js +2 -2
  48. package/esm/sdkFactory/index.js +1 -1
  49. package/esm/services/decorateHeaders.js +38 -0
  50. package/esm/services/splitApi.js +1 -5
  51. package/esm/services/splitHttpClient.js +5 -4
  52. package/esm/storages/AbstractSplitsCacheAsync.js +2 -2
  53. package/esm/storages/AbstractSplitsCacheSync.js +4 -3
  54. package/esm/storages/KeyBuilder.js +0 -3
  55. package/esm/storages/KeyBuilderCS.js +4 -15
  56. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +5 -17
  57. package/esm/storages/inLocalStorage/index.js +3 -7
  58. package/esm/storages/inMemory/InMemoryStorageCS.js +0 -5
  59. package/esm/storages/inMemory/SplitsCacheInMemory.js +12 -21
  60. package/esm/storages/inMemory/TelemetryCacheInMemory.js +10 -7
  61. package/esm/storages/pluggable/inMemoryWrapper.js +1 -1
  62. package/esm/sync/polling/fetchers/mySegmentsFetcher.js +1 -5
  63. package/esm/sync/polling/pollingManagerCS.js +34 -52
  64. package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  65. package/esm/sync/polling/updaters/mySegmentsUpdater.js +19 -18
  66. package/esm/sync/streaming/SSEClient/index.js +1 -5
  67. package/esm/sync/streaming/SSEHandler/index.js +1 -2
  68. package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +9 -23
  69. package/esm/sync/streaming/constants.js +0 -1
  70. package/esm/sync/streaming/parseUtils.js +8 -3
  71. package/esm/sync/streaming/pushManager.js +69 -97
  72. package/esm/sync/submitters/telemetrySubmitter.js +0 -4
  73. package/esm/sync/syncManagerOnline.js +15 -25
  74. package/esm/utils/constants/index.js +1 -3
  75. package/esm/utils/settingsValidation/index.js +2 -7
  76. package/package.json +1 -1
  77. package/src/dtos/types.ts +7 -17
  78. package/src/evaluator/matchers/index.ts +0 -2
  79. package/src/evaluator/matchers/matcherTypes.ts +0 -1
  80. package/src/evaluator/matchersTransform/index.ts +1 -1
  81. package/src/logger/constants.ts +1 -0
  82. package/src/logger/messages/info.ts +2 -1
  83. package/src/readiness/readinessManager.ts +9 -13
  84. package/src/readiness/sdkReadinessManager.ts +7 -7
  85. package/src/readiness/types.ts +2 -3
  86. package/src/sdkClient/sdkClientMethodCS.ts +2 -2
  87. package/src/sdkClient/sdkClientMethodCSWithTT.ts +2 -2
  88. package/src/sdkFactory/index.ts +1 -1
  89. package/src/services/decorateHeaders.ts +40 -0
  90. package/src/services/splitApi.ts +1 -6
  91. package/src/services/splitHttpClient.ts +5 -4
  92. package/src/services/types.ts +0 -1
  93. package/src/storages/AbstractSplitsCacheAsync.ts +2 -2
  94. package/src/storages/AbstractSplitsCacheSync.ts +5 -4
  95. package/src/storages/KeyBuilder.ts +0 -3
  96. package/src/storages/KeyBuilderCS.ts +5 -25
  97. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +3 -3
  98. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +5 -20
  99. package/src/storages/inLocalStorage/index.ts +4 -8
  100. package/src/storages/inMemory/InMemoryStorageCS.ts +0 -5
  101. package/src/storages/inMemory/SplitsCacheInMemory.ts +10 -15
  102. package/src/storages/inMemory/TelemetryCacheInMemory.ts +11 -7
  103. package/src/storages/pluggable/inMemoryWrapper.ts +1 -1
  104. package/src/storages/types.ts +5 -7
  105. package/src/sync/polling/fetchers/mySegmentsFetcher.ts +2 -6
  106. package/src/sync/polling/pollingManagerCS.ts +29 -61
  107. package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +10 -10
  108. package/src/sync/polling/types.ts +3 -4
  109. package/src/sync/polling/updaters/mySegmentsUpdater.ts +20 -17
  110. package/src/sync/streaming/SSEClient/index.ts +7 -10
  111. package/src/sync/streaming/SSEHandler/index.ts +1 -2
  112. package/src/sync/streaming/SSEHandler/types.ts +2 -14
  113. package/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts +9 -25
  114. package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
  115. package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +1 -1
  116. package/src/sync/streaming/UpdateWorkers/types.ts +2 -2
  117. package/src/sync/streaming/constants.ts +0 -1
  118. package/src/sync/streaming/parseUtils.ts +10 -6
  119. package/src/sync/streaming/pushManager.ts +67 -101
  120. package/src/sync/streaming/types.ts +3 -5
  121. package/src/sync/submitters/telemetrySubmitter.ts +0 -4
  122. package/src/sync/submitters/types.ts +4 -11
  123. package/src/sync/syncManagerOnline.ts +11 -19
  124. package/src/types.ts +9 -28
  125. package/src/utils/constants/index.ts +1 -3
  126. package/src/utils/settingsValidation/index.ts +3 -8
  127. package/src/utils/settingsValidation/types.ts +1 -1
  128. package/types/dtos/types.d.ts +6 -14
  129. package/types/logger/constants.d.ts +1 -0
  130. package/types/readiness/readinessManager.d.ts +2 -2
  131. package/types/readiness/sdkReadinessManager.d.ts +3 -2
  132. package/types/readiness/types.d.ts +2 -3
  133. package/types/services/decorateHeaders.d.ts +2 -0
  134. package/types/services/types.d.ts +0 -1
  135. package/types/storages/AbstractSplitsCacheAsync.d.ts +1 -1
  136. package/types/storages/AbstractSplitsCacheSync.d.ts +3 -3
  137. package/types/storages/KeyBuilder.d.ts +0 -1
  138. package/types/storages/KeyBuilderCS.d.ts +2 -7
  139. package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +2 -2
  140. package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +1 -1
  141. package/types/storages/inMemory/SplitsCacheInMemory.d.ts +2 -3
  142. package/types/storages/inMemory/TelemetryCacheInMemory.d.ts +6 -4
  143. package/types/storages/pluggable/inMemoryWrapper.d.ts +1 -1
  144. package/types/storages/types.d.ts +3 -4
  145. package/types/sync/polling/syncTasks/mySegmentsSyncTask.d.ts +3 -2
  146. package/types/sync/polling/types.d.ts +3 -10
  147. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +4 -4
  148. package/types/sync/streaming/SSEClient/index.d.ts +0 -1
  149. package/types/sync/streaming/SSEHandler/types.d.ts +2 -13
  150. package/types/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.d.ts +2 -3
  151. package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -2
  152. package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +2 -3
  153. package/types/sync/streaming/UpdateWorkers/types.d.ts +2 -2
  154. package/types/sync/streaming/constants.d.ts +0 -1
  155. package/types/sync/streaming/parseUtils.d.ts +4 -2
  156. package/types/sync/streaming/pushManager.d.ts +0 -2
  157. package/types/sync/streaming/types.d.ts +4 -5
  158. package/types/sync/submitters/types.d.ts +3 -10
  159. package/types/types.d.ts +11 -26
  160. package/types/utils/constants/index.d.ts +1 -3
  161. package/types/utils/settingsValidation/index.d.ts +0 -2
  162. package/types/utils/settingsValidation/types.d.ts +1 -1
  163. package/cjs/evaluator/matchers/large_segment.js +0 -16
  164. package/esm/evaluator/matchers/large_segment.js +0 -12
  165. package/src/evaluator/matchers/large_segment.ts +0 -18
@@ -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.
@@ -150,9 +143,8 @@ function pushManagerFactory(params, pollingManager) {
150
143
  splitsUpdateWorker.stop();
151
144
  if (userKey)
152
145
  (0, lang_1.forOwn)(clients, function (_a) {
153
- var worker = _a.worker, workerLarge = _a.workerLarge;
154
- worker.stop();
155
- workerLarge && workerLarge.stop();
146
+ var worker = _a.worker;
147
+ return worker.stop();
156
148
  });
157
149
  else
158
150
  segmentsUpdateWorker.stop();
@@ -206,83 +198,6 @@ function pushManagerFactory(params, pollingManager) {
206
198
  }
207
199
  splitsUpdateWorker.put(parsedData);
208
200
  });
209
- function handleMySegmentsUpdate(parsedData) {
210
- var isLS = parsedData.type === constants_1.MY_LARGE_SEGMENTS_UPDATE;
211
- switch (parsedData.u) {
212
- case types_1.UpdateStrategy.BoundedFetchRequest: {
213
- var bitmap_1;
214
- try {
215
- bitmap_1 = (0, parseUtils_1.parseBitmap)(parsedData.d, parsedData.c);
216
- }
217
- catch (e) {
218
- log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['BoundedFetchRequest', e]);
219
- break;
220
- }
221
- (0, lang_1.forOwn)(clients, function (_a, matchingKey) {
222
- var hash64 = _a.hash64, worker = _a.worker, workerLarge = _a.workerLarge;
223
- 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);
227
- }
228
- });
229
- return;
230
- }
231
- case types_1.UpdateStrategy.KeyList: {
232
- var keyList = void 0, added_1, removed_1;
233
- try {
234
- keyList = (0, parseUtils_1.parseKeyList)(parsedData.d, parsedData.c);
235
- added_1 = new sets_1._Set(keyList.a);
236
- removed_1 = new sets_1._Set(keyList.r);
237
- }
238
- catch (e) {
239
- log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['KeyList', e]);
240
- break;
241
- }
242
- (0, lang_1.forOwn)(clients, function (_a) {
243
- var hash64 = _a.hash64, worker = _a.worker, workerLarge = _a.workerLarge;
244
- var add = added_1.has(hash64.dec) ? true : removed_1.has(hash64.dec) ? false : undefined;
245
- 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
- }]);
255
- }
256
- });
257
- return;
258
- }
259
- 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']);
262
- break;
263
- }
264
- (0, lang_1.forOwn)(clients, function (_a) {
265
- var worker = _a.worker, workerLarge = _a.workerLarge;
266
- isLS ?
267
- workerLarge && workerLarge.put(parsedData.changeNumber, parsedData.largeSegments.map(function (largeSegment) { return ({
268
- name: largeSegment,
269
- add: false
270
- }); })) :
271
- worker.put(parsedData.changeNumber, [{
272
- name: parsedData.segmentName,
273
- add: false
274
- }]);
275
- });
276
- return;
277
- }
278
- // `UpdateStrategy.UnboundedFetchRequest` and fallbacks of other cases
279
- (0, lang_1.forOwn)(clients, function (_a, matchingKey) {
280
- var worker = _a.worker, workerLarge = _a.workerLarge;
281
- isLS ?
282
- workerLarge && workerLarge.put(parsedData.changeNumber, undefined, getDelay(parsedData, matchingKey)) :
283
- worker.put(parsedData.changeNumber);
284
- });
285
- }
286
201
  if (userKey) {
287
202
  pushEmitter.on(constants_1.MY_SEGMENTS_UPDATE, function handleMySegmentsUpdate(parsedData, channel) {
288
203
  var userKeyHash = channel.split('_')[2];
@@ -291,8 +206,68 @@ function pushManagerFactory(params, pollingManager) {
291
206
  clients[userKey].worker.put(parsedData.changeNumber, parsedData.includesPayload ? parsedData.segmentList ? parsedData.segmentList : [] : undefined);
292
207
  }
293
208
  });
294
- pushEmitter.on(constants_1.MY_SEGMENTS_UPDATE_V2, handleMySegmentsUpdate);
295
- pushEmitter.on(constants_1.MY_LARGE_SEGMENTS_UPDATE, handleMySegmentsUpdate);
209
+ pushEmitter.on(constants_1.MY_SEGMENTS_UPDATE_V2, function handleMySegmentsUpdate(parsedData) {
210
+ switch (parsedData.u) {
211
+ case types_1.UpdateStrategy.BoundedFetchRequest: {
212
+ var bitmap_1;
213
+ try {
214
+ bitmap_1 = (0, parseUtils_1.parseBitmap)(parsedData.d, parsedData.c);
215
+ }
216
+ catch (e) {
217
+ log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['BoundedFetchRequest', e]);
218
+ break;
219
+ }
220
+ (0, lang_1.forOwn)(clients, function (_a) {
221
+ var hash64 = _a.hash64, worker = _a.worker;
222
+ if ((0, parseUtils_1.isInBitmap)(bitmap_1, hash64.hex)) {
223
+ worker.put(parsedData.changeNumber); // fetch mySegments
224
+ }
225
+ });
226
+ return;
227
+ }
228
+ case types_1.UpdateStrategy.KeyList: {
229
+ var keyList = void 0, added_1, removed_1;
230
+ try {
231
+ keyList = (0, parseUtils_1.parseKeyList)(parsedData.d, parsedData.c);
232
+ added_1 = new sets_1._Set(keyList.a);
233
+ removed_1 = new sets_1._Set(keyList.r);
234
+ }
235
+ catch (e) {
236
+ log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['KeyList', e]);
237
+ break;
238
+ }
239
+ (0, lang_1.forOwn)(clients, function (_a) {
240
+ var hash64 = _a.hash64, worker = _a.worker;
241
+ var add = added_1.has(hash64.dec) ? true : removed_1.has(hash64.dec) ? false : undefined;
242
+ if (add !== undefined) {
243
+ worker.put(parsedData.changeNumber, {
244
+ name: parsedData.segmentName,
245
+ add: add
246
+ });
247
+ }
248
+ });
249
+ return;
250
+ }
251
+ case types_1.UpdateStrategy.SegmentRemoval:
252
+ if (!parsedData.segmentName) {
253
+ log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['SegmentRemoval', 'No segment name was provided']);
254
+ break;
255
+ }
256
+ (0, lang_1.forOwn)(clients, function (_a) {
257
+ var worker = _a.worker;
258
+ return worker.put(parsedData.changeNumber, {
259
+ name: parsedData.segmentName,
260
+ add: false
261
+ });
262
+ });
263
+ return;
264
+ }
265
+ // `UpdateStrategy.UnboundedFetchRequest` and fallbacks of other cases
266
+ (0, lang_1.forOwn)(clients, function (_a) {
267
+ var worker = _a.worker;
268
+ worker.put(parsedData.changeNumber);
269
+ });
270
+ });
296
271
  }
297
272
  else {
298
273
  pushEmitter.on(constants_1.SEGMENT_UPDATE, segmentsUpdateWorker.put);
@@ -315,7 +290,7 @@ function pushManagerFactory(params, pollingManager) {
315
290
  return;
316
291
  disconnected = false;
317
292
  if (userKey)
318
- this.add(userKey, pollingManager.segmentsSyncTask, pollingManager.largeSegmentsSyncTask); // client-side
293
+ this.add(userKey, pollingManager.segmentsSyncTask); // client-side
319
294
  else
320
295
  setTimeout(connectPush); // server-side runs in next cycle as in client-side, for consistency with client-side
321
296
  },
@@ -324,15 +299,11 @@ function pushManagerFactory(params, pollingManager) {
324
299
  return disconnected === false;
325
300
  },
326
301
  // [Only for client-side]
327
- add: function (userKey, mySegmentsSyncTask, myLargeSegmentsSyncTask) {
302
+ add: function (userKey, mySegmentsSyncTask) {
328
303
  var hash = (0, AuthClient_1.hashUserKey)(userKey);
329
304
  if (!userKeyHashes[hash]) {
330
305
  userKeyHashes[hash] = userKey;
331
- clients[userKey] = {
332
- hash64: (0, murmur3_64_1.hash64)(userKey),
333
- worker: (0, MySegmentsUpdateWorker_1.MySegmentsUpdateWorker)(mySegmentsSyncTask, telemetryTracker, constants_3.MY_SEGMENT),
334
- workerLarge: myLargeSegmentsSyncTask ? (0, MySegmentsUpdateWorker_1.MySegmentsUpdateWorker)(myLargeSegmentsSyncTask, telemetryTracker, constants_3.MY_LARGE_SEGMENT) : undefined
335
- };
306
+ clients[userKey] = { hash64: (0, murmur3_64_1.hash64)(userKey), worker: (0, MySegmentsUpdateWorker_1.MySegmentsUpdateWorker)(mySegmentsSyncTask, telemetryTracker) };
336
307
  connectForNewClient = true; // we must reconnect on start, to listen the channel for the new user key
337
308
  // Reconnects in case of a new client.
338
309
  // Run in next event-loop cycle to save authentication calls
@@ -62,17 +62,13 @@ function telemetryCacheConfigAdapter(telemetry, settings) {
62
62
  pop: function () {
63
63
  var urls = settings.urls, scheduler = settings.scheduler;
64
64
  var isClientSide = settings.core.key !== undefined;
65
- var largeSegmentsEnabled = isClientSide && settings.sync.largeSegmentsEnabled;
66
65
  var _a = getTelemetryFlagSetsStats(settings.sync.__splitFiltersValidation), flagSetsTotal = _a.flagSetsTotal, flagSetsIgnored = _a.flagSetsIgnored;
67
66
  return (0, objectAssign_1.objectAssign)(getTelemetryConfigStats(settings.mode, settings.storage.type), {
68
67
  sE: settings.streamingEnabled,
69
- lsE: largeSegmentsEnabled ? largeSegmentsEnabled : undefined,
70
- wls: largeSegmentsEnabled ? settings.startup.waitForLargeSegments : undefined,
71
68
  rR: {
72
69
  sp: scheduler.featuresRefreshRate / 1000,
73
70
  se: isClientSide ? undefined : scheduler.segmentsRefreshRate / 1000,
74
71
  ms: isClientSide ? scheduler.segmentsRefreshRate / 1000 : undefined,
75
- mls: largeSegmentsEnabled ? scheduler.largeSegmentsRefreshRate / 1000 : undefined,
76
72
  im: scheduler.impressionsRefreshRate / 1000,
77
73
  ev: scheduler.eventsPushRate / 1000,
78
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
  },
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MY_SEGMENT = exports.SEGMENT = exports.TOKEN = exports.TELEMETRY = exports.EVENTS = exports.IMPRESSIONS_COUNT = exports.IMPRESSIONS = exports.SPLITS = exports.NONE_ENUM = exports.DEBUG_ENUM = exports.OPTIMIZED_ENUM = exports.CONSUMER_PARTIAL_ENUM = exports.CONSUMER_ENUM = exports.STANDALONE_ENUM = exports.DEDUPED = exports.DROPPED = exports.QUEUED = exports.NAMES_FN_LABEL = exports.SPLITS_FN_LABEL = exports.SPLIT_FN_LABEL = exports.TRACK_FN_LABEL = exports.GET_TREATMENTS_WITH_CONFIG_BY_FLAG_SETS = exports.GET_TREATMENTS_WITH_CONFIG_BY_FLAG_SET = exports.GET_TREATMENTS_BY_FLAG_SETS = exports.GET_TREATMENTS_BY_FLAG_SET = exports.GET_TREATMENTS_WITH_CONFIG = exports.GET_TREATMENT_WITH_CONFIG = exports.GET_TREATMENTS = exports.GET_TREATMENT = exports.CONSENT_UNKNOWN = exports.CONSENT_DECLINED = exports.CONSENT_GRANTED = exports.STORAGE_PLUGGABLE = exports.STORAGE_REDIS = exports.STORAGE_LOCALSTORAGE = exports.STORAGE_MEMORY = exports.CONSUMER_PARTIAL_MODE = exports.CONSUMER_MODE = exports.PRODUCER_MODE = exports.STANDALONE_MODE = exports.LOCALHOST_MODE = exports.NONE = exports.OPTIMIZED = exports.DEBUG = exports.SPLIT_EVENT = exports.SPLIT_IMPRESSION = exports.NA = exports.UNKNOWN = exports.CONTROL_WITH_CONFIG = exports.CONTROL = void 0;
4
- exports.IN_LARGE_SEGMENT = exports.IN_SEGMENT = exports.FLAG_SPEC_VERSION = exports.PAUSED = exports.ENABLED = exports.DISABLED = exports.NON_REQUESTED = exports.REQUESTED = exports.POLLING = exports.STREAMING = exports.AUTH_REJECTION = exports.SYNC_MODE_UPDATE = exports.ABLY_ERROR = exports.TOKEN_REFRESH = exports.SSE_CONNECTION_ERROR = exports.STREAMING_STATUS = exports.OCCUPANCY_SEC = exports.OCCUPANCY_PRI = exports.CONNECTION_ESTABLISHED = exports.TRACK = exports.TREATMENTS_WITH_CONFIG_BY_FLAGSETS = exports.TREATMENTS_WITH_CONFIG_BY_FLAGSET = exports.TREATMENTS_BY_FLAGSETS = exports.TREATMENTS_BY_FLAGSET = exports.TREATMENTS_WITH_CONFIG = exports.TREATMENT_WITH_CONFIG = exports.TREATMENTS = exports.TREATMENT = exports.MY_LARGE_SEGMENT = void 0;
4
+ exports.IN_SEGMENT = exports.FLAG_SPEC_VERSION = exports.PAUSED = exports.ENABLED = exports.DISABLED = exports.NON_REQUESTED = exports.REQUESTED = exports.POLLING = exports.STREAMING = exports.AUTH_REJECTION = exports.SYNC_MODE_UPDATE = exports.ABLY_ERROR = exports.TOKEN_REFRESH = exports.SSE_CONNECTION_ERROR = exports.STREAMING_STATUS = exports.OCCUPANCY_SEC = exports.OCCUPANCY_PRI = exports.CONNECTION_ESTABLISHED = exports.TRACK = exports.TREATMENTS_WITH_CONFIG_BY_FLAGSETS = exports.TREATMENTS_WITH_CONFIG_BY_FLAGSET = exports.TREATMENTS_BY_FLAGSETS = exports.TREATMENTS_BY_FLAGSET = exports.TREATMENTS_WITH_CONFIG = exports.TREATMENT_WITH_CONFIG = exports.TREATMENTS = exports.TREATMENT = void 0;
5
5
  // Special treatments
6
6
  exports.CONTROL = 'control';
7
7
  exports.CONTROL_WITH_CONFIG = {
@@ -65,7 +65,6 @@ exports.TELEMETRY = 'te';
65
65
  exports.TOKEN = 'to';
66
66
  exports.SEGMENT = 'se';
67
67
  exports.MY_SEGMENT = 'ms';
68
- exports.MY_LARGE_SEGMENT = 'mls';
69
68
  exports.TREATMENT = 't';
70
69
  exports.TREATMENTS = 'ts';
71
70
  exports.TREATMENT_WITH_CONFIG = 'tc';
@@ -91,7 +90,6 @@ exports.NON_REQUESTED = 1;
91
90
  exports.DISABLED = 0;
92
91
  exports.ENABLED = 1;
93
92
  exports.PAUSED = 2;
94
- exports.FLAG_SPEC_VERSION = '1.2';
93
+ exports.FLAG_SPEC_VERSION = '1.1';
95
94
  // Matcher types
96
95
  exports.IN_SEGMENT = 'IN_SEGMENT';
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));
@@ -190,11 +186,10 @@ function settingsValidation(config, validationParams) {
190
186
  var splitFiltersValidation = (0, splitFilters_1.validateSplitFilters)(log, sync.splitFilters, withDefaults.mode);
191
187
  sync.splitFilters = splitFiltersValidation.validFilters;
192
188
  sync.__splitFiltersValidation = splitFiltersValidation;
193
- // ensure a valid flag spec version
194
189
  sync.flagSpecVersion = flagSpec ? flagSpec(withDefaults) : constants_1.FLAG_SPEC_VERSION;
195
190
  // ensure a valid user consent value
196
191
  // @ts-ignore, modify readonly prop
197
- withDefaults.userConsent = consent ? consent(withDefaults) : undefined;
192
+ withDefaults.userConsent = consent(withDefaults);
198
193
  return withDefaults;
199
194
  }
200
195
  exports.settingsValidation = settingsValidation;
@@ -1,6 +1,5 @@
1
1
  import { allMatcherContext } from './all';
2
2
  import { segmentMatcherContext } from './segment';
3
- import { largeSegmentMatcherContext } from './large_segment';
4
3
  import { whitelistMatcherContext } from './whitelist';
5
4
  import { equalToMatcherContext } from './eq';
6
5
  import { greaterThanEqualMatcherContext } from './gte';
@@ -44,8 +43,7 @@ var matchers = [
44
43
  greaterThanEqualToSemverMatcherContext,
45
44
  lessThanEqualToSemverMatcherContext,
46
45
  betweenSemverMatcherContext,
47
- inListSemverMatcherContext,
48
- largeSegmentMatcherContext, // IN_LARGE_SEGMENT: 23
46
+ inListSemverMatcherContext, // IN_LIST_SEMVER: 22
49
47
  ];
50
48
  /**
51
49
  * Matcher factory.
@@ -22,7 +22,6 @@ export var matcherTypes = {
22
22
  LESS_THAN_OR_EQUAL_TO_SEMVER: 20,
23
23
  BETWEEN_SEMVER: 21,
24
24
  IN_LIST_SEMVER: 22,
25
- IN_LARGE_SEGMENT: 23,
26
25
  };
27
26
  export var matcherDataTypes = {
28
27
  BOOLEAN: 'BOOLEAN',
@@ -15,7 +15,7 @@ export function matchersTransform(matchers) {
15
15
  // As default input data type we use string (even for ALL_KEYS)
16
16
  var dataType = matcherDataTypes.STRING;
17
17
  var value = undefined;
18
- if (type === matcherTypes.IN_SEGMENT || type === matcherTypes.IN_LARGE_SEGMENT) {
18
+ if (type === matcherTypes.IN_SEGMENT) {
19
19
  value = segmentTransform(userDefinedSegmentMatcherData);
20
20
  }
21
21
  else if (type === matcherTypes.EQUAL_TO) {
@@ -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;
@@ -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 resetting timer.'],
23
+ [c.SUBMITTERS_PUSH_FULL_QUEUE, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Flushing full %s queue and reseting 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.'],
@@ -13,20 +13,20 @@ function splitsEventEmitterFactory(EventEmitter) {
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
  }
22
23
  /**
23
24
  * Factory of readiness manager, which handles the ready / update event propagation.
24
25
  */
25
- export function readinessManagerFactory(EventEmitter, settings, splits) {
26
+ export function readinessManagerFactory(EventEmitter, readyTimeout, splits) {
27
+ if (readyTimeout === void 0) { readyTimeout = 0; }
26
28
  if (splits === void 0) { splits = splitsEventEmitterFactory(EventEmitter); }
27
- var _a = settings.startup, readyTimeout = _a.readyTimeout, waitForLargeSegments = _a.waitForLargeSegments, largeSegmentsEnabled = settings.sync.largeSegmentsEnabled;
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,11 +92,11 @@ 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
- shared: function () {
96
+ shared: function (readyTimeout) {
97
+ if (readyTimeout === void 0) { readyTimeout = 0; }
100
98
  refCount++;
101
- return readinessManagerFactory(EventEmitter, settings, splits);
99
+ return readinessManagerFactory(EventEmitter, readyTimeout, splits);
102
100
  },
103
101
  // @TODO review/remove next methods when non-recoverable errors are reworked
104
102
  // Called on consumer mode, when storage fails to connect
@@ -109,8 +107,6 @@ export function readinessManagerFactory(EventEmitter, settings, splits) {
109
107
  destroy: function () {
110
108
  isDestroyed = true;
111
109
  segments.removeAllListeners();
112
- if (largeSegments)
113
- largeSegments.removeAllListeners();
114
110
  gate.removeAllListeners();
115
111
  clearTimeout(readyTimeoutId);
116
112
  if (refCount > 0)
@@ -12,9 +12,9 @@ var REMOVE_LISTENER_EVENT = 'removeListener';
12
12
  * @param readyTimeout time in millis to emit SDK_READY_TIME_OUT event
13
13
  * @param readinessManager optional readinessManager to use. only used internally for `shared` method
14
14
  */
15
- export function sdkReadinessManagerFactory(EventEmitter, settings, readinessManager) {
16
- if (readinessManager === void 0) { readinessManager = readinessManagerFactory(EventEmitter, settings); }
17
- var log = settings.log;
15
+ export function sdkReadinessManagerFactory(log, EventEmitter, readyTimeout, readinessManager) {
16
+ if (readyTimeout === void 0) { readyTimeout = 0; }
17
+ if (readinessManager === void 0) { readinessManager = readinessManagerFactory(EventEmitter, readyTimeout); }
18
18
  /** Ready callback warning */
19
19
  var internalReadyCbCount = 0;
20
20
  var readyCbCount = 0;
@@ -57,8 +57,9 @@ export function sdkReadinessManagerFactory(EventEmitter, settings, readinessMana
57
57
  }
58
58
  return {
59
59
  readinessManager: readinessManager,
60
- shared: function () {
61
- return sdkReadinessManagerFactory(EventEmitter, settings, readinessManager.shared());
60
+ shared: function (readyTimeout) {
61
+ if (readyTimeout === void 0) { readyTimeout = 0; }
62
+ return sdkReadinessManagerFactory(log, EventEmitter, readyTimeout, readinessManager.shared(readyTimeout));
62
63
  },
63
64
  incInternalReadyCbCount: function () {
64
65
  internalReadyCbCount++;
@@ -14,7 +14,7 @@ function buildInstanceId(key) {
14
14
  * Therefore, clients don't have a bound TT for the track method.
15
15
  */
16
16
  export function sdkClientMethodCSFactory(params) {
17
- var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, key = _a.core.key, log = _a.log;
17
+ var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, key = _a.core.key, readyTimeout = _a.startup.readyTimeout, log = _a.log;
18
18
  var mainClientInstance = clientCSDecorator(log, sdkClientFactory(params), key);
19
19
  var parsedDefaultKey = keyParser(key);
20
20
  var defaultInstanceId = buildInstanceId(parsedDefaultKey);
@@ -34,7 +34,7 @@ export function sdkClientMethodCSFactory(params) {
34
34
  var instanceId = buildInstanceId(validKey);
35
35
  if (!clientInstances[instanceId]) {
36
36
  var matchingKey = getMatching(validKey);
37
- var sharedSdkReadiness_1 = sdkReadinessManager.shared();
37
+ var sharedSdkReadiness_1 = sdkReadinessManager.shared(readyTimeout);
38
38
  var sharedStorage = storage.shared && storage.shared(matchingKey, function (err) {
39
39
  if (err) {
40
40
  sharedSdkReadiness_1.readinessManager.timeout();
@@ -16,7 +16,7 @@ function buildInstanceId(key, trafficType) {
16
16
  * (default client) or the client method (shared clients).
17
17
  */
18
18
  export function sdkClientMethodCSFactory(params) {
19
- var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, _b = _a.core, key = _b.key, trafficType = _b.trafficType, log = _a.log;
19
+ var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, _b = _a.core, key = _b.key, trafficType = _b.trafficType, readyTimeout = _a.startup.readyTimeout, log = _a.log;
20
20
  var mainClientInstance = clientCSDecorator(log, sdkClientFactory(params), key, trafficType);
21
21
  var parsedDefaultKey = keyParser(key);
22
22
  var defaultInstanceId = buildInstanceId(parsedDefaultKey, trafficType);
@@ -43,7 +43,7 @@ export function sdkClientMethodCSFactory(params) {
43
43
  var instanceId = buildInstanceId(validKey, validTrafficType);
44
44
  if (!clientInstances[instanceId]) {
45
45
  var matchingKey = getMatching(validKey);
46
- var sharedSdkReadiness_1 = sdkReadinessManager.shared();
46
+ var sharedSdkReadiness_1 = sdkReadinessManager.shared(readyTimeout);
47
47
  var sharedStorage = storage.shared && storage.shared(matchingKey, function (err) {
48
48
  if (err) {
49
49
  sharedSdkReadiness_1.readinessManager.timeout();
@@ -22,7 +22,7 @@ export function sdkFactory(params) {
22
22
  // On non-recoverable errors, we should mark the SDK as destroyed and not start synchronization.
23
23
  // We will just log and allow for the SDK to end up throwing an SDK_TIMEOUT event for devs to handle.
24
24
  validateAndTrackApiKey(log, settings.core.authorizationKey);
25
- var sdkReadinessManager = sdkReadinessManagerFactory(platform.EventEmitter, settings);
25
+ var sdkReadinessManager = sdkReadinessManagerFactory(log, platform.EventEmitter, settings.startup.readyTimeout);
26
26
  var readiness = sdkReadinessManager.readinessManager;
27
27
  var storage = storageFactory({
28
28
  settings: settings,
@@ -0,0 +1,38 @@
1
+ import { objectAssign } from '../utils/lang/objectAssign';
2
+ import { _Set } from '../utils/lang/sets';
3
+ var FORBIDDEN_HEADERS = new _Set([
4
+ 'splitsdkversion',
5
+ 'splitsdkmachineip',
6
+ 'splitsdkmachinename',
7
+ 'splitsdkimpressionsmode',
8
+ 'host',
9
+ 'referrer',
10
+ 'content-type',
11
+ 'content-length',
12
+ 'content-encoding',
13
+ 'accept',
14
+ 'keep-alive',
15
+ 'x-fastly-debug'
16
+ ]);
17
+ function convertKeysToLowerCase(obj) {
18
+ return Object.keys(obj).reduce(function (acc, key) {
19
+ acc[key.toLowerCase()] = obj[key];
20
+ return acc;
21
+ }, {});
22
+ }
23
+ export function decorateHeaders(settings, headers) {
24
+ var _a;
25
+ if ((_a = settings.sync.requestOptions) === null || _a === void 0 ? void 0 : _a.getHeaderOverrides) {
26
+ headers = convertKeysToLowerCase(headers);
27
+ try {
28
+ var headerOverrides_1 = convertKeysToLowerCase(settings.sync.requestOptions.getHeaderOverrides({ headers: objectAssign({}, headers) }));
29
+ Object.keys(headerOverrides_1)
30
+ .filter(function (key) { return !FORBIDDEN_HEADERS.has(key); })
31
+ .forEach(function (key) { return headers[key] = headerOverrides_1[key]; });
32
+ }
33
+ catch (e) {
34
+ settings.log.error('Problem adding custom headers to request decorator: ' + e);
35
+ }
36
+ }
37
+ return headers;
38
+ }
@@ -1,6 +1,6 @@
1
1
  import { splitHttpClientFactory } from './splitHttpClient';
2
2
  import { objectAssign } from '../utils/lang/objectAssign';
3
- import { SPLITS, IMPRESSIONS, IMPRESSIONS_COUNT, EVENTS, TELEMETRY, TOKEN, SEGMENT, MY_SEGMENT, MY_LARGE_SEGMENT } from '../utils/constants';
3
+ import { SPLITS, IMPRESSIONS, IMPRESSIONS_COUNT, EVENTS, TELEMETRY, TOKEN, SEGMENT, MY_SEGMENT } from '../utils/constants';
4
4
  import { ERROR_TOO_MANY_SETS } from '../logger/constants';
5
5
  var noCacheHeaderOptions = { headers: { 'Cache-Control': 'no-cache' } };
6
6
  function userKeyToQueryParam(userKey) {
@@ -61,10 +61,6 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
61
61
  var url = urls.sdk + "/mySegments/" + encodeURIComponent(userMatchingKey);
62
62
  return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(MY_SEGMENT));
63
63
  },
64
- fetchMyLargeSegments: function (userMatchingKey, noCache) {
65
- var url = urls.sdk + "/myLargeSegments/" + encodeURIComponent(userMatchingKey);
66
- return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(MY_LARGE_SEGMENT));
67
- },
68
64
  /**
69
65
  * Post events.
70
66
  *