@splitsoftware/splitio-commons 1.6.2-rc.3 → 1.6.2-rc.6

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 (272) hide show
  1. package/cjs/evaluator/index.js +10 -11
  2. package/cjs/integrations/ga/GaToSplit.js +8 -5
  3. package/cjs/sdkFactory/index.js +2 -3
  4. package/cjs/sdkManager/index.js +3 -11
  5. package/cjs/services/splitApi.js +0 -1
  6. package/cjs/storages/AbstractSplitsCacheAsync.js +7 -9
  7. package/cjs/storages/AbstractSplitsCacheSync.js +7 -9
  8. package/cjs/storages/dataLoader.js +1 -1
  9. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +5 -6
  10. package/cjs/storages/inMemory/SplitsCacheInMemory.js +7 -10
  11. package/cjs/storages/inRedis/SplitsCacheInRedis.js +15 -9
  12. package/cjs/storages/pluggable/SplitsCachePluggable.js +14 -9
  13. package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +2 -3
  14. package/cjs/sync/polling/updaters/splitChangesUpdater.js +1 -1
  15. package/cjs/trackers/telemetryTracker.js +6 -0
  16. package/cjs/types.js +2 -0
  17. package/cjs/utils/key/index.js +1 -1
  18. package/cjs/utils/settingsValidation/index.js +0 -1
  19. package/esm/evaluator/index.js +10 -11
  20. package/esm/integrations/ga/GaToSplit.js +8 -5
  21. package/esm/sdkFactory/index.js +2 -3
  22. package/esm/sdkManager/index.js +3 -11
  23. package/esm/services/splitApi.js +0 -1
  24. package/esm/storages/AbstractSplitsCacheAsync.js +7 -9
  25. package/esm/storages/AbstractSplitsCacheSync.js +7 -9
  26. package/esm/storages/dataLoader.js +1 -1
  27. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +5 -6
  28. package/esm/storages/inMemory/SplitsCacheInMemory.js +7 -10
  29. package/esm/storages/inRedis/SplitsCacheInRedis.js +15 -9
  30. package/esm/storages/pluggable/SplitsCachePluggable.js +14 -9
  31. package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +2 -3
  32. package/esm/sync/polling/updaters/splitChangesUpdater.js +1 -1
  33. package/esm/trackers/telemetryTracker.js +6 -0
  34. package/esm/types.js +1 -0
  35. package/esm/utils/key/index.js +1 -1
  36. package/esm/utils/settingsValidation/index.js +0 -1
  37. package/package.json +2 -2
  38. package/src/consent/sdkUserConsent.ts +3 -4
  39. package/src/dtos/types.ts +8 -0
  40. package/src/evaluator/Engine.ts +3 -3
  41. package/src/evaluator/combiners/and.ts +1 -1
  42. package/src/evaluator/combiners/ifelseif.ts +3 -3
  43. package/src/evaluator/condition/engineUtils.ts +1 -1
  44. package/src/evaluator/condition/index.ts +6 -6
  45. package/src/evaluator/index.ts +18 -19
  46. package/src/evaluator/matchers/all.ts +1 -1
  47. package/src/evaluator/matchers/between.ts +1 -1
  48. package/src/evaluator/matchers/boolean.ts +1 -1
  49. package/src/evaluator/matchers/cont_all.ts +1 -1
  50. package/src/evaluator/matchers/cont_any.ts +1 -1
  51. package/src/evaluator/matchers/cont_str.ts +1 -1
  52. package/src/evaluator/matchers/dependency.ts +1 -1
  53. package/src/evaluator/matchers/eq.ts +1 -1
  54. package/src/evaluator/matchers/eq_set.ts +1 -1
  55. package/src/evaluator/matchers/ew.ts +1 -1
  56. package/src/evaluator/matchers/gte.ts +1 -1
  57. package/src/evaluator/matchers/index.ts +1 -1
  58. package/src/evaluator/matchers/lte.ts +1 -1
  59. package/src/evaluator/matchers/part_of.ts +1 -1
  60. package/src/evaluator/matchers/segment.ts +1 -1
  61. package/src/evaluator/matchers/string.ts +1 -1
  62. package/src/evaluator/matchers/sw.ts +1 -1
  63. package/src/evaluator/matchers/whitelist.ts +1 -1
  64. package/src/evaluator/parser/index.ts +3 -3
  65. package/src/evaluator/types.ts +6 -6
  66. package/src/evaluator/value/index.ts +4 -4
  67. package/src/evaluator/value/sanitize.ts +4 -4
  68. package/src/integrations/ga/GaToSplit.ts +15 -11
  69. package/src/integrations/ga/SplitToGa.ts +10 -10
  70. package/src/integrations/ga/types.ts +4 -4
  71. package/src/integrations/pluggable.ts +3 -3
  72. package/src/integrations/types.ts +4 -3
  73. package/src/logger/index.ts +3 -3
  74. package/src/logger/sdkLogger.ts +2 -1
  75. package/src/logger/types.ts +16 -0
  76. package/src/readiness/sdkReadinessManager.ts +1 -1
  77. package/src/readiness/types.ts +9 -2
  78. package/src/sdkClient/client.ts +13 -13
  79. package/src/sdkClient/clientAttributesDecoration.ts +9 -9
  80. package/src/sdkClient/clientCS.ts +4 -3
  81. package/src/sdkClient/clientInputValidation.ts +15 -15
  82. package/src/sdkClient/sdkClient.ts +2 -2
  83. package/src/sdkClient/sdkClientMethod.ts +2 -2
  84. package/src/sdkClient/sdkClientMethodCS.ts +9 -9
  85. package/src/sdkClient/sdkClientMethodCSWithTT.ts +9 -9
  86. package/src/sdkFactory/index.ts +4 -5
  87. package/src/sdkFactory/types.ts +4 -4
  88. package/src/sdkManager/index.ts +7 -16
  89. package/src/services/splitApi.ts +0 -1
  90. package/src/storages/AbstractSplitsCacheAsync.ts +13 -14
  91. package/src/storages/AbstractSplitsCacheSync.ts +14 -16
  92. package/src/storages/dataLoader.ts +3 -3
  93. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +1 -1
  94. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +10 -12
  95. package/src/storages/inLocalStorage/index.ts +2 -3
  96. package/src/storages/inMemory/EventsCacheInMemory.ts +4 -4
  97. package/src/storages/inMemory/SplitsCacheInMemory.ts +10 -14
  98. package/src/storages/inRedis/EventsCacheInRedis.ts +4 -4
  99. package/src/storages/inRedis/ImpressionsCacheInRedis.ts +1 -1
  100. package/src/storages/inRedis/RedisAdapter.ts +1 -1
  101. package/src/storages/inRedis/SegmentsCacheInRedis.ts +1 -1
  102. package/src/storages/inRedis/SplitsCacheInRedis.ts +22 -18
  103. package/src/storages/inRedis/TelemetryCacheInRedis.ts +1 -1
  104. package/src/storages/inRedis/index.ts +2 -3
  105. package/src/storages/pluggable/EventsCachePluggable.ts +4 -4
  106. package/src/storages/pluggable/ImpressionsCachePluggable.ts +1 -1
  107. package/src/storages/pluggable/SegmentsCachePluggable.ts +1 -1
  108. package/src/storages/pluggable/SplitsCachePluggable.ts +21 -18
  109. package/src/storages/pluggable/TelemetryCachePluggable.ts +1 -1
  110. package/src/storages/pluggable/index.ts +3 -3
  111. package/src/storages/pluggable/wrapperAdapter.ts +1 -1
  112. package/src/storages/types.ts +30 -54
  113. package/src/sync/offline/LocalhostFromObject.ts +4 -4
  114. package/src/sync/offline/splitsParser/splitsParserFromSettings.ts +8 -8
  115. package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +5 -6
  116. package/src/sync/polling/updaters/mySegmentsUpdater.ts +1 -1
  117. package/src/sync/polling/updaters/segmentChangesUpdater.ts +1 -1
  118. package/src/sync/polling/updaters/splitChangesUpdater.ts +3 -3
  119. package/src/sync/streaming/SSEHandler/index.ts +1 -1
  120. package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
  121. package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +1 -1
  122. package/src/sync/submitters/submitter.ts +1 -1
  123. package/src/sync/submitters/types.ts +2 -2
  124. package/src/sync/syncTask.ts +1 -1
  125. package/src/trackers/eventTracker.ts +3 -3
  126. package/src/trackers/impressionsTracker.ts +3 -3
  127. package/src/trackers/telemetryTracker.ts +7 -2
  128. package/src/trackers/types.ts +8 -4
  129. package/src/types.ts +1263 -0
  130. package/src/utils/constants/index.ts +1 -1
  131. package/src/utils/inputValidation/apiKey.ts +1 -1
  132. package/src/utils/inputValidation/attribute.ts +1 -1
  133. package/src/utils/inputValidation/attributes.ts +3 -3
  134. package/src/utils/inputValidation/event.ts +1 -1
  135. package/src/utils/inputValidation/eventProperties.ts +3 -3
  136. package/src/utils/inputValidation/eventValue.ts +1 -1
  137. package/src/utils/inputValidation/isOperational.ts +1 -1
  138. package/src/utils/inputValidation/key.ts +3 -3
  139. package/src/utils/inputValidation/preloadedData.ts +3 -3
  140. package/src/utils/inputValidation/split.ts +1 -1
  141. package/src/utils/inputValidation/splitExistance.ts +1 -1
  142. package/src/utils/inputValidation/splits.ts +1 -1
  143. package/src/utils/inputValidation/trafficType.ts +1 -1
  144. package/src/utils/inputValidation/trafficTypeExistance.ts +1 -1
  145. package/src/utils/key/index.ts +9 -9
  146. package/src/utils/settingsValidation/consent.ts +2 -1
  147. package/src/utils/settingsValidation/impressionsMode.ts +3 -3
  148. package/src/utils/settingsValidation/index.ts +0 -1
  149. package/src/utils/settingsValidation/integrations/common.ts +1 -1
  150. package/src/utils/settingsValidation/integrations/configurable.ts +1 -1
  151. package/src/utils/settingsValidation/integrations/pluggable.ts +2 -1
  152. package/src/utils/settingsValidation/localhost/builtin.ts +2 -1
  153. package/src/utils/settingsValidation/localhost/pluggable.ts +2 -1
  154. package/src/utils/settingsValidation/logger/builtinLogger.ts +2 -1
  155. package/src/utils/settingsValidation/logger/pluggableLogger.ts +2 -1
  156. package/src/utils/settingsValidation/splitFilters.ts +9 -7
  157. package/src/utils/settingsValidation/storage/storageCS.ts +2 -1
  158. package/types/consent/sdkUserConsent.d.ts +9 -2
  159. package/types/dtos/types.d.ts +6 -0
  160. package/types/evaluator/Engine.d.ts +3 -3
  161. package/types/evaluator/combiners/and.d.ts +1 -1
  162. package/types/evaluator/combiners/ifelseif.d.ts +1 -1
  163. package/types/evaluator/condition/engineUtils.d.ts +1 -1
  164. package/types/evaluator/condition/index.d.ts +1 -1
  165. package/types/evaluator/index.d.ts +4 -4
  166. package/types/evaluator/matchers/all.d.ts +1 -1
  167. package/types/evaluator/matchers/between.d.ts +1 -1
  168. package/types/evaluator/matchers/boolean.d.ts +1 -1
  169. package/types/evaluator/matchers/cont_all.d.ts +1 -1
  170. package/types/evaluator/matchers/cont_any.d.ts +1 -1
  171. package/types/evaluator/matchers/cont_str.d.ts +1 -1
  172. package/types/evaluator/matchers/dependency.d.ts +1 -1
  173. package/types/evaluator/matchers/eq.d.ts +1 -1
  174. package/types/evaluator/matchers/eq_set.d.ts +1 -1
  175. package/types/evaluator/matchers/ew.d.ts +1 -1
  176. package/types/evaluator/matchers/gte.d.ts +1 -1
  177. package/types/evaluator/matchers/index.d.ts +1 -1
  178. package/types/evaluator/matchers/lte.d.ts +1 -1
  179. package/types/evaluator/matchers/part_of.d.ts +1 -1
  180. package/types/evaluator/matchers/segment.d.ts +1 -1
  181. package/types/evaluator/matchers/string.d.ts +1 -1
  182. package/types/evaluator/matchers/sw.d.ts +1 -1
  183. package/types/evaluator/matchers/whitelist.d.ts +1 -1
  184. package/types/evaluator/parser/index.d.ts +1 -1
  185. package/types/evaluator/types.d.ts +6 -6
  186. package/types/evaluator/value/index.d.ts +3 -3
  187. package/types/evaluator/value/sanitize.d.ts +3 -3
  188. package/types/integrations/ga/GaToSplit.d.ts +4 -4
  189. package/types/integrations/ga/SplitToGa.d.ts +4 -4
  190. package/types/integrations/ga/types.d.ts +4 -4
  191. package/types/integrations/types.d.ts +4 -3
  192. package/types/logger/index.d.ts +5 -3
  193. package/types/logger/sdkLogger.d.ts +2 -1
  194. package/types/logger/types.d.ts +11 -0
  195. package/types/readiness/sdkReadinessManager.d.ts +1 -1
  196. package/types/readiness/types.d.ts +8 -2
  197. package/types/sdkClient/client.d.ts +2 -2
  198. package/types/sdkClient/clientAttributesDecoration.d.ts +8 -8
  199. package/types/sdkClient/clientCS.d.ts +3 -2
  200. package/types/sdkClient/clientInputValidation.d.ts +2 -2
  201. package/types/sdkClient/sdkClient.d.ts +2 -2
  202. package/types/sdkClient/sdkClientMethod.d.ts +2 -2
  203. package/types/sdkClient/sdkClientMethodCS.d.ts +2 -2
  204. package/types/sdkClient/sdkClientMethodCSWithTT.d.ts +2 -2
  205. package/types/sdkFactory/index.d.ts +2 -2
  206. package/types/sdkFactory/types.d.ts +6 -6
  207. package/types/sdkManager/index.d.ts +3 -3
  208. package/types/storages/AbstractSplitsCacheAsync.d.ts +6 -5
  209. package/types/storages/AbstractSplitsCacheSync.d.ts +5 -5
  210. package/types/storages/dataLoader.d.ts +2 -2
  211. package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +1 -1
  212. package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +4 -3
  213. package/types/storages/inLocalStorage/index.d.ts +2 -2
  214. package/types/storages/inMemory/EventsCacheInMemory.d.ts +3 -3
  215. package/types/storages/inMemory/InMemoryStorage.d.ts +1 -1
  216. package/types/storages/inMemory/InMemoryStorageCS.d.ts +1 -1
  217. package/types/storages/inMemory/SplitsCacheInMemory.d.ts +3 -2
  218. package/types/storages/inRedis/EventsCacheInRedis.d.ts +3 -3
  219. package/types/storages/inRedis/ImpressionsCacheInRedis.d.ts +1 -1
  220. package/types/storages/inRedis/RedisAdapter.d.ts +1 -1
  221. package/types/storages/inRedis/SegmentsCacheInRedis.d.ts +1 -1
  222. package/types/storages/inRedis/SplitsCacheInRedis.d.ts +7 -6
  223. package/types/storages/inRedis/TelemetryCacheInRedis.d.ts +1 -1
  224. package/types/storages/inRedis/index.d.ts +2 -2
  225. package/types/storages/pluggable/EventsCachePluggable.d.ts +3 -3
  226. package/types/storages/pluggable/ImpressionsCachePluggable.d.ts +1 -1
  227. package/types/storages/pluggable/SegmentsCachePluggable.d.ts +1 -1
  228. package/types/storages/pluggable/SplitsCachePluggable.d.ts +7 -6
  229. package/types/storages/pluggable/TelemetryCachePluggable.d.ts +1 -1
  230. package/types/storages/pluggable/index.d.ts +2 -3
  231. package/types/storages/pluggable/wrapperAdapter.d.ts +1 -1
  232. package/types/storages/types.d.ts +28 -54
  233. package/types/sync/offline/LocalhostFromObject.d.ts +2 -2
  234. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +1 -1
  235. package/types/sync/polling/updaters/segmentChangesUpdater.d.ts +1 -1
  236. package/types/sync/polling/updaters/splitChangesUpdater.d.ts +2 -2
  237. package/types/sync/streaming/SSEHandler/index.d.ts +1 -1
  238. package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -1
  239. package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +1 -1
  240. package/types/sync/submitters/submitter.d.ts +1 -1
  241. package/types/sync/submitters/types.d.ts +2 -2
  242. package/types/sync/syncTask.d.ts +1 -1
  243. package/types/trackers/types.d.ts +8 -4
  244. package/types/types.d.ts +1261 -0
  245. package/types/utils/constants/index.d.ts +1 -1
  246. package/types/utils/inputValidation/apiKey.d.ts +1 -1
  247. package/types/utils/inputValidation/attribute.d.ts +1 -1
  248. package/types/utils/inputValidation/attributes.d.ts +3 -3
  249. package/types/utils/inputValidation/event.d.ts +1 -1
  250. package/types/utils/inputValidation/eventProperties.d.ts +3 -3
  251. package/types/utils/inputValidation/eventValue.d.ts +1 -1
  252. package/types/utils/inputValidation/isOperational.d.ts +1 -1
  253. package/types/utils/inputValidation/key.d.ts +3 -3
  254. package/types/utils/inputValidation/preloadedData.d.ts +3 -3
  255. package/types/utils/inputValidation/split.d.ts +1 -1
  256. package/types/utils/inputValidation/splitExistance.d.ts +1 -1
  257. package/types/utils/inputValidation/splits.d.ts +1 -1
  258. package/types/utils/inputValidation/trafficType.d.ts +1 -1
  259. package/types/utils/inputValidation/trafficTypeExistance.d.ts +1 -1
  260. package/types/utils/key/index.d.ts +4 -4
  261. package/types/utils/settingsValidation/consent.d.ts +2 -1
  262. package/types/utils/settingsValidation/impressionsMode.d.ts +3 -3
  263. package/types/utils/settingsValidation/integrations/common.d.ts +1 -1
  264. package/types/utils/settingsValidation/integrations/configurable.d.ts +1 -1
  265. package/types/utils/settingsValidation/integrations/pluggable.d.ts +2 -1
  266. package/types/utils/settingsValidation/localhost/builtin.d.ts +2 -1
  267. package/types/utils/settingsValidation/localhost/pluggable.d.ts +2 -1
  268. package/types/utils/settingsValidation/logger/builtinLogger.d.ts +1 -1
  269. package/types/utils/settingsValidation/logger/pluggableLogger.d.ts +1 -1
  270. package/types/utils/settingsValidation/splitFilters.d.ts +2 -1
  271. package/types/utils/settingsValidation/storage/storageCS.d.ts +3 -2
  272. package/src/types.d.ts +0 -1646
