@splitsoftware/splitio-commons 2.11.1-rc.2 → 3.0.0-rc.0

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 (309) hide show
  1. package/CHANGES.txt +15 -2
  2. package/cjs/evaluator/condition/engineUtils.js +2 -2
  3. package/cjs/evaluator/fallbackConfigsCalculator/fallbackSanitizer/index.js +70 -0
  4. package/cjs/evaluator/fallbackConfigsCalculator/index.js +25 -0
  5. package/cjs/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +5 -8
  6. package/cjs/evaluator/fallbackTreatmentsCalculator/index.js +21 -32
  7. package/cjs/evaluator/index.js +67 -42
  8. package/cjs/evaluator/matchers/whitelist.js +1 -1
  9. package/cjs/integrations/pluggable.js +1 -1
  10. package/cjs/listeners/browser.js +4 -3
  11. package/cjs/listeners/node.js +4 -4
  12. package/cjs/logger/constants.js +14 -20
  13. package/cjs/logger/index.js +1 -1
  14. package/cjs/logger/messages/debug.js +6 -7
  15. package/cjs/logger/messages/error.js +4 -4
  16. package/cjs/logger/messages/info.js +2 -4
  17. package/cjs/logger/messages/warn.js +9 -9
  18. package/cjs/platform/browser.js +15 -0
  19. package/cjs/platform/getEventSource/browser.js +8 -0
  20. package/cjs/platform/getEventSource/eventsource.js +480 -0
  21. package/cjs/platform/getEventSource/node.js +26 -0
  22. package/cjs/platform/getFetch/browser.js +9 -0
  23. package/cjs/platform/getFetch/node.js +27 -0
  24. package/cjs/platform/getOptions/node.js +25 -0
  25. package/cjs/platform/node.js +17 -0
  26. package/cjs/readiness/constants.js +2 -1
  27. package/cjs/sdkClient/client.js +9 -35
  28. package/cjs/sdkClient/clientAttributesDecoration.js +3 -3
  29. package/cjs/sdkClient/clientInputValidation.js +38 -81
  30. package/cjs/sdkClient/identity.js +1 -1
  31. package/cjs/sdkClient/sdkClient.js +4 -49
  32. package/cjs/sdkClient/sdkLifecycle.js +70 -0
  33. package/cjs/sdkClient/trackMethod.js +56 -0
  34. package/cjs/sdkFactory/index.js +8 -45
  35. package/cjs/sdkManager/index.js +3 -3
  36. package/cjs/services/splitApi.js +18 -13
  37. package/cjs/services/splitHttpClient.js +1 -1
  38. package/cjs/storages/AbstractSplitsCacheAsync.js +1 -1
  39. package/cjs/storages/AbstractSplitsCacheSync.js +1 -1
  40. package/cjs/storages/KeyBuilder.js +12 -12
  41. package/cjs/storages/KeyBuilderCS.js +13 -13
  42. package/cjs/storages/KeyBuilderSS.js +15 -15
  43. package/cjs/storages/getRolloutPlan.js +1 -1
  44. package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +1 -1
  45. package/cjs/storages/inLocalStorage/RBSegmentsCacheInLocal.js +1 -1
  46. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +1 -1
  47. package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
  48. package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +1 -1
  49. package/cjs/storages/inMemory/RBSegmentsCacheInMemory.js +1 -1
  50. package/cjs/storages/inMemory/SplitsCacheInMemory.js +1 -1
  51. package/cjs/storages/inMemory/TelemetryCacheInMemory.js +2 -2
  52. package/cjs/storages/inRedis/EventsCacheInRedis.js +1 -1
  53. package/cjs/storages/inRedis/ImpressionCountsCacheInRedis.js +5 -5
  54. package/cjs/storages/inRedis/ImpressionsCacheInRedis.js +1 -1
  55. package/cjs/storages/inRedis/RBSegmentsCacheInRedis.js +1 -1
  56. package/cjs/storages/inRedis/RedisAdapter.js +8 -8
  57. package/cjs/storages/inRedis/SplitsCacheInRedis.js +6 -6
  58. package/cjs/storages/inRedis/TelemetryCacheInRedis.js +7 -7
  59. package/cjs/storages/inRedis/UniqueKeysCacheInRedis.js +3 -3
  60. package/cjs/storages/pluggable/EventsCachePluggable.js +1 -1
  61. package/cjs/storages/pluggable/ImpressionCountsCachePluggable.js +6 -6
  62. package/cjs/storages/pluggable/RBSegmentsCachePluggable.js +1 -1
  63. package/cjs/storages/pluggable/SplitsCachePluggable.js +4 -4
  64. package/cjs/storages/pluggable/TelemetryCachePluggable.js +7 -7
  65. package/cjs/storages/pluggable/UniqueKeysCachePluggable.js +2 -2
  66. package/cjs/storages/pluggable/index.js +3 -3
  67. package/cjs/storages/pluggable/wrapperAdapter.js +1 -1
  68. package/cjs/storages/setRolloutPlan.js +1 -1
  69. package/cjs/storages/utils.js +6 -6
  70. package/cjs/sync/offline/splitsParser/parseCondition.js +1 -1
  71. package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
  72. package/cjs/sync/polling/fetchers/splitChangesFetcher.js +23 -14
  73. package/cjs/sync/polling/pollingManagerCS.js +11 -11
  74. package/cjs/sync/polling/pollingManagerSS.js +13 -13
  75. package/cjs/sync/polling/syncTasks/definitionsSyncTask.js +12 -0
  76. package/cjs/sync/polling/updaters/{splitChangesUpdater.js → definitionChangesUpdater.js} +67 -59
  77. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +1 -1
  78. package/cjs/sync/polling/updaters/segmentChangesUpdater.js +6 -6
  79. package/cjs/sync/streaming/SSEClient/index.js +2 -2
  80. package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +2 -2
  81. package/cjs/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +2 -2
  82. package/cjs/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +4 -4
  83. package/cjs/sync/streaming/parseUtils.js +12 -12
  84. package/cjs/sync/streaming/pushManager.js +2 -2
  85. package/cjs/sync/submitters/impressionsSubmitter.js +6 -6
  86. package/cjs/sync/submitters/submitter.js +1 -1
  87. package/cjs/sync/syncManagerOnline.js +5 -2
  88. package/cjs/trackers/eventTracker.js +10 -12
  89. package/cjs/trackers/impressionObserver/buildKey.js +1 -1
  90. package/cjs/trackers/impressionsTracker.js +37 -20
  91. package/cjs/trackers/uniqueKeysTracker.js +1 -1
  92. package/cjs/utils/EventEmitter.js +391 -0
  93. package/cjs/utils/filter/bloomFilter.js +37 -0
  94. package/cjs/utils/inputValidation/apiKey.js +1 -1
  95. package/cjs/utils/inputValidation/attribute.js +2 -2
  96. package/cjs/utils/inputValidation/{split.js → definition.js} +10 -10
  97. package/cjs/utils/inputValidation/{splitExistence.js → definitionExistence.js} +6 -6
  98. package/cjs/utils/inputValidation/definitions.js +25 -0
  99. package/cjs/utils/inputValidation/eventProperties.js +1 -1
  100. package/cjs/utils/inputValidation/index.js +7 -7
  101. package/cjs/utils/inputValidation/isOperational.js +4 -4
  102. package/cjs/utils/inputValidation/target.js +22 -0
  103. package/cjs/utils/labels/index.js +3 -3
  104. package/cjs/utils/lang/index.js +1 -1
  105. package/cjs/utils/promise/timeout.js +1 -1
  106. package/cjs/utils/settingsValidation/splitFilters.js +4 -4
  107. package/cjs/utils/settingsValidation/url.js +5 -5
  108. package/esm/evaluator/condition/engineUtils.js +2 -2
  109. package/esm/evaluator/fallbackConfigsCalculator/fallbackSanitizer/index.js +64 -0
  110. package/esm/evaluator/fallbackConfigsCalculator/index.js +21 -0
  111. package/esm/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +5 -8
  112. package/esm/evaluator/fallbackTreatmentsCalculator/index.js +21 -33
  113. package/esm/evaluator/index.js +66 -42
  114. package/esm/evaluator/matchers/whitelist.js +1 -1
  115. package/esm/integrations/pluggable.js +1 -1
  116. package/esm/listeners/browser.js +4 -3
  117. package/esm/listeners/node.js +4 -4
  118. package/esm/logger/constants.js +11 -17
  119. package/esm/logger/index.js +1 -1
  120. package/esm/logger/messages/debug.js +5 -6
  121. package/esm/logger/messages/error.js +3 -3
  122. package/esm/logger/messages/info.js +1 -3
  123. package/esm/logger/messages/warn.js +8 -8
  124. package/esm/platform/browser.js +12 -0
  125. package/esm/platform/getEventSource/browser.js +4 -0
  126. package/esm/platform/getEventSource/eventsource.js +480 -0
  127. package/esm/platform/getEventSource/node.js +20 -0
  128. package/esm/platform/getFetch/browser.js +5 -0
  129. package/esm/platform/getFetch/node.js +22 -0
  130. package/esm/platform/getOptions/node.js +20 -0
  131. package/esm/platform/node.js +14 -0
  132. package/esm/readiness/constants.js +1 -0
  133. package/esm/sdkClient/client.js +10 -37
  134. package/esm/sdkClient/clientAttributesDecoration.js +3 -3
  135. package/esm/sdkClient/clientInputValidation.js +40 -83
  136. package/esm/sdkClient/identity.js +1 -1
  137. package/esm/sdkClient/sdkClient.js +4 -49
  138. package/esm/sdkClient/sdkLifecycle.js +66 -0
  139. package/esm/sdkClient/trackMethod.js +52 -0
  140. package/esm/sdkFactory/index.js +8 -45
  141. package/esm/sdkManager/index.js +4 -4
  142. package/esm/services/splitApi.js +18 -13
  143. package/esm/services/splitHttpClient.js +1 -1
  144. package/esm/storages/AbstractSplitsCacheAsync.js +1 -1
  145. package/esm/storages/AbstractSplitsCacheSync.js +1 -1
  146. package/esm/storages/KeyBuilder.js +12 -12
  147. package/esm/storages/KeyBuilderCS.js +12 -12
  148. package/esm/storages/KeyBuilderSS.js +14 -14
  149. package/esm/storages/getRolloutPlan.js +1 -1
  150. package/esm/storages/inLocalStorage/RBSegmentsCacheInLocal.js +1 -1
  151. package/esm/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
  152. package/esm/storages/inMemory/RBSegmentsCacheInMemory.js +1 -1
  153. package/esm/storages/inMemory/TelemetryCacheInMemory.js +2 -2
  154. package/esm/storages/inRedis/EventsCacheInRedis.js +1 -1
  155. package/esm/storages/inRedis/ImpressionCountsCacheInRedis.js +4 -4
  156. package/esm/storages/inRedis/RBSegmentsCacheInRedis.js +1 -1
  157. package/esm/storages/inRedis/RedisAdapter.js +7 -7
  158. package/esm/storages/inRedis/SplitsCacheInRedis.js +4 -4
  159. package/esm/storages/inRedis/TelemetryCacheInRedis.js +7 -7
  160. package/esm/storages/inRedis/UniqueKeysCacheInRedis.js +1 -1
  161. package/esm/storages/pluggable/EventsCachePluggable.js +1 -1
  162. package/esm/storages/pluggable/ImpressionCountsCachePluggable.js +5 -5
  163. package/esm/storages/pluggable/RBSegmentsCachePluggable.js +1 -1
  164. package/esm/storages/pluggable/SplitsCachePluggable.js +2 -2
  165. package/esm/storages/pluggable/TelemetryCachePluggable.js +7 -7
  166. package/esm/storages/pluggable/UniqueKeysCachePluggable.js +1 -1
  167. package/esm/storages/pluggable/index.js +2 -2
  168. package/esm/storages/pluggable/wrapperAdapter.js +1 -1
  169. package/esm/storages/setRolloutPlan.js +1 -1
  170. package/esm/storages/utils.js +6 -6
  171. package/esm/sync/offline/splitsParser/parseCondition.js +1 -1
  172. package/esm/sync/polling/fetchers/splitChangesFetcher.js +24 -15
  173. package/esm/sync/polling/pollingManagerCS.js +11 -11
  174. package/esm/sync/polling/pollingManagerSS.js +13 -13
  175. package/esm/sync/polling/syncTasks/definitionsSyncTask.js +8 -0
  176. package/esm/sync/polling/updaters/{splitChangesUpdater.js → definitionChangesUpdater.js} +67 -59
  177. package/esm/sync/polling/updaters/mySegmentsUpdater.js +2 -2
  178. package/esm/sync/polling/updaters/segmentChangesUpdater.js +7 -7
  179. package/esm/sync/streaming/SSEClient/index.js +2 -2
  180. package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +2 -2
  181. package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +2 -2
  182. package/esm/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +4 -4
  183. package/esm/sync/streaming/parseUtils.js +10 -10
  184. package/esm/sync/streaming/pushManager.js +3 -3
  185. package/esm/sync/submitters/impressionsSubmitter.js +6 -6
  186. package/esm/sync/submitters/submitter.js +1 -1
  187. package/esm/sync/syncManagerOnline.js +5 -2
  188. package/esm/trackers/eventTracker.js +10 -12
  189. package/esm/trackers/impressionObserver/buildKey.js +1 -1
  190. package/esm/trackers/impressionsTracker.js +38 -21
  191. package/esm/trackers/uniqueKeysTracker.js +1 -1
  192. package/esm/utils/EventEmitter.js +387 -0
  193. package/esm/utils/filter/bloomFilter.js +33 -0
  194. package/esm/utils/inputValidation/apiKey.js +1 -1
  195. package/esm/utils/inputValidation/attribute.js +2 -2
  196. package/esm/utils/inputValidation/{split.js → definition.js} +8 -8
  197. package/esm/utils/inputValidation/definitionExistence.js +15 -0
  198. package/esm/utils/inputValidation/definitions.js +21 -0
  199. package/esm/utils/inputValidation/index.js +3 -3
  200. package/esm/utils/inputValidation/isOperational.js +4 -4
  201. package/esm/utils/inputValidation/target.js +18 -0
  202. package/esm/utils/labels/index.js +2 -2
  203. package/esm/utils/promise/timeout.js +1 -1
  204. package/esm/utils/settingsValidation/splitFilters.js +4 -4
  205. package/esm/utils/settingsValidation/url.js +5 -5
  206. package/package.json +15 -6
  207. package/src/dtos/types.ts +65 -70
  208. package/src/evaluator/Engine.ts +4 -4
  209. package/src/evaluator/combiners/and.ts +3 -3
  210. package/src/evaluator/combiners/ifelseif.ts +2 -2
  211. package/src/evaluator/condition/engineUtils.ts +2 -2
  212. package/src/evaluator/condition/index.ts +3 -3
  213. package/src/evaluator/fallbackConfigsCalculator/fallbackSanitizer/index.ts +76 -0
  214. package/src/evaluator/fallbackConfigsCalculator/index.ts +24 -0
  215. package/src/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.ts +5 -7
  216. package/src/evaluator/fallbackTreatmentsCalculator/index.ts +27 -41
  217. package/src/evaluator/index.ts +80 -45
  218. package/src/evaluator/matchers/dependency.ts +2 -2
  219. package/src/evaluator/matchers/matcherTypes.ts +2 -2
  220. package/src/evaluator/matchers/prerequisites.ts +4 -4
  221. package/src/evaluator/matchers/rbsegment.ts +2 -2
  222. package/src/evaluator/matchers/whitelist.ts +2 -2
  223. package/src/evaluator/matchersTransform/index.ts +2 -2
  224. package/src/evaluator/matchersTransform/whitelist.ts +2 -2
  225. package/src/evaluator/parser/index.ts +4 -4
  226. package/src/evaluator/treatments/index.ts +2 -2
  227. package/src/evaluator/types.ts +6 -6
  228. package/src/evaluator/value/index.ts +1 -1
  229. package/src/integrations/pluggable.ts +1 -1
  230. package/src/listeners/browser.ts +11 -8
  231. package/src/listeners/node.ts +2 -5
  232. package/src/logger/constants.ts +11 -17
  233. package/src/logger/messages/debug.ts +5 -6
  234. package/src/logger/messages/error.ts +3 -3
  235. package/src/logger/messages/info.ts +1 -3
  236. package/src/logger/messages/warn.ts +8 -8
  237. package/src/platform/browser.ts +14 -0
  238. package/src/platform/getEventSource/browser.ts +4 -0
  239. package/src/platform/getEventSource/eventsource.js +519 -0
  240. package/src/platform/getEventSource/node.ts +23 -0
  241. package/src/platform/getFetch/browser.ts +5 -0
  242. package/src/platform/getFetch/node.ts +27 -0
  243. package/src/platform/getOptions/node.ts +24 -0
  244. package/src/platform/node.ts +16 -0
  245. package/src/readiness/constants.ts +1 -0
  246. package/src/sdkClient/client.ts +11 -41
  247. package/src/sdkClient/clientInputValidation.ts +44 -84
  248. package/src/sdkClient/sdkClient.ts +5 -54
  249. package/src/sdkClient/sdkLifecycle.ts +78 -0
  250. package/src/sdkClient/trackMethod.ts +59 -0
  251. package/src/sdkFactory/index.ts +10 -54
  252. package/src/sdkFactory/types.ts +19 -16
  253. package/src/sdkManager/index.ts +9 -9
  254. package/src/services/splitApi.ts +6 -0
  255. package/src/services/types.ts +3 -2
  256. package/src/storages/AbstractSplitsCacheAsync.ts +7 -7
  257. package/src/storages/AbstractSplitsCacheSync.ts +10 -10
  258. package/src/storages/inLocalStorage/RBSegmentsCacheInLocal.ts +2 -2
  259. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +6 -6
  260. package/src/storages/inMemory/RBSegmentsCacheInMemory.ts +2 -2
  261. package/src/storages/inMemory/SplitsCacheInMemory.ts +5 -5
  262. package/src/storages/inMemory/TelemetryCacheInMemory.ts +2 -2
  263. package/src/storages/inRedis/RBSegmentsCacheInRedis.ts +2 -2
  264. package/src/storages/inRedis/SplitsCacheInRedis.ts +9 -9
  265. package/src/storages/pluggable/RBSegmentsCachePluggable.ts +2 -2
  266. package/src/storages/pluggable/SplitsCachePluggable.ts +9 -9
  267. package/src/storages/types.ts +21 -16
  268. package/src/sync/offline/splitsParser/parseCondition.ts +2 -2
  269. package/src/sync/offline/splitsParser/splitsParserFromSettings.ts +3 -3
  270. package/src/sync/offline/splitsParser/types.ts +6 -3
  271. package/src/sync/offline/syncManagerOffline.ts +2 -2
  272. package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +6 -6
  273. package/src/sync/polling/fetchers/splitChangesFetcher.ts +57 -22
  274. package/src/sync/polling/fetchers/types.ts +5 -3
  275. package/src/sync/polling/pollingManagerCS.ts +12 -10
  276. package/src/sync/polling/pollingManagerSS.ts +15 -13
  277. package/src/sync/polling/syncTasks/{splitsSyncTask.ts → definitionsSyncTask.ts} +10 -11
  278. package/src/sync/polling/types.ts +3 -3
  279. package/src/sync/polling/updaters/{splitChangesUpdater.ts → definitionChangesUpdater.ts} +77 -68
  280. package/src/sync/polling/updaters/mySegmentsUpdater.ts +2 -2
  281. package/src/sync/polling/updaters/segmentChangesUpdater.ts +7 -7
  282. package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +6 -6
  283. package/src/sync/streaming/parseUtils.ts +12 -12
  284. package/src/sync/streaming/pushManager.ts +3 -3
  285. package/src/sync/submitters/impressionsSubmitter.ts +9 -9
  286. package/src/sync/submitters/types.ts +3 -0
  287. package/src/sync/syncManagerOnline.ts +6 -2
  288. package/src/trackers/eventTracker.ts +7 -10
  289. package/src/trackers/impressionsTracker.ts +42 -26
  290. package/src/trackers/types.ts +3 -1
  291. package/src/utils/EventEmitter.js +444 -0
  292. package/src/utils/filter/bloomFilter.ts +38 -0
  293. package/src/utils/inputValidation/definition.ts +27 -0
  294. package/src/utils/inputValidation/definitionExistence.ts +19 -0
  295. package/src/utils/inputValidation/definitions.ts +21 -0
  296. package/src/utils/inputValidation/index.ts +3 -3
  297. package/src/utils/inputValidation/isOperational.ts +4 -4
  298. package/src/utils/inputValidation/target.ts +21 -0
  299. package/src/utils/labels/index.ts +2 -2
  300. package/src/utils/settingsValidation/splitFilters.ts +3 -3
  301. package/types/splitio.d.ts +202 -9
  302. package/cjs/sync/polling/syncTasks/splitsSyncTask.js +0 -13
  303. package/cjs/utils/inputValidation/splits.js +0 -25
  304. package/esm/sync/polling/syncTasks/splitsSyncTask.js +0 -9
  305. package/esm/utils/inputValidation/splitExistence.js +0 -15
  306. package/esm/utils/inputValidation/splits.js +0 -21
  307. package/src/utils/inputValidation/split.ts +0 -27
  308. package/src/utils/inputValidation/splitExistence.ts +0 -19
  309. package/src/utils/inputValidation/splits.ts +0 -21
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.pollingManagerCSFactory = void 0;
4
4
  var lang_1 = require("../../utils/lang");
