@splitsoftware/splitio-commons 3.1.1-rc.1 → 3.1.1-rc.10

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 (239) hide show
  1. package/CHANGES.txt +10 -1
  2. package/cjs/evaluator/condition/index.js +2 -2
  3. package/cjs/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +8 -5
  4. package/cjs/evaluator/index.js +71 -76
  5. package/cjs/listeners/browser.js +1 -2
  6. package/cjs/listeners/node.js +4 -4
  7. package/cjs/logger/constants.js +20 -15
  8. package/cjs/logger/messages/debug.js +6 -5
  9. package/cjs/logger/messages/error.js +3 -3
  10. package/cjs/logger/messages/info.js +4 -3
  11. package/cjs/logger/messages/warn.js +7 -6
  12. package/cjs/presets/serverSide.js +2 -2
  13. package/cjs/readiness/constants.js +4 -5
  14. package/cjs/readiness/readinessManager.js +23 -23
  15. package/cjs/readiness/sdkReadinessManager.js +17 -1
  16. package/cjs/sdkClient/client.js +51 -27
  17. package/cjs/sdkClient/clientInputValidation.js +17 -6
  18. package/cjs/sdkClient/sdkClient.js +60 -3
  19. package/cjs/sdkFactory/index.js +15 -11
  20. package/cjs/sdkManager/index.js +5 -5
  21. package/cjs/services/decorateHeaders.js +1 -2
  22. package/cjs/services/splitApi.js +1 -14
  23. package/cjs/services/splitHttpClient.js +5 -3
  24. package/cjs/storages/AbstractSplitsCacheAsync.js +51 -0
  25. package/cjs/storages/AbstractSplitsCacheSync.js +76 -0
  26. package/cjs/storages/KeyBuilder.js +6 -6
  27. package/cjs/storages/KeyBuilderCS.js +5 -5
  28. package/cjs/storages/KeyBuilderSS.js +2 -2
  29. package/cjs/storages/getRolloutPlan.js +3 -3
  30. package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +2 -1
  31. package/cjs/storages/inLocalStorage/RBSegmentsCacheInLocal.js +10 -10
  32. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +194 -0
  33. package/cjs/storages/inLocalStorage/index.js +6 -6
  34. package/cjs/storages/inLocalStorage/validateCache.js +3 -3
  35. package/cjs/storages/inMemory/InMemoryStorage.js +4 -4
  36. package/cjs/storages/inMemory/InMemoryStorageCS.js +5 -5
  37. package/cjs/storages/inMemory/RBSegmentsCacheInMemory.js +5 -5
  38. package/cjs/storages/inMemory/SegmentsCacheInMemory.js +1 -1
  39. package/cjs/storages/inMemory/SplitsCacheInMemory.js +121 -0
  40. package/cjs/storages/inMemory/TelemetryCacheInMemory.js +5 -5
  41. package/cjs/storages/inRedis/RBSegmentsCacheInRedis.js +1 -1
  42. package/cjs/storages/inRedis/RedisAdapter.js +8 -5
  43. package/cjs/storages/inRedis/{DefinitionsCacheInRedis.js → SplitsCacheInRedis.js} +77 -77
  44. package/cjs/storages/inRedis/index.js +2 -2
  45. package/cjs/storages/pluggable/RBSegmentsCachePluggable.js +1 -1
  46. package/cjs/storages/pluggable/SplitsCachePluggable.js +212 -0
  47. package/cjs/storages/pluggable/index.js +2 -2
  48. package/cjs/storages/setRolloutPlan.js +4 -4
  49. package/cjs/storages/utils.js +0 -1
  50. package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +5 -5
  51. package/cjs/sync/polling/fetchers/splitChangesFetcher.js +15 -24
  52. package/cjs/sync/polling/pollingManagerCS.js +20 -20
  53. package/cjs/sync/polling/pollingManagerSS.js +15 -15
  54. package/cjs/sync/polling/syncTasks/segmentsSyncTask.js +3 -2
  55. package/cjs/sync/polling/syncTasks/splitsSyncTask.js +13 -0
  56. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +3 -3
  57. package/cjs/sync/polling/updaters/segmentChangesUpdater.js +6 -6
  58. package/cjs/sync/polling/updaters/{definitionChangesUpdater.js → splitChangesUpdater.js} +68 -65
  59. package/cjs/sync/streaming/AuthClient/index.js +1 -1
  60. package/cjs/sync/streaming/SSEHandler/NotificationKeeper.js +1 -1
  61. package/cjs/sync/streaming/SSEHandler/index.js +1 -1
  62. package/cjs/sync/streaming/UpdateWorkers/{DefinitionsUpdateWorker.js → SplitsUpdateWorker.js} +19 -16
  63. package/cjs/sync/streaming/constants.js +3 -3
  64. package/cjs/sync/streaming/parseUtils.js +11 -11
  65. package/cjs/sync/streaming/pushManager.js +16 -16
  66. package/cjs/sync/submitters/eventsSubmitter.js +1 -1
  67. package/cjs/sync/submitters/impressionCountsSubmitter.js +1 -1
  68. package/cjs/sync/submitters/impressionsSubmitter.js +4 -5
  69. package/cjs/sync/submitters/telemetrySubmitter.js +4 -3
  70. package/cjs/sync/submitters/uniqueKeysSubmitter.js +1 -1
  71. package/cjs/sync/syncManagerOnline.js +7 -12
  72. package/cjs/utils/Backoff.js +0 -20
  73. package/cjs/utils/inputValidation/index.js +7 -7
  74. package/cjs/utils/inputValidation/isOperational.js +4 -4
  75. package/cjs/utils/inputValidation/{definition.js → split.js} +10 -10
  76. package/cjs/utils/inputValidation/{definitionExistence.js → splitExistence.js} +6 -6
  77. package/cjs/utils/inputValidation/splits.js +25 -0
  78. package/cjs/utils/labels/index.js +3 -3
  79. package/cjs/utils/settingsValidation/index.js +0 -2
  80. package/cjs/utils/settingsValidation/splitFilters.js +3 -3
  81. package/cjs/utils/settingsValidation/url.js +2 -6
  82. package/esm/evaluator/condition/index.js +2 -2
  83. package/esm/evaluator/fallbackTreatmentsCalculator/fallbackSanitizer/index.js +8 -5
  84. package/esm/evaluator/index.js +71 -75
  85. package/esm/listeners/browser.js +1 -2
  86. package/esm/listeners/node.js +4 -4
  87. package/esm/logger/constants.js +17 -12
  88. package/esm/logger/messages/debug.js +6 -5
  89. package/esm/logger/messages/error.js +3 -3
  90. package/esm/logger/messages/info.js +4 -3
  91. package/esm/logger/messages/warn.js +7 -6
  92. package/esm/presets/serverSide.js +2 -2
  93. package/esm/readiness/constants.js +3 -4
  94. package/esm/readiness/readinessManager.js +24 -24
  95. package/esm/readiness/sdkReadinessManager.js +18 -2
  96. package/esm/sdkClient/client.js +51 -26
  97. package/esm/sdkClient/clientInputValidation.js +19 -8
  98. package/esm/sdkClient/sdkClient.js +60 -3
  99. package/esm/sdkFactory/index.js +16 -12
  100. package/esm/sdkManager/index.js +6 -6
  101. package/esm/services/decorateHeaders.js +1 -2
  102. package/esm/services/splitApi.js +1 -14
  103. package/esm/services/splitHttpClient.js +5 -3
  104. package/esm/storages/AbstractSplitsCacheAsync.js +48 -0
  105. package/esm/storages/AbstractSplitsCacheSync.js +71 -0
  106. package/esm/storages/KeyBuilder.js +6 -6
  107. package/esm/storages/KeyBuilderCS.js +5 -5
  108. package/esm/storages/KeyBuilderSS.js +2 -2
  109. package/esm/storages/getRolloutPlan.js +3 -3
  110. package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +2 -1
  111. package/esm/storages/inLocalStorage/RBSegmentsCacheInLocal.js +7 -7
  112. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +191 -0
  113. package/esm/storages/inLocalStorage/index.js +6 -6
  114. package/esm/storages/inLocalStorage/validateCache.js +3 -3
  115. package/esm/storages/inMemory/InMemoryStorage.js +4 -4
  116. package/esm/storages/inMemory/InMemoryStorageCS.js +5 -5
  117. package/esm/storages/inMemory/RBSegmentsCacheInMemory.js +2 -2
  118. package/esm/storages/inMemory/SegmentsCacheInMemory.js +1 -1
  119. package/esm/storages/inMemory/SplitsCacheInMemory.js +118 -0
  120. package/esm/storages/inMemory/TelemetryCacheInMemory.js +5 -5
  121. package/esm/storages/inRedis/RBSegmentsCacheInRedis.js +1 -1
  122. package/esm/storages/inRedis/RedisAdapter.js +8 -5
  123. package/esm/storages/inRedis/{DefinitionsCacheInRedis.js → SplitsCacheInRedis.js} +76 -76
  124. package/esm/storages/inRedis/index.js +2 -2
  125. package/esm/storages/pluggable/RBSegmentsCachePluggable.js +1 -1
  126. package/esm/storages/pluggable/SplitsCachePluggable.js +209 -0
  127. package/esm/storages/pluggable/index.js +2 -2
  128. package/esm/storages/setRolloutPlan.js +4 -4
  129. package/esm/storages/utils.js +0 -1
  130. package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +6 -6
  131. package/esm/sync/polling/fetchers/splitChangesFetcher.js +16 -25
  132. package/esm/sync/polling/pollingManagerCS.js +17 -17
  133. package/esm/sync/polling/pollingManagerSS.js +15 -15
  134. package/esm/sync/polling/syncTasks/segmentsSyncTask.js +3 -2
  135. package/esm/sync/polling/syncTasks/splitsSyncTask.js +9 -0
  136. package/esm/sync/polling/updaters/mySegmentsUpdater.js +3 -3
  137. package/esm/sync/polling/updaters/segmentChangesUpdater.js +7 -7
  138. package/esm/sync/polling/updaters/{definitionChangesUpdater.js → splitChangesUpdater.js} +68 -65
  139. package/esm/sync/streaming/AuthClient/index.js +1 -1
  140. package/esm/sync/streaming/SSEHandler/NotificationKeeper.js +2 -2
  141. package/esm/sync/streaming/SSEHandler/index.js +2 -2
  142. package/esm/sync/streaming/UpdateWorkers/{DefinitionsUpdateWorker.js → SplitsUpdateWorker.js} +18 -15
  143. package/esm/sync/streaming/constants.js +2 -2
  144. package/esm/sync/streaming/parseUtils.js +9 -9
  145. package/esm/sync/streaming/pushManager.js +18 -18
  146. package/esm/sync/submitters/eventsSubmitter.js +1 -1
  147. package/esm/sync/submitters/impressionCountsSubmitter.js +1 -1
  148. package/esm/sync/submitters/impressionsSubmitter.js +4 -5
  149. package/esm/sync/submitters/telemetrySubmitter.js +4 -3
  150. package/esm/sync/submitters/uniqueKeysSubmitter.js +1 -1
  151. package/esm/sync/syncManagerOnline.js +6 -11
  152. package/esm/utils/Backoff.js +0 -20
  153. package/esm/utils/inputValidation/index.js +3 -3
  154. package/esm/utils/inputValidation/isOperational.js +4 -4
  155. package/esm/utils/inputValidation/{definition.js → split.js} +8 -8
  156. package/esm/utils/inputValidation/splitExistence.js +15 -0
  157. package/esm/utils/inputValidation/splits.js +21 -0
  158. package/esm/utils/labels/index.js +2 -2
  159. package/esm/utils/settingsValidation/index.js +0 -2
  160. package/esm/utils/settingsValidation/splitFilters.js +3 -3
  161. package/esm/utils/settingsValidation/url.js +2 -6
  162. package/package.json +6 -7
  163. package/src/dtos/types.ts +1 -1
  164. package/src/evaluator/index.ts +11 -5
  165. package/src/evaluator/types.ts +1 -0
  166. package/src/presets/serverSide.ts +3 -3
  167. package/src/sdkClient/client.ts +3 -4
  168. package/src/sdkClient/sdkLifecycle.ts +3 -0
  169. package/src/services/authProvider.ts +41 -19
  170. package/src/services/secureSplitHttpClient.ts +10 -18
  171. package/src/services/serviceApi.ts +27 -24
  172. package/src/services/splitApi.ts +10 -9
  173. package/src/services/types.ts +5 -4
  174. package/src/storages/inRedis/RedisAdapter.ts +8 -5
  175. package/src/sync/polling/pollingManagerCS.ts +80 -78
  176. package/src/sync/polling/pollingManagerSS.ts +49 -45
  177. package/src/sync/polling/updaters/definitionChangesUpdater.ts +3 -3
  178. package/src/sync/polling/updaters/segmentChangesUpdater.ts +1 -1
  179. package/src/sync/streaming/AuthClient/index.ts +14 -15
  180. package/src/sync/streaming/AuthClient/types.ts +9 -13
  181. package/src/sync/streaming/SSEClient/index.ts +2 -2
  182. package/src/sync/streaming/SSEClient/types.ts +2 -2
  183. package/src/sync/streaming/SSEHandler/index.ts +2 -1
  184. package/src/sync/streaming/SSEHandler/types.ts +2 -2
  185. package/src/sync/streaming/constants.ts +1 -0
  186. package/src/sync/streaming/pushManager.ts +32 -42
  187. package/src/sync/streaming/types.ts +3 -2
  188. package/src/sync/submitters/impressionsSubmitter.ts +3 -3
  189. package/src/sync/submitters/types.ts +2 -2
  190. package/src/sync/syncManagerOnline.ts +2 -8
  191. package/src/utils/Backoff.ts +16 -4
  192. package/types/splitio.d.ts +5 -4
  193. package/cjs/platform/browser.js +0 -15
  194. package/cjs/platform/getEventSource/browser.js +0 -8
  195. package/cjs/platform/getEventSource/eventsource.js +0 -480
  196. package/cjs/platform/getEventSource/node.js +0 -26
  197. package/cjs/platform/getFetch/browser.js +0 -9
  198. package/cjs/platform/getFetch/node.js +0 -27
  199. package/cjs/platform/getOptions/node.js +0 -25
  200. package/cjs/platform/node.js +0 -17
  201. package/cjs/sdkClient/sdkLifecycle.js +0 -72
  202. package/cjs/sdkClient/trackMethod.js +0 -56
  203. package/cjs/services/authProvider.js +0 -67
  204. package/cjs/services/secureSplitHttpClient.js +0 -39
  205. package/cjs/services/serviceApi.js +0 -145
  206. package/cjs/storages/AbstractDefinitionsCacheAsync.js +0 -51
  207. package/cjs/storages/AbstractDefinitionsCacheSync.js +0 -76
  208. package/cjs/storages/inLocalStorage/DefinitionsCacheInLocal.js +0 -194
  209. package/cjs/storages/inMemory/DefinitionsCacheInMemory.js +0 -121
  210. package/cjs/storages/pluggable/DefinitionsCachePluggable.js +0 -212
  211. package/cjs/sync/polling/syncTasks/definitionsSyncTask.js +0 -13
  212. package/cjs/utils/EventEmitter.js +0 -391
  213. package/cjs/utils/filter/bloomFilter.js +0 -37
  214. package/cjs/utils/inputValidation/definitions.js +0 -25
  215. package/cjs/utils/inputValidation/target.js +0 -22
  216. package/esm/platform/browser.js +0 -12
  217. package/esm/platform/getEventSource/browser.js +0 -4
  218. package/esm/platform/getEventSource/eventsource.js +0 -480
  219. package/esm/platform/getEventSource/node.js +0 -20
  220. package/esm/platform/getFetch/browser.js +0 -5
  221. package/esm/platform/getFetch/node.js +0 -22
  222. package/esm/platform/getOptions/node.js +0 -20
  223. package/esm/platform/node.js +0 -14
  224. package/esm/sdkClient/sdkLifecycle.js +0 -68
  225. package/esm/sdkClient/trackMethod.js +0 -52
  226. package/esm/services/authProvider.js +0 -63
  227. package/esm/services/secureSplitHttpClient.js +0 -35
  228. package/esm/services/serviceApi.js +0 -141
  229. package/esm/storages/AbstractDefinitionsCacheAsync.js +0 -48
  230. package/esm/storages/AbstractDefinitionsCacheSync.js +0 -71
  231. package/esm/storages/inLocalStorage/DefinitionsCacheInLocal.js +0 -191
  232. package/esm/storages/inMemory/DefinitionsCacheInMemory.js +0 -118
  233. package/esm/storages/pluggable/DefinitionsCachePluggable.js +0 -209
  234. package/esm/sync/polling/syncTasks/definitionsSyncTask.js +0 -9
  235. package/esm/utils/EventEmitter.js +0 -387
  236. package/esm/utils/filter/bloomFilter.js +0 -33
  237. package/esm/utils/inputValidation/definitionExistence.js +0 -15
  238. package/esm/utils/inputValidation/definitions.js +0 -21
  239. package/esm/utils/inputValidation/target.js +0 -18
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SplitsCachePluggable = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var lang_1 = require("../../utils/lang");
6
+ var constants_1 = require("./constants");
7
+ var AbstractSplitsCacheAsync_1 = require("../AbstractSplitsCacheAsync");
8
+ var sets_1 = require("../../utils/lang/sets");
9
+ /**
10
+ * ISplitsCacheAsync implementation for pluggable storages.
11
+ */
12
+ var SplitsCachePluggable = /** @class */ (function (_super) {
13
+ tslib_1.__extends(SplitsCachePluggable, _super);
14
+ /**
15
+ * Create a SplitsCache that uses a storage wrapper.
16
+ * @param log - Logger instance.
17
+ * @param keys - Key builder.
18
+ * @param wrapper - Adapted wrapper storage.
19
+ */
20
+ function SplitsCachePluggable(log, keys, wrapper, splitFiltersValidation) {
21
+ var _this = _super.call(this) || this;
22
+ _this.log = log;
23
+ _this.keys = keys;
24
+ _this.wrapper = wrapper;
25
+ _this.flagSetsFilter = splitFiltersValidation ? splitFiltersValidation.groupedFilters.bySet : [];
26
+ return _this;
27
+ }
28
+ SplitsCachePluggable.prototype._decrementCounts = function (split) {
29
+ var _this = this;
30
+ var ttKey = this.keys.buildTrafficTypeKey(split.trafficTypeName);
31
+ return this.wrapper.decr(ttKey).then(function (count) {
32
+ if (count === 0)
33
+ return _this.wrapper.del(ttKey);
34
+ });
35
+ };
36
+ SplitsCachePluggable.prototype._incrementCounts = function (split) {
37
+ var ttKey = this.keys.buildTrafficTypeKey(split.trafficTypeName);
38
+ return this.wrapper.incr(ttKey);
39
+ };
40
+ SplitsCachePluggable.prototype._updateFlagSets = function (featureFlagName, flagSetsOfRemovedFlag, flagSetsOfAddedFlag) {
41
+ var _this = this;
42
+ var removeFromFlagSets = (0, sets_1.returnDifference)(flagSetsOfRemovedFlag, flagSetsOfAddedFlag);
43
+ var addToFlagSets = (0, sets_1.returnDifference)(flagSetsOfAddedFlag, flagSetsOfRemovedFlag);
44
+ if (this.flagSetsFilter.length > 0) {
45
+ addToFlagSets = addToFlagSets.filter(function (flagSet) {
46
+ return _this.flagSetsFilter.some(function (filterFlagSet) { return filterFlagSet === flagSet; });
47
+ });
48
+ }
49
+ var items = [featureFlagName];
50
+ return Promise.all(tslib_1.__spreadArray(tslib_1.__spreadArray([], removeFromFlagSets.map(function (flagSetName) { return _this.wrapper.removeItems(_this.keys.buildFlagSetKey(flagSetName), items); }), true), addToFlagSets.map(function (flagSetName) { return _this.wrapper.addItems(_this.keys.buildFlagSetKey(flagSetName), items); }), true));
51
+ };
52
+ /**
53
+ * Add a given split.
54
+ * The returned promise is resolved when the operation success
55
+ * or rejected if it fails (e.g., wrapper operation fails)
56
+ */
57
+ SplitsCachePluggable.prototype.addSplit = function (split) {
58
+ var _this = this;
59
+ var name = split.name;
60
+ var splitKey = this.keys.buildSplitKey(name);
61
+ return this.wrapper.get(splitKey).then(function (splitFromStorage) {
62
+ // handling parsing error
63
+ var parsedPreviousSplit, stringifiedNewSplit;
64
+ try {
65
+ parsedPreviousSplit = splitFromStorage ? JSON.parse(splitFromStorage) : undefined;
66
+ stringifiedNewSplit = JSON.stringify(split);
67
+ }
68
+ catch (e) {
69
+ throw new Error('Error parsing feature flag definition: ' + e);
70
+ }
71
+ return _this.wrapper.set(splitKey, stringifiedNewSplit).then(function () {
72
+ // avoid unnecessary increment/decrement operations
73
+ if (parsedPreviousSplit && parsedPreviousSplit.trafficTypeName === split.trafficTypeName)
74
+ return;
75
+ // update traffic type counts
76
+ return _this._incrementCounts(split).then(function () {
77
+ if (parsedPreviousSplit)
78
+ return _this._decrementCounts(parsedPreviousSplit);
79
+ });
80
+ }).then(function () { return _this._updateFlagSets(name, parsedPreviousSplit && parsedPreviousSplit.sets, split.sets); });
81
+ }).then(function () { return true; });
82
+ };
83
+ /**
84
+ * Remove a given split.
85
+ * The returned promise is resolved when the operation success, with a boolean indicating if the split existed or not.
86
+ * or rejected if it fails (e.g., wrapper operation fails).
87
+ */
88
+ SplitsCachePluggable.prototype.removeSplit = function (name) {
89
+ var _this = this;
90
+ return this.getSplit(name).then(function (split) {
91
+ if (split) {
92
+ return _this._decrementCounts(split).then(function () { return _this._updateFlagSets(name, split.sets); });
93
+ }
94
+ }).then(function () {
95
+ return _this.wrapper.del(_this.keys.buildSplitKey(name));
96
+ });
97
+ };
98
+ /**
99
+ * Get split.
100
+ * The returned promise is resolved with the split definition or null if it's not defined,
101
+ * or rejected if wrapper operation fails.
102
+ */
103
+ SplitsCachePluggable.prototype.getSplit = function (name) {
104
+ return this.wrapper.get(this.keys.buildSplitKey(name))
105
+ .then(function (maybeSplit) { return maybeSplit && JSON.parse(maybeSplit); });
106
+ };
107
+ /**
108
+ * Get list of splits.
109
+ * The returned promise is resolved with a map of split names to their split definition or null if it's not defined,
110
+ * or rejected if wrapper operation fails.
111
+ */
112
+ SplitsCachePluggable.prototype.getSplits = function (names) {
113
+ var _this = this;
114
+ var keys = names.map(function (name) { return _this.keys.buildSplitKey(name); });
115
+ return this.wrapper.getMany(keys).then(function (splitDefinitions) {
116
+ var splits = {};
117
+ names.forEach(function (name, idx) {
118
+ var split = splitDefinitions[idx];
119
+ splits[name] = split && JSON.parse(split);
120
+ });
121
+ return Promise.resolve(splits);
122
+ });
123
+ };
124
+ /**
125
+ * Get list of all split definitions.
126
+ * The returned promise is resolved with the list of split definitions,
127
+ * or rejected if wrapper operation fails.
128
+ */
129
+ SplitsCachePluggable.prototype.getAll = function () {
130
+ var _this = this;
131
+ return this.wrapper.getKeysByPrefix(this.keys.buildSplitKeyPrefix())
132
+ .then(function (listOfKeys) { return _this.wrapper.getMany(listOfKeys); })
133
+ .then(function (splitDefinitions) { return splitDefinitions.map(function (splitDefinition) {
134
+ return JSON.parse(splitDefinition);
135
+ }); });
136
+ };
137
+ /**
138
+ * Get list of split names.
139
+ * The returned promise is resolved with the list of split names,
140
+ * or rejected if wrapper operation fails.
141
+ */
142
+ SplitsCachePluggable.prototype.getSplitNames = function () {
143
+ var _this = this;
144
+ return this.wrapper.getKeysByPrefix(this.keys.buildSplitKeyPrefix()).then(function (listOfKeys) { return listOfKeys.map(_this.keys.extractKey); });
145
+ };
146
+ /**
147
+ * Get list of feature flag names related to a given list of flag set names.
148
+ * The returned promise is resolved with the list of feature flag names per flag set.
149
+ * It never rejects (If there is a wrapper error for some flag set, an empty set is returned for it).
150
+ */
151
+ SplitsCachePluggable.prototype.getNamesByFlagSets = function (flagSets) {
152
+ var _this = this;
153
+ return Promise.all(flagSets.map(function (flagSet) {
154
+ var flagSetKey = _this.keys.buildFlagSetKey(flagSet);
155
+ return _this.wrapper.getItems(flagSetKey).catch(function () { return []; });
156
+ })).then(function (namesByFlagSets) { return namesByFlagSets.map(function (namesByFlagSet) { return new Set(namesByFlagSet); }); });
157
+ };
158
+ /**
159
+ * Check traffic type existence.
160
+ * The returned promise is resolved with a boolean indicating whether the TT exist or not.
161
+ * In case of wrapper operation failures, the promise resolves with a true value, assuming that the TT might exist.
162
+ * It will never be rejected.
163
+ */
164
+ SplitsCachePluggable.prototype.trafficTypeExists = function (trafficType) {
165
+ var _this = this;
166
+ // If there is a number there should be > 0, otherwise the TT is considered as not existent.
167
+ return this.wrapper.get(this.keys.buildTrafficTypeKey(trafficType))
168
+ .then(function (ttCount) {
169
+ if (ttCount === null)
170
+ return false; // if entry doesn't exist, means that TT doesn't exist
171
+ ttCount = parseInt(ttCount, 10);
172
+ if (!(0, lang_1.isFiniteNumber)(ttCount) || ttCount < 0) {
173
+ _this.log.info(constants_1.LOG_PREFIX + "Could not validate traffic type existence of ".concat(trafficType, " due to data corruption of some sorts."));
174
+ return false;
175
+ }
176
+ return ttCount > 0;
177
+ }).catch(function (e) {
178
+ _this.log.error(constants_1.LOG_PREFIX + "Could not validate traffic type existence of ".concat(trafficType, " due to an error: ").concat(e, "."));
179
+ // If there is an error, bypass the validation so the event can get tracked.
180
+ return true;
181
+ });
182
+ };
183
+ /**
184
+ * Set till number.
185
+ * The returned promise is resolved when the operation success,
186
+ * or rejected if it fails (e.g., wrapper operation fails).
187
+ */
188
+ SplitsCachePluggable.prototype.setChangeNumber = function (changeNumber) {
189
+ return this.wrapper.set(this.keys.buildSplitsTillKey(), changeNumber + '');
190
+ };
191
+ /**
192
+ * Get till number or -1 if it's not defined.
193
+ * The returned promise is resolved with the changeNumber or -1 if it doesn't exist or a wrapper operation fails.
194
+ * The promise will never be rejected.
195
+ */
196
+ SplitsCachePluggable.prototype.getChangeNumber = function () {
197
+ var _this = this;
198
+ return this.wrapper.get(this.keys.buildSplitsTillKey()).then(function (value) {
199
+ var i = parseInt(value, 10);
200
+ return (0, lang_1.isNaNNumber)(i) ? -1 : i;
201
+ }).catch(function (e) {
202
+ _this.log.error(constants_1.LOG_PREFIX + 'Could not retrieve changeNumber from storage. Error: ' + e);
203
+ return -1;
204
+ });
205
+ };
206
+ // @TODO implement if required by DataLoader or producer mode
207
+ SplitsCachePluggable.prototype.clear = function () {
208
+ return Promise.resolve(true);
209
+ };
210
+ return SplitsCachePluggable;
211
+ }(AbstractSplitsCacheAsync_1.AbstractSplitsCacheAsync));
212
+ exports.SplitsCachePluggable = SplitsCachePluggable;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PluggableStorage = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var KeyBuilderSS_1 = require("../KeyBuilderSS");
6
- var DefinitionsCachePluggable_1 = require("./DefinitionsCachePluggable");
6
+ var SplitsCachePluggable_1 = require("./SplitsCachePluggable");
7
7
  var SegmentsCachePluggable_1 = require("./SegmentsCachePluggable");
