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

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 (315) hide show
  1. package/cjs/listeners/browser.js +1 -2
  2. package/cjs/logger/constants.js +1 -2
  3. package/cjs/sdkFactory/index.js +6 -14
  4. package/cjs/services/splitApi.js +1 -20
  5. package/cjs/storages/inLocalStorage/index.js +0 -4
  6. package/cjs/storages/inMemory/InMemoryStorage.js +1 -5
  7. package/cjs/storages/inMemory/InMemoryStorageCS.js +1 -5
  8. package/cjs/sync/submitters/submitterManager.js +0 -3
  9. package/cjs/sync/submitters/telemetrySubmitter.js +0 -1
  10. package/cjs/trackers/impressionsTracker.js +28 -7
  11. package/cjs/utils/constants/index.js +2 -4
  12. package/cjs/utils/key/index.js +1 -1
  13. package/cjs/utils/settingsValidation/impressionsMode.js +2 -2
  14. package/cjs/utils/settingsValidation/index.js +1 -3
  15. package/esm/listeners/browser.js +2 -3
  16. package/esm/logger/constants.js +0 -1
  17. package/esm/sdkFactory/index.js +6 -14
  18. package/esm/services/splitApi.js +1 -20
  19. package/esm/storages/inLocalStorage/index.js +1 -5
  20. package/esm/storages/inMemory/InMemoryStorage.js +2 -6
  21. package/esm/storages/inMemory/InMemoryStorageCS.js +2 -6
  22. package/esm/sync/submitters/submitterManager.js +0 -3
  23. package/esm/sync/submitters/telemetrySubmitter.js +1 -2
  24. package/esm/trackers/impressionsTracker.js +28 -7
  25. package/esm/utils/constants/index.js +0 -2
  26. package/esm/utils/key/index.js +1 -1
  27. package/esm/utils/settingsValidation/impressionsMode.js +3 -3
  28. package/esm/utils/settingsValidation/index.js +1 -3
  29. package/package.json +2 -2
  30. package/src/consent/sdkUserConsent.ts +4 -3
  31. package/src/dtos/types.ts +0 -8
  32. package/src/evaluator/Engine.ts +3 -3
  33. package/src/evaluator/combiners/and.ts +1 -1
  34. package/src/evaluator/combiners/ifelseif.ts +3 -3
  35. package/src/evaluator/condition/engineUtils.ts +1 -1
  36. package/src/evaluator/condition/index.ts +6 -6
  37. package/src/evaluator/index.ts +10 -10
  38. package/src/evaluator/matchers/all.ts +1 -1
  39. package/src/evaluator/matchers/between.ts +1 -1
  40. package/src/evaluator/matchers/boolean.ts +1 -1
  41. package/src/evaluator/matchers/cont_all.ts +1 -1
  42. package/src/evaluator/matchers/cont_any.ts +1 -1
  43. package/src/evaluator/matchers/cont_str.ts +1 -1
  44. package/src/evaluator/matchers/dependency.ts +1 -1
  45. package/src/evaluator/matchers/eq.ts +1 -1
  46. package/src/evaluator/matchers/eq_set.ts +1 -1
  47. package/src/evaluator/matchers/ew.ts +1 -1
  48. package/src/evaluator/matchers/gte.ts +1 -1
  49. package/src/evaluator/matchers/index.ts +1 -1
  50. package/src/evaluator/matchers/lte.ts +1 -1
  51. package/src/evaluator/matchers/part_of.ts +1 -1
  52. package/src/evaluator/matchers/segment.ts +1 -1
  53. package/src/evaluator/matchers/string.ts +1 -1
  54. package/src/evaluator/matchers/sw.ts +1 -1
  55. package/src/evaluator/matchers/whitelist.ts +1 -1
  56. package/src/evaluator/parser/index.ts +3 -3
  57. package/src/evaluator/types.ts +6 -6
  58. package/src/evaluator/value/index.ts +4 -4
  59. package/src/evaluator/value/sanitize.ts +4 -4
  60. package/src/integrations/ga/GaToSplit.ts +6 -6
  61. package/src/integrations/ga/SplitToGa.ts +10 -10
  62. package/src/integrations/ga/types.ts +4 -4
  63. package/src/integrations/pluggable.ts +3 -3
  64. package/src/integrations/types.ts +2 -2
  65. package/src/listeners/browser.ts +2 -3
  66. package/src/logger/.DS_Store +0 -0
  67. package/src/logger/constants.ts +0 -1
  68. package/src/logger/index.ts +3 -3
  69. package/src/logger/sdkLogger.ts +1 -2
  70. package/src/logger/types.ts +0 -16
  71. package/src/readiness/sdkReadinessManager.ts +1 -1
  72. package/src/readiness/types.ts +2 -9
  73. package/src/sdkClient/client.ts +13 -13
  74. package/src/sdkClient/clientAttributesDecoration.ts +9 -9
  75. package/src/sdkClient/clientCS.ts +3 -4
  76. package/src/sdkClient/clientInputValidation.ts +15 -15
  77. package/src/sdkClient/sdkClient.ts +2 -2
  78. package/src/sdkClient/sdkClientMethod.ts +2 -2
  79. package/src/sdkClient/sdkClientMethodCS.ts +9 -9
  80. package/src/sdkClient/sdkClientMethodCSWithTT.ts +9 -9
  81. package/src/sdkFactory/index.ts +8 -18
  82. package/src/sdkFactory/types.ts +8 -11
  83. package/src/sdkManager/index.ts +5 -5
  84. package/src/services/splitApi.ts +1 -22
  85. package/src/services/types.ts +0 -6
  86. package/src/storages/dataLoader.ts +2 -2
  87. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +1 -1
  88. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +2 -2
  89. package/src/storages/inLocalStorage/index.ts +4 -6
  90. package/src/storages/inMemory/EventsCacheInMemory.ts +4 -4
  91. package/src/storages/inMemory/InMemoryStorage.ts +2 -5
  92. package/src/storages/inMemory/InMemoryStorageCS.ts +2 -6
  93. package/src/storages/inRedis/EventsCacheInRedis.ts +4 -4
  94. package/src/storages/inRedis/ImpressionsCacheInRedis.ts +1 -1
  95. package/src/storages/inRedis/RedisAdapter.ts +1 -1
  96. package/src/storages/inRedis/SegmentsCacheInRedis.ts +1 -1
  97. package/src/storages/inRedis/SplitsCacheInRedis.ts +1 -1
  98. package/src/storages/inRedis/TelemetryCacheInRedis.ts +1 -1
  99. package/src/storages/inRedis/index.ts +3 -2
  100. package/src/storages/pluggable/EventsCachePluggable.ts +4 -4
  101. package/src/storages/pluggable/ImpressionsCachePluggable.ts +1 -1
  102. package/src/storages/pluggable/SegmentsCachePluggable.ts +1 -1
  103. package/src/storages/pluggable/SplitsCachePluggable.ts +1 -1
  104. package/src/storages/pluggable/TelemetryCachePluggable.ts +1 -1
  105. package/src/storages/pluggable/index.ts +3 -3
  106. package/src/storages/pluggable/wrapperAdapter.ts +1 -1
  107. package/src/storages/types.ts +48 -40
  108. package/src/sync/offline/LocalhostFromObject.ts +4 -4
  109. package/src/sync/offline/splitsParser/splitsParserFromSettings.ts +8 -8
  110. package/src/sync/polling/updaters/mySegmentsUpdater.ts +1 -1
  111. package/src/sync/polling/updaters/segmentChangesUpdater.ts +1 -1
  112. package/src/sync/polling/updaters/splitChangesUpdater.ts +1 -1
  113. package/src/sync/streaming/SSEHandler/index.ts +1 -1
  114. package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
  115. package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +1 -1
  116. package/src/sync/submitters/submitter.ts +1 -1
  117. package/src/sync/submitters/submitterManager.ts +0 -2
  118. package/src/sync/submitters/telemetrySubmitter.ts +3 -4
  119. package/src/sync/submitters/types.ts +3 -22
  120. package/src/sync/syncTask.ts +1 -1
  121. package/src/trackers/eventTracker.ts +3 -3
  122. package/src/trackers/impressionsTracker.ts +38 -15
  123. package/src/trackers/types.ts +4 -30
  124. package/src/types.d.ts +1646 -0
  125. package/src/utils/constants/index.ts +1 -3
  126. package/src/utils/inputValidation/apiKey.ts +1 -1
  127. package/src/utils/inputValidation/attribute.ts +1 -1
  128. package/src/utils/inputValidation/attributes.ts +3 -3
  129. package/src/utils/inputValidation/event.ts +1 -1
  130. package/src/utils/inputValidation/eventProperties.ts +3 -3
  131. package/src/utils/inputValidation/eventValue.ts +1 -1
  132. package/src/utils/inputValidation/isOperational.ts +1 -1
  133. package/src/utils/inputValidation/key.ts +3 -3
  134. package/src/utils/inputValidation/preloadedData.ts +3 -3
  135. package/src/utils/inputValidation/split.ts +1 -1
  136. package/src/utils/inputValidation/splitExistance.ts +1 -1
  137. package/src/utils/inputValidation/splits.ts +1 -1
  138. package/src/utils/inputValidation/trafficType.ts +1 -1
  139. package/src/utils/inputValidation/trafficTypeExistance.ts +1 -1
  140. package/src/utils/key/index.ts +9 -9
  141. package/src/utils/settingsValidation/consent.ts +1 -2
  142. package/src/utils/settingsValidation/impressionsMode.ts +6 -6
  143. package/src/utils/settingsValidation/index.ts +1 -4
  144. package/src/utils/settingsValidation/integrations/common.ts +1 -1
  145. package/src/utils/settingsValidation/integrations/configurable.ts +1 -1
  146. package/src/utils/settingsValidation/integrations/pluggable.ts +1 -2
  147. package/src/utils/settingsValidation/localhost/builtin.ts +1 -2
  148. package/src/utils/settingsValidation/localhost/pluggable.ts +1 -2
  149. package/src/utils/settingsValidation/logger/builtinLogger.ts +1 -2
  150. package/src/utils/settingsValidation/logger/pluggableLogger.ts +1 -2
  151. package/src/utils/settingsValidation/splitFilters.ts +7 -9
  152. package/src/utils/settingsValidation/storage/storageCS.ts +1 -2
  153. package/types/consent/sdkUserConsent.d.ts +2 -9
  154. package/types/dtos/types.d.ts +0 -6
  155. package/types/evaluator/Engine.d.ts +3 -3
  156. package/types/evaluator/combiners/and.d.ts +1 -1
  157. package/types/evaluator/combiners/ifelseif.d.ts +1 -1
  158. package/types/evaluator/condition/engineUtils.d.ts +1 -1
  159. package/types/evaluator/condition/index.d.ts +1 -1
  160. package/types/evaluator/index.d.ts +4 -4
  161. package/types/evaluator/matchers/all.d.ts +1 -1
  162. package/types/evaluator/matchers/between.d.ts +1 -1
  163. package/types/evaluator/matchers/boolean.d.ts +1 -1
  164. package/types/evaluator/matchers/cont_all.d.ts +1 -1
  165. package/types/evaluator/matchers/cont_any.d.ts +1 -1
  166. package/types/evaluator/matchers/cont_str.d.ts +1 -1
  167. package/types/evaluator/matchers/dependency.d.ts +1 -1
  168. package/types/evaluator/matchers/eq.d.ts +1 -1
  169. package/types/evaluator/matchers/eq_set.d.ts +1 -1
  170. package/types/evaluator/matchers/ew.d.ts +1 -1
  171. package/types/evaluator/matchers/gte.d.ts +1 -1
  172. package/types/evaluator/matchers/index.d.ts +1 -1
  173. package/types/evaluator/matchers/lte.d.ts +1 -1
  174. package/types/evaluator/matchers/part_of.d.ts +1 -1
  175. package/types/evaluator/matchers/segment.d.ts +1 -1
  176. package/types/evaluator/matchers/string.d.ts +1 -1
  177. package/types/evaluator/matchers/sw.d.ts +1 -1
  178. package/types/evaluator/matchers/whitelist.d.ts +1 -1
  179. package/types/evaluator/parser/index.d.ts +1 -1
  180. package/types/evaluator/types.d.ts +6 -6
  181. package/types/evaluator/value/index.d.ts +3 -3
  182. package/types/evaluator/value/sanitize.d.ts +3 -3
  183. package/types/integrations/ga/GaToSplit.d.ts +4 -4
  184. package/types/integrations/ga/SplitToGa.d.ts +4 -4
  185. package/types/integrations/ga/types.d.ts +4 -4
  186. package/types/integrations/types.d.ts +2 -2
  187. package/types/logger/constants.d.ts +0 -1
  188. package/types/logger/index.d.ts +3 -5
  189. package/types/logger/sdkLogger.d.ts +1 -2
  190. package/types/logger/types.d.ts +0 -11
  191. package/types/readiness/sdkReadinessManager.d.ts +1 -1
  192. package/types/readiness/types.d.ts +2 -8
  193. package/types/sdkClient/client.d.ts +2 -2
  194. package/types/sdkClient/clientAttributesDecoration.d.ts +8 -8
  195. package/types/sdkClient/clientCS.d.ts +2 -3
  196. package/types/sdkClient/clientInputValidation.d.ts +2 -2
  197. package/types/sdkClient/sdkClient.d.ts +2 -2
  198. package/types/sdkClient/sdkClientMethod.d.ts +2 -2
  199. package/types/sdkClient/sdkClientMethodCS.d.ts +2 -2
  200. package/types/sdkClient/sdkClientMethodCSWithTT.d.ts +2 -2
  201. package/types/sdkFactory/index.d.ts +2 -2
  202. package/types/sdkFactory/types.d.ts +8 -10
  203. package/types/sdkManager/index.d.ts +3 -3
  204. package/types/services/types.d.ts +0 -4
  205. package/types/storages/dataLoader.d.ts +2 -2
  206. package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +1 -1
  207. package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +1 -2
  208. package/types/storages/inLocalStorage/index.d.ts +2 -2
  209. package/types/storages/inMemory/EventsCacheInMemory.d.ts +3 -3
  210. package/types/storages/inMemory/InMemoryStorage.d.ts +1 -1
  211. package/types/storages/inMemory/InMemoryStorageCS.d.ts +1 -1
  212. package/types/storages/inRedis/EventsCacheInRedis.d.ts +3 -3
  213. package/types/storages/inRedis/ImpressionsCacheInRedis.d.ts +1 -1
  214. package/types/storages/inRedis/RedisAdapter.d.ts +1 -1
  215. package/types/storages/inRedis/SegmentsCacheInRedis.d.ts +1 -1
  216. package/types/storages/inRedis/SplitsCacheInRedis.d.ts +1 -1
  217. package/types/storages/inRedis/TelemetryCacheInRedis.d.ts +1 -1
  218. package/types/storages/inRedis/index.d.ts +2 -2
  219. package/types/storages/pluggable/EventsCachePluggable.d.ts +3 -3
  220. package/types/storages/pluggable/ImpressionsCachePluggable.d.ts +1 -1
  221. package/types/storages/pluggable/SegmentsCachePluggable.d.ts +1 -1
  222. package/types/storages/pluggable/SplitsCachePluggable.d.ts +1 -1
  223. package/types/storages/pluggable/TelemetryCachePluggable.d.ts +1 -1
  224. package/types/storages/pluggable/index.d.ts +3 -2
  225. package/types/storages/pluggable/wrapperAdapter.d.ts +1 -1
  226. package/types/storages/types.d.ts +46 -30
  227. package/types/sync/offline/LocalhostFromObject.d.ts +2 -2
  228. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +1 -1
  229. package/types/sync/polling/updaters/segmentChangesUpdater.d.ts +1 -1
  230. package/types/sync/polling/updaters/splitChangesUpdater.d.ts +1 -1
  231. package/types/sync/streaming/SSEHandler/index.d.ts +1 -1
  232. package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -1
  233. package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +1 -1
  234. package/types/sync/submitters/submitter.d.ts +1 -1
  235. package/types/sync/submitters/types.d.ts +3 -20
  236. package/types/sync/syncTask.d.ts +1 -1
  237. package/types/trackers/impressionsTracker.d.ts +6 -4
  238. package/types/trackers/types.d.ts +4 -25
  239. package/types/utils/constants/index.d.ts +1 -3
  240. package/types/utils/inputValidation/apiKey.d.ts +1 -1
  241. package/types/utils/inputValidation/attribute.d.ts +1 -1
  242. package/types/utils/inputValidation/attributes.d.ts +3 -3
  243. package/types/utils/inputValidation/event.d.ts +1 -1
  244. package/types/utils/inputValidation/eventProperties.d.ts +3 -3
  245. package/types/utils/inputValidation/eventValue.d.ts +1 -1
  246. package/types/utils/inputValidation/isOperational.d.ts +1 -1
  247. package/types/utils/inputValidation/key.d.ts +3 -3
  248. package/types/utils/inputValidation/preloadedData.d.ts +3 -3
  249. package/types/utils/inputValidation/split.d.ts +1 -1
  250. package/types/utils/inputValidation/splitExistance.d.ts +1 -1
  251. package/types/utils/inputValidation/splits.d.ts +1 -1
  252. package/types/utils/inputValidation/trafficType.d.ts +1 -1
  253. package/types/utils/inputValidation/trafficTypeExistance.d.ts +1 -1
  254. package/types/utils/key/index.d.ts +4 -4
  255. package/types/utils/settingsValidation/consent.d.ts +1 -2
  256. package/types/utils/settingsValidation/impressionsMode.d.ts +3 -3
  257. package/types/utils/settingsValidation/index.d.ts +0 -1
  258. package/types/utils/settingsValidation/integrations/common.d.ts +1 -1
  259. package/types/utils/settingsValidation/integrations/configurable.d.ts +1 -1
  260. package/types/utils/settingsValidation/integrations/pluggable.d.ts +1 -2
  261. package/types/utils/settingsValidation/localhost/builtin.d.ts +1 -2
  262. package/types/utils/settingsValidation/localhost/pluggable.d.ts +1 -2
  263. package/types/utils/settingsValidation/logger/builtinLogger.d.ts +1 -1
  264. package/types/utils/settingsValidation/logger/pluggableLogger.d.ts +1 -1
  265. package/types/utils/settingsValidation/splitFilters.d.ts +1 -2
  266. package/types/utils/settingsValidation/storage/storageCS.d.ts +2 -3
  267. package/cjs/storages/inMemory/uniqueKeysCacheInMemory.js +0 -73
  268. package/cjs/storages/inMemory/uniqueKeysCacheInMemoryCS.js +0 -78
  269. package/cjs/sync/submitters/uniqueKeysSubmitter.js +0 -26
  270. package/cjs/trackers/strategy/strategyDebug.js +0 -25
  271. package/cjs/trackers/strategy/strategyNone.js +0 -29
  272. package/cjs/trackers/strategy/strategyOptimized.js +0 -34
  273. package/cjs/trackers/uniqueKeysTracker.js +0 -31
  274. package/cjs/types.js +0 -2
  275. package/esm/storages/inMemory/uniqueKeysCacheInMemory.js +0 -70
  276. package/esm/storages/inMemory/uniqueKeysCacheInMemoryCS.js +0 -75
  277. package/esm/sync/submitters/uniqueKeysSubmitter.js +0 -22
  278. package/esm/trackers/strategy/strategyDebug.js +0 -21
  279. package/esm/trackers/strategy/strategyNone.js +0 -25
  280. package/esm/trackers/strategy/strategyOptimized.js +0 -30
  281. package/esm/trackers/uniqueKeysTracker.js +0 -27
  282. package/esm/types.js +0 -1
  283. package/src/storages/inMemory/uniqueKeysCacheInMemory.ts +0 -83
  284. package/src/storages/inMemory/uniqueKeysCacheInMemoryCS.ts +0 -89
  285. package/src/sync/submitters/uniqueKeysSubmitter.ts +0 -35
  286. package/src/trackers/strategy/strategyDebug.ts +0 -28
  287. package/src/trackers/strategy/strategyNone.ts +0 -34
  288. package/src/trackers/strategy/strategyOptimized.ts +0 -42
  289. package/src/trackers/uniqueKeysTracker.ts +0 -37
  290. package/src/types.ts +0 -1265
  291. package/types/sdkClient/types.d.ts +0 -18
  292. package/types/storages/inMemory/CountsCacheInMemory.d.ts +0 -20
  293. package/types/storages/inMemory/LatenciesCacheInMemory.d.ts +0 -20
  294. package/types/storages/inMemory/uniqueKeysCacheInMemory.d.ts +0 -32
  295. package/types/storages/inMemory/uniqueKeysCacheInMemoryCS.d.ts +0 -37
  296. package/types/storages/inRedis/CountsCacheInRedis.d.ts +0 -9
  297. package/types/storages/inRedis/LatenciesCacheInRedis.d.ts +0 -9
  298. package/types/sync/offline/LocalhostFromFile.d.ts +0 -2
  299. package/types/sync/offline/splitsParser/splitsParserFromFile.d.ts +0 -2
  300. package/types/sync/submitters/eventsSyncTask.d.ts +0 -8
  301. package/types/sync/submitters/impressionCountsSyncTask.d.ts +0 -13
  302. package/types/sync/submitters/impressionsSyncTask.d.ts +0 -14
  303. package/types/sync/submitters/metricsSyncTask.d.ts +0 -12
  304. package/types/sync/submitters/submitterSyncTask.d.ts +0 -10
  305. package/types/sync/submitters/uniqueKeysSubmitter.d.ts +0 -5
  306. package/types/sync/syncTaskComposite.d.ts +0 -5
  307. package/types/trackers/filter/bloomFilter.d.ts +0 -10
  308. package/types/trackers/filter/dictionaryFilter.d.ts +0 -8
  309. package/types/trackers/filter/types.d.ts +0 -5
  310. package/types/trackers/strategy/strategyDebug.d.ts +0 -9
  311. package/types/trackers/strategy/strategyNone.d.ts +0 -10
  312. package/types/trackers/strategy/strategyOptimized.d.ts +0 -11
  313. package/types/trackers/uniqueKeysTracker.d.ts +0 -13
  314. package/types/types.d.ts +0 -1263
  315. package/types/utils/timeTracker/index.d.ts +0 -70
