@splitsoftware/splitio-commons 3.1.1-rc.5 → 3.1.1-rc.6
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 +2 -1
- package/cjs/sync/submitters/submitterManager.js +53 -30
- package/cjs/sync/syncManagerOnline.js +4 -2
- package/esm/sync/submitters/submitterManager.js +53 -30
- package/esm/sync/syncManagerOnline.js +4 -2
- package/package.json +1 -1
- package/src/sync/submitters/submitterManager.ts +58 -32
- package/src/sync/syncManagerOnline.ts +3 -1
package/CHANGES.txt
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
3.2.0 (
|
|
1
|
+
3.2.0 (September 18, 2026)
|
|
2
2
|
- Added support for AI configs.
|
|
3
|
+
- Updated submitters to allow starting and executing them when the Configs SDK is ready.
|
|
3
4
|
- Removed Configs SDK-related types and modules and moved them to the Configs SDK repository.
|
|
4
5
|
|
|
5
6
|
3.1.0 (July 23, 2026)
|
|
@@ -6,41 +6,64 @@ var impressionsSubmitter_1 = require("./impressionsSubmitter");
|
|
|
6
6
|
var impressionCountsSubmitter_1 = require("./impressionCountsSubmitter");
|
|
7
7
|
var telemetrySubmitter_1 = require("./telemetrySubmitter");
|
|
8
8
|
var uniqueKeysSubmitter_1 = require("./uniqueKeysSubmitter");
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return {
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
var constants_1 = require("../../readiness/constants");
|
|
10
|
+
/**
|
|
11
|
+
* Creates a submitter manager.
|
|
12
|
+
*
|
|
13
|
+
* @param startWhenReady - If true, the submitters will only start and execute the underlying submitters when the SDK is ready.
|
|
14
|
+
* `true` for Configs SDK, `false` for Flags SDKs.
|
|
15
|
+
*/
|
|
16
|
+
function submitterManagerFactory(startWhenReady) {
|
|
17
|
+
return function (params) {
|
|
18
|
+
var readiness = params.readiness;
|
|
19
|
+
var submitters = [
|
|
20
|
+
(0, impressionsSubmitter_1.impressionsSubmitterFactory)(params),
|
|
21
|
+
(0, eventsSubmitter_1.eventsSubmitterFactory)(params),
|
|
22
|
+
(0, impressionCountsSubmitter_1.impressionCountsSubmitterFactory)(params),
|
|
23
|
+
(0, uniqueKeysSubmitter_1.uniqueKeysSubmitterFactory)(params)
|
|
24
|
+
];
|
|
25
|
+
var telemetrySubmitter = (0, telemetrySubmitter_1.telemetrySubmitterFactory)(params);
|
|
26
|
+
var isRunning = false;
|
|
27
|
+
function startSubmitters(onlyTelemetry) {
|
|
28
|
+
if (!isRunning)
|
|
29
|
+
return;
|
|
20
30
|
if (!onlyTelemetry)
|
|
21
31
|
submitters.forEach(function (submitter) { return submitter.start(); });
|
|
22
32
|
if (telemetrySubmitter)
|
|
23
33
|
telemetrySubmitter.start();
|
|
24
|
-
},
|
|
25
|
-
// `allExceptTelemetry` true if userConsent is changed to DECLINED
|
|
26
|
-
stop: function (allExceptTelemetry) {
|
|
27
|
-
submitters.forEach(function (submitter) { return submitter.stop(); });
|
|
28
|
-
if (!allExceptTelemetry && telemetrySubmitter)
|
|
29
|
-
telemetrySubmitter.stop();
|
|
30
|
-
},
|
|
31
|
-
isRunning: function () {
|
|
32
|
-
return submitters.some(function (submitter) { return submitter.isRunning(); });
|
|
33
|
-
},
|
|
34
|
-
// Flush data. Called with `onlyTelemetry` true if SDK is destroyed with userConsent not GRANTED
|
|
35
|
-
execute: function (onlyTelemetry) {
|
|
36
|
-
var promises = onlyTelemetry ? [] : submitters.map(function (submitter) { return submitter.execute(); });
|
|
37
|
-
if (telemetrySubmitter)
|
|
38
|
-
promises.push(telemetrySubmitter.execute());
|
|
39
|
-
return Promise.all(promises).then(function () { });
|
|
40
|
-
},
|
|
41
|
-
isExecuting: function () {
|
|
42
|
-
return submitters.some(function (submitter) { return submitter.isExecuting(); });
|
|
43
34
|
}
|
|
35
|
+
return {
|
|
36
|
+
// `onlyTelemetry` true if SDK is created with userConsent not GRANTED
|
|
37
|
+
start: function (onlyTelemetry) {
|
|
38
|
+
isRunning = true;
|
|
39
|
+
if (!startWhenReady || readiness.isReady())
|
|
40
|
+
startSubmitters(onlyTelemetry);
|
|
41
|
+
else
|
|
42
|
+
readiness.gate.once(constants_1.SDK_READY, function () { return startSubmitters(onlyTelemetry); });
|
|
43
|
+
},
|
|
44
|
+
// `allExceptTelemetry` true if userConsent is changed to DECLINED
|
|
45
|
+
stop: function (allExceptTelemetry) {
|
|
46
|
+
isRunning = false;
|
|
47
|
+
submitters.forEach(function (submitter) { return submitter.stop(); });
|
|
48
|
+
if (!allExceptTelemetry && telemetrySubmitter)
|
|
49
|
+
telemetrySubmitter.stop();
|
|
50
|
+
},
|
|
51
|
+
isRunning: function () {
|
|
52
|
+
return isRunning;
|
|
53
|
+
},
|
|
54
|
+
// Flush data. Called with `onlyTelemetry` true if SDK is destroyed with userConsent not GRANTED
|
|
55
|
+
execute: function (onlyTelemetry) {
|
|
56
|
+
if (startWhenReady && !readiness.isReady())
|
|
57
|
+
return Promise.resolve();
|
|
58
|
+
var promises = onlyTelemetry ? [] : submitters.map(function (submitter) { return submitter.execute(); });
|
|
59
|
+
if (telemetrySubmitter)
|
|
60
|
+
promises.push(telemetrySubmitter.execute());
|
|
61
|
+
return Promise.all(promises).then(function () { });
|
|
62
|
+
},
|
|
63
|
+
isExecuting: function () {
|
|
64
|
+
return submitters.some(function (submitter) { return submitter.isExecuting(); });
|
|
65
|
+
}
|
|
66
|
+
};
|
|
44
67
|
};
|
|
45
68
|
}
|
|
46
69
|
exports.submitterManagerFactory = submitterManagerFactory;
|
|
@@ -15,8 +15,10 @@ var AbstractDefinitionsCacheSync_1 = require("../storages/AbstractDefinitionsCac
|
|
|
15
15
|
* @param pollingManagerFactory - allows to specialize the SyncManager for server-side or client-side API by passing
|
|
16
16
|
* `pollingManagerSSFactory` or `pollingManagerCSFactory` respectively.
|
|
17
17
|
* @param pushManagerFactory - optional to build a SyncManager with or without streaming support
|
|
18
|
+
* @param submitterManagerFactory - specify the submitter manager factory to use
|
|
18
19
|
*/
|
|
19
|
-
function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
|
|
20
|
+
function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory, _submitterManagerFactory) {
|
|
21
|
+
if (_submitterManagerFactory === void 0) { _submitterManagerFactory = (0, submitterManager_1.submitterManagerFactory)(); }
|
|
20
22
|
/**
|
|
21
23
|
* SyncManager factory for modular SDK
|
|
22
24
|
*/
|
|
@@ -30,7 +32,7 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
|
|
|
30
32
|
undefined;
|
|
31
33
|
/** Submitter Manager */
|
|
32
34
|
// It is not injected as push and polling managers, because at the moment it is required
|
|
33
|
-
var submitterManager = (
|
|
35
|
+
var submitterManager = _submitterManagerFactory(params);
|
|
34
36
|
/** Sync Manager logic */
|
|
35
37
|
function startPolling() {
|
|
36
38
|
if (pollingManager.isRunning()) {
|
|
@@ -3,40 +3,63 @@ import { impressionsSubmitterFactory } from './impressionsSubmitter';
|
|
|
3
3
|
import { impressionCountsSubmitterFactory } from './impressionCountsSubmitter';
|
|
4
4
|
import { telemetrySubmitterFactory } from './telemetrySubmitter';
|
|
5
5
|
import { uniqueKeysSubmitterFactory } from './uniqueKeysSubmitter';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return {
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
import { SDK_READY } from '../../readiness/constants';
|
|
7
|
+
/**
|
|
8
|
+
* Creates a submitter manager.
|
|
9
|
+
*
|
|
10
|
+
* @param startWhenReady - If true, the submitters will only start and execute the underlying submitters when the SDK is ready.
|
|
11
|
+
* `true` for Configs SDK, `false` for Flags SDKs.
|
|
12
|
+
*/
|
|
13
|
+
export function submitterManagerFactory(startWhenReady) {
|
|
14
|
+
return function (params) {
|
|
15
|
+
var readiness = params.readiness;
|
|
16
|
+
var submitters = [
|
|
17
|
+
impressionsSubmitterFactory(params),
|
|
18
|
+
eventsSubmitterFactory(params),
|
|
19
|
+
impressionCountsSubmitterFactory(params),
|
|
20
|
+
uniqueKeysSubmitterFactory(params)
|
|
21
|
+
];
|
|
22
|
+
var telemetrySubmitter = telemetrySubmitterFactory(params);
|
|
23
|
+
var isRunning = false;
|
|
24
|
+
function startSubmitters(onlyTelemetry) {
|
|
25
|
+
if (!isRunning)
|
|
26
|
+
return;
|
|
17
27
|
if (!onlyTelemetry)
|
|
18
28
|
submitters.forEach(function (submitter) { return submitter.start(); });
|
|
19
29
|
if (telemetrySubmitter)
|
|
20
30
|
telemetrySubmitter.start();
|
|
21
|
-
},
|
|
22
|
-
// `allExceptTelemetry` true if userConsent is changed to DECLINED
|
|
23
|
-
stop: function (allExceptTelemetry) {
|
|
24
|
-
submitters.forEach(function (submitter) { return submitter.stop(); });
|
|
25
|
-
if (!allExceptTelemetry && telemetrySubmitter)
|
|
26
|
-
telemetrySubmitter.stop();
|
|
27
|
-
},
|
|
28
|
-
isRunning: function () {
|
|
29
|
-
return submitters.some(function (submitter) { return submitter.isRunning(); });
|
|
30
|
-
},
|
|
31
|
-
// Flush data. Called with `onlyTelemetry` true if SDK is destroyed with userConsent not GRANTED
|
|
32
|
-
execute: function (onlyTelemetry) {
|
|
33
|
-
var promises = onlyTelemetry ? [] : submitters.map(function (submitter) { return submitter.execute(); });
|
|
34
|
-
if (telemetrySubmitter)
|
|
35
|
-
promises.push(telemetrySubmitter.execute());
|
|
36
|
-
return Promise.all(promises).then(function () { });
|
|
37
|
-
},
|
|
38
|
-
isExecuting: function () {
|
|
39
|
-
return submitters.some(function (submitter) { return submitter.isExecuting(); });
|
|
40
31
|
}
|
|
32
|
+
return {
|
|
33
|
+
// `onlyTelemetry` true if SDK is created with userConsent not GRANTED
|
|
34
|
+
start: function (onlyTelemetry) {
|
|
35
|
+
isRunning = true;
|
|
36
|
+
if (!startWhenReady || readiness.isReady())
|
|
37
|
+
startSubmitters(onlyTelemetry);
|
|
38
|
+
else
|
|
39
|
+
readiness.gate.once(SDK_READY, function () { return startSubmitters(onlyTelemetry); });
|
|
40
|
+
},
|
|
41
|
+
// `allExceptTelemetry` true if userConsent is changed to DECLINED
|
|
42
|
+
stop: function (allExceptTelemetry) {
|
|
43
|
+
isRunning = false;
|
|
44
|
+
submitters.forEach(function (submitter) { return submitter.stop(); });
|
|
45
|
+
if (!allExceptTelemetry && telemetrySubmitter)
|
|
46
|
+
telemetrySubmitter.stop();
|
|
47
|
+
},
|
|
48
|
+
isRunning: function () {
|
|
49
|
+
return isRunning;
|
|
50
|
+
},
|
|
51
|
+
// Flush data. Called with `onlyTelemetry` true if SDK is destroyed with userConsent not GRANTED
|
|
52
|
+
execute: function (onlyTelemetry) {
|
|
53
|
+
if (startWhenReady && !readiness.isReady())
|
|
54
|
+
return Promise.resolve();
|
|
55
|
+
var promises = onlyTelemetry ? [] : submitters.map(function (submitter) { return submitter.execute(); });
|
|
56
|
+
if (telemetrySubmitter)
|
|
57
|
+
promises.push(telemetrySubmitter.execute());
|
|
58
|
+
return Promise.all(promises).then(function () { });
|
|
59
|
+
},
|
|
60
|
+
isExecuting: function () {
|
|
61
|
+
return submitters.some(function (submitter) { return submitter.isExecuting(); });
|
|
62
|
+
}
|
|
63
|
+
};
|
|
41
64
|
};
|
|
42
65
|
}
|
|
@@ -12,8 +12,10 @@ import { usesSegmentsSync } from '../storages/AbstractDefinitionsCacheSync';
|
|
|
12
12
|
* @param pollingManagerFactory - allows to specialize the SyncManager for server-side or client-side API by passing
|
|
13
13
|
* `pollingManagerSSFactory` or `pollingManagerCSFactory` respectively.
|
|
14
14
|
* @param pushManagerFactory - optional to build a SyncManager with or without streaming support
|
|
15
|
+
* @param submitterManagerFactory - specify the submitter manager factory to use
|
|
15
16
|
*/
|
|
16
|
-
export function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
|
|
17
|
+
export function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory, _submitterManagerFactory) {
|
|
18
|
+
if (_submitterManagerFactory === void 0) { _submitterManagerFactory = submitterManagerFactory(); }
|
|
17
19
|
/**
|
|
18
20
|
* SyncManager factory for modular SDK
|
|
19
21
|
*/
|
|
@@ -27,7 +29,7 @@ export function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFacto
|
|
|
27
29
|
undefined;
|
|
28
30
|
/** Submitter Manager */
|
|
29
31
|
// It is not injected as push and polling managers, because at the moment it is required
|
|
30
|
-
var submitterManager =
|
|
32
|
+
var submitterManager = _submitterManagerFactory(params);
|
|
31
33
|
/** Sync Manager logic */
|
|
32
34
|
function startPolling() {
|
|
33
35
|
if (pollingManager.isRunning()) {
|
package/package.json
CHANGED
|
@@ -5,44 +5,70 @@ import { telemetrySubmitterFactory } from './telemetrySubmitter';
|
|
|
5
5
|
import { ISdkFactoryContextSync } from '../../sdkFactory/types';
|
|
6
6
|
import { ISubmitterManager } from './types';
|
|
7
7
|
import { uniqueKeysSubmitterFactory } from './uniqueKeysSubmitter';
|
|
8
|
+
import { SDK_READY } from '../../readiness/constants';
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Creates a submitter manager.
|
|
12
|
+
*
|
|
13
|
+
* @param startWhenReady - If true, the submitters will only start and execute the underlying submitters when the SDK is ready.
|
|
14
|
+
* `true` for Configs SDK, `false` for Flags SDKs.
|
|
15
|
+
*/
|
|
16
|
+
export function submitterManagerFactory(startWhenReady?: boolean) {
|
|
10
17
|
|
|
11
|
-
|
|
12
|
-
impressionsSubmitterFactory(params),
|
|
13
|
-
eventsSubmitterFactory(params),
|
|
14
|
-
impressionCountsSubmitterFactory(params),
|
|
15
|
-
uniqueKeysSubmitterFactory(params)
|
|
16
|
-
];
|
|
18
|
+
return function (params: ISdkFactoryContextSync): ISubmitterManager {
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
const { readiness } = params;
|
|
21
|
+
|
|
22
|
+
const submitters = [
|
|
23
|
+
impressionsSubmitterFactory(params),
|
|
24
|
+
eventsSubmitterFactory(params),
|
|
25
|
+
impressionCountsSubmitterFactory(params),
|
|
26
|
+
uniqueKeysSubmitterFactory(params)
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
const telemetrySubmitter = telemetrySubmitterFactory(params);
|
|
30
|
+
let isRunning = false;
|
|
31
|
+
|
|
32
|
+
function startSubmitters(onlyTelemetry?: boolean) {
|
|
33
|
+
if (!isRunning) return;
|
|
19
34
|
|
|
20
|
-
return {
|
|
21
|
-
// `onlyTelemetry` true if SDK is created with userConsent not GRANTED
|
|
22
|
-
start(onlyTelemetry?: boolean) {
|
|
23
35
|
if (!onlyTelemetry) submitters.forEach(submitter => submitter.start());
|
|
24
36
|
if (telemetrySubmitter) telemetrySubmitter.start();
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
// `allExceptTelemetry` true if userConsent is changed to DECLINED
|
|
28
|
-
stop(allExceptTelemetry?: boolean) {
|
|
29
|
-
submitters.forEach(submitter => submitter.stop());
|
|
30
|
-
if (!allExceptTelemetry && telemetrySubmitter) telemetrySubmitter.stop();
|
|
31
|
-
},
|
|
32
|
-
|
|
33
|
-
isRunning() {
|
|
34
|
-
return submitters.some(submitter => submitter.isRunning());
|
|
35
|
-
},
|
|
36
|
-
|
|
37
|
-
// Flush data. Called with `onlyTelemetry` true if SDK is destroyed with userConsent not GRANTED
|
|
38
|
-
execute(onlyTelemetry?: boolean) {
|
|
39
|
-
const promises = onlyTelemetry ? [] : submitters.map(submitter => submitter.execute());
|
|
40
|
-
if (telemetrySubmitter) promises.push(telemetrySubmitter.execute());
|
|
41
|
-
return Promise.all(promises).then(() => { });
|
|
42
|
-
},
|
|
43
|
-
|
|
44
|
-
isExecuting() {
|
|
45
|
-
return submitters.some(submitter => submitter.isExecuting());
|
|
46
37
|
}
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
// `onlyTelemetry` true if SDK is created with userConsent not GRANTED
|
|
41
|
+
start(onlyTelemetry?: boolean) {
|
|
42
|
+
isRunning = true;
|
|
43
|
+
|
|
44
|
+
if (!startWhenReady || readiness.isReady()) startSubmitters(onlyTelemetry);
|
|
45
|
+
else readiness.gate.once(SDK_READY, () => startSubmitters(onlyTelemetry));
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
// `allExceptTelemetry` true if userConsent is changed to DECLINED
|
|
49
|
+
stop(allExceptTelemetry?: boolean) {
|
|
50
|
+
isRunning = false;
|
|
51
|
+
|
|
52
|
+
submitters.forEach(submitter => submitter.stop());
|
|
53
|
+
if (!allExceptTelemetry && telemetrySubmitter) telemetrySubmitter.stop();
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
isRunning() {
|
|
57
|
+
return isRunning;
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
// Flush data. Called with `onlyTelemetry` true if SDK is destroyed with userConsent not GRANTED
|
|
61
|
+
execute(onlyTelemetry?: boolean) {
|
|
62
|
+
if (startWhenReady && !readiness.isReady()) return Promise.resolve();
|
|
63
|
+
|
|
64
|
+
const promises = onlyTelemetry ? [] : submitters.map(submitter => submitter.execute());
|
|
65
|
+
if (telemetrySubmitter) promises.push(telemetrySubmitter.execute());
|
|
66
|
+
return Promise.all(promises).then(() => { });
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
isExecuting() {
|
|
70
|
+
return submitters.some(submitter => submitter.isExecuting());
|
|
71
|
+
}
|
|
72
|
+
};
|
|
47
73
|
};
|
|
48
74
|
}
|
|
@@ -19,10 +19,12 @@ import { usesSegmentsSync } from '../storages/AbstractDefinitionsCacheSync';
|
|
|
19
19
|
* @param pollingManagerFactory - allows to specialize the SyncManager for server-side or client-side API by passing
|
|
20
20
|
* `pollingManagerSSFactory` or `pollingManagerCSFactory` respectively.
|
|
21
21
|
* @param pushManagerFactory - optional to build a SyncManager with or without streaming support
|
|
22
|
+
* @param submitterManagerFactory - specify the submitter manager factory to use
|
|
22
23
|
*/
|
|
23
24
|
export function syncManagerOnlineFactory(
|
|
24
25
|
pollingManagerFactory?: (params: ISdkFactoryContextSync) => IPollingManager,
|
|
25
26
|
pushManagerFactory?: (params: ISdkFactoryContextSync, pollingManager: IPollingManager) => IPushManager | undefined,
|
|
27
|
+
_submitterManagerFactory = submitterManagerFactory(),
|
|
26
28
|
): (params: ISdkFactoryContextSync) => ISyncManagerCS {
|
|
27
29
|
|
|
28
30
|
/**
|
|
@@ -42,7 +44,7 @@ export function syncManagerOnlineFactory(
|
|
|
42
44
|
|
|
43
45
|
/** Submitter Manager */
|
|
44
46
|
// It is not injected as push and polling managers, because at the moment it is required
|
|
45
|
-
const submitterManager =
|
|
47
|
+
const submitterManager = _submitterManagerFactory(params);
|
|
46
48
|
|
|
47
49
|
/** Sync Manager logic */
|
|
48
50
|
|