@splitsoftware/splitio-commons 1.6.2-rc.4 → 1.6.2-rc.7

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 (509) hide show
  1. package/CHANGES.txt +3 -0
  2. package/cjs/consent/sdkUserConsent.js +2 -2
  3. package/cjs/evaluator/index.js +10 -11
  4. package/cjs/integrations/ga/GaToSplit.js +8 -5
  5. package/cjs/listeners/browser.js +2 -1
  6. package/cjs/logger/constants.js +2 -1
  7. package/cjs/sdkClient/clientAttributesDecoration.js +1 -1
  8. package/cjs/sdkClient/sdkClient.js +3 -1
  9. package/cjs/sdkFactory/index.js +28 -8
  10. package/cjs/sdkManager/index.js +3 -11
  11. package/cjs/services/splitApi.js +20 -1
  12. package/cjs/storages/AbstractSplitsCacheAsync.js +7 -9
  13. package/cjs/storages/AbstractSplitsCacheSync.js +7 -9
  14. package/cjs/storages/KeyBuilderSS.js +6 -0
  15. package/cjs/storages/dataLoader.js +1 -1
  16. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +5 -6
  17. package/cjs/storages/inLocalStorage/index.js +4 -0
  18. package/cjs/storages/inMemory/AttributesCacheInMemory.js +1 -1
  19. package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +12 -1
  20. package/cjs/storages/inMemory/InMemoryStorage.js +5 -1
  21. package/cjs/storages/inMemory/InMemoryStorageCS.js +5 -1
  22. package/cjs/storages/inMemory/SplitsCacheInMemory.js +7 -10
  23. package/cjs/storages/inMemory/uniqueKeysCacheInMemory.js +73 -0
  24. package/cjs/storages/inMemory/uniqueKeysCacheInMemoryCS.js +78 -0
  25. package/cjs/storages/inRedis/ImpressionCountsCacheInRedis.js +49 -0
  26. package/cjs/storages/inRedis/SplitsCacheInRedis.js +15 -9
  27. package/cjs/storages/inRedis/constants.js +4 -1
  28. package/cjs/storages/inRedis/index.js +15 -1
  29. package/cjs/storages/inRedis/uniqueKeysCacheInRedis.js +56 -0
  30. package/cjs/storages/pluggable/SplitsCachePluggable.js +14 -9
  31. package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +2 -3
  32. package/cjs/sync/polling/updaters/splitChangesUpdater.js +1 -1
  33. package/cjs/sync/submitters/submitterManager.js +3 -0
  34. package/cjs/sync/submitters/telemetrySubmitter.js +1 -0
  35. package/cjs/sync/submitters/uniqueKeysSubmitter.js +26 -0
  36. package/cjs/trackers/impressionsTracker.js +22 -41
  37. package/cjs/trackers/strategy/strategyDebug.js +25 -0
  38. package/cjs/trackers/strategy/strategyNone.js +29 -0
  39. package/cjs/trackers/strategy/strategyOptimized.js +35 -0
  40. package/cjs/trackers/telemetryTracker.js +6 -0
  41. package/cjs/trackers/uniqueKeysTracker.js +38 -0
  42. package/cjs/types.js +2 -0
  43. package/cjs/utils/constants/index.js +4 -2
  44. package/cjs/utils/key/index.js +1 -1
  45. package/cjs/utils/settingsValidation/impressionsMode.js +2 -2
  46. package/cjs/utils/settingsValidation/index.js +4 -1
  47. package/esm/consent/sdkUserConsent.js +2 -2
  48. package/esm/evaluator/index.js +10 -11
  49. package/esm/integrations/ga/GaToSplit.js +8 -5
  50. package/esm/listeners/browser.js +3 -2
  51. package/esm/logger/constants.js +1 -0
  52. package/esm/sdkClient/clientAttributesDecoration.js +1 -1
  53. package/esm/sdkClient/sdkClient.js +3 -1
  54. package/esm/sdkFactory/index.js +28 -8
  55. package/esm/sdkManager/index.js +3 -11
  56. package/esm/services/splitApi.js +20 -1
  57. package/esm/storages/AbstractSplitsCacheAsync.js +7 -9
  58. package/esm/storages/AbstractSplitsCacheSync.js +7 -9
  59. package/esm/storages/KeyBuilderSS.js +6 -0
  60. package/esm/storages/dataLoader.js +1 -1
  61. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +5 -6
  62. package/esm/storages/inLocalStorage/index.js +5 -1
  63. package/esm/storages/inMemory/AttributesCacheInMemory.js +1 -1
  64. package/esm/storages/inMemory/ImpressionCountsCacheInMemory.js +12 -1
  65. package/esm/storages/inMemory/InMemoryStorage.js +6 -2
  66. package/esm/storages/inMemory/InMemoryStorageCS.js +6 -2
  67. package/esm/storages/inMemory/SplitsCacheInMemory.js +7 -10
  68. package/esm/storages/inMemory/uniqueKeysCacheInMemory.js +70 -0
  69. package/esm/storages/inMemory/uniqueKeysCacheInMemoryCS.js +75 -0
  70. package/esm/storages/inRedis/ImpressionCountsCacheInRedis.js +46 -0
  71. package/esm/storages/inRedis/SplitsCacheInRedis.js +15 -9
  72. package/esm/storages/inRedis/constants.js +3 -0
  73. package/esm/storages/inRedis/index.js +16 -2
  74. package/esm/storages/inRedis/uniqueKeysCacheInRedis.js +53 -0
  75. package/esm/storages/pluggable/SplitsCachePluggable.js +14 -9
  76. package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +2 -3
  77. package/esm/sync/polling/updaters/splitChangesUpdater.js +1 -1
  78. package/esm/sync/submitters/submitterManager.js +3 -0
  79. package/esm/sync/submitters/telemetrySubmitter.js +2 -1
  80. package/esm/sync/submitters/uniqueKeysSubmitter.js +22 -0
  81. package/esm/trackers/impressionsTracker.js +22 -41
  82. package/esm/trackers/strategy/strategyDebug.js +21 -0
  83. package/esm/trackers/strategy/strategyNone.js +25 -0
  84. package/esm/trackers/strategy/strategyOptimized.js +31 -0
  85. package/esm/trackers/telemetryTracker.js +6 -0
  86. package/esm/trackers/uniqueKeysTracker.js +34 -0
  87. package/esm/types.js +1 -0
  88. package/esm/utils/constants/index.js +2 -0
  89. package/esm/utils/key/index.js +1 -1
  90. package/esm/utils/settingsValidation/impressionsMode.js +3 -3
  91. package/esm/utils/settingsValidation/index.js +4 -1
  92. package/package.json +5 -4
  93. package/src/consent/sdkUserConsent.ts +5 -6
  94. package/src/dtos/types.ts +8 -0
  95. package/src/evaluator/Engine.ts +3 -3
  96. package/src/evaluator/combiners/and.ts +1 -1
  97. package/src/evaluator/combiners/ifelseif.ts +3 -3
  98. package/src/evaluator/condition/engineUtils.ts +1 -1
  99. package/src/evaluator/condition/index.ts +6 -6
  100. package/src/evaluator/index.ts +18 -19
  101. package/src/evaluator/matchers/all.ts +1 -1
  102. package/src/evaluator/matchers/between.ts +1 -1
  103. package/src/evaluator/matchers/boolean.ts +1 -1
  104. package/src/evaluator/matchers/cont_all.ts +1 -1
  105. package/src/evaluator/matchers/cont_any.ts +1 -1
  106. package/src/evaluator/matchers/cont_str.ts +1 -1
  107. package/src/evaluator/matchers/dependency.ts +1 -1
  108. package/src/evaluator/matchers/eq.ts +1 -1
  109. package/src/evaluator/matchers/eq_set.ts +1 -1
  110. package/src/evaluator/matchers/ew.ts +1 -1
  111. package/src/evaluator/matchers/gte.ts +1 -1
  112. package/src/evaluator/matchers/index.ts +1 -1
  113. package/src/evaluator/matchers/lte.ts +1 -1
  114. package/src/evaluator/matchers/part_of.ts +1 -1
  115. package/src/evaluator/matchers/segment.ts +1 -1
  116. package/src/evaluator/matchers/string.ts +1 -1
  117. package/src/evaluator/matchers/sw.ts +1 -1
  118. package/src/evaluator/matchers/whitelist.ts +1 -1
  119. package/src/evaluator/parser/index.ts +3 -3
  120. package/src/evaluator/types.ts +6 -6
  121. package/src/evaluator/value/index.ts +4 -4
  122. package/src/evaluator/value/sanitize.ts +4 -4
  123. package/src/integrations/ga/GaToSplit.ts +15 -11
  124. package/src/integrations/ga/SplitToGa.ts +10 -10
  125. package/src/integrations/ga/types.ts +4 -4
  126. package/src/integrations/pluggable.ts +3 -3
  127. package/src/integrations/types.ts +4 -3
  128. package/src/listeners/browser.ts +3 -2
  129. package/src/logger/constants.ts +1 -0
  130. package/src/logger/index.ts +3 -3
  131. package/src/logger/sdkLogger.ts +2 -1
  132. package/src/logger/types.ts +16 -0
  133. package/src/readiness/sdkReadinessManager.ts +1 -1
  134. package/src/readiness/types.ts +9 -2
  135. package/src/sdkClient/client.ts +13 -13
  136. package/src/sdkClient/clientAttributesDecoration.ts +13 -13
  137. package/src/sdkClient/clientCS.ts +4 -3
  138. package/src/sdkClient/clientInputValidation.ts +15 -15
  139. package/src/sdkClient/sdkClient.ts +5 -3
  140. package/src/sdkClient/sdkClientMethod.ts +2 -2
  141. package/src/sdkClient/sdkClientMethodCS.ts +9 -9
  142. package/src/sdkClient/sdkClientMethodCSWithTT.ts +9 -9
  143. package/src/sdkFactory/index.ts +34 -11
  144. package/src/sdkFactory/types.ts +11 -8
  145. package/src/sdkManager/index.ts +7 -16
  146. package/src/services/splitApi.ts +22 -1
  147. package/src/services/types.ts +6 -0
  148. package/src/storages/AbstractSplitsCacheAsync.ts +12 -14
  149. package/src/storages/AbstractSplitsCacheSync.ts +14 -16
  150. package/src/storages/KeyBuilderSS.ts +8 -0
  151. package/src/storages/dataLoader.ts +3 -3
  152. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +1 -1
  153. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +10 -12
  154. package/src/storages/inLocalStorage/index.ts +6 -4
  155. package/src/storages/inMemory/AttributesCacheInMemory.ts +12 -13
  156. package/src/storages/inMemory/EventsCacheInMemory.ts +4 -4
  157. package/src/storages/inMemory/ImpressionCountsCacheInMemory.ts +16 -1
  158. package/src/storages/inMemory/InMemoryStorage.ts +5 -2
  159. package/src/storages/inMemory/InMemoryStorageCS.ts +6 -2
  160. package/src/storages/inMemory/SplitsCacheInMemory.ts +10 -14
  161. package/src/storages/inMemory/uniqueKeysCacheInMemory.ts +82 -0
  162. package/src/storages/inMemory/uniqueKeysCacheInMemoryCS.ts +88 -0
  163. package/src/storages/inRedis/EventsCacheInRedis.ts +4 -4
  164. package/src/storages/inRedis/ImpressionCountsCacheInRedis.ts +51 -0
  165. package/src/storages/inRedis/ImpressionsCacheInRedis.ts +1 -1
  166. package/src/storages/inRedis/RedisAdapter.ts +1 -1
  167. package/src/storages/inRedis/SegmentsCacheInRedis.ts +1 -1
  168. package/src/storages/inRedis/SplitsCacheInRedis.ts +22 -18
  169. package/src/storages/inRedis/TelemetryCacheInRedis.ts +1 -1
  170. package/src/storages/inRedis/constants.ts +3 -0
  171. package/src/storages/inRedis/index.ts +14 -6
  172. package/src/storages/inRedis/uniqueKeysCacheInRedis.ts +63 -0
  173. package/src/storages/pluggable/EventsCachePluggable.ts +4 -4
  174. package/src/storages/pluggable/ImpressionsCachePluggable.ts +1 -1
  175. package/src/storages/pluggable/SegmentsCachePluggable.ts +1 -1
  176. package/src/storages/pluggable/SplitsCachePluggable.ts +21 -18
  177. package/src/storages/pluggable/TelemetryCachePluggable.ts +1 -1
  178. package/src/storages/pluggable/index.ts +3 -3
  179. package/src/storages/pluggable/wrapperAdapter.ts +1 -1
  180. package/src/storages/types.ts +60 -62
  181. package/src/sync/offline/LocalhostFromObject.ts +4 -4
  182. package/src/sync/offline/splitsParser/splitsParserFromSettings.ts +8 -8
  183. package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +5 -6
  184. package/src/sync/polling/updaters/mySegmentsUpdater.ts +1 -1
  185. package/src/sync/polling/updaters/segmentChangesUpdater.ts +1 -1
  186. package/src/sync/polling/updaters/splitChangesUpdater.ts +3 -3
  187. package/src/sync/streaming/SSEHandler/index.ts +1 -1
  188. package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
  189. package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +1 -1
  190. package/src/sync/submitters/submitter.ts +1 -1
  191. package/src/sync/submitters/submitterManager.ts +2 -0
  192. package/src/sync/submitters/telemetrySubmitter.ts +4 -3
  193. package/src/sync/submitters/types.ts +22 -3
  194. package/src/sync/submitters/uniqueKeysSubmitter.ts +35 -0
  195. package/src/sync/syncTask.ts +1 -1
  196. package/src/trackers/eventTracker.ts +3 -3
  197. package/src/trackers/impressionsTracker.ts +30 -51
  198. package/src/trackers/strategy/strategyDebug.ts +28 -0
  199. package/src/trackers/strategy/strategyNone.ts +34 -0
  200. package/src/trackers/strategy/strategyOptimized.ts +42 -0
  201. package/src/trackers/telemetryTracker.ts +7 -2
  202. package/src/trackers/types.ts +36 -4
  203. package/src/trackers/uniqueKeysTracker.ts +48 -0
  204. package/src/types.ts +1267 -0
  205. package/src/utils/constants/index.ts +3 -1
  206. package/src/utils/inputValidation/apiKey.ts +1 -1
  207. package/src/utils/inputValidation/attribute.ts +1 -1
  208. package/src/utils/inputValidation/attributes.ts +3 -3
  209. package/src/utils/inputValidation/event.ts +1 -1
  210. package/src/utils/inputValidation/eventProperties.ts +3 -3
  211. package/src/utils/inputValidation/eventValue.ts +1 -1
  212. package/src/utils/inputValidation/isOperational.ts +1 -1
  213. package/src/utils/inputValidation/key.ts +3 -3
  214. package/src/utils/inputValidation/preloadedData.ts +3 -3
  215. package/src/utils/inputValidation/split.ts +1 -1
  216. package/src/utils/inputValidation/splitExistance.ts +1 -1
  217. package/src/utils/inputValidation/splits.ts +1 -1
  218. package/src/utils/inputValidation/trafficType.ts +1 -1
  219. package/src/utils/inputValidation/trafficTypeExistance.ts +1 -1
  220. package/src/utils/key/index.ts +9 -9
  221. package/src/utils/settingsValidation/consent.ts +2 -1
  222. package/src/utils/settingsValidation/impressionsMode.ts +6 -6
  223. package/src/utils/settingsValidation/index.ts +5 -1
  224. package/src/utils/settingsValidation/integrations/common.ts +1 -1
  225. package/src/utils/settingsValidation/integrations/configurable.ts +1 -1
  226. package/src/utils/settingsValidation/integrations/pluggable.ts +2 -1
  227. package/src/utils/settingsValidation/localhost/builtin.ts +2 -1
  228. package/src/utils/settingsValidation/localhost/pluggable.ts +2 -1
  229. package/src/utils/settingsValidation/logger/builtinLogger.ts +2 -1
  230. package/src/utils/settingsValidation/logger/pluggableLogger.ts +2 -1
  231. package/src/utils/settingsValidation/splitFilters.ts +9 -7
  232. package/src/utils/settingsValidation/storage/storageCS.ts +2 -1
  233. package/types/consent/index.d.ts +2 -0
  234. package/types/consent/sdkUserConsent.d.ts +13 -0
  235. package/types/dtos/types.d.ts +172 -0
  236. package/types/evaluator/Engine.d.ts +15 -0
  237. package/types/evaluator/combiners/and.d.ts +4 -0
  238. package/types/evaluator/combiners/ifelseif.d.ts +3 -0
  239. package/types/evaluator/condition/engineUtils.d.ts +11 -0
  240. package/types/evaluator/condition/index.d.ts +6 -0
  241. package/types/evaluator/convertions/index.d.ts +2 -0
  242. package/types/evaluator/index.d.ts +7 -0
  243. package/types/evaluator/matchers/all.d.ts +2 -0
  244. package/types/evaluator/matchers/between.d.ts +3 -0
  245. package/types/evaluator/matchers/boolean.d.ts +2 -0
  246. package/types/evaluator/matchers/cont_all.d.ts +2 -0
  247. package/types/evaluator/matchers/cont_any.d.ts +2 -0
  248. package/types/evaluator/matchers/cont_str.d.ts +2 -0
  249. package/types/evaluator/matchers/dependency.d.ts +5 -0
  250. package/types/evaluator/matchers/eq.d.ts +2 -0
  251. package/types/evaluator/matchers/eq_set.d.ts +2 -0
  252. package/types/evaluator/matchers/ew.d.ts +2 -0
  253. package/types/evaluator/matchers/gte.d.ts +2 -0
  254. package/types/evaluator/matchers/index.d.ts +7 -0
  255. package/types/evaluator/matchers/lte.d.ts +2 -0
  256. package/types/evaluator/matchers/matcherTypes.d.ts +10 -0
  257. package/types/evaluator/matchers/part_of.d.ts +2 -0
  258. package/types/evaluator/matchers/segment.d.ts +6 -0
  259. package/types/evaluator/matchers/string.d.ts +2 -0
  260. package/types/evaluator/matchers/sw.d.ts +2 -0
  261. package/types/evaluator/matchers/whitelist.d.ts +3 -0
  262. package/types/evaluator/matchersTransform/index.d.ts +6 -0
  263. package/types/evaluator/matchersTransform/segment.d.ts +5 -0
  264. package/types/evaluator/matchersTransform/set.d.ts +5 -0
  265. package/types/evaluator/matchersTransform/unaryNumeric.d.ts +5 -0
  266. package/types/evaluator/matchersTransform/whitelist.d.ts +5 -0
  267. package/types/evaluator/parser/index.d.ts +5 -0
  268. package/types/evaluator/treatments/index.d.ts +8 -0
  269. package/types/evaluator/types.d.ts +28 -0
  270. package/types/evaluator/value/index.d.ts +7 -0
  271. package/types/evaluator/value/sanitize.d.ts +7 -0
  272. package/types/index.d.ts +5 -0
  273. package/types/integrations/browser.d.ts +12 -0
  274. package/types/integrations/ga/GaToSplit.d.ts +40 -0
  275. package/types/integrations/ga/GoogleAnalyticsToSplit.d.ts +3 -0
  276. package/types/integrations/ga/SplitToGa.d.ts +34 -0
  277. package/types/integrations/ga/SplitToGoogleAnalytics.d.ts +3 -0
  278. package/types/integrations/ga/types.d.ts +148 -0
  279. package/types/integrations/pluggable.d.ts +11 -0
  280. package/types/integrations/types.d.ts +18 -0
  281. package/types/listeners/browser.d.ts +40 -0
  282. package/types/listeners/node.d.ts +22 -0
  283. package/types/listeners/types.d.ts +4 -0
  284. package/types/logger/browser/DebugLogger.d.ts +2 -0
  285. package/types/logger/browser/ErrorLogger.d.ts +2 -0
  286. package/types/logger/browser/InfoLogger.d.ts +2 -0
  287. package/types/logger/browser/WarnLogger.d.ts +2 -0
  288. package/types/logger/constants.d.ts +142 -0
  289. package/types/logger/index.d.ts +22 -0
  290. package/types/logger/messages/debug.d.ts +1 -0
  291. package/types/logger/messages/error.d.ts +1 -0
  292. package/types/logger/messages/info.d.ts +1 -0
  293. package/types/logger/messages/warn.d.ts +1 -0
  294. package/types/logger/sdkLogger.d.ts +8 -0
  295. package/types/logger/types.d.ts +17 -0
  296. package/types/readiness/constants.d.ts +7 -0
  297. package/types/readiness/readinessManager.d.ts +6 -0
  298. package/types/readiness/sdkReadinessManager.d.ts +11 -0
  299. package/types/readiness/types.d.ts +60 -0
  300. package/types/sdkClient/client.d.ts +6 -0
  301. package/types/sdkClient/clientAttributesDecoration.d.ts +51 -0
  302. package/types/sdkClient/clientCS.d.ts +10 -0
  303. package/types/sdkClient/clientInputValidation.d.ts +7 -0
  304. package/types/sdkClient/sdkClient.d.ts +6 -0
  305. package/types/sdkClient/sdkClientMethod.d.ts +6 -0
  306. package/types/sdkClient/sdkClientMethodCS.d.ts +7 -0
  307. package/types/sdkClient/sdkClientMethodCSWithTT.d.ts +8 -0
  308. package/types/sdkClient/types.d.ts +18 -0
  309. package/types/sdkFactory/index.d.ts +6 -0
  310. package/types/sdkFactory/types.d.ts +82 -0
  311. package/types/sdkManager/index.d.ts +5 -0
  312. package/types/services/splitApi.d.ts +11 -0
  313. package/types/services/splitHttpClient.d.ts +10 -0
  314. package/types/services/types.d.ts +54 -0
  315. package/types/storages/AbstractSegmentsCacheSync.d.ts +55 -0
  316. package/types/storages/AbstractSplitsCacheAsync.d.ts +37 -0
  317. package/types/storages/AbstractSplitsCacheSync.d.ts +42 -0
  318. package/types/storages/KeyBuilder.d.ts +14 -0
  319. package/types/storages/KeyBuilderCS.d.ts +16 -0
  320. package/types/storages/KeyBuilderSS.d.ts +17 -0
  321. package/types/storages/dataLoader.d.ts +10 -0
  322. package/types/storages/findLatencyIndex.d.ts +7 -0
  323. package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +25 -0
  324. package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +51 -0
  325. package/types/storages/inLocalStorage/constants.d.ts +2 -0
  326. package/types/storages/inLocalStorage/index.d.ts +8 -0
  327. package/types/storages/inMemory/AttributesCacheInMemory.d.ts +43 -0
  328. package/types/storages/inMemory/CountsCacheInMemory.d.ts +20 -0
  329. package/types/storages/inMemory/EventsCacheInMemory.d.ts +35 -0
  330. package/types/storages/inMemory/ImpressionCountsCacheInMemory.d.ts +28 -0
  331. package/types/storages/inMemory/ImpressionsCacheInMemory.d.ts +30 -0
  332. package/types/storages/inMemory/InMemoryStorage.d.ts +10 -0
  333. package/types/storages/inMemory/InMemoryStorageCS.d.ts +10 -0
  334. package/types/storages/inMemory/LatenciesCacheInMemory.d.ts +20 -0
  335. package/types/storages/inMemory/MySegmentsCacheInMemory.d.ts +22 -0
  336. package/types/storages/inMemory/SegmentsCacheInMemory.d.ts +19 -0
  337. package/types/storages/inMemory/SplitsCacheInMemory.d.ts +21 -0
  338. package/types/storages/inMemory/TelemetryCacheInMemory.d.ts +53 -0
  339. package/types/storages/inMemory/uniqueKeysCacheInMemory.d.ts +35 -0
  340. package/types/storages/inMemory/uniqueKeysCacheInMemoryCS.d.ts +37 -0
  341. package/types/storages/inRedis/CountsCacheInRedis.d.ts +9 -0
  342. package/types/storages/inRedis/EventsCacheInRedis.d.ts +32 -0
  343. package/types/storages/inRedis/ImpressionCountsCacheInRedis.d.ts +14 -0
  344. package/types/storages/inRedis/ImpressionsCacheInRedis.d.ts +18 -0
  345. package/types/storages/inRedis/LatenciesCacheInRedis.d.ts +9 -0
  346. package/types/storages/inRedis/RedisAdapter.d.ts +24 -0
  347. package/types/storages/inRedis/SegmentsCacheInRedis.d.ts +18 -0
  348. package/types/storages/inRedis/SplitsCacheInRedis.d.ts +92 -0
  349. package/types/storages/inRedis/TelemetryCacheInRedis.d.ts +20 -0
  350. package/types/storages/inRedis/constants.d.ts +4 -0
  351. package/types/storages/inRedis/index.d.ts +10 -0
  352. package/types/storages/inRedis/uniqueKeysCacheInRedis.d.ts +15 -0
  353. package/types/storages/metadataBuilder.d.ts +3 -0
  354. package/types/storages/pluggable/EventsCachePluggable.d.ts +38 -0
  355. package/types/storages/pluggable/ImpressionsCachePluggable.d.ts +35 -0
  356. package/types/storages/pluggable/SegmentsCachePluggable.d.ts +54 -0
  357. package/types/storages/pluggable/SplitsCachePluggable.d.ts +90 -0
  358. package/types/storages/pluggable/TelemetryCachePluggable.d.ts +18 -0
  359. package/types/storages/pluggable/constants.d.ts +1 -0
  360. package/types/storages/pluggable/inMemoryWrapper.d.ts +13 -0
  361. package/types/storages/pluggable/index.d.ts +9 -0
  362. package/types/storages/pluggable/wrapperAdapter.d.ts +12 -0
  363. package/types/storages/types.d.ts +417 -0
  364. package/types/sync/offline/LocalhostFromFile.d.ts +2 -0
  365. package/types/sync/offline/LocalhostFromObject.d.ts +2 -0
  366. package/types/sync/offline/splitsParser/parseCondition.d.ts +7 -0
  367. package/types/sync/offline/splitsParser/splitsParserFromFile.d.ts +2 -0
  368. package/types/sync/offline/splitsParser/splitsParserFromSettings.d.ts +3 -0
  369. package/types/sync/offline/splitsParser/types.d.ts +3 -0
  370. package/types/sync/offline/syncManagerOffline.d.ts +10 -0
  371. package/types/sync/offline/syncTasks/fromObjectSyncTask.d.ts +17 -0
  372. package/types/sync/polling/fetchers/mySegmentsFetcher.d.ts +7 -0
  373. package/types/sync/polling/fetchers/segmentChangesFetcher.d.ts +7 -0
  374. package/types/sync/polling/fetchers/splitChangesFetcher.d.ts +7 -0
  375. package/types/sync/polling/fetchers/types.d.ts +5 -0
  376. package/types/sync/polling/pollingManagerCS.d.ts +7 -0
  377. package/types/sync/polling/pollingManagerSS.d.ts +6 -0
  378. package/types/sync/polling/syncTasks/mySegmentsSyncTask.d.ts +9 -0
  379. package/types/sync/polling/syncTasks/segmentsSyncTask.d.ts +9 -0
  380. package/types/sync/polling/syncTasks/splitsSyncTask.d.ts +9 -0
  381. package/types/sync/polling/types.d.ts +26 -0
  382. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +13 -0
  383. package/types/sync/polling/updaters/segmentChangesUpdater.d.ts +18 -0
  384. package/types/sync/polling/updaters/splitChangesUpdater.d.ts +39 -0
  385. package/types/sync/streaming/AuthClient/index.d.ts +12 -0
  386. package/types/sync/streaming/AuthClient/types.d.ts +17 -0
  387. package/types/sync/streaming/SSEClient/index.d.ts +34 -0
  388. package/types/sync/streaming/SSEClient/types.d.ts +11 -0
  389. package/types/sync/streaming/SSEHandler/NotificationKeeper.d.ts +14 -0
  390. package/types/sync/streaming/SSEHandler/NotificationParser.d.ts +20 -0
  391. package/types/sync/streaming/SSEHandler/index.d.ts +11 -0
  392. package/types/sync/streaming/SSEHandler/types.d.ts +67 -0
  393. package/types/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.d.ts +6 -0
  394. package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +8 -0
  395. package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +12 -0
  396. package/types/sync/streaming/UpdateWorkers/constants.d.ts +3 -0
  397. package/types/sync/streaming/UpdateWorkers/types.d.ts +4 -0
  398. package/types/sync/streaming/constants.d.ts +34 -0
  399. package/types/sync/streaming/mySegmentsV2utils.d.ts +27 -0
  400. package/types/sync/streaming/pushManager.d.ts +9 -0
  401. package/types/sync/streaming/types.d.ts +35 -0
  402. package/types/sync/submitters/eventsSubmitter.d.ts +5 -0
  403. package/types/sync/submitters/eventsSyncTask.d.ts +8 -0
  404. package/types/sync/submitters/impressionCountsSubmitter.d.ts +10 -0
  405. package/types/sync/submitters/impressionCountsSubmitterInRedis.d.ts +5 -0
  406. package/types/sync/submitters/impressionCountsSyncTask.d.ts +13 -0
  407. package/types/sync/submitters/impressionsSubmitter.d.ts +11 -0
  408. package/types/sync/submitters/impressionsSyncTask.d.ts +14 -0
  409. package/types/sync/submitters/metricsSyncTask.d.ts +12 -0
  410. package/types/sync/submitters/submitter.d.ts +12 -0
  411. package/types/sync/submitters/submitterManager.d.ts +3 -0
  412. package/types/sync/submitters/submitterSyncTask.d.ts +10 -0
  413. package/types/sync/submitters/telemetrySubmitter.d.ts +25 -0
  414. package/types/sync/submitters/types.d.ts +194 -0
  415. package/types/sync/submitters/uniqueKeysSubmitter.d.ts +5 -0
  416. package/types/sync/submitters/uniqueKeysSubmitterInRedis.d.ts +5 -0
  417. package/types/sync/syncManagerOnline.d.ts +13 -0
  418. package/types/sync/syncTask.d.ts +13 -0
  419. package/types/sync/syncTaskComposite.d.ts +5 -0
  420. package/types/sync/types.d.ts +43 -0
  421. package/types/trackers/eventTracker.d.ts +10 -0
  422. package/types/trackers/filter/bloomFilter.d.ts +10 -0
  423. package/types/trackers/filter/dictionaryFilter.d.ts +8 -0
  424. package/types/trackers/filter/types.d.ts +5 -0
  425. package/types/trackers/impressionObserver/ImpressionObserver.d.ts +8 -0
  426. package/types/trackers/impressionObserver/buildKey.d.ts +2 -0
  427. package/types/trackers/impressionObserver/impressionObserverCS.d.ts +4 -0
  428. package/types/trackers/impressionObserver/impressionObserverSS.d.ts +4 -0
  429. package/types/trackers/impressionObserver/types.d.ts +4 -0
  430. package/types/trackers/impressionObserver/utils.d.ts +13 -0
  431. package/types/trackers/impressionsTracker.d.ts +13 -0
  432. package/types/trackers/strategy/strategyDebug.d.ts +9 -0
  433. package/types/trackers/strategy/strategyNone.d.ts +10 -0
  434. package/types/trackers/strategy/strategyOptimized.d.ts +11 -0
  435. package/types/trackers/telemetryTracker.d.ts +3 -0
  436. package/types/trackers/types.d.ts +63 -0
  437. package/types/trackers/uniqueKeysTracker.d.ts +13 -0
  438. package/types/types.d.ts +1265 -0
  439. package/types/utils/Backoff.d.ts +25 -0
  440. package/types/utils/LRUCache/LinkedList.d.ts +34 -0
  441. package/types/utils/LRUCache/index.d.ts +16 -0
  442. package/types/utils/MinEventEmitter.d.ts +12 -0
  443. package/types/utils/MinEvents.d.ts +4 -0
  444. package/types/utils/base64/index.d.ts +30 -0
  445. package/types/utils/constants/browser.d.ts +3 -0
  446. package/types/utils/constants/index.d.ts +64 -0
  447. package/types/utils/decompress/index.d.ts +16 -0
  448. package/types/utils/env/isLocalStorageAvailable.d.ts +1 -0
  449. package/types/utils/env/isNode.d.ts +5 -0
  450. package/types/utils/inputValidation/apiKey.d.ts +7 -0
  451. package/types/utils/inputValidation/attribute.d.ts +2 -0
  452. package/types/utils/inputValidation/attributes.d.ts +4 -0
  453. package/types/utils/inputValidation/event.d.ts +2 -0
  454. package/types/utils/inputValidation/eventProperties.d.ts +6 -0
  455. package/types/utils/inputValidation/eventValue.d.ts +2 -0
  456. package/types/utils/inputValidation/index.d.ts +13 -0
  457. package/types/utils/inputValidation/isOperational.d.ts +4 -0
  458. package/types/utils/inputValidation/key.d.ts +3 -0
  459. package/types/utils/inputValidation/preloadedData.d.ts +3 -0
  460. package/types/utils/inputValidation/split.d.ts +2 -0
  461. package/types/utils/inputValidation/splitExistance.d.ts +7 -0
  462. package/types/utils/inputValidation/splits.d.ts +2 -0
  463. package/types/utils/inputValidation/trafficType.d.ts +2 -0
  464. package/types/utils/inputValidation/trafficTypeExistance.d.ts +9 -0
  465. package/types/utils/jwt/index.d.ts +5 -0
  466. package/types/utils/jwt/types.d.ts +5 -0
  467. package/types/utils/key/index.d.ts +8 -0
  468. package/types/utils/labels/index.d.ts +7 -0
  469. package/types/utils/lang/binarySearch.d.ts +9 -0
  470. package/types/utils/lang/getFnName.d.ts +4 -0
  471. package/types/utils/lang/getGlobal.d.ts +4 -0
  472. package/types/utils/lang/index.d.ts +105 -0
  473. package/types/utils/lang/maps.d.ts +55 -0
  474. package/types/utils/lang/objectAssign.d.ts +3 -0
  475. package/types/utils/lang/sets.d.ts +60 -0
  476. package/types/utils/murmur3/common.d.ts +12 -0
  477. package/types/utils/murmur3/legacy.d.ts +2 -0
  478. package/types/utils/murmur3/murmur3.d.ts +2 -0
  479. package/types/utils/murmur3/murmur3_128.d.ts +6 -0
  480. package/types/utils/murmur3/murmur3_128_x86.d.ts +7 -0
  481. package/types/utils/murmur3/murmur3_64.d.ts +10 -0
  482. package/types/utils/murmur3/utfx.d.ts +27 -0
  483. package/types/utils/promise/thenable.d.ts +1 -0
  484. package/types/utils/promise/timeout.d.ts +1 -0
  485. package/types/utils/promise/wrapper.d.ts +21 -0
  486. package/types/utils/settingsValidation/consent.d.ts +6 -0
  487. package/types/utils/settingsValidation/impressionsMode.d.ts +3 -0
  488. package/types/utils/settingsValidation/index.d.ts +52 -0
  489. package/types/utils/settingsValidation/integrations/common.d.ts +14 -0
  490. package/types/utils/settingsValidation/integrations/configurable.d.ts +13 -0
  491. package/types/utils/settingsValidation/integrations/pluggable.d.ts +13 -0
  492. package/types/utils/settingsValidation/localhost/builtin.d.ts +16 -0
  493. package/types/utils/settingsValidation/localhost/pluggable.d.ts +16 -0
  494. package/types/utils/settingsValidation/logger/builtinLogger.d.ts +10 -0
  495. package/types/utils/settingsValidation/logger/commons.d.ts +9 -0
  496. package/types/utils/settingsValidation/logger/pluggableLogger.d.ts +11 -0
  497. package/types/utils/settingsValidation/mode.d.ts +1 -0
  498. package/types/utils/settingsValidation/runtime.d.ts +2 -0
  499. package/types/utils/settingsValidation/splitFilters.d.ts +16 -0
  500. package/types/utils/settingsValidation/storage/storageCS.d.ts +21 -0
  501. package/types/utils/settingsValidation/types.d.ts +32 -0
  502. package/types/utils/settingsValidation/url.d.ts +10 -0
  503. package/types/utils/time/index.d.ts +4 -0
  504. package/types/utils/timeTracker/index.d.ts +70 -0
  505. package/types/utils/timeTracker/now/browser.d.ts +1 -0
  506. package/types/utils/timeTracker/now/node.d.ts +1 -0
  507. package/types/utils/timeTracker/timer.d.ts +1 -0
  508. package/src/logger/.DS_Store +0 -0
  509. package/src/types.d.ts +0 -1581
