@splitsoftware/splitio-commons 3.0.0-rc.1 → 3.0.0-rc.2
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 +4 -3
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
|
@@ -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;
|
|
@@ -2356,11 +2357,11 @@ declare namespace SplitIO {
|
|
|
2356
2357
|
*/
|
|
2357
2358
|
auth?: string;
|
|
2358
2359
|
/**
|
|
2359
|
-
* String property to override the base URL where the SDK will get rollout plan related data, like
|
|
2360
|
+
* String property to override the base URL where the SDK will get rollout plan related data, like configs and segments definitions.
|
|
2360
2361
|
*
|
|
2361
|
-
* @defaultValue `'https://
|
|
2362
|
+
* @defaultValue `'https://configs.split.io/api'`
|
|
2362
2363
|
*/
|
|
2363
|
-
|
|
2364
|
+
configs?: string;
|
|
2364
2365
|
/**
|
|
2365
2366
|
* String property to override the base URL where the SDK will post event-related information like impressions.
|
|
2366
2367
|
*
|