5
5
  var mySegmentsSyncTask_1 = require("./syncTasks/mySegmentsSyncTask");
6
- var splitsSyncTask_1 = require("./syncTasks/splitsSyncTask");
6
+ var definitionsSyncTask_1 = require("./syncTasks/definitionsSyncTask");
7
7
  var key_1 = require("../../utils/key");
8
8
  var constants_1 = require("../../readiness/constants");
9
9
  var constants_2 = require("../../logger/constants");
@@ -12,10 +12,10 @@ var AbstractSplitsCacheSync_1 = require("../../storages/AbstractSplitsCacheSync"
12
12
  * Expose start / stop mechanism for polling data from services.
13
13
  * For client-side API with multiple clients.
14
14
  */
15
- function pollingManagerCSFactory(params) {
15
+ function pollingManagerCSFactory(params, definitionChangesFetcher) {
16
16
  var splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
17
17
  var log = settings.log;
18
- var splitsSyncTask = (0, splitsSyncTask_1.splitsSyncTaskFactory)(splitApi.fetchSplitChanges, storage, readiness, settings, true);
18
+ var definitionsSyncTask = (0, definitionsSyncTask_1.definitionsSyncTaskFactory)(definitionChangesFetcher, storage, readiness, settings, true);
19
19
  // Map of matching keys to their corresponding MySegmentsSyncTask.
20
20
  var mySegmentsSyncTasks = {};
21
21
  var matchingKey = (0, key_1.getMatching)(settings.core.key);
@@ -33,7 +33,7 @@ function pollingManagerCSFactory(params) {
33
33
  }
34
34
  // smart pausing
35
35
  readiness.splits.on(constants_1.SDK_SPLITS_ARRIVED, function () {
36
- if (!splitsSyncTask.isRunning())
36
+ if (!definitionsSyncTask.isRunning())
37
37
  return; // noop if not doing polling
38
38
  var usingSegments = (0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage);
39
39
  if (usingSegments !== mySegmentsSyncTask.isRunning()) {
@@ -61,27 +61,27 @@ function pollingManagerCSFactory(params) {
61
61
  return mySegmentsSyncTask;
62
62
  }
63
63
  return {
64
- splitsSyncTask: splitsSyncTask,
64
+ definitionsSyncTask: definitionsSyncTask,
65
65
  segmentsSyncTask: mySegmentsSyncTask,
66
66
  // Start periodic fetching (polling)
67
67
  start: function () {
68
68
  log.info(constants_2.POLLING_START);
69
- splitsSyncTask.start();
69
+ definitionsSyncTask.start();
70
70
  if ((0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage))
71
71
  startMySegmentsSyncTasks();
72
72
  },
73
73
  // Stop periodic fetching (polling)
74
74
  stop: function () {
75
75
  log.info(constants_2.POLLING_STOP);
76
- if (splitsSyncTask.isRunning())
77
- splitsSyncTask.stop();
76
+ if (definitionsSyncTask.isRunning())
77
+ definitionsSyncTask.stop();
78
78
  stopMySegmentsSyncTasks();
79
79
  },
80
80
  // Used by SyncManager to know if running in polling mode.
81
- isRunning: splitsSyncTask.isRunning,
82
- // fetch splits and segments
81
+ isRunning: definitionsSyncTask.isRunning,
82
+ // fetch definitions and segments
83
83
  syncAll: function () {
84
- var promises = [splitsSyncTask.execute()];
84
+ var promises = [definitionsSyncTask.execute()];
85
85
  (0, lang_1.forOwn)(mySegmentsSyncTasks, function (mySegmentsSyncTask) {
86
86
  promises.push(mySegmentsSyncTask.execute());
87
87
  });
@@ -1,29 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.pollingManagerSSFactory = void 0;
4
- var splitsSyncTask_1 = require("./syncTasks/splitsSyncTask");
4
+ var definitionsSyncTask_1 = require("./syncTasks/definitionsSyncTask");
5
5
  var segmentsSyncTask_1 = require("./syncTasks/segmentsSyncTask");
6
6
  var constants_1 = require("../../logger/constants");
7
7
  /**
8
8
  * Expose start / stop mechanism for pulling data from services.
9
9
  */
10
- function pollingManagerSSFactory(params) {
10
+ function pollingManagerSSFactory(params, definitionChangesFetcher) {
11
11
  var splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
12
12
  var log = settings.log;
13
- var splitsSyncTask = (0, splitsSyncTask_1.splitsSyncTaskFactory)(splitApi.fetchSplitChanges, storage, readiness, settings);
13
+ var definitionsSyncTask = (0, definitionsSyncTask_1.definitionsSyncTaskFactory)(definitionChangesFetcher, storage, readiness, settings);
14
14
  var segmentsSyncTask = (0, segmentsSyncTask_1.segmentsSyncTaskFactory)(splitApi.fetchSegmentChanges, storage, readiness, settings);
15
15
  return {
16
- splitsSyncTask: splitsSyncTask,
16
+ definitionsSyncTask: definitionsSyncTask,
17
17
  segmentsSyncTask: segmentsSyncTask,
18
18
  // Start periodic fetching (polling)
19
19
  start: function () {
20
20
  log.info(constants_1.POLLING_START);
21
- log.debug(constants_1.LOG_PREFIX_SYNC_POLLING + ("Splits will be refreshed each " + settings.scheduler.featuresRefreshRate + " millis"));
22
- log.debug(constants_1.LOG_PREFIX_SYNC_POLLING + ("Segments will be refreshed each " + settings.scheduler.segmentsRefreshRate + " millis"));
23
- var startingUp = splitsSyncTask.start();
21
+ log.debug(constants_1.LOG_PREFIX_SYNC_POLLING + "".concat(definitionChangesFetcher.type, " will be refreshed each ").concat(settings.scheduler.featuresRefreshRate, " millis"));
22
+ log.debug(constants_1.LOG_PREFIX_SYNC_POLLING + "segments will be refreshed each ".concat(settings.scheduler.segmentsRefreshRate, " millis"));
23
+ var startingUp = definitionsSyncTask.start();
24
24
  if (startingUp) {
25
25
  startingUp.then(function () {
26
- if (splitsSyncTask.isRunning())
26
+ if (definitionsSyncTask.isRunning())
27
27
  segmentsSyncTask.start();
28
28
  });
29
29
  }
@@ -31,16 +31,16 @@ function pollingManagerSSFactory(params) {
31
31
  // Stop periodic fetching (polling)
32
32
  stop: function () {
33
33
  log.info(constants_1.POLLING_STOP);
34
- if (splitsSyncTask.isRunning())
35
- splitsSyncTask.stop();
34
+ if (definitionsSyncTask.isRunning())
35
+ definitionsSyncTask.stop();
36
36
  if (segmentsSyncTask.isRunning())
37
37
  segmentsSyncTask.stop();
38
38
  },
39
39
  // Used by SyncManager to know if running in polling mode.
40
- isRunning: splitsSyncTask.isRunning,
40
+ isRunning: definitionsSyncTask.isRunning,
41
41
  syncAll: function () {
42
- // fetch splits and segments. There is no need to catch this promise (`SplitChangesUpdater` is always resolved with a boolean value)
43
- return splitsSyncTask.execute().then(function () {
42
+ // fetch definitions and segments. There is no need to catch this promise (`DefinitionChangesUpdater` is always resolved with a boolean value)
43
+ return definitionsSyncTask.execute().then(function () {
44
44
  return segmentsSyncTask.execute();
45
45
  });
46
46
  }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.definitionsSyncTaskFactory = void 0;
4
+ var syncTask_1 = require("../../syncTask");
5
+ var definitionChangesUpdater_1 = require("../updaters/definitionChangesUpdater");
6
+ /**
7
+ * Creates a sync task that periodically executes a `definitionChangesUpdater` task
8
+ */
9
+ function definitionsSyncTaskFactory(definitionChangesFetcher, storage, readiness, settings, isClientSide) {
10
+ return (0, syncTask_1.syncTaskFactory)(settings.log, (0, definitionChangesUpdater_1.definitionChangesUpdaterFactory)(settings.log, definitionChangesFetcher, storage, settings.sync.__splitFiltersValidation, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, isClientSide), settings.scheduler.featuresRefreshRate, 'definitionChangesUpdater');
11
+ }
12
+ exports.definitionsSyncTaskFactory = definitionsSyncTaskFactory;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.splitChangesUpdaterFactory = exports.computeMutation = exports.parseSegments = void 0;
3
+ exports.definitionChangesUpdaterFactory = exports.computeMutation = exports.parseSegments = void 0;
4
4
  var timeout_1 = require("../../../utils/promise/timeout");
5
5
  var constants_1 = require("../../../readiness/constants");
6
6
  var constants_2 = require("../../../logger/constants");
@@ -24,7 +24,7 @@ function checkAllSegmentsExist(segments) {
24
24
  */
25
25
  function parseSegments(ruleEntity, matcherType) {
26
26
  if (matcherType === void 0) { matcherType = constants_3.IN_SEGMENT; }
27
- var _a = ruleEntity, _b = _a.conditions, conditions = _b === void 0 ? [] : _b, excluded = _a.excluded;
27
+ var _a = ruleEntity, conditions = _a.conditions, excluded = _a.excluded;
28
28
  var segments = new Set();
29
29
  if (excluded && excluded.segments) {
30
30
  excluded.segments.forEach(function (_a) {
@@ -34,122 +34,130 @@ function parseSegments(ruleEntity, matcherType) {
34
34
  }
35
35
  });
36
36
  }
37
- for (var i = 0; i < conditions.length; i++) {
38
- var matchers = conditions[i].matcherGroup.matchers;
39
- matchers.forEach(function (matcher) {
40
- if (matcher.matcherType === matcherType)
41
- segments.add(matcher.userDefinedSegmentMatcherData.segmentName);
42
- });
37
+ if (conditions) {
38
+ for (var i = 0; i < conditions.length; i++) {
39
+ var matchers = conditions[i].matcherGroup.matchers;
40
+ matchers.forEach(function (matcher) {
41
+ if (matcher.matcherType === matcherType)
42
+ segments.add(matcher.userDefinedSegmentMatcherData.segmentName);
43
+ });
44
+ }
43
45
  }
44
46
  return segments;
45
47
  }
46
48
  exports.parseSegments = parseSegments;
47
49
  /**
48
- * If there are defined filters and one feature flag doesn't match with them, its status is changed to 'ARCHIVE' to avoid storing it
50
+ * If there are defined filters and one definition doesn't match with them, its status is changed to 'ARCHIVE' to avoid storing it
49
51
  * If there is `bySet` filter, `byName` and `byPrefix` filters are ignored
50
52
  *
51
- * @param featureFlag - feature flag to be evaluated
53
+ * @param definition - definition to be evaluated
52
54
  * @param filters - splitFiltersValidation bySet | byName
53
55
  */
54
- function matchFilters(featureFlag, filters) {
56
+ function matchFilters(definition, filters) {
55
57
  var _a = filters.groupedFilters, setsFilter = _a.bySet, namesFilter = _a.byName, prefixFilter = _a.byPrefix;
56
58
  if (setsFilter.length > 0)
57
- return featureFlag.sets && featureFlag.sets.some(function (featureFlagSet) { return setsFilter.indexOf(featureFlagSet) > -1; });
59
+ return definition.sets && definition.sets.some(function (definitionSet) { return setsFilter.indexOf(definitionSet) > -1; });
58
60
  var namesFilterConfigured = namesFilter.length > 0;
59
61
  var prefixFilterConfigured = prefixFilter.length > 0;
60
62
  if (!namesFilterConfigured && !prefixFilterConfigured)
61
63
  return true;
62
- var matchNames = namesFilterConfigured && namesFilter.indexOf(featureFlag.name) > -1;
63
- var matchPrefix = prefixFilterConfigured && prefixFilter.some(function (prefix) { return (0, lang_1.startsWith)(featureFlag.name, prefix); });
64
+ var matchNames = namesFilterConfigured && namesFilter.indexOf(definition.name) > -1;
65
+ var matchPrefix = prefixFilterConfigured && prefixFilter.some(function (prefix) { return (0, lang_1.startsWith)(definition.name, prefix); });
64
66
  return matchNames || matchPrefix;
65
67
  }
66
68
  /**
67
- * Given the list of splits from /splitChanges endpoint, it returns the mutations,
68
- * i.e., an object with added splits, removed splits and used segments.
69
+ * Given the list of definitions from /splitChanges or /configs endpoint, it returns the mutations,
70
+ * i.e., an object with added definitions, removed definitions, and used segments.
69
71
  * Exported for testing purposes.
70
72
  */
71
- function computeMutation(rules, segments, filters) {
72
- return rules.reduce(function (accum, ruleEntity) {
73
- if (ruleEntity.status === 'ACTIVE' && (!filters || matchFilters(ruleEntity, filters))) {
73
+ function computeMutation(update, segments, filters) {
74
+ return update.updated.reduce(function (accum, ruleEntity) {
75
+ if (!filters || matchFilters(ruleEntity, filters)) {
74
76
  accum.added.push(ruleEntity);
75
77
  parseSegments(ruleEntity).forEach(function (segmentName) {
76
78
  segments.add(segmentName);
77
79
  });
78
80
  }
79
81
  else {
80
- accum.removed.push(ruleEntity);
82
+ accum.removed.push(ruleEntity.name);
81
83
  }
82
84
  accum.names.push(ruleEntity.name);
83
85
  return accum;
84
- }, { added: [], removed: [], names: [] });
86
+ }, { added: [], removed: update.removed, names: update.removed.slice() });
85
87
  }
86
88
  exports.computeMutation = computeMutation;
89
+ function convertInstantUpdateToDefinitionChanges(instantUpdate) {
90
+ var payload = instantUpdate.payload, changeNumber = instantUpdate.changeNumber;
91
+ return payload.status === 'ARCHIVED' ?
92
+ { till: changeNumber, updated: [], removed: [payload.name] } :
93
+ { till: changeNumber, updated: [payload], removed: [] };
94
+ }
87
95
  /**
88
- * factory of SplitChanges updater, a task that:
89
- * - fetches split changes using `splitChangesFetcher`
90
- * - updates `splitsCache`
91
- * - uses `splitsEventEmitter` to emit events related to split data updates
96
+ * Factory of DefinitionChanges updater, a task that:
97
+ * - fetches definition changes using `definitionChangesFetcher`
98
+ * - updates definitions storage
99
+ * - uses `definitionsEventEmitter` to emit events related to definition data updates
92
100
  *
93
101
  * @param log - Logger instance
94
- * @param splitChangesFetcher - Fetcher of `/splitChanges`
95
- * @param splits - Splits storage, with sync or async methods
102
+ * @param definitionChangesFetcher - Fetcher of `/splitChanges` or `/configs`
103
+ * @param definitions - Definitions storage, with sync or async methods
96
104
  * @param segments - Segments storage, with sync or async methods
97
- * @param splitsEventEmitter - Optional readiness manager. Not required for synchronizer or producer mode.
105
+ * @param definitionsEventEmitter - Optional readiness manager. Not required for synchronizer or producer mode.
98
106
  * @param requestTimeoutBeforeReady - How long the updater will wait for the request to timeout. Default 0, i.e., never timeout.
99
- * @param retriesOnFailureBeforeReady - How many retries on `/splitChanges` we the updater do in case of failure or timeout. Default 0, i.e., no retries.
107
+ * @param retriesOnFailureBeforeReady - How many retries on `/splitChanges` or `/configs` we the updater do in case of failure or timeout. Default 0, i.e., no retries.
100
108
  */
101
- function splitChangesUpdaterFactory(log, splitChangesFetcher, storage, splitFiltersValidation, splitsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, isClientSide) {
109
+ function definitionChangesUpdaterFactory(log, definitionChangesFetcher, storage, splitFiltersValidation, splitsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, isClientSide) {
102
110
  if (requestTimeoutBeforeReady === void 0) { requestTimeoutBeforeReady = 0; }
103
111
  if (retriesOnFailureBeforeReady === void 0) { retriesOnFailureBeforeReady = 0; }
104
112
  var splits = storage.splits, rbSegments = storage.rbSegments, segments = storage.segments;
105
113
  var startingUp = true;
106
- /** timeout decorator for `splitChangesFetcher` promise */
114
+ /** timeout decorator for `definitionChangesFetcher` promise */
107
115
  function _promiseDecorator(promise) {
108
116
  if (startingUp && requestTimeoutBeforeReady)
109
117
  promise = (0, timeout_1.timeout)(requestTimeoutBeforeReady, promise);
110
118
  return promise;
111
119
  }
112
120
  /**
113
- * SplitChanges updater returns a promise that resolves with a `false` boolean value if it fails to fetch splits or synchronize them with the storage.
121
+ * DefinitionChanges updater returns a promise that resolves with a `false` boolean value if it fails to fetch definitions or synchronize them with the storage.
114
122
  * Returned promise will not be rejected.
115
123
  *
116
124
  * @param noCache - true to revalidate data to fetch
117
125
  * @param till - query param to bypass CDN requests
118
126
  */
119
- return function splitChangesUpdater(noCache, till, instantUpdate) {
127
+ return function definitionChangesUpdater(noCache, till, instantUpdate) {
120
128
  /**
121
- * @param since - current changeNumber at splitsCache
129
+ * @param since - current changeNumber at definitionsCache
122
130
  * @param retry - current number of retry attempts
123
131
  */
124
- function _splitChangesUpdater(sinces, retry) {
132
+ function _definitionChangesUpdater(sinces, retry) {
125
133
  if (retry === void 0) { retry = 0; }
126
134
  var since = sinces[0], rbSince = sinces[1];
127
- log.debug(constants_2.SYNC_SPLITS_FETCH, sinces);
135
+ log.debug(constants_2.SYNC_FETCH, [definitionChangesFetcher.type, since, rbSince]);
128
136
  return Promise.resolve(instantUpdate ?
129
137
  instantUpdate.type === constants_4.SPLIT_UPDATE ?
130
- // IFFU edge case: a change to a flag that adds an IN_RULE_BASED_SEGMENT matcher that is not present yet
138
+ // IFFU edge case: a change to definition that adds an IN_RULE_BASED_SEGMENT matcher that is not present yet
131
139
  Promise.resolve(rbSegments.contains(parseSegments(instantUpdate.payload, constants_3.IN_RULE_BASED_SEGMENT))).then(function (contains) {
132
140
  return contains ?
133
- { ff: { d: [instantUpdate.payload], t: instantUpdate.changeNumber } } :
134
- splitChangesFetcher(since, noCache, till, rbSince, _promiseDecorator);
141
+ { d: convertInstantUpdateToDefinitionChanges(instantUpdate) } :
142
+ definitionChangesFetcher(since, noCache, till, rbSince, _promiseDecorator);
135
143
  }) :
136
- { rbs: { d: [instantUpdate.payload], t: instantUpdate.changeNumber } } :
137
- splitChangesFetcher(since, noCache, till, rbSince, _promiseDecorator))
138
- .then(function (splitChanges) {
144
+ { rbs: convertInstantUpdateToDefinitionChanges(instantUpdate) } :
145
+ definitionChangesFetcher(since, noCache, till, rbSince, _promiseDecorator))
146
+ .then(function (definitionChanges) {
139
147
  var usedSegments = new Set();
140
- var updatedFlags = [];
148
+ var updatedDefinitions = [];
141
149
  var ffUpdate = false;
142
- if (splitChanges.ff) {
143
- var _a = computeMutation(splitChanges.ff.d, usedSegments, splitFiltersValidation), added = _a.added, removed = _a.removed, names = _a.names;
144
- updatedFlags = names;
145
- log.debug(constants_2.SYNC_SPLITS_UPDATE, [added.length, removed.length]);
146
- ffUpdate = splits.update(added, removed, splitChanges.ff.t);
150
+ if (definitionChanges.d) {
151
+ var _a = computeMutation(definitionChanges.d, usedSegments, splitFiltersValidation), added = _a.added, removed = _a.removed, names = _a.names;
152
+ updatedDefinitions = names;
153
+ log.debug(constants_2.SYNC_UPDATE, [definitionChangesFetcher.type, added.length, removed.length]);
154
+ ffUpdate = splits.update(added, removed, definitionChanges.d.till);
147
155
  }
148
156
  var rbsUpdate = false;
149
- if (splitChanges.rbs) {
150
- var _b = computeMutation(splitChanges.rbs.d, usedSegments), added = _b.added, removed = _b.removed;
151
- log.debug(constants_2.SYNC_RBS_UPDATE, [added.length, removed.length]);
152
- rbsUpdate = rbSegments.update(added, removed, splitChanges.rbs.t);
157
+ if (definitionChanges.rbs) {
158
+ var _b = computeMutation(definitionChanges.rbs, usedSegments), added = _b.added, removed = _b.removed;
159
+ log.debug(constants_2.SYNC_UPDATE, ['rule-based segments', added.length, removed.length]);
160
+ rbsUpdate = rbSegments.update(added, removed, definitionChanges.rbs.till);
153
161
  }
154
162
  return Promise.all([ffUpdate, rbsUpdate,
155
163
  // @TODO if at least 1 segment fetch fails due to 404 and other segments are updated in the storage, SDK_UPDATE is not emitted
@@ -167,8 +175,8 @@ function splitChangesUpdaterFactory(log, splitChangesFetcher, storage, splitFilt
167
175
  // emit SDK events
168
176
  if (emitSplitsArrivedEvent) {
169
177
  var metadata = {
170
- type: updatedFlags.length > 0 ? constants_1.FLAGS_UPDATE : constants_1.SEGMENTS_UPDATE,
171
- names: updatedFlags.length > 0 ? updatedFlags : []
178
+ type: updatedDefinitions.length > 0 ? definitionChangesFetcher.type === 'configs' ? constants_1.CONFIGS_UPDATE : constants_1.FLAGS_UPDATE : constants_1.SEGMENTS_UPDATE,
179
+ names: updatedDefinitions.length > 0 ? updatedDefinitions : []
172
180
  };
173
181
  splitsEventEmitter.emit(constants_1.SDK_SPLITS_ARRIVED, metadata);
174
182
  }
@@ -181,18 +189,18 @@ function splitChangesUpdaterFactory(log, splitChangesFetcher, storage, splitFilt
181
189
  .catch(function (error) {
182
190
  if (startingUp && retriesOnFailureBeforeReady > retry) {
183
191
  retry += 1;
184
- log.warn(constants_2.SYNC_SPLITS_FETCH_RETRY, [retry, error]);
185
- return _splitChangesUpdater(sinces, retry);
192
+ log.warn(constants_2.SYNC_FETCH_RETRY, [definitionChangesFetcher.type, retry, error]);
193
+ return _definitionChangesUpdater(sinces, retry);
186
194
  }
187
195
  else {
188
196
  startingUp = false;
189
- log.warn(constants_2.SYNC_SPLITS_FETCH_FAILS, [error]);
197
+ log.warn(constants_2.SYNC_FETCH_FAILS, [definitionChangesFetcher.type, error]);
190
198
  }
191
199
  return false;
192
200
  });
193
201
  }
194
202
  // `getChangeNumber` never rejects or throws error
195
- return Promise.all([splits.getChangeNumber(), rbSegments.getChangeNumber()]).then(_splitChangesUpdater);
203
+ return Promise.all([splits.getChangeNumber(), rbSegments.getChangeNumber()]).then(_definitionChangesUpdater);
196
204
  };
197
205
  }
198
- exports.splitChangesUpdaterFactory = splitChangesUpdaterFactory;
206
+ exports.definitionChangesUpdaterFactory = definitionChangesUpdaterFactory;
@@ -56,7 +56,7 @@ function mySegmentsUpdaterFactory(log, mySegmentsFetcher, storage, segmentsEvent
56
56
  return updaterPromise.catch(function (error) {
57
57
  if (startingUp && retriesOnFailureBeforeReady > retry) {
58
58
  retry += 1;
59
- log.warn(constants_2.SYNC_MYSEGMENTS_FETCH_RETRY, [retry, error]);
59
+ log.warn(constants_2.SYNC_FETCH_RETRY, ['memberships', retry, error]);
60
60
  return _mySegmentsUpdater(retry); // no need to forward `segmentList` and `noCache` params
61
61
  }
62
62
  else {
@@ -23,7 +23,7 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
23
23
  return promise;
24
24
  }
25
25
  function updateSegment(segmentName, noCache, till, fetchOnlyNew, retries) {
26
- log.debug(constants_2.LOG_PREFIX_SYNC_SEGMENTS + "Processing segment " + segmentName);
26
+ log.debug("".concat(constants_2.LOG_PREFIX_SYNC, "Processing segment ").concat(segmentName));
27
27
  var sincePromise = Promise.resolve(segments.getChangeNumber(segmentName));
28
28
  return sincePromise.then(function (since) {
29
29
  // if fetchOnlyNew flag, avoid processing already fetched segments
@@ -31,14 +31,14 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
31
31
  false :
32
32
  segmentChangesFetcher(since || -1, segmentName, noCache, till, _promiseDecorator).then(function (changes) {
33
33
  return Promise.all(changes.map(function (x) {
34
- log.debug(constants_2.LOG_PREFIX_SYNC_SEGMENTS + "Processing " + segmentName + " with till = " + x.till + ". Added: " + x.added.length + ". Removed: " + x.removed.length);
34
+ log.debug("".concat(constants_2.LOG_PREFIX_SYNC, "Processing ").concat(segmentName, " with till = ").concat(x.till, ". Added: ").concat(x.added.length, ". Removed: ").concat(x.removed.length));
35
35
  return segments.update(segmentName, x.added, x.removed, x.till);
36
36
  })).then(function (updates) {
37
37
  return updates.some(function (update) { return update; });
38
38
  });
39
39
  }).catch(function (error) {
40
40
  if (retries) {
41
- log.warn(constants_2.LOG_PREFIX_SYNC_SEGMENTS + "Retrying fetch of segment " + segmentName + " (attempt #" + retries + "). Reason: " + error);
41
+ log.warn("".concat(constants_2.LOG_PREFIX_SYNC, "Retrying fetch of segment ").concat(segmentName, " (attempt #").concat(retries, "). Reason: ").concat(error));
42
42
  return updateSegment(segmentName, noCache, till, fetchOnlyNew, retries - 1);
43
43
  }
44
44
  throw error;
@@ -57,7 +57,7 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
57
57
  * @param till - till target for the provided segmentName, for CDN bypass.
58
58
  */
59
59
  return function segmentChangesUpdater(fetchOnlyNew, segmentName, noCache, till) {
60
- log.debug(constants_2.LOG_PREFIX_SYNC_SEGMENTS + "Started segments update");
60
+ log.debug("".concat(constants_2.LOG_PREFIX_SYNC, "Started segments update"));
61
61
  // If not a segment name provided, read list of available segments names to be updated.
62
62
  var segmentsPromise = Promise.resolve(segmentName ? [segmentName] : segments.getRegisteredSegments());
63
63
  return segmentsPromise.then(function (segmentNames) {
@@ -84,10 +84,10 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
84
84
  // @TODO although factory status is destroyed, synchronization is not stopped
85
85
  if (readiness)
86
86
  readiness.setDestroyed();
87
- log.error(constants_2.LOG_PREFIX_INSTANTIATION + ": you passed a client-side type authorizationKey, please grab an SDK Key from the Split user interface that is of type server-side.");
87
+ log.error("".concat(constants_2.LOG_PREFIX_INSTANTIATION, ": you passed a client-side type authorizationKey, please grab an SDK Key from Harness UI that is of type server-side."));
88
88
  }
89
89
  else {
90
- log.warn(constants_2.LOG_PREFIX_SYNC_SEGMENTS + "Error while doing fetch of segments. " + error);
90
+ log.warn("".concat(constants_2.LOG_PREFIX_SYNC, "Error while doing fetch of segments. ").concat(error));
91
91
  }
92
92
  return false;
93
93
  });
@@ -60,11 +60,11 @@ var SSEClient = /** @class */ (function () {
60
60
  var params = CONTROL_CHANNEL_REGEX.test(channel) ? '[?occupancy=metrics.publishers]' : '';
61
61
  return encodeURIComponent(params + channel);
62
62
  }).join(',');
63
- var url = this.settings.urls.streaming + "/sse?channels=" + channelsQueryParam + "&accessToken=" + authToken.token + "&v=" + ABLY_API_VERSION + "&heartbeats=true"; // same results using `&heartbeats=false`
63
+ var url = "".concat(this.settings.urls.streaming, "/sse?channels=").concat(channelsQueryParam, "&accessToken=").concat(authToken.token, "&v=").concat(ABLY_API_VERSION, "&heartbeats=true"); // same results using `&heartbeats=false`
64
64
  var isServerSide = (0, key_1.checkIfServerSide)(this.settings);
65
65
  this.connection = new this.eventSource(
66
66
  // For client-side SDKs, metadata is passed as query param to avoid CORS issues and because native EventSource implementations in browsers do not support headers
67
- isServerSide ? url : url + ("&SplitSDKVersion=" + this.headers.SplitSDKVersion + "&SplitSDKClientKey=" + this.headers.SplitSDKClientKey),
67
+ isServerSide ? url : url + "&SplitSDKVersion=".concat(this.headers.SplitSDKVersion, "&SplitSDKClientKey=").concat(this.headers.SplitSDKClientKey),
68
68
  // For server-side SDKs, metadata is passed via headers
69
69
  (0, objectAssign_1.objectAssign)(isServerSide ?
70
70
  { headers: (0, decorateHeaders_1.decorateHeaders)(this.settings, this.headers) } :
@@ -51,7 +51,7 @@ function MySegmentsUpdateWorker(log, storage, mySegmentsSyncTask, telemetryTrack
51
51
  telemetryTracker.trackUpdatesFromSSE(constants_1.MEMBERSHIPS);
52
52
  var attempts = backoff.attempts + 1;
53
53
  if (maxChangeNumber <= currentChangeNumber) {
54
- log.debug("Refresh completed" + (cdnBypass ? ' bypassing the CDN' : '') + " in " + attempts + " attempts.");
54
+ log.debug("Refresh completed".concat(cdnBypass ? ' bypassing the CDN' : '', " in ").concat(attempts, " attempts."));
55
55
  isHandlingEvent = false;
56
56
  return;
57
57
  }
@@ -60,7 +60,7 @@ function MySegmentsUpdateWorker(log, storage, mySegmentsSyncTask, telemetryTrack
60
60
  return;
61
61
  }
62
62
  if (cdnBypass) {
63
- log.debug("No changes fetched after " + attempts + " attempts with CDN bypassed.");
63
+ log.debug("No changes fetched after ".concat(attempts, " attempts with CDN bypassed."));
64
64
  isHandlingEvent = false;
65
65
  }
66
66
  else {
@@ -28,7 +28,7 @@ function SegmentsUpdateWorker(log, segmentsSyncTask, segmentsCache) {
28
28
  else {
29
29
  var attempts = backoff.attempts + 1;
30
30
  if (maxChangeNumber <= (segmentsCache.getChangeNumber(segment) || -1)) {
31
- log.debug("Refresh completed" + (cdnBypass ? ' bypassing the CDN' : '') + " in " + attempts + " attempts.");
31
+ log.debug("Refresh completed".concat(cdnBypass ? ' bypassing the CDN' : '', " in ").concat(attempts, " attempts."));
32
32
  isHandlingEvent = false;
33
33
  return;
34
34
  }
@@ -37,7 +37,7 @@ function SegmentsUpdateWorker(log, segmentsSyncTask, segmentsCache) {
37
37
  return;
38
38
  }
39
39
  if (cdnBypass) {
40
- log.debug("No changes fetched after " + attempts + " attempts with CDN bypassed.");
40
+ log.debug("No changes fetched after ".concat(attempts, " attempts with CDN bypassed."));
41
41
  isHandlingEvent = false;
42
42
  }
43
43
  else {
@@ -11,7 +11,7 @@ var constants_5 = require("./constants");
11
11
  /**
12
12
  * SplitsUpdateWorker factory
13
13
  */
14
- function SplitsUpdateWorker(log, storage, splitsSyncTask, splitsEventEmitter, telemetryTracker, segmentsSyncTask) {
14
+ function SplitsUpdateWorker(log, storage, definitionsSyncTask, splitsEventEmitter, telemetryTracker, segmentsSyncTask) {
15
15
  var ff = SplitsUpdateWorker(storage.splits);
16
16
  var rbs = SplitsUpdateWorker(storage.rbSegments);
17
17
  function SplitsUpdateWorker(cache) {
@@ -26,7 +26,7 @@ function SplitsUpdateWorker(log, storage, splitsSyncTask, splitsEventEmitter, te
26
26
  if (maxChangeNumber > cache.getChangeNumber()) {
27
27
  handleNewEvent = false;
28
28
  // fetch splits revalidating data if cached
29
- splitsSyncTask.execute(true, cdnBypass ? maxChangeNumber : undefined, instantUpdate).then(function () {
29
+ definitionsSyncTask.execute(true, cdnBypass ? maxChangeNumber : undefined, instantUpdate).then(function () {
30
30
  if (!isHandlingEvent)
31
31
  return; // halt if `stop` has been called
32
32
  if (handleNewEvent) {
@@ -40,7 +40,7 @@ function SplitsUpdateWorker(log, storage, splitsSyncTask, splitsEventEmitter, te
40
40
  segmentsSyncTask.execute(true);
41
41
  var attempts = backoff.attempts + 1;
42
42
  if (ff.isSync() && rbs.isSync()) {
43
- log.debug("Refresh completed" + (cdnBypass ? ' bypassing the CDN' : '') + " in " + attempts + " attempts.");
43
+ log.debug("Refresh completed".concat(cdnBypass ? ' bypassing the CDN' : '', " in ").concat(attempts, " attempts."));
44
44
  isHandlingEvent = false;
45
45
  return;
46
46
  }
@@ -49,7 +49,7 @@ function SplitsUpdateWorker(log, storage, splitsSyncTask, splitsEventEmitter, te
49
49
  return;
50
50
  }
51
51
  if (cdnBypass) {
52
- log.debug("No changes fetched after " + attempts + " attempts with CDN bypassed.");
52
+ log.debug("No changes fetched after ".concat(attempts, " attempts with CDN bypassed."));
53
53
  isHandlingEvent = false;
54
54
  }
55
55
  else {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDelay = exports.parseFFUpdatePayload = exports.isInBitmap = exports.parseBitmap = exports.parseKeyList = void 0;
3
+ exports.getDelay = exports.parseFFUpdatePayload = exports.isInBitmap = exports.parseBitmap = exports.parseCompressedData = void 0;
4
4
  var decompress_1 = require("../../utils/decompress");
5
5
  var base64_1 = require("../../utils/base64");
6
6
  var murmur3_1 = require("../../utils/murmur3/murmur3");
@@ -30,27 +30,27 @@ function decompress(data, compression) {
30
30
  return decompress_1.algorithms.gunzipSync(binData);
31
31
  if (compression === ZLIB)
32
32
  return decompress_1.algorithms.unzlibSync(binData);
33
- throw new Error("Invalid compression algorithm #" + compression);
33
+ throw new Error("Invalid compression algorithm #".concat(compression));
34
34
  }
35
35
  /**
36
- * Decode, decompress and parse the provided 'data' into a KeyList object
36
+ * Decode, decompress and parse the provided 'data' into an object of type T
37
37
  *
38
38
  * @param data - base64 encoded string
39
39
  * @param compression - 1 GZIP, 2 ZLIB
40
40
  * @param avoidPrecisionLoss - true as default, set it as false if dont need to avoid precission loss
41
- * @returns keyList
41
+ * @returns parsed object
42
42
  * @throws if data string cannot be decoded, decompressed or parsed
43
43
  */
44
- function parseKeyList(data, compression, avoidPrecisionLoss) {
44
+ function parseCompressedData(data, compression, avoidPrecisionLoss) {
45
45
  if (avoidPrecisionLoss === void 0) { avoidPrecisionLoss = true; }
46
- var binKeyList = decompress(data, compression);
47
- var strKeyList = Uint8ArrayToString(binKeyList);
48
- // replace numbers to strings, to avoid losing precision
46
+ var binData = decompress(data, compression);
47
+ var str = Uint8ArrayToString(binData);
48
+ // replace numbers to strings, to avoid losing precision (e.g., 64-bit IDs in KeyList)
49
49
  if (avoidPrecisionLoss)
50
- strKeyList = strKeyList.replace(/\d+/g, '"$&"');
51
- return JSON.parse(strKeyList);
50
+ str = str.replace(/\d+/g, '"$&"');
51
+ return JSON.parse(str);
52
52
  }
53
- exports.parseKeyList = parseKeyList;
53
+ exports.parseCompressedData = parseCompressedData;
54
54
  /**
55
55
  * Decode, decompress and parse the provided 'data' into a Bitmap object
56
56
  *
@@ -83,7 +83,7 @@ exports.isInBitmap = isInBitmap;
83
83
  */
84
84
  function parseFFUpdatePayload(compression, data) {
85
85
  return compression > 0 ?
86
- parseKeyList(data, compression, false) :
86
+ parseCompressedData(data, compression, false) :
87
87
  JSON.parse((0, base64_1.decodeFromBase64)(data));
88
88
  }
89
89
  exports.parseFFUpdatePayload = parseFFUpdatePayload;
@@ -46,7 +46,7 @@ function pushManagerFactory(params, pollingManager) {
46
46
  // MySegmentsUpdateWorker (client-side) are initiated in `add` method
47
47
  var segmentsUpdateWorker = userKey ? undefined : (0, SegmentsUpdateWorker_1.SegmentsUpdateWorker)(log, pollingManager.segmentsSyncTask, storage.segments);
48
48
  // For server-side we pass the segmentsSyncTask, used by SplitsUpdateWorker to fetch new segments
49
- var splitsUpdateWorker = (0, SplitsUpdateWorker_1.SplitsUpdateWorker)(log, storage, pollingManager.splitsSyncTask, readiness.splits, telemetryTracker, userKey ? undefined : pollingManager.segmentsSyncTask);
49
+ var splitsUpdateWorker = (0, SplitsUpdateWorker_1.SplitsUpdateWorker)(log, storage, pollingManager.definitionsSyncTask, readiness.splits, telemetryTracker, userKey ? undefined : pollingManager.segmentsSyncTask);
50
50
  // [Only for client-side] map of hashes to user keys, to dispatch membership update events to the corresponding MySegmentsUpdateWorker
51
51
  var userKeyHashes = {};
52
52
  // [Only for client-side] map of user keys to their corresponding hash64 and MySegmentsUpdateWorkers.
@@ -206,7 +206,7 @@ function pushManagerFactory(params, pollingManager) {
206
206
  case types_1.UpdateStrategy.KeyList: {
207
207
  var keyList = void 0, added_1, removed_1;
208
208
  try {
209
- keyList = (0, parseUtils_1.parseKeyList)(parsedData.d, parsedData.c);
209
+ keyList = (0, parseUtils_1.parseCompressedData)(parsedData.d, parsedData.c);
210
210
  added_1 = new Set(keyList.a);
211
211
  removed_1 = new Set(keyList.r);
212
212
  }