8
8
  var ImpressionsCachePluggable_1 = require("./ImpressionsCachePluggable");
9
9
  var EventsCachePluggable_1 = require("./EventsCachePluggable");
@@ -106,7 +106,7 @@ function PluggableStorage(options) {
106
106
  return e; // Propagate error for shared clients
107
107
  });
108
108
  return {
109
- definitions: new DefinitionsCachePluggable_1.DefinitionsCachePluggable(log, keys, wrapper, settings.sync.__splitFiltersValidation),
109
+ splits: new SplitsCachePluggable_1.SplitsCachePluggable(log, keys, wrapper, settings.sync.__splitFiltersValidation),
110
110
  rbSegments: new RBSegmentsCachePluggable_1.RBSegmentsCachePluggable(log, keys, wrapper),
111
111
  segments: new SegmentsCachePluggable_1.SegmentsCachePluggable(log, keys, wrapper),
112
112
  impressions: isPartialConsumer ? new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(impressionsQueueSize) : new ImpressionsCachePluggable_1.ImpressionsCachePluggable(log, keys.buildImpressionsKey(), wrapper, metadata),
@@ -24,12 +24,12 @@ exports.validateRolloutPlan = validateRolloutPlan;
24
24
  * Otherwise, the storage is handled as a server-side storage (segments is an instance of SegmentsCache).
25
25
  */
26
26
  function setRolloutPlan(log, rolloutPlan, storage, matchingKey) {
27
- var definitions = storage.definitions, rbSegments = storage.rbSegments, segments = storage.segments, largeSegments = storage.largeSegments;
27
+ var splits = storage.splits, rbSegments = storage.rbSegments, segments = storage.segments, largeSegments = storage.largeSegments;
28
28
  var _a = rolloutPlan.splitChanges, ff = _a.ff, rbs = _a.rbs;
29
29
  log.debug("storage: set feature flags and segments".concat(matchingKey ? " for key ".concat(matchingKey) : ''));
30
- if (definitions && ff) {
31
- definitions.clear();
32
- definitions.update(ff.d || [], [], ff.t);
30
+ if (splits && ff) {
31
+ splits.clear();
32
+ splits.update(ff.d || [], [], ff.t);
33
33
  }
34
34
  if (rbSegments && rbs) {
35
35
  rbSegments.clear();
@@ -28,7 +28,6 @@ function impressionsToJSON(impressions, metadata) {
28
28
  m: impression.time,
29
29
  pt: impression.pt,
30
30
  properties: impression.properties
31
- // @TODO set entityType
32
31
  }
33
32
  };
34
33
  return JSON.stringify(impressionWithMetadata);
@@ -10,7 +10,7 @@ var constants_3 = require("../../../logger/constants");
10
10
  * Offline equivalent of `splitChangesUpdaterFactory`
11
11
  */
12
12
  function fromObjectUpdaterFactory(splitsParser, storage, readiness, settings) {
13
- var log = settings.log, definitions = storage.definitions;
13
+ var log = settings.log, splitsCache = storage.splits;
14
14
  var startingUp = true;
15
15
  return function objectUpdater() {
16
16
  var splits = [];
@@ -39,16 +39,16 @@ function fromObjectUpdaterFactory(splitsParser, storage, readiness, settings) {
39
39
  });
40
40
  });
41
41
  return Promise.all([
42
- definitions.clear(),
43
- definitions.update(splits, [], Date.now())
42
+ splitsCache.clear(),
43
+ splitsCache.update(splits, [], Date.now())
44
44
  ]).then(function () {
45
- readiness.definitions.emit(constants_2.SDK_DEFINITIONS_ARRIVED, { type: constants_2.FLAGS_UPDATE, names: [] });
45
+ readiness.splits.emit(constants_2.SDK_SPLITS_ARRIVED, { type: constants_2.FLAGS_UPDATE, names: [] });
46
46
  if (startingUp) {
47
47
  startingUp = false;
48
48
  Promise.resolve(storage.validateCache ? storage.validateCache() : { initialCacheLoad: true /* Fallback: assume initial load when validateCache doesn't exist */ }).then(function (cacheMetadata) {
49
49
  // Emits SDK_READY_FROM_CACHE
50
50
  if (!cacheMetadata.initialCacheLoad) {
51
- readiness.definitions.emit(constants_2.SDK_DEFINITIONS_CACHE_LOADED, cacheMetadata);
51
+ readiness.splits.emit(constants_2.SDK_SPLITS_CACHE_LOADED, cacheMetadata);
52
52
  }
53
53
  // Emits SDK_READY
54
54
  readiness.segments.emit(constants_2.SDK_SEGMENTS_ARRIVED, { type: constants_2.SEGMENTS_UPDATE, names: [] });
@@ -10,25 +10,16 @@ var PROXY_CHECK_INTERVAL_MILLIS_SS = 24 * PROXY_CHECK_INTERVAL_MILLIS_CS; // 24
10
10
  function sdkEndpointOverridden(settings) {
11
11
  return settings.urls.sdk !== settingsValidation_1.base.urls.sdk;
12
12
  }
13
- function isSplitChangesLegacyResponse(data) {
14
- return data.splits != null;
15
- }
16
- function partitionByStatus(items, till, since) {
17
- var updated = [], removed = [];
18
- items.forEach(function (item) { return item.status === 'ARCHIVED' ? removed.push(item.name) : updated.push(item); });
19
- return { updated: updated, removed: removed, till: till, since: since };
20
- }
21
13
  /**
22
14
  * Factory of SplitChanges fetcher.
23
15
  * SplitChanges fetcher is a wrapper around `splitChanges` API service that parses the response and handle errors.
24
16
  */
25
17
  // @TODO breaking: drop support for Split Proxy below v5.10.0 and simplify the implementation
26
- function splitChangesFetcherFactory(params) {
27
- var fetchSplitChanges = params.serviceApi.fetchSplitChanges, settings = params.settings, storage = params.storage;
18
+ function splitChangesFetcherFactory(fetchSplitChanges, settings, storage) {
28
19
  var log = settings.log;
29
20
  var PROXY_CHECK_INTERVAL_MILLIS = (0, key_1.checkIfServerSide)(settings) ? PROXY_CHECK_INTERVAL_MILLIS_SS : PROXY_CHECK_INTERVAL_MILLIS_CS;
30
21
  var lastProxyCheckTimestamp;
31
- function splitChangesFetcher(since, noCache, till, rbSince,
22
+ return function splitChangesFetcher(since, noCache, till, rbSince,
32
23
  // Optional decorator for `fetchSplitChanges` promise, such as timeout or time tracker
33
24
  decorator) {
34
25
  // Recheck proxy
@@ -39,7 +30,7 @@ function splitChangesFetcherFactory(params) {
39
30
  .catch(function (err) {
40
31
  // Handle proxy error with spec 1.3
41
32
  if ((!err.statusCode || err.statusCode === 400) && sdkEndpointOverridden(settings) && settings.sync.flagSpecVersion === constants_1.FLAG_SPEC_VERSION) {
42
- log.error(constants_2.LOG_PREFIX_SYNC + 'Proxy error detected. Retrying with spec 1.2. If you are using Split Proxy, please upgrade to latest version');
33
+ log.error(constants_2.LOG_PREFIX_SYNC_SPLITS + 'Proxy error detected. Retrying with spec 1.2. If you are using Split Proxy, please upgrade to latest version');
43
34
  lastProxyCheckTimestamp = Date.now();
44
35
  settings.sync.flagSpecVersion = '1.2'; // fallback to 1.2 spec
45
36
  return fetchSplitChanges(since, noCache, till); // retry request without rbSince
@@ -52,27 +43,27 @@ function splitChangesFetcherFactory(params) {
52
43
  .then(function (resp) { return resp.json(); })
53
44
  .then(function (data) {
54
45
  // Using flag spec version 1.2 or below
55
- if (isSplitChangesLegacyResponse(data)) {
56
- return { d: partitionByStatus(data.splits || [], data.till, data.since) };
46
+ if (data.splits) {
47
+ return {
48
+ ff: {
49
+ d: data.splits,
50
+ s: data.since,
51
+ t: data.till
52
+ }
53
+ };
57
54
  }
58
55
  // Proxy recovery
59
56
  if (lastProxyCheckTimestamp) {
60
- log.info(constants_2.LOG_PREFIX_SYNC + 'Proxy error recovered');
57
+ log.info(constants_2.LOG_PREFIX_SYNC_SPLITS + 'Proxy error recovered');
61
58
  lastProxyCheckTimestamp = undefined;
62
59
  return splitChangesFetcher(-1, undefined, undefined, -1)
63
60
  .then(function (splitChangesResponse) {
64
- return Promise.all([storage.definitions.clear(), storage.rbSegments.clear()])
61
+ return Promise.all([storage.splits.clear(), storage.rbSegments.clear()])
65
62
  .then(function () { return splitChangesResponse; });
66
63
  });
67
64
  }
68
- var ff = data.ff, rbs = data.rbs;
69
- return {
70
- d: (ff === null || ff === void 0 ? void 0 : ff.d) ? partitionByStatus(ff.d, ff.t, ff.s) : undefined,
71
- rbs: (rbs === null || rbs === void 0 ? void 0 : rbs.d) ? partitionByStatus(rbs.d, rbs.t, rbs.s) : undefined,
72
- };
65
+ return data;
73
66
  });
74
- }
75
- splitChangesFetcher.type = 'feature flags';
76
- return splitChangesFetcher;
67
+ };
77
68
  }
78
69
  exports.splitChangesFetcherFactory = splitChangesFetcherFactory;
@@ -3,19 +3,19 @@ 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 definitionsSyncTask_1 = require("./syncTasks/definitionsSyncTask");
6
+ var splitsSyncTask_1 = require("./syncTasks/splitsSyncTask");
7
7
  var key_1 = require("../../utils/key");
8
8
  var constants_1 = require("../../readiness/constants");
9
9
  var constants_2 = require("../../logger/constants");
10
- var AbstractDefinitionsCacheSync_1 = require("../../storages/AbstractDefinitionsCacheSync");
10
+ var AbstractSplitsCacheSync_1 = require("../../storages/AbstractSplitsCacheSync");
11
11
  /**
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, definitionChangesFetcher) {
16
- var serviceApi = params.serviceApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
15
+ function pollingManagerCSFactory(params) {
16
+ var splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
17
17
  var log = settings.log;
18
- var definitionsSyncTask = (0, definitionsSyncTask_1.definitionsSyncTaskFactory)(definitionChangesFetcher, storage, readiness, settings);
18
+ var splitsSyncTask = (0, splitsSyncTask_1.splitsSyncTaskFactory)(splitApi.fetchSplitChanges, 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);
@@ -32,10 +32,10 @@ function pollingManagerCSFactory(params, definitionChangesFetcher) {
32
32
  });
33
33
  }
34
34
  // smart pausing
35
- readiness.definitions.on(constants_1.SDK_DEFINITIONS_ARRIVED, function () {
36
- if (!definitionsSyncTask.isRunning())
35
+ readiness.splits.on(constants_1.SDK_SPLITS_ARRIVED, function () {
36
+ if (!splitsSyncTask.isRunning())
37
37
  return; // noop if not doing polling
38
- var usingSegments = (0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage);
38
+ var usingSegments = (0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage);
39
39
  if (usingSegments !== mySegmentsSyncTask.isRunning()) {
40
40
  log.info(constants_2.POLLING_SMART_PAUSING, [usingSegments ? 'ON' : 'OFF']);
41
41
  if (usingSegments) {
@@ -47,41 +47,41 @@ function pollingManagerCSFactory(params, definitionChangesFetcher) {
47
47
  }
48
48
  });
49
49
  function add(matchingKey, readiness, storage) {
50
- var mySegmentsSyncTask = (0, mySegmentsSyncTask_1.mySegmentsSyncTaskFactory)(serviceApi.fetchMemberships, storage, readiness, settings, matchingKey);
50
+ var mySegmentsSyncTask = (0, mySegmentsSyncTask_1.mySegmentsSyncTaskFactory)(splitApi.fetchMemberships, storage, readiness, settings, matchingKey);
51
51
  // smart ready
52
52
  function smartReady(metadata) {
53
- if (!readiness.isReady() && !(0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage))
53
+ if (!readiness.isReady() && !(0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage))
54
54
  readiness.segments.emit(constants_1.SDK_SEGMENTS_ARRIVED, metadata);
55
55
  }
56
- if (!(0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage))
56
+ if (!(0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage))
57
57
  setTimeout(smartReady, 0);
58
58
  else
59
- readiness.definitions.once(constants_1.SDK_DEFINITIONS_ARRIVED, smartReady);
59
+ readiness.splits.once(constants_1.SDK_SPLITS_ARRIVED, smartReady);
60
60
  mySegmentsSyncTasks[matchingKey] = mySegmentsSyncTask;
61
61
  return mySegmentsSyncTask;
62
62
  }
63
63
  return {
64
- definitionsSyncTask: definitionsSyncTask,
64
+ splitsSyncTask: splitsSyncTask,
65
65
  segmentsSyncTask: mySegmentsSyncTask,
66
66
  // Start periodic fetching (polling)
67
67
  start: function () {
68
68
  log.info(constants_2.POLLING_START);
69
- definitionsSyncTask.start();
70
- if ((0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage))
69
+ splitsSyncTask.start();
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 (definitionsSyncTask.isRunning())
77
- definitionsSyncTask.stop();
76
+ if (splitsSyncTask.isRunning())
77
+ splitsSyncTask.stop();
78
78
  stopMySegmentsSyncTasks();
79
79
  },
80
80
  // Used by SyncManager to know if running in polling mode.
81
- isRunning: definitionsSyncTask.isRunning,
82
- // fetch definitions and segments
81
+ isRunning: splitsSyncTask.isRunning,
82
+ // fetch splits and segments
83
83
  syncAll: function () {
84
- var promises = [definitionsSyncTask.execute()];
84
+ var promises = [splitsSyncTask.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 definitionsSyncTask_1 = require("./syncTasks/definitionsSyncTask");
4
+ var splitsSyncTask_1 = require("./syncTasks/splitsSyncTask");
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, definitionChangesFetcher, segmentChangesFetcher) {
11
- var storage = params.storage, readiness = params.readiness, settings = params.settings;
10
+ function pollingManagerSSFactory(params) {
11
+ var splitApi = params.splitApi, storage = params.storage, readiness = params.readiness, settings = params.settings;
12
12
  var log = settings.log;
13
- var segmentsSyncTask = (0, segmentsSyncTask_1.segmentsSyncTaskFactory)(segmentChangesFetcher, storage, readiness, settings);
14
- var definitionsSyncTask = (0, definitionsSyncTask_1.definitionsSyncTaskFactory)(definitionChangesFetcher, storage, readiness, settings, segmentsSyncTask);
13
+ var splitsSyncTask = (0, splitsSyncTask_1.splitsSyncTaskFactory)(splitApi.fetchSplitChanges, storage, readiness, settings);
14
+ var segmentsSyncTask = (0, segmentsSyncTask_1.segmentsSyncTaskFactory)(splitApi.fetchSegmentChanges, storage, readiness, settings);
15
15
  return {
16
- definitionsSyncTask: definitionsSyncTask,
16
+ splitsSyncTask: splitsSyncTask,
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 + "".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();
21
+ log.debug(constants_1.LOG_PREFIX_SYNC_POLLING + "Splits 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 = splitsSyncTask.start();
24
24
  if (startingUp) {
25
25
  startingUp.then(function () {
26
- if (definitionsSyncTask.isRunning())
26
+ if (splitsSyncTask.isRunning())
27
27
  segmentsSyncTask.start();
28
28
  });
29
29
  }
@@ -31,16 +31,16 @@ function pollingManagerSSFactory(params, definitionChangesFetcher, segmentChange
31
31
  // Stop periodic fetching (polling)
32
32
  stop: function () {
33
33
  log.info(constants_1.POLLING_STOP);
34
- if (definitionsSyncTask.isRunning())
35
- definitionsSyncTask.stop();
34
+ if (splitsSyncTask.isRunning())
35
+ splitsSyncTask.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: definitionsSyncTask.isRunning,
40
+ isRunning: splitsSyncTask.isRunning,
41
41
  syncAll: 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 () {
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 () {
44
44
  return segmentsSyncTask.execute();
45
45
  });
46
46
  }
@@ -2,11 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.segmentsSyncTaskFactory = void 0;
4
4
  var syncTask_1 = require("../../syncTask");
5
+ var segmentChangesFetcher_1 = require("../fetchers/segmentChangesFetcher");
5
6
  var segmentChangesUpdater_1 = require("../updaters/segmentChangesUpdater");
6
7
  /**
7
8
  * Creates a sync task that periodically executes a `segmentChangesUpdater` task
8
9
  */
9
- function segmentsSyncTaskFactory(segmentChangesFetcher, storage, readiness, settings) {
10
- return (0, syncTask_1.syncTaskFactory)(settings.log, (0, segmentChangesUpdater_1.segmentChangesUpdaterFactory)(settings.log, segmentChangesFetcher, storage.segments, readiness, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.segmentsRefreshRate, 'segmentChangesUpdater');
10
+ function segmentsSyncTaskFactory(fetchSegmentChanges, storage, readiness, settings) {
11
+ return (0, syncTask_1.syncTaskFactory)(settings.log, (0, segmentChangesUpdater_1.segmentChangesUpdaterFactory)(settings.log, (0, segmentChangesFetcher_1.segmentChangesFetcherFactory)(fetchSegmentChanges), storage.segments, readiness, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady), settings.scheduler.segmentsRefreshRate, 'segmentChangesUpdater');
11
12
  }
12
13
  exports.segmentsSyncTaskFactory = segmentsSyncTaskFactory;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.splitsSyncTaskFactory = void 0;
4
+ var syncTask_1 = require("../../syncTask");
5
+ var splitChangesFetcher_1 = require("../fetchers/splitChangesFetcher");
6
+ var splitChangesUpdater_1 = require("../updaters/splitChangesUpdater");
7
+ /**
8
+ * Creates a sync task that periodically executes a `splitChangesUpdater` task
9
+ */
10
+ function splitsSyncTaskFactory(fetchSplitChanges, storage, readiness, settings, isClientSide) {
11
+ return (0, syncTask_1.syncTaskFactory)(settings.log, (0, splitChangesUpdater_1.splitChangesUpdaterFactory)(settings.log, (0, splitChangesFetcher_1.splitChangesFetcherFactory)(fetchSplitChanges, settings, storage), storage, settings.sync.__splitFiltersValidation, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, isClientSide), settings.scheduler.featuresRefreshRate, 'splitChangesUpdater');
12
+ }
13
+ exports.splitsSyncTaskFactory = splitsSyncTaskFactory;
@@ -5,7 +5,7 @@ var timeout_1 = require("../../../utils/promise/timeout");
5
5
  var constants_1 = require("../../../readiness/constants");
6
6
  var constants_2 = require("../../../logger/constants");
7
7
  var constants_3 = require("../../streaming/constants");
8
- var AbstractDefinitionsCacheSync_1 = require("../../../storages/AbstractDefinitionsCacheSync");
8
+ var AbstractSplitsCacheSync_1 = require("../../../storages/AbstractSplitsCacheSync");
9
9
  /**
10
10
  * factory of MySegments updater, a task that:
11
11
  * - fetches mySegments using `mySegmentsFetcher`
@@ -37,7 +37,7 @@ function mySegmentsUpdaterFactory(log, mySegmentsFetcher, storage, segmentsEvent
37
37
  if (storage.save)
38
38
  storage.save();
39
39
  // Notify update if required
40
- if ((0, AbstractDefinitionsCacheSync_1.usesSegmentsSync)(storage) && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
40
+ if ((0, AbstractSplitsCacheSync_1.usesSegmentsSync)(storage) && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
41
41
  readyOnAlreadyExistentState = false;
42
42
  segmentsEventEmitter.emit(constants_1.SDK_SEGMENTS_ARRIVED, { type: constants_1.SEGMENTS_UPDATE, names: [] });
43
43
  }
@@ -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_FETCH_RETRY, ['memberships', retry, error]);
59
+ log.warn(constants_2.SYNC_MYSEGMENTS_FETCH_RETRY, [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("".concat(constants_2.LOG_PREFIX_SYNC, "Processing segment ").concat(segmentName));
26
+ log.debug("".concat(constants_2.LOG_PREFIX_SYNC_SEGMENTS, "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("".concat(constants_2.LOG_PREFIX_SYNC, "Processing ").concat(segmentName, " with till = ").concat(x.till, ". Added: ").concat(x.added.length, ". Removed: ").concat(x.removed.length));
34
+ log.debug("".concat(constants_2.LOG_PREFIX_SYNC_SEGMENTS, "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("".concat(constants_2.LOG_PREFIX_SYNC, "Retrying fetch of segment ").concat(segmentName, " (attempt #").concat(retries, "). Reason: ").concat(error));
41
+ log.warn("".concat(constants_2.LOG_PREFIX_SYNC_SEGMENTS, "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("".concat(constants_2.LOG_PREFIX_SYNC, "Started segments update"));
60
+ log.debug("".concat(constants_2.LOG_PREFIX_SYNC_SEGMENTS, "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) {
@@ -66,7 +66,7 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
66
66
  // if at least one segment fetch succeeded, mark segments ready
67
67
  if (shouldUpdateFlags.some(function (update) { return update; }) || readyOnAlreadyExistentState) {
68
68
  readyOnAlreadyExistentState = false;
69
- if (readiness && !fetchOnlyNew) {
69
+ if (readiness) {
70
70
  var metadata = {
71
71
  type: constants_1.SEGMENTS_UPDATE,
72
72
  names: []
@@ -87,7 +87,7 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
87
87
  log.error("".concat(constants_2.LOG_PREFIX_INSTANTIATION, ": you passed a client-side type authorizationKey, please grab an SDK Key from Harness FME UI that is of type server-side."));
88
88
  }
89
89
  else {
90
- log.warn("".concat(constants_2.LOG_PREFIX_SYNC, "Error while doing fetch of segments. ").concat(error));
90
+ log.warn("".concat(constants_2.LOG_PREFIX_SYNC_SEGMENTS, "Error while doing fetch of segments. ").concat(error));
91
91
  }
92
92
  return false;
93
93
  });