@splitsoftware/splitio-commons 1.2.1-rc.0 → 1.2.1-rc.11

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 (316) hide show
  1. package/cjs/evaluator/Engine.js +6 -6
  2. package/cjs/evaluator/combiners/and.js +1 -1
  3. package/cjs/evaluator/combiners/ifelseif.js +2 -2
  4. package/cjs/evaluator/condition/engineUtils.js +2 -2
  5. package/cjs/evaluator/condition/index.js +4 -4
  6. package/cjs/evaluator/index.js +5 -5
  7. package/cjs/evaluator/matchers/cont_all.js +1 -1
  8. package/cjs/evaluator/matchers/cont_any.js +1 -1
  9. package/cjs/evaluator/matchers/cont_str.js +1 -1
  10. package/cjs/evaluator/matchers/dependency.js +1 -1
  11. package/cjs/evaluator/matchers/eq_set.js +1 -1
  12. package/cjs/evaluator/matchers/ew.js +3 -3
  13. package/cjs/evaluator/matchers/part_of.js +1 -1
  14. package/cjs/evaluator/matchers/segment.js +1 -1
  15. package/cjs/evaluator/matchers/sw.js +1 -1
  16. package/cjs/evaluator/matchers/whitelist.js +1 -1
  17. package/cjs/evaluator/matchersTransform/index.js +12 -12
  18. package/cjs/evaluator/parser/index.js +6 -6
  19. package/cjs/evaluator/treatments/index.js +1 -1
  20. package/cjs/evaluator/value/index.js +1 -1
  21. package/cjs/evaluator/value/sanitize.js +4 -4
  22. package/cjs/integrations/browser.js +3 -3
  23. package/cjs/integrations/ga/GaToSplit.js +14 -14
  24. package/cjs/integrations/ga/GoogleAnalyticsToSplit.js +5 -3
  25. package/cjs/integrations/ga/SplitToGa.js +1 -1
  26. package/cjs/integrations/ga/SplitToGoogleAnalytics.js +4 -2
  27. package/cjs/listeners/browser.js +15 -11
  28. package/cjs/listeners/node.js +1 -1
  29. package/cjs/logger/constants.js +9 -3
  30. package/cjs/logger/index.js +2 -2
  31. package/cjs/logger/messages/debug.js +4 -4
  32. package/cjs/logger/messages/error.js +5 -4
  33. package/cjs/logger/messages/info.js +8 -5
  34. package/cjs/logger/messages/warn.js +1 -1
  35. package/cjs/logger/sdkLogger.js +1 -1
  36. package/cjs/readiness/readinessManager.js +2 -2
  37. package/cjs/readiness/sdkReadinessManager.js +4 -4
  38. package/cjs/sdkClient/client.js +12 -11
  39. package/cjs/sdkClient/clientAttributesDecoration.js +4 -4
  40. package/cjs/sdkClient/clientCS.js +3 -3
  41. package/cjs/sdkClient/clientInputValidation.js +20 -22
  42. package/cjs/sdkClient/sdkClient.js +3 -6
  43. package/cjs/sdkClient/sdkClientMethod.js +1 -1
  44. package/cjs/sdkClient/sdkClientMethodCS.js +6 -10
  45. package/cjs/sdkClient/sdkClientMethodCSWithTT.js +7 -15
  46. package/cjs/sdkFactory/index.js +14 -12
  47. package/cjs/sdkFactory/userConsentProps.js +40 -0
  48. package/cjs/sdkManager/index.js +11 -11
  49. package/cjs/services/splitApi.js +3 -2
  50. package/cjs/services/splitHttpClient.js +2 -2
  51. package/cjs/storages/KeyBuilder.js +2 -6
  52. package/cjs/storages/KeyBuilderCS.js +13 -3
  53. package/cjs/storages/KeyBuilderSS.js +1 -1
  54. package/cjs/storages/findLatencyIndex.js +1 -1
  55. package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +24 -4
  56. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +12 -12
  57. package/cjs/storages/inLocalStorage/index.js +4 -4
  58. package/cjs/storages/inMemory/AttributesCacheInMemory.js +1 -1
  59. package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
  60. package/cjs/storages/inMemory/ImpressionsCacheInMemory.js +15 -1
  61. package/cjs/storages/inMemory/InMemoryStorage.js +1 -1
  62. package/cjs/storages/inMemory/InMemoryStorageCS.js +1 -1
  63. package/cjs/storages/inMemory/LatenciesCacheInMemory.js +1 -1
  64. package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +1 -1
  65. package/cjs/storages/inMemory/SegmentsCacheInMemory.js +2 -2
  66. package/cjs/storages/inMemory/SplitsCacheInMemory.js +5 -5
  67. package/cjs/storages/inRedis/LatenciesCacheInRedis.js +1 -1
  68. package/cjs/storages/inRedis/RedisAdapter.js +24 -11
  69. package/cjs/storages/inRedis/SegmentsCacheInRedis.js +1 -1
  70. package/cjs/storages/inRedis/SplitsCacheInRedis.js +3 -3
  71. package/cjs/storages/inRedis/index.js +1 -1
  72. package/cjs/storages/pluggable/SegmentsCachePluggable.js +1 -1
  73. package/cjs/storages/pluggable/SplitsCachePluggable.js +3 -3
  74. package/cjs/storages/pluggable/inMemoryWrapper.js +4 -4
  75. package/cjs/storages/pluggable/index.js +6 -6
  76. package/cjs/sync/offline/LocalhostFromFile.js +1 -1
  77. package/cjs/sync/offline/LocalhostFromObject.js +1 -1
  78. package/cjs/sync/offline/splitsParser/parseCondition.js +1 -1
  79. package/cjs/sync/offline/splitsParser/splitsParserFromFile.js +13 -13
  80. package/cjs/sync/offline/splitsParser/splitsParserFromSettings.js +3 -3
  81. package/cjs/sync/offline/syncManagerOffline.js +1 -1
  82. package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +2 -2
  83. package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +2 -2
  84. package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
  85. package/cjs/sync/polling/pollingManagerCS.js +8 -7
  86. package/cjs/sync/polling/pollingManagerSS.js +5 -4
  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 +3 -3
  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/UpdateWorkers/SegmentsUpdateWorker.js +1 -1
  98. package/cjs/sync/streaming/mySegmentsV2utils.js +1 -1
  99. package/cjs/sync/streaming/pushManager.js +27 -19
  100. package/cjs/sync/submitters/eventsSyncTask.js +17 -5
  101. package/cjs/sync/submitters/impressionCountsSyncTask.js +1 -1
  102. package/cjs/sync/submitters/impressionsSyncTask.js +15 -3
  103. package/cjs/sync/submitters/metricsSyncTask.js +3 -3
  104. package/cjs/sync/submitters/submitterManager.js +6 -5
  105. package/cjs/sync/submitters/submitterSyncTask.js +1 -1
  106. package/cjs/sync/syncManagerOnline.js +14 -15
  107. package/cjs/trackers/eventTracker.js +11 -4
  108. package/cjs/trackers/impressionObserver/impressionObserverCS.js +1 -1
  109. package/cjs/trackers/impressionObserver/impressionObserverSS.js +1 -1
  110. package/cjs/trackers/impressionObserver/utils.js +8 -1
  111. package/cjs/trackers/impressionsTracker.js +9 -8
  112. package/cjs/utils/MinEvents.js +2 -1
  113. package/cjs/utils/consent.js +10 -0
  114. package/cjs/utils/constants/index.js +5 -1
  115. package/cjs/utils/inputValidation/apiKey.js +1 -1
  116. package/cjs/utils/inputValidation/attribute.js +4 -4
  117. package/cjs/utils/inputValidation/attributes.js +2 -2
  118. package/cjs/utils/inputValidation/event.js +1 -1
  119. package/cjs/utils/inputValidation/eventProperties.js +7 -5
  120. package/cjs/utils/inputValidation/eventValue.js +1 -1
  121. package/cjs/utils/inputValidation/key.js +6 -5
  122. package/cjs/utils/inputValidation/preloadedData.js +8 -8
  123. package/cjs/utils/inputValidation/split.js +1 -1
  124. package/cjs/utils/inputValidation/splits.js +2 -2
  125. package/cjs/utils/inputValidation/trafficType.js +1 -1
  126. package/cjs/utils/inputValidation/trafficTypeExistance.js +1 -1
  127. package/cjs/utils/jwt/index.js +1 -1
  128. package/cjs/utils/key/index.js +3 -3
  129. package/cjs/utils/lang/index.js +13 -16
  130. package/cjs/utils/lang/maps.js +16 -2
  131. package/cjs/utils/murmur3/common.js +1 -1
  132. package/cjs/utils/murmur3/murmur3.js +10 -10
  133. package/cjs/utils/murmur3/murmur3_128.js +1 -1
  134. package/cjs/utils/murmur3/murmur3_128_x86.js +37 -37
  135. package/cjs/utils/murmur3/murmur3_64.js +1 -1
  136. package/cjs/utils/settingsValidation/consent.js +16 -0
  137. package/cjs/utils/settingsValidation/impressionsMode.js +6 -6
  138. package/cjs/utils/settingsValidation/index.js +32 -14
  139. package/cjs/utils/settingsValidation/integrations/configurable.js +1 -1
  140. package/cjs/utils/settingsValidation/integrations/pluggable.js +1 -1
  141. package/cjs/utils/settingsValidation/localhost/builtin.js +2 -2
  142. package/cjs/utils/settingsValidation/logger/builtinLogger.js +3 -3
  143. package/cjs/utils/settingsValidation/logger/commons.js +1 -1
  144. package/cjs/utils/settingsValidation/logger/pluggableLogger.js +1 -1
  145. package/cjs/utils/settingsValidation/runtime.js +11 -0
  146. package/cjs/utils/settingsValidation/splitFilters.js +1 -1
  147. package/cjs/utils/settingsValidation/storage/storageCS.js +1 -1
  148. package/cjs/utils/timeTracker/index.js +3 -3
  149. package/esm/evaluator/matchers/ew.js +4 -4
  150. package/esm/integrations/ga/GoogleAnalyticsToSplit.js +4 -2
  151. package/esm/integrations/ga/SplitToGoogleAnalytics.js +4 -2
  152. package/esm/listeners/browser.js +14 -10
  153. package/esm/logger/constants.js +6 -2
  154. package/esm/logger/messages/debug.js +3 -3
  155. package/esm/logger/messages/error.js +4 -3
  156. package/esm/logger/messages/info.js +7 -4
  157. package/esm/sdkClient/client.js +3 -2
  158. package/esm/sdkClient/clientCS.js +1 -1
  159. package/esm/sdkClient/clientInputValidation.js +6 -8
  160. package/esm/sdkClient/sdkClient.js +1 -4
  161. package/esm/sdkClient/sdkClientMethodCS.js +1 -5
  162. package/esm/sdkClient/sdkClientMethodCSWithTT.js +1 -9
  163. package/esm/sdkFactory/index.js +8 -6
  164. package/esm/sdkFactory/userConsentProps.js +36 -0
  165. package/esm/services/splitApi.js +2 -1
  166. package/esm/storages/KeyBuilder.js +2 -6
  167. package/esm/storages/KeyBuilderCS.js +11 -1
  168. package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +23 -3
  169. package/esm/storages/inLocalStorage/index.js +1 -1
  170. package/esm/storages/inMemory/ImpressionsCacheInMemory.js +15 -1
  171. package/esm/storages/inMemory/InMemoryStorage.js +1 -1
  172. package/esm/storages/inMemory/InMemoryStorageCS.js +1 -1
  173. package/esm/storages/inRedis/RedisAdapter.js +15 -2
  174. package/esm/storages/pluggable/index.js +2 -2
  175. package/esm/sync/offline/splitsParser/splitsParserFromFile.js +1 -1
  176. package/esm/sync/polling/fetchers/mySegmentsFetcher.js +2 -2
  177. package/esm/sync/polling/fetchers/segmentChangesFetcher.js +2 -2
  178. package/esm/sync/polling/pollingManagerCS.js +2 -1
  179. package/esm/sync/polling/pollingManagerSS.js +2 -1
  180. package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +1 -1
  181. package/esm/sync/polling/updaters/mySegmentsUpdater.js +2 -2
  182. package/esm/sync/streaming/SSEClient/index.js +2 -1
  183. package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +1 -1
  184. package/esm/sync/streaming/pushManager.js +13 -5
  185. package/esm/sync/submitters/eventsSyncTask.js +18 -6
  186. package/esm/sync/submitters/impressionsSyncTask.js +13 -1
  187. package/esm/sync/submitters/submitterManager.js +2 -1
  188. package/esm/sync/syncManagerOnline.js +14 -15
  189. package/esm/trackers/eventTracker.js +8 -1
  190. package/esm/trackers/impressionObserver/utils.js +7 -1
  191. package/esm/trackers/impressionsTracker.js +6 -5
  192. package/esm/utils/consent.js +6 -0
  193. package/esm/utils/constants/index.js +4 -0
  194. package/esm/utils/inputValidation/attributes.js +1 -1
  195. package/esm/utils/inputValidation/eventProperties.js +4 -2
  196. package/esm/utils/inputValidation/key.js +2 -1
  197. package/esm/utils/lang/index.js +12 -15
  198. package/esm/utils/lang/maps.js +14 -1
  199. package/esm/utils/settingsValidation/consent.js +12 -0
  200. package/esm/utils/settingsValidation/impressionsMode.js +7 -7
  201. package/esm/utils/settingsValidation/index.js +28 -10
  202. package/esm/utils/settingsValidation/runtime.js +7 -0
  203. package/package.json +6 -6
  204. package/src/evaluator/matchers/ew.ts +4 -4
  205. package/src/evaluator/parser/index.ts +1 -1
  206. package/src/evaluator/types.ts +2 -2
  207. package/src/evaluator/value/index.ts +2 -2
  208. package/src/evaluator/value/sanitize.ts +2 -2
  209. package/src/integrations/ga/GoogleAnalyticsToSplit.ts +7 -4
  210. package/src/integrations/ga/SplitToGoogleAnalytics.ts +7 -4
  211. package/src/integrations/pluggable.ts +2 -2
  212. package/src/integrations/types.ts +5 -0
  213. package/src/listeners/browser.ts +13 -9
  214. package/src/logger/constants.ts +6 -2
  215. package/src/logger/messages/debug.ts +3 -3
  216. package/src/logger/messages/error.ts +4 -3
  217. package/src/logger/messages/info.ts +7 -4
  218. package/src/logger/types.ts +4 -0
  219. package/src/sdkClient/client.ts +3 -2
  220. package/src/sdkClient/clientCS.ts +1 -1
  221. package/src/sdkClient/clientInputValidation.ts +8 -7
  222. package/src/sdkClient/sdkClient.ts +2 -5
  223. package/src/sdkClient/sdkClientMethodCS.ts +1 -6
  224. package/src/sdkClient/sdkClientMethodCSWithTT.ts +2 -11
  225. package/src/sdkFactory/index.ts +9 -7
  226. package/src/sdkFactory/types.ts +2 -1
  227. package/src/sdkFactory/userConsentProps.ts +42 -0
  228. package/src/storages/KeyBuilder.ts +2 -6
  229. package/src/storages/KeyBuilderCS.ts +13 -1
  230. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +23 -3
  231. package/src/storages/inLocalStorage/index.ts +1 -1
  232. package/src/storages/inMemory/ImpressionsCacheInMemory.ts +22 -1
  233. package/src/storages/inMemory/InMemoryStorage.ts +1 -1
  234. package/src/storages/inMemory/InMemoryStorageCS.ts +1 -1
  235. package/src/storages/inRedis/RedisAdapter.ts +8 -2
  236. package/src/storages/pluggable/index.ts +2 -2
  237. package/src/storages/types.ts +6 -2
  238. package/src/sync/offline/splitsParser/splitsParserFromFile.ts +1 -1
  239. package/src/sync/polling/fetchers/mySegmentsFetcher.ts +2 -1
  240. package/src/sync/polling/fetchers/types.ts +1 -0
  241. package/src/sync/polling/pollingManagerCS.ts +3 -6
  242. package/src/sync/polling/pollingManagerSS.ts +3 -8
  243. package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +2 -1
  244. package/src/sync/polling/types.ts +0 -12
  245. package/src/sync/polling/updaters/mySegmentsUpdater.ts +2 -1
  246. package/src/sync/streaming/SSEClient/index.ts +2 -1
  247. package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
  248. package/src/sync/streaming/pushManager.ts +19 -16
  249. package/src/sync/streaming/types.ts +5 -25
  250. package/src/sync/submitters/eventsSyncTask.ts +19 -6
  251. package/src/sync/submitters/impressionsSyncTask.ts +16 -1
  252. package/src/sync/submitters/submitterManager.ts +4 -8
  253. package/src/sync/syncManagerOnline.ts +20 -24
  254. package/src/sync/types.ts +4 -1
  255. package/src/trackers/eventTracker.ts +11 -3
  256. package/src/trackers/impressionObserver/utils.ts +8 -1
  257. package/src/trackers/impressionsTracker.ts +7 -8
  258. package/src/types.ts +22 -1
  259. package/src/utils/consent.ts +8 -0
  260. package/src/utils/constants/index.ts +5 -0
  261. package/src/utils/inputValidation/attributes.ts +1 -2
  262. package/src/utils/inputValidation/eventProperties.ts +4 -2
  263. package/src/utils/lang/index.ts +15 -18
  264. package/src/utils/lang/maps.ts +15 -1
  265. package/src/utils/settingsValidation/consent.ts +16 -0
  266. package/src/utils/settingsValidation/impressionsMode.ts +8 -8
  267. package/src/utils/settingsValidation/index.ts +29 -10
  268. package/src/utils/settingsValidation/runtime.ts +9 -0
  269. package/src/utils/settingsValidation/types.ts +12 -6
  270. package/types/evaluator/types.d.ts +2 -2
  271. package/types/evaluator/value/index.d.ts +1 -1
  272. package/types/evaluator/value/sanitize.d.ts +1 -1
  273. package/types/integrations/ga/GoogleAnalyticsToSplit.d.ts +2 -2
  274. package/types/integrations/ga/SplitToGoogleAnalytics.d.ts +2 -3
  275. package/types/integrations/types.d.ts +4 -0
  276. package/types/logger/constants.d.ts +6 -2
  277. package/types/logger/types.d.ts +4 -0
  278. package/types/sdkClient/clientAttributesDecoration.d.ts +1 -1
  279. package/types/sdkClient/clientInputValidation.d.ts +2 -3
  280. package/types/sdkFactory/types.d.ts +1 -1
  281. package/types/sdkFactory/userConsentProps.d.ts +6 -0
  282. package/types/storages/KeyBuilderCS.d.ts +2 -0
  283. package/types/storages/inMemory/ImpressionsCacheInMemory.d.ts +9 -0
  284. package/types/storages/inMemory/index.d.ts +10 -0
  285. package/types/storages/inRedis/RedisAdapter.d.ts +1 -1
  286. package/types/storages/parseSegments.d.ts +6 -0
  287. package/types/storages/types.d.ts +3 -1
  288. package/types/sync/polling/fetchers/mySegmentsFetcher.d.ts +1 -1
  289. package/types/sync/polling/fetchers/types.d.ts +1 -1
  290. package/types/sync/polling/pollingManagerCS.d.ts +2 -5
  291. package/types/sync/polling/pollingManagerSS.d.ts +2 -5
  292. package/types/sync/polling/types.d.ts +0 -11
  293. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +1 -1
  294. package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -1
  295. package/types/sync/streaming/pushManager.d.ts +3 -7
  296. package/types/sync/streaming/pushManagerCS.d.ts +1 -12
  297. package/types/sync/streaming/pushManagerSS.d.ts +1 -11
  298. package/types/sync/streaming/types.d.ts +3 -23
  299. package/types/sync/submitters/submitterManager.d.ts +2 -4
  300. package/types/sync/syncManagerOnline.d.ts +3 -3
  301. package/types/sync/types.d.ts +3 -0
  302. package/types/trackers/eventTracker.d.ts +2 -2
  303. package/types/trackers/impressionObserver/utils.d.ts +4 -0
  304. package/types/trackers/impressionsTracker.d.ts +2 -3
  305. package/types/types.d.ts +22 -1
  306. package/types/utils/consent.d.ts +2 -0
  307. package/types/utils/constants/index.d.ts +3 -0
  308. package/types/utils/lang/index.d.ts +6 -5
  309. package/types/utils/lang/maps.d.ts +7 -0
  310. package/types/utils/settingsValidation/consent.d.ts +6 -0
  311. package/types/utils/settingsValidation/impressionsMode.d.ts +1 -1
  312. package/types/utils/settingsValidation/runtime/browser.d.ts +2 -0
  313. package/types/utils/settingsValidation/runtime/node.d.ts +2 -0
  314. package/types/utils/settingsValidation/runtime.d.ts +2 -0
  315. package/types/utils/settingsValidation/types.d.ts +12 -6
  316. package/types/utils/settingsValidation/userConsent.d.ts +5 -0
