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

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 (148) hide show
  1. package/CHANGES.txt +3 -0
  2. package/cjs/evaluator/matchers/index.js +3 -1
  3. package/cjs/evaluator/matchers/large_segment.js +16 -0
  4. package/cjs/evaluator/matchers/matcherTypes.js +1 -0
  5. package/cjs/evaluator/matchersTransform/index.js +1 -1
  6. package/cjs/logger/constants.js +4 -4
  7. package/cjs/logger/messages/info.js +0 -1
  8. package/cjs/readiness/readinessManager.js +14 -10
  9. package/cjs/readiness/sdkReadinessManager.js +5 -6
  10. package/cjs/sdkClient/sdkClientMethodCS.js +3 -4
  11. package/cjs/sdkClient/sdkClientMethodCSWithTT.js +4 -5
  12. package/cjs/sdkFactory/index.js +1 -1
  13. package/cjs/services/splitApi.js +4 -0
  14. package/cjs/storages/AbstractSplitsCacheAsync.js +2 -2
  15. package/cjs/storages/AbstractSplitsCacheSync.js +5 -5
  16. package/cjs/storages/KeyBuilder.js +3 -0
  17. package/cjs/storages/KeyBuilderCS.js +17 -5
  18. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +16 -4
  19. package/cjs/storages/inLocalStorage/index.js +6 -2
  20. package/cjs/storages/inMemory/InMemoryStorageCS.js +5 -0
  21. package/cjs/storages/inMemory/SplitsCacheInMemory.js +20 -11
  22. package/cjs/storages/inMemory/TelemetryCacheInMemory.js +7 -10
  23. package/cjs/storages/pluggable/inMemoryWrapper.js +1 -1
  24. package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +5 -1
  25. package/cjs/sync/polling/pollingManagerCS.js +51 -33
  26. package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  27. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +5 -6
  28. package/cjs/sync/polling/updaters/splitChangesUpdater.js +2 -1
  29. package/cjs/sync/streaming/SSEHandler/index.js +1 -0
  30. package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +15 -5
  31. package/cjs/sync/streaming/constants.js +2 -1
  32. package/cjs/sync/streaming/pushManager.js +95 -64
  33. package/cjs/sync/submitters/telemetrySubmitter.js +2 -0
  34. package/cjs/sync/syncManagerOnline.js +24 -14
  35. package/cjs/utils/constants/index.js +5 -1
  36. package/cjs/utils/settingsValidation/index.js +9 -4
  37. package/esm/evaluator/matchers/index.js +3 -1
  38. package/esm/evaluator/matchers/large_segment.js +12 -0
  39. package/esm/evaluator/matchers/matcherTypes.js +1 -0
  40. package/esm/evaluator/matchersTransform/index.js +1 -1
  41. package/esm/logger/constants.js +1 -1
  42. package/esm/logger/messages/info.js +0 -1
  43. package/esm/readiness/readinessManager.js +14 -10
  44. package/esm/readiness/sdkReadinessManager.js +5 -6
  45. package/esm/sdkClient/sdkClientMethodCS.js +4 -5
  46. package/esm/sdkClient/sdkClientMethodCSWithTT.js +5 -6
  47. package/esm/sdkFactory/index.js +1 -1
  48. package/esm/services/splitApi.js +5 -1
  49. package/esm/storages/AbstractSplitsCacheAsync.js +2 -2
  50. package/esm/storages/AbstractSplitsCacheSync.js +3 -3
  51. package/esm/storages/KeyBuilder.js +3 -0
  52. package/esm/storages/KeyBuilderCS.js +15 -4
  53. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +17 -5
  54. package/esm/storages/inLocalStorage/index.js +7 -3
  55. package/esm/storages/inMemory/InMemoryStorageCS.js +5 -0
  56. package/esm/storages/inMemory/SplitsCacheInMemory.js +21 -12
  57. package/esm/storages/inMemory/TelemetryCacheInMemory.js +7 -10
  58. package/esm/storages/pluggable/inMemoryWrapper.js +1 -1
  59. package/esm/sync/polling/fetchers/mySegmentsFetcher.js +5 -1
  60. package/esm/sync/polling/pollingManagerCS.js +52 -34
  61. package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  62. package/esm/sync/polling/updaters/mySegmentsUpdater.js +3 -4
  63. package/esm/sync/polling/updaters/splitChangesUpdater.js +2 -1
  64. package/esm/sync/streaming/SSEHandler/index.js +2 -1
  65. package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +15 -5
  66. package/esm/sync/streaming/constants.js +1 -0
  67. package/esm/sync/streaming/pushManager.js +95 -65
  68. package/esm/sync/submitters/telemetrySubmitter.js +2 -0
  69. package/esm/sync/syncManagerOnline.js +25 -15
  70. package/esm/utils/constants/index.js +4 -0
  71. package/esm/utils/settingsValidation/index.js +10 -5
  72. package/package.json +1 -1
  73. package/src/dtos/types.ts +17 -7
  74. package/src/evaluator/matchers/index.ts +2 -0
  75. package/src/evaluator/matchers/large_segment.ts +18 -0
  76. package/src/evaluator/matchers/matcherTypes.ts +1 -0
  77. package/src/evaluator/matchersTransform/index.ts +1 -1
  78. package/src/logger/constants.ts +1 -1
  79. package/src/logger/messages/info.ts +0 -1
  80. package/src/readiness/readinessManager.ts +13 -9
  81. package/src/readiness/sdkReadinessManager.ts +7 -7
  82. package/src/readiness/types.ts +3 -2
  83. package/src/sdkClient/sdkClientMethodCS.ts +4 -6
  84. package/src/sdkClient/sdkClientMethodCSWithTT.ts +5 -7
  85. package/src/sdkFactory/index.ts +1 -1
  86. package/src/services/splitApi.ts +6 -1
  87. package/src/services/types.ts +1 -0
  88. package/src/storages/AbstractSplitsCacheAsync.ts +2 -2
  89. package/src/storages/AbstractSplitsCacheSync.ts +4 -4
  90. package/src/storages/KeyBuilder.ts +3 -0
  91. package/src/storages/KeyBuilderCS.ts +25 -5
  92. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +3 -3
  93. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +20 -5
  94. package/src/storages/inLocalStorage/index.ts +8 -4
  95. package/src/storages/inMemory/InMemoryStorageCS.ts +5 -0
  96. package/src/storages/inMemory/SplitsCacheInMemory.ts +15 -10
  97. package/src/storages/inMemory/TelemetryCacheInMemory.ts +7 -11
  98. package/src/storages/pluggable/inMemoryWrapper.ts +1 -1
  99. package/src/storages/types.ts +7 -5
  100. package/src/sync/polling/fetchers/mySegmentsFetcher.ts +6 -2
  101. package/src/sync/polling/pollingManagerCS.ts +61 -29
  102. package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +10 -10
  103. package/src/sync/polling/types.ts +3 -2
  104. package/src/sync/polling/updaters/mySegmentsUpdater.ts +5 -8
  105. package/src/sync/polling/updaters/splitChangesUpdater.ts +4 -3
  106. package/src/sync/streaming/SSEHandler/index.ts +2 -1
  107. package/src/sync/streaming/SSEHandler/types.ts +14 -2
  108. package/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts +17 -5
  109. package/src/sync/streaming/constants.ts +1 -0
  110. package/src/sync/streaming/pushManager.ts +100 -63
  111. package/src/sync/streaming/types.ts +5 -3
  112. package/src/sync/submitters/telemetrySubmitter.ts +2 -0
  113. package/src/sync/submitters/types.ts +10 -4
  114. package/src/sync/syncManagerOnline.ts +19 -11
  115. package/src/types.ts +26 -1
  116. package/src/utils/constants/index.ts +5 -0
  117. package/src/utils/settingsValidation/index.ts +11 -6
  118. package/src/utils/settingsValidation/types.ts +1 -1
  119. package/types/dtos/types.d.ts +14 -6
  120. package/types/evaluator/matchers/large_segment.d.ts +5 -0
  121. package/types/logger/constants.d.ts +1 -1
  122. package/types/readiness/readinessManager.d.ts +2 -2
  123. package/types/readiness/sdkReadinessManager.d.ts +2 -3
  124. package/types/readiness/types.d.ts +3 -2
  125. package/types/services/types.d.ts +1 -0
  126. package/types/storages/AbstractSplitsCacheAsync.d.ts +1 -1
  127. package/types/storages/AbstractSplitsCacheSync.d.ts +3 -3
  128. package/types/storages/KeyBuilder.d.ts +1 -0
  129. package/types/storages/KeyBuilderCS.d.ts +7 -2
  130. package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +2 -2
  131. package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +1 -1
  132. package/types/storages/inMemory/SplitsCacheInMemory.d.ts +3 -2
  133. package/types/storages/inMemory/TelemetryCacheInMemory.d.ts +4 -6
  134. package/types/storages/pluggable/inMemoryWrapper.d.ts +1 -1
  135. package/types/storages/types.d.ts +4 -3
  136. package/types/sync/polling/syncTasks/mySegmentsSyncTask.d.ts +2 -3
  137. package/types/sync/polling/types.d.ts +9 -2
  138. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +4 -4
  139. package/types/sync/streaming/SSEHandler/types.d.ts +13 -2
  140. package/types/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.d.ts +2 -1
  141. package/types/sync/streaming/constants.d.ts +1 -0
  142. package/types/sync/streaming/pushManager.d.ts +2 -0
  143. package/types/sync/streaming/types.d.ts +5 -4
  144. package/types/sync/submitters/types.d.ts +9 -3
  145. package/types/types.d.ts +25 -0
  146. package/types/utils/constants/index.d.ts +3 -0
  147. package/types/utils/settingsValidation/index.d.ts +2 -0
  148. package/types/utils/settingsValidation/types.d.ts +1 -1
