@splitsoftware/splitio-commons 1.16.1-rc.0 → 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 (142) 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 +3 -9
  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/storages/pluggable/inMemoryWrapper.js +1 -1
  17. package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +4 -7
  18. package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
  19. package/cjs/sync/polling/pollingManagerCS.js +30 -54
  20. package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  21. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +25 -27
  22. package/cjs/sync/streaming/SSEHandler/index.js +7 -8
  23. package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +18 -5
  24. package/cjs/sync/streaming/constants.js +2 -3
  25. package/cjs/sync/streaming/parseUtils.js +14 -9
  26. package/cjs/sync/streaming/pushManager.js +29 -53
  27. package/cjs/sync/submitters/telemetrySubmitter.js +0 -2
  28. package/cjs/sync/syncManagerOnline.js +14 -24
  29. package/cjs/utils/constants/index.js +1 -1
  30. package/cjs/utils/settingsValidation/index.js +1 -5
  31. package/esm/logger/constants.js +2 -1
  32. package/esm/logger/messages/info.js +2 -1
  33. package/esm/logger/messages/warn.js +1 -1
  34. package/esm/readiness/readinessManager.js +3 -9
  35. package/esm/services/splitApi.js +5 -9
  36. package/esm/storages/AbstractSegmentsCacheSync.js +1 -6
  37. package/esm/storages/AbstractSplitsCacheAsync.js +2 -2
  38. package/esm/storages/AbstractSplitsCacheSync.js +5 -3
  39. package/esm/storages/KeyBuilder.js +0 -3
  40. package/esm/storages/KeyBuilderCS.js +6 -0
  41. package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +23 -2
  42. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +5 -17
  43. package/esm/storages/inMemory/MySegmentsCacheInMemory.js +5 -1
  44. package/esm/storages/inMemory/SplitsCacheInMemory.js +7 -16
  45. package/esm/storages/pluggable/inMemoryWrapper.js +1 -1
  46. package/esm/sync/polling/fetchers/mySegmentsFetcher.js +4 -7
  47. package/esm/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
  48. package/esm/sync/polling/pollingManagerCS.js +31 -55
  49. package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  50. package/esm/sync/polling/updaters/mySegmentsUpdater.js +23 -25
  51. package/esm/sync/streaming/SSEHandler/index.js +8 -9
  52. package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +18 -5
  53. package/esm/sync/streaming/constants.js +1 -2
  54. package/esm/sync/streaming/parseUtils.js +12 -8
  55. package/esm/sync/streaming/pushManager.js +31 -54
  56. package/esm/sync/submitters/telemetrySubmitter.js +0 -2
  57. package/esm/sync/syncManagerOnline.js +15 -25
  58. package/esm/utils/constants/index.js +1 -1
  59. package/esm/utils/settingsValidation/index.js +1 -5
  60. package/package.json +1 -1
  61. package/src/dtos/types.ts +14 -8
  62. package/src/logger/constants.ts +2 -1
  63. package/src/logger/messages/info.ts +2 -1
  64. package/src/logger/messages/warn.ts +1 -1
  65. package/src/readiness/readinessManager.ts +3 -7
  66. package/src/readiness/types.ts +0 -1
  67. package/src/services/splitApi.ts +6 -11
  68. package/src/services/splitHttpClient.ts +1 -1
  69. package/src/services/types.ts +2 -3
  70. package/src/storages/AbstractSegmentsCacheSync.ts +2 -6
  71. package/src/storages/AbstractSplitsCacheAsync.ts +2 -2
  72. package/src/storages/AbstractSplitsCacheSync.ts +6 -4
  73. package/src/storages/KeyBuilder.ts +0 -3
  74. package/src/storages/KeyBuilderCS.ts +9 -0
  75. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +26 -2
  76. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +5 -20
  77. package/src/storages/inMemory/MySegmentsCacheInMemory.ts +7 -1
  78. package/src/storages/inMemory/SplitsCacheInMemory.ts +7 -13
  79. package/src/storages/pluggable/inMemoryWrapper.ts +1 -1
  80. package/src/storages/types.ts +6 -5
  81. package/src/sync/polling/fetchers/mySegmentsFetcher.ts +7 -10
  82. package/src/sync/polling/fetchers/segmentChangesFetcher.ts +1 -1
  83. package/src/sync/polling/fetchers/types.ts +2 -2
  84. package/src/sync/polling/pollingManagerCS.ts +27 -62
  85. package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +11 -11
  86. package/src/sync/polling/types.ts +9 -8
  87. package/src/sync/polling/updaters/mySegmentsUpdater.ts +22 -24
  88. package/src/sync/streaming/SSEClient/index.ts +4 -6
  89. package/src/sync/streaming/SSEHandler/index.ts +11 -13
  90. package/src/sync/streaming/SSEHandler/types.ts +13 -25
  91. package/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts +21 -7
  92. package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
  93. package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +1 -1
  94. package/src/sync/streaming/UpdateWorkers/types.ts +2 -2
  95. package/src/sync/streaming/constants.ts +1 -2
  96. package/src/sync/streaming/parseUtils.ts +19 -11
  97. package/src/sync/streaming/pushManager.ts +37 -65
  98. package/src/sync/streaming/types.ts +9 -11
  99. package/src/sync/submitters/telemetrySubmitter.ts +0 -2
  100. package/src/sync/submitters/types.ts +1 -3
  101. package/src/sync/syncManagerOnline.ts +11 -19
  102. package/src/types.ts +1 -26
  103. package/src/utils/constants/index.ts +1 -1
  104. package/src/utils/settingsValidation/index.ts +1 -5
  105. package/types/dtos/types.d.ts +14 -7
  106. package/types/logger/constants.d.ts +2 -1
  107. package/types/readiness/types.d.ts +0 -1
  108. package/types/services/decorateHeaders.d.ts +2 -0
  109. package/types/services/splitApi.d.ts +1 -1
  110. package/types/services/splitHttpClient.d.ts +1 -1
  111. package/types/services/types.d.ts +2 -3
  112. package/types/storages/AbstractSegmentsCacheSync.d.ts +2 -6
  113. package/types/storages/AbstractSplitsCacheAsync.d.ts +1 -1
  114. package/types/storages/AbstractSplitsCacheSync.d.ts +3 -3
  115. package/types/storages/KeyBuilder.d.ts +0 -1
  116. package/types/storages/KeyBuilderCS.d.ts +2 -0
  117. package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +3 -2
  118. package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +1 -1
  119. package/types/storages/inMemory/MySegmentsCacheInMemory.d.ts +3 -1
  120. package/types/storages/inMemory/SplitsCacheInMemory.d.ts +1 -2
  121. package/types/storages/pluggable/inMemoryWrapper.d.ts +1 -1
  122. package/types/storages/types.d.ts +4 -4
  123. package/types/sync/polling/fetchers/mySegmentsFetcher.d.ts +2 -2
  124. package/types/sync/polling/fetchers/types.d.ts +2 -2
  125. package/types/sync/polling/syncTasks/mySegmentsSyncTask.d.ts +4 -3
  126. package/types/sync/polling/types.d.ts +7 -13
  127. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +3 -2
  128. package/types/sync/streaming/SSEHandler/types.d.ts +13 -22
  129. package/types/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.d.ts +2 -2
  130. package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +2 -1
  131. package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +3 -2
  132. package/types/sync/streaming/UpdateWorkers/types.d.ts +2 -2
  133. package/types/sync/streaming/constants.d.ts +1 -2
  134. package/types/sync/streaming/parseUtils.d.ts +4 -5
  135. package/types/sync/streaming/pushManager.d.ts +0 -2
  136. package/types/sync/streaming/pushManagerCS_Spec1_3.d.ts +9 -0
  137. package/types/sync/streaming/pushManager_Spec1_3.d.ts +9 -0
  138. package/types/sync/streaming/types.d.ts +8 -9
  139. package/types/sync/submitters/types.d.ts +1 -3
  140. package/types/types.d.ts +0 -25
  141. package/types/utils/constants/index.d.ts +1 -1
  142. package/types/utils/settingsValidation/index.d.ts +0 -2
