@splitsoftware/splitio-commons 1.3.1 → 1.3.2-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 (211) hide show
  1. package/cjs/consent/sdkUserConsent.js +1 -1
  2. package/cjs/listeners/browser.js +5 -4
  3. package/cjs/logger/constants.js +2 -1
  4. package/cjs/logger/messages/error.js +2 -1
  5. package/cjs/logger/messages/info.js +3 -3
  6. package/cjs/logger/messages/warn.js +2 -2
  7. package/cjs/sdkClient/client.js +17 -3
  8. package/cjs/sdkClient/sdkClient.js +4 -1
  9. package/cjs/sdkFactory/index.js +16 -19
  10. package/cjs/services/splitApi.js +15 -14
  11. package/cjs/services/splitHttpClient.js +4 -1
  12. package/cjs/storages/AbstractSegmentsCacheSync.js +0 -5
  13. package/cjs/storages/KeyBuilderSS.js +12 -19
  14. package/cjs/storages/findLatencyIndex.js +11 -6
  15. package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +13 -1
  16. package/cjs/storages/inLocalStorage/index.js +4 -1
  17. package/cjs/storages/inMemory/InMemoryStorage.js +2 -0
  18. package/cjs/storages/inMemory/InMemoryStorageCS.js +3 -0
  19. package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +6 -0
  20. package/cjs/storages/inMemory/SegmentsCacheInMemory.js +6 -0
  21. package/cjs/storages/inMemory/TelemetryCacheInMemory.js +165 -0
  22. package/cjs/storages/inRedis/TelemetryCacheInRedis.js +29 -0
  23. package/cjs/storages/inRedis/index.js +2 -4
  24. package/cjs/storages/pluggable/TelemetryCachePluggable.js +27 -0
  25. package/cjs/storages/pluggable/index.js +2 -1
  26. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +0 -3
  27. package/cjs/sync/polling/updaters/segmentChangesUpdater.js +1 -8
  28. package/cjs/sync/polling/updaters/splitChangesUpdater.js +1 -4
  29. package/cjs/sync/streaming/SSEHandler/NotificationKeeper.js +20 -13
  30. package/cjs/sync/streaming/SSEHandler/index.js +21 -15
  31. package/cjs/sync/streaming/pushManager.js +7 -4
  32. package/cjs/sync/submitters/eventsSubmitter.js +28 -0
  33. package/cjs/sync/submitters/{impressionCountsSyncTask.js → impressionCountsSubmitter.js} +10 -7
  34. package/cjs/sync/submitters/{impressionsSyncTask.js → impressionsSubmitter.js} +8 -8
  35. package/cjs/sync/submitters/{submitterSyncTask.js → submitter.js} +34 -13
  36. package/cjs/sync/submitters/submitterManager.js +12 -10
  37. package/cjs/sync/submitters/telemetrySubmitter.js +128 -0
  38. package/cjs/sync/syncManagerOnline.js +6 -2
  39. package/cjs/trackers/eventTracker.js +5 -1
  40. package/cjs/trackers/impressionsTracker.js +9 -1
  41. package/cjs/trackers/telemetryTracker.js +63 -0
  42. package/cjs/utils/constants/index.js +40 -1
  43. package/cjs/utils/inputValidation/apiKey.js +12 -11
  44. package/cjs/utils/settingsValidation/index.js +20 -6
  45. package/cjs/utils/settingsValidation/url.js +4 -0
  46. package/cjs/utils/timeTracker/index.js +1 -0
  47. package/cjs/utils/timeTracker/timer.js +2 -2
  48. package/esm/consent/sdkUserConsent.js +1 -1
  49. package/esm/listeners/browser.js +3 -2
  50. package/esm/logger/constants.js +1 -0
  51. package/esm/logger/messages/error.js +2 -1
  52. package/esm/logger/messages/info.js +3 -3
  53. package/esm/logger/messages/warn.js +2 -2
  54. package/esm/sdkClient/client.js +18 -4
  55. package/esm/sdkClient/sdkClient.js +4 -1
  56. package/esm/sdkFactory/index.js +16 -19
  57. package/esm/services/splitApi.js +15 -14
  58. package/esm/services/splitHttpClient.js +4 -1
  59. package/esm/storages/AbstractSegmentsCacheSync.js +0 -5
  60. package/esm/storages/KeyBuilderSS.js +12 -19
  61. package/esm/storages/findLatencyIndex.js +11 -6
  62. package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +13 -1
  63. package/esm/storages/inLocalStorage/index.js +5 -2
  64. package/esm/storages/inMemory/InMemoryStorage.js +3 -1
  65. package/esm/storages/inMemory/InMemoryStorageCS.js +4 -1
  66. package/esm/storages/inMemory/MySegmentsCacheInMemory.js +6 -0
  67. package/esm/storages/inMemory/SegmentsCacheInMemory.js +6 -0
  68. package/esm/storages/inMemory/TelemetryCacheInMemory.js +161 -0
  69. package/esm/storages/inRedis/TelemetryCacheInRedis.js +26 -0
  70. package/esm/storages/inRedis/index.js +2 -4
  71. package/esm/storages/pluggable/TelemetryCachePluggable.js +24 -0
  72. package/esm/storages/pluggable/index.js +2 -1
  73. package/esm/sync/polling/updaters/mySegmentsUpdater.js +0 -3
  74. package/esm/sync/polling/updaters/segmentChangesUpdater.js +1 -8
  75. package/esm/sync/polling/updaters/splitChangesUpdater.js +1 -4
  76. package/esm/sync/streaming/SSEHandler/NotificationKeeper.js +8 -1
  77. package/esm/sync/streaming/SSEHandler/index.js +21 -15
  78. package/esm/sync/streaming/pushManager.js +7 -4
  79. package/esm/sync/submitters/eventsSubmitter.js +24 -0
  80. package/esm/sync/submitters/{impressionCountsSyncTask.js → impressionCountsSubmitter.js} +8 -5
  81. package/esm/sync/submitters/{impressionsSyncTask.js → impressionsSubmitter.js} +6 -6
  82. package/esm/sync/submitters/submitter.js +60 -0
  83. package/esm/sync/submitters/submitterManager.js +12 -10
  84. package/esm/sync/submitters/telemetrySubmitter.js +122 -0
  85. package/esm/sync/syncManagerOnline.js +6 -2
  86. package/esm/trackers/eventTracker.js +6 -2
  87. package/esm/trackers/impressionsTracker.js +10 -2
  88. package/esm/trackers/telemetryTracker.js +59 -0
  89. package/esm/utils/constants/index.js +38 -0
  90. package/esm/utils/inputValidation/apiKey.js +2 -1
  91. package/esm/utils/settingsValidation/index.js +18 -4
  92. package/esm/utils/settingsValidation/url.js +4 -0
  93. package/esm/utils/timeTracker/index.js +1 -0
  94. package/esm/utils/timeTracker/timer.js +2 -2
  95. package/package.json +1 -1
  96. package/src/consent/sdkUserConsent.ts +1 -1
  97. package/src/listeners/browser.ts +3 -2
  98. package/src/logger/constants.ts +1 -0
  99. package/src/logger/messages/error.ts +2 -1
  100. package/src/logger/messages/info.ts +3 -3
  101. package/src/logger/messages/warn.ts +2 -2
  102. package/src/sdkClient/client.ts +23 -4
  103. package/src/sdkClient/sdkClient.ts +4 -1
  104. package/src/sdkFactory/index.ts +22 -24
  105. package/src/sdkFactory/types.ts +31 -14
  106. package/src/services/splitApi.ts +17 -14
  107. package/src/services/splitHttpClient.ts +6 -3
  108. package/src/services/types.ts +7 -5
  109. package/src/storages/AbstractSegmentsCacheSync.ts +8 -3
  110. package/src/storages/KeyBuilderSS.ts +13 -50
  111. package/src/storages/findLatencyIndex.ts +12 -3
  112. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +13 -1
  113. package/src/storages/inLocalStorage/index.ts +5 -2
  114. package/src/storages/inMemory/InMemoryStorage.ts +3 -1
  115. package/src/storages/inMemory/InMemoryStorageCS.ts +4 -1
  116. package/src/storages/inMemory/MySegmentsCacheInMemory.ts +8 -0
  117. package/src/storages/inMemory/SegmentsCacheInMemory.ts +6 -0
  118. package/src/storages/inMemory/TelemetryCacheInMemory.ts +210 -0
  119. package/src/storages/inRedis/TelemetryCacheInRedis.ts +29 -0
  120. package/src/storages/inRedis/index.ts +2 -4
  121. package/src/storages/pluggable/TelemetryCachePluggable.ts +26 -0
  122. package/src/storages/pluggable/index.ts +2 -1
  123. package/src/storages/types.ts +84 -32
  124. package/src/sync/offline/syncManagerOffline.ts +4 -3
  125. package/src/sync/polling/pollingManagerCS.ts +2 -2
  126. package/src/sync/polling/pollingManagerSS.ts +2 -2
  127. package/src/sync/polling/updaters/mySegmentsUpdater.ts +0 -4
  128. package/src/sync/polling/updaters/segmentChangesUpdater.ts +2 -10
  129. package/src/sync/polling/updaters/splitChangesUpdater.ts +1 -5
  130. package/src/sync/streaming/SSEHandler/NotificationKeeper.ts +11 -1
  131. package/src/sync/streaming/SSEHandler/index.ts +21 -14
  132. package/src/sync/streaming/pushManager.ts +11 -7
  133. package/src/sync/submitters/eventsSubmitter.ts +35 -0
  134. package/src/sync/submitters/{impressionCountsSyncTask.ts → impressionCountsSubmitter.ts} +15 -15
  135. package/src/sync/submitters/{impressionsSyncTask.ts → impressionsSubmitter.ts} +12 -16
  136. package/src/sync/submitters/{submitterSyncTask.ts → submitter.ts} +33 -15
  137. package/src/sync/submitters/submitterManager.ts +14 -11
  138. package/src/sync/submitters/telemetrySubmitter.ts +143 -0
  139. package/src/sync/submitters/types.ts +123 -0
  140. package/src/sync/syncManagerOnline.ts +13 -7
  141. package/src/sync/types.ts +0 -15
  142. package/src/trackers/eventTracker.ts +7 -3
  143. package/src/trackers/impressionsTracker.ts +11 -3
  144. package/src/trackers/telemetryTracker.ts +63 -0
  145. package/src/trackers/types.ts +24 -0
  146. package/src/types.ts +35 -6
  147. package/src/utils/constants/index.ts +45 -0
  148. package/src/utils/inputValidation/apiKey.ts +2 -1
  149. package/src/utils/settingsValidation/index.ts +18 -4
  150. package/src/utils/settingsValidation/url.ts +4 -0
  151. package/src/utils/timeTracker/index.ts +1 -1
  152. package/src/utils/timeTracker/timer.ts +3 -3
  153. package/types/logger/constants.d.ts +1 -0
  154. package/types/sdkFactory/types.d.ts +28 -13
  155. package/types/services/splitApi.d.ts +2 -1
  156. package/types/services/types.d.ts +8 -5
  157. package/types/storages/AbstractSegmentsCacheSync.d.ts +7 -3
  158. package/types/storages/KeyBuilderSS.d.ts +3 -3
  159. package/types/storages/findLatencyIndex.d.ts +7 -1
  160. package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +2 -0
  161. package/types/storages/inMemory/MySegmentsCacheInMemory.d.ts +2 -0
  162. package/types/storages/inMemory/SegmentsCacheInMemory.d.ts +1 -0
  163. package/types/storages/inMemory/TelemetryCacheInMemory.d.ts +6 -2
  164. package/types/storages/inRedis/TelemetryCacheInRedis.d.ts +3 -3
  165. package/types/storages/pluggable/TelemetryCachePluggable.d.ts +2 -2
  166. package/types/storages/types.d.ts +71 -22
  167. package/types/sync/offline/syncManagerOffline.d.ts +3 -2
  168. package/types/sync/polling/pollingManagerCS.d.ts +2 -2
  169. package/types/sync/polling/pollingManagerSS.d.ts +2 -2
  170. package/types/sync/streaming/SSEHandler/NotificationKeeper.d.ts +2 -1
  171. package/types/sync/streaming/SSEHandler/index.d.ts +2 -1
  172. package/types/sync/streaming/pushManager.d.ts +2 -2
  173. package/types/sync/submitters/eventsSubmitter.d.ts +5 -0
  174. package/types/sync/submitters/impressionCountsSubmitter.d.ts +10 -0
  175. package/types/sync/submitters/impressionsSubmitter.d.ts +11 -0
  176. package/types/sync/submitters/submitter.d.ts +12 -0
  177. package/types/sync/submitters/submitterManager.d.ts +2 -2
  178. package/types/sync/submitters/telemetrySubmitter.d.ts +24 -0
  179. package/types/sync/submitters/telemetrySyncTask.d.ts +0 -27
  180. package/types/sync/submitters/types.d.ts +107 -0
  181. package/types/sync/syncManagerOnline.d.ts +3 -2
  182. package/types/sync/types.d.ts +0 -13
  183. package/types/trackers/eventTracker.d.ts +2 -2
  184. package/types/trackers/impressionsTracker.d.ts +2 -2
  185. package/types/trackers/telemetryTracker.d.ts +2 -3
  186. package/types/trackers/types.d.ts +22 -0
  187. package/types/types.d.ts +33 -4
  188. package/types/utils/constants/index.d.ts +37 -0
  189. package/types/utils/inputValidation/apiKey.d.ts +1 -0
  190. package/types/utils/settingsValidation/index.d.ts +40 -0
  191. package/types/utils/timeTracker/index.d.ts +1 -1
  192. package/types/utils/timeTracker/timer.d.ts +1 -1
  193. package/cjs/storages/inMemory/CountsCacheInMemory.js +0 -38
  194. package/cjs/storages/inMemory/LatenciesCacheInMemory.js +0 -43
  195. package/cjs/storages/inRedis/CountsCacheInRedis.js +0 -16
  196. package/cjs/storages/inRedis/LatenciesCacheInRedis.js +0 -18
  197. package/cjs/sync/submitters/eventsSyncTask.js +0 -44
  198. package/cjs/sync/submitters/metricsSyncTask.js +0 -31
  199. package/esm/storages/inMemory/CountsCacheInMemory.js +0 -35
  200. package/esm/storages/inMemory/LatenciesCacheInMemory.js +0 -40
  201. package/esm/storages/inRedis/CountsCacheInRedis.js +0 -13
  202. package/esm/storages/inRedis/LatenciesCacheInRedis.js +0 -15
  203. package/esm/sync/submitters/eventsSyncTask.js +0 -40
  204. package/esm/sync/submitters/metricsSyncTask.js +0 -26
  205. package/esm/sync/submitters/submitterSyncTask.js +0 -40
  206. package/src/storages/inMemory/CountsCacheInMemory.ts +0 -37
  207. package/src/storages/inMemory/LatenciesCacheInMemory.ts +0 -45
  208. package/src/storages/inRedis/CountsCacheInRedis.ts +0 -20
  209. package/src/storages/inRedis/LatenciesCacheInRedis.ts +0 -23
  210. package/src/sync/submitters/eventsSyncTask.ts +0 -57
  211. package/src/sync/submitters/metricsSyncTask.ts +0 -49