@@ -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 '../../types';
4
+ import { ILogger } from '../../logger/types';
5
5
  import { ISplit } from '../../dtos/types';
6
6
  import { LOG_PREFIX } from './constants';
7
7
  import { AbstractSplitsCacheAsync } from '../AbstractSplitsCacheAsync';
@@ -49,22 +49,22 @@ export class SplitsCachePluggable extends AbstractSplitsCacheAsync {
49
49
  * The returned promise is resolved when the operation success
50
50
  * or rejected if it fails (e.g., wrapper operation fails)
51
51
  */
52
- addSplit(name: string, split: string): Promise<boolean> {
52
+ addSplit(name: string, split: ISplit): Promise<boolean> {
53
53
  const splitKey = this.keys.buildSplitKey(name);
54
54
  return this.wrapper.get(splitKey).then(splitFromStorage => {
55
55
 
56
56
  // handling parsing error
57
- let parsedPreviousSplit, parsedSplit;
57
+ let parsedPreviousSplit, stringifiedNewSplit;
58
58
  try {
59
59
  parsedPreviousSplit = splitFromStorage ? JSON.parse(splitFromStorage) : undefined;
60
- parsedSplit = JSON.parse(split);
60
+ stringifiedNewSplit = JSON.stringify(split);
61
61
  } catch (e) {
62
62
  throw new Error('Error parsing split definition: ' + e);
63
63
  }
64
64
 
65
65
  return Promise.all([
66
- this.wrapper.set(splitKey, split),
67
- this._incrementCounts(parsedSplit),
66
+ this.wrapper.set(splitKey, stringifiedNewSplit),
67
+ this._incrementCounts(split),
68
68
  // If it's an update, we decrement the traffic type and segment count of the existing split,
69
69
  parsedPreviousSplit && this._decrementCounts(parsedPreviousSplit)
70
70
  ]);
@@ -76,7 +76,7 @@ export class SplitsCachePluggable extends AbstractSplitsCacheAsync {
76
76
  * The returned promise is resolved when the operation success
77
77
  * or rejected if it fails (e.g., wrapper operation fails)
78
78
  */
79
- addSplits(entries: [string, string][]): Promise<boolean[]> {
79
+ addSplits(entries: [string, ISplit][]): Promise<boolean[]> {
80
80
  return Promise.all(entries.map(keyValuePair => this.addSplit(keyValuePair[0], keyValuePair[1])));
81
81
  }
82
82
 
@@ -88,8 +88,7 @@ export class SplitsCachePluggable extends AbstractSplitsCacheAsync {
88
88
  removeSplit(name: string) {
89
89
  return this.getSplit(name).then((split) => {
90
90
  if (split) {
91
- const parsedSplit = JSON.parse(split);
92
- this._decrementCounts(parsedSplit);
91
+ this._decrementCounts(split);
93
92
  }
94
93
  return this.wrapper.del(this.keys.buildSplitKey(name));
95
94
  });
@@ -109,8 +108,9 @@ export class SplitsCachePluggable extends AbstractSplitsCacheAsync {
109
108
  * The returned promise is resolved with the split definition or null if it's not defined,
110
109
  * or rejected if wrapper operation fails.
111
110
  */
112
- getSplit(name: string): Promise<string | null> {
113
- return this.wrapper.get(this.keys.buildSplitKey(name));
111
+ getSplit(name: string): Promise<ISplit | null> {
112
+ return this.wrapper.get(this.keys.buildSplitKey(name))
113
+ .then(maybeSplit => maybeSplit && JSON.parse(maybeSplit));
114
114
  }
115
115
 
116
116
  /**
@@ -118,13 +118,14 @@ export class SplitsCachePluggable extends AbstractSplitsCacheAsync {
118
118
  * The returned promise is resolved with a map of split names to their split definition or null if it's not defined,
119
119
  * or rejected if wrapper operation fails.
120
120
  */
121
- getSplits(names: string[]): Promise<Record<string, string | null>> {
121
+ getSplits(names: string[]): Promise<Record<string, ISplit | null>> {
122
122
  const keys = names.map(name => this.keys.buildSplitKey(name));
123
123
 
124
124
  return this.wrapper.getMany(keys).then(splitDefinitions => {
125
- const splits: Record<string, string | null> = {};
125
+ const splits: Record<string, ISplit | null> = {};
126
126
  names.forEach((name, idx) => {
127
- splits[name] = splitDefinitions[idx];
127
+ const split = splitDefinitions[idx];
128
+ splits[name] = split && JSON.parse(split);
128
129
  });
129
130
  return Promise.resolve(splits);
130
131
  });
@@ -135,10 +136,12 @@ export class SplitsCachePluggable extends AbstractSplitsCacheAsync {
135
136
  * The returned promise is resolved with the list of split definitions,
136
137
  * or rejected if wrapper operation fails.
137
138
  */
138
- getAll(): Promise<string[]> {
139
- return this.wrapper.getKeysByPrefix(this.keys.buildSplitKeyPrefix()).then(
140
- (listOfKeys) => Promise.all(listOfKeys.map(this.wrapper.get) as Promise<string>[])
141
- );
139
+ getAll(): Promise<ISplit[]> {
140
+ return this.wrapper.getKeysByPrefix(this.keys.buildSplitKeyPrefix())
141
+ .then((listOfKeys) => this.wrapper.getMany(listOfKeys))
142
+ .then((splitDefinitions) => splitDefinitions.map((splitDefinition) => {
143
+ return JSON.parse(splitDefinition as string);
144
+ }));
142
145
  }
143
146
 
144
147
  /**
@@ -1,4 +1,4 @@
1
- import { ILogger } from '../../types';
1
+ import { ILogger } from '../../logger/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, IStorageFactoryParams } from '../types';
2
- import { StorageAsyncFactory } from '../../types';
1
+ import { IPluggableStorageWrapper, IStorageAsync, IStorageAsyncFactory, IStorageFactoryParams } from '../types';
2
+
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): StorageAsyncFactory {
61
+ export function PluggableStorage(options: PluggableStorageOptions): IStorageAsyncFactory {
62
62
 
63
63
  validatePluggableStorageOptions(options);
64
64
 
@@ -1,4 +1,4 @@
1
- import { ILogger } from '../../types';
1
+ import { ILogger } from '../../logger/types';
2
2
  import { IPluggableStorageWrapper } from '../types';
3
3
  import { LOG_PREFIX } from './constants';
4
4
 
@@ -1,6 +1,7 @@
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';
1
+ import { MaybeThenable, IMetadata, ISplitFiltersValidation, ISplit } 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';
4
5
 
5
6
  /**
6
7
  * Interface of a pluggable storage wrapper.
@@ -190,14 +191,14 @@ export interface IPluggableStorageWrapper {
190
191
  /** Splits cache */
191
192
 
192
193
  export interface ISplitsCacheBase {
193
- addSplits(entries: [string, string][]): MaybeThenable<boolean[] | void>,
194
+ addSplits(entries: [string, ISplit][]): MaybeThenable<boolean[] | void>,
194
195
  removeSplits(names: string[]): MaybeThenable<boolean[] | void>,
195
- getSplit(name: string): MaybeThenable<string | null>,
196
- getSplits(names: string[]): MaybeThenable<Record<string, string | null>>, // `fetchMany` in spec
196
+ getSplit(name: string): MaybeThenable<ISplit | null>,
197
+ getSplits(names: string[]): MaybeThenable<Record<string, ISplit | null>>, // `fetchMany` in spec
197
198
  setChangeNumber(changeNumber: number): MaybeThenable<boolean | void>,
198
199
  // should never reject or throw an exception. Instead return -1 by default, assuming no splits are present in the storage.
199
200
  getChangeNumber(): MaybeThenable<number>,
200
- getAll(): MaybeThenable<string[]>,
201
+ getAll(): MaybeThenable<ISplit[]>,
201
202
  getSplitNames(): MaybeThenable<string[]>,
202
203
  // should never reject or throw an exception. Instead return true by default, asssuming the TT might exist.
203
204
  trafficTypeExists(trafficType: string): MaybeThenable<boolean>,
@@ -210,13 +211,13 @@ export interface ISplitsCacheBase {
210
211
  }
211
212
 
212
213
  export interface ISplitsCacheSync extends ISplitsCacheBase {
213
- addSplits(entries: [string, string][]): boolean[],
214
+ addSplits(entries: [string, ISplit][]): boolean[],
214
215
  removeSplits(names: string[]): boolean[],
215
- getSplit(name: string): string | null,
216
- getSplits(names: string[]): Record<string, string | null>,
216
+ getSplit(name: string): ISplit | null,
217
+ getSplits(names: string[]): Record<string, ISplit | null>,
217
218
  setChangeNumber(changeNumber: number): boolean,
218
219
  getChangeNumber(): number,
219
- getAll(): string[],
220
+ getAll(): ISplit[],
220
221
  getSplitNames(): string[],
221
222
  trafficTypeExists(trafficType: string): boolean,
222
223
  usesSegments(): boolean,
@@ -226,13 +227,13 @@ export interface ISplitsCacheSync extends ISplitsCacheBase {
226
227
  }
227
228
 
228
229
  export interface ISplitsCacheAsync extends ISplitsCacheBase {
229
- addSplits(entries: [string, string][]): Promise<boolean[] | void>,
230
+ addSplits(entries: [string, ISplit][]): Promise<boolean[] | void>,
230
231
  removeSplits(names: string[]): Promise<boolean[] | void>,
231
- getSplit(name: string): Promise<string | null>,
232
- getSplits(names: string[]): Promise<Record<string, string | null>>,
232
+ getSplit(name: string): Promise<ISplit | null>,
233
+ getSplits(names: string[]): Promise<Record<string, ISplit | null>>,
233
234
  setChangeNumber(changeNumber: number): Promise<boolean | void>,
234
235
  getChangeNumber(): Promise<number>,
235
- getAll(): Promise<string[]>,
236
+ getAll(): Promise<ISplit[]>,
236
237
  getSplitNames(): Promise<string[]>,
237
238
  trafficTypeExists(trafficType: string): Promise<boolean>,
238
239
  usesSegments(): Promise<boolean>,
@@ -288,7 +289,7 @@ export interface IImpressionsCacheBase {
288
289
 
289
290
  export interface IEventsCacheBase {
290
291
  // Consumer API method, used by events tracker, in standalone and consumer modes, to push events into the storage.
291
- track(data: EventData, size?: number): MaybeThenable<boolean>
292
+ track(data: SplitIO.EventData, size?: number): MaybeThenable<boolean>
292
293
  }
293
294
 
294
295
  /** Impressions and events cache for standalone mode (sync) */
@@ -311,8 +312,8 @@ export interface IImpressionsCacheSync extends IImpressionsCacheBase, IRecorderC
311
312
  setOnFullQueueCb(cb: () => void): void
312
313
  }
313
314
 
314
- export interface IEventsCacheSync extends IEventsCacheBase, IRecorderCacheProducerSync<EventData[]> {
315
- track(data: EventData, size?: number): boolean
315
+ export interface IEventsCacheSync extends IEventsCacheBase, IRecorderCacheProducerSync<SplitIO.EventData[]> {
316
+ track(data: SplitIO.EventData, size?: number): boolean
316
317
  /* Registers callback for full queue */
317
318
  setOnFullQueueCb(cb: () => void): void
318
319
  }
@@ -338,7 +339,7 @@ export interface IImpressionsCacheAsync extends IImpressionsCacheBase, IRecorder
338
339
  export interface IEventsCacheAsync extends IEventsCacheBase, IRecorderCacheProducerAsync<StoredEventWithMetadata[]> {
339
340
  // Consumer API method, used by events tracker (in standalone and consumer modes) to push data into.
340
341
  // The result promise cannot reject.
341
- track(data: EventData, size?: number): Promise<boolean>
342
+ track(data: SplitIO.EventData, size?: number): Promise<boolean>
342
343
  }
343
344
 
344
345
  /**
@@ -346,14 +347,25 @@ export interface IEventsCacheAsync extends IEventsCacheBase, IRecorderCacheProdu
346
347
  * Only in memory. Named `ImpressionsCounter` in spec.
347
348
  */
348
349
  export interface IImpressionCountsCacheSync extends IRecorderCacheProducerSync<Record<string, number>> {
349
- // Used by impressions tracker
350
+ // Used by impressions tracker
350
351
  track(featureName: string, timeFrame: number, amount: number): void
351
352
 
352
353
  // Used by impressions count submitter in standalone and producer mode
353
354
  isEmpty(): boolean // check if cache is empty. Return true if the cache was just created or cleared.
354
- pop(toMerge?: Record<string, number>): Record<string, number> // pop cache data
355
+ pop(toMerge?: Record<string, number> ): Record<string, number> // pop cache data
355
356
  }
356
357
 
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
+ }
357
369
 
358
370
  /**
359
371
  * Telemetry storage interface for standalone and partial consumer modes.
@@ -443,15 +455,18 @@ export interface IStorageBase<
443
455
  TSplitsCache extends ISplitsCacheBase,
444
456
  TSegmentsCache extends ISegmentsCacheBase,
445
457
  TImpressionsCache extends IImpressionsCacheBase,
458
+ TImpressionsCountCache extends IImpressionCountsCacheSync,
446
459
  TEventsCache extends IEventsCacheBase,
447
- TTelemetryCache extends ITelemetryCacheSync | ITelemetryCacheAsync
460
+ TTelemetryCache extends ITelemetryCacheSync | ITelemetryCacheAsync,
461
+ TUniqueKeysCache extends IUniqueKeysCacheBase
448
462
  > {
449
463
  splits: TSplitsCache,
450
464
  segments: TSegmentsCache,
451
465
  impressions: TImpressionsCache,
452
- impressionCounts?: IImpressionCountsCacheSync,
466
+ impressionCounts?: TImpressionsCountCache,
453
467
  events: TEventsCache,
454
- telemetry?: TTelemetryCache
468
+ telemetry?: TTelemetryCache,
469
+ uniqueKeys?: TUniqueKeysCache,
455
470
  destroy(): void | Promise<void>,
456
471
  shared?: (matchingKey: string, onReadyCb: (error?: any) => void) => this
457
472
  }
@@ -460,16 +475,20 @@ export interface IStorageSync extends IStorageBase<
460
475
  ISplitsCacheSync,
461
476
  ISegmentsCacheSync,
462
477
  IImpressionsCacheSync,
478
+ IImpressionCountsCacheSync,
463
479
  IEventsCacheSync,
464
- ITelemetryCacheSync
480
+ ITelemetryCacheSync,
481
+ IUniqueKeysCacheBase
465
482
  > { }
466
483
 
467
484
  export interface IStorageAsync extends IStorageBase<
468
485
  ISplitsCacheAsync,
469
486
  ISegmentsCacheAsync,
470
487
  IImpressionsCacheAsync | IImpressionsCacheSync,
488
+ IImpressionCountsCacheSync,
471
489
  IEventsCacheAsync | IEventsCacheSync,
472
- ITelemetryCacheAsync
490
+ ITelemetryCacheAsync,
491
+ IUniqueKeysCacheBase
473
492
  > { }
474
493
 
475
494
  /** StorageFactory */
@@ -479,10 +498,14 @@ export type DataLoader = (storage: IStorageSync, matchingKey: string) => void
479
498
  export interface IStorageFactoryParams {
480
499
  log: ILogger,
481
500
  impressionsQueueSize?: number,
501
+ impressionCountsQueueSize?: number,
502
+ impressionCountsRefreshRate?: number,
503
+ uniqueKeysRefreshRate?: number,
504
+ uniqueKeysCacheSize?: number,
482
505
  eventsQueueSize?: number,
483
506
  optimize?: boolean /* whether create the `impressionCounts` cache (OPTIMIZED impression mode) or not (DEBUG impression mode) */,
484
507
  mode: SDKMode,
485
-
508
+ impressionsMode?: string,
486
509
  // ATM, only used by InLocalStorage
487
510
  matchingKey?: string, /* undefined on server-side SDKs */
488
511
  splitFiltersValidation?: ISplitFiltersValidation,
@@ -494,39 +517,14 @@ export interface IStorageFactoryParams {
494
517
  metadata: IMetadata,
495
518
  }
496
519
 
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
- },
520
+ export type StorageType = 'MEMORY' | 'LOCALSTORAGE' | 'REDIS' | 'PLUGGABLE';
521
+
522
+ export type IStorageSyncFactory = {
523
+ readonly type: StorageType,
524
+ (params: IStorageFactoryParams): IStorageSync
525
+ }
526
+
527
+ export type IStorageAsyncFactory = {
528
+ type: StorageType,
529
+ (params: IStorageFactoryParams): IStorageAsync
532
530
  }
@@ -1,12 +1,12 @@
1
1
  import { splitsParserFromSettingsFactory } from './splitsParser/splitsParserFromSettings';
2
2
  import { syncManagerOfflineFactory } from './syncManagerOffline';
3
- import { LocalhostFactory } from '../../types';
3
+ import { SplitIO } 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: any = syncManagerOfflineFactory(splitsParserFromSettingsFactory);
7
+ const localhostFromObject = syncManagerOfflineFactory(splitsParserFromSettingsFactory) as SplitIO.LocalhostFactory;
8
8
  localhostFromObject.type = 'LocalhostFromObject';
9
9
 
10
- export function LocalhostFromObject() {
11
- return localhostFromObject as LocalhostFactory;
10
+ export function LocalhostFromObject(): SplitIO.LocalhostFactory {
11
+ return localhostFromObject;
12
12
  }
@@ -1,23 +1,23 @@
1
1
  import { ISplitPartial } from '../../../dtos/types';
2
- import { ISettings, MockedFeaturesMap, TreatmentWithConfig } from '../../../types';
2
+ import { ISettings, SplitIO } from '../../../types';
3
3
  import { isObject, forOwn } from '../../../utils/lang';
4
4
  import { parseCondition } from './parseCondition';
5
5
 
6
- function hasTreatmentChanged(prev: string | TreatmentWithConfig, curr: string | TreatmentWithConfig) {
6
+ function hasTreatmentChanged(prev: string | SplitIO.TreatmentWithConfig, curr: string | SplitIO.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 TreatmentWithConfig).treatment || prev.config !== (curr as TreatmentWithConfig).config;
12
+ return prev.treatment !== (curr as SplitIO.TreatmentWithConfig).treatment || prev.config !== (curr as SplitIO.TreatmentWithConfig).config;
13
13
  }
14
14
  }
15
15
 
16
16
  export function splitsParserFromSettingsFactory() {
17
17
 
18
- let previousMock: MockedFeaturesMap = { 'emptyMock': '1' };
18
+ let previousMock: SplitIO.MockedFeaturesMap = { 'emptyMock': '1' };
19
19
 
20
- function mockUpdated(currentData: MockedFeaturesMap) {
20
+ function mockUpdated(currentData: SplitIO.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 MockedFeaturesMap || {};
45
+ const features = settings.features as SplitIO.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 TreatmentWithConfig).treatment;
57
- config = (data as TreatmentWithConfig).config || config;
56
+ treatment = (data as SplitIO.TreatmentWithConfig).treatment;
57
+ config = (data as SplitIO.TreatmentWithConfig).config || config;
58
58
  }
59
59
  const configurations: Record<string, string> = {};
60
60
  if (config !== null) configurations[treatment as string] = config;
@@ -2,7 +2,7 @@ import { forOwn } from '../../../utils/lang';
2
2
  import { IReadinessManager } from '../../../readiness/types';
3
3
  import { ISplitsCacheSync } from '../../../storages/types';
4
4
  import { ISplitsParser } from '../splitsParser/types';
5
- import { ISplitPartial } from '../../../dtos/types';
5
+ import { ISplit, ISplitPartial } from '../../../dtos/types';
6
6
  import { syncTaskFactory } from '../../syncTask';
7
7
  import { ISyncTask } from '../../types';
8
8
  import { ISettings } from '../../../types';
@@ -24,7 +24,7 @@ export function fromObjectUpdaterFactory(
24
24
  let startingUp = true;
25
25
 
26
26
  return function objectUpdater() {
27
- const splits: [string, string][] = [];
27
+ const splits: [string, ISplit][] = [];
28
28
  let loadError = null;
29
29
  let splitsMock: false | Record<string, ISplitPartial> = {};
30
30
  try {
@@ -38,9 +38,8 @@ export function fromObjectUpdaterFactory(
38
38
  log.debug(SYNC_OFFLINE_DATA, [JSON.stringify(splitsMock)]);
39
39
 
40
40
  forOwn(splitsMock, function (val, name) {
41
- splits.push([
42
- name,
43
- JSON.stringify({
41
+ splits.push([ // @ts-ignore Split changeNumber and seed is undefined in localhost mode
42
+ name, {
44
43
  name,
45
44
  status: 'ACTIVE',
46
45
  killed: false,
@@ -49,7 +48,7 @@ export function fromObjectUpdaterFactory(
49
48
  conditions: val.conditions || [],
50
49
  configurations: val.configurations,
51
50
  trafficTypeName: val.trafficTypeName
52
- })
51
+ }
53
52
  ]);
54
53
  });
55
54
 
@@ -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 '../../../types';
6
+ import { ILogger } from '../../../logger/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 '../../../types';
7
+ import { ILogger } from '../../../logger/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 '../../../types';
8
+ import { ILogger } from '../../../logger/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>
@@ -40,7 +40,7 @@ export function parseSegments({ conditions }: ISplit): ISet<string> {
40
40
  }
41
41
 
42
42
  interface ISplitMutations {
43
- added: [string, string][],
43
+ added: [string, ISplit][],
44
44
  removed: string[],
45
45
  segments: string[]
46
46
  }
@@ -54,7 +54,7 @@ export function computeSplitsMutation(entries: ISplit[]): ISplitMutations {
54
54
  const segments = new _Set<string>();
55
55
  const computed = entries.reduce((accum, split) => {
56
56
  if (split.status === 'ACTIVE') {
57
- accum.added.push([split.name, JSON.stringify(split)]);
57
+ accum.added.push([split.name, split]);
58
58
 
59
59
  parseSegments(split).forEach((segmentName: string) => {
60
60
  segments.add(segmentName);
@@ -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 '../../../types';
7
+ import { ILogger } from '../../../logger/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 '../../../types';
1
+ import { ILogger } from '../../../logger/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 '../../../types';
1
+ import { ILogger } from '../../../logger/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 '../../types';
4
+ import { ILogger } from '../../logger/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,6 +4,7 @@ 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';
7
8
 
8
9
  export function submitterManagerFactory(params: ISdkFactoryContextSync): ISubmitterManager {
9
10
 
@@ -15,6 +16,7 @@ export function submitterManagerFactory(params: ISdkFactoryContextSync): ISubmit
15
16
  const impressionCountsSubmitter = impressionCountsSubmitterFactory(params);
16
17
  if (impressionCountsSubmitter) submitters.push(impressionCountsSubmitter);
17
18
  const telemetrySubmitter = telemetrySubmitterFactory(params);
19
+ if (params.uniqueKeysTracker) submitters.push(uniqueKeysSubmitterFactory(params));
18
20
 
19
21
  return {
20
22
  // `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, DEBUG_ENUM, OPTIMIZED_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, NONE, DEBUG_ENUM, OPTIMIZED_ENUM, NONE_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,8 +52,9 @@ const OPERATION_MODE_MAP = {
52
52
 
53
53
  const IMPRESSIONS_MODE_MAP = {
54
54
  [OPTIMIZED]: OPTIMIZED_ENUM,
55
- [DEBUG]: DEBUG_ENUM
56
- } as Record<ISettings['sync']['impressionsMode'], (0 | 1)>;
55
+ [DEBUG]: DEBUG_ENUM,
56
+ [NONE]: NONE_ENUM
57
+ } as Record<ISettings['sync']['impressionsMode'], (0 | 1 | 2)>;
57
58
 
58
59
  const USER_CONSENT_MAP = {
59
60
  [CONSENT_UNKNOWN]: 1,
@@ -1,5 +1,5 @@
1
1
  import { IMetadata } from '../../dtos/types';
2
- import { EventData } from '../../types';
2
+ import { SplitIO } from '../../types';
3
3
  import { ISyncTask } from '../types';
4
4
 
5
5
  export type ImpressionsPayload = {
@@ -35,6 +35,24 @@ 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
+
38
56
  export type StoredImpressionWithMetadata = {
39
57
  /** Metadata */
40
58
  m: IMetadata,
@@ -61,7 +79,7 @@ export type StoredEventWithMetadata = {
61
79
  /** Metadata */
62
80
  m: IMetadata,
63
81
  /** Stored event */
64
- e: EventData
82
+ e: SplitIO.EventData
65
83
  }
66
84
 
67
85
  /**
@@ -148,7 +166,8 @@ export type OperationMode = STANDALONE_ENUM | CONSUMER_ENUM | CONSUMER_PARTIAL_E
148
166
 
149
167
  export type OPTIMIZED_ENUM = 0;
150
168
  export type DEBUG_ENUM = 1;
151
- export type ImpressionsMode = OPTIMIZED_ENUM | DEBUG_ENUM;
169
+ export type NONE_ENUM = 2;
170
+ export type ImpressionsMode = OPTIMIZED_ENUM | DEBUG_ENUM | NONE_ENUM;
152
171
 
153
172
  export type RefreshRates = {
154
173
  sp: number, // splits