@splitsoftware/splitio-commons 2.6.0 → 2.6.1-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 +3 -0
- package/cjs/listeners/browser.js +1 -0
- package/cjs/logger/constants.js +4 -3
- package/cjs/logger/index.js +18 -0
- package/cjs/logger/messages/info.js +1 -0
- package/cjs/logger/sdkLogger.js +7 -0
- package/cjs/storages/inMemory/EventsCacheInMemory.js +1 -0
- package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -0
- package/cjs/storages/inMemory/ImpressionsCacheInMemory.js +1 -0
- package/cjs/storages/inMemory/TelemetryCacheInMemory.js +1 -0
- package/cjs/storages/inMemory/UniqueKeysCacheInMemory.js +1 -0
- package/cjs/storages/inMemory/UniqueKeysCacheInMemoryCS.js +1 -0
- package/cjs/sync/submitters/eventsSubmitter.js +2 -3
- package/cjs/sync/submitters/impressionCountsSubmitter.js +1 -1
- package/cjs/sync/submitters/impressionsSubmitter.js +2 -4
- package/cjs/sync/submitters/submitter.js +2 -1
- package/cjs/sync/submitters/telemetrySubmitter.js +3 -2
- package/cjs/sync/submitters/uniqueKeysSubmitter.js +2 -3
- package/cjs/utils/settingsValidation/logger/builtinLogger.js +2 -1
- package/cjs/utils/settingsValidation/logger/commons.js +12 -15
- package/cjs/utils/settingsValidation/logger/pluggableLogger.js +7 -4
- package/esm/listeners/browser.js +2 -1
- package/esm/logger/constants.js +1 -0
- package/esm/logger/index.js +18 -0
- package/esm/logger/messages/info.js +1 -0
- package/esm/logger/sdkLogger.js +7 -0
- package/esm/storages/inMemory/EventsCacheInMemory.js +1 -0
- package/esm/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -0
- package/esm/storages/inMemory/ImpressionsCacheInMemory.js +1 -0
- package/esm/storages/inMemory/TelemetryCacheInMemory.js +1 -0
- package/esm/storages/inMemory/UniqueKeysCacheInMemory.js +1 -0
- package/esm/storages/inMemory/UniqueKeysCacheInMemoryCS.js +1 -0
- package/esm/sync/submitters/eventsSubmitter.js +2 -3
- package/esm/sync/submitters/impressionCountsSubmitter.js +1 -1
- package/esm/sync/submitters/impressionsSubmitter.js +2 -4
- package/esm/sync/submitters/submitter.js +2 -1
- package/esm/sync/submitters/telemetrySubmitter.js +3 -2
- package/esm/sync/submitters/uniqueKeysSubmitter.js +2 -3
- package/esm/utils/settingsValidation/logger/builtinLogger.js +2 -1
- package/esm/utils/settingsValidation/logger/commons.js +10 -14
- package/esm/utils/settingsValidation/logger/pluggableLogger.js +8 -5
- package/package.json +1 -1
- package/src/listeners/browser.ts +2 -1
- package/src/logger/constants.ts +1 -0
- package/src/logger/index.ts +19 -0
- package/src/logger/messages/info.ts +1 -0
- package/src/logger/sdkLogger.ts +7 -0
- package/src/logger/types.ts +5 -3
- package/src/storages/inMemory/EventsCacheInMemory.ts +1 -0
- package/src/storages/inMemory/ImpressionCountsCacheInMemory.ts +2 -0
- package/src/storages/inMemory/ImpressionsCacheInMemory.ts +1 -0
- package/src/storages/inMemory/TelemetryCacheInMemory.ts +2 -0
- package/src/storages/inMemory/UniqueKeysCacheInMemory.ts +3 -3
- package/src/storages/inMemory/UniqueKeysCacheInMemoryCS.ts +3 -3
- package/src/storages/types.ts +1 -0
- package/src/sync/submitters/eventsSubmitter.ts +2 -4
- package/src/sync/submitters/impressionCountsSubmitter.ts +1 -1
- package/src/sync/submitters/impressionsSubmitter.ts +2 -5
- package/src/sync/submitters/submitter.ts +1 -1
- package/src/sync/submitters/telemetrySubmitter.ts +3 -2
- package/src/sync/submitters/uniqueKeysSubmitter.ts +2 -3
- package/src/utils/settingsValidation/logger/builtinLogger.ts +3 -2
- package/src/utils/settingsValidation/logger/commons.ts +11 -11
- package/src/utils/settingsValidation/logger/pluggableLogger.ts +10 -6
- package/types/splitio.d.ts +22 -0
package/CHANGES.txt
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
2.7.0 (October XX, 2025)
|
|
2
|
+
- Added support for custom loggers: added `logger` configuration option and `LoggerAPI.setLogger` method to allow the SDK to use a custom logger.
|
|
3
|
+
|
|
1
4
|
2.6.0 (September 18, 2025)
|
|
2
5
|
- Added `storage.wrapper` configuration option to allow the SDK to use a custom storage wrapper for the storage type `LOCALSTORAGE`. Default value is `window.localStorage`.
|
|
3
6
|
|
package/cjs/listeners/browser.js
CHANGED
|
@@ -87,6 +87,7 @@ var BrowserSignalListener = /** @class */ (function () {
|
|
|
87
87
|
if (!this._sendBeacon(url, dataPayload, extraMetadata)) {
|
|
88
88
|
postService(JSON.stringify(dataPayload)).catch(function () { }); // no-op to handle possible promise rejection
|
|
89
89
|
}
|
|
90
|
+
this.settings.log.debug(constants_1.SUBMITTERS_PUSH_PAGE_HIDDEN, [cache.name]);
|
|
90
91
|
}
|
|
91
92
|
};
|
|
92
93
|
/**
|
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_HTTP = void 0;
|
|
3
|
+
exports.SUBMITTERS_PUSH_PAGE_HIDDEN = 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_DEFAULT = 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_RBS_UPDATE = exports.SYNC_SPLITS_UPDATE = 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_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_MEMBERSHIPS_UPDATE = 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 = exports.ENGINE_VALUE_INVALID = 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_HTTP = exports.ERROR_INVALID_CONFIG_PARAM = 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.
|
|
@@ -59,6 +59,7 @@ exports.IMPRESSIONS_TRACKER_SUCCESS = 121;
|
|
|
59
59
|
exports.USER_CONSENT_UPDATED = 122;
|
|
60
60
|
exports.USER_CONSENT_NOT_UPDATED = 123;
|
|
61
61
|
exports.USER_CONSENT_INITIAL = 124;
|
|
62
|
+
exports.SUBMITTERS_PUSH_PAGE_HIDDEN = 125;
|
|
62
63
|
exports.ENGINE_VALUE_INVALID = 200;
|
|
63
64
|
exports.ENGINE_VALUE_NO_ATTRIBUTES = 201;
|
|
64
65
|
exports.CLIENT_NO_LISTENER = 202;
|
package/cjs/logger/index.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Logger = exports._sprintf = exports.isLogLevelString = exports.LogLevels = void 0;
|
|
4
4
|
var objectAssign_1 = require("../utils/lang/objectAssign");
|
|
5
5
|
var lang_1 = require("../utils/lang");
|
|
6
|
+
var commons_1 = require("../utils/settingsValidation/logger/commons");
|
|
6
7
|
exports.LogLevels = {
|
|
7
8
|
DEBUG: 'DEBUG',
|
|
8
9
|
INFO: 'INFO',
|
|
@@ -53,6 +54,15 @@ var Logger = /** @class */ (function () {
|
|
|
53
54
|
this.options.logLevel = logLevel;
|
|
54
55
|
this.logLevel = LogLevelIndexes[logLevel];
|
|
55
56
|
};
|
|
57
|
+
Logger.prototype.setLogger = function (logger) {
|
|
58
|
+
if (!logger || (0, commons_1.isLogger)(logger)) {
|
|
59
|
+
this.logger = logger;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this._log(exports.LogLevels.ERROR, 'Invalid `logger` instance. It must be an object with `debug`, `info`, `warn` and `error` methods. Defaulting to `console.log`');
|
|
63
|
+
this.logger = undefined;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
56
66
|
Logger.prototype.debug = function (msg, args) {
|
|
57
67
|
if (this._shouldLog(LogLevelIndexes.DEBUG))
|
|
58
68
|
this._log(exports.LogLevels.DEBUG, msg, args);
|
|
@@ -79,6 +89,14 @@ var Logger = /** @class */ (function () {
|
|
|
79
89
|
msg = _sprintf(msg, args);
|
|
80
90
|
}
|
|
81
91
|
var formattedText = this._generateLogMessage(level, msg);
|
|
92
|
+
// Do not break on custom logger errors
|
|
93
|
+
if (this.logger) {
|
|
94
|
+
try { // @ts-expect-error
|
|
95
|
+
this.logger[level.toLowerCase()](formattedText);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
catch (e) { /* empty */ }
|
|
99
|
+
}
|
|
82
100
|
console.log(formattedText);
|
|
83
101
|
};
|
|
84
102
|
Logger.prototype._generateLogMessage = function (level, text) {
|
|
@@ -26,6 +26,7 @@ exports.codesInfo = warn_1.codesWarn.concat([
|
|
|
26
26
|
[c.SYNC_SPLITS_FETCH_RETRY, c.LOG_PREFIX_SYNC_SPLITS + 'Retrying download of feature flags #%s. Reason: %s'],
|
|
27
27
|
[c.SUBMITTERS_PUSH_FULL_QUEUE, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Flushing full %s queue and resetting timer.'],
|
|
28
28
|
[c.SUBMITTERS_PUSH, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Pushing %s.'],
|
|
29
|
+
[c.SUBMITTERS_PUSH_PAGE_HIDDEN, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Flushing %s because page became hidden.'],
|
|
29
30
|
[c.STREAMING_REFRESH_TOKEN, c.LOG_PREFIX_SYNC_STREAMING + 'Refreshing streaming token in %s seconds, and connecting streaming in %s seconds.'],
|
|
30
31
|
[c.STREAMING_RECONNECT, c.LOG_PREFIX_SYNC_STREAMING + 'Attempting to reconnect streaming in %s seconds.'],
|
|
31
32
|
[c.STREAMING_CONNECTING, c.LOG_PREFIX_SYNC_STREAMING + 'Connecting streaming.'],
|
package/cjs/logger/sdkLogger.js
CHANGED
|
@@ -29,6 +29,13 @@ function createLoggerAPI(log) {
|
|
|
29
29
|
* @param logLevel - Custom LogLevel value.
|
|
30
30
|
*/
|
|
31
31
|
setLogLevel: setLogLevel,
|
|
32
|
+
/**
|
|
33
|
+
* Sets a custom logger for the SDK logs.
|
|
34
|
+
* @param logger - Custom logger.
|
|
35
|
+
*/
|
|
36
|
+
setLogger: function (logger) {
|
|
37
|
+
log.setLogger(logger);
|
|
38
|
+
},
|
|
32
39
|
/**
|
|
33
40
|
* Disables all the log levels.
|
|
34
41
|
*/
|
|
@@ -10,6 +10,7 @@ var EventsCacheInMemory = /** @class */ (function () {
|
|
|
10
10
|
*/
|
|
11
11
|
function EventsCacheInMemory(eventsQueueSize) {
|
|
12
12
|
if (eventsQueueSize === void 0) { eventsQueueSize = 0; }
|
|
13
|
+
this.name = 'events';
|
|
13
14
|
this.maxQueue = eventsQueueSize;
|
|
14
15
|
this.queue = [];
|
|
15
16
|
this.queueByteSize = 0;
|
|
@@ -6,6 +6,7 @@ var constants_1 = require("../inRedis/constants");
|
|
|
6
6
|
var ImpressionCountsCacheInMemory = /** @class */ (function () {
|
|
7
7
|
function ImpressionCountsCacheInMemory(impressionCountsCacheSize) {
|
|
8
8
|
if (impressionCountsCacheSize === void 0) { impressionCountsCacheSize = constants_1.DEFAULT_CACHE_SIZE; }
|
|
9
|
+
this.name = 'impression counts';
|
|
9
10
|
this.cache = {};
|
|
10
11
|
this.cacheSize = 0;
|
|
11
12
|
this.maxStorage = impressionCountsCacheSize;
|
|
@@ -9,6 +9,7 @@ var ImpressionsCacheInMemory = /** @class */ (function () {
|
|
|
9
9
|
*/
|
|
10
10
|
function ImpressionsCacheInMemory(impressionsQueueSize) {
|
|
11
11
|
if (impressionsQueueSize === void 0) { impressionsQueueSize = 0; }
|
|
12
|
+
this.name = 'impressions';
|
|
12
13
|
this.maxQueue = impressionsQueueSize;
|
|
13
14
|
this.queue = [];
|
|
14
15
|
}
|
|
@@ -24,6 +24,7 @@ exports.fromUniqueKeysCollector = fromUniqueKeysCollector;
|
|
|
24
24
|
var UniqueKeysCacheInMemory = /** @class */ (function () {
|
|
25
25
|
function UniqueKeysCacheInMemory(uniqueKeysQueueSize) {
|
|
26
26
|
if (uniqueKeysQueueSize === void 0) { uniqueKeysQueueSize = constants_1.DEFAULT_CACHE_SIZE; }
|
|
27
|
+
this.name = 'unique keys';
|
|
27
28
|
this.uniqueTrackerSize = 0;
|
|
28
29
|
this.uniqueKeysTracker = {};
|
|
29
30
|
this.maxStorage = uniqueKeysQueueSize;
|
|
@@ -6,6 +6,7 @@ var sets_1 = require("../../utils/lang/sets");
|
|
|
6
6
|
var UniqueKeysCacheInMemoryCS = /** @class */ (function () {
|
|
7
7
|
function UniqueKeysCacheInMemoryCS(uniqueKeysQueueSize) {
|
|
8
8
|
if (uniqueKeysQueueSize === void 0) { uniqueKeysQueueSize = constants_1.DEFAULT_CACHE_SIZE; }
|
|
9
|
+
this.name = 'unique keys';
|
|
9
10
|
this.uniqueTrackerSize = 0;
|
|
10
11
|
this.uniqueKeysTracker = {};
|
|
11
12
|
this.maxStorage = uniqueKeysQueueSize;
|
|
@@ -3,21 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.eventsSubmitterFactory = void 0;
|
|
4
4
|
var submitter_1 = require("./submitter");
|
|
5
5
|
var constants_1 = require("../../logger/constants");
|
|
6
|
-
var DATA_NAME = 'events';
|
|
7
6
|
/**
|
|
8
7
|
* Submitter that periodically posts tracked events
|
|
9
8
|
*/
|
|
10
9
|
function eventsSubmitterFactory(params) {
|
|
11
10
|
var _a = params.settings, log = _a.log, eventsPushRate = _a.scheduler.eventsPushRate, eventsFirstPushWindow = _a.startup.eventsFirstPushWindow, postEventsBulk = params.splitApi.postEventsBulk, events = params.storage.events;
|
|
12
11
|
// don't retry events.
|
|
13
|
-
var submitter = (0, submitter_1.submitterFactory)(log, postEventsBulk, events, eventsPushRate
|
|
12
|
+
var submitter = (0, submitter_1.submitterFactory)(log, postEventsBulk, events, eventsPushRate);
|
|
14
13
|
// Set a timer for the first push window of events.
|
|
15
14
|
if (eventsFirstPushWindow > 0)
|
|
16
15
|
submitter = (0, submitter_1.firstPushWindowDecorator)(submitter, eventsFirstPushWindow);
|
|
17
16
|
// register events submitter to be executed when events cache is full
|
|
18
17
|
events.setOnFullQueueCb(function () {
|
|
19
18
|
if (submitter.isRunning()) {
|
|
20
|
-
log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [
|
|
19
|
+
log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [events.name]);
|
|
21
20
|
submitter.execute();
|
|
22
21
|
}
|
|
23
22
|
// If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data.
|
|
@@ -31,6 +31,6 @@ var IMPRESSIONS_COUNT_RATE = 1800000; // 30 minutes
|
|
|
31
31
|
function impressionCountsSubmitterFactory(params) {
|
|
32
32
|
var log = params.settings.log, postTestImpressionsCount = params.splitApi.postTestImpressionsCount, impressionCounts = params.storage.impressionCounts;
|
|
33
33
|
// retry impressions counts only once.
|
|
34
|
-
return (0, submitter_1.submitterFactory)(log, postTestImpressionsCount, impressionCounts, IMPRESSIONS_COUNT_RATE,
|
|
34
|
+
return (0, submitter_1.submitterFactory)(log, postTestImpressionsCount, impressionCounts, IMPRESSIONS_COUNT_RATE, fromImpressionCountsCollector, 1);
|
|
35
35
|
}
|
|
36
36
|
exports.impressionCountsSubmitterFactory = impressionCountsSubmitterFactory;
|
|
@@ -4,14 +4,12 @@ exports.impressionsSubmitterFactory = exports.fromImpressionsCollector = void 0;
|
|
|
4
4
|
var lang_1 = require("../../utils/lang");
|
|
5
5
|
var submitter_1 = require("./submitter");
|
|
6
6
|
var constants_1 = require("../../logger/constants");
|
|
7
|
-
var DATA_NAME = 'impressions';
|
|
8
7
|
/**
|
|
9
8
|
* Converts `impressions` data from cache into request payload.
|
|
10
9
|
*/
|
|
11
10
|
function fromImpressionsCollector(sendLabels, data) {
|
|
12
11
|
var groupedByFeature = (0, lang_1.groupBy)(data, 'feature');
|
|
13
12
|
var dto = [];
|
|
14
|
-
// using forOwn instead of for...in since the last also iterates over prototype enumerables
|
|
15
13
|
(0, lang_1.forOwn)(groupedByFeature, function (value, name) {
|
|
16
14
|
dto.push({
|
|
17
15
|
f: name,
|
|
@@ -39,11 +37,11 @@ exports.fromImpressionsCollector = fromImpressionsCollector;
|
|
|
39
37
|
function impressionsSubmitterFactory(params) {
|
|
40
38
|
var _a = params.settings, log = _a.log, impressionsRefreshRate = _a.scheduler.impressionsRefreshRate, labelsEnabled = _a.core.labelsEnabled, postTestImpressionsBulk = params.splitApi.postTestImpressionsBulk, impressions = params.storage.impressions;
|
|
41
39
|
// retry impressions only once.
|
|
42
|
-
var syncTask = (0, submitter_1.submitterFactory)(log, postTestImpressionsBulk, impressions, impressionsRefreshRate,
|
|
40
|
+
var syncTask = (0, submitter_1.submitterFactory)(log, postTestImpressionsBulk, impressions, impressionsRefreshRate, fromImpressionsCollector.bind(undefined, labelsEnabled), 1);
|
|
43
41
|
// register impressions submitter to be executed when impressions cache is full
|
|
44
42
|
impressions.setOnFullQueueCb(function () {
|
|
45
43
|
if (syncTask.isRunning()) {
|
|
46
|
-
log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [
|
|
44
|
+
log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [impressions.name]);
|
|
47
45
|
syncTask.execute();
|
|
48
46
|
}
|
|
49
47
|
// If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data.
|
|
@@ -6,9 +6,10 @@ var constants_1 = require("../../logger/constants");
|
|
|
6
6
|
/**
|
|
7
7
|
* Base function to create submitters, such as ImpressionsSubmitter and EventsSubmitter
|
|
8
8
|
*/
|
|
9
|
-
function submitterFactory(log, postClient, sourceCache, postRate,
|
|
9
|
+
function submitterFactory(log, postClient, sourceCache, postRate, fromCacheToPayload, maxRetries, debugLogs // true for telemetry submitters
|
|
10
10
|
) {
|
|
11
11
|
if (maxRetries === void 0) { maxRetries = 0; }
|
|
12
|
+
var dataName = sourceCache.name;
|
|
12
13
|
var retries = 0;
|
|
13
14
|
var data;
|
|
14
15
|
function postData() {
|
|
@@ -57,6 +57,7 @@ exports.getTelemetryConfigStats = getTelemetryConfigStats;
|
|
|
57
57
|
*/
|
|
58
58
|
function telemetryCacheConfigAdapter(telemetry, settings) {
|
|
59
59
|
return {
|
|
60
|
+
name: 'telemetry config',
|
|
60
61
|
isEmpty: function () { return false; },
|
|
61
62
|
clear: function () { },
|
|
62
63
|
pop: function () {
|
|
@@ -107,7 +108,7 @@ function telemetrySubmitterFactory(params) {
|
|
|
107
108
|
return; // No submitter created if telemetry cache is not defined
|
|
108
109
|
var settings = params.settings, _a = params.settings, log = _a.log, telemetryRefreshRate = _a.scheduler.telemetryRefreshRate, splitApi = params.splitApi, readiness = params.readiness, sdkReadinessManager = params.sdkReadinessManager;
|
|
109
110
|
var startTime = (0, timer_1.timer)(now);
|
|
110
|
-
var submitter = (0, submitter_1.firstPushWindowDecorator)((0, submitter_1.submitterFactory)(log, splitApi.postMetricsUsage, telemetry, telemetryRefreshRate,
|
|
111
|
+
var submitter = (0, submitter_1.firstPushWindowDecorator)((0, submitter_1.submitterFactory)(log, splitApi.postMetricsUsage, telemetry, telemetryRefreshRate, undefined, 0, true), telemetryRefreshRate);
|
|
111
112
|
readiness.gate.once(constants_2.SDK_READY_FROM_CACHE, function () {
|
|
112
113
|
telemetry.recordTimeUntilReadyFromCache(startTime());
|
|
113
114
|
});
|
|
@@ -116,7 +117,7 @@ function telemetrySubmitterFactory(params) {
|
|
|
116
117
|
telemetry.recordTimeUntilReady(startTime());
|
|
117
118
|
// Post config data when the SDK is ready and if the telemetry submitter was started
|
|
118
119
|
if (submitter.isRunning()) {
|
|
119
|
-
var postMetricsConfigTask = (0, submitter_1.submitterFactory)(log, splitApi.postMetricsConfig, telemetryCacheConfigAdapter(telemetry, settings), 0,
|
|
120
|
+
var postMetricsConfigTask = (0, submitter_1.submitterFactory)(log, splitApi.postMetricsConfig, telemetryCacheConfigAdapter(telemetry, settings), 0, undefined, 0, true);
|
|
120
121
|
postMetricsConfigTask.execute();
|
|
121
122
|
}
|
|
122
123
|
});
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.uniqueKeysSubmitterFactory = void 0;
|
|
4
4
|
var constants_1 = require("../../logger/constants");
|
|
5
5
|
var submitter_1 = require("./submitter");
|
|
6
|
-
var DATA_NAME = 'unique keys';
|
|
7
6
|
var UNIQUE_KEYS_RATE = 900000; // 15 minutes
|
|
8
7
|
/**
|
|
9
8
|
* Submitter that periodically posts impression counts
|
|
@@ -12,11 +11,11 @@ function uniqueKeysSubmitterFactory(params) {
|
|
|
12
11
|
var _a = params.settings, log = _a.log, key = _a.core.key, _b = params.splitApi, postUniqueKeysBulkCs = _b.postUniqueKeysBulkCs, postUniqueKeysBulkSs = _b.postUniqueKeysBulkSs, uniqueKeys = params.storage.uniqueKeys;
|
|
13
12
|
var isClientSide = key !== undefined;
|
|
14
13
|
var postUniqueKeysBulk = isClientSide ? postUniqueKeysBulkCs : postUniqueKeysBulkSs;
|
|
15
|
-
var syncTask = (0, submitter_1.submitterFactory)(log, postUniqueKeysBulk, uniqueKeys, UNIQUE_KEYS_RATE
|
|
14
|
+
var syncTask = (0, submitter_1.submitterFactory)(log, postUniqueKeysBulk, uniqueKeys, UNIQUE_KEYS_RATE);
|
|
16
15
|
// register unique keys submitter to be executed when uniqueKeys cache is full
|
|
17
16
|
uniqueKeys.setOnFullQueueCb(function () {
|
|
18
17
|
if (syncTask.isRunning()) {
|
|
19
|
-
log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [
|
|
18
|
+
log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [uniqueKeys.name]);
|
|
20
19
|
syncTask.execute();
|
|
21
20
|
}
|
|
22
21
|
// If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data.
|
|
@@ -35,9 +35,10 @@ else if ((0, logger_1.isLogLevelString)(initialState)) {
|
|
|
35
35
|
* @returns a logger instance with the log level at `settings.debug`. If `settings.debug` is invalid or not provided, `initialLogLevel` is used.
|
|
36
36
|
*/
|
|
37
37
|
function validateLogger(settings) {
|
|
38
|
-
var debug = settings.debug;
|
|
38
|
+
var debug = settings.debug, logger = settings.logger;
|
|
39
39
|
var logLevel = debug !== undefined ? (0, commons_1.getLogLevel)(debug) : initialLogLevel;
|
|
40
40
|
var log = new logger_1.Logger({ logLevel: logLevel || initialLogLevel }, allCodes);
|
|
41
|
+
log.setLogger(logger);
|
|
41
42
|
// @ts-ignore // if logLevel is undefined at this point, it means that settings `debug` value is invalid
|
|
42
43
|
if (!logLevel)
|
|
43
44
|
log._log(logger_1.LogLevels.ERROR, 'Invalid Log Level - No changes to the logs will be applied.');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getLogLevel = void 0;
|
|
3
|
+
exports.isLogger = exports.getLogLevel = void 0;
|
|
4
4
|
var logger_1 = require("../../../logger");
|
|
5
5
|
/**
|
|
6
6
|
* Returns the LogLevel for the given debugValue or undefined if it is invalid,
|
|
@@ -10,19 +10,16 @@ var logger_1 = require("../../../logger");
|
|
|
10
10
|
* @returns LogLevel of the given debugValue or undefined if the provided value is invalid
|
|
11
11
|
*/
|
|
12
12
|
function getLogLevel(debugValue) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
else if (typeof debugValue === 'string' && (0, logger_1.isLogLevelString)(debugValue)) {
|
|
22
|
-
return debugValue;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
return undefined;
|
|
26
|
-
}
|
|
13
|
+
return typeof debugValue === 'boolean' ?
|
|
14
|
+
debugValue ?
|
|
15
|
+
logger_1.LogLevels.DEBUG :
|
|
16
|
+
logger_1.LogLevels.NONE :
|
|
17
|
+
typeof debugValue === 'string' && (0, logger_1.isLogLevelString)(debugValue) ?
|
|
18
|
+
debugValue :
|
|
19
|
+
undefined;
|
|
27
20
|
}
|
|
28
21
|
exports.getLogLevel = getLogLevel;
|
|
22
|
+
function isLogger(log) {
|
|
23
|
+
return log !== null && typeof log === 'object' && typeof log.debug === 'function' && typeof log.info === 'function' && typeof log.warn === 'function' && typeof log.error === 'function';
|
|
24
|
+
}
|
|
25
|
+
exports.isLogger = isLogger;
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.validateLogger = void 0;
|
|
4
4
|
var logger_1 = require("../../../logger");
|
|
5
5
|
var commons_1 = require("./commons");
|
|
6
|
-
function
|
|
7
|
-
return
|
|
6
|
+
function isILogger(log) {
|
|
7
|
+
return (0, commons_1.isLogger)(log) && typeof log.setLogLevel === 'function';
|
|
8
8
|
}
|
|
9
9
|
// By default it starts disabled.
|
|
10
10
|
var initialLogLevel = logger_1.LogLevels.NONE;
|
|
@@ -16,14 +16,17 @@ var initialLogLevel = logger_1.LogLevels.NONE;
|
|
|
16
16
|
* or one with NONE log level if `debug` is not defined or invalid.
|
|
17
17
|
*/
|
|
18
18
|
function validateLogger(settings) {
|
|
19
|
-
var debug = settings.debug;
|
|
19
|
+
var debug = settings.debug, logger = settings.logger;
|
|
20
20
|
var logLevel = initialLogLevel;
|
|
21
21
|
if (debug !== undefined) {
|
|
22
|
-
if (
|
|
22
|
+
if (isILogger(debug)) {
|
|
23
|
+
debug.setLogger(logger);
|
|
23
24
|
return debug;
|
|
25
|
+
}
|
|
24
26
|
logLevel = (0, commons_1.getLogLevel)(settings.debug);
|
|
25
27
|
}
|
|
26
28
|
var log = new logger_1.Logger({ logLevel: logLevel || initialLogLevel });
|
|
29
|
+
log.setLogger(logger);
|
|
27
30
|
// @ts-ignore // `debug` value is invalid if logLevel is undefined at this point
|
|
28
31
|
if (!logLevel)
|
|
29
32
|
log._log(logger_1.LogLevels.ERROR, 'Invalid `debug` value at config. Logs will be disabled.');
|
package/esm/listeners/browser.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { fromImpressionsCollector } from '../sync/submitters/impressionsSubmitter';
|
|
2
2
|
import { fromImpressionCountsCollector } from '../sync/submitters/impressionCountsSubmitter';
|
|
3
3
|
import { objectAssign } from '../utils/lang/objectAssign';
|
|
4
|
-
import { CLEANUP_REGISTERING, CLEANUP_DEREGISTERING } from '../logger/constants';
|
|
4
|
+
import { CLEANUP_REGISTERING, CLEANUP_DEREGISTERING, SUBMITTERS_PUSH_PAGE_HIDDEN } from '../logger/constants';
|
|
5
5
|
import { isConsentGranted } from '../consent';
|
|
6
6
|
var VISIBILITYCHANGE_EVENT = 'visibilitychange';
|
|
7
7
|
var PAGEHIDE_EVENT = 'pagehide';
|
|
@@ -84,6 +84,7 @@ var BrowserSignalListener = /** @class */ (function () {
|
|
|
84
84
|
if (!this._sendBeacon(url, dataPayload, extraMetadata)) {
|
|
85
85
|
postService(JSON.stringify(dataPayload)).catch(function () { }); // no-op to handle possible promise rejection
|
|
86
86
|
}
|
|
87
|
+
this.settings.log.debug(SUBMITTERS_PUSH_PAGE_HIDDEN, [cache.name]);
|
|
87
88
|
}
|
|
88
89
|
};
|
|
89
90
|
/**
|
package/esm/logger/constants.js
CHANGED
|
@@ -54,6 +54,7 @@ export var IMPRESSIONS_TRACKER_SUCCESS = 121;
|
|
|
54
54
|
export var USER_CONSENT_UPDATED = 122;
|
|
55
55
|
export var USER_CONSENT_NOT_UPDATED = 123;
|
|
56
56
|
export var USER_CONSENT_INITIAL = 124;
|
|
57
|
+
export var SUBMITTERS_PUSH_PAGE_HIDDEN = 125;
|
|
57
58
|
export var ENGINE_VALUE_INVALID = 200;
|
|
58
59
|
export var ENGINE_VALUE_NO_ATTRIBUTES = 201;
|
|
59
60
|
export var CLIENT_NO_LISTENER = 202;
|
package/esm/logger/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { objectAssign } from '../utils/lang/objectAssign';
|
|
2
2
|
import { find, isObject } from '../utils/lang';
|
|
3
|
+
import { isLogger } from '../utils/settingsValidation/logger/commons';
|
|
3
4
|
export var LogLevels = {
|
|
4
5
|
DEBUG: 'DEBUG',
|
|
5
6
|
INFO: 'INFO',
|
|
@@ -48,6 +49,15 @@ var Logger = /** @class */ (function () {
|
|
|
48
49
|
this.options.logLevel = logLevel;
|
|
49
50
|
this.logLevel = LogLevelIndexes[logLevel];
|
|
50
51
|
};
|
|
52
|
+
Logger.prototype.setLogger = function (logger) {
|
|
53
|
+
if (!logger || isLogger(logger)) {
|
|
54
|
+
this.logger = logger;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
this._log(LogLevels.ERROR, 'Invalid `logger` instance. It must be an object with `debug`, `info`, `warn` and `error` methods. Defaulting to `console.log`');
|
|
58
|
+
this.logger = undefined;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
51
61
|
Logger.prototype.debug = function (msg, args) {
|
|
52
62
|
if (this._shouldLog(LogLevelIndexes.DEBUG))
|
|
53
63
|
this._log(LogLevels.DEBUG, msg, args);
|
|
@@ -74,6 +84,14 @@ var Logger = /** @class */ (function () {
|
|
|
74
84
|
msg = _sprintf(msg, args);
|
|
75
85
|
}
|
|
76
86
|
var formattedText = this._generateLogMessage(level, msg);
|
|
87
|
+
// Do not break on custom logger errors
|
|
88
|
+
if (this.logger) {
|
|
89
|
+
try { // @ts-expect-error
|
|
90
|
+
this.logger[level.toLowerCase()](formattedText);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
catch (e) { /* empty */ }
|
|
94
|
+
}
|
|
77
95
|
console.log(formattedText);
|
|
78
96
|
};
|
|
79
97
|
Logger.prototype._generateLogMessage = function (level, text) {
|
|
@@ -22,6 +22,7 @@ export var codesInfo = codesWarn.concat([
|
|
|
22
22
|
[c.SYNC_SPLITS_FETCH_RETRY, c.LOG_PREFIX_SYNC_SPLITS + 'Retrying download of feature flags #%s. Reason: %s'],
|
|
23
23
|
[c.SUBMITTERS_PUSH_FULL_QUEUE, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Flushing full %s queue and resetting timer.'],
|
|
24
24
|
[c.SUBMITTERS_PUSH, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Pushing %s.'],
|
|
25
|
+
[c.SUBMITTERS_PUSH_PAGE_HIDDEN, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Flushing %s because page became hidden.'],
|
|
25
26
|
[c.STREAMING_REFRESH_TOKEN, c.LOG_PREFIX_SYNC_STREAMING + 'Refreshing streaming token in %s seconds, and connecting streaming in %s seconds.'],
|
|
26
27
|
[c.STREAMING_RECONNECT, c.LOG_PREFIX_SYNC_STREAMING + 'Attempting to reconnect streaming in %s seconds.'],
|
|
27
28
|
[c.STREAMING_CONNECTING, c.LOG_PREFIX_SYNC_STREAMING + 'Connecting streaming.'],
|
package/esm/logger/sdkLogger.js
CHANGED
|
@@ -26,6 +26,13 @@ export function createLoggerAPI(log) {
|
|
|
26
26
|
* @param logLevel - Custom LogLevel value.
|
|
27
27
|
*/
|
|
28
28
|
setLogLevel: setLogLevel,
|
|
29
|
+
/**
|
|
30
|
+
* Sets a custom logger for the SDK logs.
|
|
31
|
+
* @param logger - Custom logger.
|
|
32
|
+
*/
|
|
33
|
+
setLogger: function (logger) {
|
|
34
|
+
log.setLogger(logger);
|
|
35
|
+
},
|
|
29
36
|
/**
|
|
30
37
|
* Disables all the log levels.
|
|
31
38
|
*/
|
|
@@ -7,6 +7,7 @@ var EventsCacheInMemory = /** @class */ (function () {
|
|
|
7
7
|
*/
|
|
8
8
|
function EventsCacheInMemory(eventsQueueSize) {
|
|
9
9
|
if (eventsQueueSize === void 0) { eventsQueueSize = 0; }
|
|
10
|
+
this.name = 'events';
|
|
10
11
|
this.maxQueue = eventsQueueSize;
|
|
11
12
|
this.queue = [];
|
|
12
13
|
this.queueByteSize = 0;
|
|
@@ -3,6 +3,7 @@ import { DEFAULT_CACHE_SIZE } from '../inRedis/constants';
|
|
|
3
3
|
var ImpressionCountsCacheInMemory = /** @class */ (function () {
|
|
4
4
|
function ImpressionCountsCacheInMemory(impressionCountsCacheSize) {
|
|
5
5
|
if (impressionCountsCacheSize === void 0) { impressionCountsCacheSize = DEFAULT_CACHE_SIZE; }
|
|
6
|
+
this.name = 'impression counts';
|
|
6
7
|
this.cache = {};
|
|
7
8
|
this.cacheSize = 0;
|
|
8
9
|
this.maxStorage = impressionCountsCacheSize;
|
|
@@ -6,6 +6,7 @@ var ImpressionsCacheInMemory = /** @class */ (function () {
|
|
|
6
6
|
*/
|
|
7
7
|
function ImpressionsCacheInMemory(impressionsQueueSize) {
|
|
8
8
|
if (impressionsQueueSize === void 0) { impressionsQueueSize = 0; }
|
|
9
|
+
this.name = 'impressions';
|
|
9
10
|
this.maxQueue = impressionsQueueSize;
|
|
10
11
|
this.queue = [];
|
|
11
12
|
}
|
|
@@ -20,6 +20,7 @@ export function fromUniqueKeysCollector(uniqueKeys) {
|
|
|
20
20
|
var UniqueKeysCacheInMemory = /** @class */ (function () {
|
|
21
21
|
function UniqueKeysCacheInMemory(uniqueKeysQueueSize) {
|
|
22
22
|
if (uniqueKeysQueueSize === void 0) { uniqueKeysQueueSize = DEFAULT_CACHE_SIZE; }
|
|
23
|
+
this.name = 'unique keys';
|
|
23
24
|
this.uniqueTrackerSize = 0;
|
|
24
25
|
this.uniqueKeysTracker = {};
|
|
25
26
|
this.maxStorage = uniqueKeysQueueSize;
|
|
@@ -3,6 +3,7 @@ import { setToArray } from '../../utils/lang/sets';
|
|
|
3
3
|
var UniqueKeysCacheInMemoryCS = /** @class */ (function () {
|
|
4
4
|
function UniqueKeysCacheInMemoryCS(uniqueKeysQueueSize) {
|
|
5
5
|
if (uniqueKeysQueueSize === void 0) { uniqueKeysQueueSize = DEFAULT_CACHE_SIZE; }
|
|
6
|
+
this.name = 'unique keys';
|
|
6
7
|
this.uniqueTrackerSize = 0;
|
|
7
8
|
this.uniqueKeysTracker = {};
|
|
8
9
|
this.maxStorage = uniqueKeysQueueSize;
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { submitterFactory, firstPushWindowDecorator } from './submitter';
|
|
2
2
|
import { SUBMITTERS_PUSH_FULL_QUEUE } from '../../logger/constants';
|
|
3
|
-
var DATA_NAME = 'events';
|
|
4
3
|
/**
|
|
5
4
|
* Submitter that periodically posts tracked events
|
|
6
5
|
*/
|
|
7
6
|
export function eventsSubmitterFactory(params) {
|
|
8
7
|
var _a = params.settings, log = _a.log, eventsPushRate = _a.scheduler.eventsPushRate, eventsFirstPushWindow = _a.startup.eventsFirstPushWindow, postEventsBulk = params.splitApi.postEventsBulk, events = params.storage.events;
|
|
9
8
|
// don't retry events.
|
|
10
|
-
var submitter = submitterFactory(log, postEventsBulk, events, eventsPushRate
|
|
9
|
+
var submitter = submitterFactory(log, postEventsBulk, events, eventsPushRate);
|
|
11
10
|
// Set a timer for the first push window of events.
|
|
12
11
|
if (eventsFirstPushWindow > 0)
|
|
13
12
|
submitter = firstPushWindowDecorator(submitter, eventsFirstPushWindow);
|
|
14
13
|
// register events submitter to be executed when events cache is full
|
|
15
14
|
events.setOnFullQueueCb(function () {
|
|
16
15
|
if (submitter.isRunning()) {
|
|
17
|
-
log.info(SUBMITTERS_PUSH_FULL_QUEUE, [
|
|
16
|
+
log.info(SUBMITTERS_PUSH_FULL_QUEUE, [events.name]);
|
|
18
17
|
submitter.execute();
|
|
19
18
|
}
|
|
20
19
|
// If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data.
|
|
@@ -27,5 +27,5 @@ var IMPRESSIONS_COUNT_RATE = 1800000; // 30 minutes
|
|
|
27
27
|
export function impressionCountsSubmitterFactory(params) {
|
|
28
28
|
var log = params.settings.log, postTestImpressionsCount = params.splitApi.postTestImpressionsCount, impressionCounts = params.storage.impressionCounts;
|
|
29
29
|
// retry impressions counts only once.
|
|
30
|
-
return submitterFactory(log, postTestImpressionsCount, impressionCounts, IMPRESSIONS_COUNT_RATE,
|
|
30
|
+
return submitterFactory(log, postTestImpressionsCount, impressionCounts, IMPRESSIONS_COUNT_RATE, fromImpressionCountsCollector, 1);
|
|
31
31
|
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { groupBy, forOwn } from '../../utils/lang';
|
|
2
2
|
import { submitterFactory } from './submitter';
|
|
3
3
|
import { SUBMITTERS_PUSH_FULL_QUEUE } from '../../logger/constants';
|
|
4
|
-
var DATA_NAME = 'impressions';
|
|
5
4
|
/**
|
|
6
5
|
* Converts `impressions` data from cache into request payload.
|
|
7
6
|
*/
|
|
8
7
|
export function fromImpressionsCollector(sendLabels, data) {
|
|
9
8
|
var groupedByFeature = groupBy(data, 'feature');
|
|
10
9
|
var dto = [];
|
|
11
|
-
// using forOwn instead of for...in since the last also iterates over prototype enumerables
|
|
12
10
|
forOwn(groupedByFeature, function (value, name) {
|
|
13
11
|
dto.push({
|
|
14
12
|
f: name,
|
|
@@ -35,11 +33,11 @@ export function fromImpressionsCollector(sendLabels, data) {
|
|
|
35
33
|
export function impressionsSubmitterFactory(params) {
|
|
36
34
|
var _a = params.settings, log = _a.log, impressionsRefreshRate = _a.scheduler.impressionsRefreshRate, labelsEnabled = _a.core.labelsEnabled, postTestImpressionsBulk = params.splitApi.postTestImpressionsBulk, impressions = params.storage.impressions;
|
|
37
35
|
// retry impressions only once.
|
|
38
|
-
var syncTask = submitterFactory(log, postTestImpressionsBulk, impressions, impressionsRefreshRate,
|
|
36
|
+
var syncTask = submitterFactory(log, postTestImpressionsBulk, impressions, impressionsRefreshRate, fromImpressionsCollector.bind(undefined, labelsEnabled), 1);
|
|
39
37
|
// register impressions submitter to be executed when impressions cache is full
|
|
40
38
|
impressions.setOnFullQueueCb(function () {
|
|
41
39
|
if (syncTask.isRunning()) {
|
|
42
|
-
log.info(SUBMITTERS_PUSH_FULL_QUEUE, [
|
|
40
|
+
log.info(SUBMITTERS_PUSH_FULL_QUEUE, [impressions.name]);
|
|
43
41
|
syncTask.execute();
|
|
44
42
|
}
|
|
45
43
|
// If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data.
|
|
@@ -3,9 +3,10 @@ import { SUBMITTERS_PUSH, SUBMITTERS_PUSH_FAILS, SUBMITTERS_PUSH_RETRY } from '.
|
|
|
3
3
|
/**
|
|
4
4
|
* Base function to create submitters, such as ImpressionsSubmitter and EventsSubmitter
|
|
5
5
|
*/
|
|
6
|
-
export function submitterFactory(log, postClient, sourceCache, postRate,
|
|
6
|
+
export function submitterFactory(log, postClient, sourceCache, postRate, fromCacheToPayload, maxRetries, debugLogs // true for telemetry submitters
|
|
7
7
|
) {
|
|
8
8
|
if (maxRetries === void 0) { maxRetries = 0; }
|
|
9
|
+
var dataName = sourceCache.name;
|
|
9
10
|
var retries = 0;
|
|
10
11
|
var data;
|
|
11
12
|
function postData() {
|