@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
@@ -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
  }
@@ -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);
@@ -26,7 +26,7 @@ function pushManagerFactory(params, pollingManager) {
26
26
  var settings = params.settings, storage = params.storage, splitApi = params.splitApi, readiness = params.readiness, platform = params.platform;
27
27
  // `userKey` is the matching key of main client in client-side SDK.
28
28
  // It can be used to check if running on client-side or server-side SDK.
29
- 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;
30
30
  var log = settings.log;
31
31
  var sseClient;
32
32
  try {
@@ -37,10 +37,10 @@ function pushManagerFactory(params, pollingManager) {
37
37
  log.warn(constants_2.STREAMING_FALLBACK, [e]);
38
38
  return;
39
39
  }
40
- var authenticate = AuthClient_1.authenticateFactory(splitApi.fetchAuth);
40
+ var authenticate = (0, AuthClient_1.authenticateFactory)(splitApi.fetchAuth);
41
41
  // init feedback loop
42
42
  var pushEmitter = new platform.EventEmitter();
43
- var sseHandler = SSEHandler_1.SSEHandlerFactory(log, pushEmitter);
43
+ var sseHandler = (0, SSEHandler_1.SSEHandlerFactory)(log, pushEmitter);
44
44
  sseClient.setEventHandler(sseHandler);
45
45
  // init workers
46
46
  // MySegmentsUpdateWorker (client-side) are initiated in `add` method
@@ -58,6 +58,7 @@ function pushManagerFactory(params, pollingManager) {
58
58
  // It is used to halt the `connectPush` process if it was in progress.
59
59
  var disconnected;
60
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.
61
62
  var disabled; // `disabled` implies `disconnected === true`
62
63
  /** PushManager functions related to initialization */
63
64
  var connectPushRetryBackoff = new Backoff_1.Backoff(connectPush, settings.scheduler.pushRetryBackoffBase);
@@ -138,7 +139,7 @@ function pushManagerFactory(params, pollingManager) {
138
139
  function stopWorkers() {
139
140
  splitsUpdateWorker.backoff.reset();
140
141
  if (userKey)
141
- lang_1.forOwn(clients, function (_a) {
142
+ (0, lang_1.forOwn)(clients, function (_a) {
142
143
  var worker = _a.worker;
143
144
  return worker.backoff.reset();
144
145
  });
@@ -194,15 +195,15 @@ function pushManagerFactory(params, pollingManager) {
194
195
  case types_1.UpdateStrategy.BoundedFetchRequest: {
195
196
  var bitmap_1;
196
197
  try {
197
- bitmap_1 = mySegmentsV2utils_1.parseBitmap(parsedData.d, parsedData.c);
198
+ bitmap_1 = (0, mySegmentsV2utils_1.parseBitmap)(parsedData.d, parsedData.c);
198
199
  }
199
200
  catch (e) {
200
201
  log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['BoundedFetchRequest', e]);
201
202
  break;
202
203
  }
203
- lang_1.forOwn(clients, function (_a) {
204
+ (0, lang_1.forOwn)(clients, function (_a) {
204
205
  var hash64 = _a.hash64, worker = _a.worker;
205
- if (mySegmentsV2utils_1.isInBitmap(bitmap_1, hash64.hex)) {
206
+ if ((0, mySegmentsV2utils_1.isInBitmap)(bitmap_1, hash64.hex)) {
206
207
  worker.put(parsedData.changeNumber); // fetch mySegments
207
208
  }
208
209
  });
@@ -211,7 +212,7 @@ function pushManagerFactory(params, pollingManager) {
211
212
  case types_1.UpdateStrategy.KeyList: {
212
213
  var keyList = void 0, added_1, removed_1;
213
214
  try {
214
- keyList = mySegmentsV2utils_1.parseKeyList(parsedData.d, parsedData.c);
215
+ keyList = (0, mySegmentsV2utils_1.parseKeyList)(parsedData.d, parsedData.c);
215
216
  added_1 = new sets_1._Set(keyList.a);
216
217
  removed_1 = new sets_1._Set(keyList.r);
217
218
  }
@@ -219,7 +220,7 @@ function pushManagerFactory(params, pollingManager) {
219
220
  log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['KeyList', e]);
220
221
  break;
221
222
  }
222
- lang_1.forOwn(clients, function (_a) {
223
+ (0, lang_1.forOwn)(clients, function (_a) {
223
224
  var hash64 = _a.hash64, worker = _a.worker;
224
225
  var add = added_1.has(hash64.dec) ? true : removed_1.has(hash64.dec) ? false : undefined;
225
226
  if (add !== undefined) {
@@ -236,7 +237,7 @@ function pushManagerFactory(params, pollingManager) {
236
237
  log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['SegmentRemoval', 'No segment name was provided']);
237
238
  break;
238
239
  }
239
- lang_1.forOwn(clients, function (_a) {
240
+ (0, lang_1.forOwn)(clients, function (_a) {
240
241
  var worker = _a.worker;
241
242
  return worker.put(parsedData.changeNumber, {
242
243
  name: parsedData.segmentName,
@@ -246,7 +247,7 @@ function pushManagerFactory(params, pollingManager) {
246
247
  return;
247
248
  }
248
249
  // `UpdateStrategy.UnboundedFetchRequest` and fallbacks of other cases
249
- lang_1.forOwn(clients, function (_a) {
250
+ (0, lang_1.forOwn)(clients, function (_a) {
250
251
  var worker = _a.worker;
251
252
  worker.put(parsedData.changeNumber);
252
253
  });
@@ -255,16 +256,18 @@ function pushManagerFactory(params, pollingManager) {
255
256
  else {
256
257
  pushEmitter.on(constants_1.SEGMENT_UPDATE, segmentsUpdateWorker.put);
257
258
  }
258
- return objectAssign_1.objectAssign(
259
+ return (0, objectAssign_1.objectAssign)(
259
260
  // Expose Event Emitter functionality and Event constants
260
261
  Object.create(pushEmitter), {
261
- // Stop/pause push mode
262
+ // Stop/pause push mode.
263
+ // It doesn't emit events. Neither PUSH_SUBSYSTEM_DOWN to start polling.
262
264
  stop: function () {
263
265
  disconnectPush(); // `handleNonRetryableError` cannot be used as `stop`, because it emits PUSH_SUBSYSTEM_DOWN event, which starts polling.
264
266
  if (userKey)
265
267
  this.remove(userKey); // Necessary to properly resume streaming in client-side (e.g., RN SDK transition to foreground).
266
268
  },
267
- // 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
268
271
  start: function () {
269
272
  // Guard condition to avoid calling `connectPush` again if the `start` method is called multiple times or if push has been disabled.
270
273
  if (disabled || disconnected === false)
@@ -275,12 +278,16 @@ function pushManagerFactory(params, pollingManager) {
275
278
  else
276
279
  setTimeout(connectPush); // server-side runs in next cycle as in client-side, for consistency with client-side
277
280
  },
281
+ // true/false if start or stop was called last respectively
282
+ isRunning: function () {
283
+ return disconnected === false;
284
+ },
278
285
  // [Only for client-side]
279
286
  add: function (userKey, mySegmentsSyncTask) {
280
- var hash = AuthClient_1.hashUserKey(userKey);
287
+ var hash = (0, AuthClient_1.hashUserKey)(userKey);
281
288
  if (!userKeyHashes[hash]) {
282
289
  userKeyHashes[hash] = userKey;
283
- 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) };
284
291
  connectForNewClient = true; // we must reconnect on start, to listen the channel for the new user key
285
292
  // Reconnects in case of a new client.
286
293
  // Run in next event-loop cycle to save authentication calls
@@ -295,7 +302,7 @@ function pushManagerFactory(params, pollingManager) {
295
302
  },
296
303
  // [Only for client-side]
297
304
  remove: function (userKey) {
298
- var hash = AuthClient_1.hashUserKey(userKey);
305
+ var hash = (0, AuthClient_1.hashUserKey)(userKey);
299
306
  delete userKeyHashes[hash];
300
307
  delete clients[userKey];
301
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;
@@ -9,12 +9,12 @@ function submitterManagerFactory(params) {
9
9
  var settings = params.settings, storage = params.storage, splitApi = params.splitApi;
10
10
  var log = settings.log;
11
11
  var submitters = [
12
- impressionsSyncTask_1.impressionsSyncTaskFactory(log, splitApi.postTestImpressionsBulk, storage.impressions, settings.scheduler.impressionsRefreshRate, settings.core.labelsEnabled),
13
- 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)
14
14
  // @TODO add telemetry submitter
15
15
  ];
16
16
  if (storage.impressionCounts)
17
- submitters.push(impressionCountsSyncTask_1.impressionCountsSyncTaskFactory(log, splitApi.postTestImpressionsCount, storage.impressionCounts));
18
- return syncTaskComposite_1.syncTaskComposite(submitters);
17
+ submitters.push((0, impressionCountsSyncTask_1.impressionCountsSyncTaskFactory)(log, splitApi.postTestImpressionsCount, storage.impressionCounts));
18
+ return (0, syncTaskComposite_1.syncTaskComposite)(submitters);
19
19
  }
20
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("../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.
@@ -17,7 +18,7 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
17
18
  * SyncManager factory for modular SDK
18
19
  */
19
20
  return function (params) {
20
- var _a = params.settings, log = _a.log, streamingEnabled = _a.streamingEnabled;
21
+ var settings = params.settings, _a = params.settings, log = _a.log, streamingEnabled = _a.streamingEnabled;
21
22
  /** Polling Manager */
22
23
  var pollingManager = pollingManagerFactory && pollingManagerFactory(params);
23
24
  /** Push Manager */
@@ -26,7 +27,7 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
26
27
  undefined;
27
28
  /** Submitter Manager */
28
29
  // It is not inyected as push and polling managers, because at the moment it is required
29
- var submitter = submitterManager_1.submitterManagerFactory(params);
30
+ var submitter = (0, submitterManager_1.submitterManagerFactory)(params);
30
31
  /** Sync Manager logic */
31
32
  function startPolling() {
32
33
  if (pollingManager.isRunning()) {
@@ -52,11 +53,16 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
52
53
  var running = false; // flag that indicates whether the syncManager has been started (true) or stopped (false)
53
54
  var startFirstTime = true; // flag to distinguish calling the `start` method for the first time, to support pausing and resuming the synchronization
54
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,
55
59
  pushManager: pushManager,
60
+ submitter: submitter,
56
61
  /**
57
62
  * Method used to start the syncManager for the first time, or resume it after being stopped.
58
63
  */
59
64
  start: function () {
65
+ running = true;
60
66
  // start syncing splits and segments
61
67
  if (pollingManager) {
62
68
  if (pushManager) {
@@ -72,29 +78,27 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
72
78
  }
73
79
  }
74
80
  // start periodic data recording (events, impressions, telemetry).
75
- if (submitter)
81
+ if ((0, consent_1.isConsentGranted)(settings))
76
82
  submitter.start();
77
- running = true;
78
83
  },
79
84
  /**
80
85
  * Method used to stop/pause the syncManager.
81
86
  */
82
87
  stop: function () {
88
+ running = false;
83
89
  // stop syncing
84
90
  if (pushManager)
85
91
  pushManager.stop();
86
92
  if (pollingManager && pollingManager.isRunning())
87
93
  pollingManager.stop();
88
94
  // stop periodic data recording (events, impressions, telemetry).
89
- if (submitter)
90
- submitter.stop();
91
- running = false;
95
+ submitter.stop();
92
96
  },
93
97
  isRunning: function () {
94
98
  return running;
95
99
  },
96
100
  flush: function () {
97
- if (submitter)
101
+ if ((0, consent_1.isConsentGranted)(settings))
98
102
  return submitter.execute();
99
103
  else
100
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;
@@ -5,6 +5,7 @@ var objectAssign_1 = require("../utils/lang/objectAssign");
5
5
  var thenable_1 = require("../utils/promise/thenable");
6
6
  var time_1 = require("../utils/time");
7
7
  var constants_1 = require("../logger/constants");
8
+ var constants_2 = require("../utils/constants");
8
9
  /**
9
10
  * Impressions tracker stores impressions in cache and pass them to the listener and integrations manager if provided.
10
11
  *
@@ -15,16 +16,16 @@ var constants_1 = require("../logger/constants");
15
16
  * @param observer optional impression observer. If provided, previous time (pt property) is included in impression instances
16
17
  * @param countsCache optional cache to save impressions count. If provided, impressions will be deduped (OPTIMIZED mode)
17
18
  */
18
- function impressionsTrackerFactory(log, impressionsCache,
19
- // @TODO consider passing only an optional integrationsManager to handle impressions
20
- _a, impressionListener, integrationsManager,
19
+ function impressionsTrackerFactory(settings, impressionsCache, integrationsManager,
21
20
  // if observer is provided, it implies `shouldAddPreviousTime` flag (i.e., if impressions previous time should be added or not)
22
21
  observer,
23
22
  // if countsCache is provided, it implies `isOptimized` flag (i.e., if impressions should be deduped or not)
24
23
  countsCache) {
25
- var _b = _a.runtime, ip = _b.ip, hostname = _b.hostname, version = _a.version;
24
+ var log = settings.log, impressionListener = settings.impressionListener, _a = settings.runtime, ip = _a.ip, hostname = _a.hostname, version = settings.version;
26
25
  return {
27
26
  track: function (impressions, attributes) {
27
+ if (settings.userConsent === constants_2.CONSENT_DECLINED)
28
+ return;
28
29
  var impressionsCount = impressions.length;
29
30
  var impressionsToStore = []; // Track only the impressions that are going to be stored
30
31
  // Wraps impressions to store and adds previousTime if it corresponds
@@ -39,13 +40,13 @@ countsCache) {
39
40
  countsCache.track(impression.feature, now, 1);
40
41
  }
41
42
  // Checks if the impression should be added in queue to be sent
42
- if (!countsCache || !impression.pt || impression.pt < time_1.truncateTimeFrame(now)) {
43
+ if (!countsCache || !impression.pt || impression.pt < (0, time_1.truncateTimeFrame)(now)) {
43
44
  impressionsToStore.push(impression);
44
45
  }
45
46
  });
46
47
  var res = impressionsCache.track(impressionsToStore);
47
48
  // If we're on an async storage, handle error and log it.
48
- if (thenable_1.thenable(res)) {
49
+ if ((0, thenable_1.thenable)(res)) {
49
50
  res.then(function () {
50
51
  log.info(constants_1.IMPRESSIONS_TRACKER_SUCCESS, [impressionsCount]);
51
52
  }).catch(function (err) {
@@ -57,7 +58,7 @@ countsCache) {
57
58
  var _loop_1 = function (i) {
58
59
  var impressionData = {
59
60
  // copy of impression, to avoid unexpected behaviour if modified by integrations or impressionListener
60
- impression: objectAssign_1.objectAssign({}, impressions[i]),
61
+ impression: (0, objectAssign_1.objectAssign)({}, impressions[i]),
61
62
  attributes: attributes,
62
63
  ip: ip,
63
64
  hostname: hostname,
@@ -68,7 +69,7 @@ countsCache) {
68
69
  // integrationsManager.handleImpression does not throw errors
69
70
  if (integrationsManager)
70
71
  integrationsManager.handleImpression(impressionData);
71
- try { // An exception on the listeners should not break the SDK.
72
+ try { // @ts-ignore. An exception on the listeners should not break the SDK.
72
73
  if (impressionListener)
73
74
  impressionListener.logImpression(impressionData);
74
75
  }
@@ -38,9 +38,10 @@ var ReflectApply = R && typeof R.apply === 'function'
38
38
  : function ReflectApply(target, receiver, args) {
39
39
  return Function.prototype.apply.call(target, receiver, args);
40
40
  };
41
- exports.EventEmitter = function EventEmitter() {
41
+ var EventEmitter = function EventEmitter() {
42
42
  EventEmitter.init.call(this);
43
43
  };
44
+ exports.EventEmitter = EventEmitter;
44
45
  exports.EventEmitter.prototype._events = undefined;
45
46
  exports.EventEmitter.prototype._eventsCount = 0;
46
47
  function checkListener(listener) {