@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,5 +1,6 @@
1
1
  import { KeyBuilder } from './KeyBuilder';
2
2
  import { IMetadata } from '../dtos/types';
3
+ import { Method } from '../sync/submitters/types';
3
4
  export declare class KeyBuilderSS extends KeyBuilder {
4
5
  protected readonly metadata: IMetadata;
5
6
  constructor(prefix: string, metadata: IMetadata);
@@ -7,8 +8,7 @@ export declare class KeyBuilderSS extends KeyBuilder {
7
8
  private buildVersionablePrefix;
8
9
  buildImpressionsKey(): string;
9
10
  buildEventsKey(): string;
10
- private buildLatencyKeyPrefix;
11
- buildLatencyKey(metricName: string, bucketNumber: number | string): string;
12
- buildCountKey(metricName: string): string;
11
+ buildLatencyKey(method: Method, bucket: number): string;
12
+ buildExceptionKey(method: Method): string;
13
13
  searchPatternForSplitKeys(): string;
14
14
  }
@@ -1 +1,7 @@
1
- export declare function findLatencyIndex(latency: number, min?: number, max?: number, base?: number): number;
1
+ /**
2
+ * Calculates buckets from latency in milliseconds
3
+ *
4
+ * @param latencyInMs
5
+ * @returns a bucket index from 0 to 22 inclusive
6
+ */
7
+ export declare function findLatencyIndex(latencyInMs: number): number;
@@ -20,4 +20,6 @@ export declare class MySegmentsCacheInLocal extends AbstractSegmentsCacheSync {
20
20
  * @returns boolean indicating if the cache was updated (i.e., given list was different from the cached one)
21
21
  */
22
22
  resetSegments(names: string[]): boolean;
23
+ getRegisteredSegments(): string[];
24
+ getKeysCount(): number;
23
25
  }
@@ -17,4 +17,6 @@ export declare class MySegmentsCacheInMemory extends AbstractSegmentsCacheSync {
17
17
  * @returns boolean indicating if the cache was updated (i.e., given list was different from the cached one)
18
18
  */
19
19
  resetSegments(names: string[]): boolean;
20
+ getRegisteredSegments(): string[];
21
+ getKeysCount(): number;
20
22
  }
@@ -13,6 +13,7 @@ export declare class SegmentsCacheInMemory extends AbstractSegmentsCacheSync {
13
13
  private _registerSegment;
14
14
  registerSegments(names: string[]): boolean;
15
15
  getRegisteredSegments(): string[];
16
+ getKeysCount(): number;
16
17
  setChangeNumber(name: string, changeNumber: number): boolean;
17
18
  getChangeNumber(name: string): number;
18
19
  }
@@ -1,6 +1,10 @@
1
1
  import { ImpressionDataType, EventDataType, LastSync, HttpErrors, HttpLatencies, StreamingEvent, Method, OperationType, MethodExceptions, MethodLatencies } from '../../sync/submitters/types';
2
- import { TelemetryCacheSync } from '../types';
3
- export declare class TelemetryCacheInMemory implements TelemetryCacheSync {
2
+ import { ITelemetryCacheSync } from '../types';
3
+ /**
4
+ * Used on client-side. 0.1% of instances will track telemetry
5
+ */
6
+ export declare function shouldRecordTelemetry(): boolean;
7
+ export declare class TelemetryCacheInMemory implements ITelemetryCacheSync {
4
8
  private timeUntilReady?;
5
9
  getTimeUntilReady(): number | undefined;
6
10
  recordTimeUntilReady(ms: number): void;
@@ -1,14 +1,14 @@
1
1
  import { ILogger } from '../../logger/types';
2
2
  import { Method } from '../../sync/submitters/types';
3
3
  import { KeyBuilderSS } from '../KeyBuilderSS';
4
- import { TelemetryCacheAsync } from '../types';
4
+ import { ITelemetryCacheAsync } from '../types';
5
5
  import { Redis } from 'ioredis';
6
- export declare class TelemetryCacheInRedis implements TelemetryCacheAsync {
6
+ export declare class TelemetryCacheInRedis implements ITelemetryCacheAsync {
7
7
  private readonly log;
8
8
  private readonly keys;
9
9
  private readonly redis;
10
10
  /**
11
- * Create a Telemetry cache that uses a storage wrapper.
11
+ * Create a Telemetry cache that uses Redis as storage.
12
12
  * @param log Logger instance.
13
13
  * @param keys Key builder.
14
14
  * @param redis Redis client.
@@ -1,8 +1,8 @@
1
1
  import { ILogger } from '../../logger/types';
2
2
  import { Method } from '../../sync/submitters/types';
3
3
  import { KeyBuilderSS } from '../KeyBuilderSS';
4
- import { IPluggableStorageWrapper, TelemetryCacheAsync } from '../types';
5
- export declare class TelemetryCachePluggable implements TelemetryCacheAsync {
4
+ import { IPluggableStorageWrapper, ITelemetryCacheAsync } from '../types';
5
+ export declare class TelemetryCachePluggable implements ITelemetryCacheAsync {
6
6
  private readonly log;
7
7
  private readonly keys;
8
8
  private readonly wrapper;
@@ -1,6 +1,6 @@
1
1
  import { MaybeThenable, IMetadata, ISplitFiltersValidation } from '../dtos/types';
2
2
  import { ILogger } from '../logger/types';
3
- import { StoredEventWithMetadata, StoredImpressionWithMetadata } from '../sync/submitters/types';
3
+ import { EventDataType, HttpErrors, HttpLatencies, ImpressionDataType, LastSync, Method, MethodExceptions, MethodLatencies, OperationType, StoredEventWithMetadata, StoredImpressionWithMetadata, StreamingEvent } from '../sync/submitters/types';
4
4
  import { SplitIO, ImpressionDTO, SDKMode } from '../types';
5
5
  /**
6
6
  * Interface of a pluggable storage wrapper.
@@ -239,6 +239,7 @@ export interface ISegmentsCacheSync extends ISegmentsCacheBase {
239
239
  isInSegment(name: string, key?: string): boolean;
240
240
  registerSegments(names: string[]): boolean;
241
241
  getRegisteredSegments(): string[];
242
+ getKeysCount(): number;
242
243
  setChangeNumber(name: string, changeNumber: number): boolean;
243
244
  getChangeNumber(name: string): number;
244
245
  resetSegments(names: string[]): boolean;
@@ -297,41 +298,89 @@ export interface IImpressionCountsCacheSync extends IRecorderCacheProducerSync<R
297
298
  clear(): void;
298
299
  state(): Record<string, number>;
299
300
  }
300
- /** Latencies and metric counts cache */
301
- export interface ILatenciesCacheSync extends IRecorderCacheProducerSync<Record<string, number[]>> {
302
- track(metricName: string, latency: number): boolean;
303
- isEmpty(): boolean;
304
- clear(): void;
305
- state(): Record<string, number[]>;
301
+ /**
302
+ * Telemetry storage interface for standalone and partial consumer modes.
303
+ * Methods are sync because data is stored in memory.
304
+ */
305
+ export interface ITelemetryInitConsumerSync {
306
+ getTimeUntilReady(): number | undefined;
307
+ getTimeUntilReadyFromCache(): number | undefined;
308
+ getNonReadyUsage(): number;
306
309
  }
307
- export interface ILatenciesCacheAsync {
308
- track(metricName: string, latency: number): Promise<boolean>;
310
+ export interface ITelemetryRuntimeConsumerSync {
311
+ getImpressionStats(type: ImpressionDataType): number;
312
+ getEventStats(type: EventDataType): number;
313
+ getLastSynchronization(): LastSync;
314
+ popHttpErrors(): HttpErrors;
315
+ popHttpLatencies(): HttpLatencies;
316
+ popAuthRejections(): number;
317
+ popTokenRefreshes(): number;
318
+ popStreamingEvents(): Array<StreamingEvent>;
319
+ popTags(): Array<string> | undefined;
320
+ getSessionLength(): number | undefined;
309
321
  }
310
- export interface ICountsCacheSync extends IRecorderCacheProducerSync<Record<string, number>> {
311
- track(metricName: string): boolean;
312
- isEmpty(): boolean;
313
- clear(): void;
314
- state(): Record<string, number>;
322
+ export interface ITelemetryEvaluationConsumerSync {
323
+ popExceptions(): MethodExceptions;
324
+ popLatencies(): MethodLatencies;
325
+ }
326
+ export interface ITelemetryStorageConsumerSync extends ITelemetryInitConsumerSync, ITelemetryRuntimeConsumerSync, ITelemetryEvaluationConsumerSync {
327
+ }
328
+ export interface ITelemetryInitProducerSync {
329
+ recordTimeUntilReady(ms: number): void;
330
+ recordTimeUntilReadyFromCache(ms: number): void;
331
+ recordNonReadyUsage(): void;
332
+ }
333
+ export interface ITelemetryRuntimeProducerSync {
334
+ addTag(tag: string): void;
335
+ recordImpressionStats(type: ImpressionDataType, count: number): void;
336
+ recordEventStats(type: EventDataType, count: number): void;
337
+ recordSuccessfulSync(resource: OperationType, timeMs: number): void;
338
+ recordHttpError(resource: OperationType, status: number): void;
339
+ recordHttpLatency(resource: OperationType, latencyMs: number): void;
340
+ recordAuthRejections(): void;
341
+ recordTokenRefreshes(): void;
342
+ recordStreamingEvents(streamingEvent: StreamingEvent): void;
343
+ recordSessionLength(ms: number): void;
315
344
  }
316
- export interface ICountsCacheAsync {
317
- track(metricName: string): Promise<boolean>;
345
+ export interface ITelemetryEvaluationProducerSync {
346
+ recordLatency(method: Method, latencyMs: number): void;
347
+ recordException(method: Method): void;
348
+ }
349
+ export interface ITelemetryStorageProducerSync extends ITelemetryInitProducerSync, ITelemetryRuntimeProducerSync, ITelemetryEvaluationProducerSync {
350
+ }
351
+ export interface ITelemetryCacheSync extends ITelemetryStorageConsumerSync, ITelemetryStorageProducerSync {
352
+ }
353
+ /**
354
+ * Telemetry storage interface for consumer mode.
355
+ * Methods are async because data is stored in Redis or a pluggable storage.
356
+ */
357
+ export interface ITelemetryEvaluationConsumerAsync {
358
+ popExceptions(): Promise<MethodExceptions>;
359
+ popLatencies(): Promise<MethodLatencies>;
360
+ }
361
+ export interface ITelemetryEvaluationProducerAsync {
362
+ recordLatency(method: Method, latencyMs: number): Promise<any>;
363
+ recordException(method: Method): Promise<any>;
364
+ }
365
+ export interface ITelemetryCacheAsync extends ITelemetryEvaluationProducerAsync {
318
366
  }
319
367
  /**
320
368
  * Storages
321
369
  */
322
- export interface IStorageBase<TSplitsCache extends ISplitsCacheBase, TSegmentsCache extends ISegmentsCacheBase, TImpressionsCache extends IImpressionsCacheBase, TEventsCache extends IEventsCacheBase, TLatenciesCache extends ILatenciesCacheSync | ILatenciesCacheAsync, TCountsCache extends ICountsCacheSync | ICountsCacheAsync> {
370
+ export interface IStorageBase<TSplitsCache extends ISplitsCacheBase, TSegmentsCache extends ISegmentsCacheBase, TImpressionsCache extends IImpressionsCacheBase, TEventsCache extends IEventsCacheBase, TTelemetryCache extends ITelemetryCacheSync | ITelemetryCacheAsync> {
323
371
  splits: TSplitsCache;
324
372
  segments: TSegmentsCache;
325
373
  impressions: TImpressionsCache;
326
374
  impressionCounts?: IImpressionCountsCacheSync;
327
375
  events: TEventsCache;
328
- latencies?: TLatenciesCache;
329
- counts?: TCountsCache;
376
+ telemetry?: TTelemetryCache;
330
377
  destroy(): void | Promise<void>;
331
378
  shared?: (matchingKey: string, onReadyCb: (error?: any) => void) => this;
332
379
  }
333
- export declare type IStorageSync = IStorageBase<ISplitsCacheSync, ISegmentsCacheSync, IImpressionsCacheSync, IEventsCacheSync, ILatenciesCacheSync, ICountsCacheSync>;
334
- export declare type IStorageAsync = IStorageBase<ISplitsCacheAsync, ISegmentsCacheAsync, IImpressionsCacheAsync | IImpressionsCacheSync, IEventsCacheAsync | IEventsCacheSync, ILatenciesCacheAsync, ICountsCacheAsync>;
380
+ export interface IStorageSync extends IStorageBase<ISplitsCacheSync, ISegmentsCacheSync, IImpressionsCacheSync, IEventsCacheSync, ITelemetryCacheSync> {
381
+ }
382
+ export interface IStorageAsync extends IStorageBase<ISplitsCacheAsync, ISegmentsCacheAsync, IImpressionsCacheAsync | IImpressionsCacheSync, IEventsCacheAsync | IEventsCacheSync, ITelemetryCacheAsync> {
383
+ }
335
384
  /** StorageFactory */
336
385
  export declare type DataLoader = (storage: IStorageSync, matchingKey: string) => void;
337
386
  export interface IStorageFactoryParams {
@@ -339,9 +388,9 @@ export interface IStorageFactoryParams {
339
388
  impressionsQueueSize?: number;
340
389
  eventsQueueSize?: number;
341
390
  optimize?: boolean;
391
+ mode: SDKMode;
342
392
  matchingKey?: string;
343
393
  splitFiltersValidation?: ISplitFiltersValidation;
344
- mode?: SDKMode;
345
394
  onReadyCb: (error?: any) => void;
346
395
  metadata: IMetadata;
347
396
  }
@@ -1,9 +1,10 @@
1
- import { ISyncManagerCS, ISyncManagerFactoryParams } from '../types';
1
+ import { ISyncManagerCS } from '../types';
2
2
  import { ISplitsParser } from './splitsParser/types';
3
+ import { ISdkFactoryContextSync } from '../../sdkFactory/types';
3
4
  /**
4
5
  * Offline SyncManager factory.
5
6
  * Can be used for server-side API, and client-side API with or without multiple clients.
6
7
  *
7
8
  * @param splitsParser e.g., `splitsParserFromFile`, `splitsParserFromSettings`.
8
9
  */
9
- export declare function syncManagerOfflineFactory(splitsParserFactory: () => ISplitsParser): (params: ISyncManagerFactoryParams) => ISyncManagerCS;
10
+ export declare function syncManagerOfflineFactory(splitsParserFactory: () => ISplitsParser): (params: ISdkFactoryContextSync) => ISyncManagerCS;
@@ -1,7 +1,7 @@
1
1
  import { IPollingManagerCS } from './types';
2
- import { ISyncManagerFactoryParams } from '../types';
2
+ import { ISdkFactoryContextSync } from '../../sdkFactory/types';
3
3
  /**
4
4
  * Expose start / stop mechanism for polling data from services.
5
5
  * For client-side API with multiple clients.
6
6
  */
7
- export declare function pollingManagerCSFactory(params: ISyncManagerFactoryParams): IPollingManagerCS;
7
+ export declare function pollingManagerCSFactory(params: ISdkFactoryContextSync): IPollingManagerCS;
@@ -1,6 +1,6 @@
1
1
  import { IPollingManager } from './types';
2
- import { ISyncManagerFactoryParams } from '../types';
2
+ import { ISdkFactoryContextSync } from '../../sdkFactory/types';
3
3
  /**
4
4
  * Expose start / stop mechanism for pulling data from services.
5
5
  */
6
- export declare function pollingManagerSSFactory(params: ISyncManagerFactoryParams): IPollingManager;
6
+ export declare function pollingManagerSSFactory(params: ISdkFactoryContextSync): IPollingManager;
@@ -1,3 +1,4 @@
1
+ import { ITelemetryTracker } from '../../../trackers/types';
1
2
  import { ControlType } from '../constants';
2
3
  import { IPushEventEmitter } from '../types';
3
4
  /**
@@ -5,7 +6,7 @@ import { IPushEventEmitter } from '../types';
5
6
  *
6
7
  * @param pushEmitter emitter for events related to streaming support
7
8
  */
8
- export declare function notificationKeeperFactory(pushEmitter: IPushEventEmitter): {
9
+ export declare function notificationKeeperFactory(pushEmitter: IPushEventEmitter, telemetryTracker: ITelemetryTracker): {
9
10
  handleOpen(): void;
10
11
  isStreamingUp(): boolean;
11
12
  handleOccupancyEvent(publishers: number, channel: string, timestamp: number): void;
@@ -1,10 +1,11 @@
1
1
  import { IPushEventEmitter } from '../types';
2
2
  import { ISseEventHandler } from '../SSEClient/types';
3
3
  import { ILogger } from '../../../logger/types';
4
+ import { ITelemetryTracker } from '../../../trackers/types';
4
5
  /**
5
6
  * Factory for SSEHandler, which processes SSEClient messages and emits the corresponding push events.
6
7
  *
7
8
  * @param log factory logger
8
9
  * @param pushEmitter emitter for events related to streaming support
9
10
  */
10
- export declare function SSEHandlerFactory(log: ILogger, pushEmitter: IPushEventEmitter): ISseEventHandler;
11
+ export declare function SSEHandlerFactory(log: ILogger, pushEmitter: IPushEventEmitter, telemetryTracker: ITelemetryTracker): ISseEventHandler;
@@ -1,9 +1,9 @@
1
1
  import { IPushManager } from './types';
2
2
  import { IPollingManager } from '../polling/types';
3
- import { ISyncManagerFactoryParams } from '../types';
3
+ import { ISdkFactoryContextSync } from '../../sdkFactory/types';
4
4
  /**
5
5
  * PushManager factory:
6
6
  * - for server-side if key is not provided in settings.
7
7
  * - for client-side, with support for multiple clients, if key is provided in settings
8
8
  */
9
- export declare function pushManagerFactory(params: ISyncManagerFactoryParams, pollingManager: IPollingManager): IPushManager | undefined;
9
+ export declare function pushManagerFactory(params: ISdkFactoryContextSync, pollingManager: IPollingManager): IPushManager | undefined;
@@ -0,0 +1,5 @@
1
+ import { ISdkFactoryContextSync } from '../../sdkFactory/types';
2
+ /**
3
+ * Submitter that periodically posts tracked events
4
+ */
5
+ export declare function eventsSubmitterFactory(params: ISdkFactoryContextSync): import("../types").ISyncTask<[], void>;
@@ -0,0 +1,10 @@
1
+ import { ISdkFactoryContextSync } from '../../sdkFactory/types';
2
+ import { ImpressionCountsPayload } from './types';
3
+ /**
4
+ * Converts `impressionCounts` data from cache into request payload.
5
+ */
6
+ export declare function fromImpressionCountsCollector(impressionsCount: Record<string, number>): ImpressionCountsPayload;
7
+ /**
8
+ * Submitter that periodically posts impression counts
9
+ */
10
+ export declare function impressionCountsSubmitterFactory(params: ISdkFactoryContextSync): import("../types").ISyncTask<[], void> | undefined;
@@ -0,0 +1,11 @@
1
+ import { ImpressionDTO } from '../../types';
2
+ import { ImpressionsPayload } from './types';
3
+ import { ISdkFactoryContextSync } from '../../sdkFactory/types';
4
+ /**
5
+ * Converts `impressions` data from cache into request payload.
6
+ */
7
+ export declare function fromImpressionsCollector(sendLabels: boolean, data: ImpressionDTO[]): ImpressionsPayload;
8
+ /**
9
+ * Submitter that periodically posts impressions data
10
+ */
11
+ export declare function impressionsSubmitterFactory(params: ISdkFactoryContextSync): import("../types").ISyncTask<[], void>;
@@ -0,0 +1,12 @@
1
+ import { ISyncTask } from '../types';
2
+ import { IRecorderCacheProducerSync } from '../../storages/types';
3
+ import { ILogger } from '../../logger/types';
4
+ import { IResponse } from '../../services/types';
5
+ /**
6
+ * Base function to create submitters, such as ImpressionsSubmitter and EventsSubmitter
7
+ */
8
+ export declare function submitterFactory<TState>(log: ILogger, postClient: (body: string) => Promise<IResponse>, sourceCache: IRecorderCacheProducerSync<TState>, postRate: number, dataName: string, fromCacheToPayload?: (cacheData: TState) => any, maxRetries?: number, debugLogs?: boolean): ISyncTask<[], void>;
9
+ /**
10
+ * Decorates a provided submitter with a first execution window
11
+ */
12
+ export declare function firstPushWindowDecorator(submitter: ISyncTask, firstPushWindow: number): ISyncTask<[], any>;
@@ -1,2 +1,2 @@
1
- import { ISyncManagerFactoryParams } from '../types';
2
- export declare function submitterManagerFactory(params: ISyncManagerFactoryParams): import("../types").ISyncTask<[], any>;
1
+ import { ISdkFactoryContextSync } from '../../sdkFactory/types';
2
+ export declare function submitterManagerFactory(params: ISdkFactoryContextSync): import("../types").ISyncTask<[], any>;
@@ -0,0 +1,24 @@
1
+ import { ISegmentsCacheSync, ISplitsCacheSync, ITelemetryCacheSync } from '../../storages/types';
2
+ import { TelemetryUsageStatsPayload, TelemetryConfigStatsPayload } from './types';
3
+ import { ISettings } from '../../types';
4
+ import { ISdkFactoryContextSync } from '../../sdkFactory/types';
5
+ /**
6
+ * Converts data from telemetry cache into /metrics/usage request payload.
7
+ */
8
+ export declare function telemetryCacheStatsAdapter(telemetry: ITelemetryCacheSync, splits: ISplitsCacheSync, segments: ISegmentsCacheSync): {
9
+ isEmpty(): boolean;
10
+ clear(): void;
11
+ state(): TelemetryUsageStatsPayload;
12
+ };
13
+ /**
14
+ * Converts data from telemetry cache and settings into /metrics/config request payload.
15
+ */
16
+ export declare function telemetryCacheConfigAdapter(telemetry: ITelemetryCacheSync, settings: ISettings): {
17
+ isEmpty(): boolean;
18
+ clear(): void;
19
+ state(): TelemetryConfigStatsPayload;
20
+ };
21
+ /**
22
+ * Submitter that periodically posts telemetry data
23
+ */
24
+ export declare function telemetrySubmitterFactory(params: ISdkFactoryContextSync): import("../types").ISyncTask<[], any> | undefined;
@@ -1,27 +0,0 @@
1
- import { ISyncTask, ITimeTracker } from '../types';
2
- import { ISplitApi } from '../../services/types';
3
- import { IStorageSync, TelemetryCacheSync } from '../../storages/types';
4
- import { TelemetryUsageStatsPayload, TelemetryConfigStatsPayload } from './types';
5
- import { IReadinessManager } from '../../readiness/types';
6
- import { ISettings } from '../../types';
7
- /**
8
- * Converts `impressions` data from cache into request payload.
9
- */
10
- export declare function telemetryCacheStatsAdapter({ splits, segments, telemetry }: IStorageSync & {
11
- telemetry: TelemetryCacheSync;
12
- }): {
13
- isEmpty(): boolean;
14
- clear(): void;
15
- state(): TelemetryUsageStatsPayload;
16
- };
17
- export declare function telemetryCacheConfigAdapter(settings: ISettings, telemetryCache: TelemetryCacheSync): {
18
- isEmpty(): boolean;
19
- clear(): void;
20
- state(): TelemetryConfigStatsPayload;
21
- };
22
- /**
23
- * Sync task that periodically posts impressions data
24
- */
25
- export declare function telemetrySyncTaskFactory(settings: ISettings, { postMetricsUsage, postMetricsConfig }: ISplitApi, storage: IStorageSync & {
26
- telemetry: TelemetryCacheSync;
27
- }, telemetryRefreshRate: number, readiness: IReadinessManager, latencyTracker?: ITimeTracker): ISyncTask;
@@ -58,3 +58,110 @@ export declare type StoredEventWithMetadata = {
58
58
  /** Stored event */
59
59
  e: SplitIO.EventData;
60
60
  };
61
+ /**
62
+ * Telemetry usage stats
63
+ */
64
+ export declare type QUEUED = 0;
65
+ export declare type DROPPED = 1;
66
+ export declare type DEDUPED = 2;
67
+ export declare type ImpressionDataType = QUEUED | DROPPED | DEDUPED;
68
+ export declare type EventDataType = QUEUED | DROPPED;
69
+ export declare type SPLITS = 'sp';
70
+ export declare type IMPRESSIONS = 'im';
71
+ export declare type IMPRESSIONS_COUNT = 'ic';
72
+ export declare type EVENTS = 'ev';
73
+ export declare type TELEMETRY = 'te';
74
+ export declare type TOKEN = 'to';
75
+ export declare type SEGMENT = 'se';
76
+ export declare type MY_SEGMENT = 'ms';
77
+ export declare type OperationType = SPLITS | IMPRESSIONS | IMPRESSIONS_COUNT | EVENTS | TELEMETRY | TOKEN | SEGMENT | MY_SEGMENT;
78
+ export declare type LastSync = Record<OperationType, number | undefined>;
79
+ export declare type HttpErrors = Record<OperationType, {
80
+ [statusCode: string]: number;
81
+ }>;
82
+ export declare type HttpLatencies = Record<OperationType, Array<number>>;
83
+ export declare type TREATMENT = 't';
84
+ export declare type TREATMENTS = 'ts';
85
+ export declare type TREATMENT_WITH_CONFIG = 'tc';
86
+ export declare type TREATMENTS_WITH_CONFIG = 'tcs';
87
+ export declare type TRACK = 'tr';
88
+ export declare type Method = TREATMENT | TREATMENTS | TREATMENT_WITH_CONFIG | TREATMENTS_WITH_CONFIG | TRACK;
89
+ export declare type MethodLatencies = Record<Method, Array<number>>;
90
+ export declare type MethodExceptions = Record<Method, number>;
91
+ export declare type CONNECTION_ESTABLISHED = 0;
92
+ export declare type OCCUPANCY_PRI = 10;
93
+ export declare type OCCUPANCY_SEC = 20;
94
+ export declare type STREAMING_STATUS = 30;
95
+ export declare type SSE_CONNECTION_ERROR = 40;
96
+ export declare type TOKEN_REFRESH = 50;
97
+ export declare type ABLY_ERROR = 60;
98
+ export declare type SYNC_MODE_UPDATE = 70;
99
+ export declare type StreamingEventType = CONNECTION_ESTABLISHED | OCCUPANCY_PRI | OCCUPANCY_SEC | STREAMING_STATUS | SSE_CONNECTION_ERROR | TOKEN_REFRESH | ABLY_ERROR | SYNC_MODE_UPDATE;
100
+ export declare type StreamingEvent = {
101
+ e: StreamingEventType;
102
+ d?: number;
103
+ t: number;
104
+ };
105
+ export declare type TelemetryUsageStatsPayload = {
106
+ lS: LastSync;
107
+ mL: MethodLatencies;
108
+ mE: MethodExceptions;
109
+ hE: HttpErrors;
110
+ hL: HttpLatencies;
111
+ tR: number;
112
+ aR: number;
113
+ iQ: number;
114
+ iDe: number;
115
+ iDr: number;
116
+ spC: number;
117
+ seC: number;
118
+ skC: number;
119
+ sL?: number;
120
+ eQ: number;
121
+ eD: number;
122
+ sE: Array<StreamingEvent>;
123
+ t?: Array<string>;
124
+ };
125
+ /**
126
+ * Telemetry config stats
127
+ */
128
+ export declare type STANDALONE_ENUM = 0;
129
+ export declare type CONSUMER_ENUM = 1;
130
+ export declare type CONSUMER_PARTIAL_ENUM = 2;
131
+ export declare type OperationMode = STANDALONE_ENUM | CONSUMER_ENUM | CONSUMER_PARTIAL_ENUM;
132
+ export declare type OPTIMIZED_ENUM = 0;
133
+ export declare type DEBUG_ENUM = 1;
134
+ export declare type ImpressionsMode = OPTIMIZED_ENUM | DEBUG_ENUM;
135
+ export declare type RefreshRates = {
136
+ sp: number;
137
+ se: number;
138
+ im: number;
139
+ ev: number;
140
+ te: number;
141
+ };
142
+ export declare type UrlOverrides = {
143
+ s: boolean;
144
+ e: boolean;
145
+ a: boolean;
146
+ st: boolean;
147
+ t: boolean;
148
+ };
149
+ export declare type TelemetryConfigStatsPayload = {
150
+ oM?: OperationMode;
151
+ st: 'memory' | 'redis' | 'pluggable' | 'localstorage';
152
+ sE: boolean;
153
+ rR: RefreshRates;
154
+ uO: UrlOverrides;
155
+ iQ: number;
156
+ eQ: number;
157
+ iM: ImpressionsMode;
158
+ iL: boolean;
159
+ hP: boolean;
160
+ aF: number;
161
+ rF: number;
162
+ tR: number;
163
+ tC?: number;
164
+ nR: number;
165
+ t?: Array<string>;
166
+ i?: Array<string>;
167
+ };
@@ -1,6 +1,7 @@
1
- import { ISyncManagerCS, ISyncManagerFactoryParams } from './types';
1
+ import { ISyncManagerCS } from './types';
2
2
  import { IPushManager } from './streaming/types';
3
3
  import { IPollingManager } from './polling/types';
4
+ import { ISdkFactoryContextSync } from '../sdkFactory/types';
4
5
  /**
5
6
  * Online SyncManager factory.
6
7
  * Can be used for server-side API, and client-side API with or without multiple clients.
@@ -9,4 +10,4 @@ import { IPollingManager } from './polling/types';
9
10
  * `pollingManagerSSFactory` or `pollingManagerCSFactory` respectively.
10
11
  * @param pushManagerFactory optional to build a SyncManager with or without streaming support
11
12
  */
12
- export declare function syncManagerOnlineFactory(pollingManagerFactory?: (params: ISyncManagerFactoryParams) => IPollingManager, pushManagerFactory?: (params: ISyncManagerFactoryParams, pollingManager: IPollingManager) => IPushManager | undefined): (params: ISyncManagerFactoryParams) => ISyncManagerCS;
13
+ export declare function syncManagerOnlineFactory(pollingManagerFactory?: (params: ISdkFactoryContextSync) => IPollingManager, pushManagerFactory?: (params: ISdkFactoryContextSync, pollingManager: IPollingManager) => IPushManager | undefined): (params: ISdkFactoryContextSync) => ISyncManagerCS;
@@ -1,8 +1,5 @@
1
1
  import { IReadinessManager } from '../readiness/types';
2
- import { IPlatform } from '../sdkFactory/types';
3
- import { ISplitApi } from '../services/types';
4
2
  import { IStorageSync } from '../storages/types';
5
- import { ISettings } from '../types';
6
3
  import { IPollingManager } from './polling/types';
7
4
  import { IPushManager } from './streaming/types';
8
5
  export interface ITask<Input extends any[] = []> {
@@ -33,9 +30,6 @@ export interface ISyncTask<Input extends any[] = [], Output = any> extends ITask
33
30
  */
34
31
  isExecuting(): boolean;
35
32
  }
36
- export interface ITimeTracker {
37
- start(): () => void;
38
- }
39
33
  /** SyncManager */
40
34
  export interface ISyncManager extends ITask {
41
35
  flush(): Promise<any>;
@@ -46,10 +40,3 @@ export interface ISyncManager extends ITask {
46
40
  export interface ISyncManagerCS extends ISyncManager {
47
41
  shared(matchingKey: string, readinessManager: IReadinessManager, storage: IStorageSync): ISyncManager | undefined;
48
42
  }
49
- export interface ISyncManagerFactoryParams {
50
- settings: ISettings;
51
- readiness: IReadinessManager;
52
- storage: IStorageSync;
53
- splitApi: ISplitApi;
54
- platform: IPlatform;
55
- }
@@ -1,4 +1,4 @@
1
- import { IEventsCacheBase } from '../storages/types';
1
+ import { IEventsCacheBase, ITelemetryCacheAsync, ITelemetryCacheSync } from '../storages/types';
2
2
  import { IEventsHandler, IEventTracker } from './types';
3
3
  import { ISettings } from '../types';
4
4
  /**
@@ -7,4 +7,4 @@ import { ISettings } from '../types';
7
7
  * @param eventsCache cache to save events
8
8
  * @param integrationsManager optional event handler used for integrations
9
9
  */
10
- export declare function eventTrackerFactory(settings: ISettings, eventsCache: IEventsCacheBase, integrationsManager?: IEventsHandler): IEventTracker;
10
+ export declare function eventTrackerFactory(settings: ISettings, eventsCache: IEventsCacheBase, integrationsManager?: IEventsHandler, telemetryCache?: ITelemetryCacheSync | ITelemetryCacheAsync): IEventTracker;
@@ -1,4 +1,4 @@
1
- import { IImpressionCountsCacheSync, IImpressionsCacheBase } from '../storages/types';
1
+ import { IImpressionCountsCacheSync, IImpressionsCacheBase, ITelemetryCacheSync, ITelemetryCacheAsync } from '../storages/types';
2
2
  import { IImpressionsHandler, IImpressionsTracker } from './types';
3
3
  import { ISettings } from '../types';
4
4
  import { IImpressionObserver } from './impressionObserver/types';
@@ -12,4 +12,4 @@ import { IImpressionObserver } from './impressionObserver/types';
12
12
  * @param observer optional impression observer. If provided, previous time (pt property) is included in impression instances
13
13
  * @param countsCache optional cache to save impressions count. If provided, impressions will be deduped (OPTIMIZED mode)
14
14
  */
15
- export declare function impressionsTrackerFactory(settings: ISettings, impressionsCache: IImpressionsCacheBase, integrationsManager?: IImpressionsHandler, observer?: IImpressionObserver, countsCache?: IImpressionCountsCacheSync): IImpressionsTracker;
15
+ export declare function impressionsTrackerFactory(settings: ISettings, impressionsCache: IImpressionsCacheBase, integrationsManager?: IImpressionsHandler, observer?: IImpressionObserver, countsCache?: IImpressionCountsCacheSync, telemetryCache?: ITelemetryCacheSync | ITelemetryCacheAsync): IImpressionsTracker;
@@ -1,4 +1,3 @@
1
- import { TelemetryCacheAsync, TelemetryCacheSync } from '../storages/types';
2
- import { ISettings } from '../types';
1
+ import { ITelemetryCacheSync, ITelemetryCacheAsync } from '../storages/types';
3
2
  import { ITelemetryTracker } from './types';
4
- export declare function telemetryTrackerFactory(settings: ISettings, telemetryCache?: TelemetryCacheAsync | TelemetryCacheSync, now?: () => number): ITelemetryTracker;
3
+ export declare function telemetryTrackerFactory(telemetryCache?: ITelemetryCacheSync | ITelemetryCacheAsync, now?: () => number): ITelemetryTracker;
@@ -1,5 +1,7 @@
1
1
  import { SplitIO, ImpressionDTO } from '../types';
2
+ import { StreamingEventType, Method, OperationType } from '../sync/submitters/types';
2
3
  import { IEventsCacheBase } from '../storages/types';
4
+ import { NetworkError } from '../services/types';
3
5
  /** Events tracker */
4
6
  export interface IEventsHandler {
5
7
  handleEvent(eventData: SplitIO.EventData): any;
@@ -12,3 +14,23 @@ export interface IImpressionsHandler {
12
14
  export interface IImpressionsTracker {
13
15
  track(impressions: ImpressionDTO[], attributes?: SplitIO.Attributes): void;
14
16
  }
17
+ /** Telemetry tracker */
18
+ export declare type AUTH_REJECTION = 80;
19
+ export interface ITelemetryTracker {
20
+ /**
21
+ * Creates a telemetry evaluator tracker, to record Latencies, Exceptions and NonReadyUsage of client operations (getTreatments and track method calls)
22
+ */
23
+ trackEval(method: Method): (label?: string) => void;
24
+ /**
25
+ * Creates a telemetry runtime tracker, to record Latencies and Exceptions of HTTP requests
26
+ */
27
+ trackHttp(method: OperationType): (error?: NetworkError) => void;
28
+ /**
29
+ * Records session length
30
+ */
31
+ sessionLength(): void;
32
+ /**
33
+ * Records streaming event
34
+ */
35
+ streamingEvent(e: StreamingEventType | AUTH_REJECTION, d?: number): void;
36
+ }