@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.
Files changed (65) hide show
  1. package/CHANGES.txt +3 -0
  2. package/cjs/listeners/browser.js +1 -0
  3. package/cjs/logger/constants.js +4 -3
  4. package/cjs/logger/index.js +18 -0
  5. package/cjs/logger/messages/info.js +1 -0
  6. package/cjs/logger/sdkLogger.js +7 -0
  7. package/cjs/storages/inMemory/EventsCacheInMemory.js +1 -0
  8. package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -0
  9. package/cjs/storages/inMemory/ImpressionsCacheInMemory.js +1 -0
  10. package/cjs/storages/inMemory/TelemetryCacheInMemory.js +1 -0
  11. package/cjs/storages/inMemory/UniqueKeysCacheInMemory.js +1 -0
  12. package/cjs/storages/inMemory/UniqueKeysCacheInMemoryCS.js +1 -0
  13. package/cjs/sync/submitters/eventsSubmitter.js +2 -3
  14. package/cjs/sync/submitters/impressionCountsSubmitter.js +1 -1
  15. package/cjs/sync/submitters/impressionsSubmitter.js +2 -4
  16. package/cjs/sync/submitters/submitter.js +2 -1
  17. package/cjs/sync/submitters/telemetrySubmitter.js +3 -2
  18. package/cjs/sync/submitters/uniqueKeysSubmitter.js +2 -3
  19. package/cjs/utils/settingsValidation/logger/builtinLogger.js +2 -1
  20. package/cjs/utils/settingsValidation/logger/commons.js +12 -15
  21. package/cjs/utils/settingsValidation/logger/pluggableLogger.js +7 -4
  22. package/esm/listeners/browser.js +2 -1
  23. package/esm/logger/constants.js +1 -0
  24. package/esm/logger/index.js +18 -0
  25. package/esm/logger/messages/info.js +1 -0
  26. package/esm/logger/sdkLogger.js +7 -0
  27. package/esm/storages/inMemory/EventsCacheInMemory.js +1 -0
  28. package/esm/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -0
  29. package/esm/storages/inMemory/ImpressionsCacheInMemory.js +1 -0
  30. package/esm/storages/inMemory/TelemetryCacheInMemory.js +1 -0
  31. package/esm/storages/inMemory/UniqueKeysCacheInMemory.js +1 -0
  32. package/esm/storages/inMemory/UniqueKeysCacheInMemoryCS.js +1 -0
  33. package/esm/sync/submitters/eventsSubmitter.js +2 -3
  34. package/esm/sync/submitters/impressionCountsSubmitter.js +1 -1
  35. package/esm/sync/submitters/impressionsSubmitter.js +2 -4
  36. package/esm/sync/submitters/submitter.js +2 -1
  37. package/esm/sync/submitters/telemetrySubmitter.js +3 -2
  38. package/esm/sync/submitters/uniqueKeysSubmitter.js +2 -3
  39. package/esm/utils/settingsValidation/logger/builtinLogger.js +2 -1
  40. package/esm/utils/settingsValidation/logger/commons.js +10 -14
  41. package/esm/utils/settingsValidation/logger/pluggableLogger.js +8 -5
  42. package/package.json +1 -1
  43. package/src/listeners/browser.ts +2 -1
  44. package/src/logger/constants.ts +1 -0
  45. package/src/logger/index.ts +19 -0
  46. package/src/logger/messages/info.ts +1 -0
  47. package/src/logger/sdkLogger.ts +7 -0
  48. package/src/logger/types.ts +5 -3
  49. package/src/storages/inMemory/EventsCacheInMemory.ts +1 -0
  50. package/src/storages/inMemory/ImpressionCountsCacheInMemory.ts +2 -0
  51. package/src/storages/inMemory/ImpressionsCacheInMemory.ts +1 -0
  52. package/src/storages/inMemory/TelemetryCacheInMemory.ts +2 -0
  53. package/src/storages/inMemory/UniqueKeysCacheInMemory.ts +3 -3
  54. package/src/storages/inMemory/UniqueKeysCacheInMemoryCS.ts +3 -3
  55. package/src/storages/types.ts +1 -0
  56. package/src/sync/submitters/eventsSubmitter.ts +2 -4
  57. package/src/sync/submitters/impressionCountsSubmitter.ts +1 -1
  58. package/src/sync/submitters/impressionsSubmitter.ts +2 -5
  59. package/src/sync/submitters/submitter.ts +1 -1
  60. package/src/sync/submitters/telemetrySubmitter.ts +3 -2
  61. package/src/sync/submitters/uniqueKeysSubmitter.ts +2 -3
  62. package/src/utils/settingsValidation/logger/builtinLogger.ts +3 -2
  63. package/src/utils/settingsValidation/logger/commons.ts +11 -11
  64. package/src/utils/settingsValidation/logger/pluggableLogger.ts +10 -6
  65. 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
 
@@ -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
  /**
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
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_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_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_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 = 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 = 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;
@@ -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.'],
@@ -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
  }
@@ -27,6 +27,7 @@ var TelemetryCacheInMemory = /** @class */ (function () {
27
27
  this.splits = splits;
28
28
  this.segments = segments;
29
29
  this.largeSegments = largeSegments;
30
+ this.name = 'telemetry stats';
30
31
  // isEmpty flag
31
32
  this.e = true;
32
33
  this.notReadyUsage = 0;
@@ -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, DATA_NAME);
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, [DATA_NAME]);
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, 'impression counts', fromImpressionCountsCollector, 1);
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, DATA_NAME, fromImpressionsCollector.bind(undefined, labelsEnabled), 1);
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, [DATA_NAME]);
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, dataName, fromCacheToPayload, maxRetries, debugLogs // true for telemetry submitters
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, 'telemetry stats', undefined, 0, true), 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, 'telemetry config', undefined, 0, true);
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, DATA_NAME);
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, [DATA_NAME]);
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
- if (typeof debugValue === 'boolean') {
14
- if (debugValue) {
15
- return logger_1.LogLevels.DEBUG;
16
- }
17
- else {
18
- return logger_1.LogLevels.NONE;
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 isLogger(log) {
7
- return log !== null && typeof log === 'object' && typeof log.debug === 'function' && typeof log.info === 'function' && typeof log.warn === 'function' && typeof log.error === 'function' && typeof log.setLogLevel === 'function';
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 (isLogger(debug))
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.');
@@ -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
  /**
@@ -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;
@@ -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.'],
@@ -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
  }
@@ -22,6 +22,7 @@ var TelemetryCacheInMemory = /** @class */ (function () {
22
22
  this.splits = splits;
23
23
  this.segments = segments;
24
24
  this.largeSegments = largeSegments;
25
+ this.name = 'telemetry stats';
25
26
  // isEmpty flag
26
27
  this.e = true;
27
28
  this.notReadyUsage = 0;
@@ -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, DATA_NAME);
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, [DATA_NAME]);
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, 'impression counts', fromImpressionCountsCollector, 1);
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, DATA_NAME, fromImpressionsCollector.bind(undefined, labelsEnabled), 1);
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, [DATA_NAME]);
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, dataName, fromCacheToPayload, maxRetries, debugLogs // true for telemetry submitters
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() {