@splitsoftware/splitio-commons 3.0.0-rc.1 → 3.0.0-rc.3
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/services/splitApi.js +8 -4
- package/cjs/sync/polling/pollingManagerSS.js +3 -3
- package/cjs/sync/polling/syncTasks/segmentsSyncTask.js +2 -3
- package/cjs/sync/syncManagerOnline.js +6 -4
- package/cjs/utils/settingsValidation/index.js +2 -0
- package/cjs/utils/settingsValidation/url.js +5 -1
- package/esm/services/splitApi.js +8 -4
- package/esm/sync/polling/pollingManagerSS.js +3 -3
- package/esm/sync/polling/syncTasks/segmentsSyncTask.js +2 -3
- package/esm/sync/syncManagerOnline.js +6 -4
- package/esm/utils/settingsValidation/index.js +2 -0
- package/esm/utils/settingsValidation/url.js +5 -1
- package/package.json +1 -1
- package/src/services/splitApi.ts +9 -4
- package/src/services/types.ts +2 -1
- package/src/sync/polling/pollingManagerSS.ts +5 -4
- package/src/sync/polling/syncTasks/segmentsSyncTask.ts +3 -4
- package/src/sync/syncManagerOnline.ts +7 -5
- package/src/utils/settingsValidation/index.ts +2 -0
- package/src/utils/settingsValidation/url.ts +5 -1
- package/types/splitio.d.ts +11 -9
package/cjs/services/splitApi.js
CHANGED
|
@@ -50,14 +50,18 @@ function splitApiFactory(settings, platform, telemetryTracker, secureSplitHttpCl
|
|
|
50
50
|
throw err;
|
|
51
51
|
});
|
|
52
52
|
},
|
|
53
|
+
fetchSegmentChanges: function (since, segmentName, noCache, till) {
|
|
54
|
+
var url = "".concat(urls.sdk, "/segmentChanges/").concat(segmentName, "?since=").concat(since).concat(till ? '&till=' + till : '');
|
|
55
|
+
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(constants_1.SEGMENT));
|
|
56
|
+
},
|
|
53
57
|
// @TODO support filterQueryString and handle ERROR_TOO_MANY_SETS error
|
|
54
58
|
fetchConfigs: function (since, noCache, till) {
|
|
55
|
-
var url = "".concat(urls.
|
|
59
|
+
var url = "".concat(urls.configs, "/v1/configs?since=").concat(since).concat(filterQueryString || '').concat(till ? '&till=' + till : '');
|
|
56
60
|
return (secureSplitHttpClient || splitHttpClient)(url, noCache ? noCacheHeaderOptions : undefined);
|
|
57
61
|
},
|
|
58
|
-
|
|
59
|
-
var url = "".concat(urls.
|
|
60
|
-
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined
|
|
62
|
+
fetchConfigsSegmentChanges: function (since, segmentName, noCache, till) {
|
|
63
|
+
var url = "".concat(urls.configs, "/v1/segmentChanges/").concat(segmentName, "?since=").concat(since).concat(till ? '&till=' + till : '');
|
|
64
|
+
return (secureSplitHttpClient || splitHttpClient)(url, noCache ? noCacheHeaderOptions : undefined);
|
|
61
65
|
},
|
|
62
66
|
fetchMemberships: function (userMatchingKey, noCache, till) {
|
|
63
67
|
/**
|
|
@@ -7,11 +7,11 @@ var constants_1 = require("../../logger/constants");
|
|
|
7
7
|
/**
|
|
8
8
|
* Expose start / stop mechanism for pulling data from services.
|
|
9
9
|
*/
|
|
10
|
-
function pollingManagerSSFactory(params, definitionChangesFetcher) {
|
|
11
|
-
var
|
|
10
|
+
function pollingManagerSSFactory(params, definitionChangesFetcher, segmentChangesFetcher) {
|
|
11
|
+
var storage = params.storage, readiness = params.readiness, settings = params.settings;
|
|
12
12
|
var log = settings.log;
|
|
13
13
|
var definitionsSyncTask = (0, definitionsSyncTask_1.definitionsSyncTaskFactory)(definitionChangesFetcher, storage, readiness, settings);
|
|
14
|
-
var segmentsSyncTask = (0, segmentsSyncTask_1.segmentsSyncTaskFactory)(
|
|
14
|
+
var segmentsSyncTask = (0, segmentsSyncTask_1.segmentsSyncTaskFactory)(segmentChangesFetcher, storage, readiness, settings);
|
|
15
15
|
return {
|
|
16
16
|
definitionsSyncTask: definitionsSyncTask,
|
|
17
17
|
segmentsSyncTask: segmentsSyncTask,
|
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.segmentsSyncTaskFactory = void 0;
|
|
4
4
|
var syncTask_1 = require("../../syncTask");
|
|
5
|
-
var segmentChangesFetcher_1 = require("../fetchers/segmentChangesFetcher");
|
|
6
5
|
var segmentChangesUpdater_1 = require("../updaters/segmentChangesUpdater");
|
|
7
6
|
/**
|
|
8
7
|
* Creates a sync task that periodically executes a `segmentChangesUpdater` task
|
|
9
8
|
*/
|
|
10
|
-
function segmentsSyncTaskFactory(
|
|
11
|
-
return (0, syncTask_1.syncTaskFactory)(settings.log, (0, segmentChangesUpdater_1.segmentChangesUpdaterFactory)(settings.log,
|
|
9
|
+
function segmentsSyncTaskFactory(segmentChangesFetcher, storage, readiness, settings) {
|
|
10
|
+
return (0, syncTask_1.syncTaskFactory)(settings.log, (0, segmentChangesUpdater_1.segmentChangesUpdaterFactory)(settings.log, segmentChangesFetcher, storage.segments, readiness, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.segmentsRefreshRate, 'segmentChangesUpdater');
|
|
12
11
|
}
|
|
13
12
|
exports.segmentsSyncTaskFactory = segmentsSyncTaskFactory;
|
|
@@ -9,6 +9,7 @@ var constants_3 = require("../utils/constants");
|
|
|
9
9
|
var constants_4 = require("../readiness/constants");
|
|
10
10
|
var AbstractDefinitionsCacheSync_1 = require("../storages/AbstractDefinitionsCacheSync");
|
|
11
11
|
var splitChangesFetcher_1 = require("./polling/fetchers/splitChangesFetcher");
|
|
12
|
+
var segmentChangesFetcher_1 = require("./polling/fetchers/segmentChangesFetcher");
|
|
12
13
|
/**
|
|
13
14
|
* Online SyncManager factory.
|
|
14
15
|
* Can be used for server-side API, and client-side API with or without multiple clients.
|
|
@@ -18,21 +19,22 @@ var splitChangesFetcher_1 = require("./polling/fetchers/splitChangesFetcher");
|
|
|
18
19
|
* @param pushManagerFactory - optional to build a SyncManager with or without streaming support
|
|
19
20
|
* @param definitionChangesFetcherFactory - optional to replace the default split changes fetcher
|
|
20
21
|
*/
|
|
21
|
-
function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory,
|
|
22
|
-
if (
|
|
22
|
+
function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory, definitionFetcherFactory, segmentFetcherFactory) {
|
|
23
|
+
if (definitionFetcherFactory === void 0) { definitionFetcherFactory = splitChangesFetcher_1.splitChangesFetcherFactory; }
|
|
24
|
+
if (segmentFetcherFactory === void 0) { segmentFetcherFactory = function (params) { return (0, segmentChangesFetcher_1.segmentChangesFetcherFactory)(params.splitApi.fetchSegmentChanges); }; }
|
|
23
25
|
/**
|
|
24
26
|
* SyncManager factory for modular SDK
|
|
25
27
|
*/
|
|
26
28
|
return function (params) {
|
|
27
29
|
var settings = params.settings, _a = params.settings, log = _a.log, streamingEnabled = _a.streamingEnabled, syncEnabled = _a.sync.enabled, telemetryTracker = params.telemetryTracker, storage = params.storage, readiness = params.readiness;
|
|
28
30
|
/** Polling Manager */
|
|
29
|
-
var pollingManager = pollingManagerFactory && pollingManagerFactory(params,
|
|
31
|
+
var pollingManager = pollingManagerFactory && pollingManagerFactory(params, definitionFetcherFactory(params), segmentFetcherFactory(params));
|
|
30
32
|
/** Push Manager */
|
|
31
33
|
var pushManager = syncEnabled && streamingEnabled && pollingManager && pushManagerFactory ?
|
|
32
34
|
pushManagerFactory(params, pollingManager) :
|
|
33
35
|
undefined;
|
|
34
36
|
/** Submitter Manager */
|
|
35
|
-
// It is not
|
|
37
|
+
// It is not injected as push and polling managers, because at the moment it is required
|
|
36
38
|
var submitterManager = (0, submitterManager_1.submitterManagerFactory)(params);
|
|
37
39
|
/** Sync Manager logic */
|
|
38
40
|
function startPolling() {
|
|
@@ -55,6 +55,8 @@ exports.base = {
|
|
|
55
55
|
streaming: 'https://streaming.split.io',
|
|
56
56
|
// Telemetry Server
|
|
57
57
|
telemetry: 'https://telemetry.split.io/api',
|
|
58
|
+
// Configs Server
|
|
59
|
+
configs: 'https://configs.split.io/api',
|
|
58
60
|
},
|
|
59
61
|
// Defines which kind of storage we should instantiate.
|
|
60
62
|
storage: undefined,
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.url = void 0;
|
|
4
|
-
var telemetryEndpointMatcher = /^\/v1\/metrics\/(config|usage)/;
|
|
4
|
+
var telemetryEndpointMatcher = /^\/v1\/(metrics|keys)\/(config|usage|ss|cs)/;
|
|
5
5
|
var eventsEndpointMatcher = /^\/(testImpressions|metrics|events)/;
|
|
6
6
|
var authEndpointMatcher = /^\/(v2|v3)\/auth/;
|
|
7
7
|
var streamingEndpointMatcher = /^\/(sse|event-stream)/;
|
|
8
|
+
var configsEndpointMatcher = /^\/v1\/(configs|segmentChanges)/;
|
|
8
9
|
/**
|
|
9
10
|
* Get URL based on a given target (path).
|
|
10
11
|
* ATM, it is only used for testing purposes.
|
|
@@ -26,6 +27,9 @@ function url(settings, target) {
|
|
|
26
27
|
if (streamingEndpointMatcher.test(target)) {
|
|
27
28
|
return "".concat(settings.urls.streaming).concat(target);
|
|
28
29
|
}
|
|
30
|
+
if (configsEndpointMatcher.test(target)) {
|
|
31
|
+
return "".concat(settings.urls.configs).concat(target);
|
|
32
|
+
}
|
|
29
33
|
return "".concat(settings.urls.sdk).concat(target);
|
|
30
34
|
}
|
|
31
35
|
exports.url = url;
|
package/esm/services/splitApi.js
CHANGED
|
@@ -47,14 +47,18 @@ export function splitApiFactory(settings, platform, telemetryTracker, secureSpli
|
|
|
47
47
|
throw err;
|
|
48
48
|
});
|
|
49
49
|
},
|
|
50
|
+
fetchSegmentChanges: function (since, segmentName, noCache, till) {
|
|
51
|
+
var url = "".concat(urls.sdk, "/segmentChanges/").concat(segmentName, "?since=").concat(since).concat(till ? '&till=' + till : '');
|
|
52
|
+
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SEGMENT));
|
|
53
|
+
},
|
|
50
54
|
// @TODO support filterQueryString and handle ERROR_TOO_MANY_SETS error
|
|
51
55
|
fetchConfigs: function (since, noCache, till) {
|
|
52
|
-
var url = "".concat(urls.
|
|
56
|
+
var url = "".concat(urls.configs, "/v1/configs?since=").concat(since).concat(filterQueryString || '').concat(till ? '&till=' + till : '');
|
|
53
57
|
return (secureSplitHttpClient || splitHttpClient)(url, noCache ? noCacheHeaderOptions : undefined);
|
|
54
58
|
},
|
|
55
|
-
|
|
56
|
-
var url = "".concat(urls.
|
|
57
|
-
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined
|
|
59
|
+
fetchConfigsSegmentChanges: function (since, segmentName, noCache, till) {
|
|
60
|
+
var url = "".concat(urls.configs, "/v1/segmentChanges/").concat(segmentName, "?since=").concat(since).concat(till ? '&till=' + till : '');
|
|
61
|
+
return (secureSplitHttpClient || splitHttpClient)(url, noCache ? noCacheHeaderOptions : undefined);
|
|
58
62
|
},
|
|
59
63
|
fetchMemberships: function (userMatchingKey, noCache, till) {
|
|
60
64
|
/**
|
|
@@ -4,11 +4,11 @@ import { POLLING_START, POLLING_STOP, LOG_PREFIX_SYNC_POLLING } from '../../logg
|
|
|
4
4
|
/**
|
|
5
5
|
* Expose start / stop mechanism for pulling data from services.
|
|
6
6
|
*/
|
|
7
|
-
export function pollingManagerSSFactory(params, definitionChangesFetcher) {
|
|
8
|
-
var
|
|
7
|
+
export function pollingManagerSSFactory(params, definitionChangesFetcher, segmentChangesFetcher) {
|
|
8
|
+
var storage = params.storage, readiness = params.readiness, settings = params.settings;
|
|
9
9
|
var log = settings.log;
|
|
10
10
|
var definitionsSyncTask = definitionsSyncTaskFactory(definitionChangesFetcher, storage, readiness, settings);
|
|
11
|
-
var segmentsSyncTask = segmentsSyncTaskFactory(
|
|
11
|
+
var segmentsSyncTask = segmentsSyncTaskFactory(segmentChangesFetcher, storage, readiness, settings);
|
|
12
12
|
return {
|
|
13
13
|
definitionsSyncTask: definitionsSyncTask,
|
|
14
14
|
segmentsSyncTask: segmentsSyncTask,
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { syncTaskFactory } from '../../syncTask';
|
|
2
|
-
import { segmentChangesFetcherFactory } from '../fetchers/segmentChangesFetcher';
|
|
3
2
|
import { segmentChangesUpdaterFactory } from '../updaters/segmentChangesUpdater';
|
|
4
3
|
/**
|
|
5
4
|
* Creates a sync task that periodically executes a `segmentChangesUpdater` task
|
|
6
5
|
*/
|
|
7
|
-
export function segmentsSyncTaskFactory(
|
|
8
|
-
return syncTaskFactory(settings.log, segmentChangesUpdaterFactory(settings.log,
|
|
6
|
+
export function segmentsSyncTaskFactory(segmentChangesFetcher, storage, readiness, settings) {
|
|
7
|
+
return syncTaskFactory(settings.log, segmentChangesUpdaterFactory(settings.log, segmentChangesFetcher, storage.segments, readiness, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.segmentsRefreshRate, 'segmentChangesUpdater');
|
|
9
8
|
}
|
|
@@ -6,6 +6,7 @@ import { POLLING, STREAMING, SYNC_MODE_UPDATE } from '../utils/constants';
|
|
|
6
6
|
import { SDK_DEFINITIONS_CACHE_LOADED } from '../readiness/constants';
|
|
7
7
|
import { usesSegmentsSync } from '../storages/AbstractDefinitionsCacheSync';
|
|
8
8
|
import { splitChangesFetcherFactory } from './polling/fetchers/splitChangesFetcher';
|
|
9
|
+
import { segmentChangesFetcherFactory } from './polling/fetchers/segmentChangesFetcher';
|
|
9
10
|
/**
|
|
10
11
|
* Online SyncManager factory.
|
|
11
12
|
* Can be used for server-side API, and client-side API with or without multiple clients.
|
|
@@ -15,21 +16,22 @@ import { splitChangesFetcherFactory } from './polling/fetchers/splitChangesFetch
|
|
|
15
16
|
* @param pushManagerFactory - optional to build a SyncManager with or without streaming support
|
|
16
17
|
* @param definitionChangesFetcherFactory - optional to replace the default split changes fetcher
|
|
17
18
|
*/
|
|
18
|
-
export function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory,
|
|
19
|
-
if (
|
|
19
|
+
export function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory, definitionFetcherFactory, segmentFetcherFactory) {
|
|
20
|
+
if (definitionFetcherFactory === void 0) { definitionFetcherFactory = splitChangesFetcherFactory; }
|
|
21
|
+
if (segmentFetcherFactory === void 0) { segmentFetcherFactory = function (params) { return segmentChangesFetcherFactory(params.splitApi.fetchSegmentChanges); }; }
|
|
20
22
|
/**
|
|
21
23
|
* SyncManager factory for modular SDK
|
|
22
24
|
*/
|
|
23
25
|
return function (params) {
|
|
24
26
|
var settings = params.settings, _a = params.settings, log = _a.log, streamingEnabled = _a.streamingEnabled, syncEnabled = _a.sync.enabled, telemetryTracker = params.telemetryTracker, storage = params.storage, readiness = params.readiness;
|
|
25
27
|
/** Polling Manager */
|
|
26
|
-
var pollingManager = pollingManagerFactory && pollingManagerFactory(params,
|
|
28
|
+
var pollingManager = pollingManagerFactory && pollingManagerFactory(params, definitionFetcherFactory(params), segmentFetcherFactory(params));
|
|
27
29
|
/** Push Manager */
|
|
28
30
|
var pushManager = syncEnabled && streamingEnabled && pollingManager && pushManagerFactory ?
|
|
29
31
|
pushManagerFactory(params, pollingManager) :
|
|
30
32
|
undefined;
|
|
31
33
|
/** Submitter Manager */
|
|
32
|
-
// It is not
|
|
34
|
+
// It is not injected as push and polling managers, because at the moment it is required
|
|
33
35
|
var submitterManager = submitterManagerFactory(params);
|
|
34
36
|
/** Sync Manager logic */
|
|
35
37
|
function startPolling() {
|
|
@@ -52,6 +52,8 @@ export var base = {
|
|
|
52
52
|
streaming: 'https://streaming.split.io',
|
|
53
53
|
// Telemetry Server
|
|
54
54
|
telemetry: 'https://telemetry.split.io/api',
|
|
55
|
+
// Configs Server
|
|
56
|
+
configs: 'https://configs.split.io/api',
|
|
55
57
|
},
|
|
56
58
|
// Defines which kind of storage we should instantiate.
|
|
57
59
|
storage: undefined,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
var telemetryEndpointMatcher = /^\/v1\/metrics\/(config|usage)/;
|
|
1
|
+
var telemetryEndpointMatcher = /^\/v1\/(metrics|keys)\/(config|usage|ss|cs)/;
|
|
2
2
|
var eventsEndpointMatcher = /^\/(testImpressions|metrics|events)/;
|
|
3
3
|
var authEndpointMatcher = /^\/(v2|v3)\/auth/;
|
|
4
4
|
var streamingEndpointMatcher = /^\/(sse|event-stream)/;
|
|
5
|
+
var configsEndpointMatcher = /^\/v1\/(configs|segmentChanges)/;
|
|
5
6
|
/**
|
|
6
7
|
* Get URL based on a given target (path).
|
|
7
8
|
* ATM, it is only used for testing purposes.
|
|
@@ -23,5 +24,8 @@ export function url(settings, target) {
|
|
|
23
24
|
if (streamingEndpointMatcher.test(target)) {
|
|
24
25
|
return "".concat(settings.urls.streaming).concat(target);
|
|
25
26
|
}
|
|
27
|
+
if (configsEndpointMatcher.test(target)) {
|
|
28
|
+
return "".concat(settings.urls.configs).concat(target);
|
|
29
|
+
}
|
|
26
30
|
return "".concat(settings.urls.sdk).concat(target);
|
|
27
31
|
}
|
package/package.json
CHANGED
package/src/services/splitApi.ts
CHANGED
|
@@ -63,15 +63,20 @@ export function splitApiFactory(
|
|
|
63
63
|
});
|
|
64
64
|
},
|
|
65
65
|
|
|
66
|
+
fetchSegmentChanges(since: number, segmentName: string, noCache?: boolean, till?: number) {
|
|
67
|
+
const url = `${urls.sdk}/segmentChanges/${segmentName}?since=${since}${till ? '&till=' + till : ''}`;
|
|
68
|
+
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SEGMENT));
|
|
69
|
+
},
|
|
70
|
+
|
|
66
71
|
// @TODO support filterQueryString and handle ERROR_TOO_MANY_SETS error
|
|
67
72
|
fetchConfigs(since: number, noCache?: boolean, till?: number) {
|
|
68
|
-
const url = `${urls.
|
|
73
|
+
const url = `${urls.configs}/v1/configs?since=${since}${filterQueryString || ''}${till ? '&till=' + till : ''}`;
|
|
69
74
|
return (secureSplitHttpClient || splitHttpClient)(url, noCache ? noCacheHeaderOptions : undefined);
|
|
70
75
|
},
|
|
71
76
|
|
|
72
|
-
|
|
73
|
-
const url = `${urls.
|
|
74
|
-
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined
|
|
77
|
+
fetchConfigsSegmentChanges(since: number, segmentName: string, noCache?: boolean, till?: number) {
|
|
78
|
+
const url = `${urls.configs}/v1/segmentChanges/${segmentName}?since=${since}${till ? '&till=' + till : ''}`;
|
|
79
|
+
return (secureSplitHttpClient || splitHttpClient)(url, noCache ? noCacheHeaderOptions : undefined);
|
|
75
80
|
},
|
|
76
81
|
|
|
77
82
|
fetchMemberships(userMatchingKey: string, noCache?: boolean, till?: number) {
|
package/src/services/types.ts
CHANGED
|
@@ -62,8 +62,9 @@ export interface ISplitApi {
|
|
|
62
62
|
getEventsAPIHealthCheck: IHealthCheckAPI
|
|
63
63
|
fetchAuth: IFetchAuth
|
|
64
64
|
fetchSplitChanges: IFetchDefinitionChanges
|
|
65
|
-
fetchConfigs: IFetchDefinitionChanges
|
|
66
65
|
fetchSegmentChanges: IFetchSegmentChanges
|
|
66
|
+
fetchConfigs: IFetchDefinitionChanges
|
|
67
|
+
fetchConfigsSegmentChanges: IFetchSegmentChanges
|
|
67
68
|
fetchMemberships: IFetchMemberships
|
|
68
69
|
postEventsBulk: IPostEventsBulk
|
|
69
70
|
postUniqueKeysBulkCs: IPostUniqueKeysBulkCs
|
|
@@ -3,21 +3,22 @@ import { segmentsSyncTaskFactory } from './syncTasks/segmentsSyncTask';
|
|
|
3
3
|
import { IPollingManager, ISegmentsSyncTask, IDefinitionsSyncTask } from './types';
|
|
4
4
|
import { POLLING_START, POLLING_STOP, LOG_PREFIX_SYNC_POLLING } from '../../logger/constants';
|
|
5
5
|
import { ISdkFactoryContextSync } from '../../sdkFactory/types';
|
|
6
|
-
import { IDefinitionChangesFetcher } from './fetchers/types';
|
|
6
|
+
import { IDefinitionChangesFetcher, ISegmentChangesFetcher } from './fetchers/types';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Expose start / stop mechanism for pulling data from services.
|
|
10
10
|
*/
|
|
11
11
|
export function pollingManagerSSFactory(
|
|
12
12
|
params: ISdkFactoryContextSync,
|
|
13
|
-
definitionChangesFetcher: IDefinitionChangesFetcher
|
|
13
|
+
definitionChangesFetcher: IDefinitionChangesFetcher,
|
|
14
|
+
segmentChangesFetcher: ISegmentChangesFetcher
|
|
14
15
|
): IPollingManager {
|
|
15
16
|
|
|
16
|
-
const {
|
|
17
|
+
const { storage, readiness, settings } = params;
|
|
17
18
|
const log = settings.log;
|
|
18
19
|
|
|
19
20
|
const definitionsSyncTask: IDefinitionsSyncTask = definitionsSyncTaskFactory(definitionChangesFetcher, storage, readiness, settings);
|
|
20
|
-
const segmentsSyncTask: ISegmentsSyncTask = segmentsSyncTaskFactory(
|
|
21
|
+
const segmentsSyncTask: ISegmentsSyncTask = segmentsSyncTaskFactory(segmentChangesFetcher, storage, readiness, settings);
|
|
21
22
|
|
|
22
23
|
return {
|
|
23
24
|
definitionsSyncTask,
|
|
@@ -2,16 +2,15 @@ import { IStorageSync } from '../../../storages/types';
|
|
|
2
2
|
import { IReadinessManager } from '../../../readiness/types';
|
|
3
3
|
import { syncTaskFactory } from '../../syncTask';
|
|
4
4
|
import { ISegmentsSyncTask } from '../types';
|
|
5
|
-
import { segmentChangesFetcherFactory } from '../fetchers/segmentChangesFetcher';
|
|
6
|
-
import { IFetchSegmentChanges } from '../../../services/types';
|
|
7
5
|
import { ISettings } from '../../../types';
|
|
8
6
|
import { segmentChangesUpdaterFactory } from '../updaters/segmentChangesUpdater';
|
|
7
|
+
import { ISegmentChangesFetcher } from '../fetchers/types';
|
|
9
8
|
|
|
10
9
|
/**
|
|
11
10
|
* Creates a sync task that periodically executes a `segmentChangesUpdater` task
|
|
12
11
|
*/
|
|
13
12
|
export function segmentsSyncTaskFactory(
|
|
14
|
-
|
|
13
|
+
segmentChangesFetcher: ISegmentChangesFetcher,
|
|
15
14
|
storage: IStorageSync,
|
|
16
15
|
readiness: IReadinessManager,
|
|
17
16
|
settings: ISettings,
|
|
@@ -20,7 +19,7 @@ export function segmentsSyncTaskFactory(
|
|
|
20
19
|
settings.log,
|
|
21
20
|
segmentChangesUpdaterFactory(
|
|
22
21
|
settings.log,
|
|
23
|
-
|
|
22
|
+
segmentChangesFetcher,
|
|
24
23
|
storage.segments,
|
|
25
24
|
readiness,
|
|
26
25
|
settings.startup.requestTimeoutBeforeReady,
|
|
@@ -12,7 +12,8 @@ import { ISdkFactoryContextSync } from '../sdkFactory/types';
|
|
|
12
12
|
import { SDK_DEFINITIONS_CACHE_LOADED } from '../readiness/constants';
|
|
13
13
|
import { usesSegmentsSync } from '../storages/AbstractDefinitionsCacheSync';
|
|
14
14
|
import { splitChangesFetcherFactory } from './polling/fetchers/splitChangesFetcher';
|
|
15
|
-
import { IDefinitionChangesFetcher } from './polling/fetchers/types';
|
|
15
|
+
import { IDefinitionChangesFetcher, ISegmentChangesFetcher } from './polling/fetchers/types';
|
|
16
|
+
import { segmentChangesFetcherFactory } from './polling/fetchers/segmentChangesFetcher';
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* Online SyncManager factory.
|
|
@@ -24,9 +25,10 @@ import { IDefinitionChangesFetcher } from './polling/fetchers/types';
|
|
|
24
25
|
* @param definitionChangesFetcherFactory - optional to replace the default split changes fetcher
|
|
25
26
|
*/
|
|
26
27
|
export function syncManagerOnlineFactory(
|
|
27
|
-
pollingManagerFactory?: (params: ISdkFactoryContextSync, definitionChangesFetcher: IDefinitionChangesFetcher) => IPollingManager,
|
|
28
|
+
pollingManagerFactory?: (params: ISdkFactoryContextSync, definitionChangesFetcher: IDefinitionChangesFetcher, segmentChangesFetcher: ISegmentChangesFetcher) => IPollingManager,
|
|
28
29
|
pushManagerFactory?: (params: ISdkFactoryContextSync, pollingManager: IPollingManager) => IPushManager | undefined,
|
|
29
|
-
|
|
30
|
+
definitionFetcherFactory = splitChangesFetcherFactory,
|
|
31
|
+
segmentFetcherFactory = (params: ISdkFactoryContextSync) => segmentChangesFetcherFactory(params.splitApi.fetchSegmentChanges)
|
|
30
32
|
): (params: ISdkFactoryContextSync) => ISyncManagerCS {
|
|
31
33
|
|
|
32
34
|
/**
|
|
@@ -37,7 +39,7 @@ export function syncManagerOnlineFactory(
|
|
|
37
39
|
const { settings, settings: { log, streamingEnabled, sync: { enabled: syncEnabled } }, telemetryTracker, storage, readiness } = params;
|
|
38
40
|
|
|
39
41
|
/** Polling Manager */
|
|
40
|
-
const pollingManager = pollingManagerFactory && pollingManagerFactory(params,
|
|
42
|
+
const pollingManager = pollingManagerFactory && pollingManagerFactory(params, definitionFetcherFactory(params), segmentFetcherFactory(params));
|
|
41
43
|
|
|
42
44
|
/** Push Manager */
|
|
43
45
|
const pushManager = syncEnabled && streamingEnabled && pollingManager && pushManagerFactory ?
|
|
@@ -45,7 +47,7 @@ export function syncManagerOnlineFactory(
|
|
|
45
47
|
undefined;
|
|
46
48
|
|
|
47
49
|
/** Submitter Manager */
|
|
48
|
-
// It is not
|
|
50
|
+
// It is not injected as push and polling managers, because at the moment it is required
|
|
49
51
|
const submitterManager = submitterManagerFactory(params);
|
|
50
52
|
|
|
51
53
|
/** Sync Manager logic */
|
|
@@ -58,6 +58,8 @@ export const base = {
|
|
|
58
58
|
streaming: 'https://streaming.split.io',
|
|
59
59
|
// Telemetry Server
|
|
60
60
|
telemetry: 'https://telemetry.split.io/api',
|
|
61
|
+
// Configs Server
|
|
62
|
+
configs: 'https://configs.split.io/api',
|
|
61
63
|
},
|
|
62
64
|
|
|
63
65
|
// Defines which kind of storage we should instantiate.
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ISettings } from '../../types';
|
|
2
2
|
|
|
3
|
-
const telemetryEndpointMatcher = /^\/v1\/metrics\/(config|usage)/;
|
|
3
|
+
const telemetryEndpointMatcher = /^\/v1\/(metrics|keys)\/(config|usage|ss|cs)/;
|
|
4
4
|
const eventsEndpointMatcher = /^\/(testImpressions|metrics|events)/;
|
|
5
5
|
const authEndpointMatcher = /^\/(v2|v3)\/auth/;
|
|
6
6
|
const streamingEndpointMatcher = /^\/(sse|event-stream)/;
|
|
7
|
+
const configsEndpointMatcher = /^\/v1\/(configs|segmentChanges)/;
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Get URL based on a given target (path).
|
|
@@ -26,5 +27,8 @@ export function url(settings: ISettings, target: string) {
|
|
|
26
27
|
if (streamingEndpointMatcher.test(target)) {
|
|
27
28
|
return `${settings.urls.streaming}${target}`;
|
|
28
29
|
}
|
|
30
|
+
if (configsEndpointMatcher.test(target)) {
|
|
31
|
+
return `${settings.urls.configs}${target}`;
|
|
32
|
+
}
|
|
29
33
|
return `${settings.urls.sdk}${target}`;
|
|
30
34
|
}
|
package/types/splitio.d.ts
CHANGED
|
@@ -213,7 +213,7 @@ interface IServerSideSharedSettings {
|
|
|
213
213
|
*/
|
|
214
214
|
startup?: {
|
|
215
215
|
/**
|
|
216
|
-
*
|
|
216
|
+
* Time in seconds used before emitting the SDK_READY_TIMED_OUT event.
|
|
217
217
|
*
|
|
218
218
|
* @defaultValue `15`
|
|
219
219
|
*/
|
|
@@ -373,7 +373,7 @@ interface IClientSideSyncSharedSettings extends IClientSideSharedSettings, ISync
|
|
|
373
373
|
*/
|
|
374
374
|
startup?: {
|
|
375
375
|
/**
|
|
376
|
-
*
|
|
376
|
+
* Time in seconds used before emitting the SDK_READY_TIMED_OUT event.
|
|
377
377
|
*
|
|
378
378
|
* @defaultValue `10`
|
|
379
379
|
*/
|
|
@@ -644,6 +644,7 @@ declare namespace SplitIO {
|
|
|
644
644
|
auth: string;
|
|
645
645
|
streaming: string;
|
|
646
646
|
telemetry: string;
|
|
647
|
+
configs: string;
|
|
647
648
|
};
|
|
648
649
|
readonly integrations?: IntegrationFactory[];
|
|
649
650
|
readonly logger?: Logger;
|
|
@@ -1438,9 +1439,9 @@ declare namespace SplitIO {
|
|
|
1438
1439
|
*/
|
|
1439
1440
|
startup?: {
|
|
1440
1441
|
/**
|
|
1441
|
-
*
|
|
1442
|
+
* Time in seconds used before emitting the SDK_READY_TIMED_OUT event.
|
|
1442
1443
|
*
|
|
1443
|
-
* @defaultValue `
|
|
1444
|
+
* @defaultValue `10`
|
|
1444
1445
|
*/
|
|
1445
1446
|
readyTimeout?: number;
|
|
1446
1447
|
/**
|
|
@@ -2340,11 +2341,12 @@ declare namespace SplitIO {
|
|
|
2340
2341
|
*/
|
|
2341
2342
|
logLevel?: LogLevel;
|
|
2342
2343
|
/**
|
|
2343
|
-
* Time in seconds
|
|
2344
|
+
* Time in seconds used before emitting the SDK_READY_TIMED_OUT event.
|
|
2345
|
+
* A value of -1 disables the timeout and thus the event is never emitted.
|
|
2344
2346
|
*
|
|
2345
2347
|
* @defaultValue `10`
|
|
2346
2348
|
*/
|
|
2347
|
-
|
|
2349
|
+
readyTimeout?: number;
|
|
2348
2350
|
/**
|
|
2349
2351
|
* Custom endpoints to replace the default ones used by the SDK.
|
|
2350
2352
|
*/
|
|
@@ -2356,11 +2358,11 @@ declare namespace SplitIO {
|
|
|
2356
2358
|
*/
|
|
2357
2359
|
auth?: string;
|
|
2358
2360
|
/**
|
|
2359
|
-
* String property to override the base URL where the SDK will get rollout plan related data, like
|
|
2361
|
+
* String property to override the base URL where the SDK will get rollout plan related data, like configs and segments definitions.
|
|
2360
2362
|
*
|
|
2361
|
-
* @defaultValue `'https://
|
|
2363
|
+
* @defaultValue `'https://configs.split.io/api'`
|
|
2362
2364
|
*/
|
|
2363
|
-
|
|
2365
|
+
configs?: string;
|
|
2364
2366
|
/**
|
|
2365
2367
|
* String property to override the base URL where the SDK will post event-related information like impressions.
|
|
2366
2368
|
*
|