@@ -1,4 +1,4 @@
1
- import { IMySegmentsUpdateData, IMySegmentsUpdateV2Data, ISegmentUpdateData, ISplitUpdateData, ISplitKillData } from './SSEHandler/types';
1
+ import { IMySegmentsUpdateData, IMySegmentsUpdateV2Data, ISegmentUpdateData, ISplitUpdateData, ISplitKillData, IMyLargeSegmentsUpdateData } from './SSEHandler/types';
2
2
  import { ITask } from '../types';
3
3
  import { IMySegmentsSyncTask } from '../polling/types';
4
4
  import { IEventEmitter } from '../../types';
@@ -16,16 +16,18 @@ export type MY_SEGMENTS_UPDATE_V2 = 'MY_SEGMENTS_UPDATE_V2';
16
16
  export type SEGMENT_UPDATE = 'SEGMENT_UPDATE';
17
17
  export type SPLIT_KILL = 'SPLIT_KILL';
18
18
  export type SPLIT_UPDATE = 'SPLIT_UPDATE';
19
+ export type MY_LARGE_SEGMENTS_UPDATE = 'MY_LARGE_SEGMENTS_UPDATE';
19
20
 
20
21
  // Control-type push notifications, handled by NotificationKeeper
21
22
  export type CONTROL = 'CONTROL';
22
23
  export type OCCUPANCY = 'OCCUPANCY';
23
24
 
24
- export type IPushEvent = PUSH_SUBSYSTEM_UP | PUSH_SUBSYSTEM_DOWN | PUSH_NONRETRYABLE_ERROR | PUSH_RETRYABLE_ERROR | MY_SEGMENTS_UPDATE | MY_SEGMENTS_UPDATE_V2 | SEGMENT_UPDATE | SPLIT_UPDATE | SPLIT_KILL | ControlType.STREAMING_RESET
25
+ export type IPushEvent = PUSH_SUBSYSTEM_UP | PUSH_SUBSYSTEM_DOWN | PUSH_NONRETRYABLE_ERROR | PUSH_RETRYABLE_ERROR | MY_SEGMENTS_UPDATE | MY_SEGMENTS_UPDATE_V2 | SEGMENT_UPDATE | SPLIT_UPDATE | SPLIT_KILL | MY_LARGE_SEGMENTS_UPDATE | ControlType.STREAMING_RESET
25
26
 
26
27
  type IParsedData<T extends IPushEvent> =
27
28
  T extends MY_SEGMENTS_UPDATE ? IMySegmentsUpdateData :
28
29
  T extends MY_SEGMENTS_UPDATE_V2 ? IMySegmentsUpdateV2Data :
30
+ T extends MY_LARGE_SEGMENTS_UPDATE ? IMyLargeSegmentsUpdateData :
29
31
  T extends SEGMENT_UPDATE ? ISegmentUpdateData :
30
32
  T extends SPLIT_UPDATE ? ISplitUpdateData :
31
33
  T extends SPLIT_KILL ? ISplitKillData : undefined;