@@ -1,45 +0,0 @@
1
- import { ILatenciesCacheSync } from '../types';
2
- import { findLatencyIndex } from '../findLatencyIndex';
3
-
4
- export class LatenciesCacheInMemory implements ILatenciesCacheSync {
5
-
6
- private counters: Record<string, number[]> = {};
7
-
8
- /**
9
- * Add latencies.
10
- */
11
- track(metricName: string, latency: number) {
12
- // Initialize if needed
13
- if (this.counters[metricName] === undefined) {
14
- this.counters[metricName] = [
15
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
16
- ];
17
- }
18
-
19
- // +1 based on the latency number
20
- this.counters[metricName][findLatencyIndex(latency)]++;
21
-
22
- return true;
23
- }
24
-
25
- /**
26
- * Clear the collector
27
- */
28
- clear() {
29
- this.counters = {};
30
- }
31
-
32
- /**
33
- * Get the collected data, used as payload for posting.
34
- */
35
- state() {
36
- return this.counters;
37
- }
38
-
39
- /**
40
- * Check if the cache is empty.
41
- */
42
- isEmpty() {
43
- return Object.keys(this.counters).length === 0;
44
- }
45
- }
@@ -1,20 +0,0 @@
1
- import { ICountsCacheAsync } from '../types';
2
- import { KeyBuilderSS } from '../KeyBuilderSS';
3
- import { Redis } from 'ioredis';
4
-
5
- export class CountsCacheInRedis implements ICountsCacheAsync {
6
-
7
- private readonly redis: Redis;
8
- private readonly keys: KeyBuilderSS;
9
-
10
- constructor(keys: KeyBuilderSS, redis: Redis) {
11
- this.keys = keys;
12
- this.redis = redis;
13
- }
14
-
15
- track(metricName: string): Promise<boolean> {
16
- return this.redis.incr(this.keys.buildCountKey(metricName)).catch(() => {
17
- // noop, for telemetry metrics there's no need to throw.
18
- }).then(() => true);
19
- }
20
- }
@@ -1,23 +0,0 @@
1
- import { ILatenciesCacheAsync } from '../types';
2
- import { KeyBuilderSS } from '../KeyBuilderSS';
3
- import { findLatencyIndex } from '../findLatencyIndex';
4
- import { Redis } from 'ioredis';
5
-
6
- export class LatenciesCacheInRedis implements ILatenciesCacheAsync {
7
-
8
- private readonly redis: Redis;
9
- private readonly keys: KeyBuilderSS;
10
-
11
- constructor(keys: KeyBuilderSS, redis: Redis) {
12
- this.keys = keys;
13
- this.redis = redis;
14
- }
15
-
16
- track(metricName: string, latency: number): Promise<boolean> {
17
- const bucketNumber = findLatencyIndex(latency);
18
-
19
- return this.redis.incr(this.keys.buildLatencyKey(metricName, bucketNumber)).catch(() => {
20
- // noop, for telemetry metrics there's no need to throw.
21
- }).then(() => true);
22
- }
23
- }
@@ -1,57 +0,0 @@
1
- import { IEventsCacheSync } from '../../storages/types';
2
- import { IPostEventsBulk } from '../../services/types';
3
- import { ISyncTask, ITimeTracker } from '../types';
4
- import { submitterSyncTaskFactory } from './submitterSyncTask';
5
- import { ILogger } from '../../logger/types';
6
- import { SUBMITTERS_PUSH_FULL_QUEUE } from '../../logger/constants';
7
-
8
- const DATA_NAME = 'events';
9
-
10
- /**
11
- * Sync task that periodically posts tracked events
12
- */
13
- export function eventsSyncTaskFactory(
14
- log: ILogger,
15
- postEventsBulk: IPostEventsBulk,
16
- eventsCache: IEventsCacheSync,
17
- eventsPushRate: number,
18
- eventsFirstPushWindow: number,
19
- latencyTracker?: ITimeTracker
20
- ): ISyncTask {
21
-
22
- // don't retry events.
23
- const syncTask = submitterSyncTaskFactory(log, postEventsBulk, eventsCache, eventsPushRate, DATA_NAME, latencyTracker);
24
-
25
- // Set a timer for the first push window of events.
26
- // Not implemented in the base submitter or sync task, since this feature is only used by the events submitter.
27
- if (eventsFirstPushWindow > 0) {
28
- let running = false;
29
- let stopEventPublisherTimeout: ReturnType<typeof setTimeout>;
30
- const originalStart = syncTask.start;
31
- syncTask.start = () => {
32
- running = true;
33
- stopEventPublisherTimeout = setTimeout(originalStart, eventsFirstPushWindow);
34
- };
35
- const originalStop = syncTask.stop;
36
- syncTask.stop = () => {
37
- running = false;
38
- clearTimeout(stopEventPublisherTimeout);
39
- originalStop();
40
- };
41
- syncTask.isRunning = () => {
42
- return running;
43
- };
44
- }
45
-
46
- // register events submitter to be executed when events cache is full
47
- eventsCache.setOnFullQueueCb(() => {
48
- if (syncTask.isRunning()) {
49
- log.info(SUBMITTERS_PUSH_FULL_QUEUE, [DATA_NAME]);
50
- syncTask.execute();
51
- }
52
- // If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data.
53
- // Data will be sent when submitter is resumed.
54
- });
55
-
56
- return syncTask;
57
- }
@@ -1,49 +0,0 @@
1
-
2
- import { forOwn } from '../../utils/lang';
3
- import { ICountsCacheSync, ILatenciesCacheSync } from '../../storages/types';
4
- import { IPostMetricsCounters, IPostMetricsTimes } from '../../services/types';
5
- import { ISyncTask, ITimeTracker } from '../types';
6
- import { submitterSyncTaskFactory } from './submitterSyncTask';
7
- import { ILogger } from '../../logger/types';
8
-
9
- // extract POST payload object from cache
10
- function fromCache<V>(propertyName: 'latencies' | 'delta') {
11
- return (data: Record<string, V>): any[] => {
12
- const result: any[] = [];
13
-
14
- forOwn(data, (value, key) => {
15
- result.push({ name: key, [propertyName]: value });
16
- });
17
-
18
- return result;
19
- };
20
- }
21
-
22
- /**
23
- * Sync task that periodically posts telemetry counts
24
- */
25
- export function countsSyncTaskFactory(
26
- log: ILogger,
27
- postMetricsCounters: IPostMetricsCounters,
28
- countsCache: ICountsCacheSync,
29
- metricsRefreshRate: number,
30
- latencyTracker?: ITimeTracker
31
- ): ISyncTask {
32
-
33
- return submitterSyncTaskFactory(log, postMetricsCounters, countsCache, metricsRefreshRate, 'count metrics', latencyTracker, fromCache<number>('delta'));
34
- }
35
-
36
- /**
37
- * Sync task that periodically posts telemetry latencies
38
- */
39
- export function latenciesSyncTaskFactory(
40
- log: ILogger,
41
- postMetricsLatencies: IPostMetricsTimes,
42
- latenciesCache: ILatenciesCacheSync,
43
- metricsRefreshRate: number,
44
- latencyTracker?: ITimeTracker
45
- ): ISyncTask {
46
-
47
- // don't retry metrics.
48
- return submitterSyncTaskFactory(log, postMetricsLatencies, latenciesCache, metricsRefreshRate, 'latency metrics', latencyTracker, fromCache<number[]>('latencies'), 0, true);
49
- }