@splitsoftware/splitio-commons 3.1.1-rc.1 → 3.1.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.
- package/CHANGES.txt +10 -1
- package/cjs/evaluator/condition/index.js +2 -2
- package/cjs/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +8 -5
- package/cjs/evaluator/index.js +71 -76
- package/cjs/listeners/browser.js +1 -2
- package/cjs/listeners/node.js +4 -4
- package/cjs/logger/constants.js +20 -15
- package/cjs/logger/messages/debug.js +6 -5
- package/cjs/logger/messages/error.js +3 -3
- package/cjs/logger/messages/info.js +4 -3
- package/cjs/logger/messages/warn.js +7 -6
- package/cjs/presets/serverSide.js +2 -2
- package/cjs/readiness/constants.js +4 -5
- package/cjs/readiness/readinessManager.js +23 -23
- package/cjs/readiness/sdkReadinessManager.js +17 -1
- package/cjs/sdkClient/client.js +51 -27
- package/cjs/sdkClient/clientInputValidation.js +17 -6
- package/cjs/sdkClient/sdkClient.js +60 -3
- package/cjs/sdkFactory/index.js +15 -11
- package/cjs/sdkManager/index.js +5 -5
- package/cjs/services/decorateHeaders.js +1 -2
- package/cjs/services/splitApi.js +1 -14
- package/cjs/services/splitHttpClient.js +5 -3
- package/cjs/storages/AbstractSplitsCacheAsync.js +51 -0
- package/cjs/storages/AbstractSplitsCacheSync.js +76 -0
- package/cjs/storages/KeyBuilder.js +6 -6
- package/cjs/storages/KeyBuilderCS.js +5 -5
- package/cjs/storages/KeyBuilderSS.js +2 -2
- package/cjs/storages/getRolloutPlan.js +3 -3
- package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +2 -1
- package/cjs/storages/inLocalStorage/RBSegmentsCacheInLocal.js +10 -10
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +194 -0
- package/cjs/storages/inLocalStorage/index.js +6 -6
- package/cjs/storages/inLocalStorage/validateCache.js +3 -3
- package/cjs/storages/inMemory/InMemoryStorage.js +4 -4
- package/cjs/storages/inMemory/InMemoryStorageCS.js +5 -5
- package/cjs/storages/inMemory/RBSegmentsCacheInMemory.js +5 -5
- package/cjs/storages/inMemory/SegmentsCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/SplitsCacheInMemory.js +121 -0
- package/cjs/storages/inMemory/TelemetryCacheInMemory.js +5 -5
- package/cjs/storages/inRedis/RBSegmentsCacheInRedis.js +1 -1
- package/cjs/storages/inRedis/RedisAdapter.js +8 -5
- package/cjs/storages/inRedis/{DefinitionsCacheInRedis.js → SplitsCacheInRedis.js} +77 -77
- package/cjs/storages/inRedis/index.js +2 -2
- package/cjs/storages/pluggable/RBSegmentsCachePluggable.js +1 -1
- package/cjs/storages/pluggable/SplitsCachePluggable.js +212 -0
- package/cjs/storages/pluggable/index.js +2 -2
- package/cjs/storages/setRolloutPlan.js +4 -4
- package/cjs/storages/utils.js +0 -1
- package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +5 -5
- package/cjs/sync/polling/fetchers/splitChangesFetcher.js +15 -24
- package/cjs/sync/polling/pollingManagerCS.js +20 -20
- package/cjs/sync/polling/pollingManagerSS.js +15 -15
- package/cjs/sync/polling/syncTasks/segmentsSyncTask.js +3 -2
- package/cjs/sync/polling/syncTasks/splitsSyncTask.js +13 -0
- package/cjs/sync/polling/updaters/mySegmentsUpdater.js +3 -3
- package/cjs/sync/polling/updaters/segmentChangesUpdater.js +6 -6
- package/cjs/sync/polling/updaters/{definitionChangesUpdater.js → splitChangesUpdater.js} +68 -65
- package/cjs/sync/streaming/AuthClient/index.js +1 -1
- package/cjs/sync/streaming/SSEHandler/NotificationKeeper.js +1 -1
- package/cjs/sync/streaming/SSEHandler/index.js +1 -1
- package/cjs/sync/streaming/UpdateWorkers/{DefinitionsUpdateWorker.js → SplitsUpdateWorker.js} +19 -16
- package/cjs/sync/streaming/constants.js +3 -3
- package/cjs/sync/streaming/parseUtils.js +11 -11
- package/cjs/sync/streaming/pushManager.js +16 -16
- package/cjs/sync/submitters/eventsSubmitter.js +1 -1
- package/cjs/sync/submitters/impressionCountsSubmitter.js +1 -1
- package/cjs/sync/submitters/impressionsSubmitter.js +4 -5
- package/cjs/sync/submitters/telemetrySubmitter.js +4 -3
- package/cjs/sync/submitters/uniqueKeysSubmitter.js +1 -1
- package/cjs/sync/syncManagerOnline.js +7 -12
- package/cjs/utils/Backoff.js +0 -20
- package/cjs/utils/inputValidation/index.js +7 -7
- package/cjs/utils/inputValidation/isOperational.js +4 -4
- package/cjs/utils/inputValidation/{definition.js → split.js} +10 -10
- package/cjs/utils/inputValidation/{definitionExistence.js → splitExistence.js} +6 -6
- package/cjs/utils/inputValidation/splits.js +25 -0
- package/cjs/utils/labels/index.js +3 -3
- package/cjs/utils/settingsValidation/index.js +0 -2
- package/cjs/utils/settingsValidation/splitFilters.js +3 -3
- package/cjs/utils/settingsValidation/url.js +2 -6
- package/esm/evaluator/condition/index.js +2 -2
- package/esm/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +8 -5
- package/esm/evaluator/index.js +71 -75
- package/esm/listeners/browser.js +1 -2
- package/esm/listeners/node.js +4 -4
- package/esm/logger/constants.js +17 -12
- package/esm/logger/messages/debug.js +6 -5
- package/esm/logger/messages/error.js +3 -3
- package/esm/logger/messages/info.js +4 -3
- package/esm/logger/messages/warn.js +7 -6
- package/esm/presets/serverSide.js +2 -2
- package/esm/readiness/constants.js +3 -4
- package/esm/readiness/readinessManager.js +24 -24
- package/esm/readiness/sdkReadinessManager.js +18 -2
- package/esm/sdkClient/client.js +51 -26
- package/esm/sdkClient/clientInputValidation.js +19 -8
- package/esm/sdkClient/sdkClient.js +60 -3
- package/esm/sdkFactory/index.js +16 -12
- package/esm/sdkManager/index.js +6 -6
- package/esm/services/decorateHeaders.js +1 -2
- package/esm/services/splitApi.js +1 -14
- package/esm/services/splitHttpClient.js +5 -3
- package/esm/storages/AbstractSplitsCacheAsync.js +48 -0
- package/esm/storages/AbstractSplitsCacheSync.js +71 -0
- package/esm/storages/KeyBuilder.js +6 -6
- package/esm/storages/KeyBuilderCS.js +5 -5
- package/esm/storages/KeyBuilderSS.js +2 -2
- package/esm/storages/getRolloutPlan.js +3 -3
- package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +2 -1
- package/esm/storages/inLocalStorage/RBSegmentsCacheInLocal.js +7 -7
- package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +191 -0
- package/esm/storages/inLocalStorage/index.js +6 -6
- package/esm/storages/inLocalStorage/validateCache.js +3 -3
- package/esm/storages/inMemory/InMemoryStorage.js +4 -4
- package/esm/storages/inMemory/InMemoryStorageCS.js +5 -5
- package/esm/storages/inMemory/RBSegmentsCacheInMemory.js +2 -2
- package/esm/storages/inMemory/SegmentsCacheInMemory.js +1 -1
- package/esm/storages/inMemory/SplitsCacheInMemory.js +118 -0
- package/esm/storages/inMemory/TelemetryCacheInMemory.js +5 -5
- package/esm/storages/inRedis/RBSegmentsCacheInRedis.js +1 -1
- package/esm/storages/inRedis/RedisAdapter.js +8 -5
- package/esm/storages/inRedis/{DefinitionsCacheInRedis.js → SplitsCacheInRedis.js} +76 -76
- package/esm/storages/inRedis/index.js +2 -2
- package/esm/storages/pluggable/RBSegmentsCachePluggable.js +1 -1
- package/esm/storages/pluggable/SplitsCachePluggable.js +209 -0
- package/esm/storages/pluggable/index.js +2 -2
- package/esm/storages/setRolloutPlan.js +4 -4
- package/esm/storages/utils.js +0 -1
- package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +6 -6
- package/esm/sync/polling/fetchers/splitChangesFetcher.js +16 -25
- package/esm/sync/polling/pollingManagerCS.js +17 -17
- package/esm/sync/polling/pollingManagerSS.js +15 -15
- package/esm/sync/polling/syncTasks/segmentsSyncTask.js +3 -2
- package/esm/sync/polling/syncTasks/splitsSyncTask.js +9 -0
- package/esm/sync/polling/updaters/mySegmentsUpdater.js +3 -3
- package/esm/sync/polling/updaters/segmentChangesUpdater.js +7 -7
- package/esm/sync/polling/updaters/{definitionChangesUpdater.js → splitChangesUpdater.js} +68 -65
- package/esm/sync/streaming/AuthClient/index.js +1 -1
- package/esm/sync/streaming/SSEHandler/NotificationKeeper.js +2 -2
- package/esm/sync/streaming/SSEHandler/index.js +2 -2
- package/esm/sync/streaming/UpdateWorkers/{DefinitionsUpdateWorker.js → SplitsUpdateWorker.js} +18 -15
- package/esm/sync/streaming/constants.js +2 -2
- package/esm/sync/streaming/parseUtils.js +9 -9
- package/esm/sync/streaming/pushManager.js +18 -18
- package/esm/sync/submitters/eventsSubmitter.js +1 -1
- package/esm/sync/submitters/impressionCountsSubmitter.js +1 -1
- package/esm/sync/submitters/impressionsSubmitter.js +4 -5
- package/esm/sync/submitters/telemetrySubmitter.js +4 -3
- package/esm/sync/submitters/uniqueKeysSubmitter.js +1 -1
- package/esm/sync/syncManagerOnline.js +6 -11
- package/esm/utils/Backoff.js +0 -20
- package/esm/utils/inputValidation/index.js +3 -3
- package/esm/utils/inputValidation/isOperational.js +4 -4
- package/esm/utils/inputValidation/{definition.js → split.js} +8 -8
- package/esm/utils/inputValidation/splitExistence.js +15 -0
- package/esm/utils/inputValidation/splits.js +21 -0
- package/esm/utils/labels/index.js +2 -2
- package/esm/utils/settingsValidation/index.js +0 -2
- package/esm/utils/settingsValidation/splitFilters.js +3 -3
- package/esm/utils/settingsValidation/url.js +2 -6
- package/package.json +6 -7
- package/src/dtos/types.ts +1 -1
- package/src/evaluator/index.ts +11 -5
- package/src/evaluator/types.ts +1 -0
- package/src/presets/serverSide.ts +3 -3
- package/src/sdkClient/client.ts +3 -4
- package/src/sdkClient/sdkLifecycle.ts +3 -0
- package/src/services/authProvider.ts +41 -19
- package/src/services/secureSplitHttpClient.ts +10 -18
- package/src/services/serviceApi.ts +27 -24
- package/src/services/splitApi.ts +10 -9
- package/src/services/types.ts +5 -4
- package/src/storages/inRedis/RedisAdapter.ts +8 -5
- package/src/sync/polling/pollingManagerCS.ts +80 -78
- package/src/sync/polling/pollingManagerSS.ts +49 -45
- package/src/sync/polling/updaters/definitionChangesUpdater.ts +3 -3
- package/src/sync/polling/updaters/segmentChangesUpdater.ts +1 -1
- package/src/sync/streaming/AuthClient/index.ts +14 -15
- package/src/sync/streaming/AuthClient/types.ts +9 -13
- package/src/sync/streaming/SSEClient/index.ts +2 -2
- package/src/sync/streaming/SSEClient/types.ts +2 -2
- package/src/sync/streaming/SSEHandler/index.ts +2 -1
- package/src/sync/streaming/SSEHandler/types.ts +2 -2
- package/src/sync/streaming/constants.ts +1 -0
- package/src/sync/streaming/pushManager.ts +32 -42
- package/src/sync/streaming/types.ts +3 -2
- package/src/sync/submitters/impressionsSubmitter.ts +3 -3
- package/src/sync/submitters/types.ts +2 -2
- package/src/sync/syncManagerOnline.ts +2 -8
- package/src/utils/Backoff.ts +16 -4
- package/types/splitio.d.ts +5 -4
- package/cjs/platform/browser.js +0 -15
- package/cjs/platform/getEventSource/browser.js +0 -8
- package/cjs/platform/getEventSource/eventsource.js +0 -480
- package/cjs/platform/getEventSource/node.js +0 -26
- package/cjs/platform/getFetch/browser.js +0 -9
- package/cjs/platform/getFetch/node.js +0 -27
- package/cjs/platform/getOptions/node.js +0 -25
- package/cjs/platform/node.js +0 -17
- package/cjs/sdkClient/sdkLifecycle.js +0 -72
- package/cjs/sdkClient/trackMethod.js +0 -56
- package/cjs/services/authProvider.js +0 -67
- package/cjs/services/secureSplitHttpClient.js +0 -39
- package/cjs/services/serviceApi.js +0 -145
- package/cjs/storages/AbstractDefinitionsCacheAsync.js +0 -51
- package/cjs/storages/AbstractDefinitionsCacheSync.js +0 -76
- package/cjs/storages/inLocalStorage/DefinitionsCacheInLocal.js +0 -194
- package/cjs/storages/inMemory/DefinitionsCacheInMemory.js +0 -121
- package/cjs/storages/pluggable/DefinitionsCachePluggable.js +0 -212
- package/cjs/sync/polling/syncTasks/definitionsSyncTask.js +0 -13
- package/cjs/utils/EventEmitter.js +0 -391
- package/cjs/utils/filter/bloomFilter.js +0 -37
- package/cjs/utils/inputValidation/definitions.js +0 -25
- package/cjs/utils/inputValidation/target.js +0 -22
- package/esm/platform/browser.js +0 -12
- package/esm/platform/getEventSource/browser.js +0 -4
- package/esm/platform/getEventSource/eventsource.js +0 -480
- package/esm/platform/getEventSource/node.js +0 -20
- package/esm/platform/getFetch/browser.js +0 -5
- package/esm/platform/getFetch/node.js +0 -22
- package/esm/platform/getOptions/node.js +0 -20
- package/esm/platform/node.js +0 -14
- package/esm/sdkClient/sdkLifecycle.js +0 -68
- package/esm/sdkClient/trackMethod.js +0 -52
- package/esm/services/authProvider.js +0 -63
- package/esm/services/secureSplitHttpClient.js +0 -35
- package/esm/services/serviceApi.js +0 -141
- package/esm/storages/AbstractDefinitionsCacheAsync.js +0 -48
- package/esm/storages/AbstractDefinitionsCacheSync.js +0 -71
- package/esm/storages/inLocalStorage/DefinitionsCacheInLocal.js +0 -191
- package/esm/storages/inMemory/DefinitionsCacheInMemory.js +0 -118
- package/esm/storages/pluggable/DefinitionsCachePluggable.js +0 -209
- package/esm/sync/polling/syncTasks/definitionsSyncTask.js +0 -9
- package/esm/utils/EventEmitter.js +0 -387
- package/esm/utils/filter/bloomFilter.js +0 -33
- package/esm/utils/inputValidation/definitionExistence.js +0 -15
- package/esm/utils/inputValidation/definitions.js +0 -21
- package/esm/utils/inputValidation/target.js +0 -18
|
@@ -16,19 +16,20 @@ export type MEMBERSHIPS_LS_UPDATE = 'MEMBERSHIPS_LS_UPDATE';
|
|
|
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 CONFIG_UPDATE = 'CONFIG_UPDATE';
|
|
19
20
|
export type RB_SEGMENT_UPDATE = 'RB_SEGMENT_UPDATE';
|
|
20
21
|
|
|
21
22
|
// Control-type push notifications, handled by NotificationKeeper
|
|
22
23
|
export type CONTROL = 'CONTROL';
|
|
23
24
|
export type OCCUPANCY = 'OCCUPANCY';
|
|
24
25
|
|
|
25
|
-
export type IPushEvent = PUSH_SUBSYSTEM_UP | PUSH_SUBSYSTEM_DOWN | PUSH_NON_RETRYABLE_ERROR | PUSH_RETRYABLE_ERROR | MEMBERSHIPS_MS_UPDATE | MEMBERSHIPS_LS_UPDATE | SEGMENT_UPDATE | SPLIT_UPDATE | SPLIT_KILL | RB_SEGMENT_UPDATE | ControlType.STREAMING_RESET
|
|
26
|
+
export type IPushEvent = PUSH_SUBSYSTEM_UP | PUSH_SUBSYSTEM_DOWN | PUSH_NON_RETRYABLE_ERROR | PUSH_RETRYABLE_ERROR | MEMBERSHIPS_MS_UPDATE | MEMBERSHIPS_LS_UPDATE | SEGMENT_UPDATE | SPLIT_UPDATE | CONFIG_UPDATE | SPLIT_KILL | RB_SEGMENT_UPDATE | ControlType.STREAMING_RESET
|
|
26
27
|
|
|
27
28
|
type IParsedData<T extends IPushEvent> =
|
|
28
29
|
T extends MEMBERSHIPS_MS_UPDATE ? IMembershipMSUpdateData :
|
|
29
30
|
T extends MEMBERSHIPS_LS_UPDATE ? IMembershipLSUpdateData :
|
|
30
31
|
T extends SEGMENT_UPDATE ? ISegmentUpdateData :
|
|
31
|
-
T extends SPLIT_UPDATE | RB_SEGMENT_UPDATE ? ISplitUpdateData :
|
|
32
|
+
T extends SPLIT_UPDATE | CONFIG_UPDATE | RB_SEGMENT_UPDATE ? ISplitUpdateData :
|
|
32
33
|
T extends SPLIT_KILL ? ISplitKillData : INotificationData;
|
|
33
34
|
|
|
34
35
|
/**
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { groupBy, forOwn } from '../../utils/lang';
|
|
2
2
|
import SplitIO from '../../../types/splitio';
|
|
3
3
|
import { submitterFactory } from './submitter';
|
|
4
|
-
import { ImpressionsPayload } from './types';
|
|
4
|
+
import { EntityType, ImpressionsPayload } from './types';
|
|
5
5
|
import { SUBMITTERS_PUSH_FULL_QUEUE } from '../../logger/constants';
|
|
6
6
|
import { ISdkFactoryContextSync } from '../../sdkFactory/types';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Converts `impressions` data from cache into request payload.
|
|
10
10
|
*/
|
|
11
|
-
export function fromImpressionsCollector(sendLabels: boolean, data: SplitIO.ImpressionDTO[]): ImpressionsPayload {
|
|
11
|
+
export function fromImpressionsCollector(sendLabels: boolean, data: (SplitIO.ImpressionDTO & { entityType?: EntityType })[]): ImpressionsPayload {
|
|
12
12
|
let groupedByFeature = groupBy(data, 'feature');
|
|
13
13
|
let dto: ImpressionsPayload = [];
|
|
14
14
|
|
|
@@ -25,7 +25,7 @@ export function fromImpressionsCollector(sendLabels: boolean, data: SplitIO.Impr
|
|
|
25
25
|
b: entry.bucketingKey, // Bucketing Key
|
|
26
26
|
pt: entry.pt, // Previous time
|
|
27
27
|
properties: entry.properties, // Properties
|
|
28
|
-
// @
|
|
28
|
+
// @TODO: add entityType to public SplitIO.ImpressionDTO type
|
|
29
29
|
et: entry.entityType, // Definition type
|
|
30
30
|
};
|
|
31
31
|
})
|
|
@@ -3,7 +3,7 @@ import { IMetadata } from '../../dtos/types';
|
|
|
3
3
|
import SplitIO from '../../../types/splitio';
|
|
4
4
|
import { ISyncTask } from '../types';
|
|
5
5
|
|
|
6
|
-
type EntityType = 'config' | 'flag' | 'ai-config';
|
|
6
|
+
export type EntityType = 'config' | 'flag' | 'ai-config';
|
|
7
7
|
|
|
8
8
|
type ImpressionPayload = {
|
|
9
9
|
/** Matching Key */
|
|
@@ -15,7 +15,7 @@ type ImpressionPayload = {
|
|
|
15
15
|
/** Timestamp */
|
|
16
16
|
m: number;
|
|
17
17
|
/** Change number */
|
|
18
|
-
c
|
|
18
|
+
c?: number;
|
|
19
19
|
/** Rule label */
|
|
20
20
|
r?: string;
|
|
21
21
|
/** Previous time */
|
|
@@ -11,9 +11,6 @@ import { POLLING, STREAMING, SYNC_MODE_UPDATE } from '../utils/constants';
|
|
|
11
11
|
import { ISdkFactoryContextSync } from '../sdkFactory/types';
|
|
12
12
|
import { SDK_DEFINITIONS_CACHE_LOADED } from '../readiness/constants';
|
|
13
13
|
import { usesSegmentsSync } from '../storages/AbstractDefinitionsCacheSync';
|
|
14
|
-
import { splitChangesFetcherFactory } from './polling/fetchers/splitChangesFetcher';
|
|
15
|
-
import { IDefinitionChangesFetcher, ISegmentChangesFetcher } from './polling/fetchers/types';
|
|
16
|
-
import { segmentChangesFetcherFactory } from './polling/fetchers/segmentChangesFetcher';
|
|
17
14
|
|
|
18
15
|
/**
|
|
19
16
|
* Online SyncManager factory.
|
|
@@ -22,13 +19,10 @@ import { segmentChangesFetcherFactory } from './polling/fetchers/segmentChangesF
|
|
|
22
19
|
* @param pollingManagerFactory - allows to specialize the SyncManager for server-side or client-side API by passing
|
|
23
20
|
* `pollingManagerSSFactory` or `pollingManagerCSFactory` respectively.
|
|
24
21
|
* @param pushManagerFactory - optional to build a SyncManager with or without streaming support
|
|
25
|
-
* @param definitionChangesFetcherFactory - optional to replace the default split changes fetcher
|
|
26
22
|
*/
|
|
27
23
|
export function syncManagerOnlineFactory(
|
|
28
|
-
pollingManagerFactory?: (params: ISdkFactoryContextSync
|
|
24
|
+
pollingManagerFactory?: (params: ISdkFactoryContextSync) => IPollingManager,
|
|
29
25
|
pushManagerFactory?: (params: ISdkFactoryContextSync, pollingManager: IPollingManager) => IPushManager | undefined,
|
|
30
|
-
definitionFetcherFactory = splitChangesFetcherFactory,
|
|
31
|
-
segmentFetcherFactory = (params: ISdkFactoryContextSync) => segmentChangesFetcherFactory(params.serviceApi.fetchSegmentChanges)
|
|
32
26
|
): (params: ISdkFactoryContextSync) => ISyncManagerCS {
|
|
33
27
|
|
|
34
28
|
/**
|
|
@@ -39,7 +33,7 @@ export function syncManagerOnlineFactory(
|
|
|
39
33
|
const { settings, settings: { log, streamingEnabled, sync: { enabled: syncEnabled } }, telemetryTracker, storage, readiness } = params;
|
|
40
34
|
|
|
41
35
|
/** Polling Manager */
|
|
42
|
-
const pollingManager = pollingManagerFactory && pollingManagerFactory(params
|
|
36
|
+
const pollingManager = pollingManagerFactory && pollingManagerFactory(params);
|
|
43
37
|
|
|
44
38
|
/** Push Manager */
|
|
45
39
|
const pushManager = syncEnabled && streamingEnabled && pollingManager && pushManagerFactory ?
|
package/src/utils/Backoff.ts
CHANGED
|
@@ -12,9 +12,11 @@ export class Backoff {
|
|
|
12
12
|
attempts: number;
|
|
13
13
|
cb: (...args: any[]) => any;
|
|
14
14
|
timeoutID: ReturnType<typeof setTimeout> | undefined;
|
|
15
|
+
pending: { resolve: (value: any) => void, reject: (error: any) => void } | undefined;
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
|
-
* Schedule function calls with exponential backoff
|
|
18
|
+
* Schedule function calls with exponential backoff.
|
|
19
|
+
* @param cb - The function to call. Must return a promise if used with `scheduleCallAsync`.
|
|
18
20
|
*/
|
|
19
21
|
constructor(cb: (...args: any[]) => any, baseMillis?: number, maxMillis?: number) {
|
|
20
22
|
this.baseMillis = Backoff.__TEST__BASE_MILLIS || baseMillis || Backoff.DEFAULT_BASE_MILLIS;
|
|
@@ -31,11 +33,12 @@ export class Backoff {
|
|
|
31
33
|
let delayInMillis = Math.min(this.baseMillis * Math.pow(2, this.attempts), this.maxMillis);
|
|
32
34
|
|
|
33
35
|
if (this.timeoutID) clearTimeout(this.timeoutID);
|
|
36
|
+
this.attempts++;
|
|
37
|
+
|
|
34
38
|
this.timeoutID = setTimeout(() => {
|
|
35
39
|
this.timeoutID = undefined;
|
|
36
40
|
this.cb();
|
|
37
41
|
}, delayInMillis);
|
|
38
|
-
this.attempts++;
|
|
39
42
|
|
|
40
43
|
return delayInMillis;
|
|
41
44
|
}
|
|
@@ -51,22 +54,31 @@ export class Backoff {
|
|
|
51
54
|
this.attempts++;
|
|
52
55
|
|
|
53
56
|
return new Promise<T>((resolve, reject) => {
|
|
57
|
+
this.pending = { resolve, reject };
|
|
54
58
|
this.timeoutID = setTimeout(() => {
|
|
55
59
|
this.timeoutID = undefined;
|
|
60
|
+
this.pending = undefined;
|
|
56
61
|
this.cb().then(resolve, reject);
|
|
57
62
|
}, delayInMillis);
|
|
58
63
|
});
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
/**
|
|
62
|
-
* Reset the backoff attempts
|
|
67
|
+
* Reset the backoff attempts, canceling any scheduled `cb` call. If a `scheduleCallAsync` call is pending
|
|
68
|
+
* and the caller wants to settle it immediately instead of waiting for `cb` to be invoked, pass `settle`:
|
|
69
|
+
* `{ value }` to resolve, or `{ error }` to reject.
|
|
63
70
|
*/
|
|
64
|
-
reset() {
|
|
71
|
+
reset<T>(settle?: { value: T } | { error: any }) {
|
|
65
72
|
this.attempts = 0;
|
|
66
73
|
if (this.timeoutID) {
|
|
67
74
|
clearTimeout(this.timeoutID);
|
|
68
75
|
this.timeoutID = undefined;
|
|
69
76
|
}
|
|
77
|
+
if (settle && this.pending) {
|
|
78
|
+
if ('value' in settle) this.pending.resolve(settle.value);
|
|
79
|
+
else this.pending.reject(settle.error);
|
|
80
|
+
this.pending = undefined;
|
|
81
|
+
}
|
|
70
82
|
}
|
|
71
83
|
|
|
72
84
|
}
|
package/types/splitio.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Type definitions for Split Software SDKs
|
|
2
2
|
// Project: https://www.split.io/
|
|
3
3
|
|
|
4
|
-
import type {
|
|
4
|
+
import type { ConnectionOptions } from 'tls';
|
|
5
5
|
import type { RequestOptions } from 'http';
|
|
6
6
|
|
|
7
7
|
export as namespace SplitIO;
|
|
@@ -1031,9 +1031,10 @@ declare namespace SplitIO {
|
|
|
1031
1031
|
*/
|
|
1032
1032
|
label: string;
|
|
1033
1033
|
/**
|
|
1034
|
-
* Version of the feature flag
|
|
1034
|
+
* Version of the feature flag.
|
|
1035
|
+
* Undefined if the feature flag was not found, for example, if the label is 'not ready', 'exception' or 'definition not found'.
|
|
1035
1036
|
*/
|
|
1036
|
-
changeNumber
|
|
1037
|
+
changeNumber?: number;
|
|
1037
1038
|
/**
|
|
1038
1039
|
* Previous time
|
|
1039
1040
|
*/
|
|
@@ -1714,7 +1715,7 @@ declare namespace SplitIO {
|
|
|
1714
1715
|
*
|
|
1715
1716
|
* @defaultValue `undefined`
|
|
1716
1717
|
*/
|
|
1717
|
-
tls?:
|
|
1718
|
+
tls?: ConnectionOptions;
|
|
1718
1719
|
};
|
|
1719
1720
|
/**
|
|
1720
1721
|
* Optional prefix to prevent any kind of data collision between SDK versions.
|
package/cjs/platform/browser.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.platform = void 0;
|
|
4
|
-
var EventEmitter_1 = require("../utils/EventEmitter");
|
|
5
|
-
var browser_1 = require("../platform/getFetch/browser");
|
|
6
|
-
var browser_2 = require("../platform/getEventSource/browser");
|
|
7
|
-
var browser_3 = require("../listeners/browser");
|
|
8
|
-
var browser_4 = require("../utils/timeTracker/now/browser");
|
|
9
|
-
exports.platform = {
|
|
10
|
-
getFetch: browser_1.getFetch,
|
|
11
|
-
getEventSource: browser_2.getEventSource,
|
|
12
|
-
EventEmitter: EventEmitter_1.EventEmitter,
|
|
13
|
-
now: browser_4.now,
|
|
14
|
-
SignalListener: browser_3.BrowserSignalListener
|
|
15
|
-
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getEventSource = void 0;
|
|
4
|
-
function getEventSource() {
|
|
5
|
-
// eslint-disable-next-line no-undef -- Feature detection for EventSource
|
|
6
|
-
return typeof EventSource === 'function' ? EventSource : undefined;
|
|
7
|
-
}
|
|
8
|
-
exports.getEventSource = getEventSource;
|