@@ -45,6 +47,6 @@ export interface IPushEventEmitter extends IEventEmitter {
45
47
  */
46
48
  export interface IPushManager extends ITask, IPushEventEmitter {
47
49
  // Methods used in client-side, to support multiple clients
48
- add(userKey: string, mySegmentsSyncTask: IMySegmentsSyncTask): void,
50
+ add(userKey: string, mySegmentsSyncTask: IMySegmentsSyncTask, myLargeSegmentsSyncTask?: IMySegmentsSyncTask): void,
49
51
  remove(userKey: string): void
50
52
  }
@@ -76,10 +76,12 @@ export function telemetryCacheConfigAdapter(telemetry: ITelemetryCacheSync, sett
76
76
 
77
77
  return objectAssign(getTelemetryConfigStats(settings.mode, settings.storage.type), {
78
78
  sE: settings.streamingEnabled,
79
+ lE: isClientSide ? settings.sync.largeSegmentsEnabled : undefined,
79
80
  rR: {
80
81
  sp: scheduler.featuresRefreshRate / 1000,
81
82
  se: isClientSide ? undefined : scheduler.segmentsRefreshRate / 1000,
82
83
  ms: isClientSide ? scheduler.segmentsRefreshRate / 1000 : undefined,
84
+ mls: isClientSide && settings.sync.largeSegmentsEnabled ? scheduler.largeSegmentsRefreshRate / 1000 : undefined,
83
85
  im: scheduler.impressionsRefreshRate / 1000,
84
86
  ev: scheduler.eventsPushRate / 1000,
85
87
  te: scheduler.telemetryRefreshRate / 1000,
@@ -103,7 +103,7 @@ export type DROPPED = 1;
103
103
  export type DEDUPED = 2;
104
104
  export type ImpressionDataType = QUEUED | DROPPED | DEDUPED
105
105
  export type EventDataType = QUEUED | DROPPED;
106
- export type UpdatesFromSSEEnum = SPLITS | MY_SEGMENT;
106
+ export type UpdatesFromSSEEnum = SPLITS | MY_SEGMENT | MY_LARGE_SEGMENT;
107
107
 
108
108
  export type SPLITS = 'sp';
109
109
  export type IMPRESSIONS = 'im';
@@ -113,7 +113,8 @@ export type TELEMETRY = 'te';
113
113
  export type TOKEN = 'to';
114
114
  export type SEGMENT = 'se';
115
115
  export type MY_SEGMENT = 'ms';
116
- export type OperationType = SPLITS | IMPRESSIONS | IMPRESSIONS_COUNT | EVENTS | TELEMETRY | TOKEN | SEGMENT | MY_SEGMENT;
116
+ export type MY_LARGE_SEGMENT = 'mls';
117
+ export type OperationType = SPLITS | IMPRESSIONS | IMPRESSIONS_COUNT | EVENTS | TELEMETRY | TOKEN | SEGMENT | MY_SEGMENT | MY_LARGE_SEGMENT;
117
118
 
118
119
  export type LastSync = Partial<Record<OperationType, number | undefined>>
119
120
  export type HttpErrors = Partial<Record<OperationType, { [statusCode: string]: number }>>
@@ -158,8 +159,9 @@ export type TelemetryUsageStats = {
158
159
 
159
160
  // amount of instant updates that we are doing by avoiding fetching to Split servers
160
161
  export type UpdatesFromSSE = {
161
- sp: number, // splits
162
+ sp?: number, // splits
162
163
  ms?: number, // my segments
164
+ mls?: number // my large segments
163
165
  }
164
166
 
165
167
  // 'metrics/usage' JSON request body
@@ -175,12 +177,14 @@ export type TelemetryUsageStatsPayload = TelemetryUsageStats & {
175
177
  spC?: number, // splitCount
176
178
  seC?: number, // segmentCount
177
179
  skC?: number, // segmentKeyCount
180
+ lseC?: number, // largeSegmentCount
181
+ lskC?: number, // largeSegmentKeyCount
178
182
  sL?: number, // sessionLengthMs
179
183
  eQ: number, // eventsQueued
180
184
  eD: number, // eventsDropped
181
185
  sE: Array<StreamingEvent>, // streamingEvents
182
186
  t?: Array<string>, // tags
183
- ufs?: UpdatesFromSSE, //UpdatesFromSSE
187
+ ufs?: UpdatesFromSSE, // instant updates
184
188
  }
185
189
 
186
190
  /**
@@ -201,6 +205,7 @@ export type RefreshRates = {
201
205
  sp: number, // splits
202
206
  se?: number, // segments
203
207
  ms?: number, // mySegments
208
+ mls?: number, // myLargeSegments
204
209
  im: number, // impressions
205
210
  ev: number, // events
206
211
  te: number, // telemetry
@@ -226,6 +231,7 @@ export type TelemetryConfigStats = {
226
231
  // 'metrics/config' JSON request body
227
232
  export type TelemetryConfigStatsPayload = TelemetryConfigStats & {
228
233
  sE: boolean, // streamingEnabled
234
+ lE?: boolean, // largeSegmentsEnabled
229
235
  rR: RefreshRates, // refreshRates
230
236
  uO: UrlOverrides, // urlOverrides
231
237
  iQ: number, // impressionsQueueSize
@@ -7,7 +7,7 @@ import { IPollingManager, IPollingManagerCS } from './polling/types';
7
7
  import { PUSH_SUBSYSTEM_UP, PUSH_SUBSYSTEM_DOWN } from './streaming/constants';
8
8
  import { SYNC_START_POLLING, SYNC_CONTINUE_POLLING, SYNC_STOP_POLLING } from '../logger/constants';
9
9
  import { isConsentGranted } from '../consent';
10
- import { POLLING, STREAMING, SYNC_MODE_UPDATE } from '../utils/constants';
10
+ import { IN_LARGE_SEGMENT, IN_SEGMENT, POLLING, STREAMING, SYNC_MODE_UPDATE } from '../utils/constants';
11
11
  import { ISdkFactoryContextSync } from '../sdkFactory/types';
12
12
 
13
13
  /**
@@ -141,36 +141,44 @@ export function syncManagerOnlineFactory(
141
141
  shared(matchingKey: string, readinessManager: IReadinessManager, storage: IStorageSync) {
142
142
  if (!pollingManager) return;
143
143
 
144
- const mySegmentsSyncTask = (pollingManager as IPollingManagerCS).add(matchingKey, readinessManager, storage);
144
+ const { msSyncTask, mlsSyncTask } = (pollingManager as IPollingManagerCS).add(matchingKey, readinessManager, storage);
145
145
 
146
146
  return {
147
- isRunning: mySegmentsSyncTask.isRunning,
147
+ isRunning: msSyncTask.isRunning,
148
148
  start() {
149
149
  if (syncEnabled) {
150
150
  if (pushManager) {
151
151
  if (pollingManager!.isRunning()) {
152
152
  // if doing polling, we must start the periodic fetch of data
153
- if (storage.splits.usesSegments()) mySegmentsSyncTask.start();
153
+ if (storage.splits.usesMatcher(IN_SEGMENT)) msSyncTask.start();
154
+ if (mlsSyncTask && storage.splits.usesMatcher(IN_LARGE_SEGMENT)) mlsSyncTask.start();
154
155
  } else {
155
156
  // if not polling, we must execute the sync task for the initial fetch
156
157
  // of segments since `syncAll` was already executed when starting the main client
157
- mySegmentsSyncTask.execute();
158
+ msSyncTask.execute();
159
+ mlsSyncTask && mlsSyncTask.execute();
158
160
  }
159
- pushManager.add(matchingKey, mySegmentsSyncTask);
161
+ pushManager.add(matchingKey, msSyncTask, mlsSyncTask);
160
162
  } else {
161
- if (storage.splits.usesSegments()) mySegmentsSyncTask.start();
163
+ if (storage.splits.usesMatcher(IN_SEGMENT)) msSyncTask.start();
164
+ if (mlsSyncTask && storage.splits.usesMatcher(IN_LARGE_SEGMENT)) mlsSyncTask.start();
162
165
  }
163
166
  } else {
164
- if (!readinessManager.isReady()) mySegmentsSyncTask.execute();
167
+ if (!readinessManager.isReady()) {
168
+ msSyncTask.execute();
169
+ mlsSyncTask && mlsSyncTask.execute();
170
+ }
165
171
  }
166
172
  },
167
173
  stop() {
168
174
  // check in case `client.destroy()` has been invoked more than once for the same client
169
- const mySegmentsSyncTask = (pollingManager as IPollingManagerCS).get(matchingKey);
170
- if (mySegmentsSyncTask) {
175
+ const syncTasks = (pollingManager as IPollingManagerCS).get(matchingKey);
176
+ if (syncTasks) {
177
+ const { msSyncTask, mlsSyncTask } = syncTasks;
171
178
  // stop syncing
172
179
  if (pushManager) pushManager.remove(matchingKey);
173
- if (mySegmentsSyncTask.isRunning()) mySegmentsSyncTask.stop();
180
+ if (msSyncTask.isRunning()) msSyncTask.stop();
181
+ if (mlsSyncTask && mlsSyncTask.isRunning()) mlsSyncTask.stop();
174
182
 
175
183
  (pollingManager as IPollingManagerCS).remove(matchingKey);
176
184
  }
package/src/types.ts CHANGED
@@ -86,6 +86,7 @@ export interface ISettings {
86
86
  metricsRefreshRate?: number,
87
87
  telemetryRefreshRate: number,
88
88
  segmentsRefreshRate: number,
89
+ largeSegmentsRefreshRate: number,
89
90
  offlineRefreshRate: number,
90
91
  eventsPushRate: number,
91
92
  eventsQueueSize: number,
@@ -95,7 +96,8 @@ export interface ISettings {
95
96
  readyTimeout: number,
96
97
  requestTimeoutBeforeReady: number,
97
98
  retriesOnFailureBeforeReady: number,
98
- eventsFirstPushWindow: number
99
+ eventsFirstPushWindow: number,
100
+ waitForLargeSegments: boolean
99
101
  },
100
102
  readonly storage: IStorageSyncFactory | IStorageAsyncFactory,
101
103
  readonly integrations: Array<{
@@ -119,6 +121,7 @@ export interface ISettings {
119
121
  __splitFiltersValidation: ISplitFiltersValidation,
120
122
  localhostMode?: SplitIO.LocalhostFactory,
121
123
  enabled: boolean,
124
+ largeSegmentsEnabled: boolean,
122
125
  flagSpecVersion: string
123
126
  },
124
127
  readonly runtime: {
@@ -813,6 +816,13 @@ export namespace SplitIO {
813
816
  * @default 10
814
817
  */
815
818
  eventsFirstPushWindow?: number,
819
+ /**
820
+ * Whether the SDK should wait for large segments to be ready before emitting SDK_READY event.
821
+ * It only applies if largeSegmentsEnabled is true.
822
+ * @property {number} waitForLargeSegments
823
+ * @default true
824
+ */
825
+ waitForLargeSegments?: boolean
816
826
  },
817
827
  /**
818
828
  * SDK scheduler settings.
@@ -857,6 +867,13 @@ export namespace SplitIO {
857
867
  * @default 60
858
868
  */
859
869
  segmentsRefreshRate?: number,
870
+ /**
871
+ * The SDK polls Split servers for changes to large segment definitions. This parameter controls this polling period in seconds.
872
+ * It only applies if largeSegmentsEnabled is true.
873
+ * @property {number} largeSegmentsRefreshRate
874
+ * @default 60
875
+ */
876
+ largeSegmentsRefreshRate?: number,
860
877
  /**
861
878
  * The SDK posts the queued events data in bulks. This parameter controls the posting rate in seconds.
862
879
  * @property {number} eventsPushRate
@@ -929,6 +946,14 @@ export namespace SplitIO {
929
946
  * @property {Object} urls
930
947
  */
931
948
  urls?: UrlSettings,
949
+ sync?: ISharedSettings['sync'] & {
950
+ /**
951
+ * Enables synchronization of large segments.
952
+ * @property {boolean} largeSegmentsEnabled
953
+ * @default false
954
+ */
955
+ largeSegmentsEnabled?: boolean
956
+ }
932
957
  }
933
958
  /**
934
959
  * Settings interface for SDK instances created on NodeJS.
@@ -76,6 +76,7 @@ export const TELEMETRY = 'te';
76
76
  export const TOKEN = 'to';
77
77
  export const SEGMENT = 'se';
78
78
  export const MY_SEGMENT = 'ms';
79
+ export const MY_LARGE_SEGMENT = 'mls';
79
80
 
80
81
  export const TREATMENT = 't';
81
82
  export const TREATMENTS = 'ts';
@@ -106,3 +107,7 @@ export const ENABLED = 1;
106
107
  export const PAUSED = 2;
107
108
 
108
109
  export const FLAG_SPEC_VERSION = '1.1';
110
+
111
+ // Matcher types
112
+ export const IN_SEGMENT = 'IN_SEGMENT';
113
+ export const IN_LARGE_SEGMENT = 'IN_LARGE_SEGMENT';
@@ -7,7 +7,7 @@ import { ISettingsValidationParams } from './types';
7
7
  import { ISettings } from '../../types';
8
8
  import { validateKey } from '../inputValidation/key';
9
9
  import { validateTrafficType } from '../inputValidation/trafficType';
10
- import { ERROR_MIN_CONFIG_PARAM } from '../../logger/constants';
10
+ import { ERROR_MIN_CONFIG_PARAM, LOG_PREFIX_CLIENT_INSTANTIATION } from '../../logger/constants';
11
11
 
12
12
  // Exported for telemetry
13
13
  export const base = {
@@ -32,6 +32,8 @@ export const base = {
32
32
  featuresRefreshRate: 60,
33
33
  // fetch segments updates each 60 sec
34
34
  segmentsRefreshRate: 60,
35
+ // fetch large segments updates each 60 sec
36
+ largeSegmentsRefreshRate: 60,
35
37
  // publish telemetry stats each 3600 secs (1 hour)
36
38
  telemetryRefreshRate: 3600,
37
39
  // publish evaluations each 300 sec (default value for OPTIMIZED impressions mode)
@@ -85,7 +87,8 @@ export const base = {
85
87
  impressionsMode: OPTIMIZED,
86
88
  localhostMode: undefined,
87
89
  enabled: true,
88
- flagSpecVersion: FLAG_SPEC_VERSION
90
+ flagSpecVersion: FLAG_SPEC_VERSION,
91
+ largeSegmentsEnabled: false
89
92
  },
90
93
 
91
94
  // Logger
@@ -132,6 +135,7 @@ export function settingsValidation(config: unknown, validationParams: ISettingsV
132
135
  const { scheduler, startup } = withDefaults;
133
136
  scheduler.featuresRefreshRate = fromSecondsToMillis(scheduler.featuresRefreshRate);
134
137
  scheduler.segmentsRefreshRate = fromSecondsToMillis(scheduler.segmentsRefreshRate);
138
+ scheduler.largeSegmentsRefreshRate = fromSecondsToMillis(scheduler.largeSegmentsRefreshRate);
135
139
  scheduler.offlineRefreshRate = fromSecondsToMillis(scheduler.offlineRefreshRate);
136
140
  scheduler.eventsPushRate = fromSecondsToMillis(scheduler.eventsPushRate);
137
141
  scheduler.telemetryRefreshRate = fromSecondsToMillis(validateMinValue('telemetryRefreshRate', scheduler.telemetryRefreshRate, 60));
@@ -166,13 +170,13 @@ export function settingsValidation(config: unknown, validationParams: ISettingsV
166
170
  // Keeping same behaviour than JS SDK: if settings key or TT are invalid,
167
171
  // `false` value is used as bound key/TT of the default client, which leads to some issues.
168
172
  // @ts-ignore, @TODO handle invalid keys as a non-recoverable error?
169
- withDefaults.core.key = validateKey(log, maybeKey, 'Client instantiation');
173
+ withDefaults.core.key = validateKey(log, maybeKey, LOG_PREFIX_CLIENT_INSTANTIATION);
170
174
  }
171
175
 
172
176
  if (validationParams.acceptTT) {
173
177
  const maybeTT = withDefaults.core.trafficType;
174
178
  if (maybeTT !== undefined) { // @ts-ignore
175
- withDefaults.core.trafficType = validateTrafficType(log, maybeTT, 'Client instantiation');
179
+ withDefaults.core.trafficType = validateTrafficType(log, maybeTT, LOG_PREFIX_CLIENT_INSTANTIATION);
176
180
  }
177
181
  }
178
182
  } else {
@@ -209,11 +213,12 @@ export function settingsValidation(config: unknown, validationParams: ISettingsV
209
213
  const splitFiltersValidation = validateSplitFilters(log, sync.splitFilters, withDefaults.mode);
210
214
  sync.splitFilters = splitFiltersValidation.validFilters;
211
215
  sync.__splitFiltersValidation = splitFiltersValidation;
212
- sync.flagSpecVersion = flagSpec ? flagSpec(withDefaults) : FLAG_SPEC_VERSION;
213
216
 
217
+ // ensure a valid flag spec version
218
+ sync.flagSpecVersion = flagSpec ? flagSpec(withDefaults) : FLAG_SPEC_VERSION;
214
219
  // ensure a valid user consent value
215
220
  // @ts-ignore, modify readonly prop
216
- withDefaults.userConsent = consent(withDefaults);
221
+ withDefaults.userConsent = consent ? consent(withDefaults) : undefined;
217
222
 
218
223
  return withDefaults;
219
224
  }
@@ -25,7 +25,7 @@ export interface ISettingsValidationParams {
25
25
  /** Localhost mode validator (`settings.sync.localhostMode`) */
26
26
  localhost?: (settings: ISettings) => ISettings['sync']['localhostMode'],
27
27
  /** User consent validator (`settings.userConsent`) */
28
- consent: (settings: ISettings) => ISettings['userConsent'],
28
+ consent?: (settings: ISettings) => ISettings['userConsent'],
29
29
  /** Flag spec version validation. Configurable by the JS Synchronizer but not by the SDKs */
30
30
  flagSpec?: (settings: ISettings) => ISettings['sync']['flagSpecVersion']
31
31
  }
@@ -48,6 +48,10 @@ interface IInSegmentMatcher extends ISplitMatcherBase {
48
48
  matcherType: 'IN_SEGMENT';
49
49
  userDefinedSegmentMatcherData: IInSegmentMatcherData;
50
50
  }
51
+ interface IInLargeSegmentMatcher extends ISplitMatcherBase {
52
+ matcherType: 'IN_LARGE_SEGMENT';
53
+ userDefinedSegmentMatcherData: IInSegmentMatcherData;
54
+ }
51
55
  interface IWhitelistMatcher extends ISplitMatcherBase {
52
56
  matcherType: 'WHITELIST';
53
57
  whitelistMatcherData: IWhitelistMatcherData;
@@ -128,7 +132,7 @@ interface IInListSemverMatcher extends ISplitMatcherBase {
128
132
  matcherType: 'IN_LIST_SEMVER';
129
133
  whitelistMatcherData: IWhitelistMatcherData;
130
134
  }
131
- export declare type ISplitMatcher = IAllKeysMatcher | IInSegmentMatcher | IWhitelistMatcher | IEqualToMatcher | IGreaterThanOrEqualToMatcher | ILessThanOrEqualToMatcher | IBetweenMatcher | IEqualToSetMatcher | IContainsAnyOfSetMatcher | IContainsAllOfSetMatcher | IPartOfSetMatcher | IStartsWithMatcher | IEndsWithMatcher | IContainsStringMatcher | IInSplitTreatmentMatcher | IEqualToBooleanMatcher | IMatchesStringMatcher | IEqualToSemverMatcher | IGreaterThanOrEqualToSemverMatcher | ILessThanOrEqualToSemverMatcher | IBetweenSemverMatcher | IInListSemverMatcher;
135
+ export declare type ISplitMatcher = IAllKeysMatcher | IInSegmentMatcher | IWhitelistMatcher | IEqualToMatcher | IGreaterThanOrEqualToMatcher | ILessThanOrEqualToMatcher | IBetweenMatcher | IEqualToSetMatcher | IContainsAnyOfSetMatcher | IContainsAllOfSetMatcher | IPartOfSetMatcher | IStartsWithMatcher | IEndsWithMatcher | IContainsStringMatcher | IInSplitTreatmentMatcher | IEqualToBooleanMatcher | IMatchesStringMatcher | IEqualToSemverMatcher | IGreaterThanOrEqualToSemverMatcher | ILessThanOrEqualToSemverMatcher | IBetweenSemverMatcher | IInListSemverMatcher | IInLargeSegmentMatcher;
132
136
  /** Split object */
133
137
  export interface ISplitPartition {
134
138
  treatment: string;
@@ -173,13 +177,17 @@ export interface ISegmentChangesResponse {
173
177
  since: number;
174
178
  till: number;
175
179
  }
176
- export interface IMySegmentsResponseItem {
177
- id: string;
178
- name: string;
179
- }
180
180
  /** Interface of the parsed JSON response of `/mySegments/{userKey}` */
181
181
  export interface IMySegmentsResponse {
182
- mySegments: IMySegmentsResponseItem[];
182
+ mySegments: {
183
+ id: string;
184
+ name: string;
185
+ }[];
186
+ }
187
+ /** Interface of the parsed JSON response of `/myLargeSegments/{userKey}` */
188
+ export interface IMyLargeSegmentsResponse {
189
+ myLargeSegments: string[];
190
+ changeNumber: number;
183
191
  }
184
192
  /** Metadata internal type for storages */
185
193
  export interface IMetadata {
@@ -0,0 +1,5 @@
1
+ import { MaybeThenable } from '../../dtos/types';
2
+ import { ISegmentsCacheBase } from '../../storages/types';
3
+ export declare function largeSegmentMatcherContext(largeSegmentName: string, storage: {
4
+ largeSegments?: ISegmentsCacheBase;
5
+ }): (key: string) => MaybeThenable<boolean>;
@@ -35,7 +35,6 @@ export declare const IMPRESSION = 102;
35
35
  export declare const IMPRESSION_QUEUEING = 103;
36
36
  export declare const NEW_SHARED_CLIENT = 104;
37
37
  export declare const NEW_FACTORY = 105;
38
- export declare const POLLING_SMART_PAUSING = 106;
39
38
  export declare const POLLING_START = 107;
40
39
  export declare const POLLING_STOP = 108;
41
40
  export declare const SYNC_SPLITS_FETCH_RETRY = 109;
@@ -115,6 +114,7 @@ export declare const ERROR_SETS_FILTER_EXCLUSIVE = 328;
115
114
  export declare const ENGINE_MATCHER_ERROR = 329;
116
115
  export declare const LOG_PREFIX_SETTINGS = "settings";
117
116
  export declare const LOG_PREFIX_INSTANTIATION = "Factory instantiation";
117
+ export declare const LOG_PREFIX_CLIENT_INSTANTIATION = "Client instantiation";
118
118
  export declare const LOG_PREFIX_ENGINE = "engine";
119
119
  export declare const LOG_PREFIX_ENGINE_COMBINER: string;
120
120
  export declare const LOG_PREFIX_ENGINE_MATCHER: string;
@@ -1,6 +1,6 @@
1
- import { IEventEmitter } from '../types';
1
+ import { IEventEmitter, ISettings } from '../types';
2
2
  import { IReadinessManager, ISplitsEventEmitter } from './types';
3
3
  /**
4
4
  * Factory of readiness manager, which handles the ready / update event propagation.
5
5
  */
6
- export declare function readinessManagerFactory(EventEmitter: new () => IEventEmitter, readyTimeout?: number, splits?: ISplitsEventEmitter): IReadinessManager;
6
+ export declare function readinessManagerFactory(EventEmitter: new () => IEventEmitter, settings: ISettings, splits?: ISplitsEventEmitter): IReadinessManager;
@@ -1,6 +1,5 @@
1
1
  import { ISdkReadinessManager } from './types';
2
- import { IEventEmitter } from '../types';
3
- import { ILogger } from '../logger/types';
2
+ import { IEventEmitter, ISettings } from '../types';
4
3
  /**
5
4
  * SdkReadinessManager factory, which provides the public status API of SDK clients and manager: ready promise, readiness event emitter and constants (SDK_READY, etc).
6
5
  * It also updates logs related warnings and errors.
@@ -8,4 +7,4 @@ import { ILogger } from '../logger/types';
8
7
  * @param readyTimeout time in millis to emit SDK_READY_TIME_OUT event
9
8
  * @param readinessManager optional readinessManager to use. only used internally for `shared` method
10
9
  */
11
- export declare function sdkReadinessManagerFactory(log: ILogger, EventEmitter: new () => IEventEmitter, readyTimeout?: number, readinessManager?: import("./types").IReadinessManager): ISdkReadinessManager;
10
+ export declare function sdkReadinessManagerFactory(EventEmitter: new () => IEventEmitter, settings: ISettings, readinessManager?: import("./types").IReadinessManager): ISdkReadinessManager;
@@ -34,6 +34,7 @@ export interface IReadinessManager {
34
34
  /** Event emitters */
35
35
  splits: ISplitsEventEmitter;
36
36
  segments: ISegmentsEventEmitter;
37
+ largeSegments?: ISegmentsEventEmitter;
37
38
  gate: IReadinessEventEmitter;
38
39
  /** Readiness status */
39
40
  isReady(): boolean;
@@ -45,7 +46,7 @@ export interface IReadinessManager {
45
46
  setDestroyed(): void;
46
47
  destroy(): void;
47
48
  /** for client-side */
48
- shared(readyTimeout?: number): IReadinessManager;
49
+ shared(): IReadinessManager;
49
50
  }
50
51
  /** SDK readiness manager */
51
52
  export interface ISdkReadinessManager {
@@ -57,6 +58,6 @@ export interface ISdkReadinessManager {
57
58
  */
58
59
  incInternalReadyCbCount(): void;
59
60
  /** for client-side */
60
- shared(readyTimeout?: number): ISdkReadinessManager;
61
+ shared(): ISdkReadinessManager;
61
62
  }
62
63
  export {};
@@ -33,6 +33,7 @@ export interface ISplitApi {
33
33
  fetchSplitChanges: IFetchSplitChanges;
34
34
  fetchSegmentChanges: IFetchSegmentChanges;
35
35
  fetchMySegments: IFetchMySegments;
36
+ fetchMyLargeSegments: IFetchMySegments;
36
37
  postEventsBulk: IPostEventsBulk;
37
38
  postUniqueKeysBulkCs: IPostUniqueKeysBulkCs;
38
39
  postUniqueKeysBulkSs: IPostUniqueKeysBulkSs;
@@ -18,7 +18,7 @@ export declare abstract class AbstractSplitsCacheAsync implements ISplitsCacheAs
18
18
  abstract getNamesByFlagSets(flagSets: string[]): Promise<ISet<string>[]>;
19
19
  abstract trafficTypeExists(trafficType: string): Promise<boolean>;
20
20
  abstract clear(): Promise<boolean | void>;
21
- usesSegments(): Promise<boolean>;
21
+ usesMatcher(): Promise<boolean>;
22
22
  /**
23
23
  * Check if the splits information is already stored in cache.
24
24
  * Noop, just keeping the interface. This is used by client-side implementations only.
@@ -17,7 +17,7 @@ export declare abstract class AbstractSplitsCacheSync implements ISplitsCacheSyn
17
17
  getAll(): ISplit[];
18
18
  abstract getSplitNames(): string[];
19
19
  abstract trafficTypeExists(trafficType: string): boolean;
20
- abstract usesSegments(): boolean;
20
+ abstract usesMatcher(matcherType: string): boolean;
21
21
  abstract clear(): void;
22
22
  /**
23
23
  * Check if the splits information is already stored in cache. This data can be preloaded.
@@ -39,6 +39,6 @@ export declare abstract class AbstractSplitsCacheSync implements ISplitsCacheSyn
39
39
  }
40
40
  /**
41
41
  * Given a parsed split, it returns a boolean flagging if its conditions use segments matchers (rules & whitelists).
42
- * This util is intended to simplify the implementation of `splitsCache::usesSegments` method
42
+ * This util is intended to simplify the implementation of `splitsCache::usesMatcher` method
43
43
  */
44
- export declare function usesSegments(split: ISplit): boolean;
44
+ export declare function usesMatcher(split: ISplit, matcherType: string): boolean;
@@ -10,6 +10,7 @@ export declare class KeyBuilder {
10
10
  isSplitKey(key: string): boolean;
11
11
  buildSplitKeyPrefix(): string;
12
12
  buildSplitsWithSegmentCountKey(): string;
13
+ buildSplitsWithLargeSegmentCountKey(): string;
13
14
  buildSegmentNameKey(segmentName: string): string;
14
15
  buildSegmentTillKey(segmentName: string): string;
15
16
  extractKey(builtKey: string): string;
@@ -1,5 +1,10 @@
1
1
  import { KeyBuilder } from './KeyBuilder';
2
- export declare class KeyBuilderCS extends KeyBuilder {
2
+ export interface MySegmentsKeyBuilder {
3
+ buildSegmentNameKey(segmentName: string): string;
4
+ extractSegmentName(builtSegmentKeyName: string): string | undefined;
5
+ extractOldSegmentKey(builtSegmentKeyName: string): string | undefined;
6
+ }
7
+ export declare class KeyBuilderCS extends KeyBuilder implements MySegmentsKeyBuilder {
3
8
  protected readonly regexSplitsCacheKey: RegExp;
4
9
  protected readonly matchingKey: string;
5
10
  constructor(prefix: string, matchingKey: string);
@@ -8,8 +13,8 @@ export declare class KeyBuilderCS extends KeyBuilder {
8
13
  */
9
14
  buildSegmentNameKey(segmentName: string): string;
10
15
  extractSegmentName(builtSegmentKeyName: string): string | undefined;
11
- buildOldSegmentNameKey(segmentName: string): string;
12
16
  extractOldSegmentKey(builtSegmentKeyName: string): string | undefined;
13
17
  buildLastUpdatedKey(): string;
14
18
  isSplitsCacheKey(key: string): boolean;
15
19
  }
20
+ export declare function myLargeSegmentsKeyBuilder(prefix: string, matchingKey: string): MySegmentsKeyBuilder;
@@ -1,10 +1,10 @@
1
1
  import { ILogger } from '../../logger/types';
2
2
  import { AbstractSegmentsCacheSync } from '../AbstractSegmentsCacheSync';
3
- import { KeyBuilderCS } from '../KeyBuilderCS';
3
+ import type { MySegmentsKeyBuilder } from '../KeyBuilderCS';
4
4
  export declare class MySegmentsCacheInLocal extends AbstractSegmentsCacheSync {
5
5
  private readonly keys;
6
6
  private readonly log;
7
- constructor(log: ILogger, keys: KeyBuilderCS);
7
+ constructor(log: ILogger, keys: MySegmentsKeyBuilder);
8
8
  /**
9
9
  * Removes list of segments from localStorage
10
10
  * @NOTE this method is not being used at the moment.
@@ -34,7 +34,7 @@ export declare class SplitsCacheInLocal extends AbstractSplitsCacheSync {
34
34
  getChangeNumber(): number;
35
35
  getSplitNames(): string[];
36
36
  trafficTypeExists(trafficType: string): boolean;
37
- usesSegments(): boolean;
37
+ usesMatcher(matcherType: string): boolean;
38
38
  /**
39
39
  * Check if the splits information is already stored in browser LocalStorage.
40
40
  * In this function we could add more code to check if the data is valid.
@@ -10,7 +10,8 @@ export declare class SplitsCacheInMemory extends AbstractSplitsCacheSync {
10
10
  private splitsCache;
11
11
  private ttCache;
12
12
  private changeNumber;
13
- private splitsWithSegmentsCount;
13
+ private segmentsCount;
14
+ private largeSegmentsCount;
14
15
  private flagSetsCache;
15
16
  constructor(splitFiltersValidation?: ISplitFiltersValidation);
16
17
  clear(): void;
@@ -21,7 +22,7 @@ export declare class SplitsCacheInMemory extends AbstractSplitsCacheSync {
21
22
  getChangeNumber(): number;
22
23
  getSplitNames(): string[];
23
24
  trafficTypeExists(trafficType: string): boolean;
24
- usesSegments(): boolean;
25
+ usesMatcher(matcherType: string): boolean;
25
26
  getNamesByFlagSets(flagSets: string[]): ISet<string>[];
26
27
  private addToFlagSets;
27
28
  private removeFromFlagSets;
@@ -1,4 +1,4 @@
1
- import { ImpressionDataType, EventDataType, StreamingEvent, Method, OperationType, TelemetryUsageStatsPayload, UpdatesFromSSEEnum } from '../../sync/submitters/types';
1
+ import { ImpressionDataType, EventDataType, StreamingEvent, Method, OperationType, TelemetryUsageStatsPayload, UpdatesFromSSEEnum, UpdatesFromSSE } from '../../sync/submitters/types';
2
2
  import { ISegmentsCacheSync, ISplitsCacheSync, IStorageFactoryParams, ITelemetryCacheSync } from '../types';
3
3
  export declare const MAX_LATENCY_BUCKET_COUNT = 23;
4
4
  export declare function newBuckets(): number[];
@@ -10,7 +10,8 @@ export declare function shouldRecordTelemetry({ settings }: IStorageFactoryParam
10
10
  export declare class TelemetryCacheInMemory implements ITelemetryCacheSync {
11
11
  private splits?;
12
12
  private segments?;
13
- constructor(splits?: ISplitsCacheSync | undefined, segments?: ISegmentsCacheSync | undefined);
13
+ private largeSegments?;
14
+ constructor(splits?: ISplitsCacheSync | undefined, segments?: ISegmentsCacheSync | undefined, largeSegments?: ISegmentsCacheSync | undefined);
14
15
  private e;
15
16
  isEmpty(): boolean;
16
17
  clear(): void;
@@ -65,9 +66,6 @@ export declare class TelemetryCacheInMemory implements ITelemetryCacheSync {
65
66
  popLatencies(): Partial<Record<Method, number[]>>;
66
67
  recordLatency(method: Method, latencyMs: number): void;
67
68
  private updatesFromSSE;
68
- popUpdatesFromSSE(): {
69
- sp: number;
70
- ms: number;
71
- };
69
+ popUpdatesFromSSE(): UpdatesFromSSE;
72
70
  recordUpdatesFromSSE(type: UpdatesFromSSEEnum): void;
73
71
  }
@@ -5,7 +5,7 @@ import { ISet } from '../../utils/lang/sets';
5
5
  * The `_cache` property is the object were items are stored.
6
6
  * Intended for testing purposes.
7
7
  *
8
- * @param connDelay delay in millis for `connect` resolve. If not provided, `connect` resolves inmediatelly.
8
+ * @param connDelay delay in millis for `connect` resolve. If not provided, `connect` resolves immediately.
9
9
  */
10
10
  export declare function inMemoryWrapperFactory(connDelay?: number): IPluggableStorageWrapper & {
11
11
  _cache: Record<string, string | string[] | ISet<string>>;
@@ -189,7 +189,7 @@ export interface ISplitsCacheBase {
189
189
  getAll(): MaybeThenable<ISplit[]>;
190
190
  getSplitNames(): MaybeThenable<string[]>;
191
191
  trafficTypeExists(trafficType: string): MaybeThenable<boolean>;
192
- usesSegments(): MaybeThenable<boolean>;
192
+ usesMatcher(matcherType: string): MaybeThenable<boolean>;
193
193
  clear(): MaybeThenable<boolean | void>;
194
194
  checkCache(): MaybeThenable<boolean>;
195
195
  killLocally(name: string, defaultTreatment: string, changeNumber: number): MaybeThenable<boolean>;
@@ -205,7 +205,7 @@ export interface ISplitsCacheSync extends ISplitsCacheBase {
205
205
  getAll(): ISplit[];
206
206
  getSplitNames(): string[];
207
207
  trafficTypeExists(trafficType: string): boolean;
208
- usesSegments(): boolean;
208
+ usesMatcher(matcherType: string): boolean;
209
209
  clear(): void;
210
210
  checkCache(): boolean;
211
211
  killLocally(name: string, defaultTreatment: string, changeNumber: number): boolean;
@@ -221,7 +221,7 @@ export interface ISplitsCacheAsync extends ISplitsCacheBase {
221
221
  getAll(): Promise<ISplit[]>;
222
222
  getSplitNames(): Promise<string[]>;
223
223
  trafficTypeExists(trafficType: string): Promise<boolean>;
224
- usesSegments(): Promise<boolean>;
224
+ usesMatcher(matcherType: string): Promise<boolean>;
225
225
  clear(): Promise<boolean | void>;
226
226
  checkCache(): Promise<boolean>;
227
227
  killLocally(name: string, defaultTreatment: string, changeNumber: number): Promise<boolean>;
@@ -388,6 +388,7 @@ export interface IStorageBase<TSplitsCache extends ISplitsCacheBase, TSegmentsCa
388
388
  shared?: (matchingKey: string, onReadyCb: (error?: any) => void) => this;
389
389
  }
390
390
  export interface IStorageSync extends IStorageBase<ISplitsCacheSync, ISegmentsCacheSync, IImpressionsCacheSync, IImpressionCountsCacheSync, IEventsCacheSync, ITelemetryCacheSync, IUniqueKeysCacheSync> {
391
+ largeSegments?: ISegmentsCacheSync;
391
392
  }
392
393
  export interface IStorageAsync extends IStorageBase<ISplitsCacheAsync, ISegmentsCacheAsync, IImpressionsCacheAsync | IImpressionsCacheSync, IImpressionCountsCacheBase, IEventsCacheAsync | IEventsCacheSync, ITelemetryCacheAsync | ITelemetryCacheSync, IUniqueKeysCacheBase> {
393
394
  }