@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.
@@ -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
- telemetryCache === null || telemetryCache === void 0 ? void 0 : telemetryCache.recordNonReadyUsage();
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(startTime_1());
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) {
@@ -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
- telemetryCache === null || telemetryCache === void 0 ? void 0 : telemetryCache.recordNonReadyUsage();
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(startTime_1());
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@splitsoftware/splitio-commons",
3
- "version": "1.3.2-rc.0",
3
+ "version": "1.3.2-rc.1",
4
4
  "description": "Split Javascript SDK common components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -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
 
@@ -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?.recordNonReadyUsage();
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 as ITelemetryCacheSync).recordSessionLength(startTime());
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 {};