@@ -1,4 +1,4 @@
1
- import { IEventEmitter, IStatusInterface, Event } from '../types';
1
+ import { IEventEmitter, IStatusInterface } from '../types';
2
2
 
3
3
  /** Splits data emitter */
4
4
 
@@ -28,8 +28,15 @@ export interface ISegmentsEventEmitter extends IEventEmitter {
28
28
 
29
29
  /** Readiness emitter */
30
30
 
31
+ export type SDK_READY_TIMED_OUT = 'init::timeout'
32
+ export type SDK_READY = 'init::ready'
33
+ export type SDK_READY_FROM_CACHE = 'init::cache-ready'
34
+ export type SDK_UPDATE = 'state::update'
35
+ export type SDK_DESTROY = 'state::destroy'
36
+ export type IReadinessEvent = SDK_READY_TIMED_OUT | SDK_READY | SDK_READY_FROM_CACHE | SDK_UPDATE | SDK_DESTROY
37
+
31
38
  export interface IReadinessEventEmitter extends IEventEmitter {
32
- emit(event: Event, ...args: any[]): boolean
39
+ emit(event: IReadinessEvent, ...args: any[]): boolean
33
40
  }
34
41
 
35
42
  /** Readiness manager */
@@ -6,18 +6,18 @@ import { validateTrafficTypeExistance } from '../utils/inputValidation/trafficTy
6
6
  import { SDK_NOT_READY } from '../utils/labels';
7
7
  import { CONTROL, TREATMENT, TREATMENTS, TREATMENT_WITH_CONFIG, TREATMENTS_WITH_CONFIG, TRACK } from '../utils/constants';
8
8
  import { IEvaluationResult } from '../evaluator/types';
9
- import { SplitKey, Attributes,ImpressionDTO, Treatment, TreatmentWithConfig, Properties, EventData, IClientSS, IAsyncClientSS } from '../types';
9
+ import { SplitIO, ImpressionDTO } from '../types';
10
10
  import { IMPRESSION, IMPRESSION_QUEUEING } from '../logger/constants';
11
11
  import { ISdkFactoryContext } from '../sdkFactory/types';
12
12
 
13
13
  /**
14
14
  * Creator of base client with getTreatments and track methods.
15
15
  */
16
- export function clientFactory(params: ISdkFactoryContext): IClientSS | IAsyncClientSS {
16
+ export function clientFactory(params: ISdkFactoryContext): SplitIO.IClient | SplitIO.IAsyncClient {
17
17
  const { sdkReadinessManager: { readinessManager }, storage, settings, impressionsTracker, eventTracker, telemetryTracker } = params;
18
18
  const { log, mode } = settings;
19
19
 
20
- function getTreatment(key: SplitKey, splitName: string, attributes: Attributes | undefined, withConfig = false) {
20
+ function getTreatment(key: SplitIO.SplitKey, splitName: string, attributes: SplitIO.Attributes | undefined, withConfig = false) {
21
21
  const stopTelemetryTracker = telemetryTracker.trackEval(withConfig ? TREATMENT_WITH_CONFIG : TREATMENT);
22
22
 
23
23
  const wrapUp = (evaluationResult: IEvaluationResult) => {
@@ -34,16 +34,16 @@ export function clientFactory(params: ISdkFactoryContext): IClientSS | IAsyncCli
34
34
  return thenable(evaluation) ? evaluation.then((res) => wrapUp(res)) : wrapUp(evaluation);
35
35
  }
36
36
 
37
- function getTreatmentWithConfig(key: SplitKey, splitName: string, attributes: Attributes | undefined) {
37
+ function getTreatmentWithConfig(key: SplitIO.SplitKey, splitName: string, attributes: SplitIO.Attributes | undefined) {
38
38
  return getTreatment(key, splitName, attributes, true);
39
39
  }
40
40
 
41
- function getTreatments(key: SplitKey, splitNames: string[], attributes: Attributes | undefined, withConfig = false) {
41
+ function getTreatments(key: SplitIO.SplitKey, splitNames: string[], attributes: SplitIO.Attributes | undefined, withConfig = false) {
42
42
  const stopTelemetryTracker = telemetryTracker.trackEval(withConfig ? TREATMENTS_WITH_CONFIG : TREATMENTS);
43
43
 
44
44
  const wrapUp = (evaluationResults: Record<string, IEvaluationResult>) => {
45
45
  const queue: ImpressionDTO[] = [];
46
- const treatments: Record<string, Treatment | TreatmentWithConfig> = {};
46
+ const treatments: Record<string, SplitIO.Treatment | SplitIO.TreatmentWithConfig> = {};
47
47
  Object.keys(evaluationResults).forEach(splitName => {
48
48
  treatments[splitName] = processEvaluation(evaluationResults[splitName], splitName, key, attributes, withConfig, `getTreatments${withConfig ? 'withConfig' : ''}`, queue);
49
49
  });
@@ -58,7 +58,7 @@ export function clientFactory(params: ISdkFactoryContext): IClientSS | IAsyncCli
58
58
  return thenable(evaluations) ? evaluations.then((res) => wrapUp(res)) : wrapUp(evaluations);
59
59
  }
60
60
 
61
- function getTreatmentsWithConfig(key: SplitKey, splitNames: string[], attributes: Attributes | undefined) {
61
+ function getTreatmentsWithConfig(key: SplitIO.SplitKey, splitNames: string[], attributes: SplitIO.Attributes | undefined) {
62
62
  return getTreatments(key, splitNames, attributes, true);
63
63
  }
64
64
 
@@ -66,12 +66,12 @@ export function clientFactory(params: ISdkFactoryContext): IClientSS | IAsyncCli
66
66
  function processEvaluation(
67
67
  evaluation: IEvaluationResult,
68
68
  splitName: string,
69
- key: SplitKey,
70
- attributes: Attributes | undefined,
69
+ key: SplitIO.SplitKey,
70
+ attributes: SplitIO.Attributes | undefined,
71
71
  withConfig: boolean,
72
72
  invokingMethodName: string,
73
73
  queue: ImpressionDTO[]
74
- ): Treatment | TreatmentWithConfig {
74
+ ): SplitIO.Treatment | SplitIO.TreatmentWithConfig {
75
75
  const isSdkReady = readinessManager.isReady() || readinessManager.isReadyFromCache();
76
76
  const matchingKey = getMatching(key);
77
77
  const bucketingKey = getBucketing(key);
@@ -107,12 +107,12 @@ export function clientFactory(params: ISdkFactoryContext): IClientSS | IAsyncCli
107
107
  return treatment;
108
108
  }
109
109
 
110
- function track(key: SplitKey, trafficTypeName: string, eventTypeId: string, value?: number, properties?: Properties, size = 1024) {
110
+ function track(key: SplitIO.SplitKey, trafficTypeName: string, eventTypeId: string, value?: number, properties?: SplitIO.Properties, size = 1024) {
111
111
  const stopTelemetryTracker = telemetryTracker.trackEval(TRACK);
112
112
 
113
113
  const matchingKey = getMatching(key);
114
114
  const timestamp = Date.now();
115
- const eventData: EventData = {
115
+ const eventData: SplitIO.EventData = {
116
116
  eventTypeId,
117
117
  trafficTypeName,
118
118
  value,
@@ -144,5 +144,5 @@ export function clientFactory(params: ISdkFactoryContext): IClientSS | IAsyncCli
144
144
  getTreatmentsWithConfig,
145
145
  track,
146
146
  isClientSide: false
147
- } as any;
147
+ } as SplitIO.IClient | SplitIO.IAsyncClient;
148
148
  }
@@ -1,13 +1,13 @@
1
1
  import { AttributesCacheInMemory } from '../storages/inMemory/AttributesCacheInMemory';
2
2
  import { validateAttributesDeep } from '../utils/inputValidation/attributes';
3
- import { Attributes, IAsyncClientSS, IClientSS, Properties, SplitKey } from '../types';
4
- import { ILogger } from '../types';
3
+ import { SplitIO } from '../types';
4
+ import { ILogger } from '../logger/types';
5
5
  import { objectAssign } from '../utils/lang/objectAssign';
6
6
 
7
7
  /**
8
8
  * Add in memory attributes storage methods and combine them with any attribute received from the getTreatment/s call
9
9
  */
10
- export function clientAttributesDecoration(log: ILogger, client: IClientSS | IAsyncClientSS) {
10
+ export function clientAttributesDecoration<TClient extends SplitIO.IClient | SplitIO.IAsyncClient>(log: ILogger, client: TClient) {
11
11
 
12
12
  const attributeStorage = new AttributesCacheInMemory();
13
13
 
@@ -18,27 +18,27 @@ export function clientAttributesDecoration(log: ILogger, client: IClientSS | IAs
18
18
  const clientGetTreatmentsWithConfig = client.getTreatmentsWithConfig;
19
19
  const clientTrack = client.track;
20
20
 
21
- function getTreatment(maybeKey: SplitKey, maybeSplit: string, maybeAttributes?: Attributes) {
21
+ function getTreatment(maybeKey: SplitIO.SplitKey, maybeSplit: string, maybeAttributes?: SplitIO.Attributes) {
22
22
  return clientGetTreatment(maybeKey, maybeSplit, combineAttributes(maybeAttributes));
23
23
  }
24
24
 
25
- function getTreatmentWithConfig(maybeKey: SplitKey, maybeSplit: string, maybeAttributes?: Attributes) {
25
+ function getTreatmentWithConfig(maybeKey: SplitIO.SplitKey, maybeSplit: string, maybeAttributes?: SplitIO.Attributes) {
26
26
  return clientGetTreatmentWithConfig(maybeKey, maybeSplit, combineAttributes(maybeAttributes));
27
27
  }
28
28
 
29
- function getTreatments(maybeKey: SplitKey, maybeSplits: string[], maybeAttributes?: Attributes) {
29
+ function getTreatments(maybeKey: SplitIO.SplitKey, maybeSplits: string[], maybeAttributes?: SplitIO.Attributes) {
30
30
  return clientGetTreatments(maybeKey, maybeSplits, combineAttributes(maybeAttributes));
31
31
  }
32
32
 
33
- function getTreatmentsWithConfig(maybeKey: SplitKey, maybeSplits: string[], maybeAttributes?: Attributes) {
33
+ function getTreatmentsWithConfig(maybeKey: SplitIO.SplitKey, maybeSplits: string[], maybeAttributes?: SplitIO.Attributes) {
34
34
  return clientGetTreatmentsWithConfig(maybeKey, maybeSplits, combineAttributes(maybeAttributes));
35
35
  }
36
36
 
37
- function track(maybeKey: SplitKey, maybeTT: string, maybeEvent: string, maybeEventValue?: number, maybeProperties?: Properties) {
37
+ function track(maybeKey: SplitIO.SplitKey, maybeTT: string, maybeEvent: string, maybeEventValue?: number, maybeProperties?: SplitIO.Properties) {
38
38
  return clientTrack(maybeKey, maybeTT, maybeEvent, maybeEventValue, maybeProperties);
39
39
  }
40
40
 
41
- function combineAttributes(maybeAttributes: Attributes | undefined): Attributes | undefined{
41
+ function combineAttributes(maybeAttributes: SplitIO.Attributes | undefined): SplitIO.Attributes | undefined{
42
42
  const storedAttributes = attributeStorage.getAll();
43
43
  if (Object.keys(storedAttributes).length > 0) {
44
44
  return objectAssign({}, storedAttributes, maybeAttributes);
@@ -1,5 +1,6 @@
1
1
  import { objectAssign } from '../utils/lang/objectAssign';
2
- import { IClientSS, IClientWithKeyLegacy, ILogger, SplitKey } from '../types';
2
+ import { ILogger } from '../logger/types';
3
+ import { SplitIO } from '../types';
3
4
  import { clientAttributesDecoration } from './clientAttributesDecoration';
4
5
 
5
6
 
@@ -10,7 +11,7 @@ import { clientAttributesDecoration } from './clientAttributesDecoration';
10
11
  * @param key validated split key
11
12
  * @param trafficType validated traffic type
12
13
  */
13
- export function clientCSDecorator(log: ILogger, client: IClientSS, key: SplitKey, trafficType?: string): IClientWithKeyLegacy {
14
+ export function clientCSDecorator(log: ILogger, client: SplitIO.IClient, key: SplitIO.SplitKey, trafficType?: string): SplitIO.ICsClient {
14
15
 
15
16
  let clientCS = clientAttributesDecoration(log, client);
16
17
 
@@ -25,5 +26,5 @@ export function clientCSDecorator(log: ILogger, client: IClientSS, key: SplitKey
25
26
  track: trafficType ? clientCS.track.bind(clientCS, key, trafficType) : clientCS.track.bind(clientCS, key),
26
27
 
27
28
  isClientSide: true
28
- }) as any;
29
+ }) as SplitIO.ICsClient;
29
30
  }
@@ -15,14 +15,14 @@ import { startsWith } from '../utils/lang';
15
15
  import { CONTROL, CONTROL_WITH_CONFIG } from '../utils/constants';
16
16
  import { IReadinessManager } from '../readiness/types';
17
17
  import { MaybeThenable } from '../dtos/types';
18
- import { ISettings, SplitKey, Treatments, TreatmentsWithConfig, Properties, Attributes, IClientSS, IAsyncClientSS } from '../types';
18
+ import { ISettings, SplitIO } from '../types';
19
19
  import { isStorageSync } from '../trackers/impressionObserver/utils';
20
20
 
21
21
  /**
22
22
  * Decorator that validates the input before actually executing the client methods.
23
23
  * We should "guard" the client here, while not polluting the "real" implementation of those methods.
24
24
  */
25
- export function clientInputValidationDecorator(settings: ISettings, client: IClientSS | IAsyncClientSS, readinessManager: IReadinessManager): IClientSS | IAsyncClientSS {
25
+ export function clientInputValidationDecorator<TClient extends SplitIO.IClient | SplitIO.IAsyncClient>(settings: ISettings, client: TClient, readinessManager: IReadinessManager): TClient {
26
26
 
27
27
  const log = settings.log;
28
28
  const isSync = isStorageSync(settings);
@@ -30,7 +30,7 @@ export function clientInputValidationDecorator(settings: ISettings, client: ICli
30
30
  /**
31
31
  * Avoid repeating this validations code
32
32
  */
33
- function validateEvaluationParams(maybeKey: SplitKey, maybeSplitOrSplits: string | string[], maybeAttributes: Attributes | undefined, methodName: string) {
33
+ function validateEvaluationParams(maybeKey: SplitIO.SplitKey, maybeSplitOrSplits: string | string[], maybeAttributes: SplitIO.Attributes | undefined, methodName: string) {
34
34
  const multi = startsWith(methodName, 'getTreatments');
35
35
  const key = validateKey(log, maybeKey, methodName);
36
36
  const splitOrSplits = multi ? validateSplits(log, maybeSplitOrSplits, methodName) : validateSplit(log, maybeSplitOrSplits, methodName);
@@ -53,53 +53,53 @@ export function clientInputValidationDecorator(settings: ISettings, client: ICli
53
53
  return isSync ? value : Promise.resolve(value);
54
54
  }
55
55
 
56
- function getTreatment(maybeKey: SplitKey, maybeSplit: string, maybeAttributes?: Attributes) {
56
+ function getTreatment(maybeKey: SplitIO.SplitKey, maybeSplit: string, maybeAttributes?: SplitIO.Attributes) {
57
57
  const params = validateEvaluationParams(maybeKey, maybeSplit, maybeAttributes, 'getTreatment');
58
58
 
59
59
  if (params.valid) {
60
- return client.getTreatment(params.key as SplitKey, params.splitOrSplits as string, params.attributes as Attributes | undefined);
60
+ return client.getTreatment(params.key as SplitIO.SplitKey, params.splitOrSplits as string, params.attributes as SplitIO.Attributes | undefined);
61
61
  } else {
62
62
  return wrapResult(CONTROL);
63
63
  }
64
64
  }
65
65
 
66
- function getTreatmentWithConfig(maybeKey: SplitKey, maybeSplit: string, maybeAttributes?: Attributes) {
66
+ function getTreatmentWithConfig(maybeKey: SplitIO.SplitKey, maybeSplit: string, maybeAttributes?: SplitIO.Attributes) {
67
67
  const params = validateEvaluationParams(maybeKey, maybeSplit, maybeAttributes, 'getTreatmentWithConfig');
68
68
 
69
69
  if (params.valid) {
70
- return client.getTreatmentWithConfig(params.key as SplitKey, params.splitOrSplits as string, params.attributes as Attributes | undefined);
70
+ return client.getTreatmentWithConfig(params.key as SplitIO.SplitKey, params.splitOrSplits as string, params.attributes as SplitIO.Attributes | undefined);
71
71
  } else {
72
72
  return wrapResult(objectAssign({}, CONTROL_WITH_CONFIG));
73
73
  }
74
74
  }
75
75
 
76
- function getTreatments(maybeKey: SplitKey, maybeSplits: string[], maybeAttributes?: Attributes) {
76
+ function getTreatments(maybeKey: SplitIO.SplitKey, maybeSplits: string[], maybeAttributes?: SplitIO.Attributes) {
77
77
  const params = validateEvaluationParams(maybeKey, maybeSplits, maybeAttributes, 'getTreatments');
78
78
 
79
79
  if (params.valid) {
80
- return client.getTreatments(params.key as SplitKey, params.splitOrSplits as string[], params.attributes as Attributes | undefined);
80
+ return client.getTreatments(params.key as SplitIO.SplitKey, params.splitOrSplits as string[], params.attributes as SplitIO.Attributes | undefined);
81
81
  } else {
82
- const res: Treatments = {};
82
+ const res: SplitIO.Treatments = {};
83
83
  if (params.splitOrSplits) (params.splitOrSplits as string[]).forEach((split: string) => res[split] = CONTROL);
84
84
 
85
85
  return wrapResult(res);
86
86
  }
87
87
  }
88
88
 
89
- function getTreatmentsWithConfig(maybeKey: SplitKey, maybeSplits: string[], maybeAttributes?: Attributes) {
89
+ function getTreatmentsWithConfig(maybeKey: SplitIO.SplitKey, maybeSplits: string[], maybeAttributes?: SplitIO.Attributes) {
90
90
  const params = validateEvaluationParams(maybeKey, maybeSplits, maybeAttributes, 'getTreatmentsWithConfig');
91
91
 
92
92
  if (params.valid) {
93
- return client.getTreatmentsWithConfig(params.key as SplitKey, params.splitOrSplits as string[], params.attributes as Attributes | undefined);
93
+ return client.getTreatmentsWithConfig(params.key as SplitIO.SplitKey, params.splitOrSplits as string[], params.attributes as SplitIO.Attributes | undefined);
94
94
  } else {
95
- const res: TreatmentsWithConfig = {};
95
+ const res: SplitIO.TreatmentsWithConfig = {};
96
96
  if (params.splitOrSplits) (params.splitOrSplits as string[]).forEach(split => res[split] = objectAssign({}, CONTROL_WITH_CONFIG));
97
97
 
98
98
  return wrapResult(res);
99
99
  }
100
100
  }
101
101
 
102
- function track(maybeKey: SplitKey, maybeTT: string, maybeEvent: string, maybeEventValue?: number, maybeProperties?: Properties) {
102
+ function track(maybeKey: SplitIO.SplitKey, maybeTT: string, maybeEvent: string, maybeEventValue?: number, maybeProperties?: SplitIO.Properties) {
103
103
  const key = validateKey(log, maybeKey, 'track');
104
104
  const tt = validateTrafficType(log, maybeTT, 'track');
105
105
  const event = validateEvent(log, maybeEvent, 'track');
@@ -120,5 +120,5 @@ export function clientInputValidationDecorator(settings: ISettings, client: ICli
120
120
  getTreatments,
121
121
  getTreatmentsWithConfig,
122
122
  track
123
- } as IClientSS | IAsyncClientSS;
123
+ } as TClient;
124
124
  }
@@ -1,5 +1,5 @@
1
1
  import { objectAssign } from '../utils/lang/objectAssign';
2
- import { IBasicClient, IStatusInterface } from '../types';
2
+ import { IStatusInterface, SplitIO } from '../types';
3
3
  import { releaseApiKey } from '../utils/inputValidation/apiKey';
4
4
  import { clientFactory } from './client';
5
5
  import { clientInputValidationDecorator } from './clientInputValidation';
@@ -8,7 +8,7 @@ import { ISdkFactoryContext } from '../sdkFactory/types';
8
8
  /**
9
9
  * Creates an Sdk client, i.e., a base client with status and destroy interface
10
10
  */
11
- export function sdkClientFactory(params: ISdkFactoryContext, isSharedClient?: boolean): IBasicClient {
11
+ export function sdkClientFactory(params: ISdkFactoryContext, isSharedClient?: boolean): SplitIO.IClient | SplitIO.IAsyncClient {
12
12
  const { sdkReadinessManager, syncManager, storage, signalListener, settings, telemetryTracker } = params;
13
13
 
14
14
  return objectAssign(
@@ -1,4 +1,4 @@
1
- import { IBasicClient } from '../types';
1
+ import { SplitIO } from '../types';
2
2
  import { sdkClientFactory } from './sdkClient';
3
3
  import { RETRIEVE_CLIENT_DEFAULT } from '../logger/constants';
4
4
  import { ISdkFactoryContext } from '../sdkFactory/types';
@@ -6,7 +6,7 @@ import { ISdkFactoryContext } from '../sdkFactory/types';
6
6
  /**
7
7
  * Factory of client method for server-side SDKs (ISDK and IAsyncSDK)
8
8
  */
9
- export function sdkClientMethodFactory(params: ISdkFactoryContext): () => IBasicClient {
9
+ export function sdkClientMethodFactory(params: ISdkFactoryContext): () => SplitIO.IClient | SplitIO.IAsyncClient {
10
10
  const log = params.settings.log;
11
11
  const clientInstance = sdkClientFactory(params);
12
12
 
@@ -1,5 +1,5 @@
1
1
  import { clientCSDecorator } from './clientCS';
2
- import { IClientSS, IClientWithKey, SplitKey } from '../types';
2
+ import { SplitIO } from '../types';
3
3
  import { validateKey } from '../utils/inputValidation/key';
4
4
  import { getMatching, keyParser } from '../utils/key';
5
5
  import { sdkClientFactory } from './sdkClient';
@@ -9,7 +9,7 @@ import { RETRIEVE_CLIENT_DEFAULT, NEW_SHARED_CLIENT, RETRIEVE_CLIENT_EXISTING }
9
9
  import { SDK_SEGMENTS_ARRIVED } from '../readiness/constants';
10
10
  import { ISdkFactoryContext } from '../sdkFactory/types';
11
11
 
12
- function buildInstanceId(key: SplitKey) {
12
+ function buildInstanceId(key: SplitIO.SplitKey) {
13
13
  // @ts-ignore
14
14
  return `${key.matchingKey ? key.matchingKey : key}-${key.bucketingKey ? key.bucketingKey : key}-`;
15
15
  }
@@ -20,23 +20,23 @@ const method = 'Client instantiation';
20
20
  * Factory of client method for the client-side API variant where TT is ignored and thus
21
21
  * clients don't have a binded TT for the track method.
22
22
  */
23
- export function sdkClientMethodCSFactory(params: ISdkFactoryContext): (key?: SplitKey) => IClientWithKey {
23
+ export function sdkClientMethodCSFactory(params: ISdkFactoryContext): (key?: SplitIO.SplitKey) => SplitIO.ICsClient {
24
24
  const { storage, syncManager, sdkReadinessManager, settings: { core: { key }, startup: { readyTimeout }, log } } = params;
25
25
 
26
26
  const mainClientInstance = clientCSDecorator(
27
27
  log,
28
- sdkClientFactory(params) as IClientSS,
29
- key!
28
+ sdkClientFactory(params) as SplitIO.IClient,
29
+ key
30
30
  );
31
31
 
32
- const parsedDefaultKey = keyParser(key!);
32
+ const parsedDefaultKey = keyParser(key);
33
33
  const defaultInstanceId = buildInstanceId(parsedDefaultKey);
34
34
 
35
35
  // Cache instances created per factory.
36
- const clientInstances: Record<string, IClientWithKey> = {};
36
+ const clientInstances: Record<string, SplitIO.ICsClient> = {};
37
37
  clientInstances[defaultInstanceId] = mainClientInstance;
38
38
 
39
- return function client(key?: SplitKey) {
39
+ return function client(key?: SplitIO.SplitKey) {
40
40
  if (key === undefined) {
41
41
  log.debug(RETRIEVE_CLIENT_DEFAULT);
42
42
  return mainClientInstance;
@@ -76,7 +76,7 @@ export function sdkClientMethodCSFactory(params: ISdkFactoryContext): (key?: Spl
76
76
  storage: sharedStorage || storage,
77
77
  syncManager: sharedSyncManager,
78
78
  signalListener: undefined, // only the main client "destroy" method stops the signal listener
79
- }), true) as IClientSS,
79
+ }), true) as SplitIO.IClient,
80
80
  validKey
81
81
  );
82
82
 
@@ -1,5 +1,5 @@
1
1
  import { clientCSDecorator } from './clientCS';
2
- import { IClientSS, IClientWithKeyLegacy, SplitKey } from '../types';
2
+ import { SplitIO } from '../types';
3
3
  import { validateKey } from '../utils/inputValidation/key';
4
4
  import { validateTrafficType } from '../utils/inputValidation/trafficType';
5
5
  import { getMatching, keyParser } from '../utils/key';
@@ -10,7 +10,7 @@ import { RETRIEVE_CLIENT_DEFAULT, NEW_SHARED_CLIENT, RETRIEVE_CLIENT_EXISTING }
10
10
  import { SDK_SEGMENTS_ARRIVED } from '../readiness/constants';
11
11
  import { ISdkFactoryContext } from '../sdkFactory/types';
12
12
 
13
- function buildInstanceId(key: SplitKey, trafficType?: string) {
13
+ function buildInstanceId(key: SplitIO.SplitKey, trafficType?: string) {
14
14
  // @ts-ignore
15
15
  return `${key.matchingKey ? key.matchingKey : key}-${key.bucketingKey ? key.bucketingKey : key}-${trafficType !== undefined ? trafficType : ''}`;
16
16
  }
@@ -22,24 +22,24 @@ const method = 'Client instantiation';
22
22
  * where clients can have a binded TT for the track method, which is provided via the settings
23
23
  * (default client) or the client method (shared clients).
24
24
  */
25
- export function sdkClientMethodCSFactory(params: ISdkFactoryContext): (key?: SplitKey, trafficType?: string) => IClientWithKeyLegacy {
25
+ export function sdkClientMethodCSFactory(params: ISdkFactoryContext): (key?: SplitIO.SplitKey, trafficType?: string) => SplitIO.ICsClient {
26
26
  const { storage, syncManager, sdkReadinessManager, settings: { core: { key, trafficType }, startup: { readyTimeout }, log } } = params;
27
27
 
28
28
  const mainClientInstance = clientCSDecorator(
29
29
  log,
30
- sdkClientFactory(params) as IClientSS,
31
- key!,
30
+ sdkClientFactory(params) as SplitIO.IClient,
31
+ key,
32
32
  trafficType
33
33
  );
34
34
 
35
- const parsedDefaultKey = keyParser(key!);
35
+ const parsedDefaultKey = keyParser(key);
36
36
  const defaultInstanceId = buildInstanceId(parsedDefaultKey, trafficType);
37
37
 
38
38
  // Cache instances created per factory.
39
- const clientInstances: Record<string, IClientWithKeyLegacy> = {};
39
+ const clientInstances: Record<string, SplitIO.ICsClient> = {};
40
40
  clientInstances[defaultInstanceId] = mainClientInstance;
41
41
 
42
- return function client(key?: SplitKey, trafficType?: string) {
42
+ return function client(key?: SplitIO.SplitKey, trafficType?: string) {
43
43
  if (key === undefined) {
44
44
  log.debug(RETRIEVE_CLIENT_DEFAULT);
45
45
  return mainClientInstance;
@@ -86,7 +86,7 @@ export function sdkClientMethodCSFactory(params: ISdkFactoryContext): (key?: Spl
86
86
  storage: sharedStorage || storage,
87
87
  syncManager: sharedSyncManager,
88
88
  signalListener: undefined, // only the main client "destroy" method stops the signal listener
89
- }), true) as IClientSS,
89
+ }), true) as SplitIO.IClient,
90
90
  validKey,
91
91
  validTrafficType
92
92
  );
@@ -4,7 +4,7 @@ import { impressionsTrackerFactory } from '../trackers/impressionsTracker';
4
4
  import { eventTrackerFactory } from '../trackers/eventTracker';
5
5
  import { telemetryTrackerFactory } from '../trackers/telemetryTracker';
6
6
  import { IStorageFactoryParams } from '../storages/types';
7
- import { IBasicSDK } from '../types';
7
+ import { SplitIO } from '../types';
8
8
  import { getMatching } from '../utils/key';
9
9
  import { shouldBeOptimized } from '../trackers/impressionObserver/utils';
10
10
  import { validateAndTrackApiKey } from '../utils/inputValidation/apiKey';
@@ -17,7 +17,7 @@ import { objectAssign } from '../utils/lang/objectAssign';
17
17
  /**
18
18
  * Modular SDK factory
19
19
  */
20
- export function sdkFactory(params: ISdkFactoryParams): IBasicSDK<any, any> {
20
+ export function sdkFactory(params: ISdkFactoryParams): SplitIO.ICsSDK | SplitIO.ISDK | SplitIO.IAsyncSDK {
21
21
 
22
22
  const { settings, platform, storageFactory, splitApiFactory, extraProps,
23
23
  syncManagerFactory, SignalListener, impressionsObserverFactory,
@@ -41,7 +41,6 @@ export function sdkFactory(params: ISdkFactoryParams): IBasicSDK<any, any> {
41
41
 
42
42
  // ATM, only used by InLocalStorage
43
43
  matchingKey: getMatching(settings.core.key),
44
- // @ts-ignore
45
44
  splitFiltersValidation: settings.sync.__splitFiltersValidation,
46
45
 
47
46
  // ATM, only used by PluggableStorage
@@ -61,13 +60,13 @@ export function sdkFactory(params: ISdkFactoryParams): IBasicSDK<any, any> {
61
60
  const storage = storageFactory(storageFactoryParams);
62
61
  // @TODO add support for dataloader: `if (params.dataLoader) params.dataLoader(storage);`
63
62
 
64
- const integrationsManager = integrationsManagerFactory && integrationsManagerFactory({ settings, storage });
63
+ const telemetryTracker = telemetryTrackerFactory(storage.telemetry, platform.now);
64
+ const integrationsManager = integrationsManagerFactory && integrationsManagerFactory({ settings, storage, telemetryTracker });
65
65
 
66
66
  // trackers
67
67
  const observer = impressionsObserverFactory && impressionsObserverFactory();
68
68
  const impressionsTracker = impressionsTrackerFactory(settings, storage.impressions, integrationsManager, observer, storage.impressionCounts, storage.telemetry);
69
69
  const eventTracker = eventTrackerFactory(settings, storage.events, integrationsManager, storage.telemetry);
70
- const telemetryTracker = telemetryTrackerFactory(storage.telemetry, platform.now);
71
70
 
72
71
  // splitApi is used by SyncManager and Browser signal listener
73
72
  const splitApi = splitApiFactory && splitApiFactory(settings, platform, telemetryTracker);
@@ -1,13 +1,13 @@
1
1
  import { IIntegrationManager, IIntegrationFactoryParams } from '../integrations/types';
2
2
  import { ISignalListener } from '../listeners/types';
3
- import { IAsyncClientSS, IAsyncManager, IClientSS, IClientWithKey, ILogger, IManager, SplitKey } from '../types';
3
+ import { ILogger } from '../logger/types';
4
4
  import { IReadinessManager, ISdkReadinessManager } from '../readiness/types';
5
5
  import { IFetch, ISplitApi, IEventSourceConstructor } from '../services/types';
6
6
  import { IStorageAsync, IStorageSync, ISplitsCacheSync, ISplitsCacheAsync, IStorageFactoryParams } from '../storages/types';
7
7
  import { ISyncManager } from '../sync/types';
8
8
  import { IImpressionObserver } from '../trackers/impressionObserver/types';
9
9
  import { IImpressionsTracker, IEventTracker, ITelemetryTracker } from '../trackers/types';
10
- import { ISettings, IEventEmitter } from '../types';
10
+ import { SplitIO, ISettings, IEventEmitter } from '../types';
11
11
 
12
12
  /**
13
13
  * Environment related dependencies.
@@ -90,11 +90,11 @@ export interface ISdkFactoryParams {
90
90
  log: ILogger,
91
91
  splits: ISplitsCacheSync | ISplitsCacheAsync,
92
92
  sdkReadinessManager: ISdkReadinessManager
93
- ) => IManager | IAsyncManager,
93
+ ) => SplitIO.IManager | SplitIO.IAsyncManager,
94
94
 
95
95
  // Sdk client method factory (ISDK::client method).
96
96
  // It Allows to distinguish SDK clients with the client-side API (`ICsSDK`) or server-side API (`ISDK` or `IAsyncSDK`).
97
- sdkClientMethodFactory: (params: ISdkFactoryContext) => ({ (): IClientWithKey; (key: SplitKey, trafficType?: string | undefined): IClientWithKey; } | (() => IClientSS) | (() => IAsyncClientSS))
97
+ sdkClientMethodFactory: (params: ISdkFactoryContext) => ({ (): SplitIO.ICsClient; (key: SplitIO.SplitKey, trafficType?: string | undefined): SplitIO.ICsClient; } | (() => SplitIO.IClient) | (() => SplitIO.IAsyncClient))
98
98
 
99
99
  // Optional signal listener constructor. Used to handle special app states, like shutdown, app paused or resumed.
100
100
  // Pass only if `syncManager` (used by Node listener) and `splitApi` (used by Browser listener) are passed.
@@ -5,8 +5,8 @@ import { validateSplit, validateSplitExistance, validateIfNotDestroyed, validate
5
5
  import { ISplitsCacheAsync, ISplitsCacheSync } from '../storages/types';
6
6
  import { ISdkReadinessManager } from '../readiness/types';
7
7
  import { ISplit } from '../dtos/types';
8
- import { IAsyncManager, IManager, SplitView } from '../types';
9
- import { ILogger } from '../types';
8
+ import { SplitIO } from '../types';
9
+ import { ILogger } from '../logger/types';
10
10
 
11
11
  function collectTreatments(splitObject: ISplit) {
12
12
  const conditions = splitObject.conditions;
@@ -18,16 +18,7 @@ function collectTreatments(splitObject: ISplit) {
18
18
  return allTreatmentsCondition ? allTreatmentsCondition.partitions.map(v => v.treatment) : [];
19
19
  }
20
20
 
21
- function objectToView(json: string | null): SplitView | null {
22
- let splitObject: ISplit | null;
23
-
24
- try {
25
- // @ts-expect-error
26
- splitObject = JSON.parse(json);
27
- } catch (e) {
28
- return null;
29
- }
30
-
21
+ function objectToView(splitObject: ISplit | null): SplitIO.SplitView | null {
31
22
  if (!splitObject) return null;
32
23
 
33
24
  return {
@@ -40,10 +31,10 @@ function objectToView(json: string | null): SplitView | null {
40
31
  };
41
32
  }
42
33
 
43
- function objectsToViews(jsons: string[]) {
44
- let views: SplitView[] = [];
34
+ function objectsToViews(splitObjects: ISplit[]) {
35
+ let views: SplitIO.SplitView[] = [];
45
36
 
46
- jsons.forEach(split => {
37
+ splitObjects.forEach(split => {
47
38
  const view = objectToView(split);
48
39
  if (view) views.push(view);
49
40
  });
@@ -55,7 +46,7 @@ export function sdkManagerFactory<TSplitCache extends ISplitsCacheSync | ISplits
55
46
  log: ILogger,
56
47
  splits: TSplitCache,
57
48
  { readinessManager, sdkStatus }: ISdkReadinessManager
58
- ): TSplitCache extends ISplitsCacheAsync ? IAsyncManager : IManager {
49
+ ): TSplitCache extends ISplitsCacheAsync ? SplitIO.IAsyncManager : SplitIO.IManager {
59
50
  const SPLIT_FN_LABEL = 'split';
60
51
 
61
52
  return objectAssign(
@@ -25,7 +25,6 @@ export function splitApiFactory(
25
25
  ): ISplitApi {
26
26
 
27
27
  const urls = settings.urls;
28
- // @ts-ignore
29
28
  const filterQueryString = settings.sync.__splitFiltersValidation && settings.sync.__splitFiltersValidation.queryString;
30
29
  const SplitSDKImpressionsMode = settings.sync.impressionsMode;
31
30
  const splitHttpClient = splitHttpClientFactory(settings, platform.getFetch, platform.getOptions);
@@ -1,5 +1,6 @@
1
1
  import { ISplitsCacheAsync } from './types';
2
2
  import { ISplit } from '../dtos/types';
3
+ import { objectAssign } from '../utils/lang/objectAssign';
3
4
 
4
5
  /**
5
6
  * This class provides a skeletal implementation of the ISplitsCacheAsync interface
@@ -7,14 +8,15 @@ import { ISplit } from '../dtos/types';
7
8
  */
8
9
  export abstract class AbstractSplitsCacheAsync implements ISplitsCacheAsync {
9
10
 
10
- abstract addSplit(name: string, split: string): Promise<boolean>
11
- abstract addSplits(entries: [string, string][]): Promise<boolean[] | void>
11
+ // Implement addSplits and removeSplits here and others like AbstractSplitsCacheSync, to reuse code between redis and pluggable implementations
12
+ abstract addSplit(name: string, split: ISplit): Promise<boolean>
13
+ abstract addSplits(entries: [string, ISplit][]): Promise<boolean[] | void>
12
14
  abstract removeSplits(names: string[]): Promise<boolean[] | void>
13
- abstract getSplit(name: string): Promise<string | null>
14
- abstract getSplits(names: string[]): Promise<Record<string, string | null>>
15
+ abstract getSplit(name: string): Promise<ISplit | null>
16
+ abstract getSplits(names: string[]): Promise<Record<string, ISplit | null>>
15
17
  abstract setChangeNumber(changeNumber: number): Promise<boolean | void>
16
18
  abstract getChangeNumber(): Promise<number>
17
- abstract getAll(): Promise<string[]>
19
+ abstract getAll(): Promise<ISplit[]>
18
20
  abstract getSplitNames(): Promise<string[]>
19
21
  abstract trafficTypeExists(trafficType: string): Promise<boolean>
20
22
  abstract clear(): Promise<boolean | void>
@@ -47,16 +49,13 @@ export abstract class AbstractSplitsCacheAsync implements ISplitsCacheAsync {
47
49
  killLocally(name: string, defaultTreatment: string, changeNumber: number): Promise<boolean> {
48
50
  return this.getSplit(name).then(split => {
49
51
 
50
- if (split) {
51
- const parsedSplit: ISplit = JSON.parse(split);
52
- if (!parsedSplit.changeNumber || parsedSplit.changeNumber < changeNumber) {
53
- parsedSplit.killed = true;
54
- parsedSplit.defaultTreatment = defaultTreatment;
55
- parsedSplit.changeNumber = changeNumber;
56
- const newSplit = JSON.stringify(parsedSplit);
52
+ if (split && (!split.changeNumber || split.changeNumber < changeNumber)) {
53
+ const newSplit = objectAssign({}, split);
54
+ newSplit.killed = true;
55
+ newSplit.defaultTreatment = defaultTreatment;
56
+ newSplit.changeNumber = changeNumber;
57
57
 
58
- return this.addSplit(name, newSplit);
59
- }
58
+ return this.addSplit(name, newSplit);
60
59
  }
61
60
  return false;
62
61
  }).catch(() => false);