@@ -3,7 +3,7 @@
3
3
  import { isNaNNumber } from '../../utils/lang';
4
4
  import { KeyBuilderSS } from '../KeyBuilderSS';
5
5
  import { IPluggableStorageWrapper, ISegmentsCacheAsync } from '../types';
6
- import { ILogger } from '../../logger/types';
6
+ import { ILogger } from '../../types';
7
7
  import { LOG_PREFIX } from './constants';
8
8
  import { _Set } from '../../utils/lang/sets';
9
9
 
@@ -1,7 +1,7 @@
1
1
  import { isFiniteNumber, isNaNNumber } from '../../utils/lang';
2
2
  import { KeyBuilder } from '../KeyBuilder';
3
3
  import { IPluggableStorageWrapper } from '../types';
4
- import { ILogger } from '../../logger/types';
4
+ import { ILogger } from '../../types';
5
5
  import { ISplit } from '../../dtos/types';
6
6
  import { LOG_PREFIX } from './constants';
7
7
  import { AbstractSplitsCacheAsync } from '../AbstractSplitsCacheAsync';
@@ -1,4 +1,4 @@
1
- import { ILogger } from '../../logger/types';
1
+ import { ILogger } from '../../types';
2
2
  import { Method } from '../../sync/submitters/types';
3
3
  import { KeyBuilderSS } from '../KeyBuilderSS';