@@ -65,7 +65,7 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
65
65
  log.debug(constants_2.LOG_PREFIX_SYNC_SEGMENTS + "Processed " + segmentName + " with till = " + x.till + ". Added: " + x.added.length + ". Removed: " + x.removed.length);
66
66
  });
67
67
  // If at least one storage operation result is a promise, join all in a single promise.
68
- if (results.some(function (result) { return thenable_1.thenable(result); }))
68
+ if (results.some(function (result) { return (0, thenable_1.thenable)(result); }))
69
69
  return Promise.all(results).then(function () { return changeNumber; });
70
70
  return changeNumber;
71
71
  });
@@ -76,7 +76,7 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
76
76
  }
77
77
  return Promise.all(updaters).then(function (shouldUpdateFlags) {
78
78
  // if at least one segment fetch succeeded, mark segments ready
79
- if (lang_1.findIndex(shouldUpdateFlags, function (v) { return v !== -1; }) !== -1 || readyOnAlreadyExistentState) {
79
+ if ((0, lang_1.findIndex)(shouldUpdateFlags, function (v) { return v !== -1; }) !== -1 || readyOnAlreadyExistentState) {
80
80
  readyOnAlreadyExistentState = false;
81
81
  if (readiness)
82
82
  readiness.segments.emit(constants_1.SDK_SEGMENTS_ARRIVED);
@@ -51,7 +51,7 @@ function computeSplitsMutation(entries) {
51
51
  }
52
52
  return accum;
53
53
  }, { added: [], removed: [], segments: [] });
54
- computed.segments = sets_1.setToArray(segments);
54
+ computed.segments = (0, sets_1.setToArray)(segments);
55
55
  return computed;
56
56
  }
57
57
  exports.computeSplitsMutation = computeSplitsMutation;
@@ -76,7 +76,7 @@ function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, segments,
76
76
  /** timeout and telemetry decorator for `splitChangesFetcher` promise */
77
77
  function _promiseDecorator(promise) {
78
78
  if (startingUp && requestTimeoutBeforeReady)
79
- promise = timeout_1.timeout(requestTimeoutBeforeReady, promise);
79
+ promise = (0, timeout_1.timeout)(requestTimeoutBeforeReady, promise);
80
80
  return promise;
81
81
  // @TODO telemetry
82
82
  // const collectMetrics = startingUp || isNode; // If we are on the browser, only collect this metric for first fetch. On node do it always.
@@ -20,11 +20,11 @@ function authenticateFactory(fetchAuth) {
20
20
  .then(function (resp) { return resp.json(); })
21
21
  .then(function (json) {
22
22
  if (json.token) { // empty token when `"pushEnabled": false`
23
- var decodedToken = jwt_1.decodeJWTtoken(json.token);
23
+ var decodedToken = (0, jwt_1.decodeJWTtoken)(json.token);
24
24
  if (typeof decodedToken.iat !== 'number' || typeof decodedToken.exp !== 'number')
25
25
  throw new Error('token properties "issuedAt" (iat) or "expiration" (exp) are missing or invalid');
26
26
  var channels = JSON.parse(decodedToken['x-ably-capability']);
27
- return objectAssign_1.objectAssign({
27
+ return (0, objectAssign_1.objectAssign)({
28
28
  decodedToken: decodedToken,
29
29
  channels: channels
30
30
  }, json);
@@ -38,6 +38,6 @@ exports.authenticateFactory = authenticateFactory;
38
38
  * Returns the hash of a given user key
39
39
  */
40
40
  function hashUserKey(userKey) {
41
- return base64_1.encodeToBase64(murmur3_1.hash(userKey, 0).toString());
41
+ return (0, base64_1.encodeToBase64)((0, murmur3_1.hash)(userKey, 0).toString());
42
42
  }
43
43
  exports.hashUserKey = hashUserKey;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SSEClient = void 0;
4
+ var lang_1 = require("../../../utils/lang");
4
5
  var VERSION = '1.1';
5
6
  var CONTROL_CHANNEL_REGEX = /^control_/;
6
7
  /**
@@ -11,7 +12,7 @@ var CONTROL_CHANNEL_REGEX = /^control_/;
11
12
  */
12
13
  function buildSSEHeaders(settings) {
13
14
  var headers = {
14
- SplitSDKClientKey: settings.core.authorizationKey.slice(-4),
15
+ SplitSDKClientKey: (0, lang_1.isString)(settings.core.authorizationKey) ? settings.core.authorizationKey.slice(-4) : '',
15
16
  SplitSDKVersion: settings.version,
16
17
  };
17
18
  // ip and hostname are false if IPAddressesEnabled is false
@@ -13,7 +13,7 @@ var lang_1 = require("../../../utils/lang");
13
13
  */
14
14
  function errorParser(error) {
15
15
  // @ts-ignore
16
- if (lang_1.isString(error.data))
16
+ if ((0, lang_1.isString)(error.data))
17
17
  error.parsedData = JSON.parse(error.data); // cannot assign to read only property 'data'
18
18
  return error;
19
19
  }
@@ -25,7 +25,7 @@ function isRetryableError(error) {
25
25
  * @param pushEmitter emitter for events related to streaming support
26
26
  */
27
27
  function SSEHandlerFactory(log, pushEmitter) {
28
- var notificationKeeper = NotificationKeeper_1.notificationKeeperFactory(pushEmitter);
28
+ var notificationKeeper = (0, NotificationKeeper_1.notificationKeeperFactory)(pushEmitter);
29
29
  return {
30
30
  handleOpen: function () {
31
31
  notificationKeeper.handleOpen();
@@ -34,7 +34,7 @@ function SSEHandlerFactory(log, pushEmitter) {
34
34
  handleError: function (error) {
35
35
  var errorWithParsedData = error;
36
36
  try {
37
- errorWithParsedData = NotificationParser_1.errorParser(error);
37
+ errorWithParsedData = (0, NotificationParser_1.errorParser)(error);
38
38
  }
39
39
  catch (err) {
40
40
  log.warn(constants_2.STREAMING_PARSING_ERROR_FAILS, [err]);
@@ -52,7 +52,7 @@ function SSEHandlerFactory(log, pushEmitter) {
52
52
  handleMessage: function (message) {
53
53
  var messageWithParsedData;
54
54
  try {
55
- messageWithParsedData = NotificationParser_1.messageParser(message);
55
+ messageWithParsedData = (0, NotificationParser_1.messageParser)(message);
56
56
  if (!messageWithParsedData)
57
57
  return; // Messages with empty data are ignored
58
58
  }
@@ -10,7 +10,7 @@ var SegmentsUpdateWorker = /** @class */ (function () {
10
10
  * @param {Object} segmentsCache segments data cache
11
11
  * @param {Object} segmentsSyncTask task for syncing segments data
12
12
  */
13
- function SegmentsUpdateWorker(segmentsCache, segmentsSyncTask) {
13
+ function SegmentsUpdateWorker(segmentsSyncTask, segmentsCache) {
14
14
  this.segmentsCache = segmentsCache;
15
15
  this.segmentsSyncTask = segmentsSyncTask;
16
16
  this.maxChangeNumbers = {};
@@ -21,7 +21,7 @@ function StringToUint8Array(myString) {
21
21
  * @throws if data string cannot be decoded, decompressed or the provided compression value is invalid (not 1 or 2)
22
22
  */
23
23
  function decompress(data, compression) {
24
- var compressData = base64_1.decodeFromBase64(data);
24
+ var compressData = (0, base64_1.decodeFromBase64)(data);
25
25
  var binData = StringToUint8Array(compressData);
26
26
  if (typeof decompress_1.algorithms === 'string')
27
27
  throw new Error(decompress_1.algorithms);
@@ -22,10 +22,11 @@ var murmur3_64_1 = require("../../utils/murmur3/murmur3_64");
22
22
  * - for server-side if key is not provided in settings.
23
23
  * - for client-side, with support for multiple clients, if key is provided in settings
24
24
  */
25
- function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platform, settings) {
25
+ function pushManagerFactory(params, pollingManager) {
26
+ var settings = params.settings, storage = params.storage, splitApi = params.splitApi, readiness = params.readiness, platform = params.platform;
26
27
  // `userKey` is the matching key of main client in client-side SDK.
27
28
  // It can be used to check if running on client-side or server-side SDK.
28
- var userKey = settings.core.key ? key_1.getMatching(settings.core.key) : undefined;
29
+ var userKey = settings.core.key ? (0, key_1.getMatching)(settings.core.key) : undefined;
29
30
  var log = settings.log;
30
31
  var sseClient;
31
32
  try {
@@ -36,14 +37,14 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
36
37
  log.warn(constants_2.STREAMING_FALLBACK, [e]);
37
38
  return;
38
39
  }
39
- var authenticate = AuthClient_1.authenticateFactory(fetchAuth);
40
+ var authenticate = (0, AuthClient_1.authenticateFactory)(splitApi.fetchAuth);
40
41
  // init feedback loop
41
42
  var pushEmitter = new platform.EventEmitter();
42
- var sseHandler = SSEHandler_1.SSEHandlerFactory(log, pushEmitter);
43
+ var sseHandler = (0, SSEHandler_1.SSEHandlerFactory)(log, pushEmitter);
43
44
  sseClient.setEventHandler(sseHandler);
44
45
  // init workers
45
46
  // MySegmentsUpdateWorker (client-side) are initiated in `add` method
46
- var segmentsUpdateWorker = userKey ? undefined : new SegmentsUpdateWorker_1.SegmentsUpdateWorker(storage.segments, pollingManager.segmentsSyncTask);
47
+ var segmentsUpdateWorker = userKey ? undefined : new SegmentsUpdateWorker_1.SegmentsUpdateWorker(pollingManager.segmentsSyncTask, storage.segments);
47
48
  // For server-side we pass the segmentsSyncTask, used by SplitsUpdateWorker to fetch new segments
48
49
  var splitsUpdateWorker = new SplitsUpdateWorker_1.SplitsUpdateWorker(storage.splits, pollingManager.splitsSyncTask, readiness.splits, userKey ? undefined : pollingManager.segmentsSyncTask);
49
50
  // [Only for client-side] map of hashes to user keys, to dispatch MY_SEGMENTS_UPDATE events to the corresponding MySegmentsUpdateWorker
@@ -57,6 +58,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
57
58
  // It is used to halt the `connectPush` process if it was in progress.
58
59
  var disconnected;
59
60
  // flag that indicates a PUSH_NONRETRYABLE_ERROR, condition with which starting pushManager again is ignored.
61
+ // true if STREAMING_DISABLED control event, or 'pushEnabled: false', or non-recoverable SSE or Auth errors.
60
62
  var disabled; // `disabled` implies `disconnected === true`
61
63
  /** PushManager functions related to initialization */
62
64
  var connectPushRetryBackoff = new Backoff_1.Backoff(connectPush, settings.scheduler.pushRetryBackoffBase);
@@ -137,7 +139,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
137
139
  function stopWorkers() {
138
140
  splitsUpdateWorker.backoff.reset();
139
141
  if (userKey)
140
- lang_1.forOwn(clients, function (_a) {
142
+ (0, lang_1.forOwn)(clients, function (_a) {
141
143
  var worker = _a.worker;
142
144
  return worker.backoff.reset();
143
145
  });
@@ -193,15 +195,15 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
193
195
  case types_1.UpdateStrategy.BoundedFetchRequest: {
194
196
  var bitmap_1;
195
197
  try {
196
- bitmap_1 = mySegmentsV2utils_1.parseBitmap(parsedData.d, parsedData.c);
198
+ bitmap_1 = (0, mySegmentsV2utils_1.parseBitmap)(parsedData.d, parsedData.c);
197
199
  }
198
200
  catch (e) {
199
201
  log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['BoundedFetchRequest', e]);
200
202
  break;
201
203
  }
202
- lang_1.forOwn(clients, function (_a) {
204
+ (0, lang_1.forOwn)(clients, function (_a) {
203
205
  var hash64 = _a.hash64, worker = _a.worker;
204
- if (mySegmentsV2utils_1.isInBitmap(bitmap_1, hash64.hex)) {
206
+ if ((0, mySegmentsV2utils_1.isInBitmap)(bitmap_1, hash64.hex)) {
205
207
  worker.put(parsedData.changeNumber); // fetch mySegments
206
208
  }
207
209
  });
@@ -210,7 +212,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
210
212
  case types_1.UpdateStrategy.KeyList: {
211
213
  var keyList = void 0, added_1, removed_1;
212
214
  try {
213
- keyList = mySegmentsV2utils_1.parseKeyList(parsedData.d, parsedData.c);
215
+ keyList = (0, mySegmentsV2utils_1.parseKeyList)(parsedData.d, parsedData.c);
214
216
  added_1 = new sets_1._Set(keyList.a);
215
217
  removed_1 = new sets_1._Set(keyList.r);
216
218
  }
@@ -218,7 +220,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
218
220
  log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['KeyList', e]);
219
221
  break;
220
222
  }
221
- lang_1.forOwn(clients, function (_a) {
223
+ (0, lang_1.forOwn)(clients, function (_a) {
222
224
  var hash64 = _a.hash64, worker = _a.worker;
223
225
  var add = added_1.has(hash64.dec) ? true : removed_1.has(hash64.dec) ? false : undefined;
224
226
  if (add !== undefined) {
@@ -235,7 +237,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
235
237
  log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['SegmentRemoval', 'No segment name was provided']);
236
238
  break;
237
239
  }
238
- lang_1.forOwn(clients, function (_a) {
240
+ (0, lang_1.forOwn)(clients, function (_a) {
239
241
  var worker = _a.worker;
240
242
  return worker.put(parsedData.changeNumber, {
241
243
  name: parsedData.segmentName,
@@ -245,7 +247,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
245
247
  return;
246
248
  }
247
249
  // `UpdateStrategy.UnboundedFetchRequest` and fallbacks of other cases
248
- lang_1.forOwn(clients, function (_a) {
250
+ (0, lang_1.forOwn)(clients, function (_a) {
249
251
  var worker = _a.worker;
250
252
  worker.put(parsedData.changeNumber);
251
253
  });
@@ -254,16 +256,18 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
254
256
  else {
255
257
  pushEmitter.on(constants_1.SEGMENT_UPDATE, segmentsUpdateWorker.put);
256
258
  }
257
- return objectAssign_1.objectAssign(
259
+ return (0, objectAssign_1.objectAssign)(
258
260
  // Expose Event Emitter functionality and Event constants
259
261
  Object.create(pushEmitter), {
260
- // Stop/pause push mode
262
+ // Stop/pause push mode.
263
+ // It doesn't emit events. Neither PUSH_SUBSYSTEM_DOWN to start polling.
261
264
  stop: function () {
262
265
  disconnectPush(); // `handleNonRetryableError` cannot be used as `stop`, because it emits PUSH_SUBSYSTEM_DOWN event, which starts polling.
263
266
  if (userKey)
264
267
  this.remove(userKey); // Necessary to properly resume streaming in client-side (e.g., RN SDK transition to foreground).
265
268
  },
266
- // Start/resume push mode
269
+ // Start/resume push mode.
270
+ // It eventually emits PUSH_SUBSYSTEM_DOWN, that starts polling, or PUSH_SUBSYSTEM_UP, that executes a syncAll
267
271
  start: function () {
268
272
  // Guard condition to avoid calling `connectPush` again if the `start` method is called multiple times or if push has been disabled.
269
273
  if (disabled || disconnected === false)
@@ -274,12 +278,16 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
274
278
  else
275
279
  setTimeout(connectPush); // server-side runs in next cycle as in client-side, for consistency with client-side
276
280
  },
281
+ // true/false if start or stop was called last respectively
282
+ isRunning: function () {
283
+ return disconnected === false;
284
+ },
277
285
  // [Only for client-side]
278
286
  add: function (userKey, mySegmentsSyncTask) {
279
- var hash = AuthClient_1.hashUserKey(userKey);
287
+ var hash = (0, AuthClient_1.hashUserKey)(userKey);
280
288
  if (!userKeyHashes[hash]) {
281
289
  userKeyHashes[hash] = userKey;
282
- clients[userKey] = { hash64: murmur3_64_1.hash64(userKey), worker: new MySegmentsUpdateWorker_1.MySegmentsUpdateWorker(mySegmentsSyncTask) };
290
+ clients[userKey] = { hash64: (0, murmur3_64_1.hash64)(userKey), worker: new MySegmentsUpdateWorker_1.MySegmentsUpdateWorker(mySegmentsSyncTask) };
283
291
  connectForNewClient = true; // we must reconnect on start, to listen the channel for the new user key
284
292
  // Reconnects in case of a new client.
285
293
  // Run in next event-loop cycle to save authentication calls
@@ -294,7 +302,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
294
302
  },
295
303
  // [Only for client-side]
296
304
  remove: function (userKey) {
297
- var hash = AuthClient_1.hashUserKey(userKey);
305
+ var hash = (0, AuthClient_1.hashUserKey)(userKey);
298
306
  delete userKeyHashes[hash];
299
307
  delete clients[userKey];
300
308
  }
@@ -3,29 +3,41 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.eventsSyncTaskFactory = void 0;
4
4
  var submitterSyncTask_1 = require("./submitterSyncTask");
5
5
  var constants_1 = require("../../logger/constants");
6
+ var DATA_NAME = 'events';
6
7
  /**
7
8
  * Sync task that periodically posts tracked events
8
9
  */
9
10
  function eventsSyncTaskFactory(log, postEventsBulk, eventsCache, eventsPushRate, eventsFirstPushWindow, latencyTracker) {
10
11
  // don't retry events.
11
- var syncTask = submitterSyncTask_1.submitterSyncTaskFactory(log, postEventsBulk, eventsCache, eventsPushRate, 'queued events', latencyTracker);
12
- // Set a timer for the first push of events,
12
+ var syncTask = (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postEventsBulk, eventsCache, eventsPushRate, DATA_NAME, latencyTracker);
13
+ // Set a timer for the first push window of events.
14
+ // Not implemented in the base submitter or sync task, since this feature is only used by the events submitter.
13
15
  if (eventsFirstPushWindow > 0) {
16
+ var running_1 = false;
14
17
  var stopEventPublisherTimeout_1;
15
18
  var originalStart_1 = syncTask.start;
16
19
  syncTask.start = function () {
20
+ running_1 = true;
17
21
  stopEventPublisherTimeout_1 = setTimeout(originalStart_1, eventsFirstPushWindow);
18
22
  };
19
23
  var originalStop_1 = syncTask.stop;
20
24
  syncTask.stop = function () {
25
+ running_1 = false;
21
26
  clearTimeout(stopEventPublisherTimeout_1);
22
27
  originalStop_1();
23
28
  };
29
+ syncTask.isRunning = function () {
30
+ return running_1;
31
+ };
24
32
  }
25
- // register eventsSubmitter to be executed when events cache is full
33
+ // register events submitter to be executed when events cache is full
26
34
  eventsCache.setOnFullQueueCb(function () {
27
- log.info(constants_1.SUBMITTERS_PUSH_FULL_EVENTS_QUEUE);
28
- syncTask.execute();
35
+ if (syncTask.isRunning()) {
36
+ log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [DATA_NAME]);
37
+ syncTask.execute();
38
+ }
39
+ // If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data.
40
+ // Data will be sent when submitter is resumed.
29
41
  });
30
42
  return syncTask;
31
43
  }
@@ -30,6 +30,6 @@ var IMPRESSIONS_COUNT_RATE = 1800000; // 30 minutes
30
30
  */
31
31
  function impressionCountsSyncTaskFactory(log, postTestImpressionsCount, impressionCountsCache, latencyTracker) {
32
32
  // retry impressions counts only once.
33
- return submitterSyncTask_1.submitterSyncTaskFactory(log, postTestImpressionsCount, impressionCountsCache, IMPRESSIONS_COUNT_RATE, 'impression counts', latencyTracker, fromImpressionCountsCollector, 1);
33
+ return (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postTestImpressionsCount, impressionCountsCache, IMPRESSIONS_COUNT_RATE, 'impression counts', latencyTracker, fromImpressionCountsCollector, 1);
34
34
  }
35
35
  exports.impressionCountsSyncTaskFactory = impressionCountsSyncTaskFactory;
@@ -3,14 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.impressionsSyncTaskFactory = exports.fromImpressionsCollector = void 0;
4
4
  var lang_1 = require("../../utils/lang");
5
5
  var submitterSyncTask_1 = require("./submitterSyncTask");
6
+ var constants_1 = require("../../logger/constants");
7
+ var DATA_NAME = 'impressions';
6
8
  /**
7
9
  * Converts `impressions` data from cache into request payload.
8
10
  */
9
11
  function fromImpressionsCollector(sendLabels, data) {
10
- var groupedByFeature = lang_1.groupBy(data, 'feature');
12
+ var groupedByFeature = (0, lang_1.groupBy)(data, 'feature');
11
13
  var dto = [];
12
14
  // using forOwn instead of for...in since the last also iterates over prototype enumerables
13
- lang_1.forOwn(groupedByFeature, function (value, name) {
15
+ (0, lang_1.forOwn)(groupedByFeature, function (value, name) {
14
16
  dto.push({
15
17
  f: name,
16
18
  i: value.map(function (entry) {
@@ -36,6 +38,16 @@ exports.fromImpressionsCollector = fromImpressionsCollector;
36
38
  function impressionsSyncTaskFactory(log, postTestImpressionsBulk, impressionsCache, impressionsRefreshRate, sendLabels, latencyTracker) {
37
39
  if (sendLabels === void 0) { sendLabels = false; }
38
40
  // retry impressions only once.
39
- return submitterSyncTask_1.submitterSyncTaskFactory(log, postTestImpressionsBulk, impressionsCache, impressionsRefreshRate, 'impressions', latencyTracker, fromImpressionsCollector.bind(undefined, sendLabels), 1);
41
+ var syncTask = (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postTestImpressionsBulk, impressionsCache, impressionsRefreshRate, DATA_NAME, latencyTracker, fromImpressionsCollector.bind(undefined, sendLabels), 1);
42
+ // register impressions submitter to be executed when impressions cache is full
43
+ impressionsCache.setOnFullQueueCb(function () {
44
+ if (syncTask.isRunning()) {
45
+ log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [DATA_NAME]);
46
+ syncTask.execute();
47
+ }
48
+ // If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data.
49
+ // Data will be sent when submitter is resumed.
50
+ });
51
+ return syncTask;
40
52
  }
41
53
  exports.impressionsSyncTaskFactory = impressionsSyncTaskFactory;
@@ -7,7 +7,7 @@ var submitterSyncTask_1 = require("./submitterSyncTask");
7
7
  function fromCache(propertyName) {
8
8
  return function (data) {
9
9
  var result = [];
10
- lang_1.forOwn(data, function (value, key) {
10
+ (0, lang_1.forOwn)(data, function (value, key) {
11
11
  var _a;
12
12
  result.push((_a = { name: key }, _a[propertyName] = value, _a));
13
13
  });
@@ -18,7 +18,7 @@ function fromCache(propertyName) {
18
18
  * Sync task that periodically posts telemetry counts
19
19
  */
20
20
  function countsSyncTaskFactory(log, postMetricsCounters, countsCache, metricsRefreshRate, latencyTracker) {
21
- return submitterSyncTask_1.submitterSyncTaskFactory(log, postMetricsCounters, countsCache, metricsRefreshRate, 'count metrics', latencyTracker, fromCache('delta'));
21
+ return (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postMetricsCounters, countsCache, metricsRefreshRate, 'count metrics', latencyTracker, fromCache('delta'));
22
22
  }
23
23
  exports.countsSyncTaskFactory = countsSyncTaskFactory;
24
24
  /**
@@ -26,6 +26,6 @@ exports.countsSyncTaskFactory = countsSyncTaskFactory;
26
26
  */
27
27
  function latenciesSyncTaskFactory(log, postMetricsLatencies, latenciesCache, metricsRefreshRate, latencyTracker) {
28
28
  // don't retry metrics.
29
- return submitterSyncTask_1.submitterSyncTaskFactory(log, postMetricsLatencies, latenciesCache, metricsRefreshRate, 'latency metrics', latencyTracker, fromCache('latencies'), 0, true);
29
+ return (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postMetricsLatencies, latenciesCache, metricsRefreshRate, 'latency metrics', latencyTracker, fromCache('latencies'), 0, true);
30
30
  }
31
31
  exports.latenciesSyncTaskFactory = latenciesSyncTaskFactory;
@@ -5,15 +5,16 @@ var syncTaskComposite_1 = require("../syncTaskComposite");
5
5
  var eventsSyncTask_1 = require("./eventsSyncTask");
6
6
  var impressionsSyncTask_1 = require("./impressionsSyncTask");
7
7
  var impressionCountsSyncTask_1 = require("./impressionCountsSyncTask");
8
- function submitterManagerFactory(settings, storage, splitApi) {
8
+ function submitterManagerFactory(params) {
9
+ var settings = params.settings, storage = params.storage, splitApi = params.splitApi;
9
10
  var log = settings.log;
10
11
  var submitters = [
11
- impressionsSyncTask_1.impressionsSyncTaskFactory(log, splitApi.postTestImpressionsBulk, storage.impressions, settings.scheduler.impressionsRefreshRate, settings.core.labelsEnabled),
12
- eventsSyncTask_1.eventsSyncTaskFactory(log, splitApi.postEventsBulk, storage.events, settings.scheduler.eventsPushRate, settings.startup.eventsFirstPushWindow)
12
+ (0, impressionsSyncTask_1.impressionsSyncTaskFactory)(log, splitApi.postTestImpressionsBulk, storage.impressions, settings.scheduler.impressionsRefreshRate, settings.core.labelsEnabled),
13
+ (0, eventsSyncTask_1.eventsSyncTaskFactory)(log, splitApi.postEventsBulk, storage.events, settings.scheduler.eventsPushRate, settings.startup.eventsFirstPushWindow)
13
14
  // @TODO add telemetry submitter
14
15
  ];
15
16
  if (storage.impressionCounts)
16
- submitters.push(impressionCountsSyncTask_1.impressionCountsSyncTaskFactory(log, splitApi.postTestImpressionsCount, storage.impressionCounts));
17
- return syncTaskComposite_1.syncTaskComposite(submitters);
17
+ submitters.push((0, impressionCountsSyncTask_1.impressionCountsSyncTaskFactory)(log, splitApi.postTestImpressionsCount, storage.impressionCounts));
18
+ return (0, syncTaskComposite_1.syncTaskComposite)(submitters);
18
19
  }
19
20
  exports.submitterManagerFactory = submitterManagerFactory;
@@ -39,6 +39,6 @@ function submitterSyncTaskFactory(log, postClient, sourceCache, postRate, dataNa
39
39
  // if latencyTracker provided, attach stop callback to postEventsPromise
40
40
  return latencyTrackerStop ? postPromise.then(latencyTrackerStop).catch(latencyTrackerStop) : postPromise;
41
41
  }
42
- return syncTask_1.syncTaskFactory(log, postData, postRate, dataName + ' submitter');
42
+ return (0, syncTask_1.syncTaskFactory)(log, postData, postRate, dataName + ' submitter');
43
43
  }
44
44
  exports.submitterSyncTaskFactory = submitterSyncTaskFactory;
@@ -4,6 +4,7 @@ exports.syncManagerOnlineFactory = void 0;
4
4
  var submitterManager_1 = require("./submitters/submitterManager");
5
5
  var constants_1 = require("./streaming/constants");
6
6
  var constants_2 = require("../logger/constants");
7
+ var consent_1 = require("../utils/consent");
7
8
  /**
8
9
  * Online SyncManager factory.
9
10
  * Can be used for server-side API, and client-side API with or without multiple clients.
@@ -16,18 +17,17 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
16
17
  /**
17
18
  * SyncManager factory for modular SDK
18
19
  */
19
- return function (_a) {
20
- var settings = _a.settings, platform = _a.platform, splitApi = _a.splitApi, storage = _a.storage, readiness = _a.readiness;
21
- var log = settings.log;
20
+ return function (params) {
21
+ var settings = params.settings, _a = params.settings, log = _a.log, streamingEnabled = _a.streamingEnabled;
22
22
  /** Polling Manager */
23
- var pollingManager = pollingManagerFactory && pollingManagerFactory(splitApi, storage, readiness, settings);
23
+ var pollingManager = pollingManagerFactory && pollingManagerFactory(params);
24
24
  /** Push Manager */
25
- var pushManager = settings.streamingEnabled && pollingManager && pushManagerFactory ?
26
- pushManagerFactory(pollingManager, storage, readiness, splitApi.fetchAuth, platform, settings) :
25
+ var pushManager = streamingEnabled && pollingManager && pushManagerFactory ?
26
+ pushManagerFactory(params, pollingManager) :
27
27
  undefined;
28
28
  /** Submitter Manager */
29
29
  // It is not inyected as push and polling managers, because at the moment it is required
30
- var submitter = submitterManager_1.submitterManagerFactory(settings, storage, splitApi);
30
+ var submitter = (0, submitterManager_1.submitterManagerFactory)(params);
31
31
  /** Sync Manager logic */
32
32
  function startPolling() {
33
33
  if (pollingManager.isRunning()) {
@@ -53,13 +53,15 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
53
53
  var running = false; // flag that indicates whether the syncManager has been started (true) or stopped (false)
54
54
  var startFirstTime = true; // flag to distinguish calling the `start` method for the first time, to support pausing and resuming the synchronization
55
55
  return {
56
+ // Exposed for fine-grained control of synchronization.
57
+ // E.g.: user consent, app state changes (Page hide, Foreground/Background, Online/Offline).
58
+ pollingManager: pollingManager,
56
59
  pushManager: pushManager,
60
+ submitter: submitter,
57
61
  /**
58
62
  * Method used to start the syncManager for the first time, or resume it after being stopped.
59
63
  */
60
64
  start: function () {
61
- if (running)
62
- return;
63
65
  running = true;
64
66
  // start syncing splits and segments
65
67
  if (pollingManager) {
@@ -76,15 +78,13 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
76
78
  }
77
79
  }
78
80
  // start periodic data recording (events, impressions, telemetry).
79
- if (submitter)
81
+ if ((0, consent_1.isConsentGranted)(settings))
80
82
  submitter.start();
81
83
  },
82
84
  /**
83
85
  * Method used to stop/pause the syncManager.
84
86
  */
85
87
  stop: function () {
86
- if (!running)
87
- return;
88
88
  running = false;
89
89
  // stop syncing
90
90
  if (pushManager)
@@ -92,14 +92,13 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
92
92
  if (pollingManager && pollingManager.isRunning())
93
93
  pollingManager.stop();
94
94
  // stop periodic data recording (events, impressions, telemetry).
95
- if (submitter)
96
- submitter.stop();
95
+ submitter.stop();
97
96
  },
98
97
  isRunning: function () {
99
98
  return running;
100
99
  },
101
100
  flush: function () {
102
- if (submitter)
101
+ if ((0, consent_1.isConsentGranted)(settings))
103
102
  return submitter.execute();
104
103
  else
105
104
  return Promise.resolve();
@@ -4,13 +4,17 @@ exports.eventTrackerFactory = void 0;
4
4
  var objectAssign_1 = require("../utils/lang/objectAssign");
5
5
  var thenable_1 = require("../utils/promise/thenable");
6
6
  var constants_1 = require("../logger/constants");
7
+ var constants_2 = require("../utils/constants");
8
+ var utils_1 = require("./impressionObserver/utils");
7
9
  /**
8
10
  * Event tracker stores events in cache and pass them to the integrations manager if provided.
9
11
  *
10
12
  * @param eventsCache cache to save events
11
13
  * @param integrationsManager optional event handler used for integrations
12
14
  */
13
- function eventTrackerFactory(log, eventsCache, integrationsManager) {
15
+ function eventTrackerFactory(settings, eventsCache, integrationsManager) {
16
+ var log = settings.log;
17
+ var isSync = (0, utils_1.isStorageSync)(settings);
14
18
  function queueEventsCallback(eventData, tracked) {
15
19
  var eventTypeId = eventData.eventTypeId, trafficTypeName = eventData.trafficTypeName, key = eventData.key, value = eventData.value, timestamp = eventData.timestamp, properties = eventData.properties;
16
20
  // Logging every prop would be too much.
@@ -21,9 +25,9 @@ function eventTrackerFactory(log, eventsCache, integrationsManager) {
21
25
  // Wrap in a timeout because we don't want it to be blocking.
22
26
  setTimeout(function () {
23
27
  // copy of event, to avoid unexpected behaviour if modified by integrations
24
- var eventDataCopy = objectAssign_1.objectAssign({}, eventData);
28
+ var eventDataCopy = (0, objectAssign_1.objectAssign)({}, eventData);
25
29
  if (eventData.properties)
26
- eventDataCopy.properties = objectAssign_1.objectAssign({}, eventData.properties);
30
+ eventDataCopy.properties = (0, objectAssign_1.objectAssign)({}, eventData.properties);
27
31
  // integrationsManager does not throw errors (they are internally handled by each integration module)
28
32
  integrationsManager.handleEvent(eventDataCopy);
29
33
  }, 0);
@@ -36,8 +40,11 @@ function eventTrackerFactory(log, eventsCache, integrationsManager) {
36
40
  }
37
41
  return {
38
42
  track: function (eventData, size) {
43
+ if (settings.userConsent === constants_2.CONSENT_DECLINED) {
44
+ return isSync ? false : Promise.resolve(false);
45
+ }
39
46
  var tracked = eventsCache.track(eventData, size);
40
- if (thenable_1.thenable(tracked)) {
47
+ if ((0, thenable_1.thenable)(tracked)) {
41
48
  return tracked.then(queueEventsCallback.bind(null, eventData));
42
49
  }
43
50
  else {
@@ -5,7 +5,7 @@ var ImpressionObserver_1 = require("./ImpressionObserver");
5
5
  var murmur3_1 = require("../../utils/murmur3/murmur3");
6
6
  var buildKey_1 = require("./buildKey");
7
7
  function hashImpression32(impression) {
8
- return murmur3_1.hash(buildKey_1.buildKey(impression));
8
+ return (0, murmur3_1.hash)((0, buildKey_1.buildKey)(impression));
9
9
  }
10
10
  exports.hashImpression32 = hashImpression32;
11
11
  var LAST_SEEN_CACHE_SIZE = 500; // cache up to 500 impression hashes
@@ -5,7 +5,7 @@ var ImpressionObserver_1 = require("./ImpressionObserver");
5
5
  var murmur3_128_x86_1 = require("../../utils/murmur3/murmur3_128_x86");
6
6
  var buildKey_1 = require("./buildKey");
7
7
  function hashImpression128(impression) {
8
- return murmur3_128_x86_1.hash128(buildKey_1.buildKey(impression));
8
+ return (0, murmur3_128_x86_1.hash128)((0, buildKey_1.buildKey)(impression));
9
9
  }
10
10
  exports.hashImpression128 = hashImpression128;
11
11
  var LAST_SEEN_CACHE_SIZE = 500000; // cache up to 500k impression hashes
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.shouldBeOptimized = exports.shouldAddPt = void 0;
3
+ exports.isStorageSync = exports.shouldBeOptimized = exports.shouldAddPt = void 0;
4
4
  var constants_1 = require("../../utils/constants");
5
5
  /**
6
6
  * Checks if impressions previous time should be added or not.
@@ -18,3 +18,10 @@ function shouldBeOptimized(settings) {
18
18
  return settings.sync.impressionsMode === constants_1.OPTIMIZED ? true : false;
19
19
  }
20
20
  exports.shouldBeOptimized = shouldBeOptimized;
21
+ /**
22
+ * Storage is async if mode is consumer or partial consumer
23
+ */
24
+ function isStorageSync(settings) {
25
+ return [constants_1.CONSUMER_MODE, constants_1.CONSUMER_PARTIAL_MODE].indexOf(settings.mode) === -1 ? true : false;
26
+ }
27
+ exports.isStorageSync = isStorageSync;