@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.
@@ -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: types_1.SdkUpdateMetadataKeys.FLAGS_UPDATE, names: [] });
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: types_1.SdkUpdateMetadataKeys.SEGMENTS_UPDATE, names: [] });
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: types_1.SdkUpdateMetadataKeys.SEGMENTS_UPDATE, names: [] });
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
- var metadata = {
71
- type: types_1.SdkUpdateMetadataKeys.SEGMENTS_UPDATE,
72
- names: []
73
- };
74
- if (readiness)
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: SdkUpdateMetadataKeys.FLAGS_UPDATE, names: [] });
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: SdkUpdateMetadataKeys.SEGMENTS_UPDATE, names: [] });
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: SdkUpdateMetadataKeys.SEGMENTS_UPDATE, names: [] });
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
- var metadata = {
68
- type: SdkUpdateMetadataKeys.SEGMENTS_UPDATE,
69
- names: []
70
- };
71
- if (readiness)
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@splitsoftware/splitio-commons",
3
- "version": "2.10.2-rc.2",
3
+ "version": "2.10.2-rc.4",
4
4
  "description": "Split JavaScript SDK common components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -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: SdkUpdateMetadataKeys.FLAGS_UPDATE, names: [] });
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: SdkUpdateMetadataKeys.SEGMENTS_UPDATE, names: [] });
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: SdkUpdateMetadataKeys.SEGMENTS_UPDATE, names: [] });
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
- const metadata: SdkUpdateMetadata = {
90
- type: SdkUpdateMetadataKeys.SEGMENTS_UPDATE,
91
- names: []
92
- };
93
- if (readiness) readiness.segments.emit(SDK_SEGMENTS_ARRIVED, metadata);
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) splitsEventEmitter.emit(SDK_SPLITS_ARRIVED, metadata);
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
  }
@@ -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
  */