4
4
  import { IPluggableStorageWrapper, ITelemetryCacheAsync } from '../types';
@@ -1,5 +1,5 @@
1
- import { IPluggableStorageWrapper, IStorageAsync, IStorageAsyncFactory, IStorageFactoryParams } from '../types';
2
-
1
+ import { IPluggableStorageWrapper, IStorageAsync, IStorageFactoryParams } from '../types';
2
+ import { StorageAsyncFactory } from '../../types';
3
3
  import { KeyBuilderSS } from '../KeyBuilderSS';
4
4
  import { SplitsCachePluggable } from './SplitsCachePluggable';
5
5
  import { SegmentsCachePluggable } from './SegmentsCachePluggable';
@@ -58,7 +58,7 @@ function promisifyEventsTrack(events: any) {
58
58
  /**
59
59
  * Pluggable storage factory for consumer server-side & client-side SplitFactory.
60
60
  */
61
- export function PluggableStorage(options: PluggableStorageOptions): IStorageAsyncFactory {
61
+ export function PluggableStorage(options: PluggableStorageOptions): StorageAsyncFactory {
62
62
 
63
63
  validatePluggableStorageOptions(options);
64
64
 
@@ -1,4 +1,4 @@
1
- import { ILogger } from '../../logger/types';
1
+ import { ILogger } from '../../types';
2
2
  import { IPluggableStorageWrapper } from '../types';
3
3
  import { LOG_PREFIX } from './constants';
4
4
 
@@ -1,7 +1,6 @@
1
- import { MaybeThenable, IMetadata, ISplitFiltersValidation } from '../dtos/types';
2
- import { ILogger } from '../logger/types';
3
- import { EventDataType, HttpErrors, HttpLatencies, ImpressionDataType, LastSync, Method, MethodExceptions, MethodLatencies, OperationType, StoredEventWithMetadata, StoredImpressionWithMetadata, StreamingEvent, UniqueKeysPayloadCs, UniqueKeysPayloadSs } from '../sync/submitters/types';
4
- import { SplitIO, ImpressionDTO, SDKMode } from '../types';
1
+ import { MaybeThenable, IMetadata } from '../dtos/types';
2
+ import { EventDataType, HttpErrors, HttpLatencies, ImpressionDataType, LastSync, Method, MethodExceptions, MethodLatencies, OperationType, StoredEventWithMetadata, StoredImpressionWithMetadata, StreamingEvent } from '../sync/submitters/types';
3
+ import { ImpressionDTO, SDKMode, ILogger, EventData, ISplitFiltersValidation } from '../types';
5
4
 
6
5
  /**
7
6
  * Interface of a pluggable storage wrapper.
@@ -289,7 +288,7 @@ export interface IImpressionsCacheBase {
289
288
 
290
289
  export interface IEventsCacheBase {
291
290
  // Consumer API method, used by events tracker, in standalone and consumer modes, to push events into the storage.
292
- track(data: SplitIO.EventData, size?: number): MaybeThenable<boolean>
291
+ track(data: EventData, size?: number): MaybeThenable<boolean>
293
292
  }
294
293
 
295
294
  /** Impressions and events cache for standalone mode (sync) */
@@ -312,8 +311,8 @@ export interface IImpressionsCacheSync extends IImpressionsCacheBase, IRecorderC
312
311
  setOnFullQueueCb(cb: () => void): void
313
312
  }
314
313
 
315
- export interface IEventsCacheSync extends IEventsCacheBase, IRecorderCacheProducerSync<SplitIO.EventData[]> {
316
- track(data: SplitIO.EventData, size?: number): boolean
314
+ export interface IEventsCacheSync extends IEventsCacheBase, IRecorderCacheProducerSync<EventData[]> {
315
+ track(data: EventData, size?: number): boolean
317
316
  /* Registers callback for full queue */
318
317
  setOnFullQueueCb(cb: () => void): void
319
318
  }
@@ -339,7 +338,7 @@ export interface IImpressionsCacheAsync extends IImpressionsCacheBase, IRecorder
339
338
  export interface IEventsCacheAsync extends IEventsCacheBase, IRecorderCacheProducerAsync<StoredEventWithMetadata[]> {
340
339
  // Consumer API method, used by events tracker (in standalone and consumer modes) to push data into.
341
340
  // The result promise cannot reject.
342
- track(data: SplitIO.EventData, size?: number): Promise<boolean>
341
+ track(data: EventData, size?: number): Promise<boolean>
343
342
  }
344
343
 
345
344
  /**
@@ -352,20 +351,9 @@ export interface IImpressionCountsCacheSync extends IRecorderCacheProducerSync<R
352
351
 
353
352
  // Used by impressions count submitter in standalone and producer mode
354
353
  isEmpty(): boolean // check if cache is empty. Return true if the cache was just created or cleared.
355
- pop(toMerge?: Record<string, number> ): Record<string, number> // pop cache data
354
+ pop(toMerge?: Record<string, number>): Record<string, number> // pop cache data
356
355
  }
357
356
 
358
- export interface IUniqueKeysCacheBase {
359
- // Used by unique Keys tracker
360
- track(key: string, value: string): void
361
-
362
- // Used by unique keys submitter in standalone and producer mode
363
- isEmpty(): boolean // check if cache is empty. Return true if the cache was just created or cleared.
364
- pop(): UniqueKeysPayloadSs | UniqueKeysPayloadCs // pop cache data
365
- /* Registers callback for full queue */
366
- setOnFullQueueCb(cb: () => void): void,
367
- clear(): void
368
- }
369
357
 
370
358
  /**
371
359
  * Telemetry storage interface for standalone and partial consumer modes.
@@ -456,16 +444,14 @@ export interface IStorageBase<
456
444
  TSegmentsCache extends ISegmentsCacheBase,
457
445
  TImpressionsCache extends IImpressionsCacheBase,
458
446
  TEventsCache extends IEventsCacheBase,
459
- TTelemetryCache extends ITelemetryCacheSync | ITelemetryCacheAsync,
460
- TUniqueKeysCache extends IUniqueKeysCacheBase
447
+ TTelemetryCache extends ITelemetryCacheSync | ITelemetryCacheAsync
461
448
  > {
462
449
  splits: TSplitsCache,
463
450
  segments: TSegmentsCache,
464
451
  impressions: TImpressionsCache,
465
452
  impressionCounts?: IImpressionCountsCacheSync,
466
453
  events: TEventsCache,
467
- telemetry?: TTelemetryCache,
468
- uniqueKeys?: TUniqueKeysCache,
454
+ telemetry?: TTelemetryCache
469
455
  destroy(): void | Promise<void>,
470
456
  shared?: (matchingKey: string, onReadyCb: (error?: any) => void) => this
471
457
  }
@@ -475,8 +461,7 @@ export interface IStorageSync extends IStorageBase<
475
461
  ISegmentsCacheSync,
476
462
  IImpressionsCacheSync,
477
463
  IEventsCacheSync,
478
- ITelemetryCacheSync,
479
- IUniqueKeysCacheBase
464
+ ITelemetryCacheSync
480
465
  > { }
481
466
 
482
467
  export interface IStorageAsync extends IStorageBase<
@@ -484,8 +469,7 @@ export interface IStorageAsync extends IStorageBase<
484
469
  ISegmentsCacheAsync,
485
470
  IImpressionsCacheAsync | IImpressionsCacheSync,
486
471
  IEventsCacheAsync | IEventsCacheSync,
487
- ITelemetryCacheAsync,
488
- IUniqueKeysCacheBase
472
+ ITelemetryCacheAsync
489
473
  > { }
490
474
 
491
475
  /** StorageFactory */
@@ -495,11 +479,10 @@ export type DataLoader = (storage: IStorageSync, matchingKey: string) => void
495
479
  export interface IStorageFactoryParams {
496
480
  log: ILogger,
497
481
  impressionsQueueSize?: number,
498
- uniqueKeysCacheSize?: number;
499
482
  eventsQueueSize?: number,
500
483
  optimize?: boolean /* whether create the `impressionCounts` cache (OPTIMIZED impression mode) or not (DEBUG impression mode) */,
501
484
  mode: SDKMode,
502
- impressionsMode?: string,
485
+
503
486
  // ATM, only used by InLocalStorage
504
487
  matchingKey?: string, /* undefined on server-side SDKs */
505
488
  splitFiltersValidation?: ISplitFiltersValidation,
@@ -511,14 +494,39 @@ export interface IStorageFactoryParams {
511
494
  metadata: IMetadata,
512
495
  }
513
496
 
514
- export type StorageType = 'MEMORY' | 'LOCALSTORAGE' | 'REDIS' | 'PLUGGABLE';
515
-
516
- export type IStorageSyncFactory = {
517
- readonly type: StorageType,
518
- (params: IStorageFactoryParams): IStorageSync
519
- }
520
-
521
- export type IStorageAsyncFactory = {
522
- type: StorageType,
523
- (params: IStorageFactoryParams): IStorageAsync
497
+ /**
498
+ * Defines the format of Split data to preload on the factory storage (cache).
499
+ */
500
+ export interface PreloadedData {
501
+ /**
502
+ * Timestamp of the last moment the data was synchronized with Split servers.
503
+ * If this value is older than 10 days ago (expiration time policy), the data is not used to update the storage content.
504
+ * @TODO configurable expiration time policy?
505
+ */
506
+ lastUpdated: number,
507
+ /**
508
+ * Change number of the preloaded data.
509
+ * If this value is older than the current changeNumber at the storage, the data is not used to update the storage content.
510
+ */
511
+ since: number,
512
+ /**
513
+ * Map of splits to their serialized definitions.
514
+ */
515
+ splitsData: {
516
+ [splitName: string]: string
517
+ },
518
+ /**
519
+ * Optional map of user keys to their list of segments.
520
+ * @TODO remove when releasing first version
521
+ */
522
+ mySegmentsData?: {
523
+ [key: string]: string[]
524
+ },
525
+ /**
526
+ * Optional map of segments to their serialized definitions.
527
+ * This property is ignored if `mySegmentsData` was provided.
528
+ */
529
+ segmentsData?: {
530
+ [segmentName: string]: string
531
+ },
524
532
  }
@@ -1,12 +1,12 @@
1
1
  import { splitsParserFromSettingsFactory } from './splitsParser/splitsParserFromSettings';
2
2
  import { syncManagerOfflineFactory } from './syncManagerOffline';
3
- import { SplitIO } from '../../types';
3
+ import { LocalhostFactory } from '../../types';
4
4
 
5
5
  // Singleton instance of the factory function for offline SyncManager from object (a.k.a. localhostFromObject)
6
6
  // SDK instances instantiate their SyncManagers with the same factory
7
- const localhostFromObject = syncManagerOfflineFactory(splitsParserFromSettingsFactory) as SplitIO.LocalhostFactory;
7
+ const localhostFromObject: any = syncManagerOfflineFactory(splitsParserFromSettingsFactory);
8
8
  localhostFromObject.type = 'LocalhostFromObject';
9
9
 
10
- export function LocalhostFromObject(): SplitIO.LocalhostFactory {
11
- return localhostFromObject;
10
+ export function LocalhostFromObject() {
11
+ return localhostFromObject as LocalhostFactory;
12
12
  }
@@ -1,23 +1,23 @@
1
1
  import { ISplitPartial } from '../../../dtos/types';
2
- import { ISettings, SplitIO } from '../../../types';
2
+ import { ISettings, MockedFeaturesMap, TreatmentWithConfig } from '../../../types';
3
3
  import { isObject, forOwn } from '../../../utils/lang';
4
4
  import { parseCondition } from './parseCondition';
5
5
 
6
- function hasTreatmentChanged(prev: string | SplitIO.TreatmentWithConfig, curr: string | SplitIO.TreatmentWithConfig) {
6
+ function hasTreatmentChanged(prev: string | TreatmentWithConfig, curr: string | TreatmentWithConfig) {
7
7
  if (typeof prev !== typeof curr) return true;
8
8
 
9
9
  if (typeof prev === 'string') { // strings treatments, just compare
10
10
  return prev !== curr;
11
11
  } else { // has treatment and config, compare both
12
- return prev.treatment !== (curr as SplitIO.TreatmentWithConfig).treatment || prev.config !== (curr as SplitIO.TreatmentWithConfig).config;
12
+ return prev.treatment !== (curr as TreatmentWithConfig).treatment || prev.config !== (curr as TreatmentWithConfig).config;
13
13
  }
14
14
  }
15
15
 
16
16
  export function splitsParserFromSettingsFactory() {
17
17
 
18
- let previousMock: SplitIO.MockedFeaturesMap = { 'emptyMock': '1' };
18
+ let previousMock: MockedFeaturesMap = { 'emptyMock': '1' };
19
19
 
20
- function mockUpdated(currentData: SplitIO.MockedFeaturesMap) {
20
+ function mockUpdated(currentData: MockedFeaturesMap) {
21
21
  const names = Object.keys(currentData);
22
22
 
23
23
  // Different amount of items
@@ -42,7 +42,7 @@ export function splitsParserFromSettingsFactory() {
42
42
  * @param settings validated object with mocked features mapping.
43
43
  */
44
44
  return function splitsParserFromSettings(settings: ISettings): false | Record<string, ISplitPartial> {
45
- const features = settings.features as SplitIO.MockedFeaturesMap || {};
45
+ const features = settings.features as MockedFeaturesMap || {};
46
46
 
47
47
  if (!mockUpdated(features)) return false;
48
48
 
@@ -53,8 +53,8 @@ export function splitsParserFromSettingsFactory() {
53
53
  let config = null;
54
54
 
55
55
  if (isObject(data)) {
56
- treatment = (data as SplitIO.TreatmentWithConfig).treatment;
57
- config = (data as SplitIO.TreatmentWithConfig).config || config;
56
+ treatment = (data as TreatmentWithConfig).treatment;
57
+ config = (data as TreatmentWithConfig).config || config;
58
58
  }
59
59
  const configurations: Record<string, string> = {};
60
60
  if (config !== null) configurations[treatment as string] = config;
@@ -3,7 +3,7 @@ import { ISegmentsCacheSync, ISplitsCacheSync } from '../../../storages/types';
3
3
  import { ISegmentsEventEmitter } from '../../../readiness/types';
4
4
  import { timeout } from '../../../utils/promise/timeout';
5
5
  import { SDK_SEGMENTS_ARRIVED } from '../../../readiness/constants';
6
- import { ILogger } from '../../../logger/types';
6
+ import { ILogger } from '../../../types';
7
7
  import { SYNC_MYSEGMENTS_FETCH_RETRY } from '../../../logger/constants';
8
8
  import { MySegmentsData } from '../types';
9
9
 
@@ -4,7 +4,7 @@ import { IReadinessManager } from '../../../readiness/types';
4
4
  import { MaybeThenable } from '../../../dtos/types';
5
5
  import { findIndex } from '../../../utils/lang';
6
6
  import { SDK_SEGMENTS_ARRIVED } from '../../../readiness/constants';
7
- import { ILogger } from '../../../logger/types';
7
+ import { ILogger } from '../../../types';
8
8
  import { LOG_PREFIX_INSTANTIATION, LOG_PREFIX_SYNC_SEGMENTS } from '../../../logger/constants';
9
9
  import { thenable } from '../../../utils/promise/thenable';
10
10
 
@@ -5,7 +5,7 @@ import { ISplit, ISplitChangesResponse } from '../../../dtos/types';
5
5
  import { ISplitsEventEmitter } from '../../../readiness/types';
6
6
  import { timeout } from '../../../utils/promise/timeout';
7
7
  import { SDK_SPLITS_ARRIVED, SDK_SPLITS_CACHE_LOADED } from '../../../readiness/constants';
8
- import { ILogger } from '../../../logger/types';
8
+ import { ILogger } from '../../../types';
9
9
  import { SYNC_SPLITS_FETCH, SYNC_SPLITS_NEW, SYNC_SPLITS_REMOVED, SYNC_SPLITS_SEGMENTS, SYNC_SPLITS_FETCH_FAILS, SYNC_SPLITS_FETCH_RETRY } from '../../../logger/constants';
10
10
 
11
11
  type ISplitChangesUpdater = (noCache?: boolean, till?: number) => Promise<boolean>
@@ -4,7 +4,7 @@ import { PUSH_RETRYABLE_ERROR, PUSH_NONRETRYABLE_ERROR, OCCUPANCY, CONTROL, MY_S
4
4
  import { IPushEventEmitter } from '../types';
5
5
  import { ISseEventHandler } from '../SSEClient/types';
6
6
  import { INotificationError, INotificationMessage } from './types';
7
- import { ILogger } from '../../../logger/types';
7
+ import { ILogger } from '../../../types';
8
8
  import { STREAMING_PARSING_ERROR_FAILS, ERROR_STREAMING_SSE, STREAMING_PARSING_MESSAGE_FAILS, STREAMING_NEW_MESSAGE } from '../../../logger/constants';
9
9
  import { ABLY_ERROR, NON_REQUESTED, SSE_CONNECTION_ERROR } from '../../../utils/constants';
10
10
  import { ITelemetryTracker } from '../../../trackers/types';
@@ -1,4 +1,4 @@
1
- import { ILogger } from '../../../logger/types';
1
+ import { ILogger } from '../../../types';
2
2
  import { ISegmentsCacheSync } from '../../../storages/types';
3
3
  import { Backoff } from '../../../utils/Backoff';
4
4
  import { ISegmentsSyncTask } from '../../polling/types';
@@ -1,4 +1,4 @@
1
- import { ILogger } from '../../../logger/types';
1
+ import { ILogger } from '../../../types';
2
2
  import { SDK_SPLITS_ARRIVED } from '../../../readiness/constants';
3
3
  import { ISplitsEventEmitter } from '../../../readiness/types';
4
4
  import { ISplitsCacheSync } from '../../../storages/types';
@@ -1,7 +1,7 @@
1
1
  import { syncTaskFactory } from '../syncTask';
2
2
  import { ISyncTask } from '../types';
3
3
  import { IRecorderCacheProducerSync } from '../../storages/types';
4
- import { ILogger } from '../../logger/types';
4
+ import { ILogger } from '../../types';
5
5
  import { SUBMITTERS_PUSH, SUBMITTERS_PUSH_FAILS, SUBMITTERS_PUSH_RETRY } from '../../logger/constants';
6
6
  import { IResponse } from '../../services/types';
7
7
 
@@ -4,7 +4,6 @@ import { impressionCountsSubmitterFactory } from './impressionCountsSubmitter';
4
4
  import { telemetrySubmitterFactory } from './telemetrySubmitter';
5
5
  import { ISdkFactoryContextSync } from '../../sdkFactory/types';
6
6
  import { ISubmitterManager } from './types';
7
- import { uniqueKeysSubmitterFactory } from './uniqueKeysSubmitter';
8
7
 
9
8
  export function submitterManagerFactory(params: ISdkFactoryContextSync): ISubmitterManager {
10
9
 
@@ -16,7 +15,6 @@ export function submitterManagerFactory(params: ISdkFactoryContextSync): ISubmit
16
15
  const impressionCountsSubmitter = impressionCountsSubmitterFactory(params);
17
16
  if (impressionCountsSubmitter) submitters.push(impressionCountsSubmitter);
18
17
  const telemetrySubmitter = telemetrySubmitterFactory(params);
19
- if (params.uniqueKeysTracker) submitters.push(uniqueKeysSubmitterFactory(params));
20
18
 
21
19
  return {
22
20
  // `onlyTelemetry` true if SDK is created with userConsent not GRANTED
@@ -1,7 +1,7 @@
1
1
  import { ISegmentsCacheSync, ISplitsCacheSync, ITelemetryCacheSync } from '../../storages/types';
2
2
  import { submitterFactory, firstPushWindowDecorator } from './submitter';
3
3
  import { TelemetryUsageStatsPayload, TelemetryConfigStatsPayload, TelemetryConfigStats } from './types';
4
- import { QUEUED, DEDUPED, DROPPED, CONSUMER_MODE, CONSUMER_ENUM, STANDALONE_MODE, CONSUMER_PARTIAL_MODE, STANDALONE_ENUM, CONSUMER_PARTIAL_ENUM, OPTIMIZED, DEBUG, NONE, DEBUG_ENUM, OPTIMIZED_ENUM, NONE_ENUM, CONSENT_GRANTED, CONSENT_DECLINED, CONSENT_UNKNOWN } from '../../utils/constants';
4
+ import { QUEUED, DEDUPED, DROPPED, CONSUMER_MODE, CONSUMER_ENUM, STANDALONE_MODE, CONSUMER_PARTIAL_MODE, STANDALONE_ENUM, CONSUMER_PARTIAL_ENUM, OPTIMIZED, DEBUG, DEBUG_ENUM, OPTIMIZED_ENUM, CONSENT_GRANTED, CONSENT_DECLINED, CONSENT_UNKNOWN } from '../../utils/constants';
5
5
  import { SDK_READY, SDK_READY_FROM_CACHE } from '../../readiness/constants';
6
6
  import { ConsentStatus, ISettings, SDKMode } from '../../types';
7
7
  import { base } from '../../utils/settingsValidation';
@@ -52,9 +52,8 @@ const OPERATION_MODE_MAP = {
52
52
 
53
53
  const IMPRESSIONS_MODE_MAP = {
54
54
  [OPTIMIZED]: OPTIMIZED_ENUM,
55
- [DEBUG]: DEBUG_ENUM,
56
- [NONE]: NONE_ENUM
57
- } as Record<ISettings['sync']['impressionsMode'], (0 | 1 | 2)>;
55
+ [DEBUG]: DEBUG_ENUM
56
+ } as Record<ISettings['sync']['impressionsMode'], (0 | 1)>;
58
57
 
59
58
  const USER_CONSENT_MAP = {
60
59
  [CONSENT_UNKNOWN]: 1,
@@ -1,5 +1,5 @@
1
1
  import { IMetadata } from '../../dtos/types';
2
- import { SplitIO } from '../../types';
2
+ import { EventData } from '../../types';
3
3
  import { ISyncTask } from '../types';
4
4
 
5
5
  export type ImpressionsPayload = {
@@ -35,24 +35,6 @@ export type ImpressionCountsPayload = {
35
35
  }[]
36
36
  }
37
37
 
38
- export type UniqueKeysPayloadSs = {
39
- keys: {
40
- /** Split name */
41
- f: string
42
- /** keyNames */
43
- ks: string[]
44
- }[]
45
- }
46
-
47
- export type UniqueKeysPayloadCs = {
48
- keys: {
49
- /** keyNames */
50
- k: string
51
- /** Split name */
52
- fs: string[]
53
- }[]
54
- }
55
-
56
38
  export type StoredImpressionWithMetadata = {
57
39
  /** Metadata */
58
40
  m: IMetadata,
@@ -79,7 +61,7 @@ export type StoredEventWithMetadata = {
79
61
  /** Metadata */
80
62
  m: IMetadata,
81
63
  /** Stored event */
82
- e: SplitIO.EventData
64
+ e: EventData
83
65
  }
84
66
 
85
67
  /**
@@ -166,8 +148,7 @@ export type OperationMode = STANDALONE_ENUM | CONSUMER_ENUM | CONSUMER_PARTIAL_E
166
148
 
167
149
  export type OPTIMIZED_ENUM = 0;
168
150
  export type DEBUG_ENUM = 1;
169
- export type NONE_ENUM = 2;
170
- export type ImpressionsMode = OPTIMIZED_ENUM | DEBUG_ENUM | NONE_ENUM;
151
+ export type ImpressionsMode = OPTIMIZED_ENUM | DEBUG_ENUM;
171
152
 
172
153
  export type RefreshRates = {
173
154
  sp: number, // splits
@@ -1,5 +1,5 @@
1
1
  import { SYNC_TASK_EXECUTE, SYNC_TASK_START, SYNC_TASK_STOP } from '../logger/constants';
2
- import { ILogger } from '../logger/types';
2
+ import { ILogger } from '../types';
3
3
  import { ISyncTask } from './types';
4
4
 
5
5
  /**
@@ -2,7 +2,7 @@ import { objectAssign } from '../utils/lang/objectAssign';
2
2
  import { thenable } from '../utils/promise/thenable';
3
3
  import { IEventsCacheBase, ITelemetryCacheAsync, ITelemetryCacheSync } from '../storages/types';
4
4
  import { IEventsHandler, IEventTracker } from './types';
5
- import { ISettings, SplitIO } from '../types';
5
+ import { ISettings, EventData } from '../types';
6
6
  import { EVENTS_TRACKER_SUCCESS, ERROR_EVENTS_TRACKER } from '../logger/constants';
7
7
  import { CONSENT_DECLINED, DROPPED, QUEUED } from '../utils/constants';
8
8
  import { isStorageSync } from './impressionObserver/utils';
@@ -23,7 +23,7 @@ export function eventTrackerFactory(
23
23
  const log = settings.log;
24
24
  const isSync = isStorageSync(settings);
25
25
 
26
- function queueEventsCallback(eventData: SplitIO.EventData, tracked: boolean) {
26
+ function queueEventsCallback(eventData: EventData, tracked: boolean) {
27
27
  const { eventTypeId, trafficTypeName, key, value, timestamp, properties } = eventData;
28
28
  // Logging every prop would be too much.
29
29
  const msg = `event of type "${eventTypeId}" for traffic type "${trafficTypeName}". Key: ${key}. Value: ${value}. Timestamp: ${timestamp}. ${properties ? 'With properties.' : 'With no properties.'}`;
@@ -48,7 +48,7 @@ export function eventTrackerFactory(
48
48
  }
49
49
 
50
50
  return {
51
- track(eventData: SplitIO.EventData, size?: number) {
51
+ track(eventData: EventData, size?: number) {
52
52
  if (settings.userConsent === CONSENT_DECLINED) {
53
53
  return isSync ? false : Promise.resolve(false);
54
54
  }
@@ -1,8 +1,10 @@
1
1
  import { objectAssign } from '../utils/lang/objectAssign';
2
2
  import { thenable } from '../utils/promise/thenable';
3
- import { IImpressionsCacheBase, ITelemetryCacheSync, ITelemetryCacheAsync } from '../storages/types';
4
- import { IImpressionsHandler, IImpressionsTracker, IStrategy } from './types';
5
- import { SplitIO, ImpressionDTO, ISettings } from '../types';
3
+ import { truncateTimeFrame } from '../utils/time';
4
+ import { IImpressionCountsCacheSync, IImpressionsCacheBase, ITelemetryCacheSync, ITelemetryCacheAsync } from '../storages/types';
5
+ import { IImpressionsHandler, IImpressionsTracker } from './types';
6
+ import { ImpressionDTO, ISettings, Attributes, ImpressionData } from '../types';
7
+ import { IImpressionObserver } from './impressionObserver/types';
6
8
  import { IMPRESSIONS_TRACKER_SUCCESS, ERROR_IMPRESSIONS_TRACKER, ERROR_IMPRESSIONS_LISTENER } from '../logger/constants';
7
9
  import { CONSENT_DECLINED, DEDUPED, QUEUED } from '../utils/constants';
8
10
 
@@ -13,27 +15,48 @@ import { CONSENT_DECLINED, DEDUPED, QUEUED } from '../utils/constants';
13
15
  * @param metadata runtime metadata (ip, hostname and version)
14
16
  * @param impressionListener optional impression listener
15
17
  * @param integrationsManager optional integrations manager
16
- * @param strategy strategy for impressions tracking.
18
+ * @param observer optional impression observer. If provided, previous time (pt property) is included in impression instances
19
+ * @param countsCache optional cache to save impressions count. If provided, impressions will be deduped (OPTIMIZED mode)
17
20
  */
18
21
  export function impressionsTrackerFactory(
19
22
  settings: ISettings,
20
23
  impressionsCache: IImpressionsCacheBase,
21
- strategy: IStrategy,
22
24
  integrationsManager?: IImpressionsHandler,
23
- telemetryCache?: ITelemetryCacheSync | ITelemetryCacheAsync,
25
+ // if observer is provided, it implies `shouldAddPreviousTime` flag (i.e., if impressions previous time should be added or not)
26
+ observer?: IImpressionObserver,
27
+ // if countsCache is provided, it implies `isOptimized` flag (i.e., if impressions should be deduped or not)
28
+ countsCache?: IImpressionCountsCacheSync,
29
+ telemetryCache?: ITelemetryCacheSync | ITelemetryCacheAsync
24
30
  ): IImpressionsTracker {
25
31
 
26
32
  const { log, impressionListener, runtime: { ip, hostname }, version } = settings;
27
33
 
28
34
  return {
29
- track(impressions: ImpressionDTO[], attributes?: SplitIO.Attributes) {
35
+ track(impressions: ImpressionDTO[], attributes?: Attributes) {
30
36
  if (settings.userConsent === CONSENT_DECLINED) return;
31
37
 
32
38
  const impressionsCount = impressions.length;
33
- const { impressionsToStore, impressionsToListener, deduped } = strategy.process(impressions);
34
-
35
- const impressionsToListenerCount = impressionsToListener.length;
36
-
39
+
40
+ const impressionsToStore: ImpressionDTO[] = []; // Track only the impressions that are going to be stored
41
+ // Wraps impressions to store and adds previousTime if it corresponds
42
+ impressions.forEach((impression) => {
43
+ if (observer) {
44
+ // Adds previous time if it is enabled
45
+ impression.pt = observer.testAndSet(impression);
46
+ }
47
+
48
+ const now = Date.now();
49
+ if (countsCache) {
50
+ // Increments impression counter per featureName
51
+ countsCache.track(impression.feature, now, 1);
52
+ }
53
+
54
+ // Checks if the impression should be added in queue to be sent
55
+ if (!countsCache || !impression.pt || impression.pt < truncateTimeFrame(now)) {
56
+ impressionsToStore.push(impression);
57
+ }
58
+ });
59
+
37
60
  const res = impressionsCache.track(impressionsToStore);
38
61
 
39
62
  // If we're on an async storage, handle error and log it.
@@ -48,16 +71,16 @@ export function impressionsTrackerFactory(
48
71
  // @TODO we are not dropping impressions on full queue yet, so DROPPED stats are not recorded
49
72
  if (telemetryCache) {
50
73
  (telemetryCache as ITelemetryCacheSync).recordImpressionStats(QUEUED, impressionsToStore.length);
51
- (telemetryCache as ITelemetryCacheSync).recordImpressionStats(DEDUPED, deduped);
74
+ (telemetryCache as ITelemetryCacheSync).recordImpressionStats(DEDUPED, impressions.length - impressionsToStore.length);
52
75
  }
53
76
  }
54
77
 
55
78
  // @TODO next block might be handled by the integration manager. In that case, the metadata object doesn't need to be passed in the constructor
56
79
  if (impressionListener || integrationsManager) {
57
- for (let i = 0; i < impressionsToListenerCount; i++) {
58
- const impressionData: SplitIO.ImpressionData = {
80
+ for (let i = 0; i < impressionsCount; i++) {
81
+ const impressionData: ImpressionData = {
59
82
  // copy of impression, to avoid unexpected behaviour if modified by integrations or impressionListener
60
- impression: objectAssign({}, impressionsToListener[i]),
83
+ impression: objectAssign({}, impressions[i]),
61
84
  attributes,
62
85
  ip,
63
86
  hostname,
@@ -1,4 +1,4 @@
1
- import { SplitIO, ImpressionDTO } from '../types';
1
+ import { ImpressionDTO, EventData, ImpressionData, Attributes } from '../types';
2
2
  import { StreamingEventType, Method, OperationType } from '../sync/submitters/types';
3
3
  import { IEventsCacheBase } from '../storages/types';
4
4
  import { NetworkError } from '../services/types';
@@ -6,7 +6,7 @@ import { NetworkError } from '../services/types';
6
6
  /** Events tracker */
7
7
 
8
8
  export interface IEventsHandler {
9
- handleEvent(eventData: SplitIO.EventData): any
9
+ handleEvent(eventData: EventData): any
10
10
  }
11
11
 
12
12
  export type IEventTracker = IEventsCacheBase
@@ -14,11 +14,11 @@ export type IEventTracker = IEventsCacheBase
14
14
  /** Impressions tracker */
15
15
 
16
16
  export interface IImpressionsHandler {
17
- handleImpression(impressionData: SplitIO.ImpressionData): any
17
+ handleImpression(impressionData: ImpressionData): any
18
18
  }
19
19
 
20
20
  export interface IImpressionsTracker {
21
- track(impressions: ImpressionDTO[], attributes?: SplitIO.Attributes): void
21
+ track(impressions: ImpressionDTO[], attributes?: Attributes): void
22
22
  }
23
23
 
24
24
  /** Telemetry tracker */
@@ -42,29 +42,3 @@ export interface ITelemetryTracker {
42
42
  */
43
43
  streamingEvent(e: StreamingEventType | AUTH_REJECTION, d?: number): void
44
44
  }
45
-
46
- export interface IFilterAdapter {
47
- add(key: string, featureName: string): boolean;
48
- contains(key: string, featureName: string): boolean;
49
- clear(): void;
50
- }
51
-
52
- export interface IImpressionSenderAdapter {
53
- recordUniqueKeys(data: Object): void;
54
- recordImpressionCounts(data: Object): void
55
- }
56
-
57
- /** Unique keys tracker */
58
- export interface IUniqueKeysTracker {
59
- track(key: string, featureName: string): void;
60
- }
61
-
62
- export interface IStrategyResult {
63
- impressionsToStore: ImpressionDTO[],
64
- impressionsToListener: ImpressionDTO[],
65
- deduped: number
66
- }
67
-
68
- export interface IStrategy {
69
- process(impressions: ImpressionDTO[]): IStrategyResult
70
- }