@splitsoftware/splitio-commons 1.2.1-rc.1 → 1.2.1-rc.12

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 (289) hide show
  1. package/cjs/consent/index.js +10 -0
  2. package/cjs/consent/sdkUserConsent.js +58 -0
  3. package/cjs/evaluator/Engine.js +6 -6
  4. package/cjs/evaluator/combiners/and.js +1 -1
  5. package/cjs/evaluator/combiners/ifelseif.js +2 -2
  6. package/cjs/evaluator/condition/engineUtils.js +2 -2
  7. package/cjs/evaluator/condition/index.js +4 -4
  8. package/cjs/evaluator/index.js +5 -5
  9. package/cjs/evaluator/matchers/cont_all.js +1 -1
  10. package/cjs/evaluator/matchers/cont_any.js +1 -1
  11. package/cjs/evaluator/matchers/cont_str.js +1 -1
  12. package/cjs/evaluator/matchers/dependency.js +1 -1
  13. package/cjs/evaluator/matchers/eq_set.js +1 -1
  14. package/cjs/evaluator/matchers/ew.js +1 -1
  15. package/cjs/evaluator/matchers/part_of.js +1 -1
  16. package/cjs/evaluator/matchers/segment.js +1 -1
  17. package/cjs/evaluator/matchers/sw.js +1 -1
  18. package/cjs/evaluator/matchers/whitelist.js +1 -1
  19. package/cjs/evaluator/matchersTransform/index.js +12 -12
  20. package/cjs/evaluator/parser/index.js +6 -6
  21. package/cjs/evaluator/treatments/index.js +1 -1
  22. package/cjs/evaluator/value/index.js +1 -1
  23. package/cjs/evaluator/value/sanitize.js +4 -4
  24. package/cjs/integrations/browser.js +3 -3
  25. package/cjs/integrations/ga/GaToSplit.js +14 -14
  26. package/cjs/integrations/ga/GoogleAnalyticsToSplit.js +5 -3
  27. package/cjs/integrations/ga/SplitToGa.js +1 -1
  28. package/cjs/integrations/ga/SplitToGoogleAnalytics.js +4 -2
  29. package/cjs/listeners/browser.js +15 -11
  30. package/cjs/listeners/node.js +1 -1
  31. package/cjs/logger/constants.js +9 -3
  32. package/cjs/logger/index.js +2 -2
  33. package/cjs/logger/messages/debug.js +4 -4
  34. package/cjs/logger/messages/error.js +5 -4
  35. package/cjs/logger/messages/info.js +8 -5
  36. package/cjs/logger/messages/warn.js +1 -1
  37. package/cjs/logger/sdkLogger.js +1 -1
  38. package/cjs/readiness/readinessManager.js +2 -2
  39. package/cjs/readiness/sdkReadinessManager.js +4 -4
  40. package/cjs/sdkClient/client.js +12 -11
  41. package/cjs/sdkClient/clientAttributesDecoration.js +4 -4
  42. package/cjs/sdkClient/clientCS.js +3 -3
  43. package/cjs/sdkClient/clientInputValidation.js +20 -22
  44. package/cjs/sdkClient/sdkClient.js +6 -9
  45. package/cjs/sdkClient/sdkClientMethod.js +1 -1
  46. package/cjs/sdkClient/sdkClientMethodCS.js +7 -13
  47. package/cjs/sdkClient/sdkClientMethodCSWithTT.js +8 -18
  48. package/cjs/sdkFactory/index.js +16 -13
  49. package/cjs/sdkManager/index.js +11 -11
  50. package/cjs/services/splitApi.js +3 -2
  51. package/cjs/services/splitHttpClient.js +2 -2
  52. package/cjs/storages/KeyBuilder.js +2 -6
  53. package/cjs/storages/KeyBuilderCS.js +13 -3
  54. package/cjs/storages/KeyBuilderSS.js +1 -1
  55. package/cjs/storages/findLatencyIndex.js +1 -1
  56. package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +24 -4
  57. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +12 -12
  58. package/cjs/storages/inLocalStorage/index.js +4 -4
  59. package/cjs/storages/inMemory/AttributesCacheInMemory.js +1 -1
  60. package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
  61. package/cjs/storages/inMemory/ImpressionsCacheInMemory.js +15 -1
  62. package/cjs/storages/inMemory/InMemoryStorage.js +1 -1
  63. package/cjs/storages/inMemory/InMemoryStorageCS.js +1 -1
  64. package/cjs/storages/inMemory/LatenciesCacheInMemory.js +1 -1
  65. package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +1 -1
  66. package/cjs/storages/inMemory/SegmentsCacheInMemory.js +2 -2
  67. package/cjs/storages/inMemory/SplitsCacheInMemory.js +5 -5
  68. package/cjs/storages/inRedis/LatenciesCacheInRedis.js +1 -1
  69. package/cjs/storages/inRedis/RedisAdapter.js +24 -11
  70. package/cjs/storages/inRedis/SegmentsCacheInRedis.js +1 -1
  71. package/cjs/storages/inRedis/SplitsCacheInRedis.js +3 -3
  72. package/cjs/storages/inRedis/index.js +1 -1
  73. package/cjs/storages/pluggable/SegmentsCachePluggable.js +1 -1
  74. package/cjs/storages/pluggable/SplitsCachePluggable.js +3 -3
  75. package/cjs/storages/pluggable/inMemoryWrapper.js +4 -4
  76. package/cjs/storages/pluggable/index.js +6 -6
  77. package/cjs/sync/offline/LocalhostFromFile.js +1 -1
  78. package/cjs/sync/offline/LocalhostFromObject.js +1 -1
  79. package/cjs/sync/offline/splitsParser/parseCondition.js +1 -1
  80. package/cjs/sync/offline/splitsParser/splitsParserFromFile.js +13 -13
  81. package/cjs/sync/offline/splitsParser/splitsParserFromSettings.js +3 -3
  82. package/cjs/sync/offline/syncManagerOffline.js +1 -1
  83. package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +2 -2
  84. package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
  85. package/cjs/sync/polling/pollingManagerCS.js +6 -6
  86. package/cjs/sync/polling/pollingManagerSS.js +3 -3
  87. package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +1 -1
  88. package/cjs/sync/polling/syncTasks/segmentsSyncTask.js +1 -1
  89. package/cjs/sync/polling/syncTasks/splitsSyncTask.js +1 -1
  90. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +1 -1
  91. package/cjs/sync/polling/updaters/segmentChangesUpdater.js +2 -2
  92. package/cjs/sync/polling/updaters/splitChangesUpdater.js +2 -2
  93. package/cjs/sync/streaming/AuthClient/index.js +3 -3
  94. package/cjs/sync/streaming/SSEClient/index.js +2 -1
  95. package/cjs/sync/streaming/SSEHandler/NotificationParser.js +1 -1
  96. package/cjs/sync/streaming/SSEHandler/index.js +3 -3
  97. package/cjs/sync/streaming/mySegmentsV2utils.js +1 -1
  98. package/cjs/sync/streaming/pushManager.js +24 -17
  99. package/cjs/sync/submitters/eventsSyncTask.js +17 -5
  100. package/cjs/sync/submitters/impressionCountsSyncTask.js +1 -1
  101. package/cjs/sync/submitters/impressionsSyncTask.js +15 -3
  102. package/cjs/sync/submitters/metricsSyncTask.js +3 -3
  103. package/cjs/sync/submitters/submitterManager.js +4 -4
  104. package/cjs/sync/submitters/submitterSyncTask.js +1 -1
  105. package/cjs/sync/syncManagerOnline.js +12 -8
  106. package/cjs/trackers/eventTracker.js +11 -4
  107. package/cjs/trackers/impressionObserver/impressionObserverCS.js +1 -1
  108. package/cjs/trackers/impressionObserver/impressionObserverSS.js +1 -1
  109. package/cjs/trackers/impressionObserver/utils.js +8 -1
  110. package/cjs/trackers/impressionsTracker.js +9 -8
  111. package/cjs/utils/MinEvents.js +2 -1
  112. package/cjs/utils/constants/index.js +5 -1
  113. package/cjs/utils/inputValidation/apiKey.js +1 -1
  114. package/cjs/utils/inputValidation/attribute.js +4 -4
  115. package/cjs/utils/inputValidation/attributes.js +2 -2
  116. package/cjs/utils/inputValidation/event.js +1 -1
  117. package/cjs/utils/inputValidation/eventProperties.js +5 -5
  118. package/cjs/utils/inputValidation/eventValue.js +1 -1
  119. package/cjs/utils/inputValidation/key.js +6 -5
  120. package/cjs/utils/inputValidation/preloadedData.js +8 -8
  121. package/cjs/utils/inputValidation/split.js +1 -1
  122. package/cjs/utils/inputValidation/splits.js +2 -2
  123. package/cjs/utils/inputValidation/trafficType.js +1 -1
  124. package/cjs/utils/inputValidation/trafficTypeExistance.js +1 -1
  125. package/cjs/utils/jwt/index.js +1 -1
  126. package/cjs/utils/key/index.js +3 -3
  127. package/cjs/utils/lang/index.js +13 -4
  128. package/cjs/utils/lang/maps.js +16 -2
  129. package/cjs/utils/murmur3/common.js +1 -1
  130. package/cjs/utils/murmur3/murmur3.js +10 -10
  131. package/cjs/utils/murmur3/murmur3_128.js +1 -1
  132. package/cjs/utils/murmur3/murmur3_128_x86.js +37 -37
  133. package/cjs/utils/murmur3/murmur3_64.js +1 -1
  134. package/cjs/utils/settingsValidation/consent.js +16 -0
  135. package/cjs/utils/settingsValidation/impressionsMode.js +6 -6
  136. package/cjs/utils/settingsValidation/index.js +32 -14
  137. package/cjs/utils/settingsValidation/integrations/configurable.js +1 -1
  138. package/cjs/utils/settingsValidation/integrations/pluggable.js +1 -1
  139. package/cjs/utils/settingsValidation/localhost/builtin.js +2 -2
  140. package/cjs/utils/settingsValidation/logger/builtinLogger.js +3 -3
  141. package/cjs/utils/settingsValidation/logger/commons.js +1 -1
  142. package/cjs/utils/settingsValidation/logger/pluggableLogger.js +1 -1
  143. package/cjs/utils/settingsValidation/runtime.js +11 -0
  144. package/cjs/utils/settingsValidation/splitFilters.js +1 -1
  145. package/cjs/utils/settingsValidation/storage/storageCS.js +1 -1
  146. package/cjs/utils/timeTracker/index.js +3 -3
  147. package/esm/consent/index.js +6 -0
  148. package/esm/consent/sdkUserConsent.js +54 -0
  149. package/esm/integrations/ga/GoogleAnalyticsToSplit.js +4 -2
  150. package/esm/integrations/ga/SplitToGoogleAnalytics.js +4 -2
  151. package/esm/listeners/browser.js +14 -10
  152. package/esm/logger/constants.js +6 -2
  153. package/esm/logger/messages/debug.js +3 -3
  154. package/esm/logger/messages/error.js +4 -3
  155. package/esm/logger/messages/info.js +7 -4
  156. package/esm/sdkClient/client.js +3 -2
  157. package/esm/sdkClient/clientCS.js +1 -1
  158. package/esm/sdkClient/clientInputValidation.js +6 -8
  159. package/esm/sdkClient/sdkClient.js +4 -7
  160. package/esm/sdkClient/sdkClientMethodCS.js +3 -9
  161. package/esm/sdkClient/sdkClientMethodCSWithTT.js +3 -13
  162. package/esm/sdkFactory/index.js +10 -7
  163. package/esm/services/splitApi.js +2 -1
  164. package/esm/storages/KeyBuilder.js +2 -6
  165. package/esm/storages/KeyBuilderCS.js +11 -1
  166. package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +23 -3
  167. package/esm/storages/inLocalStorage/index.js +1 -1
  168. package/esm/storages/inMemory/ImpressionsCacheInMemory.js +15 -1
  169. package/esm/storages/inMemory/InMemoryStorage.js +1 -1
  170. package/esm/storages/inMemory/InMemoryStorageCS.js +1 -1
  171. package/esm/storages/inRedis/RedisAdapter.js +15 -2
  172. package/esm/storages/pluggable/index.js +2 -2
  173. package/esm/sync/offline/splitsParser/splitsParserFromFile.js +1 -1
  174. package/esm/sync/polling/fetchers/segmentChangesFetcher.js +2 -2
  175. package/esm/sync/streaming/SSEClient/index.js +2 -1
  176. package/esm/sync/streaming/pushManager.js +9 -2
  177. package/esm/sync/submitters/eventsSyncTask.js +18 -6
  178. package/esm/sync/submitters/impressionsSyncTask.js +13 -1
  179. package/esm/sync/syncManagerOnline.js +11 -7
  180. package/esm/trackers/eventTracker.js +8 -1
  181. package/esm/trackers/impressionObserver/utils.js +7 -1
  182. package/esm/trackers/impressionsTracker.js +6 -5
  183. package/esm/utils/constants/index.js +4 -0
  184. package/esm/utils/inputValidation/attributes.js +1 -1
  185. package/esm/utils/inputValidation/key.js +2 -1
  186. package/esm/utils/lang/index.js +12 -4
  187. package/esm/utils/lang/maps.js +14 -1
  188. package/esm/utils/settingsValidation/consent.js +12 -0
  189. package/esm/utils/settingsValidation/impressionsMode.js +7 -7
  190. package/esm/utils/settingsValidation/index.js +28 -10
  191. package/esm/utils/settingsValidation/runtime.js +7 -0
  192. package/package.json +8 -8
  193. package/src/consent/index.ts +8 -0
  194. package/src/consent/sdkUserConsent.ts +58 -0
  195. package/src/evaluator/parser/index.ts +1 -1
  196. package/src/evaluator/types.ts +2 -2
  197. package/src/evaluator/value/index.ts +2 -2
  198. package/src/evaluator/value/sanitize.ts +2 -2
  199. package/src/integrations/ga/GoogleAnalyticsToSplit.ts +7 -4
  200. package/src/integrations/ga/SplitToGoogleAnalytics.ts +7 -4
  201. package/src/integrations/pluggable.ts +2 -2
  202. package/src/integrations/types.ts +5 -0
  203. package/src/listeners/browser.ts +13 -9
  204. package/src/logger/constants.ts +6 -2
  205. package/src/logger/messages/debug.ts +3 -3
  206. package/src/logger/messages/error.ts +4 -3
  207. package/src/logger/messages/info.ts +7 -4
  208. package/src/logger/types.ts +4 -0
  209. package/src/sdkClient/client.ts +5 -5
  210. package/src/sdkClient/clientCS.ts +1 -1
  211. package/src/sdkClient/clientInputValidation.ts +8 -7
  212. package/src/sdkClient/sdkClient.ts +6 -9
  213. package/src/sdkClient/sdkClientMethod.ts +2 -2
  214. package/src/sdkClient/sdkClientMethodCS.ts +5 -11
  215. package/src/sdkClient/sdkClientMethodCSWithTT.ts +6 -16
  216. package/src/sdkFactory/index.ts +11 -8
  217. package/src/sdkFactory/types.ts +14 -3
  218. package/src/storages/KeyBuilder.ts +2 -6
  219. package/src/storages/KeyBuilderCS.ts +13 -1
  220. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +23 -3
  221. package/src/storages/inLocalStorage/index.ts +1 -1
  222. package/src/storages/inMemory/ImpressionsCacheInMemory.ts +22 -1
  223. package/src/storages/inMemory/InMemoryStorage.ts +1 -1
  224. package/src/storages/inMemory/InMemoryStorageCS.ts +1 -1
  225. package/src/storages/inRedis/RedisAdapter.ts +8 -2
  226. package/src/storages/pluggable/index.ts +2 -2
  227. package/src/storages/types.ts +6 -2
  228. package/src/sync/offline/splitsParser/splitsParserFromFile.ts +1 -1
  229. package/src/sync/streaming/SSEClient/index.ts +2 -1
  230. package/src/sync/streaming/pushManager.ts +11 -2
  231. package/src/sync/submitters/eventsSyncTask.ts +19 -6
  232. package/src/sync/submitters/impressionsSyncTask.ts +16 -1
  233. package/src/sync/syncManagerOnline.ts +13 -7
  234. package/src/sync/types.ts +4 -1
  235. package/src/trackers/eventTracker.ts +11 -3
  236. package/src/trackers/impressionObserver/utils.ts +8 -1
  237. package/src/trackers/impressionsTracker.ts +7 -8
  238. package/src/types.ts +22 -1
  239. package/src/utils/constants/index.ts +5 -0
  240. package/src/utils/inputValidation/attributes.ts +1 -2
  241. package/src/utils/lang/index.ts +15 -4
  242. package/src/utils/lang/maps.ts +15 -1
  243. package/src/utils/settingsValidation/consent.ts +16 -0
  244. package/src/utils/settingsValidation/impressionsMode.ts +8 -8
  245. package/src/utils/settingsValidation/index.ts +29 -10
  246. package/src/utils/settingsValidation/runtime.ts +9 -0
  247. package/src/utils/settingsValidation/types.ts +12 -6
  248. package/types/consent/index.d.ts +2 -0
  249. package/types/consent/sdkUserConsent.d.ts +13 -0
  250. package/types/evaluator/types.d.ts +2 -2
  251. package/types/evaluator/value/index.d.ts +1 -1
  252. package/types/evaluator/value/sanitize.d.ts +1 -1
  253. package/types/integrations/ga/GoogleAnalyticsToSplit.d.ts +2 -2
  254. package/types/integrations/ga/SplitToGoogleAnalytics.d.ts +2 -3
  255. package/types/integrations/types.d.ts +4 -0
  256. package/types/logger/constants.d.ts +6 -2
  257. package/types/logger/types.d.ts +4 -0
  258. package/types/sdkClient/client.d.ts +2 -2
  259. package/types/sdkClient/clientAttributesDecoration.d.ts +1 -1
  260. package/types/sdkClient/clientInputValidation.d.ts +2 -3
  261. package/types/sdkClient/sdkClient.d.ts +2 -2
  262. package/types/sdkClient/sdkClientMethod.d.ts +2 -2
  263. package/types/sdkClient/sdkClientMethodCS.d.ts +2 -2
  264. package/types/sdkClient/sdkClientMethodCSWithTT.d.ts +2 -2
  265. package/types/sdkFactory/types.d.ts +12 -3
  266. package/types/sdkFactory/userConsentProps.d.ts +6 -0
  267. package/types/storages/KeyBuilderCS.d.ts +2 -0
  268. package/types/storages/inMemory/ImpressionsCacheInMemory.d.ts +9 -0
  269. package/types/storages/inRedis/RedisAdapter.d.ts +1 -1
  270. package/types/storages/types.d.ts +3 -1
  271. package/types/sync/types.d.ts +3 -0
  272. package/types/trackers/eventTracker.d.ts +2 -2
  273. package/types/trackers/impressionObserver/utils.d.ts +4 -0
  274. package/types/trackers/impressionsTracker.d.ts +2 -3
  275. package/types/types.d.ts +22 -1
  276. package/types/utils/consent.d.ts +2 -0
  277. package/types/utils/constants/index.d.ts +3 -0
  278. package/types/utils/lang/index.d.ts +6 -1
  279. package/types/utils/lang/maps.d.ts +7 -0
  280. package/types/utils/settingsValidation/consent.d.ts +6 -0
  281. package/types/utils/settingsValidation/impressionsMode.d.ts +1 -1
  282. package/types/utils/settingsValidation/runtime/browser.d.ts +2 -0
  283. package/types/utils/settingsValidation/runtime/node.d.ts +2 -0
  284. package/types/utils/settingsValidation/runtime.d.ts +2 -0
  285. package/types/utils/settingsValidation/types.d.ts +12 -6
  286. package/types/utils/settingsValidation/userConsent.d.ts +5 -0
  287. package/cjs/sdkClient/types.js +0 -2
  288. package/esm/sdkClient/types.js +0 -1
  289. package/src/sdkClient/types.ts +0 -21
