@splitsoftware/splitio-commons 1.16.1-rc.7 → 1.17.0-rc.0
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/evaluator/matchers/index.js +1 -3
- package/cjs/evaluator/matchers/matcherTypes.js +0 -1
- package/cjs/evaluator/matchersTransform/index.js +1 -1
- package/cjs/logger/constants.js +4 -3
- package/cjs/logger/messages/info.js +2 -1
- package/cjs/readiness/readinessManager.js +10 -14
- package/cjs/readiness/sdkReadinessManager.js +6 -5
- package/cjs/sdkClient/sdkClientMethodCS.js +2 -2
- package/cjs/sdkClient/sdkClientMethodCSWithTT.js +2 -2
- package/cjs/sdkFactory/index.js +1 -1
- package/cjs/services/decorateHeaders.js +42 -0
- package/cjs/services/splitApi.js +0 -4
- package/cjs/services/splitHttpClient.js +5 -4
- package/cjs/storages/AbstractSplitsCacheAsync.js +2 -2
- package/cjs/storages/AbstractSplitsCacheSync.js +6 -5
- package/cjs/storages/KeyBuilder.js +0 -3
- package/cjs/storages/KeyBuilderCS.js +5 -17
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +4 -16
- package/cjs/storages/inLocalStorage/index.js +2 -6
- package/cjs/storages/inMemory/InMemoryStorageCS.js +0 -5
- package/cjs/storages/inMemory/SplitsCacheInMemory.js +11 -20
- package/cjs/storages/inMemory/TelemetryCacheInMemory.js +10 -7
- package/cjs/storages/pluggable/inMemoryWrapper.js +1 -1
- package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +1 -5
- package/cjs/sync/polling/pollingManagerCS.js +33 -51
- package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
- package/cjs/sync/polling/updaters/mySegmentsUpdater.js +21 -20
- package/cjs/sync/streaming/SSEClient/index.js +0 -4
- package/cjs/sync/streaming/SSEHandler/index.js +0 -1
- package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +9 -23
- package/cjs/sync/streaming/constants.js +1 -2
- package/cjs/sync/streaming/parseUtils.js +8 -3
- package/cjs/sync/streaming/pushManager.js +68 -97
- package/cjs/sync/submitters/telemetrySubmitter.js +0 -4
- package/cjs/sync/syncManagerOnline.js +14 -24
- package/cjs/utils/constants/index.js +2 -4
- package/cjs/utils/settingsValidation/index.js +2 -7
- package/esm/evaluator/matchers/index.js +1 -3
- package/esm/evaluator/matchers/matcherTypes.js +0 -1
- package/esm/evaluator/matchersTransform/index.js +1 -1
- package/esm/logger/constants.js +1 -0
- package/esm/logger/messages/info.js +2 -1
- package/esm/readiness/readinessManager.js +10 -14
- package/esm/readiness/sdkReadinessManager.js +6 -5
- package/esm/sdkClient/sdkClientMethodCS.js +2 -2
- package/esm/sdkClient/sdkClientMethodCSWithTT.js +2 -2
- package/esm/sdkFactory/index.js +1 -1
- package/esm/services/decorateHeaders.js +38 -0
- package/esm/services/splitApi.js +1 -5
- package/esm/services/splitHttpClient.js +5 -4
- package/esm/storages/AbstractSplitsCacheAsync.js +2 -2
- package/esm/storages/AbstractSplitsCacheSync.js +4 -3
- package/esm/storages/KeyBuilder.js +0 -3
- package/esm/storages/KeyBuilderCS.js +4 -15
- package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +5 -17
- package/esm/storages/inLocalStorage/index.js +3 -7
- package/esm/storages/inMemory/InMemoryStorageCS.js +0 -5
- package/esm/storages/inMemory/SplitsCacheInMemory.js +12 -21
- package/esm/storages/inMemory/TelemetryCacheInMemory.js +10 -7
- package/esm/storages/pluggable/inMemoryWrapper.js +1 -1
- package/esm/sync/polling/fetchers/mySegmentsFetcher.js +1 -5
- package/esm/sync/polling/pollingManagerCS.js +34 -52
- package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
- package/esm/sync/polling/updaters/mySegmentsUpdater.js +19 -18
- package/esm/sync/streaming/SSEClient/index.js +1 -5
- package/esm/sync/streaming/SSEHandler/index.js +1 -2
- package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +9 -23
- package/esm/sync/streaming/constants.js +0 -1
- package/esm/sync/streaming/parseUtils.js +8 -3
- package/esm/sync/streaming/pushManager.js +69 -97
- package/esm/sync/submitters/telemetrySubmitter.js +0 -4
- package/esm/sync/syncManagerOnline.js +15 -25
- package/esm/utils/constants/index.js +1 -3
- package/esm/utils/settingsValidation/index.js +2 -7
- package/package.json +1 -1
- package/src/dtos/types.ts +7 -17
- package/src/evaluator/matchers/index.ts +0 -2
- package/src/evaluator/matchers/matcherTypes.ts +0 -1
- package/src/evaluator/matchersTransform/index.ts +1 -1
- package/src/logger/constants.ts +1 -0
- package/src/logger/messages/info.ts +2 -1
- package/src/readiness/readinessManager.ts +9 -13
- package/src/readiness/sdkReadinessManager.ts +7 -7
- package/src/readiness/types.ts +2 -3
- package/src/sdkClient/sdkClientMethodCS.ts +2 -2
- package/src/sdkClient/sdkClientMethodCSWithTT.ts +2 -2
- package/src/sdkFactory/index.ts +1 -1
- package/src/services/decorateHeaders.ts +40 -0
- package/src/services/splitApi.ts +1 -6
- package/src/services/splitHttpClient.ts +5 -4
- package/src/services/types.ts +0 -1
- package/src/storages/AbstractSplitsCacheAsync.ts +2 -2
- package/src/storages/AbstractSplitsCacheSync.ts +5 -4
- package/src/storages/KeyBuilder.ts +0 -3
- package/src/storages/KeyBuilderCS.ts +5 -25
- package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +3 -3
- package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +5 -20
- package/src/storages/inLocalStorage/index.ts +4 -8
- package/src/storages/inMemory/InMemoryStorageCS.ts +0 -5
- package/src/storages/inMemory/SplitsCacheInMemory.ts +10 -15
- package/src/storages/inMemory/TelemetryCacheInMemory.ts +11 -7
- package/src/storages/pluggable/inMemoryWrapper.ts +1 -1
- package/src/storages/types.ts +5 -7
- package/src/sync/polling/fetchers/mySegmentsFetcher.ts +2 -6
- package/src/sync/polling/pollingManagerCS.ts +29 -61
- package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +10 -10
- package/src/sync/polling/types.ts +3 -4
- package/src/sync/polling/updaters/mySegmentsUpdater.ts +20 -17
- package/src/sync/streaming/SSEClient/index.ts +7 -10
- package/src/sync/streaming/SSEHandler/index.ts +1 -2
- package/src/sync/streaming/SSEHandler/types.ts +2 -14
- package/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts +9 -25
- package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
- package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +1 -1
- package/src/sync/streaming/UpdateWorkers/types.ts +2 -2
- package/src/sync/streaming/constants.ts +0 -1
- package/src/sync/streaming/parseUtils.ts +10 -6
- package/src/sync/streaming/pushManager.ts +67 -101
- package/src/sync/streaming/types.ts +3 -5
- package/src/sync/submitters/telemetrySubmitter.ts +0 -4
- package/src/sync/submitters/types.ts +4 -11
- package/src/sync/syncManagerOnline.ts +11 -19
- package/src/types.ts +9 -28
- package/src/utils/constants/index.ts +1 -3
- package/src/utils/settingsValidation/index.ts +3 -8
- package/src/utils/settingsValidation/types.ts +1 -1
- package/types/dtos/types.d.ts +6 -14
- package/types/logger/constants.d.ts +1 -0
- package/types/readiness/readinessManager.d.ts +2 -2
- package/types/readiness/sdkReadinessManager.d.ts +3 -2
- package/types/readiness/types.d.ts +2 -3
- package/types/services/decorateHeaders.d.ts +2 -0
- package/types/services/types.d.ts +0 -1
- package/types/storages/AbstractSplitsCacheAsync.d.ts +1 -1
- package/types/storages/AbstractSplitsCacheSync.d.ts +3 -3
- package/types/storages/KeyBuilder.d.ts +0 -1
- package/types/storages/KeyBuilderCS.d.ts +2 -7
- package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +2 -2
- package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +1 -1
- package/types/storages/inMemory/SplitsCacheInMemory.d.ts +2 -3
- package/types/storages/inMemory/TelemetryCacheInMemory.d.ts +6 -4
- package/types/storages/pluggable/inMemoryWrapper.d.ts +1 -1
- package/types/storages/types.d.ts +3 -4
- package/types/sync/polling/syncTasks/mySegmentsSyncTask.d.ts +3 -2
- package/types/sync/polling/types.d.ts +3 -10
- package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +4 -4
- package/types/sync/streaming/SSEClient/index.d.ts +0 -1
- package/types/sync/streaming/SSEHandler/types.d.ts +2 -13
- package/types/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.d.ts +2 -3
- package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -2
- package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +2 -3
- package/types/sync/streaming/UpdateWorkers/types.d.ts +2 -2
- package/types/sync/streaming/constants.d.ts +0 -1
- package/types/sync/streaming/parseUtils.d.ts +4 -2
- package/types/sync/streaming/pushManager.d.ts +0 -2
- package/types/sync/streaming/types.d.ts +4 -5
- package/types/sync/submitters/types.d.ts +3 -10
- package/types/types.d.ts +11 -26
- package/types/utils/constants/index.d.ts +1 -3
- package/types/utils/settingsValidation/index.d.ts +0 -2
- package/types/utils/settingsValidation/types.d.ts +1 -1
- package/cjs/evaluator/matchers/large_segment.js +0 -16
- package/esm/evaluator/matchers/large_segment.js +0 -12
- package/src/evaluator/matchers/large_segment.ts +0 -18
package/CHANGES.txt
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.17.0 (August XXX, 2024)
|
|
2
|
+
- Added `sync.requestOptions.getHeaderOverrides` configuration option to enhance SDK HTTP request Headers for Authorization Frameworks.
|
|
2
3
|
- Updated some transitive dependencies for vulnerability fixes.
|
|
3
4
|
|
|
4
5
|
1.16.0 (June 13, 2024)
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.matcherFactory = void 0;
|
|
4
4
|
var all_1 = require("./all");
|
|
5
5
|
var segment_1 = require("./segment");
|
|
6
|
-
var large_segment_1 = require("./large_segment");
|
|
7
6
|
var whitelist_1 = require("./whitelist");
|
|
8
7
|
var eq_1 = require("./eq");
|
|
9
8
|
var gte_1 = require("./gte");
|
|
@@ -47,8 +46,7 @@ var matchers = [
|
|
|
47
46
|
semver_gte_1.greaterThanEqualToSemverMatcherContext,
|
|
48
47
|
semver_lte_1.lessThanEqualToSemverMatcherContext,
|
|
49
48
|
semver_between_1.betweenSemverMatcherContext,
|
|
50
|
-
semver_inlist_1.inListSemverMatcherContext,
|
|
51
|
-
large_segment_1.largeSegmentMatcherContext, // IN_LARGE_SEGMENT: 23
|
|
49
|
+
semver_inlist_1.inListSemverMatcherContext, // IN_LIST_SEMVER: 22
|
|
52
50
|
];
|
|
53
51
|
/**
|
|
54
52
|
* Matcher factory.
|
|
@@ -18,7 +18,7 @@ function matchersTransform(matchers) {
|
|
|
18
18
|
// As default input data type we use string (even for ALL_KEYS)
|
|
19
19
|
var dataType = matcherTypes_1.matcherDataTypes.STRING;
|
|
20
20
|
var value = undefined;
|
|
21
|
-
if (type === matcherTypes_1.matcherTypes.IN_SEGMENT
|
|
21
|
+
if (type === matcherTypes_1.matcherTypes.IN_SEGMENT) {
|
|
22
22
|
value = (0, segment_1.segmentTransform)(userDefinedSegmentMatcherData);
|
|
23
23
|
}
|
|
24
24
|
else if (type === matcherTypes_1.matcherTypes.EQUAL_TO) {
|
package/cjs/logger/constants.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.LOG_PREFIX_CLEANUP = exports.LOG_PREFIX_UNIQUE_KEYS_TRACKER = exports.LOG_PREFIX_EVENTS_TRACKER = exports.LOG_PREFIX_IMPRESSIONS_TRACKER = exports.LOG_PREFIX_SYNC_SUBMITTERS = exports.LOG_PREFIX_SYNC_POLLING = exports.LOG_PREFIX_SYNC_MYSEGMENTS = exports.LOG_PREFIX_SYNC_SEGMENTS = exports.LOG_PREFIX_SYNC_SPLITS = exports.LOG_PREFIX_SYNC_STREAMING = exports.LOG_PREFIX_SYNC_OFFLINE = exports.LOG_PREFIX_SYNC_MANAGER = exports.LOG_PREFIX_SYNC = exports.LOG_PREFIX_ENGINE_VALUE = exports.LOG_PREFIX_ENGINE_MATCHER = exports.LOG_PREFIX_ENGINE_COMBINER = exports.LOG_PREFIX_ENGINE = exports.LOG_PREFIX_CLIENT_INSTANTIATION = exports.LOG_PREFIX_INSTANTIATION = exports.LOG_PREFIX_SETTINGS = exports.ENGINE_MATCHER_ERROR = exports.ERROR_SETS_FILTER_EXCLUSIVE = exports.ERROR_TOO_MANY_SETS = exports.ERROR_MIN_CONFIG_PARAM = exports.ERROR_NOT_BOOLEAN = exports.ERROR_STORAGE_INVALID = exports.ERROR_LOCALHOST_MODULE_REQUIRED = void 0;
|
|
3
|
+
exports.ENGINE_VALUE_INVALID = exports.USER_CONSENT_INITIAL = exports.USER_CONSENT_NOT_UPDATED = exports.USER_CONSENT_UPDATED = exports.IMPRESSIONS_TRACKER_SUCCESS = exports.EVENTS_TRACKER_SUCCESS = exports.SYNC_STOP_POLLING = exports.SYNC_CONTINUE_POLLING = exports.SYNC_START_POLLING = exports.SUBMITTERS_PUSH = exports.SUBMITTERS_PUSH_FULL_QUEUE = exports.STREAMING_DISCONNECTING = exports.STREAMING_DISABLED = exports.STREAMING_CONNECTING = exports.STREAMING_RECONNECT = exports.STREAMING_REFRESH_TOKEN = exports.SYNC_SPLITS_FETCH_RETRY = exports.POLLING_STOP = exports.POLLING_START = exports.POLLING_SMART_PAUSING = exports.NEW_FACTORY = exports.NEW_SHARED_CLIENT = exports.IMPRESSION_QUEUEING = exports.IMPRESSION = exports.CLIENT_READY = exports.CLIENT_READY_FROM_CACHE = exports.ENGINE_MATCHER_RESULT = exports.SETTINGS_SPLITS_FILTER = exports.SYNC_TASK_STOP = exports.SYNC_TASK_EXECUTE = exports.SYNC_TASK_START = exports.STREAMING_NEW_MESSAGE = exports.SYNC_SPLITS_SEGMENTS = exports.SYNC_SPLITS_REMOVED = exports.SYNC_SPLITS_NEW = exports.SYNC_SPLITS_FETCH = exports.SYNC_OFFLINE_DATA = exports.RETRIEVE_MANAGER = exports.RETRIEVE_CLIENT_EXISTING = exports.RETRIEVE_CLIENT_DEFAULT = exports.CLEANUP_DEREGISTERING = exports.CLEANUP_REGISTERING = exports.ENGINE_SANITIZE = exports.ENGINE_VALUE = exports.ENGINE_MATCHER_DEPENDENCY_PRE = exports.ENGINE_MATCHER_DEPENDENCY = exports.ENGINE_BUCKET = exports.ENGINE_COMBINER_IFELSEIF_NO_TREATMENT = exports.ENGINE_COMBINER_IFELSEIF = exports.ENGINE_COMBINER_AND = void 0;
|
|
4
|
+
exports.ERROR_INVALID_CONFIG_PARAM = exports.ERROR_EMPTY_ARRAY = exports.ERROR_EMPTY = exports.ERROR_INVALID = exports.ERROR_INVALID_KEY_OBJECT = exports.ERROR_TOO_LONG = exports.ERROR_NULL = exports.ERROR_CLIENT_DESTROYED = exports.ERROR_NOT_FINITE = exports.ERROR_SIZE_EXCEEDED = exports.ERROR_NOT_PLAIN_OBJECT = exports.ERROR_EVENT_TYPE_FORMAT = exports.ERROR_EVENTS_TRACKER = exports.ERROR_IMPRESSIONS_LISTENER = exports.ERROR_IMPRESSIONS_TRACKER = exports.ERROR_STREAMING_AUTH = exports.ERROR_STREAMING_SSE = exports.ERROR_SYNC_OFFLINE_LOADING = exports.ERROR_CLIENT_CANNOT_GET_READY = exports.ERROR_CLIENT_LISTENER = exports.ERROR_LOGLEVEL_INVALID = exports.ERROR_ENGINE_COMBINER_IFELSEIF = exports.WARN_FLAGSET_WITHOUT_FLAGS = exports.WARN_FLAGSET_NOT_CONFIGURED = exports.WARN_LOWERCASE_FLAGSET = exports.WARN_INVALID_FLAGSET = exports.STREAMING_PARSING_SPLIT_UPDATE = exports.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2 = exports.WARN_SDK_KEY = exports.WARN_SPLITS_FILTER_EMPTY = exports.WARN_SPLITS_FILTER_INVALID = exports.WARN_SPLITS_FILTER_IGNORED = exports.WARN_INTEGRATION_INVALID = exports.WARN_NOT_EXISTENT_TT = exports.WARN_LOWERCASE_TRAFFIC_TYPE = exports.WARN_NOT_EXISTENT_SPLIT = exports.WARN_TRIMMING = exports.WARN_CONVERTING = exports.WARN_TRIMMING_PROPERTIES = exports.WARN_SETTING_NULL = exports.SUBMITTERS_PUSH_RETRY = exports.SUBMITTERS_PUSH_FAILS = exports.STREAMING_FALLBACK = exports.STREAMING_PARSING_MESSAGE_FAILS = exports.STREAMING_PARSING_ERROR_FAILS = exports.SYNC_SPLITS_FETCH_FAILS = exports.SYNC_MYSEGMENTS_FETCH_RETRY = exports.CLIENT_NOT_READY = exports.CLIENT_NO_LISTENER = exports.ENGINE_VALUE_NO_ATTRIBUTES = void 0;
|
|
5
|
+
exports.LOG_PREFIX_CLEANUP = exports.LOG_PREFIX_UNIQUE_KEYS_TRACKER = exports.LOG_PREFIX_EVENTS_TRACKER = exports.LOG_PREFIX_IMPRESSIONS_TRACKER = exports.LOG_PREFIX_SYNC_SUBMITTERS = exports.LOG_PREFIX_SYNC_POLLING = exports.LOG_PREFIX_SYNC_MYSEGMENTS = exports.LOG_PREFIX_SYNC_SEGMENTS = exports.LOG_PREFIX_SYNC_SPLITS = exports.LOG_PREFIX_SYNC_STREAMING = exports.LOG_PREFIX_SYNC_OFFLINE = exports.LOG_PREFIX_SYNC_MANAGER = exports.LOG_PREFIX_SYNC = exports.LOG_PREFIX_ENGINE_VALUE = exports.LOG_PREFIX_ENGINE_MATCHER = exports.LOG_PREFIX_ENGINE_COMBINER = exports.LOG_PREFIX_ENGINE = exports.LOG_PREFIX_CLIENT_INSTANTIATION = exports.LOG_PREFIX_INSTANTIATION = exports.LOG_PREFIX_SETTINGS = exports.ENGINE_MATCHER_ERROR = exports.ERROR_SETS_FILTER_EXCLUSIVE = exports.ERROR_TOO_MANY_SETS = exports.ERROR_MIN_CONFIG_PARAM = exports.ERROR_NOT_BOOLEAN = exports.ERROR_STORAGE_INVALID = exports.ERROR_LOCALHOST_MODULE_REQUIRED = exports.ERROR_HTTP = void 0;
|
|
6
6
|
/**
|
|
7
7
|
* Message codes used to trim string log messages from commons and client-side API modules,
|
|
8
8
|
* in order to reduce the minimal SDK size for Browser and eventually other client-side environments.
|
|
@@ -40,6 +40,7 @@ exports.IMPRESSION = 102;
|
|
|
40
40
|
exports.IMPRESSION_QUEUEING = 103;
|
|
41
41
|
exports.NEW_SHARED_CLIENT = 104;
|
|
42
42
|
exports.NEW_FACTORY = 105;
|
|
43
|
+
exports.POLLING_SMART_PAUSING = 106;
|
|
43
44
|
exports.POLLING_START = 107;
|
|
44
45
|
exports.POLLING_STOP = 108;
|
|
45
46
|
exports.SYNC_SPLITS_FETCH_RETRY = 109;
|
|
@@ -20,10 +20,11 @@ exports.codesInfo = warn_1.codesWarn.concat([
|
|
|
20
20
|
[c.USER_CONSENT_NOT_UPDATED, 'UserConsent: call had no effect because it was the current consent status (%s).'],
|
|
21
21
|
[c.USER_CONSENT_INITIAL, 'Starting the SDK with %s user consent. No data will be sent.'],
|
|
22
22
|
// synchronizer
|
|
23
|
+
[c.POLLING_SMART_PAUSING, c.LOG_PREFIX_SYNC_POLLING + 'Turning segments data polling %s.'],
|
|
23
24
|
[c.POLLING_START, c.LOG_PREFIX_SYNC_POLLING + 'Starting polling'],
|
|
24
25
|
[c.POLLING_STOP, c.LOG_PREFIX_SYNC_POLLING + 'Stopping polling'],
|
|
25
26
|
[c.SYNC_SPLITS_FETCH_RETRY, c.LOG_PREFIX_SYNC_SPLITS + 'Retrying download of feature flags #%s. Reason: %s'],
|
|
26
|
-
[c.SUBMITTERS_PUSH_FULL_QUEUE, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Flushing full %s queue and
|
|
27
|
+
[c.SUBMITTERS_PUSH_FULL_QUEUE, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Flushing full %s queue and reseting timer.'],
|
|
27
28
|
[c.SUBMITTERS_PUSH, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Pushing %s.'],
|
|
28
29
|
[c.STREAMING_REFRESH_TOKEN, c.LOG_PREFIX_SYNC_STREAMING + 'Refreshing streaming token in %s seconds, and connecting streaming in %s seconds.'],
|
|
29
30
|
[c.STREAMING_RECONNECT, c.LOG_PREFIX_SYNC_STREAMING + 'Attempting to reconnect streaming in %s seconds.'],
|
|
@@ -16,20 +16,20 @@ function splitsEventEmitterFactory(EventEmitter) {
|
|
|
16
16
|
splitsEventEmitter.once(constants_1.SDK_SPLITS_CACHE_LOADED, function () { splitsEventEmitter.splitsCacheLoaded = true; });
|
|
17
17
|
return splitsEventEmitter;
|
|
18
18
|
}
|
|
19
|
-
function segmentsEventEmitterFactory(EventEmitter
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
function segmentsEventEmitterFactory(EventEmitter) {
|
|
20
|
+
var segmentsEventEmitter = (0, objectAssign_1.objectAssign)(new EventEmitter(), {
|
|
21
|
+
segmentsArrived: false
|
|
22
|
+
});
|
|
22
23
|
segmentsEventEmitter.once(constants_1.SDK_SEGMENTS_ARRIVED, function () { segmentsEventEmitter.segmentsArrived = true; });
|
|
23
24
|
return segmentsEventEmitter;
|
|
24
25
|
}
|
|
25
26
|
/**
|
|
26
27
|
* Factory of readiness manager, which handles the ready / update event propagation.
|
|
27
28
|
*/
|
|
28
|
-
function readinessManagerFactory(EventEmitter,
|
|
29
|
+
function readinessManagerFactory(EventEmitter, readyTimeout, splits) {
|
|
30
|
+
if (readyTimeout === void 0) { readyTimeout = 0; }
|
|
29
31
|
if (splits === void 0) { splits = splitsEventEmitterFactory(EventEmitter); }
|
|
30
|
-
var _a = settings.startup, readyTimeout = _a.readyTimeout, waitForLargeSegments = _a.waitForLargeSegments, largeSegmentsEnabled = settings.sync.largeSegmentsEnabled;
|
|
31
32
|
var segments = segmentsEventEmitterFactory(EventEmitter);
|
|
32
|
-
var largeSegments = largeSegmentsEnabled ? segmentsEventEmitterFactory(EventEmitter, !waitForLargeSegments) : undefined;
|
|
33
33
|
var gate = new EventEmitter();
|
|
34
34
|
// emit SDK_READY_FROM_CACHE
|
|
35
35
|
var isReadyFromCache = false;
|
|
@@ -53,8 +53,6 @@ function readinessManagerFactory(EventEmitter, settings, splits) {
|
|
|
53
53
|
var isReady = false;
|
|
54
54
|
splits.on(constants_1.SDK_SPLITS_ARRIVED, checkIsReadyOrUpdate);
|
|
55
55
|
segments.on(constants_1.SDK_SEGMENTS_ARRIVED, checkIsReadyOrUpdate);
|
|
56
|
-
if (largeSegments)
|
|
57
|
-
largeSegments.on(constants_1.SDK_SEGMENTS_ARRIVED, checkIsReadyOrUpdate);
|
|
58
56
|
var isDestroyed = false;
|
|
59
57
|
function checkIsReadyFromCache() {
|
|
60
58
|
isReadyFromCache = true;
|
|
@@ -80,7 +78,7 @@ function readinessManagerFactory(EventEmitter, settings, splits) {
|
|
|
80
78
|
}
|
|
81
79
|
}
|
|
82
80
|
else {
|
|
83
|
-
if (splits.splitsArrived && segments.segmentsArrived
|
|
81
|
+
if (splits.splitsArrived && segments.segmentsArrived) {
|
|
84
82
|
clearTimeout(readyTimeoutId);
|
|
85
83
|
isReady = true;
|
|
86
84
|
try {
|
|
@@ -97,11 +95,11 @@ function readinessManagerFactory(EventEmitter, settings, splits) {
|
|
|
97
95
|
return {
|
|
98
96
|
splits: splits,
|
|
99
97
|
segments: segments,
|
|
100
|
-
largeSegments: largeSegments,
|
|
101
98
|
gate: gate,
|
|
102
|
-
shared: function () {
|
|
99
|
+
shared: function (readyTimeout) {
|
|
100
|
+
if (readyTimeout === void 0) { readyTimeout = 0; }
|
|
103
101
|
refCount++;
|
|
104
|
-
return readinessManagerFactory(EventEmitter,
|
|
102
|
+
return readinessManagerFactory(EventEmitter, readyTimeout, splits);
|
|
105
103
|
},
|
|
106
104
|
// @TODO review/remove next methods when non-recoverable errors are reworked
|
|
107
105
|
// Called on consumer mode, when storage fails to connect
|
|
@@ -112,8 +110,6 @@ function readinessManagerFactory(EventEmitter, settings, splits) {
|
|
|
112
110
|
destroy: function () {
|
|
113
111
|
isDestroyed = true;
|
|
114
112
|
segments.removeAllListeners();
|
|
115
|
-
if (largeSegments)
|
|
116
|
-
largeSegments.removeAllListeners();
|
|
117
113
|
gate.removeAllListeners();
|
|
118
114
|
clearTimeout(readyTimeoutId);
|
|
119
115
|
if (refCount > 0)
|
|
@@ -15,9 +15,9 @@ var REMOVE_LISTENER_EVENT = 'removeListener';
|
|
|
15
15
|
* @param readyTimeout time in millis to emit SDK_READY_TIME_OUT event
|
|
16
16
|
* @param readinessManager optional readinessManager to use. only used internally for `shared` method
|
|
17
17
|
*/
|
|
18
|
-
function sdkReadinessManagerFactory(EventEmitter,
|
|
19
|
-
if (
|
|
20
|
-
|
|
18
|
+
function sdkReadinessManagerFactory(log, EventEmitter, readyTimeout, readinessManager) {
|
|
19
|
+
if (readyTimeout === void 0) { readyTimeout = 0; }
|
|
20
|
+
if (readinessManager === void 0) { readinessManager = (0, readinessManager_1.readinessManagerFactory)(EventEmitter, readyTimeout); }
|
|
21
21
|
/** Ready callback warning */
|
|
22
22
|
var internalReadyCbCount = 0;
|
|
23
23
|
var readyCbCount = 0;
|
|
@@ -60,8 +60,9 @@ function sdkReadinessManagerFactory(EventEmitter, settings, readinessManager) {
|
|
|
60
60
|
}
|
|
61
61
|
return {
|
|
62
62
|
readinessManager: readinessManager,
|
|
63
|
-
shared: function () {
|
|
64
|
-
|
|
63
|
+
shared: function (readyTimeout) {
|
|
64
|
+
if (readyTimeout === void 0) { readyTimeout = 0; }
|
|
65
|
+
return sdkReadinessManagerFactory(log, EventEmitter, readyTimeout, readinessManager.shared(readyTimeout));
|
|
65
66
|
},
|
|
66
67
|
incInternalReadyCbCount: function () {
|
|
67
68
|
internalReadyCbCount++;
|
|
@@ -17,7 +17,7 @@ function buildInstanceId(key) {
|
|
|
17
17
|
* Therefore, clients don't have a bound TT for the track method.
|
|
18
18
|
*/
|
|
19
19
|
function sdkClientMethodCSFactory(params) {
|
|
20
|
-
var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, key = _a.core.key, log = _a.log;
|
|
20
|
+
var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, key = _a.core.key, readyTimeout = _a.startup.readyTimeout, log = _a.log;
|
|
21
21
|
var mainClientInstance = (0, clientCS_1.clientCSDecorator)(log, (0, sdkClient_1.sdkClientFactory)(params), key);
|
|
22
22
|
var parsedDefaultKey = (0, key_2.keyParser)(key);
|
|
23
23
|
var defaultInstanceId = buildInstanceId(parsedDefaultKey);
|
|
@@ -37,7 +37,7 @@ function sdkClientMethodCSFactory(params) {
|
|
|
37
37
|
var instanceId = buildInstanceId(validKey);
|
|
38
38
|
if (!clientInstances[instanceId]) {
|
|
39
39
|
var matchingKey = (0, key_2.getMatching)(validKey);
|
|
40
|
-
var sharedSdkReadiness_1 = sdkReadinessManager.shared();
|
|
40
|
+
var sharedSdkReadiness_1 = sdkReadinessManager.shared(readyTimeout);
|
|
41
41
|
var sharedStorage = storage.shared && storage.shared(matchingKey, function (err) {
|
|
42
42
|
if (err) {
|
|
43
43
|
sharedSdkReadiness_1.readinessManager.timeout();
|
|
@@ -19,7 +19,7 @@ function buildInstanceId(key, trafficType) {
|
|
|
19
19
|
* (default client) or the client method (shared clients).
|
|
20
20
|
*/
|
|
21
21
|
function sdkClientMethodCSFactory(params) {
|
|
22
|
-
var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, _b = _a.core, key = _b.key, trafficType = _b.trafficType, log = _a.log;
|
|
22
|
+
var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, _b = _a.core, key = _b.key, trafficType = _b.trafficType, readyTimeout = _a.startup.readyTimeout, log = _a.log;
|
|
23
23
|
var mainClientInstance = (0, clientCS_1.clientCSDecorator)(log, (0, sdkClient_1.sdkClientFactory)(params), key, trafficType);
|
|
24
24
|
var parsedDefaultKey = (0, key_2.keyParser)(key);
|
|
25
25
|
var defaultInstanceId = buildInstanceId(parsedDefaultKey, trafficType);
|
|
@@ -46,7 +46,7 @@ function sdkClientMethodCSFactory(params) {
|
|
|
46
46
|
var instanceId = buildInstanceId(validKey, validTrafficType);
|
|
47
47
|
if (!clientInstances[instanceId]) {
|
|
48
48
|
var matchingKey = (0, key_2.getMatching)(validKey);
|
|
49
|
-
var sharedSdkReadiness_1 = sdkReadinessManager.shared();
|
|
49
|
+
var sharedSdkReadiness_1 = sdkReadinessManager.shared(readyTimeout);
|
|
50
50
|
var sharedStorage = storage.shared && storage.shared(matchingKey, function (err) {
|
|
51
51
|
if (err) {
|
|
52
52
|
sharedSdkReadiness_1.readinessManager.timeout();
|
package/cjs/sdkFactory/index.js
CHANGED
|
@@ -25,7 +25,7 @@ function sdkFactory(params) {
|
|
|
25
25
|
// On non-recoverable errors, we should mark the SDK as destroyed and not start synchronization.
|
|
26
26
|
// We will just log and allow for the SDK to end up throwing an SDK_TIMEOUT event for devs to handle.
|
|
27
27
|
(0, apiKey_1.validateAndTrackApiKey)(log, settings.core.authorizationKey);
|
|
28
|
-
var sdkReadinessManager = (0, sdkReadinessManager_1.sdkReadinessManagerFactory)(platform.EventEmitter, settings);
|
|
28
|
+
var sdkReadinessManager = (0, sdkReadinessManager_1.sdkReadinessManagerFactory)(log, platform.EventEmitter, settings.startup.readyTimeout);
|
|
29
29
|
var readiness = sdkReadinessManager.readinessManager;
|
|
30
30
|
var storage = storageFactory({
|
|
31
31
|
settings: settings,
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decorateHeaders = void 0;
|
|
4
|
+
var objectAssign_1 = require("../utils/lang/objectAssign");
|
|
5
|
+
var sets_1 = require("../utils/lang/sets");
|
|
6
|
+
var FORBIDDEN_HEADERS = new sets_1._Set([
|
|
7
|
+
'splitsdkversion',
|
|
8
|
+
'splitsdkmachineip',
|
|
9
|
+
'splitsdkmachinename',
|
|
10
|
+
'splitsdkimpressionsmode',
|
|
11
|
+
'host',
|
|
12
|
+
'referrer',
|
|
13
|
+
'content-type',
|
|
14
|
+
'content-length',
|
|
15
|
+
'content-encoding',
|
|
16
|
+
'accept',
|
|
17
|
+
'keep-alive',
|
|
18
|
+
'x-fastly-debug'
|
|
19
|
+
]);
|
|
20
|
+
function convertKeysToLowerCase(obj) {
|
|
21
|
+
return Object.keys(obj).reduce(function (acc, key) {
|
|
22
|
+
acc[key.toLowerCase()] = obj[key];
|
|
23
|
+
return acc;
|
|
24
|
+
}, {});
|
|
25
|
+
}
|
|
26
|
+
function decorateHeaders(settings, headers) {
|
|
27
|
+
var _a;
|
|
28
|
+
if ((_a = settings.sync.requestOptions) === null || _a === void 0 ? void 0 : _a.getHeaderOverrides) {
|
|
29
|
+
headers = convertKeysToLowerCase(headers);
|
|
30
|
+
try {
|
|
31
|
+
var headerOverrides_1 = convertKeysToLowerCase(settings.sync.requestOptions.getHeaderOverrides({ headers: (0, objectAssign_1.objectAssign)({}, headers) }));
|
|
32
|
+
Object.keys(headerOverrides_1)
|
|
33
|
+
.filter(function (key) { return !FORBIDDEN_HEADERS.has(key); })
|
|
34
|
+
.forEach(function (key) { return headers[key] = headerOverrides_1[key]; });
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
settings.log.error('Problem adding custom headers to request decorator: ' + e);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return headers;
|
|
41
|
+
}
|
|
42
|
+
exports.decorateHeaders = decorateHeaders;
|
package/cjs/services/splitApi.js
CHANGED
|
@@ -64,10 +64,6 @@ function splitApiFactory(settings, platform, telemetryTracker) {
|
|
|
64
64
|
var url = urls.sdk + "/mySegments/" + encodeURIComponent(userMatchingKey);
|
|
65
65
|
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(constants_1.MY_SEGMENT));
|
|
66
66
|
},
|
|
67
|
-
fetchMyLargeSegments: function (userMatchingKey, noCache) {
|
|
68
|
-
var url = urls.sdk + "/myLargeSegments/" + encodeURIComponent(userMatchingKey);
|
|
69
|
-
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(constants_1.MY_LARGE_SEGMENT));
|
|
70
|
-
},
|
|
71
67
|
/**
|
|
72
68
|
* Post events.
|
|
73
69
|
*
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.splitHttpClientFactory = void 0;
|
|
4
4
|
var objectAssign_1 = require("../utils/lang/objectAssign");
|
|
5
5
|
var constants_1 = require("../logger/constants");
|
|
6
|
+
var decorateHeaders_1 = require("./decorateHeaders");
|
|
6
7
|
var messageNoFetch = 'Global fetch API is not available.';
|
|
7
8
|
/**
|
|
8
9
|
* Factory of Split HTTP clients, which are HTTP clients with predefined headers for Split endpoints.
|
|
@@ -18,22 +19,22 @@ function splitHttpClientFactory(settings, _a) {
|
|
|
18
19
|
// if fetch is not available, log Error
|
|
19
20
|
if (!fetch)
|
|
20
21
|
log.error(constants_1.ERROR_CLIENT_CANNOT_GET_READY, [messageNoFetch]);
|
|
21
|
-
var
|
|
22
|
+
var commonHeaders = {
|
|
22
23
|
'Accept': 'application/json',
|
|
23
24
|
'Content-Type': 'application/json',
|
|
24
25
|
'Authorization': "Bearer " + authorizationKey,
|
|
25
26
|
'SplitSDKVersion': version
|
|
26
27
|
};
|
|
27
28
|
if (ip)
|
|
28
|
-
|
|
29
|
+
commonHeaders['SplitSDKMachineIP'] = ip;
|
|
29
30
|
if (hostname)
|
|
30
|
-
|
|
31
|
+
commonHeaders['SplitSDKMachineName'] = hostname;
|
|
31
32
|
return function httpClient(url, reqOpts, latencyTracker, logErrorsAsInfo) {
|
|
32
33
|
if (reqOpts === void 0) { reqOpts = {}; }
|
|
33
34
|
if (latencyTracker === void 0) { latencyTracker = function () { }; }
|
|
34
35
|
if (logErrorsAsInfo === void 0) { logErrorsAsInfo = false; }
|
|
35
36
|
var request = (0, objectAssign_1.objectAssign)({
|
|
36
|
-
headers:
|
|
37
|
+
headers: (0, decorateHeaders_1.decorateHeaders)(settings, (0, objectAssign_1.objectAssign)({}, commonHeaders, reqOpts.headers || {})),
|
|
37
38
|
method: reqOpts.method || 'GET',
|
|
38
39
|
body: reqOpts.body
|
|
39
40
|
}, options);
|
|
@@ -9,9 +9,9 @@ var objectAssign_1 = require("../utils/lang/objectAssign");
|
|
|
9
9
|
var AbstractSplitsCacheAsync = /** @class */ (function () {
|
|
10
10
|
function AbstractSplitsCacheAsync() {
|
|
11
11
|
}
|
|
12
|
-
// @TODO revisit segment-related methods ('
|
|
12
|
+
// @TODO revisit segment-related methods ('usesSegments', 'getRegisteredSegments', 'registerSegments')
|
|
13
13
|
// noop, just keeping the interface. This is used by standalone client-side API only, and so only implemented by InMemory and InLocalStorage.
|
|
14
|
-
AbstractSplitsCacheAsync.prototype.
|
|
14
|
+
AbstractSplitsCacheAsync.prototype.usesSegments = function () {
|
|
15
15
|
return Promise.resolve(true);
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.usesSegments = exports.AbstractSplitsCacheSync = void 0;
|
|
4
4
|
var objectAssign_1 = require("../utils/lang/objectAssign");
|
|
5
|
+
var constants_1 = require("../utils/constants");
|
|
5
6
|
/**
|
|
6
7
|
* This class provides a skeletal implementation of the ISplitsCacheSync interface
|
|
7
8
|
* to minimize the effort required to implement this interface.
|
|
@@ -62,17 +63,17 @@ var AbstractSplitsCacheSync = /** @class */ (function () {
|
|
|
62
63
|
exports.AbstractSplitsCacheSync = AbstractSplitsCacheSync;
|
|
63
64
|
/**
|
|
64
65
|
* Given a parsed split, it returns a boolean flagging if its conditions use segments matchers (rules & whitelists).
|
|
65
|
-
* This util is intended to simplify the implementation of `splitsCache::
|
|
66
|
+
* This util is intended to simplify the implementation of `splitsCache::usesSegments` method
|
|
66
67
|
*/
|
|
67
|
-
function
|
|
68
|
+
function usesSegments(split) {
|
|
68
69
|
var conditions = split.conditions || [];
|
|
69
70
|
for (var i = 0; i < conditions.length; i++) {
|
|
70
71
|
var matchers = conditions[i].matcherGroup.matchers;
|
|
71
72
|
for (var j = 0; j < matchers.length; j++) {
|
|
72
|
-
if (matchers[j].matcherType ===
|
|
73
|
+
if (matchers[j].matcherType === constants_1.IN_SEGMENT)
|
|
73
74
|
return true;
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
return false;
|
|
77
78
|
}
|
|
78
|
-
exports.
|
|
79
|
+
exports.usesSegments = usesSegments;
|
|
@@ -40,9 +40,6 @@ var KeyBuilder = /** @class */ (function () {
|
|
|
40
40
|
KeyBuilder.prototype.buildSplitsWithSegmentCountKey = function () {
|
|
41
41
|
return this.prefix + ".splits.usingSegments";
|
|
42
42
|
};
|
|
43
|
-
KeyBuilder.prototype.buildSplitsWithLargeSegmentCountKey = function () {
|
|
44
|
-
return this.prefix + ".splits.usingLargeSegments";
|
|
45
|
-
};
|
|
46
43
|
KeyBuilder.prototype.buildSegmentNameKey = function (segmentName) {
|
|
47
44
|
return this.prefix + ".segment." + segmentName;
|
|
48
45
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.KeyBuilderCS = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var lang_1 = require("../utils/lang");
|
|
6
6
|
var KeyBuilder_1 = require("./KeyBuilder");
|
|
@@ -24,6 +24,10 @@ var KeyBuilderCS = /** @class */ (function (_super) {
|
|
|
24
24
|
return builtSegmentKeyName.substr(prefix.length);
|
|
25
25
|
};
|
|
26
26
|
// @BREAKING: The key used to start with the matching key instead of the prefix, this was changed on version 10.17.3
|
|
27
|
+
KeyBuilderCS.prototype.buildOldSegmentNameKey = function (segmentName) {
|
|
28
|
+
return this.matchingKey + "." + this.prefix + ".segment." + segmentName;
|
|
29
|
+
};
|
|
30
|
+
// @BREAKING: The key used to start with the matching key instead of the prefix, this was changed on version 10.17.3
|
|
27
31
|
KeyBuilderCS.prototype.extractOldSegmentKey = function (builtSegmentKeyName) {
|
|
28
32
|
var prefix = this.matchingKey + "." + this.prefix + ".segment.";
|
|
29
33
|
if ((0, lang_1.startsWith)(builtSegmentKeyName, prefix))
|
|
@@ -38,19 +42,3 @@ var KeyBuilderCS = /** @class */ (function (_super) {
|
|
|
38
42
|
return KeyBuilderCS;
|
|
39
43
|
}(KeyBuilder_1.KeyBuilder));
|
|
40
44
|
exports.KeyBuilderCS = KeyBuilderCS;
|
|
41
|
-
function myLargeSegmentsKeyBuilder(prefix, matchingKey) {
|
|
42
|
-
return {
|
|
43
|
-
buildSegmentNameKey: function (segmentName) {
|
|
44
|
-
return prefix + "." + matchingKey + ".largeSegment." + segmentName;
|
|
45
|
-
},
|
|
46
|
-
extractSegmentName: function (builtSegmentKeyName) {
|
|
47
|
-
var p = prefix + "." + matchingKey + ".largeSegment.";
|
|
48
|
-
if ((0, lang_1.startsWith)(builtSegmentKeyName, p))
|
|
49
|
-
return builtSegmentKeyName.substr(p.length);
|
|
50
|
-
},
|
|
51
|
-
extractOldSegmentKey: function () {
|
|
52
|
-
return undefined;
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
exports.myLargeSegmentsKeyBuilder = myLargeSegmentsKeyBuilder;
|
|
@@ -7,7 +7,6 @@ var lang_1 = require("../../utils/lang");
|
|
|
7
7
|
var constants_1 = require("./constants");
|
|
8
8
|
var sets_1 = require("../../utils/lang/sets");
|
|
9
9
|
var KeyBuilder_1 = require("../KeyBuilder");
|
|
10
|
-
var constants_2 = require("../../utils/constants");
|
|
11
10
|
/**
|
|
12
11
|
* ISplitsCacheSync implementation that stores split definitions in browser LocalStorage.
|
|
13
12
|
*/
|
|
@@ -41,14 +40,10 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
41
40
|
if (split) {
|
|
42
41
|
var ttKey = this.keys.buildTrafficTypeKey(split.trafficTypeName);
|
|
43
42
|
this._decrementCount(ttKey);
|
|
44
|
-
if ((0, AbstractSplitsCacheSync_1.
|
|
43
|
+
if ((0, AbstractSplitsCacheSync_1.usesSegments)(split)) {
|
|
45
44
|
var segmentsCountKey = this.keys.buildSplitsWithSegmentCountKey();
|
|
46
45
|
this._decrementCount(segmentsCountKey);
|
|
47
46
|
}
|
|
48
|
-
if ((0, AbstractSplitsCacheSync_1.usesMatcher)(split, constants_2.IN_LARGE_SEGMENT)) {
|
|
49
|
-
var segmentsCountKey = this.keys.buildSplitsWithLargeSegmentCountKey();
|
|
50
|
-
this._decrementCount(segmentsCountKey);
|
|
51
|
-
}
|
|
52
47
|
}
|
|
53
48
|
}
|
|
54
49
|
catch (e) {
|
|
@@ -61,16 +56,11 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
61
56
|
var ttKey = this.keys.buildTrafficTypeKey(split.trafficTypeName);
|
|
62
57
|
// @ts-expect-error
|
|
63
58
|
localStorage.setItem(ttKey, (0, lang_1.toNumber)(localStorage.getItem(ttKey)) + 1);
|
|
64
|
-
if ((0, AbstractSplitsCacheSync_1.
|
|
59
|
+
if ((0, AbstractSplitsCacheSync_1.usesSegments)(split)) {
|
|
65
60
|
var segmentsCountKey = this.keys.buildSplitsWithSegmentCountKey();
|
|
66
61
|
// @ts-expect-error
|
|
67
62
|
localStorage.setItem(segmentsCountKey, (0, lang_1.toNumber)(localStorage.getItem(segmentsCountKey)) + 1);
|
|
68
63
|
}
|
|
69
|
-
if ((0, AbstractSplitsCacheSync_1.usesMatcher)(split, constants_2.IN_LARGE_SEGMENT)) {
|
|
70
|
-
var segmentsCountKey = this.keys.buildSplitsWithLargeSegmentCountKey();
|
|
71
|
-
// @ts-expect-error
|
|
72
|
-
localStorage.setItem(segmentsCountKey, (0, lang_1.toNumber)(localStorage.getItem(segmentsCountKey)) + 1);
|
|
73
|
-
}
|
|
74
64
|
}
|
|
75
65
|
}
|
|
76
66
|
catch (e) {
|
|
@@ -183,13 +173,11 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
183
173
|
var ttCount = (0, lang_1.toNumber)(localStorage.getItem(this.keys.buildTrafficTypeKey(trafficType)));
|
|
184
174
|
return (0, lang_1.isFiniteNumber)(ttCount) && ttCount > 0;
|
|
185
175
|
};
|
|
186
|
-
SplitsCacheInLocal.prototype.
|
|
176
|
+
SplitsCacheInLocal.prototype.usesSegments = function () {
|
|
187
177
|
// If cache hasn't been synchronized with the cloud, assume we need them.
|
|
188
178
|
if (!this.hasSync)
|
|
189
179
|
return true;
|
|
190
|
-
var storedCount = localStorage.getItem(
|
|
191
|
-
this.keys.buildSplitsWithSegmentCountKey() :
|
|
192
|
-
this.keys.buildSplitsWithLargeSegmentCountKey());
|
|
180
|
+
var storedCount = localStorage.getItem(this.keys.buildSplitsWithSegmentCountKey());
|
|
193
181
|
var splitsWithSegmentsCount = storedCount === null ? 0 : (0, lang_1.toNumber)(storedCount);
|
|
194
182
|
if ((0, lang_1.isFiniteNumber)(splitsWithSegmentsCount)) {
|
|
195
183
|
return splitsWithSegmentsCount > 0;
|
|
@@ -36,11 +36,9 @@ function InLocalStorage(options) {
|
|
|
36
36
|
var expirationTimestamp = Date.now() - browser_1.DEFAULT_CACHE_EXPIRATION_IN_MILLIS;
|
|
37
37
|
var splits = new SplitsCacheInLocal_1.SplitsCacheInLocal(settings, keys, expirationTimestamp);
|
|
38
38
|
var segments = new MySegmentsCacheInLocal_1.MySegmentsCacheInLocal(log, keys);
|
|
39
|
-
var largeSegments = new MySegmentsCacheInLocal_1.MySegmentsCacheInLocal(log, (0, KeyBuilderCS_1.myLargeSegmentsKeyBuilder)(prefix, matchingKey));
|
|
40
39
|
return {
|
|
41
40
|
splits: splits,
|
|
42
41
|
segments: segments,
|
|
43
|
-
largeSegments: largeSegments,
|
|
44
42
|
impressions: new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(impressionsQueueSize),
|
|
45
43
|
impressionCounts: impressionsMode !== constants_2.DEBUG ? new ImpressionCountsCacheInMemory_1.ImpressionCountsCacheInMemory() : undefined,
|
|
46
44
|
events: new EventsCacheInMemory_1.EventsCacheInMemory(eventsQueueSize),
|
|
@@ -50,7 +48,6 @@ function InLocalStorage(options) {
|
|
|
50
48
|
var _a;
|
|
51
49
|
this.splits = new SplitsCacheInMemory_1.SplitsCacheInMemory(__splitFiltersValidation);
|
|
52
50
|
this.segments = new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory();
|
|
53
|
-
this.largeSegments = new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory();
|
|
54
51
|
this.impressions.clear();
|
|
55
52
|
this.impressionCounts && this.impressionCounts.clear();
|
|
56
53
|
this.events.clear();
|
|
@@ -58,10 +55,10 @@ function InLocalStorage(options) {
|
|
|
58
55
|
},
|
|
59
56
|
// When using shared instanciation with MEMORY we reuse everything but segments (they are customer per key).
|
|
60
57
|
shared: function (matchingKey) {
|
|
58
|
+
var childKeysBuilder = new KeyBuilderCS_1.KeyBuilderCS(prefix, matchingKey);
|
|
61
59
|
return {
|
|
62
60
|
splits: this.splits,
|
|
63
|
-
segments: new MySegmentsCacheInLocal_1.MySegmentsCacheInLocal(log,
|
|
64
|
-
largeSegments: new MySegmentsCacheInLocal_1.MySegmentsCacheInLocal(log, (0, KeyBuilderCS_1.myLargeSegmentsKeyBuilder)(prefix, matchingKey)),
|
|
61
|
+
segments: new MySegmentsCacheInLocal_1.MySegmentsCacheInLocal(log, childKeysBuilder),
|
|
65
62
|
impressions: this.impressions,
|
|
66
63
|
impressionCounts: this.impressionCounts,
|
|
67
64
|
events: this.events,
|
|
@@ -69,7 +66,6 @@ function InLocalStorage(options) {
|
|
|
69
66
|
destroy: function () {
|
|
70
67
|
this.splits = new SplitsCacheInMemory_1.SplitsCacheInMemory(__splitFiltersValidation);
|
|
71
68
|
this.segments = new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory();
|
|
72
|
-
this.largeSegments = new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory();
|
|
73
69
|
}
|
|
74
70
|
};
|
|
75
71
|
},
|
|
@@ -18,11 +18,9 @@ function InMemoryStorageCSFactory(params) {
|
|
|
18
18
|
var _a = params.settings, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize, _c = _a.sync, impressionsMode = _c.impressionsMode, __splitFiltersValidation = _c.__splitFiltersValidation;
|
|
19
19
|
var splits = new SplitsCacheInMemory_1.SplitsCacheInMemory(__splitFiltersValidation);
|
|
20
20
|
var segments = new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory();
|
|
21
|
-
var largeSegments = new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory();
|
|
22
21
|
var storage = {
|
|
23
22
|
splits: splits,
|
|
24
23
|
segments: segments,
|
|
25
|
-
largeSegments: largeSegments,
|
|
26
24
|
impressions: new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(impressionsQueueSize),
|
|
27
25
|
impressionCounts: impressionsMode !== constants_1.DEBUG ? new ImpressionCountsCacheInMemory_1.ImpressionCountsCacheInMemory() : undefined,
|
|
28
26
|
events: new EventsCacheInMemory_1.EventsCacheInMemory(eventsQueueSize),
|
|
@@ -32,7 +30,6 @@ function InMemoryStorageCSFactory(params) {
|
|
|
32
30
|
destroy: function () {
|
|
33
31
|
this.splits.clear();
|
|
34
32
|
this.segments.clear();
|
|
35
|
-
this.largeSegments.clear();
|
|
36
33
|
this.impressions.clear();
|
|
37
34
|
this.impressionCounts && this.impressionCounts.clear();
|
|
38
35
|
this.events.clear();
|
|
@@ -43,7 +40,6 @@ function InMemoryStorageCSFactory(params) {
|
|
|
43
40
|
return {
|
|
44
41
|
splits: this.splits,
|
|
45
42
|
segments: new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory(),
|
|
46
|
-
largeSegments: new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory(),
|
|
47
43
|
impressions: this.impressions,
|
|
48
44
|
impressionCounts: this.impressionCounts,
|
|
49
45
|
events: this.events,
|
|
@@ -52,7 +48,6 @@ function InMemoryStorageCSFactory(params) {
|
|
|
52
48
|
destroy: function () {
|
|
53
49
|
this.splits = new SplitsCacheInMemory_1.SplitsCacheInMemory(__splitFiltersValidation);
|
|
54
50
|
this.segments.clear();
|
|
55
|
-
this.largeSegments.clear();
|
|
56
51
|
}
|
|
57
52
|
};
|
|
58
53
|
},
|