@@ -1,6 +1,6 @@
1
1
  import { errorParser, messageParser } from './NotificationParser';
2
2
  import { notificationKeeperFactory } from './NotificationKeeper';
3
- import { PUSH_RETRYABLE_ERROR, PUSH_NONRETRYABLE_ERROR, OCCUPANCY, CONTROL, MY_SEGMENTS_UPDATE, MY_SEGMENTS_UPDATE_V2, SEGMENT_UPDATE, SPLIT_KILL, SPLIT_UPDATE, MY_LARGE_SEGMENTS_UPDATE } from '../constants';
3
+ import { PUSH_RETRYABLE_ERROR, PUSH_NONRETRYABLE_ERROR, OCCUPANCY, CONTROL, MY_SEGMENTS_UPDATE_V3, SEGMENT_UPDATE, SPLIT_KILL, SPLIT_UPDATE, MY_LARGE_SEGMENTS_UPDATE } from '../constants';
4
4
  import { STREAMING_PARSING_ERROR_FAILS, ERROR_STREAMING_SSE, STREAMING_PARSING_MESSAGE_FAILS, STREAMING_NEW_MESSAGE } from '../../../logger/constants';
5
5
  import { ABLY_ERROR, NON_REQUESTED, SSE_CONNECTION_ERROR } from '../../../utils/constants';
6
6
  /**
@@ -65,20 +65,19 @@ export function SSEHandlerFactory(log, pushEmitter, telemetryTracker) {
65
65
  }
66
66
  var parsedData = messageWithParsedData.parsedData, data = messageWithParsedData.data, channel = messageWithParsedData.channel, timestamp = messageWithParsedData.timestamp;
67
67
  log.debug(STREAMING_NEW_MESSAGE, [data]);
68
- // we only handle update events if streaming is up.
69
- if (!notificationKeeper.isStreamingUp() && [OCCUPANCY, CONTROL].indexOf(parsedData.type) === -1)
68
+ // we only handle update events if streaming is up
69
+ // @ts-expect-error
70
+ var type = parsedData.type || parsedData.t;
71
+ if (!notificationKeeper.isStreamingUp() && [OCCUPANCY, CONTROL].indexOf(type) === -1)
70
72
  return;
71
- switch (parsedData.type) {
73
+ switch (type) {
72
74
  /* update events */
73
75
  case SPLIT_UPDATE:
74
76
  case SEGMENT_UPDATE:
75
- case MY_SEGMENTS_UPDATE_V2:
77
+ case MY_SEGMENTS_UPDATE_V3:
76
78
  case MY_LARGE_SEGMENTS_UPDATE:
77
79
  case SPLIT_KILL:
78
- pushEmitter.emit(parsedData.type, parsedData);
79
- break;
80
- case MY_SEGMENTS_UPDATE:
81
- pushEmitter.emit(parsedData.type, parsedData, channel);
80
+ pushEmitter.emit(type, parsedData);
82
81
  break;
83
82
  /* occupancy & control events, handled by NotificationManagerKeeper */
84
83
  case OCCUPANCY:
@@ -9,6 +9,7 @@ export function MySegmentsUpdateWorker(mySegmentsSyncTask, telemetryTracker, upd
9
9
  var isHandlingEvent;
10
10
  var _segmentsData; // keeps the segmentsData (if included in notification payload) from the queued event with maximum changeNumber
11
11
  var _delay;
12
+ var _delayTimeoutID;
12
13
  var backoff = new Backoff(__handleMySegmentsUpdateCall);
13
14
  function __handleMySegmentsUpdateCall() {
14
15
  isHandlingEvent = true;
@@ -16,7 +17,15 @@ export function MySegmentsUpdateWorker(mySegmentsSyncTask, telemetryTracker, upd
16
17
  handleNewEvent = false;
17
18
  var currentMaxChangeNumber_1 = maxChangeNumber;
18
19
  // fetch mySegments revalidating data if cached
19
- mySegmentsSyncTask.execute(_segmentsData, true, _delay).then(function (result) {
20
+ var syncTask = _delay ?
21
+ new Promise(function (res) {
22
+ _delayTimeoutID = setTimeout(function () {
23
+ _delay = undefined;
24
+ mySegmentsSyncTask.execute(_segmentsData, true).then(res);
25
+ }, _delay);
26
+ }) :
27
+ mySegmentsSyncTask.execute(_segmentsData, true);
28
+ syncTask.then(function (result) {
20
29
  if (!isHandlingEvent)
21
30
  return; // halt if `stop` has been called
22
31
  if (result !== false) { // Unlike `Splits|SegmentsUpdateWorker`, we cannot use `mySegmentsCache.getChangeNumber` since `/mySegments` endpoint doesn't provide this value.
@@ -38,13 +47,15 @@ export function MySegmentsUpdateWorker(mySegmentsSyncTask, telemetryTracker, upd
38
47
  }
39
48
  return {
40
49
  /**
41
- * Invoked by NotificationProcessor on MY_SEGMENTS_UPDATE event
50
+ * Invoked by NotificationProcessor on MY_(LARGE)_SEGMENTS_UPDATE notifications
42
51
  *
43
- * @param {number} changeNumber change number of the MY_SEGMENTS_UPDATE notification
44
- * @param {SegmentsData | undefined} segmentsData might be undefined
52
+ * @param changeNumber change number of the notification
53
+ * @param segmentsData data for KeyList or SegmentRemoval instant updates
54
+ * @param delay optional time to wait for BoundedFetchRequest or BoundedFetchRequest updates
45
55
  */
46
56
  put: function (changeNumber, segmentsData, delay) {
47
- if (changeNumber <= currentChangeNumber || changeNumber <= maxChangeNumber)
57
+ // Ignore event if it is outdated or if there is a pending fetch request (_delay is set)
58
+ if (changeNumber <= currentChangeNumber || changeNumber <= maxChangeNumber || _delay)
48
59
  return;
49
60
  maxChangeNumber = changeNumber;
50
61
  handleNewEvent = true;
@@ -55,6 +66,8 @@ export function MySegmentsUpdateWorker(mySegmentsSyncTask, telemetryTracker, upd
55
66
  backoff.reset();
56
67
  },
57
68
  stop: function () {
69
+ clearTimeout(_delayTimeoutID);
70
+ _delay = undefined;
58
71
  isHandlingEvent = false;
59
72
  backoff.reset();
60
73
  }
@@ -22,8 +22,7 @@ export var PUSH_SUBSYSTEM_UP = 'PUSH_SUBSYSTEM_UP';
22
22
  */
23
23
  export var PUSH_SUBSYSTEM_DOWN = 'PUSH_SUBSYSTEM_DOWN';
24
24
  // Update-type push notifications, handled by NotificationProcessor
25
- export var MY_SEGMENTS_UPDATE = 'MY_SEGMENTS_UPDATE';
26
- export var MY_SEGMENTS_UPDATE_V2 = 'MY_SEGMENTS_UPDATE_V2';
25
+ export var MY_SEGMENTS_UPDATE_V3 = 'MY_SEGMENTS_UPDATE_V3';
27
26
  export var SEGMENT_UPDATE = 'SEGMENT_UPDATE';
28
27
  export var SPLIT_KILL = 'SPLIT_KILL';
29
28
  export var SPLIT_UPDATE = 'SPLIT_UPDATE';
@@ -1,5 +1,6 @@
1
1
  import { algorithms } from '../../utils/decompress';
2
2
  import { decodeFromBase64 } from '../../utils/base64';
3
+ import { hash } from '../../utils/murmur3/murmur3';
3
4
  var GZIP = 1;
4
5
  var ZLIB = 2;
5
6
  function Uint8ArrayToString(myUint8Arr) {
@@ -74,14 +75,17 @@ export function isInBitmap(bitmap, hash64hex) {
74
75
  }
75
76
  /**
76
77
  * Parse feature flags notifications for instant feature flag updates
77
- *
78
- * @param {ISplitUpdateData} data
79
- * @returns {KeyList}
80
78
  */
81
79
  export function parseFFUpdatePayload(compression, data) {
82
- var avoidPrecisionLoss = false;
83
- if (compression > 0)
84
- return parseKeyList(data, compression, avoidPrecisionLoss);
85
- else
86
- return JSON.parse(decodeFromBase64(data));
80
+ return compression > 0 ?
81
+ parseKeyList(data, compression, false) :
82
+ JSON.parse(decodeFromBase64(data));
83
+ }
84
+ var DEFAULT_MAX_INTERVAL = 60000;
85
+ export function getDelay(parsedData, matchingKey) {
86
+ if (parsedData.h === 0)
87
+ return 0;
88
+ var interval = parsedData.i || DEFAULT_MAX_INTERVAL;
89
+ var seed = parsedData.s || 0;
90
+ return hash(matchingKey, seed) % interval;
87
91
  }
@@ -8,20 +8,13 @@ import { authenticateFactory, hashUserKey } from './AuthClient';
8
8
  import { forOwn } from '../../utils/lang';
9
9
  import { SSEClient } from './SSEClient';
10
10
  import { getMatching } from '../../utils/key';
11
- import { MY_SEGMENTS_UPDATE, MY_SEGMENTS_UPDATE_V2, PUSH_NONRETRYABLE_ERROR, PUSH_SUBSYSTEM_DOWN, SECONDS_BEFORE_EXPIRATION, SEGMENT_UPDATE, SPLIT_KILL, SPLIT_UPDATE, PUSH_RETRYABLE_ERROR, PUSH_SUBSYSTEM_UP, ControlType, MY_LARGE_SEGMENTS_UPDATE } from './constants';
12
- import { STREAMING_FALLBACK, STREAMING_REFRESH_TOKEN, STREAMING_CONNECTING, STREAMING_DISABLED, ERROR_STREAMING_AUTH, STREAMING_DISCONNECTING, STREAMING_RECONNECT, STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, STREAMING_PARSING_SPLIT_UPDATE } from '../../logger/constants';
11
+ import { MY_SEGMENTS_UPDATE_V3, PUSH_NONRETRYABLE_ERROR, PUSH_SUBSYSTEM_DOWN, SECONDS_BEFORE_EXPIRATION, SEGMENT_UPDATE, SPLIT_KILL, SPLIT_UPDATE, PUSH_RETRYABLE_ERROR, PUSH_SUBSYSTEM_UP, ControlType, MY_LARGE_SEGMENTS_UPDATE } from './constants';
12
+ import { STREAMING_FALLBACK, STREAMING_REFRESH_TOKEN, STREAMING_CONNECTING, STREAMING_DISABLED, ERROR_STREAMING_AUTH, STREAMING_DISCONNECTING, STREAMING_RECONNECT, STREAMING_PARSING_MY_SEGMENTS_UPDATE, STREAMING_PARSING_SPLIT_UPDATE } from '../../logger/constants';
13
13
  import { UpdateStrategy } from './SSEHandler/types';
14
- import { isInBitmap, parseBitmap, parseFFUpdatePayload, parseKeyList } from './parseUtils';
14
+ import { getDelay, isInBitmap, parseBitmap, parseFFUpdatePayload, parseKeyList } from './parseUtils';
15
15
  import { _Set } from '../../utils/lang/sets';
16
- import { hash } from '../../utils/murmur3/murmur3';
17
16
  import { hash64 } from '../../utils/murmur3/murmur3_64';
18
17
  import { TOKEN_REFRESH, AUTH_REJECTION, MY_LARGE_SEGMENT, MY_SEGMENT } from '../../utils/constants';
19
- export function getDelay(parsedData, matchingKey) {
20
- var interval = parsedData.i || 60000;
21
- // const hashType = parsedData.h || 0;
22
- var seed = parsedData.s || 0;
23
- return hash(matchingKey, seed) % interval;
24
- }
25
18
  /**
26
19
  * PushManager factory:
27
20
  * - for server-side if key is not provided in settings.
@@ -55,7 +48,7 @@ export function pushManagerFactory(params, pollingManager) {
55
48
  // [Only for client-side] map of hashes to user keys, to dispatch MY_SEGMENTS_UPDATE events to the corresponding MySegmentsUpdateWorker
56
49
  var userKeyHashes = {};
57
50
  // [Only for client-side] map of user keys to their corresponding hash64 and MySegmentsUpdateWorkers.
58
- // Hash64 is used to process MY_SEGMENTS_UPDATE_V2 events and dispatch actions to the corresponding MySegmentsUpdateWorker.
51
+ // Hash64 is used to process MY_SEGMENTS_UPDATE events and dispatch actions to the corresponding MySegmentsUpdateWorker.
59
52
  var clients = {};
60
53
  // [Only for client-side] variable to flag that a new client was added. It is needed to reconnect streaming.
61
54
  var connectForNewClient = false;
@@ -149,7 +142,7 @@ export function pushManagerFactory(params, pollingManager) {
149
142
  forOwn(clients, function (_a) {
150
143
  var worker = _a.worker, workerLarge = _a.workerLarge;
151
144
  worker.stop();
152
- workerLarge && workerLarge.stop();
145
+ workerLarge.stop();
153
146
  });
154
147
  else
155
148
  segmentsUpdateWorker.stop();
@@ -204,7 +197,7 @@ export function pushManagerFactory(params, pollingManager) {
204
197
  splitsUpdateWorker.put(parsedData);
205
198
  });
206
199
  function handleMySegmentsUpdate(parsedData) {
207
- var isLS = parsedData.type === MY_LARGE_SEGMENTS_UPDATE;
200
+ var isLS = parsedData.t === MY_LARGE_SEGMENTS_UPDATE;
208
201
  switch (parsedData.u) {
209
202
  case UpdateStrategy.BoundedFetchRequest: {
210
203
  var bitmap_1;
@@ -212,15 +205,13 @@ export function pushManagerFactory(params, pollingManager) {
212
205
  bitmap_1 = parseBitmap(parsedData.d, parsedData.c);
213
206
  }
214
207
  catch (e) {
215
- log.warn(STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['BoundedFetchRequest', e]);
208
+ log.warn(STREAMING_PARSING_MY_SEGMENTS_UPDATE, ['BoundedFetchRequest', e]);
216
209
  break;
217
210
  }
218
211
  forOwn(clients, function (_a, matchingKey) {
219
212
  var hash64 = _a.hash64, worker = _a.worker, workerLarge = _a.workerLarge;
220
213
  if (isInBitmap(bitmap_1, hash64.hex)) {
221
- isLS ?
222
- workerLarge && workerLarge.put(parsedData.changeNumber, undefined, getDelay(parsedData, matchingKey)) :
223
- worker.put(parsedData.changeNumber);
214
+ (isLS ? workerLarge : worker).put(parsedData.cn, undefined, getDelay(parsedData, matchingKey));
224
215
  }
225
216
  });
226
217
  return;
@@ -233,64 +224,50 @@ export function pushManagerFactory(params, pollingManager) {
233
224
  removed_1 = new _Set(keyList.r);
234
225
  }
235
226
  catch (e) {
236
- log.warn(STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['KeyList', e]);
227
+ log.warn(STREAMING_PARSING_MY_SEGMENTS_UPDATE, ['KeyList', e]);
228
+ break;
229
+ }
230
+ if (!parsedData.n || !parsedData.n.length) {
231
+ log.warn(STREAMING_PARSING_MY_SEGMENTS_UPDATE, ['KeyList', 'No segment name was provided']);
237
232
  break;
238
233
  }
239
234
  forOwn(clients, function (_a) {
240
235
  var hash64 = _a.hash64, worker = _a.worker, workerLarge = _a.workerLarge;
241
236
  var add = added_1.has(hash64.dec) ? true : removed_1.has(hash64.dec) ? false : undefined;
242
237
  if (add !== undefined) {
243
- isLS ?
244
- workerLarge && workerLarge.put(parsedData.changeNumber, {
245
- name: parsedData.largeSegments[0],
246
- add: add
247
- }) :
248
- worker.put(parsedData.changeNumber, {
249
- name: parsedData.segmentName,
250
- add: add
251
- });
238
+ (isLS ? workerLarge : worker).put(parsedData.cn, [{
239
+ isLS: isLS,
240
+ name: parsedData.n[0],
241
+ add: add,
242
+ }]);
252
243
  }
253
244
  });
254
245
  return;
255
246
  }
256
247
  case UpdateStrategy.SegmentRemoval:
257
- if ((isLS && parsedData.largeSegments.length === 0) || (!isLS && !parsedData.segmentName)) {
258
- log.warn(STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['SegmentRemoval', 'No segment name was provided']);
248
+ if (!parsedData.n || !parsedData.n.length) {
249
+ log.warn(STREAMING_PARSING_MY_SEGMENTS_UPDATE, ['SegmentRemoval', 'No segment name was provided']);
259
250
  break;
260
251
  }
261
252
  forOwn(clients, function (_a) {
262
253
  var worker = _a.worker, workerLarge = _a.workerLarge;
263
- isLS ?
264
- workerLarge && parsedData.largeSegments.forEach(function (largeSegment) {
265
- workerLarge.put(parsedData.changeNumber, {
266
- name: largeSegment,
267
- add: false
268
- });
269
- }) :
270
- worker.put(parsedData.changeNumber, {
271
- name: parsedData.segmentName,
272
- add: false
273
- });
254
+ (isLS ? workerLarge : worker).put(parsedData.cn, parsedData.n.map(function (largeSegment) { return ({
255
+ isLS: isLS,
256
+ name: largeSegment,
257
+ add: false,
258
+ cn: parsedData.cn
259
+ }); }));
274
260
  });
275
261
  return;
276
262
  }
277
263
  // `UpdateStrategy.UnboundedFetchRequest` and fallbacks of other cases
278
264
  forOwn(clients, function (_a, matchingKey) {
279
265
  var worker = _a.worker, workerLarge = _a.workerLarge;
280
- isLS ?
281
- workerLarge && workerLarge.put(parsedData.changeNumber, undefined, getDelay(parsedData, matchingKey)) :
282
- worker.put(parsedData.changeNumber);
266
+ (isLS ? workerLarge : worker).put(parsedData.cn, undefined, getDelay(parsedData, matchingKey));
283
267
  });
284
268
  }
285
269
  if (userKey) {
286
- pushEmitter.on(MY_SEGMENTS_UPDATE, function handleMySegmentsUpdate(parsedData, channel) {
287
- var userKeyHash = channel.split('_')[2];
288
- var userKey = userKeyHashes[userKeyHash];
289
- if (userKey && clients[userKey]) { // check existence since it can be undefined if client has been destroyed
290
- clients[userKey].worker.put(parsedData.changeNumber, parsedData.includesPayload ? parsedData.segmentList ? parsedData.segmentList : [] : undefined);
291
- }
292
- });
293
- pushEmitter.on(MY_SEGMENTS_UPDATE_V2, handleMySegmentsUpdate);
270
+ pushEmitter.on(MY_SEGMENTS_UPDATE_V3, handleMySegmentsUpdate);
294
271
  pushEmitter.on(MY_LARGE_SEGMENTS_UPDATE, handleMySegmentsUpdate);
295
272
  }
296
273
  else {
@@ -314,7 +291,7 @@ export function pushManagerFactory(params, pollingManager) {
314
291
  return;
315
292
  disconnected = false;
316
293
  if (userKey)
317
- this.add(userKey, pollingManager.segmentsSyncTask, pollingManager.largeSegmentsSyncTask); // client-side
294
+ this.add(userKey, pollingManager.segmentsSyncTask); // client-side
318
295
  else
319
296
  setTimeout(connectPush); // server-side runs in next cycle as in client-side, for consistency with client-side
320
297
  },
@@ -323,14 +300,14 @@ export function pushManagerFactory(params, pollingManager) {
323
300
  return disconnected === false;
324
301
  },
325
302
  // [Only for client-side]
326
- add: function (userKey, mySegmentsSyncTask, myLargeSegmentsSyncTask) {
303
+ add: function (userKey, mySegmentsSyncTask) {
327
304
  var hash = hashUserKey(userKey);
328
305
  if (!userKeyHashes[hash]) {
329
306
  userKeyHashes[hash] = userKey;
330
307
  clients[userKey] = {
331
308
  hash64: hash64(userKey),
332
309
  worker: MySegmentsUpdateWorker(mySegmentsSyncTask, telemetryTracker, MY_SEGMENT),
333
- workerLarge: myLargeSegmentsSyncTask ? MySegmentsUpdateWorker(myLargeSegmentsSyncTask, telemetryTracker, MY_LARGE_SEGMENT) : undefined
310
+ workerLarge: MySegmentsUpdateWorker(mySegmentsSyncTask, telemetryTracker, MY_LARGE_SEGMENT)
334
311
  };
335
312
  connectForNewClient = true; // we must reconnect on start, to listen the channel for the new user key
336
313
  // Reconnects in case of a new client.
@@ -61,12 +61,10 @@ export function telemetryCacheConfigAdapter(telemetry, settings) {
61
61
  var _a = getTelemetryFlagSetsStats(settings.sync.__splitFiltersValidation), flagSetsTotal = _a.flagSetsTotal, flagSetsIgnored = _a.flagSetsIgnored;
62
62
  return objectAssign(getTelemetryConfigStats(settings.mode, settings.storage.type), {
63
63
  sE: settings.streamingEnabled,
64
- lE: isClientSide ? settings.sync.largeSegmentsEnabled : undefined,
65
64
  rR: {
66
65
  sp: scheduler.featuresRefreshRate / 1000,
67
66
  se: isClientSide ? undefined : scheduler.segmentsRefreshRate / 1000,
68
67
  ms: isClientSide ? scheduler.segmentsRefreshRate / 1000 : undefined,
69
- mls: isClientSide && settings.sync.largeSegmentsEnabled ? scheduler.largeSegmentsRefreshRate / 1000 : undefined,
70
68
  im: scheduler.impressionsRefreshRate / 1000,
71
69
  ev: scheduler.eventsPushRate / 1000,
72
70
  te: scheduler.telemetryRefreshRate / 1000,
@@ -2,7 +2,7 @@ import { submitterManagerFactory } from './submitters/submitterManager';
2
2
  import { PUSH_SUBSYSTEM_UP, PUSH_SUBSYSTEM_DOWN } from './streaming/constants';
3
3
  import { SYNC_START_POLLING, SYNC_CONTINUE_POLLING, SYNC_STOP_POLLING } from '../logger/constants';
4
4
  import { isConsentGranted } from '../consent';
5
- import { IN_LARGE_SEGMENT, IN_SEGMENT, POLLING, STREAMING, SYNC_MODE_UPDATE } from '../utils/constants';
5
+ import { POLLING, STREAMING, SYNC_MODE_UPDATE } from '../utils/constants';
6
6
  /**
7
7
  * Online SyncManager factory.
8
8
  * Can be used for server-side API, and client-side API with or without multiple clients.
@@ -114,53 +114,43 @@ export function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFacto
114
114
  shared: function (matchingKey, readinessManager, storage) {
115
115
  if (!pollingManager)
116
116
  return;
117
- var _a = pollingManager.add(matchingKey, readinessManager, storage), msSyncTask = _a.msSyncTask, mlsSyncTask = _a.mlsSyncTask;
117
+ var mySegmentsSyncTask = pollingManager.add(matchingKey, readinessManager, storage);
118
118
  return {
119
- isRunning: msSyncTask.isRunning,
119
+ isRunning: mySegmentsSyncTask.isRunning,
120
120
  start: function () {
121
121
  if (syncEnabled) {
122
122
  if (pushManager) {
123
123
  if (pollingManager.isRunning()) {
124
124
  // if doing polling, we must start the periodic fetch of data
125
- if (storage.splits.usesMatcher(IN_SEGMENT))
126
- msSyncTask.start();
127
- if (mlsSyncTask && storage.splits.usesMatcher(IN_LARGE_SEGMENT))
128
- mlsSyncTask.start();
125
+ if (storage.splits.usesSegments())
126
+ mySegmentsSyncTask.start();
129
127
  }
130
128
  else {
131
129
  // if not polling, we must execute the sync task for the initial fetch
132
130
  // of segments since `syncAll` was already executed when starting the main client
133
- msSyncTask.execute();
134
- mlsSyncTask && mlsSyncTask.execute();
131
+ mySegmentsSyncTask.execute();
135
132
  }
136
- pushManager.add(matchingKey, msSyncTask, mlsSyncTask);
133
+ pushManager.add(matchingKey, mySegmentsSyncTask);
137
134
  }
138
135
  else {
139
- if (storage.splits.usesMatcher(IN_SEGMENT))
140
- msSyncTask.start();
141
- if (mlsSyncTask && storage.splits.usesMatcher(IN_LARGE_SEGMENT))
142
- mlsSyncTask.start();
136
+ if (storage.splits.usesSegments())
137
+ mySegmentsSyncTask.start();
143
138
  }
144
139
  }
145
140
  else {
146
- if (!readinessManager.isReady()) {
147
- msSyncTask.execute();
148
- mlsSyncTask && mlsSyncTask.execute();
149
- }
141
+ if (!readinessManager.isReady())
142
+ mySegmentsSyncTask.execute();
150
143
  }
151
144
  },
152
145
  stop: function () {
153
146
  // check in case `client.destroy()` has been invoked more than once for the same client
154
- var syncTasks = pollingManager.get(matchingKey);
155
- if (syncTasks) {
156
- var msSyncTask_1 = syncTasks.msSyncTask, mlsSyncTask_1 = syncTasks.mlsSyncTask;
147
+ var mySegmentsSyncTask = pollingManager.get(matchingKey);
148
+ if (mySegmentsSyncTask) {
157
149
  // stop syncing
158
150
  if (pushManager)
159
151
  pushManager.remove(matchingKey);
160
- if (msSyncTask_1.isRunning())
161
- msSyncTask_1.stop();
162
- if (mlsSyncTask_1 && mlsSyncTask_1.isRunning())
163
- mlsSyncTask_1.stop();
152
+ if (mySegmentsSyncTask.isRunning())
153
+ mySegmentsSyncTask.stop();
164
154
  pollingManager.remove(matchingKey);
165
155
  }
166
156
  },
@@ -87,7 +87,7 @@ export var NON_REQUESTED = 1;
87
87
  export var DISABLED = 0;
88
88
  export var ENABLED = 1;
89
89
  export var PAUSED = 2;
90
- export var FLAG_SPEC_VERSION = '1.1';
90
+ export var FLAG_SPEC_VERSION = '1.2';
91
91
  // Matcher types
92
92
  export var IN_SEGMENT = 'IN_SEGMENT';
93
93
  export var IN_LARGE_SEGMENT = 'IN_LARGE_SEGMENT';
@@ -27,8 +27,6 @@ export var base = {
27
27
  featuresRefreshRate: 60,
28
28
  // fetch segments updates each 60 sec
29
29
  segmentsRefreshRate: 60,
30
- // fetch large segments updates each 60 sec
31
- largeSegmentsRefreshRate: 60,
32
30
  // publish telemetry stats each 3600 secs (1 hour)
33
31
  telemetryRefreshRate: 3600,
34
32
  // publish evaluations each 300 sec (default value for OPTIMIZED impressions mode)
@@ -74,8 +72,7 @@ export var base = {
74
72
  impressionsMode: OPTIMIZED,
75
73
  localhostMode: undefined,
76
74
  enabled: true,
77
- flagSpecVersion: FLAG_SPEC_VERSION,
78
- largeSegmentsEnabled: false
75
+ flagSpecVersion: FLAG_SPEC_VERSION
79
76
  },
80
77
  // Logger
81
78
  log: undefined
@@ -114,7 +111,6 @@ export function settingsValidation(config, validationParams) {
114
111
  var scheduler = withDefaults.scheduler, startup = withDefaults.startup;
115
112
  scheduler.featuresRefreshRate = fromSecondsToMillis(scheduler.featuresRefreshRate);
116
113
  scheduler.segmentsRefreshRate = fromSecondsToMillis(scheduler.segmentsRefreshRate);
117
- scheduler.largeSegmentsRefreshRate = fromSecondsToMillis(scheduler.largeSegmentsRefreshRate);
118
114
  scheduler.offlineRefreshRate = fromSecondsToMillis(scheduler.offlineRefreshRate);
119
115
  scheduler.eventsPushRate = fromSecondsToMillis(scheduler.eventsPushRate);
120
116
  scheduler.telemetryRefreshRate = fromSecondsToMillis(validateMinValue('telemetryRefreshRate', scheduler.telemetryRefreshRate, 60));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@splitsoftware/splitio-commons",
3
- "version": "1.16.1-rc.0",
3
+ "version": "1.16.1-rc.10",
4
4
  "description": "Split JavaScript SDK common components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
package/src/dtos/types.ts CHANGED
@@ -224,14 +224,20 @@ export interface ISegmentChangesResponse {
224
224
  till: number
225
225
  }
226
226
 
227
- export interface IMySegmentsResponseItem {
228
- id: string,
229
- name: string
230
- }
231
-
232
- /** Interface of the parsed JSON response of `/mySegments/{userKey}` */
233
- export interface IMySegmentsResponse {
234
- mySegments: IMySegmentsResponseItem[]
227
+ /** Interface of the parsed JSON response of `/memberships/{userKey}` */
228
+ export interface IMembershipsResponse {
229
+ ms?: {
230
+ cn?: number,
231
+ k?: Array<{
232
+ n: string
233
+ }>
234
+ },
235
+ ls?: {
236
+ cn?: number,
237
+ k?: Array<{
238
+ n: string
239
+ }>
240
+ }
235
241
  }
236
242
 
237
243
  /** Metadata internal type for storages */
@@ -36,6 +36,7 @@ export const IMPRESSION = 102;
36
36
  export const IMPRESSION_QUEUEING = 103;
37
37
  export const NEW_SHARED_CLIENT = 104;
38
38
  export const NEW_FACTORY = 105;
39
+ export const POLLING_SMART_PAUSING = 106;
39
40
  export const POLLING_START = 107;
40
41
  export const POLLING_STOP = 108;
41
42
  export const SYNC_SPLITS_FETCH_RETRY = 109;
@@ -78,7 +79,7 @@ export const WARN_SPLITS_FILTER_IGNORED = 219;
78
79
  export const WARN_SPLITS_FILTER_INVALID = 220;
79
80
  export const WARN_SPLITS_FILTER_EMPTY = 221;
80
81
  export const WARN_SDK_KEY = 222;
81
- export const STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2 = 223;
82
+ export const STREAMING_PARSING_MY_SEGMENTS_UPDATE = 223;
82
83
  export const STREAMING_PARSING_SPLIT_UPDATE = 224;
83
84
  export const WARN_INVALID_FLAGSET = 225;
84
85
  export const WARN_LOWERCASE_FLAGSET = 226;
@@ -19,10 +19,11 @@ export const codesInfo: [number, string][] = codesWarn.concat([
19
19
  [c.USER_CONSENT_INITIAL, 'Starting the SDK with %s user consent. No data will be sent.'],
20
20
 
21
21
  // synchronizer
22
+ [c.POLLING_SMART_PAUSING, c.LOG_PREFIX_SYNC_POLLING + 'Turning segments data polling %s.'],
22
23
  [c.POLLING_START, c.LOG_PREFIX_SYNC_POLLING + 'Starting polling'],
23
24
  [c.POLLING_STOP, c.LOG_PREFIX_SYNC_POLLING + 'Stopping polling'],
24
25
  [c.SYNC_SPLITS_FETCH_RETRY, c.LOG_PREFIX_SYNC_SPLITS + 'Retrying download of feature flags #%s. Reason: %s'],
25
- [c.SUBMITTERS_PUSH_FULL_QUEUE, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Flushing full %s queue and reseting timer.'],
26
+ [c.SUBMITTERS_PUSH_FULL_QUEUE, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Flushing full %s queue and resetting timer.'],
26
27
  [c.SUBMITTERS_PUSH, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Pushing %s.'],
27
28
  [c.STREAMING_REFRESH_TOKEN, c.LOG_PREFIX_SYNC_STREAMING + 'Refreshing streaming token in %s seconds, and connecting streaming in %s seconds.'],
28
29
  [c.STREAMING_RECONNECT, c.LOG_PREFIX_SYNC_STREAMING + 'Attempting to reconnect streaming in %s seconds.'],
@@ -32,7 +32,7 @@ export const codesWarn: [number, string][] = codesError.concat([
32
32
  [c.WARN_SPLITS_FILTER_EMPTY, c.LOG_PREFIX_SETTINGS + ': feature flag filter configuration must be a non-empty array of filter objects.'],
33
33
  [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'],
34
34
 
35
- [c.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, c.LOG_PREFIX_SYNC_STREAMING + 'Fetching MySegments due to an error processing %s notification: %s'],
35
+ [c.STREAMING_PARSING_MY_SEGMENTS_UPDATE, c.LOG_PREFIX_SYNC_STREAMING + 'Fetching Memberships due to an error processing %s notification: %s'],
36
36
  [c.STREAMING_PARSING_SPLIT_UPDATE, c.LOG_PREFIX_SYNC_STREAMING + 'Fetching SplitChanges due to an error processing SPLIT_UPDATE notification: %s'],
37
37
  [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.'],
38
38
  [c.WARN_LOWERCASE_FLAGSET, '%s: flag set %s should be all lowercase - converting string to lowercase.'],
@@ -10,7 +10,7 @@ function splitsEventEmitterFactory(EventEmitter: new () => IEventEmitter): ISpli
10
10
  });
11
11
 
12
12
  // `isSplitKill` condition avoids an edge-case of wrongly emitting SDK_READY if:
13
- // - `/mySegments` fetch and SPLIT_KILL occurs before `/splitChanges` fetch, and
13
+ // - `/memberships` fetch and SPLIT_KILL occurs before `/splitChanges` fetch, and
14
14
  // - storage has cached splits (for which case `splitsStorage.killLocally` can return true)
15
15
  splitsEventEmitter.on(SDK_SPLITS_ARRIVED, (isSplitKill: boolean) => { if (!isSplitKill) splitsEventEmitter.splitsArrived = true; });
16
16
  splitsEventEmitter.once(SDK_SPLITS_CACHE_LOADED, () => { splitsEventEmitter.splitsCacheLoaded = true; });
@@ -36,10 +36,9 @@ export function readinessManagerFactory(
36
36
  settings: ISettings,
37
37
  splits: ISplitsEventEmitter = splitsEventEmitterFactory(EventEmitter)): IReadinessManager {
38
38
 
39
- const { startup: { readyTimeout, waitForLargeSegments }, sync: { largeSegmentsEnabled } } = settings;
39
+ const readyTimeout = settings.startup.readyTimeout;
40
40
 
41
41
  const segments: ISegmentsEventEmitter = segmentsEventEmitterFactory(EventEmitter);
42
- const largeSegments = largeSegmentsEnabled && waitForLargeSegments ? segmentsEventEmitterFactory(EventEmitter) : undefined;
43
42
  const gate: IReadinessEventEmitter = new EventEmitter();
44
43
 
45
44
  // emit SDK_READY_FROM_CACHE
@@ -65,7 +64,6 @@ export function readinessManagerFactory(
65
64
  let isReady = false;
66
65
  splits.on(SDK_SPLITS_ARRIVED, checkIsReadyOrUpdate);
67
66
  segments.on(SDK_SEGMENTS_ARRIVED, checkIsReadyOrUpdate);
68
- if (largeSegments) largeSegments.on(SDK_SEGMENTS_ARRIVED, checkIsReadyOrUpdate);
69
67
 
70
68
  let isDestroyed = false;
71
69
 
@@ -91,7 +89,7 @@ export function readinessManagerFactory(
91
89
  setTimeout(() => { throw e; }, 0);
92
90
  }
93
91
  } else {
94
- if (splits.splitsArrived && segments.segmentsArrived && (!largeSegments || largeSegments.segmentsArrived)) {
92
+ if (splits.splitsArrived && segments.segmentsArrived) {
95
93
  clearTimeout(readyTimeoutId);
96
94
  isReady = true;
97
95
  try {
@@ -109,7 +107,6 @@ export function readinessManagerFactory(
109
107
  return {
110
108
  splits,
111
109
  segments,
112
- largeSegments,
113
110
  gate,
114
111
 
115
112
  shared() {
@@ -128,7 +125,6 @@ export function readinessManagerFactory(
128
125
  isDestroyed = true;
129
126
 
130
127
  segments.removeAllListeners();
131
- if (largeSegments) largeSegments.removeAllListeners();
132
128
  gate.removeAllListeners();
133
129
  clearTimeout(readyTimeoutId);
134
130
 
@@ -45,7 +45,6 @@ export interface IReadinessManager {
45
45
  /** Event emitters */
46
46
  splits: ISplitsEventEmitter,
47
47
  segments: ISegmentsEventEmitter,
48
- largeSegments?: ISegmentsEventEmitter, // Undefined if largeSegmentsEnabled or waitForLargeSegments are false
49
48
  gate: IReadinessEventEmitter,
50
49
 
51
50
  /** Readiness status */
@@ -4,7 +4,7 @@ import { splitHttpClientFactory } from './splitHttpClient';
4
4
  import { ISplitApi } from './types';
5
5
  import { objectAssign } from '../utils/lang/objectAssign';
6
6
  import { ITelemetryTracker } from '../trackers/types';
7
- import { SPLITS, IMPRESSIONS, IMPRESSIONS_COUNT, EVENTS, TELEMETRY, TOKEN, SEGMENT, MY_SEGMENT, MY_LARGE_SEGMENT } from '../utils/constants';
7
+ import { SPLITS, IMPRESSIONS, IMPRESSIONS_COUNT, EVENTS, TELEMETRY, TOKEN, SEGMENT, MY_SEGMENT } from '../utils/constants';
8
8
  import { ERROR_TOO_MANY_SETS } from '../logger/constants';
9
9
 
10
10
  const noCacheHeaderOptions = { headers: { 'Cache-Control': 'no-cache' } };
@@ -22,7 +22,7 @@ function userKeyToQueryParam(userKey: string) {
22
22
  */
23
23
  export function splitApiFactory(
24
24
  settings: ISettings,
25
- platform: IPlatform,
25
+ platform: Pick<IPlatform, 'getOptions' | 'getFetch'>,
26
26
  telemetryTracker: ITelemetryTracker
27
27
  ): ISplitApi {
28
28
 
@@ -67,22 +67,17 @@ export function splitApiFactory(
67
67
  return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SEGMENT));
68
68
  },
69
69
 
70
- fetchMySegments(userMatchingKey: string, noCache?: boolean) {
70
+ fetchMemberships(userMatchingKey: string, noCache?: boolean) {
71
71
  /**
72
72
  * URI encoding of user keys in order to:
73
- * - avoid 400 responses (due to URI malformed). E.g.: '/api/mySegments/%'
74
- * - avoid 404 responses. E.g.: '/api/mySegments/foo/bar'
73
+ * - avoid 400 responses (due to URI malformed). E.g.: '/api/memberships/%'
74
+ * - avoid 404 responses. E.g.: '/api/memberships/foo/bar'
75
75
  * - match user keys with special characters. E.g.: 'foo%bar', 'foo/bar'
76
76
  */
77
- const url = `${urls.sdk}/mySegments/${encodeURIComponent(userMatchingKey)}`;
77
+ const url = `${urls.sdk}/memberships/${encodeURIComponent(userMatchingKey)}`;
78
78
  return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(MY_SEGMENT));
79
79
  },
80
80
 
81
- fetchMyLargeSegments(userMatchingKey: string, noCache?: boolean) {
82
- const url = `${urls.sdk}/myLargeSegments/${encodeURIComponent(userMatchingKey)}`;
83
- return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(MY_LARGE_SEGMENT));
84
- },
85
-
86
81
  /**
87
82
  * Post events.
88
83
  *