@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.
@@ -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.sdk, "/v1/configs?since=").concat(since).concat(filterQueryString || '').concat(till ? '&till=' + till : '');
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
- fetchSegmentChanges: function (since, segmentName, noCache, till) {
59
- var url = "".concat(urls.sdk, "/segmentChanges/").concat(segmentName, "?since=").concat(since).concat(till ? '&till=' + till : '');
60
- return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(constants_1.SEGMENT));
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 splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
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)(splitApi.fetchSegmentChanges, storage, readiness, settings);
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(fetchSegmentChanges, storage, readiness, settings) {
11
- return (0, syncTask_1.syncTaskFactory)(settings.log, (0, segmentChangesUpdater_1.segmentChangesUpdaterFactory)(settings.log, (0, segmentChangesFetcher_1.segmentChangesFetcherFactory)(fetchSegmentChanges), storage.segments, readiness, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.segmentsRefreshRate, 'segmentChangesUpdater');
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, definitionChangesFetcherFactory) {
22
- if (definitionChangesFetcherFactory === void 0) { definitionChangesFetcherFactory = splitChangesFetcher_1.splitChangesFetcherFactory; }
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, definitionChangesFetcherFactory(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 inyected as push and polling managers, because at the moment it is required
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;
@@ -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.sdk, "/v1/configs?since=").concat(since).concat(filterQueryString || '').concat(till ? '&till=' + till : '');
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
- fetchSegmentChanges: function (since, segmentName, noCache, till) {
56
- var url = "".concat(urls.sdk, "/segmentChanges/").concat(segmentName, "?since=").concat(since).concat(till ? '&till=' + till : '');
57
- return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SEGMENT));
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 splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
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(splitApi.fetchSegmentChanges, storage, readiness, settings);
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(fetchSegmentChanges, storage, readiness, settings) {
8
- return syncTaskFactory(settings.log, segmentChangesUpdaterFactory(settings.log, segmentChangesFetcherFactory(fetchSegmentChanges), storage.segments, readiness, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.segmentsRefreshRate, 'segmentChangesUpdater');
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, definitionChangesFetcherFactory) {
19
- if (definitionChangesFetcherFactory === void 0) { definitionChangesFetcherFactory = splitChangesFetcherFactory; }
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, definitionChangesFetcherFactory(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 inyected as push and polling managers, because at the moment it is required
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@splitsoftware/splitio-commons",
3
- "version": "3.0.0-rc.1",
3
+ "version": "3.0.0-rc.2",
4
4
  "description": "Split JavaScript SDK common components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -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.sdk}/v1/configs?since=${since}${filterQueryString || ''}${till ? '&till=' + till : ''}`;
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
- fetchSegmentChanges(since: number, segmentName: string, noCache?: boolean, till?: number) {
73
- const url = `${urls.sdk}/segmentChanges/${segmentName}?since=${since}${till ? '&till=' + till : ''}`;
74
- return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SEGMENT));
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) {
@@ -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 { splitApi, storage, readiness, settings } = params;
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(splitApi.fetchSegmentChanges, storage, readiness, settings);
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
- fetchSegmentChanges: IFetchSegmentChanges,
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
- segmentChangesFetcherFactory(fetchSegmentChanges),
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
- definitionChangesFetcherFactory = splitChangesFetcherFactory
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, definitionChangesFetcherFactory(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 inyected as push and polling managers, because at the moment it is required
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
  }
@@ -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 feature flags and segments definitions.
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://appconfig.split.io/api'`
2362
+ * @defaultValue `'https://configs.split.io/api'`
2362
2363
  */
2363
- sdk?: string;
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
  *