@@ -19,13 +19,8 @@ var method = 'Client instantiation';
19
19
  */
20
20
  function sdkClientMethodCSFactory(params) {
21
21
  var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, key = _a.core.key, readyTimeout = _a.startup.readyTimeout, log = _a.log;
22
- // Keeping similar behaviour as in the isomorphic JS SDK: if settings key is invalid,
23
- // `false` value is used as binded key of the default client, but trafficType is ignored
24
- // @TODO handle as a non-recoverable error
25
- var validKey = key_1.validateKey(log, key, method);
26
- var mainClientInstance = clientCS_1.clientCSDecorator(log, sdkClient_1.sdkClientFactory(params), // @ts-ignore
27
- validKey);
28
- var parsedDefaultKey = key_2.keyParser(key);
22
+ var mainClientInstance = (0, clientCS_1.clientCSDecorator)(log, (0, sdkClient_1.sdkClientFactory)(params), key);
23
+ var parsedDefaultKey = (0, key_2.keyParser)(key);
29
24
  var defaultInstanceId = buildInstanceId(parsedDefaultKey);
30
25
  // Cache instances created per factory.
31
26
  var clientInstances = {};
@@ -36,13 +31,13 @@ function sdkClientMethodCSFactory(params) {
36
31
  return mainClientInstance;
37
32
  }
38
33
  // Validate the key value. The trafficType (2nd argument) is ignored
39
- var validKey = key_1.validateKey(log, key, method);
34
+ var validKey = (0, key_1.validateKey)(log, key, method);
40
35
  if (validKey === false) {
41
36
  throw new Error('Shared Client needs a valid key.');
42
37
  }
43
38
  var instanceId = buildInstanceId(validKey);
44
39
  if (!clientInstances[instanceId]) {
45
- var matchingKey = key_2.getMatching(validKey);
40
+ var matchingKey = (0, key_2.getMatching)(validKey);
46
41
  var sharedSdkReadiness_1 = sdkReadinessManager.shared(readyTimeout);
47
42
  var sharedStorage = storage.shared && storage.shared(matchingKey, function (err) {
48
43
  if (err)
@@ -58,13 +53,12 @@ function sdkClientMethodCSFactory(params) {
58
53
  var sharedSyncManager = syncManager && sharedStorage && syncManager.shared(matchingKey, sharedSdkReadiness_1.readinessManager, sharedStorage);
59
54
  // As shared clients reuse all the storage information, we don't need to check here if we
60
55
  // will use offline or online mode. We should stick with the original decision.
61
- clientInstances[instanceId] = clientCS_1.clientCSDecorator(log, sdkClient_1.sdkClientFactory(objectAssign_1.objectAssign({}, params, {
56
+ clientInstances[instanceId] = (0, clientCS_1.clientCSDecorator)(log, (0, sdkClient_1.sdkClientFactory)((0, objectAssign_1.objectAssign)({}, params, {
62
57
  sdkReadinessManager: sharedSdkReadiness_1,
63
58
  storage: sharedStorage || storage,
64
59
  syncManager: sharedSyncManager,
65
- signalListener: undefined,
66
- sharedClient: true
67
- })), validKey);
60
+ signalListener: undefined, // only the main client "destroy" method stops the signal listener
61
+ }), true), validKey);
68
62
  sharedSyncManager && sharedSyncManager.start();
69
63
  log.info(constants_1.NEW_SHARED_CLIENT);
70
64
  }
@@ -21,17 +21,8 @@ var method = 'Client instantiation';
21
21
  */
22
22
  function sdkClientMethodCSFactory(params) {
23
23
  var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, _b = _a.core, key = _b.key, trafficType = _b.trafficType, readyTimeout = _a.startup.readyTimeout, log = _a.log;
24
- // Keeping the behaviour as in the isomorphic JS SDK: if settings key or TT are invalid,
25
- // `false` value is used as binded key/TT of the default client, which leads to several issues.
26
- // @TODO update when supporting non-recoverable errors
27
- var validKey = key_1.validateKey(log, key, method);
28
- var validTrafficType;
29
- if (trafficType !== undefined) {
30
- validTrafficType = trafficType_1.validateTrafficType(log, trafficType, method);
31
- }
32
- var mainClientInstance = clientCS_1.clientCSDecorator(log, sdkClient_1.sdkClientFactory(params), // @ts-ignore
33
- validKey, validTrafficType);
34
- var parsedDefaultKey = key_2.keyParser(key);
24
+ var mainClientInstance = (0, clientCS_1.clientCSDecorator)(log, (0, sdkClient_1.sdkClientFactory)(params), key, trafficType);
25
+ var parsedDefaultKey = (0, key_2.keyParser)(key);
35
26
  var defaultInstanceId = buildInstanceId(parsedDefaultKey, trafficType);
36
27
  // Cache instances created per factory.
37
28
  var clientInstances = {};
@@ -42,20 +33,20 @@ function sdkClientMethodCSFactory(params) {
42
33
  return mainClientInstance;
43
34
  }
44
35
  // Validate the key value
45
- var validKey = key_1.validateKey(log, key, "Shared " + method);
36
+ var validKey = (0, key_1.validateKey)(log, key, "Shared " + method);
46
37
  if (validKey === false) {
47
38
  throw new Error('Shared Client needs a valid key.');
48
39
  }
49
40
  var validTrafficType;
50
41
  if (trafficType !== undefined) {
51
- validTrafficType = trafficType_1.validateTrafficType(log, trafficType, "Shared " + method);
42
+ validTrafficType = (0, trafficType_1.validateTrafficType)(log, trafficType, "Shared " + method);
52
43
  if (validTrafficType === false) {
53
44
  throw new Error('Shared Client needs a valid traffic type or no traffic type at all.');
54
45
  }
55
46
  }
56
47
  var instanceId = buildInstanceId(validKey, validTrafficType);
57
48
  if (!clientInstances[instanceId]) {
58
- var matchingKey = key_2.getMatching(validKey);
49
+ var matchingKey = (0, key_2.getMatching)(validKey);
59
50
  var sharedSdkReadiness_1 = sdkReadinessManager.shared(readyTimeout);
60
51
  var sharedStorage = storage.shared && storage.shared(matchingKey, function (err) {
61
52
  if (err)
@@ -71,13 +62,12 @@ function sdkClientMethodCSFactory(params) {
71
62
  var sharedSyncManager = syncManager && sharedStorage && syncManager.shared(matchingKey, sharedSdkReadiness_1.readinessManager, sharedStorage);
72
63
  // As shared clients reuse all the storage information, we don't need to check here if we
73
64
  // will use offline or online mode. We should stick with the original decision.
74
- clientInstances[instanceId] = clientCS_1.clientCSDecorator(log, sdkClient_1.sdkClientFactory(objectAssign_1.objectAssign({}, params, {
65
+ clientInstances[instanceId] = (0, clientCS_1.clientCSDecorator)(log, (0, sdkClient_1.sdkClientFactory)((0, objectAssign_1.objectAssign)({}, params, {
75
66
  sdkReadinessManager: sharedSdkReadiness_1,
76
67
  storage: sharedStorage || storage,
77
68
  syncManager: sharedSyncManager,
78
- signalListener: undefined,
79
- sharedClient: true
80
- })), validKey, validTrafficType);
69
+ signalListener: undefined, // only the main client "destroy" method stops the signal listener
70
+ }), true), validKey, validTrafficType);
81
71
  sharedSyncManager && sharedSyncManager.start();
82
72
  log.info(constants_1.NEW_SHARED_CLIENT);
83
73
  }
@@ -11,24 +11,26 @@ var sdkLogger_1 = require("../logger/sdkLogger");
11
11
  var constants_1 = require("../logger/constants");
12
12
  var metadataBuilder_1 = require("../storages/metadataBuilder");
13
13
  var constants_2 = require("../readiness/constants");
14
+ var objectAssign_1 = require("../utils/lang/objectAssign");
14
15
  /**
15
16
  * Modular SDK factory
16
17
  */
17
18
  function sdkFactory(params) {
18
- var settings = params.settings, platform = params.platform, storageFactory = params.storageFactory, splitApiFactory = params.splitApiFactory, syncManagerFactory = params.syncManagerFactory, SignalListener = params.SignalListener, impressionsObserverFactory = params.impressionsObserverFactory, impressionListener = params.impressionListener, integrationsManagerFactory = params.integrationsManagerFactory, sdkManagerFactory = params.sdkManagerFactory, sdkClientMethodFactory = params.sdkClientMethodFactory;
19
+ var settings = params.settings, platform = params.platform, storageFactory = params.storageFactory, splitApiFactory = params.splitApiFactory, extraProps = params.extraProps, syncManagerFactory = params.syncManagerFactory, SignalListener = params.SignalListener, impressionsObserverFactory = params.impressionsObserverFactory, integrationsManagerFactory = params.integrationsManagerFactory, sdkManagerFactory = params.sdkManagerFactory, sdkClientMethodFactory = params.sdkClientMethodFactory;
19
20
  var log = settings.log;
20
21
  // @TODO handle non-recoverable errors: not start sync, mark the SDK as destroyed, etc.
21
22
  // We will just log and allow for the SDK to end up throwing an SDK_TIMEOUT event for devs to handle.
22
- apiKey_1.validateAndTrackApiKey(log, settings.core.authorizationKey);
23
+ (0, apiKey_1.validateAndTrackApiKey)(log, settings.core.authorizationKey);
23
24
  // @TODO handle non-recoverable error, such as, `fetch` api not available, invalid API Key, etc.
24
- var sdkReadinessManager = sdkReadinessManager_1.sdkReadinessManagerFactory(log, platform.EventEmitter, settings.startup.readyTimeout);
25
+ var sdkReadinessManager = (0, sdkReadinessManager_1.sdkReadinessManagerFactory)(log, platform.EventEmitter, settings.startup.readyTimeout);
25
26
  var readinessManager = sdkReadinessManager.readinessManager;
26
27
  // @TODO consider passing the settings object, so that each storage access only what it needs
27
28
  var storageFactoryParams = {
29
+ impressionsQueueSize: settings.scheduler.impressionsQueueSize,
28
30
  eventsQueueSize: settings.scheduler.eventsQueueSize,
29
- optimize: utils_1.shouldBeOptimized(settings),
31
+ optimize: (0, utils_1.shouldBeOptimized)(settings),
30
32
  // ATM, only used by InLocalStorage
31
- matchingKey: key_1.getMatching(settings.core.key),
33
+ matchingKey: (0, key_1.getMatching)(settings.core.key),
32
34
  splitFiltersValidation: settings.sync.__splitFiltersValidation,
33
35
  // ATM, only used by PluggableStorage
34
36
  mode: settings.mode,
@@ -40,7 +42,7 @@ function sdkFactory(params) {
40
42
  readinessManager.splits.emit(constants_2.SDK_SPLITS_ARRIVED);
41
43
  readinessManager.segments.emit(constants_2.SDK_SEGMENTS_ARRIVED);
42
44
  },
43
- metadata: metadataBuilder_1.metadataBuilder(settings),
45
+ metadata: (0, metadataBuilder_1.metadataBuilder)(settings),
44
46
  log: log
45
47
  };
46
48
  var storage = storageFactory(storageFactoryParams);
@@ -57,28 +59,29 @@ function sdkFactory(params) {
57
59
  var integrationsManager = integrationsManagerFactory && integrationsManagerFactory({ settings: settings, storage: storage });
58
60
  // trackers
59
61
  var observer = impressionsObserverFactory && impressionsObserverFactory();
60
- var impressionsTracker = impressionsTracker_1.impressionsTrackerFactory(log, storage.impressions, settings, impressionListener, integrationsManager, observer, storage.impressionCounts);
61
- var eventTracker = eventTracker_1.eventTrackerFactory(log, storage.events, integrationsManager);
62
+ var impressionsTracker = (0, impressionsTracker_1.impressionsTrackerFactory)(settings, storage.impressions, integrationsManager, observer, storage.impressionCounts);
63
+ var eventTracker = (0, eventTracker_1.eventTrackerFactory)(settings, storage.events, integrationsManager);
62
64
  // signal listener
63
65
  var signalListener = SignalListener && new SignalListener(syncManager, settings, storage, splitApi);
64
66
  // Sdk client and manager
65
- var clientMethod = sdkClientMethodFactory({ eventTracker: eventTracker, impressionsTracker: impressionsTracker, sdkReadinessManager: sdkReadinessManager, settings: settings, storage: storage, syncManager: syncManager, signalListener: signalListener });
67
+ var ctx = { eventTracker: eventTracker, impressionsTracker: impressionsTracker, sdkReadinessManager: sdkReadinessManager, settings: settings, storage: storage, syncManager: syncManager, signalListener: signalListener };
68
+ var clientMethod = sdkClientMethodFactory(ctx);
66
69
  var managerInstance = sdkManagerFactory(log, storage.splits, sdkReadinessManager);
67
70
  syncManager && syncManager.start();
68
71
  signalListener && signalListener.start();
69
72
  log.info(constants_1.NEW_FACTORY);
70
- return {
73
+ // @ts-ignore
74
+ return (0, objectAssign_1.objectAssign)({
71
75
  // Split evaluation and event tracking engine
72
76
  client: clientMethod,
73
77
  // Manager API to explore available information
74
- // @ts-ignore
75
78
  manager: function () {
76
79
  log.debug(constants_1.RETRIEVE_MANAGER);
77
80
  return managerInstance;
78
81
  },
79
82
  // Logger wrapper API
80
- Logger: sdkLogger_1.createLoggerAPI(settings.log),
83
+ Logger: (0, sdkLogger_1.createLoggerAPI)(settings.log),
81
84
  settings: settings,
82
- };
85
+ }, extraProps && extraProps(ctx));
83
86
  }
84
87
  exports.sdkFactory = sdkFactory;
@@ -8,7 +8,7 @@ var inputValidation_1 = require("../utils/inputValidation");
8
8
  function collectTreatments(splitObject) {
9
9
  var conditions = splitObject.conditions;
10
10
  // Rollout conditions are supposed to have the entire partitions list, so we find the first one.
11
- var allTreatmentsCondition = lang_1.find(conditions, function (cond) { return cond.conditionType === 'ROLLOUT'; });
11
+ var allTreatmentsCondition = (0, lang_1.find)(conditions, function (cond) { return cond.conditionType === 'ROLLOUT'; });
12
12
  // Localstorage mode could fall into a no rollout conditions state. Take the first condition in that case.
13
13
  if (!allTreatmentsCondition)
14
14
  allTreatmentsCondition = conditions[0];
@@ -47,36 +47,36 @@ function objectsToViews(jsons) {
47
47
  function sdkManagerFactory(log, splits, _a) {
48
48
  var readinessManager = _a.readinessManager, sdkStatus = _a.sdkStatus;
49
49
  var SPLIT_FN_LABEL = 'split';
50
- return objectAssign_1.objectAssign(
50
+ return (0, objectAssign_1.objectAssign)(
51
51
  // Proto-linkage of the readiness Event Emitter
52
52
  Object.create(sdkStatus), {
53
53
  /**
54
54
  * Get the Split object corresponding to the given split name if valid
55
55
  */
56
56
  split: function (maybeSplitName) {
57
- var splitName = inputValidation_1.validateSplit(log, maybeSplitName, SPLIT_FN_LABEL);
58
- if (!inputValidation_1.validateIfNotDestroyed(log, readinessManager, SPLIT_FN_LABEL) || !inputValidation_1.validateIfOperational(log, readinessManager, SPLIT_FN_LABEL) || !splitName) {
57
+ var splitName = (0, inputValidation_1.validateSplit)(log, maybeSplitName, SPLIT_FN_LABEL);
58
+ if (!(0, inputValidation_1.validateIfNotDestroyed)(log, readinessManager, SPLIT_FN_LABEL) || !(0, inputValidation_1.validateIfOperational)(log, readinessManager, SPLIT_FN_LABEL) || !splitName) {
59
59
  return null;
60
60
  }
61
61
  var split = splits.getSplit(splitName);
62
- if (thenable_1.thenable(split)) {
62
+ if ((0, thenable_1.thenable)(split)) {
63
63
  return split.catch(function () { return null; }).then(function (result) {
64
- inputValidation_1.validateSplitExistance(log, readinessManager, splitName, result, SPLIT_FN_LABEL);
64
+ (0, inputValidation_1.validateSplitExistance)(log, readinessManager, splitName, result, SPLIT_FN_LABEL);
65
65
  return objectToView(result);
66
66
  });
67
67
  }
68
- inputValidation_1.validateSplitExistance(log, readinessManager, splitName, split, SPLIT_FN_LABEL);
68
+ (0, inputValidation_1.validateSplitExistance)(log, readinessManager, splitName, split, SPLIT_FN_LABEL);
69
69
  return objectToView(split);
70
70
  },
71
71
  /**
72
72
  * Get the Split objects present on the factory storage
73
73
  */
74
74
  splits: function () {
75
- if (!inputValidation_1.validateIfNotDestroyed(log, readinessManager, 'splits') || !inputValidation_1.validateIfOperational(log, readinessManager, 'splits')) {
75
+ if (!(0, inputValidation_1.validateIfNotDestroyed)(log, readinessManager, 'splits') || !(0, inputValidation_1.validateIfOperational)(log, readinessManager, 'splits')) {
76
76
  return [];
77
77
  }
78
78
  var currentSplits = splits.getAll();
79
- return thenable_1.thenable(currentSplits) ?
79
+ return (0, thenable_1.thenable)(currentSplits) ?
80
80
  currentSplits.catch(function () { return []; }).then(objectsToViews) : // handle possible rejections when using pluggable storage
81
81
  objectsToViews(currentSplits);
82
82
  },
@@ -84,11 +84,11 @@ function sdkManagerFactory(log, splits, _a) {
84
84
  * Get the Split names present on the factory storage
85
85
  */
86
86
  names: function () {
87
- if (!inputValidation_1.validateIfNotDestroyed(log, readinessManager, 'names') || !inputValidation_1.validateIfOperational(log, readinessManager, 'names')) {
87
+ if (!(0, inputValidation_1.validateIfNotDestroyed)(log, readinessManager, 'names') || !(0, inputValidation_1.validateIfOperational)(log, readinessManager, 'names')) {
88
88
  return [];
89
89
  }
90
90
  var splitNames = splits.getSplitNames();
91
- return thenable_1.thenable(splitNames) ?
91
+ return (0, thenable_1.thenable)(splitNames) ?
92
92
  splitNames.catch(function () { return []; }) : // handle possible rejections when using pluggable storage
93
93
  splitNames;
94
94
  }
@@ -17,7 +17,7 @@ function splitApiFactory(settings, platform) {
17
17
  var urls = settings.urls;
18
18
  var filterQueryString = settings.sync.__splitFiltersValidation && settings.sync.__splitFiltersValidation.queryString;
19
19
  var SplitSDKImpressionsMode = settings.sync.impressionsMode;
20
- var splitHttpClient = splitHttpClient_1.splitHttpClientFactory(settings, platform.getFetch, platform.getOptions);
20
+ var splitHttpClient = (0, splitHttpClient_1.splitHttpClientFactory)(settings, platform.getFetch, platform.getOptions);
21
21
  return {
22
22
  getSdkAPIHealthCheck: function () {
23
23
  var url = urls.sdk + "/version";
@@ -75,7 +75,8 @@ function splitApiFactory(settings, platform) {
75
75
  return splitHttpClient(url, {
76
76
  // Adding extra headers to send impressions in OPTIMIZED or DEBUG modes.
77
77
  method: 'POST',
78
- body: body, headers: objectAssign_1.objectAssign({ SplitSDKImpressionsMode: SplitSDKImpressionsMode }, headers)
78
+ body: body,
79
+ headers: (0, objectAssign_1.objectAssign)({ SplitSDKImpressionsMode: SplitSDKImpressionsMode }, headers)
79
80
  });
80
81
  },
81
82
  /**
@@ -31,8 +31,8 @@ function splitHttpClientFactory(settings, getFetch, getOptions) {
31
31
  return function httpClient(url, reqOpts, logErrorsAsInfo) {
32
32
  if (reqOpts === void 0) { reqOpts = {}; }
33
33
  if (logErrorsAsInfo === void 0) { logErrorsAsInfo = false; }
34
- var request = objectAssign_1.objectAssign({
35
- headers: reqOpts.headers ? objectAssign_1.objectAssign({}, headers, reqOpts.headers) : headers,
34
+ var request = (0, objectAssign_1.objectAssign)({
35
+ headers: reqOpts.headers ? (0, objectAssign_1.objectAssign)({}, headers, reqOpts.headers) : headers,
36
36
  method: reqOpts.method || 'GET',
37
37
  body: reqOpts.body
38
38
  }, options);
@@ -5,11 +5,7 @@ var lang_1 = require("../utils/lang");
5
5
  var everythingAtTheEnd = /[^.]+$/;
6
6
  var DEFAULT_PREFIX = 'SPLITIO';
7
7
  function validatePrefix(prefix) {
8
- return prefix && typeof prefix === 'string' ?
9
- lang_1.endsWith(prefix, '.' + DEFAULT_PREFIX) ?
10
- prefix : // suffix already appended
11
- prefix + '.' + DEFAULT_PREFIX : // append suffix
12
- DEFAULT_PREFIX; // use default prefix if none is provided
8
+ return prefix ? prefix + '.SPLITIO' : 'SPLITIO';
13
9
  }
14
10
  exports.validatePrefix = validatePrefix;
15
11
  var KeyBuilder = /** @class */ (function () {
@@ -31,7 +27,7 @@ var KeyBuilder = /** @class */ (function () {
31
27
  // return `${this.prefix}.splits.ready`;
32
28
  // }
33
29
  KeyBuilder.prototype.isSplitKey = function (key) {
34
- return lang_1.startsWith(key, this.prefix + ".split.");
30
+ return (0, lang_1.startsWith)(key, this.prefix + ".split.");
35
31
  };
36
32
  KeyBuilder.prototype.buildSplitKeyPrefix = function () {
37
33
  return this.prefix + ".split.";
@@ -5,7 +5,7 @@ var tslib_1 = require("tslib");
5
5
  var lang_1 = require("../utils/lang");
6
6
  var KeyBuilder_1 = require("./KeyBuilder");
7
7
  var KeyBuilderCS = /** @class */ (function (_super) {
8
- tslib_1.__extends(KeyBuilderCS, _super);
8
+ (0, tslib_1.__extends)(KeyBuilderCS, _super);
9
9
  function KeyBuilderCS(prefix, matchingKey) {
10
10
  var _this = _super.call(this, prefix) || this;
11
11
  _this.matchingKey = matchingKey;
@@ -16,11 +16,21 @@ var KeyBuilderCS = /** @class */ (function (_super) {
16
16
  * @override
17
17
  */
18
18
  KeyBuilderCS.prototype.buildSegmentNameKey = function (segmentName) {
19
- return this.matchingKey + "." + this.prefix + ".segment." + segmentName;
19
+ return this.prefix + "." + this.matchingKey + ".segment." + segmentName;
20
20
  };
21
21
  KeyBuilderCS.prototype.extractSegmentName = function (builtSegmentKeyName) {
22
+ var prefix = this.prefix + "." + this.matchingKey + ".segment.";
23
+ if ((0, lang_1.startsWith)(builtSegmentKeyName, prefix))
24
+ return builtSegmentKeyName.substr(prefix.length);
25
+ };
26
+ // @BREAKING: The key used to start with the matching key instead of the prefix, this was changed on version 10.17.3
27
+ KeyBuilderCS.prototype.buildOldSegmentNameKey = function (segmentName) {
28
+ return this.matchingKey + "." + this.prefix + ".segment." + segmentName;
29
+ };
30
+ // @BREAKING: The key used to start with the matching key instead of the prefix, this was changed on version 10.17.3
31
+ KeyBuilderCS.prototype.extractOldSegmentKey = function (builtSegmentKeyName) {
22
32
  var prefix = this.matchingKey + "." + this.prefix + ".segment.";
23
- if (lang_1.startsWith(builtSegmentKeyName, prefix))
33
+ if ((0, lang_1.startsWith)(builtSegmentKeyName, prefix))
24
34
  return builtSegmentKeyName.substr(prefix.length);
25
35
  };
26
36
  KeyBuilderCS.prototype.buildLastUpdatedKey = function () {
@@ -7,7 +7,7 @@ var KeyBuilder_1 = require("./KeyBuilder");
7
7
  // const everythingAfterCount = /count\.([^/]+)$/;
8
8
  // const latencyMetricNameAndBucket = /latency\.([^/]+)\.bucket\.([0-9]+)$/;
9
9
  var KeyBuilderSS = /** @class */ (function (_super) {
10
- tslib_1.__extends(KeyBuilderSS, _super);
10
+ (0, tslib_1.__extends)(KeyBuilderSS, _super);
11
11
  function KeyBuilderSS(prefix, metadata) {
12
12
  var _this = _super.call(this, prefix) || this;
13
13
  _this.metadata = metadata;
@@ -8,6 +8,6 @@ function findLatencyIndex(latency, min, max, base) {
8
8
  if (max === void 0) { max = 23; }
9
9
  if (base === void 0) { base = 1.5; }
10
10
  var index = Math.min(max, Math.max(min, Math.floor(Math.log(latency) / Math.log(base))));
11
- return lang_1.isNaNNumber(index) ? 0 : index; // index is NaN if latency is not a positive number
11
+ return (0, lang_1.isNaNNumber)(index) ? 0 : index; // index is NaN if latency is not a positive number
12
12
  }
13
13
  exports.findLatencyIndex = findLatencyIndex;
@@ -5,7 +5,7 @@ var tslib_1 = require("tslib");
5
5
  var AbstractSegmentsCacheSync_1 = require("../AbstractSegmentsCacheSync");
6
6
  var constants_1 = require("./constants");
7
7
  var MySegmentsCacheInLocal = /** @class */ (function (_super) {
8
- tslib_1.__extends(MySegmentsCacheInLocal, _super);
8
+ (0, tslib_1.__extends)(MySegmentsCacheInLocal, _super);
9
9
  function MySegmentsCacheInLocal(log, keys) {
10
10
  var _this = _super.call(this) || this;
11
11
  _this.log = log;
@@ -60,9 +60,29 @@ var MySegmentsCacheInLocal = /** @class */ (function (_super) {
60
60
  var index;
61
61
  // Scan current values from localStorage
62
62
  var storedSegmentNames = Object.keys(localStorage).reduce(function (accum, key) {
63
- var name = _this.keys.extractSegmentName(key);
64
- if (name)
65
- accum.push(name);
63
+ var segmentName = _this.keys.extractSegmentName(key);
64
+ if (segmentName) {
65
+ accum.push(segmentName);
66
+ }
67
+ else {
68
+ // @BREAKING: This is only to clean up "old" keys. Remove this whole else code block.
69
+ segmentName = _this.keys.extractOldSegmentKey(key);
70
+ if (segmentName) { // this was an old segment key, let's clean up.
71
+ var newSegmentKey = _this.keys.buildSegmentNameKey(segmentName);
72
+ try {
73
+ // If the new format key is not there, create it.
74
+ if (!localStorage.getItem(newSegmentKey) && names.indexOf(segmentName) > -1) {
75
+ localStorage.setItem(newSegmentKey, constants_1.DEFINED);
76
+ // we are migrating a segment, let's track it.
77
+ accum.push(segmentName);
78
+ }
79
+ localStorage.removeItem(key); // we migrated the current key, let's delete it.
80
+ }
81
+ catch (e) {
82
+ _this.log.error(e);
83
+ }
84
+ }
85
+ }
66
86
  return accum;
67
87
  }, []);
68
88
  // Extreme fast => everything is empty
@@ -9,7 +9,7 @@ var constants_1 = require("./constants");
9
9
  * ISplitsCacheSync implementation that stores split definitions in browser LocalStorage.
10
10
  */
11
11
  var SplitsCacheInLocal = /** @class */ (function (_super) {
12
- tslib_1.__extends(SplitsCacheInLocal, _super);
12
+ (0, tslib_1.__extends)(SplitsCacheInLocal, _super);
13
13
  /**
14
14
  * @param {KeyBuilderCS} keys
15
15
  * @param {number | undefined} expirationTimestamp
@@ -27,7 +27,7 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
27
27
  return _this;
28
28
  }
29
29
  SplitsCacheInLocal.prototype._decrementCount = function (key) {
30
- var count = lang_1.toNumber(localStorage.getItem(key)) - 1;
30
+ var count = (0, lang_1.toNumber)(localStorage.getItem(key)) - 1;
31
31
  // @ts-expect-error
32
32
  if (count > 0)
33
33
  localStorage.setItem(key, count);
@@ -41,7 +41,7 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
41
41
  var ttKey = this.keys.buildTrafficTypeKey(split.trafficTypeName);
42
42
  this._decrementCount(ttKey);
43
43
  }
44
- if (AbstractSplitsCacheSync_1.usesSegments(split)) {
44
+ if ((0, AbstractSplitsCacheSync_1.usesSegments)(split)) {
45
45
  var segmentsCountKey = this.keys.buildSplitsWithSegmentCountKey();
46
46
  this._decrementCount(segmentsCountKey);
47
47
  }
@@ -57,12 +57,12 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
57
57
  if (split.trafficTypeName) {
58
58
  var ttKey = this.keys.buildTrafficTypeKey(split.trafficTypeName);
59
59
  // @ts-expect-error
60
- localStorage.setItem(ttKey, lang_1.toNumber(localStorage.getItem(ttKey)) + 1);
60
+ localStorage.setItem(ttKey, (0, lang_1.toNumber)(localStorage.getItem(ttKey)) + 1);
61
61
  }
62
- if (AbstractSplitsCacheSync_1.usesSegments(split)) {
62
+ if ((0, AbstractSplitsCacheSync_1.usesSegments)(split)) {
63
63
  var segmentsCountKey = this.keys.buildSplitsWithSegmentCountKey();
64
64
  // @ts-expect-error
65
- localStorage.setItem(segmentsCountKey, lang_1.toNumber(localStorage.getItem(segmentsCountKey)) + 1);
65
+ localStorage.setItem(segmentsCountKey, (0, lang_1.toNumber)(localStorage.getItem(segmentsCountKey)) + 1);
66
66
  }
67
67
  }
68
68
  }
@@ -161,7 +161,7 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
161
161
  var value = localStorage.getItem(this.keys.buildSplitsTillKey());
162
162
  if (value !== null) {
163
163
  value = parseInt(value, 10);
164
- return lang_1.isNaNNumber(value) ? n : value;
164
+ return (0, lang_1.isNaNNumber)(value) ? n : value;
165
165
  }
166
166
  return n;
167
167
  };
@@ -178,16 +178,16 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
178
178
  return accum;
179
179
  };
180
180
  SplitsCacheInLocal.prototype.trafficTypeExists = function (trafficType) {
181
- var ttCount = lang_1.toNumber(localStorage.getItem(this.keys.buildTrafficTypeKey(trafficType)));
182
- return lang_1.isFiniteNumber(ttCount) && ttCount > 0;
181
+ var ttCount = (0, lang_1.toNumber)(localStorage.getItem(this.keys.buildTrafficTypeKey(trafficType)));
182
+ return (0, lang_1.isFiniteNumber)(ttCount) && ttCount > 0;
183
183
  };
184
184
  SplitsCacheInLocal.prototype.usesSegments = function () {
185
185
  // If cache hasn't been synchronized with the cloud, assume we need them.
186
186
  if (!this.hasSync)
187
187
  return true;
188
188
  var storedCount = localStorage.getItem(this.keys.buildSplitsWithSegmentCountKey());
189
- var splitsWithSegmentsCount = storedCount === null ? 0 : lang_1.toNumber(storedCount);
190
- if (lang_1.isFiniteNumber(splitsWithSegmentsCount)) {
189
+ var splitsWithSegmentsCount = storedCount === null ? 0 : (0, lang_1.toNumber)(storedCount);
190
+ if ((0, lang_1.isFiniteNumber)(splitsWithSegmentsCount)) {
191
191
  return splitsWithSegmentsCount > 0;
192
192
  }
193
193
  else {
@@ -212,7 +212,7 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
212
212
  var value = localStorage.getItem(this.keys.buildLastUpdatedKey());
213
213
  if (value !== null) {
214
214
  value = parseInt(value, 10);
215
- if (!lang_1.isNaNNumber(value) && expirationTimestamp && value < expirationTimestamp)
215
+ if (!(0, lang_1.isNaNNumber)(value) && expirationTimestamp && value < expirationTimestamp)
216
216
  this.clear();
217
217
  }
218
218
  };
@@ -20,12 +20,12 @@ var constants_2 = require("../../utils/constants");
20
20
  */
21
21
  function InLocalStorage(options) {
22
22
  if (options === void 0) { options = {}; }
23
- var prefix = KeyBuilder_1.validatePrefix(options.prefix);
23
+ var prefix = (0, KeyBuilder_1.validatePrefix)(options.prefix);
24
24
  function InLocalStorageCSFactory(params) {
25
25
  // Fallback to InMemoryStorage if LocalStorage API is not available
26
- if (!isLocalStorageAvailable_1.isLocalStorageAvailable()) {
26
+ if (!(0, isLocalStorageAvailable_1.isLocalStorageAvailable)()) {
27
27
  params.log.warn(constants_1.LOG_PREFIX + 'LocalStorage API is unavailable. Fallbacking into default MEMORY storage');
28
- return InMemoryStorageCS_1.InMemoryStorageCSFactory(params);
28
+ return (0, InMemoryStorageCS_1.InMemoryStorageCSFactory)(params);
29
29
  }
30
30
  var log = params.log;
31
31
  var keys = new KeyBuilderCS_1.KeyBuilderCS(prefix, params.matchingKey);
@@ -33,7 +33,7 @@ function InLocalStorage(options) {
33
33
  return {
34
34
  splits: new SplitsCacheInLocal_1.SplitsCacheInLocal(log, keys, expirationTimestamp, params.splitFiltersValidation),
35
35
  segments: new MySegmentsCacheInLocal_1.MySegmentsCacheInLocal(log, keys),
36
- impressions: new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(),
36
+ impressions: new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(params.impressionsQueueSize),
37
37
  impressionCounts: params.optimize ? new ImpressionCountsCacheInMemory_1.ImpressionCountsCacheInMemory() : undefined,
38
38
  events: new EventsCacheInMemory_1.EventsCacheInMemory(params.eventsQueueSize),
39
39
  destroy: function () {
@@ -33,7 +33,7 @@ var AttributesCacheInMemory = /** @class */ (function () {
33
33
  * @returns {boolean} attributes were stored
34
34
  */
35
35
  AttributesCacheInMemory.prototype.setAttributes = function (attributes) {
36
- this.attributesCache = objectAssign_1.objectAssign(this.attributesCache, attributes);
36
+ this.attributesCache = (0, objectAssign_1.objectAssign)(this.attributesCache, attributes);
37
37
  return true;
38
38
  };
39
39
  /**
@@ -10,7 +10,7 @@ var ImpressionCountsCacheInMemory = /** @class */ (function () {
10
10
  * Builds key to be stored in the cache with the featureName and the timeFrame truncated.
11
11
  */
12
12
  ImpressionCountsCacheInMemory.prototype._makeKey = function (featureName, timeFrame) {
13
- return featureName + "::" + time_1.truncateTimeFrame(timeFrame);
13
+ return featureName + "::" + (0, time_1.truncateTimeFrame)(timeFrame);
14
14
  };
15
15
  /**
16
16
  * Increments the quantity of impressions with the passed featureName and timeFrame.
@@ -2,15 +2,29 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ImpressionsCacheInMemory = void 0;
4
4
  var ImpressionsCacheInMemory = /** @class */ (function () {
5
- function ImpressionsCacheInMemory() {
5
+ /**
6
+ *
7
+ * @param impressionsQueueSize number of queued impressions to call onFullQueueCb.
8
+ * Default value is 0, that means no maximum value, in case we want to avoid this being triggered.
9
+ */
10
+ function ImpressionsCacheInMemory(impressionsQueueSize) {
11
+ if (impressionsQueueSize === void 0) { impressionsQueueSize = 0; }
12
+ this.maxQueue = impressionsQueueSize;
6
13
  this.queue = [];
7
14
  }
15
+ ImpressionsCacheInMemory.prototype.setOnFullQueueCb = function (cb) {
16
+ this.onFullQueue = cb;
17
+ };
8
18
  /**
9
19
  * Store impressions in sequential order
10
20
  */
11
21
  ImpressionsCacheInMemory.prototype.track = function (data) {
12
22
  var _a;
13
23
  (_a = this.queue).push.apply(_a, data);
24
+ // Check if the cache queue is full and we need to flush it.
25
+ if (this.maxQueue > 0 && this.queue.length >= this.maxQueue && this.onFullQueue) {
26
+ this.onFullQueue();
27
+ }
14
28
  };
15
29
  /**
16
30
  * Clear the data stored on the cache.
@@ -16,7 +16,7 @@ function InMemoryStorageFactory(params) {
16
16
  return {
17
17
  splits: new SplitsCacheInMemory_1.SplitsCacheInMemory(),
18
18
  segments: new SegmentsCacheInMemory_1.SegmentsCacheInMemory(),
19
- impressions: new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(),
19
+ impressions: new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(params.impressionsQueueSize),
20
20
  impressionCounts: params.optimize ? new ImpressionCountsCacheInMemory_1.ImpressionCountsCacheInMemory() : undefined,
21
21
  events: new EventsCacheInMemory_1.EventsCacheInMemory(params.eventsQueueSize),
22
22
  // When using MEMORY we should clean all the caches to leave them empty
@@ -16,7 +16,7 @@ function InMemoryStorageCSFactory(params) {
16
16
  return {
17
17
  splits: new SplitsCacheInMemory_1.SplitsCacheInMemory(),
18
18
  segments: new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory(),
19
- impressions: new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(),
19
+ impressions: new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(params.impressionsQueueSize),
20
20
  impressionCounts: params.optimize ? new ImpressionCountsCacheInMemory_1.ImpressionCountsCacheInMemory() : undefined,
21
21
  events: new EventsCacheInMemory_1.EventsCacheInMemory(params.eventsQueueSize),
22
22
  // When using MEMORY we should clean all the caches to leave them empty
@@ -17,7 +17,7 @@ var LatenciesCacheInMemory = /** @class */ (function () {
17
17
  ];
18
18
  }
19
19
  // +1 based on the latency number
20
- this.counters[metricName][findLatencyIndex_1.findLatencyIndex(latency)]++;
20
+ this.counters[metricName][(0, findLatencyIndex_1.findLatencyIndex)(latency)]++;
21
21
  return true;
22
22
  };
23
23
  /**
@@ -8,7 +8,7 @@ var AbstractSegmentsCacheSync_1 = require("../AbstractSegmentsCacheSync");
8
8
  * Supported by all JS runtimes.
9
9
  */
10
10
  var MySegmentsCacheInMemory = /** @class */ (function (_super) {
11
- tslib_1.__extends(MySegmentsCacheInMemory, _super);
11
+ (0, tslib_1.__extends)(MySegmentsCacheInMemory, _super);
12
12
  function MySegmentsCacheInMemory() {
13
13
  var _this = _super !== null && _super.apply(this, arguments) || this;
14
14
  _this.segmentCache = {};
@@ -10,7 +10,7 @@ var lang_1 = require("../../utils/lang");
10
10
  * Supported by all JS runtimes.
11
11
  */
12
12
  var SegmentsCacheInMemory = /** @class */ (function (_super) {
13
- tslib_1.__extends(SegmentsCacheInMemory, _super);
13
+ (0, tslib_1.__extends)(SegmentsCacheInMemory, _super);
14
14
  function SegmentsCacheInMemory() {
15
15
  var _this = _super !== null && _super.apply(this, arguments) || this;
16
16
  _this.segmentCache = {};
@@ -63,7 +63,7 @@ var SegmentsCacheInMemory = /** @class */ (function (_super) {
63
63
  };
64
64
  SegmentsCacheInMemory.prototype.getChangeNumber = function (name) {
65
65
  var value = this.segmentChangeNumber[name];
66
- return lang_1.isIntegerNumber(value) ? value : -1;
66
+ return (0, lang_1.isIntegerNumber)(value) ? value : -1;
67
67
  };
68
68
  return SegmentsCacheInMemory;
69
69
  }(AbstractSegmentsCacheSync_1.AbstractSegmentsCacheSync));