@splitsoftware/splitio-commons 1.17.1-rc.3 → 1.17.1-rc.5
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 +28 -28
- package/LICENSE +1 -1
- package/README.md +4 -3
- package/cjs/consent/sdkUserConsent.js +4 -2
- package/cjs/evaluator/matchers/index.js +1 -3
- package/cjs/evaluator/matchers/matcherTypes.js +0 -1
- package/cjs/evaluator/matchers/segment.js +0 -6
- package/cjs/evaluator/matchersTransform/index.js +1 -4
- package/cjs/evaluator/matchersTransform/segment.js +1 -3
- package/cjs/logger/constants.js +2 -2
- package/cjs/logger/messages/info.js +1 -1
- package/cjs/logger/messages/warn.js +1 -1
- package/cjs/readiness/readinessManager.js +11 -12
- package/cjs/readiness/sdkReadinessManager.js +6 -5
- package/cjs/sdkClient/sdkClient.js +5 -5
- package/cjs/sdkClient/sdkClientMethod.js +1 -3
- package/cjs/sdkClient/sdkClientMethodCS.js +17 -15
- package/cjs/sdkClient/sdkClientMethodCSWithTT.js +17 -15
- package/cjs/sdkFactory/index.js +11 -38
- package/cjs/services/decorateHeaders.js +6 -1
- package/cjs/services/splitApi.js +5 -5
- package/cjs/services/splitHttpClient.js +5 -2
- package/cjs/storages/AbstractSegmentsCacheSync.js +12 -41
- package/cjs/storages/AbstractSplitsCacheAsync.js +7 -0
- package/cjs/storages/AbstractSplitsCacheSync.js +8 -2
- package/cjs/storages/KeyBuilderCS.js +5 -23
- package/cjs/storages/dataLoader.js +33 -65
- package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +52 -29
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +9 -1
- package/cjs/storages/inLocalStorage/index.js +3 -12
- package/cjs/storages/inMemory/InMemoryStorageCS.js +3 -20
- package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +40 -9
- package/cjs/storages/inMemory/SegmentsCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/SplitsCacheInMemory.js +8 -8
- package/cjs/storages/inMemory/TelemetryCacheInMemory.js +10 -7
- package/cjs/storages/inRedis/RedisAdapter.js +1 -1
- package/cjs/storages/inRedis/SegmentsCacheInRedis.js +2 -2
- package/cjs/storages/inRedis/index.js +11 -5
- package/cjs/storages/pluggable/SegmentsCachePluggable.js +2 -2
- package/cjs/storages/pluggable/inMemoryWrapper.js +1 -1
- package/cjs/storages/pluggable/index.js +32 -37
- package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +7 -2
- package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +8 -5
- package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
- package/cjs/sync/polling/pollingManagerCS.js +1 -1
- package/cjs/sync/polling/pollingManagerSS.js +3 -3
- package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
- package/cjs/sync/polling/updaters/mySegmentsUpdater.js +21 -15
- package/cjs/sync/polling/updaters/segmentChangesUpdater.js +2 -2
- package/cjs/sync/polling/updaters/splitChangesUpdater.js +11 -2
- package/cjs/sync/streaming/AuthClient/index.js +1 -1
- package/cjs/sync/streaming/SSEHandler/index.js +5 -3
- package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +48 -107
- package/cjs/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +3 -3
- package/cjs/sync/streaming/constants.js +3 -3
- package/cjs/sync/streaming/parseUtils.js +9 -14
- package/cjs/sync/streaming/pushManager.js +67 -69
- package/cjs/sync/syncTask.js +2 -2
- package/cjs/trackers/eventTracker.js +9 -11
- package/cjs/trackers/impressionsTracker.js +13 -15
- package/cjs/trackers/uniqueKeysTracker.js +3 -5
- package/cjs/utils/constants/index.js +4 -5
- package/cjs/utils/settingsValidation/index.js +1 -2
- package/cjs/utils/settingsValidation/storage/storageCS.js +12 -1
- package/esm/consent/sdkUserConsent.js +4 -2
- package/esm/evaluator/matchers/index.js +1 -3
- package/esm/evaluator/matchers/matcherTypes.js +0 -1
- package/esm/evaluator/matchers/segment.js +0 -6
- package/esm/evaluator/matchersTransform/index.js +1 -4
- package/esm/evaluator/matchersTransform/segment.js +1 -3
- package/esm/logger/constants.js +1 -1
- package/esm/logger/messages/info.js +1 -1
- package/esm/logger/messages/warn.js +1 -1
- package/esm/readiness/readinessManager.js +11 -12
- package/esm/readiness/sdkReadinessManager.js +6 -5
- package/esm/sdkClient/sdkClient.js +5 -5
- package/esm/sdkClient/sdkClientMethod.js +1 -3
- package/esm/sdkClient/sdkClientMethodCS.js +15 -13
- package/esm/sdkClient/sdkClientMethodCSWithTT.js +15 -13
- package/esm/sdkFactory/index.js +12 -39
- package/esm/services/decorateHeaders.js +4 -0
- package/esm/services/splitApi.js +6 -6
- package/esm/services/splitHttpClient.js +6 -3
- package/esm/storages/AbstractSegmentsCacheSync.js +12 -41
- package/esm/storages/AbstractSplitsCacheAsync.js +7 -0
- package/esm/storages/AbstractSplitsCacheSync.js +9 -3
- package/esm/storages/KeyBuilderCS.js +4 -21
- package/esm/storages/dataLoader.js +31 -62
- package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +52 -29
- package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +9 -1
- package/esm/storages/inLocalStorage/index.js +5 -14
- package/esm/storages/inMemory/InMemoryStorageCS.js +3 -20
- package/esm/storages/inMemory/MySegmentsCacheInMemory.js +40 -9
- package/esm/storages/inMemory/SegmentsCacheInMemory.js +1 -1
- package/esm/storages/inMemory/SplitsCacheInMemory.js +8 -8
- package/esm/storages/inMemory/TelemetryCacheInMemory.js +10 -7
- package/esm/storages/inRedis/RedisAdapter.js +1 -1
- package/esm/storages/inRedis/SegmentsCacheInRedis.js +2 -2
- package/esm/storages/inRedis/index.js +11 -5
- package/esm/storages/pluggable/SegmentsCachePluggable.js +2 -2
- package/esm/storages/pluggable/inMemoryWrapper.js +1 -1
- package/esm/storages/pluggable/index.js +32 -37
- package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +8 -3
- package/esm/sync/polling/fetchers/mySegmentsFetcher.js +8 -5
- package/esm/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
- package/esm/sync/polling/pollingManagerCS.js +1 -1
- package/esm/sync/polling/pollingManagerSS.js +3 -3
- package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
- package/esm/sync/polling/updaters/mySegmentsUpdater.js +21 -15
- package/esm/sync/polling/updaters/segmentChangesUpdater.js +2 -2
- package/esm/sync/polling/updaters/splitChangesUpdater.js +12 -3
- package/esm/sync/streaming/AuthClient/index.js +1 -1
- package/esm/sync/streaming/SSEHandler/index.js +6 -4
- package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +49 -108
- package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +3 -3
- package/esm/sync/streaming/constants.js +2 -2
- package/esm/sync/streaming/parseUtils.js +8 -12
- package/esm/sync/streaming/pushManager.js +70 -72
- package/esm/sync/syncTask.js +2 -2
- package/esm/trackers/eventTracker.js +9 -11
- package/esm/trackers/impressionsTracker.js +13 -15
- package/esm/trackers/uniqueKeysTracker.js +3 -5
- package/esm/utils/constants/index.js +2 -3
- package/esm/utils/settingsValidation/index.js +1 -2
- package/esm/utils/settingsValidation/storage/storageCS.js +10 -0
- package/package.json +1 -1
- package/src/consent/sdkUserConsent.ts +3 -2
- package/src/dtos/types.ts +7 -21
- package/src/evaluator/matchers/index.ts +0 -2
- package/src/evaluator/matchers/matcherTypes.ts +0 -1
- package/src/evaluator/matchers/segment.ts +0 -7
- package/src/evaluator/matchersTransform/index.ts +1 -4
- package/src/evaluator/matchersTransform/segment.ts +3 -5
- package/src/logger/constants.ts +1 -1
- package/src/logger/messages/info.ts +1 -1
- package/src/logger/messages/warn.ts +1 -1
- package/src/readiness/readinessManager.ts +12 -16
- package/src/readiness/sdkReadinessManager.ts +7 -7
- package/src/readiness/types.ts +2 -3
- package/src/sdkClient/sdkClient.ts +5 -5
- package/src/sdkClient/sdkClientMethod.ts +1 -4
- package/src/sdkClient/sdkClientMethodCS.ts +14 -11
- package/src/sdkClient/sdkClientMethodCSWithTT.ts +14 -11
- package/src/sdkFactory/index.ts +13 -42
- package/src/sdkFactory/types.ts +1 -5
- package/src/services/decorateHeaders.ts +5 -0
- package/src/services/splitApi.ts +7 -7
- package/src/services/splitHttpClient.ts +7 -4
- package/src/services/types.ts +2 -2
- package/src/storages/AbstractSegmentsCacheSync.ts +12 -53
- package/src/storages/AbstractSplitsCacheAsync.ts +8 -0
- package/src/storages/AbstractSplitsCacheSync.ts +11 -4
- package/src/storages/KeyBuilderCS.ts +5 -34
- package/src/storages/dataLoader.ts +33 -63
- package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +59 -29
- package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +10 -1
- package/src/storages/inLocalStorage/index.ts +6 -16
- package/src/storages/inMemory/InMemoryStorageCS.ts +3 -23
- package/src/storages/inMemory/MySegmentsCacheInMemory.ts +44 -10
- package/src/storages/inMemory/SegmentsCacheInMemory.ts +1 -1
- package/src/storages/inMemory/SplitsCacheInMemory.ts +8 -7
- package/src/storages/inMemory/TelemetryCacheInMemory.ts +11 -7
- package/src/storages/inRedis/RedisAdapter.ts +1 -1
- package/src/storages/inRedis/SegmentsCacheInRedis.ts +2 -2
- package/src/storages/inRedis/index.ts +12 -6
- package/src/storages/pluggable/SegmentsCachePluggable.ts +2 -2
- package/src/storages/pluggable/inMemoryWrapper.ts +1 -1
- package/src/storages/pluggable/index.ts +33 -38
- package/src/storages/types.ts +15 -15
- package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +7 -3
- package/src/sync/polling/fetchers/mySegmentsFetcher.ts +10 -8
- package/src/sync/polling/fetchers/segmentChangesFetcher.ts +1 -1
- package/src/sync/polling/fetchers/types.ts +2 -3
- package/src/sync/polling/pollingManagerCS.ts +4 -4
- package/src/sync/polling/pollingManagerSS.ts +2 -3
- package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +5 -4
- package/src/sync/polling/types.ts +6 -7
- package/src/sync/polling/updaters/mySegmentsUpdater.ts +22 -19
- package/src/sync/polling/updaters/segmentChangesUpdater.ts +2 -2
- package/src/sync/polling/updaters/splitChangesUpdater.ts +12 -4
- package/src/sync/streaming/AuthClient/index.ts +1 -1
- package/src/sync/streaming/SSEClient/index.ts +6 -4
- package/src/sync/streaming/SSEHandler/index.ts +8 -5
- package/src/sync/streaming/SSEHandler/types.ts +15 -15
- package/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts +49 -116
- package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +4 -4
- package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +1 -1
- package/src/sync/streaming/UpdateWorkers/types.ts +2 -2
- package/src/sync/streaming/constants.ts +2 -2
- package/src/sync/streaming/parseUtils.ts +11 -19
- package/src/sync/streaming/pushManager.ts +72 -73
- package/src/sync/streaming/types.ts +10 -10
- package/src/sync/submitters/types.ts +5 -8
- package/src/sync/syncTask.ts +2 -2
- package/src/trackers/eventTracker.ts +7 -10
- package/src/trackers/impressionsTracker.ts +9 -12
- package/src/trackers/types.ts +0 -1
- package/src/trackers/uniqueKeysTracker.ts +4 -6
- package/src/types.ts +9 -16
- package/src/utils/constants/index.ts +2 -3
- package/src/utils/settingsValidation/index.ts +2 -3
- package/src/utils/settingsValidation/storage/storageCS.ts +13 -0
- package/src/utils/settingsValidation/types.ts +1 -1
- package/types/dtos/types.d.ts +7 -18
- package/types/evaluator/matchersTransform/segment.d.ts +2 -2
- package/types/logger/constants.d.ts +1 -1
- package/types/readiness/readinessManager.d.ts +2 -2
- package/types/readiness/sdkReadinessManager.d.ts +3 -2
- package/types/readiness/types.d.ts +2 -3
- package/types/sdkClient/sdkClientMethod.d.ts +1 -1
- package/types/sdkFactory/types.d.ts +1 -4
- package/types/services/decorateHeaders.d.ts +1 -0
- package/types/services/splitApi.d.ts +1 -1
- package/types/services/splitHttpClient.d.ts +1 -1
- package/types/services/types.d.ts +2 -2
- package/types/storages/AbstractSegmentsCacheSync.d.ts +11 -9
- package/types/storages/AbstractSplitsCacheAsync.d.ts +5 -0
- package/types/storages/AbstractSplitsCacheSync.d.ts +6 -1
- package/types/storages/KeyBuilderCS.d.ts +2 -9
- package/types/storages/dataLoader.d.ts +6 -17
- package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +14 -4
- package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +6 -0
- package/types/storages/inMemory/MySegmentsCacheInMemory.d.ts +9 -3
- package/types/storages/inMemory/SegmentsCacheInMemory.d.ts +1 -1
- package/types/storages/inMemory/SplitsCacheInMemory.d.ts +1 -1
- package/types/storages/inMemory/TelemetryCacheInMemory.d.ts +6 -4
- package/types/storages/inRedis/SegmentsCacheInRedis.d.ts +1 -1
- package/types/storages/inRedis/index.d.ts +1 -1
- package/types/storages/pluggable/SegmentsCachePluggable.d.ts +1 -1
- package/types/storages/pluggable/inMemoryWrapper.d.ts +1 -1
- package/types/storages/types.d.ts +11 -11
- package/types/sync/polling/fetchers/mySegmentsFetcher.d.ts +2 -2
- package/types/sync/polling/fetchers/types.d.ts +2 -2
- package/types/sync/polling/syncTasks/mySegmentsSyncTask.d.ts +2 -2
- package/types/sync/polling/types.d.ts +4 -7
- package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +3 -4
- package/types/sync/streaming/SSEHandler/types.d.ts +14 -16
- package/types/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.d.ts +2 -4
- package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -2
- package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +2 -3
- package/types/sync/streaming/UpdateWorkers/types.d.ts +2 -2
- package/types/sync/streaming/constants.d.ts +2 -2
- package/types/sync/streaming/parseUtils.d.ts +5 -4
- package/types/sync/streaming/types.d.ts +8 -8
- package/types/sync/submitters/types.d.ts +4 -7
- package/types/trackers/eventTracker.d.ts +1 -1
- package/types/trackers/impressionsTracker.d.ts +1 -1
- package/types/trackers/types.d.ts +0 -1
- package/types/types.d.ts +9 -15
- package/types/utils/constants/index.d.ts +2 -3
- package/types/utils/settingsValidation/storage/storageCS.d.ts +5 -0
- package/types/utils/settingsValidation/types.d.ts +1 -1
- package/cjs/evaluator/matchers/large_segment.js +0 -16
- package/cjs/sdkClient/identity.js +0 -7
- package/esm/evaluator/matchers/large_segment.js +0 -12
- package/esm/sdkClient/identity.js +0 -3
- package/src/evaluator/matchers/large_segment.ts +0 -18
- package/src/sdkClient/identity.ts +0 -5
- package/types/evaluator/matchers/large_segment.d.ts +0 -5
- package/types/evaluator/matchers/sember_inlist.d.ts +0 -3
- package/types/evaluator/matchersTransform/set.d.ts +0 -5
- package/types/evaluator/matchersTransform/string.d.ts +0 -7
- package/types/sdkClient/identity.d.ts +0 -2
- package/types/storages/AbstractMySegmentsCacheSync.d.ts +0 -39
- package/types/storages/AbstractSplitsCache.d.ts +0 -46
- package/types/sync/streaming/mySegmentsV2utils.d.ts +0 -27
- package/types/sync/streaming/pushManagerCS_Spec1_3.d.ts +0 -9
- package/types/sync/streaming/pushManager_Spec1_3.d.ts +0 -9
- package/types/trackers/impressionObserver/utils.d.ts +0 -5
- package/types/utils/inputValidation/sdkKey.d.ts +0 -7
- package/types/utils/inputValidation/splitExistance.d.ts +0 -7
- package/types/utils/inputValidation/trafficTypeExistance.d.ts +0 -9
- package/types/utils/redis/RedisMock.d.ts +0 -4
- package/types/utils/settingsValidation/logger/globalLogLevel.d.ts +0 -8
- /package/types/utils/{semVer.d.ts → Semver.d.ts} +0 -0
|
@@ -7,7 +7,7 @@ import { syncTaskFactory } from '../../syncTask';
|
|
|
7
7
|
import { ISyncTask } from '../../types';
|
|
8
8
|
import { ISettings } from '../../../types';
|
|
9
9
|
import { CONTROL } from '../../../utils/constants';
|
|
10
|
-
import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED } from '../../../readiness/constants';
|
|
10
|
+
import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED, SDK_SPLITS_CACHE_LOADED } from '../../../readiness/constants';
|
|
11
11
|
import { SYNC_OFFLINE_DATA, ERROR_SYNC_OFFLINE_LOADING } from '../../../logger/constants';
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -60,8 +60,12 @@ export function fromObjectUpdaterFactory(
|
|
|
60
60
|
|
|
61
61
|
if (startingUp) {
|
|
62
62
|
startingUp = false;
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
Promise.resolve(splitsCache.checkCache()).then(cacheReady => {
|
|
64
|
+
// Emits SDK_READY_FROM_CACHE
|
|
65
|
+
if (cacheReady) readiness.splits.emit(SDK_SPLITS_CACHE_LOADED);
|
|
66
|
+
// Emits SDK_READY
|
|
67
|
+
readiness.segments.emit(SDK_SEGMENTS_ARRIVED);
|
|
68
|
+
});
|
|
65
69
|
}
|
|
66
70
|
return true;
|
|
67
71
|
});
|
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { IFetchMySegments, IResponse } from '../../../services/types';
|
|
2
|
+
import { IMySegmentsResponseItem } from '../../../dtos/types';
|
|
3
3
|
import { IMySegmentsFetcher } from './types';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Factory of MySegments fetcher.
|
|
7
7
|
* MySegments fetcher is a wrapper around `mySegments` API service that parses the response and handle errors.
|
|
8
8
|
*/
|
|
9
|
-
export function mySegmentsFetcherFactory(
|
|
9
|
+
export function mySegmentsFetcherFactory(fetchMySegments: IFetchMySegments): IMySegmentsFetcher {
|
|
10
10
|
|
|
11
11
|
return function mySegmentsFetcher(
|
|
12
12
|
userMatchingKey: string,
|
|
13
13
|
noCache?: boolean,
|
|
14
|
-
|
|
15
|
-
// Optional decorator for `fetchMemberships` promise, such as timeout or time tracker
|
|
14
|
+
// Optional decorator for `fetchMySegments` promise, such as timeout or time tracker
|
|
16
15
|
decorator?: (promise: Promise<IResponse>) => Promise<IResponse>
|
|
17
|
-
): Promise<
|
|
16
|
+
): Promise<string[]> {
|
|
18
17
|
|
|
19
|
-
let mySegmentsPromise =
|
|
18
|
+
let mySegmentsPromise = fetchMySegments(userMatchingKey, noCache);
|
|
20
19
|
if (decorator) mySegmentsPromise = decorator(mySegmentsPromise);
|
|
21
20
|
|
|
22
|
-
|
|
21
|
+
// Extract segment names
|
|
22
|
+
return mySegmentsPromise
|
|
23
|
+
.then(resp => resp.json())
|
|
24
|
+
.then(json => json.mySegments.map((segment: IMySegmentsResponseItem) => segment.name));
|
|
23
25
|
};
|
|
24
26
|
|
|
25
27
|
}
|
|
@@ -28,7 +28,7 @@ export function segmentChangesFetcherFactory(fetchSegmentChanges: IFetchSegmentC
|
|
|
28
28
|
segmentName: string,
|
|
29
29
|
noCache?: boolean,
|
|
30
30
|
till?: number,
|
|
31
|
-
// Optional decorator for `
|
|
31
|
+
// Optional decorator for `fetchMySegments` promise, such as timeout or time tracker
|
|
32
32
|
decorator?: (promise: Promise<ISegmentChangesResponse[]>) => Promise<ISegmentChangesResponse[]>
|
|
33
33
|
): Promise<ISegmentChangesResponse[]> {
|
|
34
34
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ISplitChangesResponse, ISegmentChangesResponse
|
|
1
|
+
import { ISplitChangesResponse, ISegmentChangesResponse } from '../../../dtos/types';
|
|
2
2
|
import { IResponse } from '../../../services/types';
|
|
3
3
|
|
|
4
4
|
export type ISplitChangesFetcher = (
|
|
@@ -19,6 +19,5 @@ export type ISegmentChangesFetcher = (
|
|
|
19
19
|
export type IMySegmentsFetcher = (
|
|
20
20
|
userMatchingKey: string,
|
|
21
21
|
noCache?: boolean,
|
|
22
|
-
till?: number,
|
|
23
22
|
decorator?: (promise: Promise<IResponse>) => Promise<IResponse>
|
|
24
|
-
) => Promise<
|
|
23
|
+
) => Promise<string[]>
|
|
@@ -29,13 +29,13 @@ export function pollingManagerCSFactory(
|
|
|
29
29
|
const mySegmentsSyncTask = add(matchingKey, readiness, storage);
|
|
30
30
|
|
|
31
31
|
function startMySegmentsSyncTasks() {
|
|
32
|
-
forOwn(mySegmentsSyncTasks, (mySegmentsSyncTask)
|
|
32
|
+
forOwn(mySegmentsSyncTasks, function (mySegmentsSyncTask) {
|
|
33
33
|
mySegmentsSyncTask.start();
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
function stopMySegmentsSyncTasks() {
|
|
38
|
-
forOwn(mySegmentsSyncTasks, (mySegmentsSyncTask)
|
|
38
|
+
forOwn(mySegmentsSyncTasks, function (mySegmentsSyncTask) {
|
|
39
39
|
if (mySegmentsSyncTask.isRunning()) mySegmentsSyncTask.stop();
|
|
40
40
|
});
|
|
41
41
|
}
|
|
@@ -55,7 +55,7 @@ export function pollingManagerCSFactory(
|
|
|
55
55
|
});
|
|
56
56
|
|
|
57
57
|
function add(matchingKey: string, readiness: IReadinessManager, storage: IStorageSync) {
|
|
58
|
-
const mySegmentsSyncTask = mySegmentsSyncTaskFactory(splitApi.
|
|
58
|
+
const mySegmentsSyncTask = mySegmentsSyncTaskFactory(splitApi.fetchMySegments, storage, readiness, settings, matchingKey);
|
|
59
59
|
|
|
60
60
|
// smart ready
|
|
61
61
|
function smartReady() {
|
|
@@ -94,7 +94,7 @@ export function pollingManagerCSFactory(
|
|
|
94
94
|
// fetch splits and segments
|
|
95
95
|
syncAll() {
|
|
96
96
|
const promises = [splitsSyncTask.execute()];
|
|
97
|
-
forOwn(mySegmentsSyncTasks, (mySegmentsSyncTask)
|
|
97
|
+
forOwn(mySegmentsSyncTasks, function (mySegmentsSyncTask) {
|
|
98
98
|
promises.push(mySegmentsSyncTask.execute());
|
|
99
99
|
});
|
|
100
100
|
return Promise.all(promises);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { splitsSyncTaskFactory } from './syncTasks/splitsSyncTask';
|
|
2
2
|
import { segmentsSyncTaskFactory } from './syncTasks/segmentsSyncTask';
|
|
3
3
|
import { IPollingManager, ISegmentsSyncTask, ISplitsSyncTask } from './types';
|
|
4
|
-
import { thenable } from '../../utils/promise/thenable';
|
|
5
4
|
import { POLLING_START, POLLING_STOP, LOG_PREFIX_SYNC_POLLING } from '../../logger/constants';
|
|
6
5
|
import { ISdkFactoryContextSync } from '../../sdkFactory/types';
|
|
7
6
|
|
|
@@ -29,9 +28,9 @@ export function pollingManagerSSFactory(
|
|
|
29
28
|
log.debug(LOG_PREFIX_SYNC_POLLING + `Segments will be refreshed each ${settings.scheduler.segmentsRefreshRate} millis`);
|
|
30
29
|
|
|
31
30
|
const startingUp = splitsSyncTask.start();
|
|
32
|
-
if (
|
|
31
|
+
if (startingUp) {
|
|
33
32
|
startingUp.then(() => {
|
|
34
|
-
segmentsSyncTask.start();
|
|
33
|
+
if (splitsSyncTask.isRunning()) segmentsSyncTask.start();
|
|
35
34
|
});
|
|
36
35
|
}
|
|
37
36
|
},
|
|
@@ -2,7 +2,7 @@ import { IStorageSync } from '../../../storages/types';
|
|
|
2
2
|
import { IReadinessManager } from '../../../readiness/types';
|
|
3
3
|
import { syncTaskFactory } from '../../syncTask';
|
|
4
4
|
import { IMySegmentsSyncTask } from '../types';
|
|
5
|
-
import {
|
|
5
|
+
import { IFetchMySegments } from '../../../services/types';
|
|
6
6
|
import { mySegmentsFetcherFactory } from '../fetchers/mySegmentsFetcher';
|
|
7
7
|
import { ISettings } from '../../../types';
|
|
8
8
|
import { mySegmentsUpdaterFactory } from '../updaters/mySegmentsUpdater';
|
|
@@ -11,7 +11,7 @@ import { mySegmentsUpdaterFactory } from '../updaters/mySegmentsUpdater';
|
|
|
11
11
|
* Creates a sync task that periodically executes a `mySegmentsUpdater` task
|
|
12
12
|
*/
|
|
13
13
|
export function mySegmentsSyncTaskFactory(
|
|
14
|
-
|
|
14
|
+
fetchMySegments: IFetchMySegments,
|
|
15
15
|
storage: IStorageSync,
|
|
16
16
|
readiness: IReadinessManager,
|
|
17
17
|
settings: ISettings,
|
|
@@ -21,8 +21,9 @@ export function mySegmentsSyncTaskFactory(
|
|
|
21
21
|
settings.log,
|
|
22
22
|
mySegmentsUpdaterFactory(
|
|
23
23
|
settings.log,
|
|
24
|
-
mySegmentsFetcherFactory(
|
|
25
|
-
storage,
|
|
24
|
+
mySegmentsFetcherFactory(fetchMySegments),
|
|
25
|
+
storage.splits,
|
|
26
|
+
storage.segments,
|
|
26
27
|
readiness.segments,
|
|
27
28
|
settings.startup.requestTimeoutBeforeReady,
|
|
28
29
|
settings.startup.retriesOnFailureBeforeReady,
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import { ISplit } from '../../dtos/types';
|
|
2
2
|
import { IReadinessManager } from '../../readiness/types';
|
|
3
3
|
import { IStorageSync } from '../../storages/types';
|
|
4
|
-
import { MEMBERSHIPS_LS_UPDATE, MEMBERSHIPS_MS_UPDATE } from '../streaming/types';
|
|
5
4
|
import { ITask, ISyncTask } from '../types';
|
|
6
5
|
|
|
7
6
|
export interface ISplitsSyncTask extends ISyncTask<[noCache?: boolean, till?: number, splitUpdateNotification?: { payload: ISplit, changeNumber: number }], boolean> { }
|
|
8
7
|
|
|
9
8
|
export interface ISegmentsSyncTask extends ISyncTask<[fetchOnlyNew?: boolean, segmentName?: string, noCache?: boolean, till?: number], boolean> { }
|
|
10
9
|
|
|
11
|
-
export type MySegmentsData = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
export type MySegmentsData = string[] | {
|
|
11
|
+
/* segment name */
|
|
12
|
+
name: string,
|
|
13
|
+
/* action: `true` for add, and `false` for delete */
|
|
14
|
+
add: boolean
|
|
16
15
|
}
|
|
17
16
|
|
|
18
|
-
export interface IMySegmentsSyncTask extends ISyncTask<[segmentsData?: MySegmentsData, noCache?: boolean
|
|
17
|
+
export interface IMySegmentsSyncTask extends ISyncTask<[segmentsData?: MySegmentsData, noCache?: boolean], boolean> { }
|
|
19
18
|
|
|
20
19
|
export interface IPollingManager extends ITask {
|
|
21
20
|
syncAll(): Promise<any>
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { IMySegmentsFetcher } from '../fetchers/types';
|
|
2
|
-
import {
|
|
2
|
+
import { ISegmentsCacheSync, ISplitsCacheSync } from '../../../storages/types';
|
|
3
3
|
import { ISegmentsEventEmitter } from '../../../readiness/types';
|
|
4
4
|
import { timeout } from '../../../utils/promise/timeout';
|
|
5
5
|
import { SDK_SEGMENTS_ARRIVED } from '../../../readiness/constants';
|
|
6
6
|
import { ILogger } from '../../../logger/types';
|
|
7
7
|
import { SYNC_MYSEGMENTS_FETCH_RETRY } from '../../../logger/constants';
|
|
8
8
|
import { MySegmentsData } from '../types';
|
|
9
|
-
import { IMembershipsResponse } from '../../../dtos/types';
|
|
10
|
-
import { MEMBERSHIPS_LS_UPDATE } from '../../streaming/constants';
|
|
11
9
|
|
|
12
|
-
type IMySegmentsUpdater = (
|
|
10
|
+
type IMySegmentsUpdater = (segmentList?: string[], noCache?: boolean) => Promise<boolean>
|
|
13
11
|
|
|
14
12
|
/**
|
|
15
13
|
* factory of MySegments updater, a task that:
|
|
@@ -20,14 +18,14 @@ type IMySegmentsUpdater = (segmentsData?: MySegmentsData, noCache?: boolean, til
|
|
|
20
18
|
export function mySegmentsUpdaterFactory(
|
|
21
19
|
log: ILogger,
|
|
22
20
|
mySegmentsFetcher: IMySegmentsFetcher,
|
|
23
|
-
|
|
21
|
+
splitsCache: ISplitsCacheSync,
|
|
22
|
+
mySegmentsCache: ISegmentsCacheSync,
|
|
24
23
|
segmentsEventEmitter: ISegmentsEventEmitter,
|
|
25
24
|
requestTimeoutBeforeReady: number,
|
|
26
25
|
retriesOnFailureBeforeReady: number,
|
|
27
26
|
matchingKey: string
|
|
28
27
|
): IMySegmentsUpdater {
|
|
29
28
|
|
|
30
|
-
const { splits, segments, largeSegments } = storage;
|
|
31
29
|
let readyOnAlreadyExistentState = true;
|
|
32
30
|
let startingUp = true;
|
|
33
31
|
|
|
@@ -38,31 +36,37 @@ export function mySegmentsUpdaterFactory(
|
|
|
38
36
|
}
|
|
39
37
|
|
|
40
38
|
// @TODO if allowing pluggable storages, handle async execution
|
|
41
|
-
function updateSegments(segmentsData:
|
|
39
|
+
function updateSegments(segmentsData: MySegmentsData) {
|
|
42
40
|
|
|
43
41
|
let shouldNotifyUpdate;
|
|
44
|
-
if ((segmentsData
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
segments.resetSegments(segmentsData as MySegmentsData);
|
|
42
|
+
if (Array.isArray(segmentsData)) {
|
|
43
|
+
// Update the list of segment names available
|
|
44
|
+
shouldNotifyUpdate = mySegmentsCache.resetSegments(segmentsData);
|
|
48
45
|
} else {
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
// Add/Delete the segment
|
|
47
|
+
const { name, add } = segmentsData;
|
|
48
|
+
if (mySegmentsCache.isInSegment(name) !== add) {
|
|
49
|
+
shouldNotifyUpdate = true;
|
|
50
|
+
if (add) mySegmentsCache.addToSegment(name);
|
|
51
|
+
else mySegmentsCache.removeFromSegment(name);
|
|
52
|
+
} else {
|
|
53
|
+
shouldNotifyUpdate = false;
|
|
54
|
+
}
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
// Notify update if required
|
|
54
|
-
if (
|
|
58
|
+
if (splitsCache.usesSegments() && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
|
|
55
59
|
readyOnAlreadyExistentState = false;
|
|
56
60
|
segmentsEventEmitter.emit(SDK_SEGMENTS_ARRIVED);
|
|
57
61
|
}
|
|
58
62
|
}
|
|
59
63
|
|
|
60
|
-
function _mySegmentsUpdater(retry: number, segmentsData?: MySegmentsData, noCache?: boolean
|
|
64
|
+
function _mySegmentsUpdater(retry: number, segmentsData?: MySegmentsData, noCache?: boolean): Promise<boolean> {
|
|
61
65
|
const updaterPromise: Promise<boolean> = segmentsData ?
|
|
62
66
|
// If segmentsData is provided, there is no need to fetch mySegments
|
|
63
67
|
new Promise((res) => { updateSegments(segmentsData); res(true); }) :
|
|
64
68
|
// If not provided, fetch mySegments
|
|
65
|
-
mySegmentsFetcher(matchingKey, noCache,
|
|
69
|
+
mySegmentsFetcher(matchingKey, noCache, _promiseDecorator).then(segments => {
|
|
66
70
|
// Only when we have downloaded segments completely, we should not keep retrying anymore
|
|
67
71
|
startingUp = false;
|
|
68
72
|
|
|
@@ -92,10 +96,9 @@ export function mySegmentsUpdaterFactory(
|
|
|
92
96
|
* (2) an object with a segment name and action (true: add, or false: delete) to update the storage,
|
|
93
97
|
* (3) or `undefined`, for which the updater will fetch mySegments in order to sync the storage.
|
|
94
98
|
* @param {boolean | undefined} noCache true to revalidate data to fetch
|
|
95
|
-
* @param {boolean | undefined} till query param to bypass CDN requests
|
|
96
99
|
*/
|
|
97
|
-
return function mySegmentsUpdater(segmentsData?: MySegmentsData, noCache?: boolean
|
|
98
|
-
return _mySegmentsUpdater(0, segmentsData, noCache
|
|
100
|
+
return function mySegmentsUpdater(segmentsData?: MySegmentsData, noCache?: boolean) {
|
|
101
|
+
return _mySegmentsUpdater(0, segmentsData, noCache);
|
|
99
102
|
};
|
|
100
103
|
|
|
101
104
|
}
|
|
@@ -36,9 +36,9 @@ export function segmentChangesUpdaterFactory(
|
|
|
36
36
|
|
|
37
37
|
return sincePromise.then(since => {
|
|
38
38
|
// if fetchOnlyNew flag, avoid processing already fetched segments
|
|
39
|
-
if (fetchOnlyNew && since !==
|
|
39
|
+
if (fetchOnlyNew && since !== undefined) return -1;
|
|
40
40
|
|
|
41
|
-
return segmentChangesFetcher(since, segmentName, noCache, till).then(function (changes) {
|
|
41
|
+
return segmentChangesFetcher(since || -1, segmentName, noCache, till).then(function (changes) {
|
|
42
42
|
let changeNumber = -1;
|
|
43
43
|
const results: MaybeThenable<boolean | void>[] = [];
|
|
44
44
|
changes.forEach(x => {
|
|
@@ -4,7 +4,7 @@ import { ISplitChangesFetcher } from '../fetchers/types';
|
|
|
4
4
|
import { ISplit, ISplitChangesResponse, ISplitFiltersValidation } from '../../../dtos/types';
|
|
5
5
|
import { ISplitsEventEmitter } from '../../../readiness/types';
|
|
6
6
|
import { timeout } from '../../../utils/promise/timeout';
|
|
7
|
-
import { SDK_SPLITS_ARRIVED } from '../../../readiness/constants';
|
|
7
|
+
import { SDK_SPLITS_ARRIVED, SDK_SPLITS_CACHE_LOADED } from '../../../readiness/constants';
|
|
8
8
|
import { ILogger } from '../../../logger/types';
|
|
9
9
|
import { SYNC_SPLITS_FETCH, SYNC_SPLITS_NEW, SYNC_SPLITS_REMOVED, SYNC_SPLITS_SEGMENTS, SYNC_SPLITS_FETCH_FAILS, SYNC_SPLITS_FETCH_RETRY } from '../../../logger/constants';
|
|
10
10
|
import { startsWith } from '../../../utils/lang';
|
|
@@ -19,7 +19,7 @@ function checkAllSegmentsExist(segments: ISegmentsCacheBase): Promise<boolean> {
|
|
|
19
19
|
let registeredSegments = Promise.resolve(segments.getRegisteredSegments());
|
|
20
20
|
return registeredSegments.then(segmentNames => {
|
|
21
21
|
return Promise.all(segmentNames.map(segmentName => segments.getChangeNumber(segmentName)))
|
|
22
|
-
.then(changeNumbers => changeNumbers.every(changeNumber => changeNumber !==
|
|
22
|
+
.then(changeNumbers => changeNumbers.every(changeNumber => changeNumber !== undefined));
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -153,8 +153,7 @@ export function splitChangesUpdaterFactory(
|
|
|
153
153
|
*/
|
|
154
154
|
function _splitChangesUpdater(since: number, retry = 0): Promise<boolean> {
|
|
155
155
|
log.debug(SYNC_SPLITS_FETCH, [since]);
|
|
156
|
-
|
|
157
|
-
return Promise.resolve(splitUpdateNotification ?
|
|
156
|
+
const fetcherPromise = Promise.resolve(splitUpdateNotification ?
|
|
158
157
|
{ splits: [splitUpdateNotification.payload], till: splitUpdateNotification.changeNumber } :
|
|
159
158
|
splitChangesFetcher(since, noCache, till, _promiseDecorator)
|
|
160
159
|
)
|
|
@@ -201,6 +200,15 @@ export function splitChangesUpdaterFactory(
|
|
|
201
200
|
}
|
|
202
201
|
return false;
|
|
203
202
|
});
|
|
203
|
+
|
|
204
|
+
// After triggering the requests, if we have cached splits information let's notify that to emit SDK_READY_FROM_CACHE.
|
|
205
|
+
// Wrapping in a promise since checkCache can be async.
|
|
206
|
+
if (splitsEventEmitter && startingUp) {
|
|
207
|
+
Promise.resolve(splits.checkCache()).then(isCacheReady => {
|
|
208
|
+
if (isCacheReady) splitsEventEmitter.emit(SDK_SPLITS_CACHE_LOADED);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
return fetcherPromise;
|
|
204
212
|
}
|
|
205
213
|
|
|
206
214
|
let sincePromise = Promise.resolve(splits.getChangeNumber()); // `getChangeNumber` never rejects or throws error
|
|
@@ -14,7 +14,7 @@ export function authenticateFactory(fetchAuth: IFetchAuth): IAuthenticate {
|
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Run authentication requests to Auth Server, and returns a promise that resolves with the decoded JTW token.
|
|
17
|
-
* @param {string[] | undefined} userKeys set of user Keys to track
|
|
17
|
+
* @param {string[] | undefined} userKeys set of user Keys to track MY_SEGMENTS_CHANGES. It is undefined for server-side API.
|
|
18
18
|
*/
|
|
19
19
|
return function authenticate(userKeys?: string[]): Promise<IAuthToken> {
|
|
20
20
|
return fetchAuth(userKeys)
|
|
@@ -71,10 +71,12 @@ export class SSEClient implements ISSEClient {
|
|
|
71
71
|
open(authToken: IAuthTokenPushEnabled) {
|
|
72
72
|
this.close(); // it closes connection if previously opened
|
|
73
73
|
|
|
74
|
-
const channelsQueryParam = Object.keys(authToken.channels).map(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
const channelsQueryParam = Object.keys(authToken.channels).map(
|
|
75
|
+
function (channel) {
|
|
76
|
+
const params = CONTROL_CHANNEL_REGEX.test(channel) ? '[?occupancy=metrics.publishers]' : '';
|
|
77
|
+
return encodeURIComponent(params + channel);
|
|
78
|
+
}
|
|
79
|
+
).join(',');
|
|
78
80
|
const url = `${this.settings.urls.streaming}/sse?channels=${channelsQueryParam}&accessToken=${authToken.token}&v=${ABLY_API_VERSION}&heartbeats=true`; // same results using `&heartbeats=false`
|
|
79
81
|
const isServerSide = !this.settings.core.key;
|
|
80
82
|
|
|
@@ -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,
|
|
3
|
+
import { PUSH_RETRYABLE_ERROR, PUSH_NONRETRYABLE_ERROR, OCCUPANCY, CONTROL, MY_SEGMENTS_UPDATE, MY_SEGMENTS_UPDATE_V2, SEGMENT_UPDATE, SPLIT_KILL, SPLIT_UPDATE } from '../constants';
|
|
4
4
|
import { IPushEventEmitter } from '../types';
|
|
5
5
|
import { ISseEventHandler } from '../SSEClient/types';
|
|
6
6
|
import { INotificationError, INotificationMessage } from './types';
|
|
@@ -74,18 +74,21 @@ export function SSEHandlerFactory(log: ILogger, pushEmitter: IPushEventEmitter,
|
|
|
74
74
|
const { parsedData, data, channel, timestamp } = messageWithParsedData;
|
|
75
75
|
log.debug(STREAMING_NEW_MESSAGE, [data]);
|
|
76
76
|
|
|
77
|
-
// we only handle update events if streaming is up
|
|
78
|
-
if (!notificationKeeper.isStreamingUp() && [OCCUPANCY, CONTROL].indexOf(parsedData.type) === -1)
|
|
77
|
+
// we only handle update events if streaming is up.
|
|
78
|
+
if (!notificationKeeper.isStreamingUp() && [OCCUPANCY, CONTROL].indexOf(parsedData.type) === -1)
|
|
79
|
+
return;
|
|
79
80
|
|
|
80
81
|
switch (parsedData.type) {
|
|
81
82
|
/* update events */
|
|
82
83
|
case SPLIT_UPDATE:
|
|
83
84
|
case SEGMENT_UPDATE:
|
|
84
|
-
case
|
|
85
|
-
case MEMBERSHIPS_LS_UPDATE:
|
|
85
|
+
case MY_SEGMENTS_UPDATE_V2:
|
|
86
86
|
case SPLIT_KILL:
|
|
87
87
|
pushEmitter.emit(parsedData.type, parsedData);
|
|
88
88
|
break;
|
|
89
|
+
case MY_SEGMENTS_UPDATE:
|
|
90
|
+
pushEmitter.emit(parsedData.type, parsedData, channel);
|
|
91
|
+
break;
|
|
89
92
|
|
|
90
93
|
/* occupancy & control events, handled by NotificationManagerKeeper */
|
|
91
94
|
case OCCUPANCY:
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { ControlType } from '../constants';
|
|
2
|
-
import { SEGMENT_UPDATE, SPLIT_UPDATE, SPLIT_KILL, CONTROL, OCCUPANCY
|
|
2
|
+
import { MY_SEGMENTS_UPDATE, MY_SEGMENTS_UPDATE_V2, SEGMENT_UPDATE, SPLIT_UPDATE, SPLIT_KILL, CONTROL, OCCUPANCY } from '../types';
|
|
3
|
+
|
|
4
|
+
export interface IMySegmentsUpdateData {
|
|
5
|
+
type: MY_SEGMENTS_UPDATE,
|
|
6
|
+
changeNumber: number,
|
|
7
|
+
includesPayload: boolean,
|
|
8
|
+
segmentList?: string[]
|
|
9
|
+
}
|
|
3
10
|
|
|
4
11
|
export enum Compression {
|
|
5
12
|
None = 0,
|
|
@@ -19,22 +26,15 @@ export interface KeyList {
|
|
|
19
26
|
r?: string[], // decimal hash64 of user keys
|
|
20
27
|
}
|
|
21
28
|
|
|
22
|
-
interface
|
|
23
|
-
type:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
c
|
|
27
|
-
d
|
|
29
|
+
export interface IMySegmentsUpdateV2Data {
|
|
30
|
+
type: MY_SEGMENTS_UPDATE_V2,
|
|
31
|
+
changeNumber: number,
|
|
32
|
+
segmentName: string,
|
|
33
|
+
c: Compression,
|
|
34
|
+
d: string,
|
|
28
35
|
u: UpdateStrategy,
|
|
29
|
-
i?: number, // time interval in millis
|
|
30
|
-
h?: number, // hash function
|
|
31
|
-
s?: number, // seed for hash function
|
|
32
36
|
}
|
|
33
37
|
|
|
34
|
-
export interface IMembershipMSUpdateData extends IMembershipUpdateData<MEMBERSHIPS_MS_UPDATE> { }
|
|
35
|
-
|
|
36
|
-
export interface IMembershipLSUpdateData extends IMembershipUpdateData<MEMBERSHIPS_LS_UPDATE> { }
|
|
37
|
-
|
|
38
38
|
export interface ISegmentUpdateData {
|
|
39
39
|
type: SEGMENT_UPDATE,
|
|
40
40
|
changeNumber: number,
|
|
@@ -68,6 +68,6 @@ export interface IOccupancyData {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
export type INotificationData =
|
|
71
|
+
export type INotificationData = IMySegmentsUpdateData | IMySegmentsUpdateV2Data | ISegmentUpdateData | ISplitUpdateData | ISplitKillData | IControlData | IOccupancyData
|
|
72
72
|
export type INotificationMessage = { parsedData: INotificationData, channel: string, timestamp: number, data: string }
|
|
73
73
|
export type INotificationError = Event & { parsedData?: any, message?: string }
|