@splitsoftware/splitio-commons 2.10.2-rc.2 → 2.10.2-rc.4
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/cjs/readiness/constants.js +4 -1
- package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +2 -3
- package/cjs/sync/polling/types.js +0 -15
- package/cjs/sync/polling/updaters/mySegmentsUpdater.js +1 -2
- package/cjs/sync/polling/updaters/segmentChangesUpdater.js +6 -6
- package/cjs/sync/polling/updaters/splitChangesUpdater.js +6 -6
- package/esm/readiness/constants.js +3 -0
- package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +3 -4
- package/esm/sync/polling/types.js +1 -14
- package/esm/sync/polling/updaters/mySegmentsUpdater.js +2 -3
- package/esm/sync/polling/updaters/segmentChangesUpdater.js +7 -7
- package/esm/sync/polling/updaters/splitChangesUpdater.js +7 -7
- package/package.json +1 -1
- package/src/readiness/constants.ts +4 -0
- package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +3 -4
- package/src/sync/polling/types.ts +0 -14
- package/src/sync/polling/updaters/mySegmentsUpdater.ts +2 -3
- package/src/sync/polling/updaters/segmentChangesUpdater.ts +8 -7
- package/src/sync/polling/updaters/splitChangesUpdater.ts +8 -7
- package/types/splitio.d.ts +9 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SDK_UPDATE = exports.SDK_READY_FROM_CACHE = exports.SDK_READY = exports.SDK_READY_TIMED_OUT = exports.SDK_SEGMENTS_ARRIVED = exports.SDK_SPLITS_CACHE_LOADED = exports.SDK_SPLITS_ARRIVED = void 0;
|
|
3
|
+
exports.SEGMENTS_UPDATE = exports.FLAGS_UPDATE = exports.SDK_UPDATE = exports.SDK_READY_FROM_CACHE = exports.SDK_READY = exports.SDK_READY_TIMED_OUT = exports.SDK_SEGMENTS_ARRIVED = exports.SDK_SPLITS_CACHE_LOADED = exports.SDK_SPLITS_ARRIVED = void 0;
|
|
4
4
|
// Splits events:
|
|
5
5
|
exports.SDK_SPLITS_ARRIVED = 'state::splits-arrived';
|
|
6
6
|
exports.SDK_SPLITS_CACHE_LOADED = 'state::splits-cache-loaded';
|
|
@@ -11,3 +11,6 @@ exports.SDK_READY_TIMED_OUT = 'init::timeout';
|
|
|
11
11
|
exports.SDK_READY = 'init::ready';
|
|
12
12
|
exports.SDK_READY_FROM_CACHE = 'init::cache-ready';
|
|
13
13
|
exports.SDK_UPDATE = 'state::update';
|
|
14
|
+
// SdkUpdateMetadata types:
|
|
15
|
+
exports.FLAGS_UPDATE = 'FLAGS_UPDATE';
|
|
16
|
+
exports.SEGMENTS_UPDATE = 'SEGMENTS_UPDATE';
|
|
@@ -6,7 +6,6 @@ var syncTask_1 = require("../../syncTask");
|
|
|
6
6
|
var constants_1 = require("../../../utils/constants");
|
|
7
7
|
var constants_2 = require("../../../readiness/constants");
|
|
8
8
|
var constants_3 = require("../../../logger/constants");
|
|
9
|
-
var types_1 = require("../../polling/types");
|
|
10
9
|
/**
|
|
11
10
|
* Offline equivalent of `splitChangesUpdaterFactory`
|
|
12
11
|
*/
|
|
@@ -43,7 +42,7 @@ function fromObjectUpdaterFactory(splitsParser, storage, readiness, settings) {
|
|
|
43
42
|
splitsCache.clear(),
|
|
44
43
|
splitsCache.update(splits, [], Date.now())
|
|
45
44
|
]).then(function () {
|
|
46
|
-
readiness.splits.emit(constants_2.SDK_SPLITS_ARRIVED, { type:
|
|
45
|
+
readiness.splits.emit(constants_2.SDK_SPLITS_ARRIVED, { type: constants_2.FLAGS_UPDATE, names: [] });
|
|
47
46
|
if (startingUp) {
|
|
48
47
|
startingUp = false;
|
|
49
48
|
Promise.resolve(storage.validateCache ? storage.validateCache() : false).then(function (isCacheLoaded) {
|
|
@@ -51,7 +50,7 @@ function fromObjectUpdaterFactory(splitsParser, storage, readiness, settings) {
|
|
|
51
50
|
if (isCacheLoaded)
|
|
52
51
|
readiness.splits.emit(constants_2.SDK_SPLITS_CACHE_LOADED);
|
|
53
52
|
// Emits SDK_READY
|
|
54
|
-
readiness.segments.emit(constants_2.SDK_SEGMENTS_ARRIVED, { type:
|
|
53
|
+
readiness.segments.emit(constants_2.SDK_SEGMENTS_ARRIVED, { type: constants_2.SEGMENTS_UPDATE, names: [] });
|
|
55
54
|
});
|
|
56
55
|
}
|
|
57
56
|
return true;
|
|
@@ -1,17 +1,2 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SdkUpdateMetadataKeys = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Metadata keys for SDK update events.
|
|
6
|
-
*/
|
|
7
|
-
var SdkUpdateMetadataKeys;
|
|
8
|
-
(function (SdkUpdateMetadataKeys) {
|
|
9
|
-
/**
|
|
10
|
-
* The update event emitted when the SDK cache is updated with new data for flags.
|
|
11
|
-
*/
|
|
12
|
-
SdkUpdateMetadataKeys["FLAGS_UPDATE"] = "FLAGS_UPDATE";
|
|
13
|
-
/**
|
|
14
|
-
* The update event emitted when the SDK cache is updated with new data for segments.
|
|
15
|
-
*/
|
|
16
|
-
SdkUpdateMetadataKeys["SEGMENTS_UPDATE"] = "SEGMENTS_UPDATE";
|
|
17
|
-
})(SdkUpdateMetadataKeys = exports.SdkUpdateMetadataKeys || (exports.SdkUpdateMetadataKeys = {}));
|
|
@@ -6,7 +6,6 @@ var constants_1 = require("../../../readiness/constants");
|
|
|
6
6
|
var constants_2 = require("../../../logger/constants");
|
|
7
7
|
var constants_3 = require("../../streaming/constants");
|
|
8
8
|
var AbstractSplitsCacheSync_1 = require("../../../storages/AbstractSplitsCacheSync");
|
|
9
|
-
var types_1 = require("../types");
|
|
10
9
|
/**
|
|
11
10
|
* factory of MySegments updater, a task that:
|
|
12
11
|
* - fetches mySegments using `mySegmentsFetcher`
|
|
@@ -40,7 +39,7 @@ function mySegmentsUpdaterFactory(log, mySegmentsFetcher, storage, segmentsEvent
|
|
|
40
39
|
// Notify update if required
|
|
41
40
|
if ((0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage) && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
|
|
42
41
|
readyOnAlreadyExistentState = false;
|
|
43
|
-
segmentsEventEmitter.emit(constants_1.SDK_SEGMENTS_ARRIVED, { type:
|
|
42
|
+
segmentsEventEmitter.emit(constants_1.SDK_SEGMENTS_ARRIVED, { type: constants_1.SEGMENTS_UPDATE, names: [] });
|
|
44
43
|
}
|
|
45
44
|
}
|
|
46
45
|
function _mySegmentsUpdater(retry, segmentsData, noCache, till) {
|
|
@@ -4,7 +4,6 @@ exports.segmentChangesUpdaterFactory = void 0;
|
|
|
4
4
|
var constants_1 = require("../../../readiness/constants");
|
|
5
5
|
var constants_2 = require("../../../logger/constants");
|
|
6
6
|
var timeout_1 = require("../../../utils/promise/timeout");
|
|
7
|
-
var types_1 = require("../types");
|
|
8
7
|
/**
|
|
9
8
|
* Factory of SegmentChanges updater, a task that:
|
|
10
9
|
* - fetches segment changes using `segmentChangesFetcher`
|
|
@@ -67,12 +66,13 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
|
|
|
67
66
|
// if at least one segment fetch succeeded, mark segments ready
|
|
68
67
|
if (shouldUpdateFlags.some(function (update) { return update; }) || readyOnAlreadyExistentState) {
|
|
69
68
|
readyOnAlreadyExistentState = false;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
69
|
+
if (readiness) {
|
|
70
|
+
var metadata = {
|
|
71
|
+
type: constants_1.SEGMENTS_UPDATE,
|
|
72
|
+
names: []
|
|
73
|
+
};
|
|
75
74
|
readiness.segments.emit(constants_1.SDK_SEGMENTS_ARRIVED, metadata);
|
|
75
|
+
}
|
|
76
76
|
}
|
|
77
77
|
return true;
|
|
78
78
|
});
|
|
@@ -8,7 +8,6 @@ var lang_1 = require("../../../utils/lang");
|
|
|
8
8
|
var constants_3 = require("../../../utils/constants");
|
|
9
9
|
var sets_1 = require("../../../utils/lang/sets");
|
|
10
10
|
var constants_4 = require("../../streaming/constants");
|
|
11
|
-
var types_1 = require("../types");
|
|
12
11
|
// Checks that all registered segments have been fetched (changeNumber !== -1 for every segment).
|
|
13
12
|
// Returns a promise that could be rejected.
|
|
14
13
|
// @TODO review together with Segments and MySegments storage APIs
|
|
@@ -165,13 +164,14 @@ function splitChangesUpdaterFactory(log, splitChangesFetcher, storage, splitFilt
|
|
|
165
164
|
return Promise.resolve(!splitsEventEmitter.splitsArrived || ((ffChanged || rbsChanged) && (isClientSide || checkAllSegmentsExist(segments))))
|
|
166
165
|
.catch(function () { return false; } /** noop. just to handle a possible `checkAllSegmentsExist` rejection, before emitting SDK event */)
|
|
167
166
|
.then(function (emitSplitsArrivedEvent) {
|
|
168
|
-
var metadata = {
|
|
169
|
-
type: updatedFlags.length > 0 ? types_1.SdkUpdateMetadataKeys.FLAGS_UPDATE : types_1.SdkUpdateMetadataKeys.SEGMENTS_UPDATE,
|
|
170
|
-
names: updatedFlags.length > 0 ? updatedFlags : []
|
|
171
|
-
};
|
|
172
167
|
// emit SDK events
|
|
173
|
-
if (emitSplitsArrivedEvent)
|
|
168
|
+
if (emitSplitsArrivedEvent) {
|
|
169
|
+
var metadata = {
|
|
170
|
+
type: updatedFlags.length > 0 ? constants_1.FLAGS_UPDATE : constants_1.SEGMENTS_UPDATE,
|
|
171
|
+
names: updatedFlags.length > 0 ? updatedFlags : []
|
|
172
|
+
};
|
|
174
173
|
splitsEventEmitter.emit(constants_1.SDK_SPLITS_ARRIVED, metadata);
|
|
174
|
+
}
|
|
175
175
|
return true;
|
|
176
176
|
});
|
|
177
177
|
}
|
|
@@ -8,3 +8,6 @@ export var SDK_READY_TIMED_OUT = 'init::timeout';
|
|
|
8
8
|
export var SDK_READY = 'init::ready';
|
|
9
9
|
export var SDK_READY_FROM_CACHE = 'init::cache-ready';
|
|
10
10
|
export var SDK_UPDATE = 'state::update';
|
|
11
|
+
// SdkUpdateMetadata types:
|
|
12
|
+
export var FLAGS_UPDATE = 'FLAGS_UPDATE';
|
|
13
|
+
export var SEGMENTS_UPDATE = 'SEGMENTS_UPDATE';
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { forOwn } from '../../../utils/lang';
|
|
2
2
|
import { syncTaskFactory } from '../../syncTask';
|
|
3
3
|
import { CONTROL } from '../../../utils/constants';
|
|
4
|
-
import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED, SDK_SPLITS_CACHE_LOADED } from '../../../readiness/constants';
|
|
4
|
+
import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED, SDK_SPLITS_CACHE_LOADED, FLAGS_UPDATE, SEGMENTS_UPDATE } from '../../../readiness/constants';
|
|
5
5
|
import { SYNC_OFFLINE_DATA, ERROR_SYNC_OFFLINE_LOADING } from '../../../logger/constants';
|
|
6
|
-
import { SdkUpdateMetadataKeys } from '../../polling/types';
|
|
7
6
|
/**
|
|
8
7
|
* Offline equivalent of `splitChangesUpdaterFactory`
|
|
9
8
|
*/
|
|
@@ -40,7 +39,7 @@ export function fromObjectUpdaterFactory(splitsParser, storage, readiness, setti
|
|
|
40
39
|
splitsCache.clear(),
|
|
41
40
|
splitsCache.update(splits, [], Date.now())
|
|
42
41
|
]).then(function () {
|
|
43
|
-
readiness.splits.emit(SDK_SPLITS_ARRIVED, { type:
|
|
42
|
+
readiness.splits.emit(SDK_SPLITS_ARRIVED, { type: FLAGS_UPDATE, names: [] });
|
|
44
43
|
if (startingUp) {
|
|
45
44
|
startingUp = false;
|
|
46
45
|
Promise.resolve(storage.validateCache ? storage.validateCache() : false).then(function (isCacheLoaded) {
|
|
@@ -48,7 +47,7 @@ export function fromObjectUpdaterFactory(splitsParser, storage, readiness, setti
|
|
|
48
47
|
if (isCacheLoaded)
|
|
49
48
|
readiness.splits.emit(SDK_SPLITS_CACHE_LOADED);
|
|
50
49
|
// Emits SDK_READY
|
|
51
|
-
readiness.segments.emit(SDK_SEGMENTS_ARRIVED, { type:
|
|
50
|
+
readiness.segments.emit(SDK_SEGMENTS_ARRIVED, { type: SEGMENTS_UPDATE, names: [] });
|
|
52
51
|
});
|
|
53
52
|
}
|
|
54
53
|
return true;
|
|
@@ -1,14 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Metadata keys for SDK update events.
|
|
3
|
-
*/
|
|
4
|
-
export var SdkUpdateMetadataKeys;
|
|
5
|
-
(function (SdkUpdateMetadataKeys) {
|
|
6
|
-
/**
|
|
7
|
-
* The update event emitted when the SDK cache is updated with new data for flags.
|
|
8
|
-
*/
|
|
9
|
-
SdkUpdateMetadataKeys["FLAGS_UPDATE"] = "FLAGS_UPDATE";
|
|
10
|
-
/**
|
|
11
|
-
* The update event emitted when the SDK cache is updated with new data for segments.
|
|
12
|
-
*/
|
|
13
|
-
SdkUpdateMetadataKeys["SEGMENTS_UPDATE"] = "SEGMENTS_UPDATE";
|
|
14
|
-
})(SdkUpdateMetadataKeys || (SdkUpdateMetadataKeys = {}));
|
|
1
|
+
export {};
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { timeout } from '../../../utils/promise/timeout';
|
|
2
|
-
import { SDK_SEGMENTS_ARRIVED } from '../../../readiness/constants';
|
|
2
|
+
import { SDK_SEGMENTS_ARRIVED, SEGMENTS_UPDATE } from '../../../readiness/constants';
|
|
3
3
|
import { SYNC_MYSEGMENTS_FETCH_RETRY } from '../../../logger/constants';
|
|
4
4
|
import { MEMBERSHIPS_LS_UPDATE } from '../../streaming/constants';
|
|
5
5
|
import { usesSegmentsSync } from '../../../storages/AbstractSplitsCacheSync';
|
|
6
|
-
import { SdkUpdateMetadataKeys } from '../types';
|
|
7
6
|
/**
|
|
8
7
|
* factory of MySegments updater, a task that:
|
|
9
8
|
* - fetches mySegments using `mySegmentsFetcher`
|
|
@@ -37,7 +36,7 @@ export function mySegmentsUpdaterFactory(log, mySegmentsFetcher, storage, segmen
|
|
|
37
36
|
// Notify update if required
|
|
38
37
|
if (usesSegmentsSync(storage) && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
|
|
39
38
|
readyOnAlreadyExistentState = false;
|
|
40
|
-
segmentsEventEmitter.emit(SDK_SEGMENTS_ARRIVED, { type:
|
|
39
|
+
segmentsEventEmitter.emit(SDK_SEGMENTS_ARRIVED, { type: SEGMENTS_UPDATE, names: [] });
|
|
41
40
|
}
|
|
42
41
|
}
|
|
43
42
|
function _mySegmentsUpdater(retry, segmentsData, noCache, till) {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { SDK_SEGMENTS_ARRIVED } from '../../../readiness/constants';
|
|
1
|
+
import { SDK_SEGMENTS_ARRIVED, SEGMENTS_UPDATE } from '../../../readiness/constants';
|
|
2
2
|
import { LOG_PREFIX_INSTANTIATION, LOG_PREFIX_SYNC_SEGMENTS } from '../../../logger/constants';
|
|
3
3
|
import { timeout } from '../../../utils/promise/timeout';
|
|
4
|
-
import { SdkUpdateMetadataKeys } from '../types';
|
|
5
4
|
/**
|
|
6
5
|
* Factory of SegmentChanges updater, a task that:
|
|
7
6
|
* - fetches segment changes using `segmentChangesFetcher`
|
|
@@ -64,12 +63,13 @@ export function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segment
|
|
|
64
63
|
// if at least one segment fetch succeeded, mark segments ready
|
|
65
64
|
if (shouldUpdateFlags.some(function (update) { return update; }) || readyOnAlreadyExistentState) {
|
|
66
65
|
readyOnAlreadyExistentState = false;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
66
|
+
if (readiness) {
|
|
67
|
+
var metadata = {
|
|
68
|
+
type: SEGMENTS_UPDATE,
|
|
69
|
+
names: []
|
|
70
|
+
};
|
|
72
71
|
readiness.segments.emit(SDK_SEGMENTS_ARRIVED, metadata);
|
|
72
|
+
}
|
|
73
73
|
}
|
|
74
74
|
return true;
|
|
75
75
|
});
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { timeout } from '../../../utils/promise/timeout';
|
|
2
|
-
import { SDK_SPLITS_ARRIVED } from '../../../readiness/constants';
|
|
2
|
+
import { SDK_SPLITS_ARRIVED, FLAGS_UPDATE, SEGMENTS_UPDATE } from '../../../readiness/constants';
|
|
3
3
|
import { SYNC_SPLITS_FETCH, SYNC_SPLITS_UPDATE, SYNC_RBS_UPDATE, SYNC_SPLITS_FETCH_FAILS, SYNC_SPLITS_FETCH_RETRY } from '../../../logger/constants';
|
|
4
4
|
import { startsWith } from '../../../utils/lang';
|
|
5
5
|
import { IN_RULE_BASED_SEGMENT, IN_SEGMENT, RULE_BASED_SEGMENT, STANDARD_SEGMENT } from '../../../utils/constants';
|
|
6
6
|
import { setToArray } from '../../../utils/lang/sets';
|
|
7
7
|
import { SPLIT_UPDATE } from '../../streaming/constants';
|
|
8
|
-
import { SdkUpdateMetadataKeys } from '../types';
|
|
9
8
|
// Checks that all registered segments have been fetched (changeNumber !== -1 for every segment).
|
|
10
9
|
// Returns a promise that could be rejected.
|
|
11
10
|
// @TODO review together with Segments and MySegments storage APIs
|
|
@@ -160,13 +159,14 @@ export function splitChangesUpdaterFactory(log, splitChangesFetcher, storage, sp
|
|
|
160
159
|
return Promise.resolve(!splitsEventEmitter.splitsArrived || ((ffChanged || rbsChanged) && (isClientSide || checkAllSegmentsExist(segments))))
|
|
161
160
|
.catch(function () { return false; } /** noop. just to handle a possible `checkAllSegmentsExist` rejection, before emitting SDK event */)
|
|
162
161
|
.then(function (emitSplitsArrivedEvent) {
|
|
163
|
-
var metadata = {
|
|
164
|
-
type: updatedFlags.length > 0 ? SdkUpdateMetadataKeys.FLAGS_UPDATE : SdkUpdateMetadataKeys.SEGMENTS_UPDATE,
|
|
165
|
-
names: updatedFlags.length > 0 ? updatedFlags : []
|
|
166
|
-
};
|
|
167
162
|
// emit SDK events
|
|
168
|
-
if (emitSplitsArrivedEvent)
|
|
163
|
+
if (emitSplitsArrivedEvent) {
|
|
164
|
+
var metadata = {
|
|
165
|
+
type: updatedFlags.length > 0 ? FLAGS_UPDATE : SEGMENTS_UPDATE,
|
|
166
|
+
names: updatedFlags.length > 0 ? updatedFlags : []
|
|
167
|
+
};
|
|
169
168
|
splitsEventEmitter.emit(SDK_SPLITS_ARRIVED, metadata);
|
|
169
|
+
}
|
|
170
170
|
return true;
|
|
171
171
|
});
|
|
172
172
|
}
|
package/package.json
CHANGED
|
@@ -10,3 +10,7 @@ export const SDK_READY_TIMED_OUT = 'init::timeout';
|
|
|
10
10
|
export const SDK_READY = 'init::ready';
|
|
11
11
|
export const SDK_READY_FROM_CACHE = 'init::cache-ready';
|
|
12
12
|
export const SDK_UPDATE = 'state::update';
|
|
13
|
+
|
|
14
|
+
// SdkUpdateMetadata types:
|
|
15
|
+
export const FLAGS_UPDATE = 'FLAGS_UPDATE';
|
|
16
|
+
export const SEGMENTS_UPDATE = 'SEGMENTS_UPDATE';
|
|
@@ -7,9 +7,8 @@ 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, SDK_SPLITS_CACHE_LOADED } from '../../../readiness/constants';
|
|
10
|
+
import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED, SDK_SPLITS_CACHE_LOADED, FLAGS_UPDATE, SEGMENTS_UPDATE } from '../../../readiness/constants';
|
|
11
11
|
import { SYNC_OFFLINE_DATA, ERROR_SYNC_OFFLINE_LOADING } from '../../../logger/constants';
|
|
12
|
-
import { SdkUpdateMetadataKeys } from '../../polling/types';
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
14
|
* Offline equivalent of `splitChangesUpdaterFactory`
|
|
@@ -56,7 +55,7 @@ export function fromObjectUpdaterFactory(
|
|
|
56
55
|
splitsCache.clear(), // required to sync removed splits from mock
|
|
57
56
|
splitsCache.update(splits, [], Date.now())
|
|
58
57
|
]).then(() => {
|
|
59
|
-
readiness.splits.emit(SDK_SPLITS_ARRIVED, { type:
|
|
58
|
+
readiness.splits.emit(SDK_SPLITS_ARRIVED, { type: FLAGS_UPDATE, names: [] });
|
|
60
59
|
|
|
61
60
|
if (startingUp) {
|
|
62
61
|
startingUp = false;
|
|
@@ -64,7 +63,7 @@ export function fromObjectUpdaterFactory(
|
|
|
64
63
|
// Emits SDK_READY_FROM_CACHE
|
|
65
64
|
if (isCacheLoaded) readiness.splits.emit(SDK_SPLITS_CACHE_LOADED);
|
|
66
65
|
// Emits SDK_READY
|
|
67
|
-
readiness.segments.emit(SDK_SEGMENTS_ARRIVED, { type:
|
|
66
|
+
readiness.segments.emit(SDK_SEGMENTS_ARRIVED, { type: SEGMENTS_UPDATE, names: [] });
|
|
68
67
|
});
|
|
69
68
|
}
|
|
70
69
|
return true;
|
|
@@ -4,20 +4,6 @@ import { IStorageSync } from '../../storages/types';
|
|
|
4
4
|
import { MEMBERSHIPS_LS_UPDATE, MEMBERSHIPS_MS_UPDATE } from '../streaming/types';
|
|
5
5
|
import { ITask, ISyncTask } from '../types';
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
* Metadata keys for SDK update events.
|
|
9
|
-
*/
|
|
10
|
-
export enum SdkUpdateMetadataKeys {
|
|
11
|
-
/**
|
|
12
|
-
* The update event emitted when the SDK cache is updated with new data for flags.
|
|
13
|
-
*/
|
|
14
|
-
FLAGS_UPDATE = 'FLAGS_UPDATE',
|
|
15
|
-
/**
|
|
16
|
-
* The update event emitted when the SDK cache is updated with new data for segments.
|
|
17
|
-
*/
|
|
18
|
-
SEGMENTS_UPDATE = 'SEGMENTS_UPDATE'
|
|
19
|
-
}
|
|
20
|
-
|
|
21
7
|
export interface ISplitsSyncTask extends ISyncTask<[noCache?: boolean, till?: number, splitUpdateNotification?: { payload: ISplit | IRBSegment, changeNumber: number }], boolean> { }
|
|
22
8
|
|
|
23
9
|
export interface ISegmentsSyncTask extends ISyncTask<[fetchOnlyNew?: boolean, segmentName?: string, noCache?: boolean, till?: number], boolean> { }
|
|
@@ -2,14 +2,13 @@ import { IMySegmentsFetcher } from '../fetchers/types';
|
|
|
2
2
|
import { IStorageSync } from '../../../storages/types';
|
|
3
3
|
import { ISegmentsEventEmitter } from '../../../readiness/types';
|
|
4
4
|
import { timeout } from '../../../utils/promise/timeout';
|
|
5
|
-
import { SDK_SEGMENTS_ARRIVED } from '../../../readiness/constants';
|
|
5
|
+
import { SDK_SEGMENTS_ARRIVED, SEGMENTS_UPDATE } 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
9
|
import { IMembershipsResponse } from '../../../dtos/types';
|
|
10
10
|
import { MEMBERSHIPS_LS_UPDATE } from '../../streaming/constants';
|
|
11
11
|
import { usesSegmentsSync } from '../../../storages/AbstractSplitsCacheSync';
|
|
12
|
-
import { SdkUpdateMetadataKeys } from '../types';
|
|
13
12
|
|
|
14
13
|
type IMySegmentsUpdater = (segmentsData?: MySegmentsData, noCache?: boolean, till?: number) => Promise<boolean>
|
|
15
14
|
|
|
@@ -57,7 +56,7 @@ export function mySegmentsUpdaterFactory(
|
|
|
57
56
|
// Notify update if required
|
|
58
57
|
if (usesSegmentsSync(storage) && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
|
|
59
58
|
readyOnAlreadyExistentState = false;
|
|
60
|
-
segmentsEventEmitter.emit(SDK_SEGMENTS_ARRIVED, { type:
|
|
59
|
+
segmentsEventEmitter.emit(SDK_SEGMENTS_ARRIVED, { type: SEGMENTS_UPDATE, names: [] });
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
62
|
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { ISegmentChangesFetcher } from '../fetchers/types';
|
|
2
2
|
import { ISegmentsCacheBase } from '../../../storages/types';
|
|
3
3
|
import { IReadinessManager } from '../../../readiness/types';
|
|
4
|
-
import { SDK_SEGMENTS_ARRIVED } from '../../../readiness/constants';
|
|
4
|
+
import { SDK_SEGMENTS_ARRIVED, SEGMENTS_UPDATE } from '../../../readiness/constants';
|
|
5
5
|
import { ILogger } from '../../../logger/types';
|
|
6
6
|
import { LOG_PREFIX_INSTANTIATION, LOG_PREFIX_SYNC_SEGMENTS } from '../../../logger/constants';
|
|
7
7
|
import { timeout } from '../../../utils/promise/timeout';
|
|
8
8
|
import { SdkUpdateMetadata } from '../../../../types/splitio';
|
|
9
|
-
import { SdkUpdateMetadataKeys } from '../types';
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
type ISegmentChangesUpdater = (fetchOnlyNew?: boolean, segmentName?: string, noCache?: boolean, till?: number) => Promise<boolean>
|
|
@@ -86,11 +85,13 @@ export function segmentChangesUpdaterFactory(
|
|
|
86
85
|
// if at least one segment fetch succeeded, mark segments ready
|
|
87
86
|
if (shouldUpdateFlags.some(update => update) || readyOnAlreadyExistentState) {
|
|
88
87
|
readyOnAlreadyExistentState = false;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
88
|
+
if (readiness) {
|
|
89
|
+
const metadata: SdkUpdateMetadata = {
|
|
90
|
+
type: SEGMENTS_UPDATE,
|
|
91
|
+
names: []
|
|
92
|
+
};
|
|
93
|
+
readiness.segments.emit(SDK_SEGMENTS_ARRIVED, metadata);
|
|
94
|
+
}
|
|
94
95
|
}
|
|
95
96
|
return true;
|
|
96
97
|
});
|
|
@@ -3,7 +3,7 @@ import { ISplitChangesFetcher } from '../fetchers/types';
|
|
|
3
3
|
import { IRBSegment, ISplit, ISplitChangesResponse, ISplitFiltersValidation, MaybeThenable } from '../../../dtos/types';
|
|
4
4
|
import { ISplitsEventEmitter } from '../../../readiness/types';
|
|
5
5
|
import { timeout } from '../../../utils/promise/timeout';
|
|
6
|
-
import { SDK_SPLITS_ARRIVED } from '../../../readiness/constants';
|
|
6
|
+
import { SDK_SPLITS_ARRIVED, FLAGS_UPDATE, SEGMENTS_UPDATE } from '../../../readiness/constants';
|
|
7
7
|
import { ILogger } from '../../../logger/types';
|
|
8
8
|
import { SYNC_SPLITS_FETCH, SYNC_SPLITS_UPDATE, SYNC_RBS_UPDATE, SYNC_SPLITS_FETCH_FAILS, SYNC_SPLITS_FETCH_RETRY } from '../../../logger/constants';
|
|
9
9
|
import { startsWith } from '../../../utils/lang';
|
|
@@ -11,7 +11,6 @@ import { IN_RULE_BASED_SEGMENT, IN_SEGMENT, RULE_BASED_SEGMENT, STANDARD_SEGMENT
|
|
|
11
11
|
import { setToArray } from '../../../utils/lang/sets';
|
|
12
12
|
import { SPLIT_UPDATE } from '../../streaming/constants';
|
|
13
13
|
import { SdkUpdateMetadata } from '../../../../types/splitio';
|
|
14
|
-
import { SdkUpdateMetadataKeys } from '../types';
|
|
15
14
|
|
|
16
15
|
export type InstantUpdate = { payload: ISplit | IRBSegment, changeNumber: number, type: string };
|
|
17
16
|
type SplitChangesUpdater = (noCache?: boolean, till?: number, instantUpdate?: InstantUpdate) => Promise<boolean>
|
|
@@ -198,12 +197,14 @@ export function splitChangesUpdaterFactory(
|
|
|
198
197
|
return Promise.resolve(!splitsEventEmitter.splitsArrived || ((ffChanged || rbsChanged) && (isClientSide || checkAllSegmentsExist(segments))))
|
|
199
198
|
.catch(() => false /** noop. just to handle a possible `checkAllSegmentsExist` rejection, before emitting SDK event */)
|
|
200
199
|
.then(emitSplitsArrivedEvent => {
|
|
201
|
-
const metadata: SdkUpdateMetadata = {
|
|
202
|
-
type: updatedFlags.length > 0 ? SdkUpdateMetadataKeys.FLAGS_UPDATE : SdkUpdateMetadataKeys.SEGMENTS_UPDATE,
|
|
203
|
-
names: updatedFlags.length > 0 ? updatedFlags : []
|
|
204
|
-
};
|
|
205
200
|
// emit SDK events
|
|
206
|
-
if (emitSplitsArrivedEvent)
|
|
201
|
+
if (emitSplitsArrivedEvent) {
|
|
202
|
+
const metadata: SdkUpdateMetadata = {
|
|
203
|
+
type: updatedFlags.length > 0 ? FLAGS_UPDATE : SEGMENTS_UPDATE,
|
|
204
|
+
names: updatedFlags.length > 0 ? updatedFlags : []
|
|
205
|
+
};
|
|
206
|
+
splitsEventEmitter.emit(SDK_SPLITS_ARRIVED, metadata);
|
|
207
|
+
}
|
|
207
208
|
return true;
|
|
208
209
|
});
|
|
209
210
|
}
|
package/types/splitio.d.ts
CHANGED
|
@@ -506,6 +506,15 @@ declare namespace SplitIO {
|
|
|
506
506
|
names: string[]
|
|
507
507
|
}
|
|
508
508
|
|
|
509
|
+
/**
|
|
510
|
+
* Metadata keys for SDK update events.
|
|
511
|
+
* Use the string literals directly: 'FLAGS_UPDATE' or 'SEGMENTS_UPDATE'
|
|
512
|
+
*/
|
|
513
|
+
type SdkUpdateMetadataKeys = {
|
|
514
|
+
FLAGS_UPDATE: 'FLAGS_UPDATE';
|
|
515
|
+
SEGMENTS_UPDATE: 'SEGMENTS_UPDATE';
|
|
516
|
+
};
|
|
517
|
+
|
|
509
518
|
/**
|
|
510
519
|
* Metadata for the ready events emitted when the SDK is ready to evaluate feature flags.
|
|
511
520
|
*/
|