@splitsoftware/splitio-commons 1.3.2-rc.0 → 1.3.2-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/sdkFactory/index.js +1 -1
- package/cjs/sync/polling/pollingManagerCS.js +1 -1
- package/cjs/sync/polling/syncTasks/splitsSyncTask.js +2 -2
- package/cjs/sync/polling/updaters/splitChangesUpdater.js +2 -2
- package/cjs/trackers/telemetryTracker.js +4 -2
- package/esm/sdkFactory/index.js +1 -1
- package/esm/sync/polling/pollingManagerCS.js +1 -1
- package/esm/sync/polling/syncTasks/splitsSyncTask.js +2 -2
- package/esm/sync/polling/updaters/splitChangesUpdater.js +2 -2
- package/esm/trackers/telemetryTracker.js +4 -2
- package/package.json +1 -1
- package/src/sdkFactory/index.ts +1 -1
- package/src/sdkFactory/types.ts +1 -1
- package/src/sync/polling/pollingManagerCS.ts +1 -1
- package/src/sync/polling/syncTasks/splitsSyncTask.ts +2 -0
- package/src/sync/polling/updaters/splitChangesUpdater.ts +2 -1
- package/src/trackers/telemetryTracker.ts +3 -3
- package/types/sdkFactory/types.d.ts +1 -1
- package/types/sync/polling/syncTasks/splitsSyncTask.d.ts +1 -1
- package/types/sync/polling/updaters/splitChangesUpdater.d.ts +1 -1
package/cjs/sdkFactory/index.js
CHANGED
|
@@ -55,7 +55,7 @@ function sdkFactory(params) {
|
|
|
55
55
|
var eventTracker = (0, eventTracker_1.eventTrackerFactory)(settings, storage.events, integrationsManager, storage.telemetry);
|
|
56
56
|
var telemetryTracker = (0, telemetryTracker_1.telemetryTrackerFactory)(storage.telemetry, platform.now);
|
|
57
57
|
// splitApi is used by SyncManager and Browser signal listener
|
|
58
|
-
var splitApi = splitApiFactory && splitApiFactory(settings, platform);
|
|
58
|
+
var splitApi = splitApiFactory && splitApiFactory(settings, platform, telemetryTracker);
|
|
59
59
|
var ctx = { splitApi: splitApi, eventTracker: eventTracker, impressionsTracker: impressionsTracker, telemetryTracker: telemetryTracker, sdkReadinessManager: sdkReadinessManager, readiness: readiness, settings: settings, storage: storage, platform: platform };
|
|
60
60
|
var syncManager = syncManagerFactory && syncManagerFactory(ctx);
|
|
61
61
|
ctx.syncManager = syncManager;
|
|
@@ -14,7 +14,7 @@ var constants_2 = require("../../logger/constants");
|
|
|
14
14
|
function pollingManagerCSFactory(params) {
|
|
15
15
|
var splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
|
|
16
16
|
var log = settings.log;
|
|
17
|
-
var splitsSyncTask = (0, splitsSyncTask_1.splitsSyncTaskFactory)(splitApi.fetchSplitChanges, storage, readiness, settings);
|
|
17
|
+
var splitsSyncTask = (0, splitsSyncTask_1.splitsSyncTaskFactory)(splitApi.fetchSplitChanges, storage, readiness, settings, true);
|
|
18
18
|
// Map of matching keys to their corresponding MySegmentsSyncTask.
|
|
19
19
|
var mySegmentsSyncTasks = {};
|
|
20
20
|
var matchingKey = (0, key_1.getMatching)(settings.core.key);
|
|
@@ -7,7 +7,7 @@ var splitChangesUpdater_1 = require("../updaters/splitChangesUpdater");
|
|
|
7
7
|
/**
|
|
8
8
|
* Creates a sync task that periodically executes a `splitChangesUpdater` task
|
|
9
9
|
*/
|
|
10
|
-
function splitsSyncTaskFactory(fetchSplitChanges, storage, readiness, settings) {
|
|
11
|
-
return (0, syncTask_1.syncTaskFactory)(settings.log, (0, splitChangesUpdater_1.splitChangesUpdaterFactory)(settings.log, (0, splitChangesFetcher_1.splitChangesFetcherFactory)(fetchSplitChanges), storage.splits, storage.segments, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.featuresRefreshRate, 'splitChangesUpdater');
|
|
10
|
+
function splitsSyncTaskFactory(fetchSplitChanges, storage, readiness, settings, isClientSide) {
|
|
11
|
+
return (0, syncTask_1.syncTaskFactory)(settings.log, (0, splitChangesUpdater_1.splitChangesUpdaterFactory)(settings.log, (0, splitChangesFetcher_1.splitChangesFetcherFactory)(fetchSplitChanges), storage.splits, storage.segments, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, isClientSide), settings.scheduler.featuresRefreshRate, 'splitChangesUpdater');
|
|
12
12
|
}
|
|
13
13
|
exports.splitsSyncTaskFactory = splitsSyncTaskFactory;
|
|
@@ -69,7 +69,7 @@ exports.computeSplitsMutation = computeSplitsMutation;
|
|
|
69
69
|
* @param requestTimeoutBeforeReady How long the updater will wait for the request to timeout. Default 0, i.e., never timeout.
|
|
70
70
|
* @param retriesOnFailureBeforeReady How many retries on `/splitChanges` we the updater do in case of failure or timeout. Default 0, i.e., no retries.
|
|
71
71
|
*/
|
|
72
|
-
function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, segments, splitsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady) {
|
|
72
|
+
function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, segments, splitsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, isClientSide) {
|
|
73
73
|
if (requestTimeoutBeforeReady === void 0) { requestTimeoutBeforeReady = 0; }
|
|
74
74
|
if (retriesOnFailureBeforeReady === void 0) { retriesOnFailureBeforeReady = 0; }
|
|
75
75
|
var startingUp = true;
|
|
@@ -111,7 +111,7 @@ function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, segments,
|
|
|
111
111
|
]).then(function () {
|
|
112
112
|
if (splitsEventEmitter) {
|
|
113
113
|
// To emit SDK_SPLITS_ARRIVED for server-side SDK, we must check that all registered segments have been fetched
|
|
114
|
-
return Promise.resolve(!splitsEventEmitter.splitsArrived || (since !== splitChanges.till && checkAllSegmentsExist(segments)))
|
|
114
|
+
return Promise.resolve(!splitsEventEmitter.splitsArrived || (since !== splitChanges.till && (isClientSide || checkAllSegmentsExist(segments))))
|
|
115
115
|
.catch(function () { return false; } /** noop. just to handle a possible `checkAllSegmentsExist` rejection, before emitting SDK event */)
|
|
116
116
|
.then(function (emitSplitsArrivedEvent) {
|
|
117
117
|
// emit SDK events
|
|
@@ -16,7 +16,8 @@ function telemetryTrackerFactory(telemetryCache, now) {
|
|
|
16
16
|
telemetryCache.recordException(method);
|
|
17
17
|
return; // Don't track latency on exceptions
|
|
18
18
|
case labels_1.SDK_NOT_READY: // @ts-ignore ITelemetryCacheAsync doesn't implement the method
|
|
19
|
-
|
|
19
|
+
if (telemetryCache.recordNonReadyUsage)
|
|
20
|
+
telemetryCache.recordNonReadyUsage();
|
|
20
21
|
}
|
|
21
22
|
telemetryCache.recordLatency(method, evalTime());
|
|
22
23
|
};
|
|
@@ -32,7 +33,8 @@ function telemetryTrackerFactory(telemetryCache, now) {
|
|
|
32
33
|
};
|
|
33
34
|
},
|
|
34
35
|
sessionLength: function () {
|
|
35
|
-
telemetryCache.recordSessionLength
|
|
36
|
+
if (telemetryCache.recordSessionLength)
|
|
37
|
+
telemetryCache.recordSessionLength(startTime_1());
|
|
36
38
|
},
|
|
37
39
|
streamingEvent: function (e, d) {
|
|
38
40
|
if (e === constants_1.AUTH_REJECTION) {
|
package/esm/sdkFactory/index.js
CHANGED
|
@@ -52,7 +52,7 @@ export function sdkFactory(params) {
|
|
|
52
52
|
var eventTracker = eventTrackerFactory(settings, storage.events, integrationsManager, storage.telemetry);
|
|
53
53
|
var telemetryTracker = telemetryTrackerFactory(storage.telemetry, platform.now);
|
|
54
54
|
// splitApi is used by SyncManager and Browser signal listener
|
|
55
|
-
var splitApi = splitApiFactory && splitApiFactory(settings, platform);
|
|
55
|
+
var splitApi = splitApiFactory && splitApiFactory(settings, platform, telemetryTracker);
|
|
56
56
|
var ctx = { splitApi: splitApi, eventTracker: eventTracker, impressionsTracker: impressionsTracker, telemetryTracker: telemetryTracker, sdkReadinessManager: sdkReadinessManager, readiness: readiness, settings: settings, storage: storage, platform: platform };
|
|
57
57
|
var syncManager = syncManagerFactory && syncManagerFactory(ctx);
|
|
58
58
|
ctx.syncManager = syncManager;
|
|
@@ -11,7 +11,7 @@ import { POLLING_SMART_PAUSING, POLLING_START, POLLING_STOP } from '../../logger
|
|
|
11
11
|
export function pollingManagerCSFactory(params) {
|
|
12
12
|
var splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
|
|
13
13
|
var log = settings.log;
|
|
14
|
-
var splitsSyncTask = splitsSyncTaskFactory(splitApi.fetchSplitChanges, storage, readiness, settings);
|
|
14
|
+
var splitsSyncTask = splitsSyncTaskFactory(splitApi.fetchSplitChanges, storage, readiness, settings, true);
|
|
15
15
|
// Map of matching keys to their corresponding MySegmentsSyncTask.
|
|
16
16
|
var mySegmentsSyncTasks = {};
|
|
17
17
|
var matchingKey = getMatching(settings.core.key);
|
|
@@ -4,6 +4,6 @@ import { splitChangesUpdaterFactory } from '../updaters/splitChangesUpdater';
|
|
|
4
4
|
/**
|
|
5
5
|
* Creates a sync task that periodically executes a `splitChangesUpdater` task
|
|
6
6
|
*/
|
|
7
|
-
export function splitsSyncTaskFactory(fetchSplitChanges, storage, readiness, settings) {
|
|
8
|
-
return syncTaskFactory(settings.log, splitChangesUpdaterFactory(settings.log, splitChangesFetcherFactory(fetchSplitChanges), storage.splits, storage.segments, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.featuresRefreshRate, 'splitChangesUpdater');
|
|
7
|
+
export function splitsSyncTaskFactory(fetchSplitChanges, storage, readiness, settings, isClientSide) {
|
|
8
|
+
return syncTaskFactory(settings.log, splitChangesUpdaterFactory(settings.log, splitChangesFetcherFactory(fetchSplitChanges), storage.splits, storage.segments, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, isClientSide), settings.scheduler.featuresRefreshRate, 'splitChangesUpdater');
|
|
9
9
|
}
|
|
@@ -64,7 +64,7 @@ export function computeSplitsMutation(entries) {
|
|
|
64
64
|
* @param requestTimeoutBeforeReady How long the updater will wait for the request to timeout. Default 0, i.e., never timeout.
|
|
65
65
|
* @param retriesOnFailureBeforeReady How many retries on `/splitChanges` we the updater do in case of failure or timeout. Default 0, i.e., no retries.
|
|
66
66
|
*/
|
|
67
|
-
export function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, segments, splitsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady) {
|
|
67
|
+
export function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, segments, splitsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, isClientSide) {
|
|
68
68
|
if (requestTimeoutBeforeReady === void 0) { requestTimeoutBeforeReady = 0; }
|
|
69
69
|
if (retriesOnFailureBeforeReady === void 0) { retriesOnFailureBeforeReady = 0; }
|
|
70
70
|
var startingUp = true;
|
|
@@ -106,7 +106,7 @@ export function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, seg
|
|
|
106
106
|
]).then(function () {
|
|
107
107
|
if (splitsEventEmitter) {
|
|
108
108
|
// To emit SDK_SPLITS_ARRIVED for server-side SDK, we must check that all registered segments have been fetched
|
|
109
|
-
return Promise.resolve(!splitsEventEmitter.splitsArrived || (since !== splitChanges.till && checkAllSegmentsExist(segments)))
|
|
109
|
+
return Promise.resolve(!splitsEventEmitter.splitsArrived || (since !== splitChanges.till && (isClientSide || checkAllSegmentsExist(segments))))
|
|
110
110
|
.catch(function () { return false; } /** noop. just to handle a possible `checkAllSegmentsExist` rejection, before emitting SDK event */)
|
|
111
111
|
.then(function (emitSplitsArrivedEvent) {
|
|
112
112
|
// emit SDK events
|
|
@@ -13,7 +13,8 @@ export function telemetryTrackerFactory(telemetryCache, now) {
|
|
|
13
13
|
telemetryCache.recordException(method);
|
|
14
14
|
return; // Don't track latency on exceptions
|
|
15
15
|
case SDK_NOT_READY: // @ts-ignore ITelemetryCacheAsync doesn't implement the method
|
|
16
|
-
|
|
16
|
+
if (telemetryCache.recordNonReadyUsage)
|
|
17
|
+
telemetryCache.recordNonReadyUsage();
|
|
17
18
|
}
|
|
18
19
|
telemetryCache.recordLatency(method, evalTime());
|
|
19
20
|
};
|
|
@@ -29,7 +30,8 @@ export function telemetryTrackerFactory(telemetryCache, now) {
|
|
|
29
30
|
};
|
|
30
31
|
},
|
|
31
32
|
sessionLength: function () {
|
|
32
|
-
telemetryCache.recordSessionLength
|
|
33
|
+
if (telemetryCache.recordSessionLength)
|
|
34
|
+
telemetryCache.recordSessionLength(startTime_1());
|
|
33
35
|
},
|
|
34
36
|
streamingEvent: function (e, d) {
|
|
35
37
|
if (e === AUTH_REJECTION) {
|
package/package.json
CHANGED
package/src/sdkFactory/index.ts
CHANGED
|
@@ -69,7 +69,7 @@ export function sdkFactory(params: ISdkFactoryParams): SplitIO.ICsSDK | SplitIO.
|
|
|
69
69
|
const telemetryTracker = telemetryTrackerFactory(storage.telemetry, platform.now);
|
|
70
70
|
|
|
71
71
|
// splitApi is used by SyncManager and Browser signal listener
|
|
72
|
-
const splitApi = splitApiFactory && splitApiFactory(settings, platform);
|
|
72
|
+
const splitApi = splitApiFactory && splitApiFactory(settings, platform, telemetryTracker);
|
|
73
73
|
|
|
74
74
|
const ctx: ISdkFactoryContext = { splitApi, eventTracker, impressionsTracker, telemetryTracker, sdkReadinessManager, readiness, settings, storage, platform };
|
|
75
75
|
|
package/src/sdkFactory/types.ts
CHANGED
|
@@ -64,7 +64,7 @@ export interface ISdkFactoryParams {
|
|
|
64
64
|
|
|
65
65
|
// Factory of Split Api (HTTP Client Service).
|
|
66
66
|
// It is not required when providing an asynchronous storage or offline SyncManager
|
|
67
|
-
splitApiFactory?: (settings: ISettings, platform: IPlatform) => ISplitApi,
|
|
67
|
+
splitApiFactory?: (settings: ISettings, platform: IPlatform, telemetryTracker: ITelemetryTracker) => ISplitApi,
|
|
68
68
|
|
|
69
69
|
// SyncManager factory.
|
|
70
70
|
// Not required when providing an asynchronous storage (consumer mode), but required in standalone mode to avoid SDK timeout.
|
|
@@ -20,7 +20,7 @@ export function pollingManagerCSFactory(
|
|
|
20
20
|
const { splitApi, storage, readiness, settings } = params;
|
|
21
21
|
const log = settings.log;
|
|
22
22
|
|
|
23
|
-
const splitsSyncTask: ISplitsSyncTask = splitsSyncTaskFactory(splitApi.fetchSplitChanges, storage, readiness, settings);
|
|
23
|
+
const splitsSyncTask: ISplitsSyncTask = splitsSyncTaskFactory(splitApi.fetchSplitChanges, storage, readiness, settings, true);
|
|
24
24
|
|
|
25
25
|
// Map of matching keys to their corresponding MySegmentsSyncTask.
|
|
26
26
|
const mySegmentsSyncTasks: Record<string, ISegmentsSyncTask> = {};
|
|
@@ -15,6 +15,7 @@ export function splitsSyncTaskFactory(
|
|
|
15
15
|
storage: IStorageSync,
|
|
16
16
|
readiness: IReadinessManager,
|
|
17
17
|
settings: ISettings,
|
|
18
|
+
isClientSide?: boolean
|
|
18
19
|
): ISplitsSyncTask {
|
|
19
20
|
return syncTaskFactory(
|
|
20
21
|
settings.log,
|
|
@@ -26,6 +27,7 @@ export function splitsSyncTaskFactory(
|
|
|
26
27
|
readiness.splits,
|
|
27
28
|
settings.startup.requestTimeoutBeforeReady,
|
|
28
29
|
settings.startup.retriesOnFailureBeforeReady,
|
|
30
|
+
isClientSide
|
|
29
31
|
),
|
|
30
32
|
settings.scheduler.featuresRefreshRate,
|
|
31
33
|
'splitChangesUpdater',
|
|
@@ -93,6 +93,7 @@ export function splitChangesUpdaterFactory(
|
|
|
93
93
|
splitsEventEmitter?: ISplitsEventEmitter,
|
|
94
94
|
requestTimeoutBeforeReady: number = 0,
|
|
95
95
|
retriesOnFailureBeforeReady: number = 0,
|
|
96
|
+
isClientSide?: boolean
|
|
96
97
|
): ISplitChangesUpdater {
|
|
97
98
|
|
|
98
99
|
let startingUp = true;
|
|
@@ -140,7 +141,7 @@ export function splitChangesUpdaterFactory(
|
|
|
140
141
|
|
|
141
142
|
if (splitsEventEmitter) {
|
|
142
143
|
// To emit SDK_SPLITS_ARRIVED for server-side SDK, we must check that all registered segments have been fetched
|
|
143
|
-
return Promise.resolve(!splitsEventEmitter.splitsArrived || (since !== splitChanges.till && checkAllSegmentsExist(segments)))
|
|
144
|
+
return Promise.resolve(!splitsEventEmitter.splitsArrived || (since !== splitChanges.till && (isClientSide || checkAllSegmentsExist(segments))))
|
|
144
145
|
.catch(() => false /** noop. just to handle a possible `checkAllSegmentsExist` rejection, before emitting SDK event */)
|
|
145
146
|
.then(emitSplitsArrivedEvent => {
|
|
146
147
|
// emit SDK events
|
|
@@ -22,7 +22,7 @@ export function telemetryTrackerFactory(
|
|
|
22
22
|
telemetryCache.recordException(method);
|
|
23
23
|
return; // Don't track latency on exceptions
|
|
24
24
|
case SDK_NOT_READY: // @ts-ignore ITelemetryCacheAsync doesn't implement the method
|
|
25
|
-
telemetryCache
|
|
25
|
+
if (telemetryCache.recordNonReadyUsage) telemetryCache.recordNonReadyUsage();
|
|
26
26
|
}
|
|
27
27
|
telemetryCache.recordLatency(method, evalTime());
|
|
28
28
|
};
|
|
@@ -36,8 +36,8 @@ export function telemetryTrackerFactory(
|
|
|
36
36
|
else (telemetryCache as ITelemetryCacheSync).recordSuccessfulSync(operation, now());
|
|
37
37
|
};
|
|
38
38
|
},
|
|
39
|
-
sessionLength() {
|
|
40
|
-
(telemetryCache
|
|
39
|
+
sessionLength() { // @ts-ignore ITelemetryCacheAsync doesn't implement the method
|
|
40
|
+
if (telemetryCache.recordSessionLength) telemetryCache.recordSessionLength(startTime());
|
|
41
41
|
},
|
|
42
42
|
streamingEvent(e, d) {
|
|
43
43
|
if (e === AUTH_REJECTION) {
|
|
@@ -49,7 +49,7 @@ export interface ISdkFactoryParams {
|
|
|
49
49
|
settings: ISettings;
|
|
50
50
|
platform: IPlatform;
|
|
51
51
|
storageFactory: (params: IStorageFactoryParams) => IStorageSync | IStorageAsync;
|
|
52
|
-
splitApiFactory?: (settings: ISettings, platform: IPlatform) => ISplitApi;
|
|
52
|
+
splitApiFactory?: (settings: ISettings, platform: IPlatform, telemetryTracker: ITelemetryTracker) => ISplitApi;
|
|
53
53
|
syncManagerFactory?: (params: ISdkFactoryContextSync) => ISyncManager;
|
|
54
54
|
sdkManagerFactory: (log: ILogger, splits: ISplitsCacheSync | ISplitsCacheAsync, sdkReadinessManager: ISdkReadinessManager) => SplitIO.IManager | SplitIO.IAsyncManager;
|
|
55
55
|
sdkClientMethodFactory: (params: ISdkFactoryContext) => ({
|
|
@@ -6,4 +6,4 @@ import { ISettings } from '../../../types';
|
|
|
6
6
|
/**
|
|
7
7
|
* Creates a sync task that periodically executes a `splitChangesUpdater` task
|
|
8
8
|
*/
|
|
9
|
-
export declare function splitsSyncTaskFactory(fetchSplitChanges: IFetchSplitChanges, storage: IStorageSync, readiness: IReadinessManager, settings: ISettings): ISplitsSyncTask;
|
|
9
|
+
export declare function splitsSyncTaskFactory(fetchSplitChanges: IFetchSplitChanges, storage: IStorageSync, readiness: IReadinessManager, settings: ISettings, isClientSide?: boolean): ISplitsSyncTask;
|
|
@@ -35,5 +35,5 @@ export declare function computeSplitsMutation(entries: ISplit[]): ISplitMutation
|
|
|
35
35
|
* @param requestTimeoutBeforeReady How long the updater will wait for the request to timeout. Default 0, i.e., never timeout.
|
|
36
36
|
* @param retriesOnFailureBeforeReady How many retries on `/splitChanges` we the updater do in case of failure or timeout. Default 0, i.e., no retries.
|
|
37
37
|
*/
|
|
38
|
-
export declare function splitChangesUpdaterFactory(log: ILogger, splitChangesFetcher: ISplitChangesFetcher, splits: ISplitsCacheBase, segments: ISegmentsCacheBase, splitsEventEmitter?: ISplitsEventEmitter, requestTimeoutBeforeReady?: number, retriesOnFailureBeforeReady?: number): ISplitChangesUpdater;
|
|
38
|
+
export declare function splitChangesUpdaterFactory(log: ILogger, splitChangesFetcher: ISplitChangesFetcher, splits: ISplitsCacheBase, segments: ISegmentsCacheBase, splitsEventEmitter?: ISplitsEventEmitter, requestTimeoutBeforeReady?: number, retriesOnFailureBeforeReady?: number, isClientSide?: boolean): ISplitChangesUpdater;
|
|
39
39
|
export {};
|