@splitsoftware/splitio-commons 0.1.1-canary.9 → 0.1.1-rc.18

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 (254) hide show
  1. package/cjs/evaluator/matchers/matcherTypes.js +4 -4
  2. package/cjs/evaluator/matchersTransform/index.js +11 -11
  3. package/cjs/evaluator/value/sanitize.js +6 -6
  4. package/cjs/listeners/browser.js +1 -2
  5. package/cjs/listeners/node.js +0 -3
  6. package/cjs/logger/constants.js +3 -1
  7. package/cjs/logger/messages/error.js +3 -2
  8. package/cjs/logger/messages/info.js +2 -2
  9. package/cjs/logger/messages/warn.js +2 -1
  10. package/cjs/readiness/readinessManager.js +10 -7
  11. package/cjs/sdkFactory/index.js +1 -4
  12. package/cjs/services/splitApi.js +1 -1
  13. package/cjs/services/splitHttpClient.js +5 -4
  14. package/cjs/storages/AbstractSplitsCacheSync.js +1 -1
  15. package/cjs/storages/inLocalStorage/index.js +5 -2
  16. package/cjs/storages/inMemory/InMemoryStorage.js +2 -0
  17. package/cjs/storages/inMemory/InMemoryStorageCS.js +2 -0
  18. package/cjs/storages/inRedis/SplitsCacheInRedis.js +6 -2
  19. package/cjs/storages/inRedis/index.js +5 -2
  20. package/cjs/storages/pluggable/SplitsCachePluggable.js +6 -2
  21. package/cjs/storages/pluggable/inMemoryWrapper.js +6 -7
  22. package/cjs/storages/pluggable/index.js +5 -2
  23. package/cjs/storages/pluggable/wrapperAdapter.js +0 -1
  24. package/cjs/sync/offline/splitsParser/splitsParserFromFile.js +92 -89
  25. package/cjs/sync/offline/splitsParser/splitsParserFromSettings.js +45 -42
  26. package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +14 -4
  27. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +30 -10
  28. package/cjs/sync/streaming/SSEClient/index.js +0 -11
  29. package/cjs/sync/streaming/SSEHandler/NotificationKeeper.js +7 -0
  30. package/cjs/sync/streaming/SSEHandler/NotificationParser.js +4 -1
  31. package/cjs/sync/streaming/SSEHandler/index.js +8 -9
  32. package/cjs/sync/streaming/SSEHandler/types.js +14 -0
  33. package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +5 -5
  34. package/cjs/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +2 -1
  35. package/cjs/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +5 -3
  36. package/cjs/sync/streaming/constants.js +3 -1
  37. package/cjs/sync/streaming/mySegmentsV2utils.js +75 -0
  38. package/cjs/sync/streaming/pushManager.js +141 -40
  39. package/cjs/sync/submitters/metricsSyncTask.js +1 -1
  40. package/cjs/sync/submitters/submitterSyncTask.js +2 -2
  41. package/cjs/sync/syncManagerFromFile.js +15 -0
  42. package/cjs/sync/syncManagerFromObject.js +14 -0
  43. package/cjs/sync/syncManagerOffline.js +3 -3
  44. package/cjs/sync/syncManagerOnline.js +5 -3
  45. package/cjs/trackers/impressionObserver/ImpressionObserver.js +0 -2
  46. package/cjs/trackers/impressionObserver/buildKey.js +3 -9
  47. package/cjs/trackers/impressionObserver/impressionObserverCS.js +2 -2
  48. package/cjs/trackers/impressionObserver/impressionObserverSS.js +3 -3
  49. package/cjs/utils/constants/index.js +4 -1
  50. package/cjs/utils/decompress/index.js +427 -0
  51. package/cjs/utils/murmur3/{commons.js → common.js} +2 -6
  52. package/cjs/utils/murmur3/murmur3.js +11 -12
  53. package/cjs/utils/murmur3/murmur3_128.js +7 -142
  54. package/cjs/utils/murmur3/murmur3_128_x86.js +154 -0
  55. package/cjs/utils/murmur3/murmur3_64.js +36 -0
  56. package/cjs/utils/murmur3/utfx.js +100 -106
  57. package/cjs/utils/promise/wrapper.js +14 -11
  58. package/cjs/utils/settingsValidation/index.js +5 -2
  59. package/cjs/utils/settingsValidation/localhost/index.js +20 -0
  60. package/cjs/utils/settingsValidation/splitFilters.js +0 -1
  61. package/cjs/utils/settingsValidation/storage/storageCS.js +18 -8
  62. package/cjs/utils/settingsValidation/url.js +1 -1
  63. package/esm/evaluator/matchers/matcherTypes.js +2 -2
  64. package/esm/evaluator/matchersTransform/index.js +12 -12
  65. package/esm/evaluator/value/sanitize.js +7 -7
  66. package/esm/listeners/browser.js +1 -2
  67. package/esm/listeners/node.js +0 -3
  68. package/esm/logger/constants.js +2 -0
  69. package/esm/logger/messages/error.js +3 -2
  70. package/esm/logger/messages/info.js +2 -2
  71. package/esm/logger/messages/warn.js +2 -1
  72. package/esm/readiness/readinessManager.js +10 -7
  73. package/esm/sdkFactory/index.js +1 -4
  74. package/esm/services/splitApi.js +1 -1
  75. package/esm/services/splitHttpClient.js +5 -4
  76. package/esm/storages/AbstractSplitsCacheSync.js +1 -1
  77. package/esm/storages/inLocalStorage/index.js +5 -2
  78. package/esm/storages/inMemory/InMemoryStorage.js +2 -0
  79. package/esm/storages/inMemory/InMemoryStorageCS.js +2 -0
  80. package/esm/storages/inRedis/SplitsCacheInRedis.js +6 -2
  81. package/esm/storages/inRedis/index.js +5 -2
  82. package/esm/storages/pluggable/SplitsCachePluggable.js +6 -2
  83. package/esm/storages/pluggable/inMemoryWrapper.js +6 -7
  84. package/esm/storages/pluggable/index.js +5 -2
  85. package/esm/storages/pluggable/wrapperAdapter.js +0 -1
  86. package/esm/sync/offline/splitsParser/splitsParserFromFile.js +90 -88
  87. package/esm/sync/offline/splitsParser/splitsParserFromSettings.js +43 -41
  88. package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +15 -5
  89. package/esm/sync/polling/updaters/mySegmentsUpdater.js +30 -10
  90. package/esm/sync/streaming/SSEClient/index.js +0 -11
  91. package/esm/sync/streaming/SSEHandler/NotificationKeeper.js +7 -0
  92. package/esm/sync/streaming/SSEHandler/NotificationParser.js +4 -1
  93. package/esm/sync/streaming/SSEHandler/index.js +9 -10
  94. package/esm/sync/streaming/SSEHandler/types.js +13 -1
  95. package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +5 -5
  96. package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +2 -1
  97. package/esm/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +5 -3
  98. package/esm/sync/streaming/constants.js +2 -0
  99. package/esm/sync/streaming/mySegmentsV2utils.js +69 -0
  100. package/esm/sync/streaming/pushManager.js +143 -42
  101. package/esm/sync/submitters/metricsSyncTask.js +1 -1
  102. package/esm/sync/submitters/submitterSyncTask.js +2 -2
  103. package/esm/sync/syncManagerFromFile.js +11 -0
  104. package/esm/sync/syncManagerFromObject.js +10 -0
  105. package/esm/sync/syncManagerOffline.js +3 -3
  106. package/esm/sync/syncManagerOnline.js +5 -3
  107. package/esm/trackers/impressionObserver/ImpressionObserver.js +0 -2
  108. package/esm/trackers/impressionObserver/buildKey.js +2 -9
  109. package/esm/trackers/impressionObserver/impressionObserverCS.js +2 -2
  110. package/esm/trackers/impressionObserver/impressionObserverSS.js +3 -3
  111. package/esm/utils/constants/index.js +3 -0
  112. package/esm/utils/decompress/index.js +424 -0
  113. package/esm/utils/murmur3/{commons.js → common.js} +1 -4
  114. package/esm/utils/murmur3/murmur3.js +1 -2
  115. package/esm/utils/murmur3/murmur3_128.js +7 -142
  116. package/esm/utils/murmur3/murmur3_128_x86.js +150 -0
  117. package/esm/utils/murmur3/murmur3_64.js +32 -0
  118. package/esm/utils/murmur3/utfx.js +96 -106
  119. package/esm/utils/promise/wrapper.js +14 -11
  120. package/esm/utils/settingsValidation/index.js +5 -2
  121. package/esm/utils/settingsValidation/localhost/index.js +16 -0
  122. package/esm/utils/settingsValidation/splitFilters.js +0 -1
  123. package/esm/utils/settingsValidation/storage/storageCS.js +16 -7
  124. package/esm/utils/settingsValidation/url.js +1 -1
  125. package/package.json +5 -5
  126. package/src/evaluator/matchers/matcherTypes.ts +2 -2
  127. package/src/evaluator/matchersTransform/index.ts +12 -12
  128. package/src/evaluator/value/sanitize.ts +7 -7
  129. package/src/listeners/browser.ts +1 -1
  130. package/src/listeners/node.ts +1 -2
  131. package/src/logger/constants.ts +2 -0
  132. package/src/logger/messages/error.ts +3 -2
  133. package/src/logger/messages/info.ts +2 -2
  134. package/src/logger/messages/warn.ts +3 -1
  135. package/src/readiness/readinessManager.ts +9 -7
  136. package/src/sdkFactory/index.ts +1 -3
  137. package/src/sdkFactory/types.ts +3 -3
  138. package/src/services/splitApi.ts +2 -3
  139. package/src/services/splitHttpClient.ts +6 -5
  140. package/src/services/types.ts +5 -5
  141. package/src/storages/AbstractSplitsCacheSync.ts +1 -1
  142. package/src/storages/inLocalStorage/index.ts +8 -4
  143. package/src/storages/inMemory/InMemoryStorage.ts +3 -0
  144. package/src/storages/inMemory/InMemoryStorageCS.ts +3 -0
  145. package/src/storages/inRedis/SplitsCacheInRedis.ts +3 -1
  146. package/src/storages/inRedis/index.ts +8 -4
  147. package/src/storages/pluggable/SplitsCachePluggable.ts +3 -1
  148. package/src/storages/pluggable/inMemoryWrapper.ts +6 -7
  149. package/src/storages/pluggable/index.ts +8 -4
  150. package/src/storages/pluggable/wrapperAdapter.ts +0 -1
  151. package/src/storages/types.ts +18 -15
  152. package/src/sync/offline/splitsParser/splitsParserFromFile.ts +110 -105
  153. package/src/sync/offline/splitsParser/splitsParserFromSettings.ts +45 -41
  154. package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +15 -5
  155. package/src/sync/polling/types.ts +2 -1
  156. package/src/sync/polling/updaters/mySegmentsUpdater.ts +28 -10
  157. package/src/sync/streaming/AuthClient/types.ts +3 -0
  158. package/src/sync/streaming/SSEClient/index.ts +1 -15
  159. package/src/sync/streaming/SSEClient/types.ts +0 -1
  160. package/src/sync/streaming/SSEHandler/NotificationKeeper.ts +8 -0
  161. package/src/sync/streaming/SSEHandler/NotificationParser.ts +4 -2
  162. package/src/sync/streaming/SSEHandler/index.ts +11 -20
  163. package/src/sync/streaming/SSEHandler/types.ts +37 -3
  164. package/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts +7 -6
  165. package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +2 -1
  166. package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +4 -3
  167. package/src/sync/streaming/UpdateWorkers/types.ts +1 -1
  168. package/src/sync/streaming/constants.ts +2 -0
  169. package/src/sync/streaming/mySegmentsV2utils.ts +77 -0
  170. package/src/sync/streaming/pushManager.ts +139 -42
  171. package/src/sync/streaming/types.ts +14 -22
  172. package/src/sync/submitters/metricsSyncTask.ts +1 -1
  173. package/src/sync/submitters/submitterSyncTask.ts +2 -1
  174. package/src/sync/syncManagerFromFile.ts +13 -0
  175. package/src/sync/syncManagerFromObject.ts +12 -0
  176. package/src/sync/syncManagerOffline.ts +3 -3
  177. package/src/sync/syncManagerOnline.ts +6 -3
  178. package/src/trackers/impressionObserver/ImpressionObserver.ts +4 -6
  179. package/src/trackers/impressionObserver/buildKey.ts +2 -16
  180. package/src/trackers/impressionObserver/impressionObserverCS.ts +2 -2
  181. package/src/trackers/impressionObserver/impressionObserverSS.ts +3 -3
  182. package/src/types.ts +16 -2
  183. package/src/utils/constants/index.ts +6 -1
  184. package/src/utils/decompress/index.ts +429 -0
  185. package/src/utils/murmur3/{commons.ts → common.ts} +1 -5
  186. package/src/utils/murmur3/murmur3.ts +5 -5
  187. package/src/utils/murmur3/murmur3_128.ts +7 -180
  188. package/src/utils/murmur3/murmur3_128_x86.ts +188 -0
  189. package/src/utils/murmur3/murmur3_64.ts +36 -0
  190. package/src/utils/murmur3/utfx.ts +92 -110
  191. package/src/utils/promise/wrapper.ts +12 -9
  192. package/src/utils/settingsValidation/index.ts +8 -4
  193. package/src/utils/settingsValidation/localhost/index.ts +19 -0
  194. package/src/utils/settingsValidation/splitFilters.ts +0 -1
  195. package/src/utils/settingsValidation/storage/storageCS.ts +21 -8
  196. package/src/utils/settingsValidation/types.ts +2 -11
  197. package/src/utils/settingsValidation/url.ts +1 -1
  198. package/types/evaluator/matchers/matcherTypes.d.ts +2 -2
  199. package/types/listeners/browser.d.ts +1 -0
  200. package/types/listeners/node.d.ts +0 -1
  201. package/types/logger/constants.d.ts +2 -0
  202. package/types/sdkFactory/types.d.ts +3 -3
  203. package/types/services/types.d.ts +1 -0
  204. package/types/storages/inLocalStorage/index.d.ts +2 -2
  205. package/types/storages/inMemory/InMemoryStorage.d.ts +3 -0
  206. package/types/storages/inMemory/InMemoryStorageCS.d.ts +3 -0
  207. package/types/storages/inRedis/index.d.ts +2 -2
  208. package/types/storages/pluggable/index.d.ts +2 -2
  209. package/types/storages/types.d.ts +15 -15
  210. package/types/sync/offline/splitsParser/splitsParserFromFile.d.ts +2 -7
  211. package/types/sync/offline/splitsParser/splitsParserFromSettings.d.ts +1 -5
  212. package/types/sync/polling/types.d.ts +2 -1
  213. package/types/sync/streaming/AuthClient/indexV1.d.ts +12 -0
  214. package/types/sync/streaming/AuthClient/indexV2.d.ts +8 -0
  215. package/types/sync/streaming/AuthClient/types.d.ts +2 -0
  216. package/types/sync/streaming/SSEClient/index.d.ts +1 -9
  217. package/types/sync/streaming/SSEClient/types.d.ts +0 -1
  218. package/types/sync/streaming/SSEHandler/NotificationParser.d.ts +3 -2
  219. package/types/sync/streaming/SSEHandler/types.d.ts +30 -2
  220. package/types/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.d.ts +4 -3
  221. package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +2 -1
  222. package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +3 -2
  223. package/types/sync/streaming/UpdateWorkers/types.d.ts +1 -1
  224. package/types/sync/streaming/constants.d.ts +3 -1
  225. package/types/sync/streaming/mySegmentsV2utils.d.ts +27 -0
  226. package/types/sync/streaming/pushManagerNoUsers.d.ts +13 -0
  227. package/types/sync/streaming/types.d.ts +9 -5
  228. package/types/sync/submitters/submitterSyncTask.d.ts +1 -1
  229. package/types/sync/syncManagerFromFile.d.ts +2 -0
  230. package/types/sync/syncManagerFromObject.d.ts +2 -0
  231. package/types/sync/syncManagerOffline.d.ts +1 -1
  232. package/types/trackers/impressionObserver/ImpressionObserver.d.ts +2 -2
  233. package/types/trackers/impressionObserver/buildKey.d.ts +1 -1
  234. package/types/trackers/impressionObserver/impressionObserverCS.d.ts +2 -2
  235. package/types/trackers/impressionObserver/impressionObserverSS.d.ts +2 -2
  236. package/types/types.d.ts +16 -2
  237. package/types/utils/constants/index.d.ts +5 -1
  238. package/types/utils/decompress/index.d.ts +16 -0
  239. package/types/utils/murmur3/common.d.ts +12 -0
  240. package/types/utils/murmur3/murmur3.d.ts +2 -2
  241. package/types/utils/murmur3/murmur3_128.d.ts +5 -0
  242. package/types/utils/murmur3/murmur3_128_x86.d.ts +7 -0
  243. package/types/utils/murmur3/murmur3_64.d.ts +10 -0
  244. package/types/utils/murmur3/utfx.d.ts +24 -6
  245. package/types/utils/settingsValidation/index.d.ts +3 -2
  246. package/types/utils/settingsValidation/localhost/index.d.ts +9 -0
  247. package/types/utils/settingsValidation/storage/storageCS.d.ts +7 -1
  248. package/types/utils/settingsValidation/types.d.ts +2 -10
  249. package/cjs/sync/streaming/pushManagerCS.js +0 -179
  250. package/cjs/sync/streaming/pushManagerSS.js +0 -128
  251. package/esm/sync/streaming/pushManagerCS.js +0 -175
  252. package/esm/sync/streaming/pushManagerSS.js +0 -124
  253. package/src/sync/streaming/pushManagerCS.ts +0 -238
  254. package/src/sync/streaming/pushManagerSS.ts +0 -177
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.splitsParserFromFileFactory = void 0;
3
4
  var tslib_1 = require("tslib");
4
5
  /* eslint-disable no-undef */
5
6
  // @TODO consider moving it to Node-SDK and remove js-yaml dependency from Js-commons
@@ -11,7 +12,6 @@ var lang_1 = require("../../../utils/lang");
11
12
  var parseCondition_1 = tslib_1.__importDefault(require("./parseCondition"));
12
13
  var logPrefix = 'sync:offline:splits-fetcher: ';
13
14
  var DEFAULT_FILENAME = '.split';
14
- var previousMock = 'NO_MOCK_LOADED';
15
15
  function configFilesPath(configFilePath) {
16
16
  if (configFilePath === DEFAULT_FILENAME || !lang_1.isString(configFilePath)) {
17
17
  var root = process.env.HOME;
@@ -28,81 +28,6 @@ function configFilesPath(configFilePath) {
28
28
  throw new Error("Split configuration not found in " + configFilePath + " - Please review your Split file location.");
29
29
  return configFilePath;
30
30
  }
31
- // Parse `.split` configuration file and return a map of "Split Objects"
32
- function readSplitConfigFile(log, filePath) {
33
- var SPLIT_POSITION = 0;
34
- var TREATMENT_POSITION = 1;
35
- var data;
36
- try {
37
- data = fs_1.default.readFileSync(filePath, 'utf-8');
38
- }
39
- catch (e) {
40
- log.error(e.message);
41
- return {};
42
- }
43
- if (data === previousMock)
44
- return false;
45
- previousMock = data;
46
- var splitObjects = data.split(/\r?\n/).reduce(function (accum, line, index) {
47
- var tuple = line.trim();
48
- if (tuple === '' || tuple.charAt(0) === '#') {
49
- log.debug(logPrefix + ("Ignoring empty line or comment at #" + index));
50
- }
51
- else {
52
- tuple = tuple.split(/\s+/);
53
- if (tuple.length !== 2) {
54
- log.debug(logPrefix + ("Ignoring line since it does not have exactly two columns #" + index));
55
- }
56
- else {
57
- var splitName = tuple[SPLIT_POSITION];
58
- var condition = parseCondition_1.default({ treatment: tuple[TREATMENT_POSITION] });
59
- accum[splitName] = { conditions: [condition], configurations: {}, trafficTypeName: 'localhost' };
60
- }
61
- }
62
- return accum;
63
- }, {});
64
- return splitObjects;
65
- }
66
- // Parse `.yml` or `.yaml` configuration files and return a map of "Split Objects"
67
- function readYAMLConfigFile(log, filePath) {
68
- var data = '';
69
- var yamldoc = null;
70
- try {
71
- data = fs_1.default.readFileSync(filePath, 'utf8');
72
- if (data === previousMock)
73
- return false;
74
- previousMock = data;
75
- yamldoc = js_yaml_1.default.safeLoad(data);
76
- }
77
- catch (e) {
78
- log.error(e);
79
- return {};
80
- }
81
- // Each entry will be mapped to a condition, but we'll also keep the configurations map.
82
- var mocksData = yamldoc.reduce(function (accum, splitEntry) {
83
- var splitName = Object.keys(splitEntry)[0];
84
- if (!splitName || !lang_1.isString(splitEntry[splitName].treatment))
85
- log.error(logPrefix + 'Ignoring entry on YAML since the format is incorrect.');
86
- var mockData = splitEntry[splitName];
87
- // "Template" for each split accumulated data
88
- if (!accum[splitName]) {
89
- accum[splitName] = {
90
- configurations: {}, conditions: [], treatments: [], trafficTypeName: 'localhost'
91
- };
92
- }
93
- // Assign the config if there is one on the mock
94
- if (mockData.config)
95
- accum[splitName].configurations[mockData.treatment] = mockData.config;
96
- // Parse the condition from the entry.
97
- var condition = parseCondition_1.default(mockData);
98
- accum[splitName].conditions[condition.conditionType === 'ROLLOUT' ? 'push' : 'unshift'](condition);
99
- // Also keep track of the treatments, will be useful for manager functionality.
100
- accum[splitName].treatments.push(mockData.treatment);
101
- return accum;
102
- }, {});
103
- arrangeConditions(mocksData);
104
- return mocksData;
105
- }
106
31
  // This function is not pure nor meant to be. Here we apply modifications to cover
107
32
  // for behaviour that's ensured by the BE.
108
33
  function arrangeConditions(mocksData) {
@@ -130,19 +55,97 @@ function arrangeConditions(mocksData) {
130
55
  delete data.treatments;
131
56
  });
132
57
  }
133
- // Load the content of a configuration file into an Object
134
- function splitsParserFromFile(_a) {
135
- var features = _a.features, log = _a.log;
136
- var filePath = configFilesPath(features);
137
- var mockData;
138
- // If we have a filePath, it means the extension is correct, choose the parser.
139
- if (lang_1.endsWith(filePath, '.split')) {
140
- log.warn(logPrefix + '.split mocks will be deprecated soon in favor of YAML files, which provide more targeting power. Take a look in our documentation.');
141
- mockData = readSplitConfigFile(log, filePath);
58
+ function splitsParserFromFileFactory() {
59
+ var previousMock = 'NO_MOCK_LOADED';
60
+ // Parse `.split` configuration file and return a map of "Split Objects"
61
+ function readSplitConfigFile(log, filePath) {
62
+ var SPLIT_POSITION = 0;
63
+ var TREATMENT_POSITION = 1;
64
+ var data;
65
+ try {
66
+ data = fs_1.default.readFileSync(filePath, 'utf-8');
67
+ }
68
+ catch (e) {
69
+ log.error(e.message);
70
+ return {};
71
+ }
72
+ if (data === previousMock)
73
+ return false;
74
+ previousMock = data;
75
+ var splitObjects = data.split(/\r?\n/).reduce(function (accum, line, index) {
76
+ var tuple = line.trim();
77
+ if (tuple === '' || tuple.charAt(0) === '#') {
78
+ log.debug(logPrefix + ("Ignoring empty line or comment at #" + index));
79
+ }
80
+ else {
81
+ tuple = tuple.split(/\s+/);
82
+ if (tuple.length !== 2) {
83
+ log.debug(logPrefix + ("Ignoring line since it does not have exactly two columns #" + index));
84
+ }
85
+ else {
86
+ var splitName = tuple[SPLIT_POSITION];
87
+ var condition = parseCondition_1.default({ treatment: tuple[TREATMENT_POSITION] });
88
+ accum[splitName] = { conditions: [condition], configurations: {}, trafficTypeName: 'localhost' };
89
+ }
90
+ }
91
+ return accum;
92
+ }, {});
93
+ return splitObjects;
142
94
  }
143
- else {
144
- mockData = readYAMLConfigFile(log, filePath);
95
+ // Parse `.yml` or `.yaml` configuration files and return a map of "Split Objects"
96
+ function readYAMLConfigFile(log, filePath) {
97
+ var data = '';
98
+ var yamldoc = null;
99
+ try {
100
+ data = fs_1.default.readFileSync(filePath, 'utf8');
101
+ if (data === previousMock)
102
+ return false;
103
+ previousMock = data;
104
+ yamldoc = js_yaml_1.default.safeLoad(data);
105
+ }
106
+ catch (e) {
107
+ log.error(e);
108
+ return {};
109
+ }
110
+ // Each entry will be mapped to a condition, but we'll also keep the configurations map.
111
+ var mocksData = yamldoc.reduce(function (accum, splitEntry) {
112
+ var splitName = Object.keys(splitEntry)[0];
113
+ if (!splitName || !lang_1.isString(splitEntry[splitName].treatment))
114
+ log.error(logPrefix + 'Ignoring entry on YAML since the format is incorrect.');
115
+ var mockData = splitEntry[splitName];
116
+ // "Template" for each split accumulated data
117
+ if (!accum[splitName]) {
118
+ accum[splitName] = {
119
+ configurations: {}, conditions: [], treatments: [], trafficTypeName: 'localhost'
120
+ };
121
+ }
122
+ // Assign the config if there is one on the mock
123
+ if (mockData.config)
124
+ accum[splitName].configurations[mockData.treatment] = mockData.config;
125
+ // Parse the condition from the entry.
126
+ var condition = parseCondition_1.default(mockData);
127
+ accum[splitName].conditions[condition.conditionType === 'ROLLOUT' ? 'push' : 'unshift'](condition);
128
+ // Also keep track of the treatments, will be useful for manager functionality.
129
+ accum[splitName].treatments.push(mockData.treatment);
130
+ return accum;
131
+ }, {});
132
+ arrangeConditions(mocksData);
133
+ return mocksData;
145
134
  }
146
- return mockData;
135
+ // Load the content of a configuration file into an Object
136
+ return function splitsParserFromFile(_a) {
137
+ var features = _a.features, log = _a.log;
138
+ var filePath = configFilesPath(features);
139
+ var mockData;
140
+ // If we have a filePath, it means the extension is correct, choose the parser.
141
+ if (lang_1.endsWith(filePath, '.split')) {
142
+ log.warn(logPrefix + '.split mocks will be deprecated soon in favor of YAML files, which provide more targeting power. Take a look in our documentation.');
143
+ mockData = readSplitConfigFile(log, filePath);
144
+ }
145
+ else {
146
+ mockData = readYAMLConfigFile(log, filePath);
147
+ }
148
+ return mockData;
149
+ };
147
150
  }
148
- exports.default = splitsParserFromFile;
151
+ exports.splitsParserFromFileFactory = splitsParserFromFileFactory;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.splitsParserFromSettingsFactory = void 0;
3
4
  var tslib_1 = require("tslib");
4
5
  var lang_1 = require("../../../utils/lang");
5
6
  var parseCondition_1 = tslib_1.__importDefault(require("./parseCondition"));
6
- var previousMock = { 'emptyMock': '1' };
7
7
  function hasTreatmentChanged(prev, curr) {
8
8
  if (typeof prev !== typeof curr)
9
9
  return true;
@@ -14,47 +14,50 @@ function hasTreatmentChanged(prev, curr) {
14
14
  return prev.treatment !== curr.treatment || prev.config !== curr.config;
15
15
  }
16
16
  }
17
- function mockUpdated(currentData) {
18
- var names = Object.keys(currentData);
19
- // Different amount of items
20
- if (names.length !== Object.keys(previousMock).length) {
21
- previousMock = currentData;
22
- return true;
23
- }
24
- return names.some(function (name) {
25
- var newSplit = !previousMock[name];
26
- var newTreatment = hasTreatmentChanged(previousMock[name], currentData[name]);
27
- var changed = newSplit || newTreatment;
28
- if (changed)
17
+ function splitsParserFromSettingsFactory() {
18
+ var previousMock = { 'emptyMock': '1' };
19
+ function mockUpdated(currentData) {
20
+ var names = Object.keys(currentData);
21
+ // Different amount of items
22
+ if (names.length !== Object.keys(previousMock).length) {
29
23
  previousMock = currentData;
30
- return changed;
31
- });
32
- }
33
- /**
34
- *
35
- * @param features validated object with mocked features mapping.
36
- */
37
- function splitsParserFromSettings(settings) {
38
- var features = settings.features || {};
39
- if (!mockUpdated(features))
40
- return false;
41
- var splitObjects = {};
42
- lang_1.forOwn(features, function (data, splitName) {
43
- var treatment = data;
44
- var config = null;
45
- if (lang_1.isObject(data)) {
46
- treatment = data.treatment;
47
- config = data.config || config;
24
+ return true;
48
25
  }
49
- var configurations = {};
50
- if (config !== null)
51
- configurations[treatment] = config;
52
- splitObjects[splitName] = {
53
- trafficTypeName: 'localhost',
54
- conditions: [parseCondition_1.default({ treatment: treatment })],
55
- configurations: configurations
56
- };
57
- });
58
- return splitObjects;
26
+ return names.some(function (name) {
27
+ var newSplit = !previousMock[name];
28
+ var newTreatment = hasTreatmentChanged(previousMock[name], currentData[name]);
29
+ var changed = newSplit || newTreatment;
30
+ if (changed)
31
+ previousMock = currentData;
32
+ return changed;
33
+ });
34
+ }
35
+ /**
36
+ *
37
+ * @param settings validated object with mocked features mapping.
38
+ */
39
+ return function splitsParserFromSettings(settings) {
40
+ var features = settings.features || {};
41
+ if (!mockUpdated(features))
42
+ return false;
43
+ var splitObjects = {};
44
+ lang_1.forOwn(features, function (data, splitName) {
45
+ var treatment = data;
46
+ var config = null;
47
+ if (lang_1.isObject(data)) {
48
+ treatment = data.treatment;
49
+ config = data.config || config;
50
+ }
51
+ var configurations = {};
52
+ if (config !== null)
53
+ configurations[treatment] = config;
54
+ splitObjects[splitName] = {
55
+ trafficTypeName: 'localhost',
56
+ conditions: [parseCondition_1.default({ treatment: treatment })],
57
+ configurations: configurations
58
+ };
59
+ });
60
+ return splitObjects;
61
+ };
59
62
  }
60
- exports.default = splitsParserFromSettings;
63
+ exports.splitsParserFromSettingsFactory = splitsParserFromSettingsFactory;
@@ -11,7 +11,8 @@ var constants_3 = require("../../../logger/constants");
11
11
  * Offline equivalent of `splitChangesUpdaterFactory`
12
12
  */
13
13
  function fromObjectUpdaterFactory(splitsParser, storage, readiness, settings) {
14
- var log = settings.log;
14
+ var log = settings.log, splitsCache = storage.splits;
15
+ var startingUp = true;
15
16
  return function objectUpdater() {
16
17
  var splits = [];
17
18
  var loadError = null;
@@ -41,11 +42,20 @@ function fromObjectUpdaterFactory(splitsParser, storage, readiness, settings) {
41
42
  ]);
42
43
  });
43
44
  return Promise.all([
44
- storage.splits.clear(),
45
- storage.splits.addSplits(splits)
45
+ splitsCache.clear(),
46
+ splitsCache.addSplits(splits)
46
47
  ]).then(function () {
47
48
  readiness.splits.emit(constants_2.SDK_SPLITS_ARRIVED);
48
- readiness.segments.emit(constants_2.SDK_SEGMENTS_ARRIVED);
49
+ if (startingUp) {
50
+ startingUp = false;
51
+ Promise.resolve(splitsCache.checkCache()).then(function (cacheReady) {
52
+ // Emits SDK_READY_FROM_CACHE
53
+ if (cacheReady)
54
+ readiness.splits.emit(constants_2.SDK_SPLITS_CACHE_LOADED);
55
+ // Emits SDK_READY
56
+ readiness.segments.emit(constants_2.SDK_SEGMENTS_ARRIVED);
57
+ });
58
+ }
49
59
  return true;
50
60
  });
51
61
  }
@@ -24,19 +24,36 @@ function mySegmentsUpdaterFactory(log, mySegmentsFetcher, splitsCache, mySegment
24
24
  // mySegmentsPromise = tracker.start(tracker.TaskNames.MY_SEGMENTS_FETCH, startingUp ? metricCollectors : false, mySegmentsPromise);
25
25
  }
26
26
  // @TODO if allowing custom storages, handle async execution
27
- function updateSegments(segments) {
28
- // Update the list of segment names available
29
- var shouldNotifyUpdate = mySegmentsCache.resetSegments(segments);
27
+ function updateSegments(segmentsData) {
28
+ var shouldNotifyUpdate;
29
+ if (Array.isArray(segmentsData)) {
30
+ // Update the list of segment names available
31
+ shouldNotifyUpdate = mySegmentsCache.resetSegments(segmentsData);
32
+ }
33
+ else {
34
+ // Add/Delete the segment
35
+ var name_1 = segmentsData.name, add = segmentsData.add;
36
+ if (mySegmentsCache.isInSegment(name_1) !== add) {
37
+ shouldNotifyUpdate = true;
38
+ if (add)
39
+ mySegmentsCache.addToSegment(name_1);
40
+ else
41
+ mySegmentsCache.removeFromSegment(name_1);
42
+ }
43
+ else {
44
+ shouldNotifyUpdate = false;
45
+ }
46
+ }
30
47
  // Notify update if required
31
48
  if (splitsCache.usesSegments() && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
32
49
  readyOnAlreadyExistentState = false;
33
50
  segmentsEventEmitter.emit(constants_1.SDK_SEGMENTS_ARRIVED);
34
51
  }
35
52
  }
36
- function _mySegmentsUpdater(retry, segmentList, noCache) {
37
- var updaterPromise = segmentList ?
38
- // If segmentList is provided, there is no need to fetch mySegments
39
- new Promise(function (res) { updateSegments(segmentList); res(true); }) :
53
+ function _mySegmentsUpdater(retry, segmentsData, noCache) {
54
+ var updaterPromise = segmentsData ?
55
+ // If segmentsData is provided, there is no need to fetch mySegments
56
+ new Promise(function (res) { updateSegments(segmentsData); res(true); }) :
40
57
  // If not provided, fetch mySegments
41
58
  mySegmentsFetcher(noCache, _promiseDecorator).then(function (segments) {
42
59
  // Only when we have downloaded segments completely, we should not keep retrying anymore
@@ -60,11 +77,14 @@ function mySegmentsUpdaterFactory(log, mySegmentsFetcher, splitsCache, mySegment
60
77
  * MySegments updater returns a promise that resolves with a `false` boolean value if it fails to fetch mySegments or synchronize them with the storage.
61
78
  * Returned promise will not be rejected.
62
79
  *
63
- * @param {string[] | undefined} segmentList list of mySegments names to sync in the storage. If the list is `undefined`, it fetches them before syncing in the storage.
80
+ * @param {SegmentsData | undefined} segmentsData it can be:
81
+ * (1) the list of mySegments names to sync in the storage,
82
+ * (2) an object with a segment name and action (true: add, or false: delete) to update the storage,
83
+ * (3) or `undefined`, for which the updater will fetch mySegments in order to sync the storage.
64
84
  * @param {boolean | undefined} noCache true to revalidate data to fetch
65
85
  */
66
- return function mySegmentsUpdater(segmentList, noCache) {
67
- return _mySegmentsUpdater(0, segmentList, noCache);
86
+ return function mySegmentsUpdater(segmentsData, noCache) {
87
+ return _mySegmentsUpdater(0, segmentsData, noCache);
68
88
  };
69
89
  }
70
90
  exports.mySegmentsUpdaterFactory = mySegmentsUpdaterFactory;
@@ -40,7 +40,6 @@ var SSEClient = /** @class */ (function () {
40
40
  if (!this.eventSource)
41
41
  throw new Error('EventSource API is not available. ');
42
42
  this.streamingUrl = settings.urls.streaming + '/sse';
43
- this.reopen = this.reopen.bind(this);
44
43
  // @TODO get `useHeaders` flag from `getEventSource`, to use EventSource headers on client-side SDKs when possible.
45
44
  this.useHeaders = useHeaders;
46
45
  this.headers = buildSSEHeaders(settings);
@@ -56,7 +55,6 @@ var SSEClient = /** @class */ (function () {
56
55
  */
57
56
  SSEClient.prototype.open = function (authToken) {
58
57
  this.close(); // it closes connection if previously opened
59
- this.authToken = authToken;
60
58
  var channelsQueryParam = Object.keys(authToken.channels).map(function (channel) {
61
59
  var params = CONTROL_CHANNEL_REGEX.test(channel) ? '[?occupancy=metrics.publishers]' : '';
62
60
  return encodeURIComponent(params + channel);
@@ -79,15 +77,6 @@ var SSEClient = /** @class */ (function () {
79
77
  if (this.connection)
80
78
  this.connection.close();
81
79
  };
82
- /**
83
- * Re-open the connection with the last given authToken.
84
- *
85
- * @throws {TypeError} if `open` has not been previously called with an authToken
86
- * @TODO this method is not used currently and could be removed.
87
- */
88
- SSEClient.prototype.reopen = function () {
89
- this.open(this.authToken);
90
- };
91
80
  return SSEClient;
92
81
  }());
93
82
  exports.default = SSEClient;
@@ -54,6 +54,13 @@ function notificationKeeperFactory(pushEmitter) {
54
54
  }
55
55
  },
56
56
  handleControlEvent: function (controlType, channel, timestamp) {
57
+ /* STREAMING_RESET control event is handled by PushManager directly since it doesn't require
58
+ * tracking timestamp and state like OCCUPANCY or CONTROL. It also ignores previous
59
+ * OCCUPANCY and CONTROL notifications, and whether PUSH_SUBSYSTEM_DOWN has been emitted or not */
60
+ if (controlType === constants_1.ControlType.STREAMING_RESET) {
61
+ pushEmitter.emit(controlType);
62
+ return;
63
+ }
57
64
  for (var i = 0; i < channels.length; i++) {
58
65
  var c = channels[i];
59
66
  if (c.regex.test(channel)) {
@@ -23,10 +23,13 @@ exports.errorParser = errorParser;
23
23
  * Also assigns the type OCCUPANCY, if it corresponds, so that all supported messages (e.g., SPLIT_UPDATE, CONTROL) have a type.
24
24
  *
25
25
  * @param message
26
- * @returns parsed notification message
26
+ * @returns parsed notification message or undefined if the given event data is falsy (e.g, '' or undefined).
27
+ * For example, the EventSource implementation of React-Native for iOS emits a message event with empty data for Ably keepalive comments.
27
28
  * @throws {SyntaxError} if `message.data` or `JSON.parse(message.data).data` are invalid JSON strings
28
29
  */
29
30
  function messageParser(message) {
31
+ if (!message.data)
32
+ return;
30
33
  var messageData = JSON.parse(message.data);
31
34
  messageData.parsedData = JSON.parse(messageData.data);
32
35
  // set the event type to OCCUPANCY, to handle all events uniformely
@@ -39,7 +39,7 @@ function SSEHandlerFactory(log, pushEmitter) {
39
39
  catch (err) {
40
40
  log.warn(constants_2.STREAMING_PARSING_ERROR_FAILS, [err]);
41
41
  }
42
- var errorMessage = errorWithParsedData.parsedData && errorWithParsedData.parsedData.message;
42
+ var errorMessage = (errorWithParsedData.parsedData && errorWithParsedData.parsedData.message) || errorWithParsedData.message;
43
43
  log.error(constants_2.ERROR_STREAMING_SSE, [errorMessage]);
44
44
  if (isRetryableError(errorWithParsedData)) {
45
45
  pushEmitter.emit(constants_1.PUSH_RETRYABLE_ERROR);
@@ -53,6 +53,8 @@ function SSEHandlerFactory(log, pushEmitter) {
53
53
  var messageWithParsedData;
54
54
  try {
55
55
  messageWithParsedData = NotificationParser_1.messageParser(message);
56
+ if (!messageWithParsedData)
57
+ return; // Messages with empty data are ignored
56
58
  }
57
59
  catch (err) {
58
60
  log.warn(constants_2.STREAMING_PARSING_MESSAGE_FAILS, [err]);
@@ -61,21 +63,18 @@ function SSEHandlerFactory(log, pushEmitter) {
61
63
  var parsedData = messageWithParsedData.parsedData, data = messageWithParsedData.data, channel = messageWithParsedData.channel, timestamp = messageWithParsedData.timestamp;
62
64
  log.debug(constants_2.STREAMING_NEW_MESSAGE, [data]);
63
65
  // we only handle update events if streaming is up.
64
- if (!notificationKeeper.isStreamingUp() && parsedData.type !== constants_1.OCCUPANCY && parsedData.type !== constants_1.CONTROL)
66
+ if (!notificationKeeper.isStreamingUp() && [constants_1.OCCUPANCY, constants_1.CONTROL].indexOf(parsedData.type) === -1)
65
67
  return;
66
68
  switch (parsedData.type) {
67
69
  /* update events */
68
70
  case constants_1.SPLIT_UPDATE:
69
- pushEmitter.emit(constants_1.SPLIT_UPDATE, parsedData.changeNumber);
70
- break;
71
71
  case constants_1.SEGMENT_UPDATE:
72
- pushEmitter.emit(constants_1.SEGMENT_UPDATE, parsedData.changeNumber, parsedData.segmentName);
72
+ case constants_1.MY_SEGMENTS_UPDATE_V2:
73
+ case constants_1.SPLIT_KILL:
74
+ pushEmitter.emit(parsedData.type, parsedData);
73
75
  break;
74
76
  case constants_1.MY_SEGMENTS_UPDATE:
75
- pushEmitter.emit(constants_1.MY_SEGMENTS_UPDATE, parsedData, channel);
76
- break;
77
- case constants_1.SPLIT_KILL:
78
- pushEmitter.emit(constants_1.SPLIT_KILL, parsedData.changeNumber, parsedData.splitName, parsedData.defaultTreatment);
77
+ pushEmitter.emit(parsedData.type, parsedData, channel);
79
78
  break;
80
79
  /* occupancy & control events, handled by NotificationManagerKeeper */
81
80
  case constants_1.OCCUPANCY:
@@ -1,2 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpdateStrategy = exports.Compression = void 0;
4
+ var Compression;
5
+ (function (Compression) {
6
+ Compression[Compression["None"] = 0] = "None";
7
+ Compression[Compression["Gzip"] = 1] = "Gzip";
8
+ Compression[Compression["Zlib"] = 2] = "Zlib";
9
+ })(Compression = exports.Compression || (exports.Compression = {}));
10
+ var UpdateStrategy;
11
+ (function (UpdateStrategy) {
12
+ UpdateStrategy[UpdateStrategy["UnboundedFetchRequest"] = 0] = "UnboundedFetchRequest";
13
+ UpdateStrategy[UpdateStrategy["BoundedFetchRequest"] = 1] = "BoundedFetchRequest";
14
+ UpdateStrategy[UpdateStrategy["KeyList"] = 2] = "KeyList";
15
+ UpdateStrategy[UpdateStrategy["SegmentRemoval"] = 3] = "SegmentRemoval";
16
+ })(UpdateStrategy = exports.UpdateStrategy || (exports.UpdateStrategy = {}));
@@ -13,7 +13,7 @@ var MySegmentsUpdateWorker = /** @class */ (function () {
13
13
  this.mySegmentsSyncTask = mySegmentsSyncTask;
14
14
  this.maxChangeNumber = 0; // keeps the maximum changeNumber among queued events
15
15
  this.handleNewEvent = false;
16
- this.segmentList = undefined; // keeps the segmentList (if included in payload) from the queued event with maximum changeNumber
16
+ this.segmentsData = undefined; // keeps the segmentsData (if included in notification payload) from the queued event with maximum changeNumber
17
17
  this.currentChangeNumber = -1; // @TODO: remove once `/mySegments` endpoint provides the changeNumber
18
18
  this.put = this.put.bind(this);
19
19
  this.__handleMySegmentsUpdateCall = this.__handleMySegmentsUpdateCall.bind(this);
@@ -27,7 +27,7 @@ var MySegmentsUpdateWorker = /** @class */ (function () {
27
27
  this.handleNewEvent = false;
28
28
  var currentMaxChangeNumber_1 = this.maxChangeNumber;
29
29
  // fetch mySegments revalidating data if cached
30
- this.mySegmentsSyncTask.execute(this.segmentList, true).then(function (result) {
30
+ this.mySegmentsSyncTask.execute(this.segmentsData, true).then(function (result) {
31
31
  if (result !== false) // Unlike `Splits|SegmentsUpdateWorker`, we cannot use `mySegmentsCache.getChangeNumber` since `/mySegments` endpoint doesn't provide this value.
32
32
  _this.currentChangeNumber = Math.max(_this.currentChangeNumber, currentMaxChangeNumber_1); // use `currentMaxChangeNumber`, in case that `this.maxChangeNumber` was updated during fetch.
33
33
  if (_this.handleNewEvent) {
@@ -43,15 +43,15 @@ var MySegmentsUpdateWorker = /** @class */ (function () {
43
43
  * Invoked by NotificationProcessor on MY_SEGMENTS_UPDATE event
44
44
  *
45
45
  * @param {number} changeNumber change number of the MY_SEGMENTS_UPDATE notification
46
- * @param {string[] | undefined} segmentList might be undefined
46
+ * @param {SegmentsData | undefined} segmentsData might be undefined
47
47
  */
48
- MySegmentsUpdateWorker.prototype.put = function (changeNumber, segmentList) {
48
+ MySegmentsUpdateWorker.prototype.put = function (changeNumber, segmentsData) {
49
49
  if (changeNumber <= this.currentChangeNumber || changeNumber <= this.maxChangeNumber)
50
50
  return;
51
51
  this.maxChangeNumber = changeNumber;
52
52
  this.handleNewEvent = true;
53
53
  this.backoff.reset();
54
- this.segmentList = segmentList;
54
+ this.segmentsData = segmentsData;
55
55
  if (this.mySegmentsSyncTask.isExecuting())
56
56
  return;
57
57
  this.__handleMySegmentsUpdateCall();
@@ -57,7 +57,8 @@ var SegmentsUpdateWorker = /** @class */ (function () {
57
57
  * @param {number} changeNumber change number of the SEGMENT_UPDATE notification
58
58
  * @param {string} segmentName segment name of the SEGMENT_UPDATE notification
59
59
  */
60
- SegmentsUpdateWorker.prototype.put = function (changeNumber, segmentName) {
60
+ SegmentsUpdateWorker.prototype.put = function (_a) {
61
+ var changeNumber = _a.changeNumber, segmentName = _a.segmentName;
61
62
  var currentChangeNumber = this.segmentsCache.getChangeNumber(segmentName);
62
63
  if (changeNumber <= currentChangeNumber || changeNumber <= this.maxChangeNumbers[segmentName])
63
64
  return;
@@ -49,7 +49,8 @@ var SplitsUpdateWorker = /** @class */ (function () {
49
49
  *
50
50
  * @param {number} changeNumber change number of the SPLIT_UPDATE notification
51
51
  */
52
- SplitsUpdateWorker.prototype.put = function (changeNumber) {
52
+ SplitsUpdateWorker.prototype.put = function (_a) {
53
+ var changeNumber = _a.changeNumber;
53
54
  var currentChangeNumber = this.splitsCache.getChangeNumber();
54
55
  if (changeNumber <= currentChangeNumber || changeNumber <= this.maxChangeNumber)
55
56
  return;
@@ -67,14 +68,15 @@ var SplitsUpdateWorker = /** @class */ (function () {
67
68
  * @param {string} splitName name of split to kill
68
69
  * @param {string} defaultTreatment default treatment value
69
70
  */
70
- SplitsUpdateWorker.prototype.killSplit = function (changeNumber, splitName, defaultTreatment) {
71
+ SplitsUpdateWorker.prototype.killSplit = function (_a) {
72
+ var changeNumber = _a.changeNumber, splitName = _a.splitName, defaultTreatment = _a.defaultTreatment;
71
73
  // @TODO handle retry due to errors in storage, once we allow the definition of custom async storages
72
74
  if (this.splitsCache.killLocally(splitName, defaultTreatment, changeNumber)) {
73
75
  // trigger an SDK_UPDATE if Split was killed locally
74
76
  this.splitsEventEmitter.emit(constants_1.SDK_SPLITS_ARRIVED, true);
75
77
  }
76
78
  // queues the SplitChanges fetch (only if changeNumber is newer)
77
- this.put(changeNumber);
79
+ this.put({ changeNumber: changeNumber });
78
80
  };
79
81
  return SplitsUpdateWorker;
80
82
  }());
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ControlType = exports.OCCUPANCY = exports.CONTROL = exports.SPLIT_UPDATE = exports.SPLIT_KILL = exports.SEGMENT_UPDATE = exports.MY_SEGMENTS_UPDATE = exports.PUSH_SUBSYSTEM_DOWN = exports.PUSH_SUBSYSTEM_UP = exports.PUSH_RETRYABLE_ERROR = exports.PUSH_NONRETRYABLE_ERROR = exports.SECONDS_BEFORE_EXPIRATION = void 0;
3
+ exports.ControlType = exports.OCCUPANCY = exports.CONTROL = exports.SPLIT_UPDATE = exports.SPLIT_KILL = exports.SEGMENT_UPDATE = exports.MY_SEGMENTS_UPDATE_V2 = exports.MY_SEGMENTS_UPDATE = exports.PUSH_SUBSYSTEM_DOWN = exports.PUSH_SUBSYSTEM_UP = exports.PUSH_RETRYABLE_ERROR = exports.PUSH_NONRETRYABLE_ERROR = exports.SECONDS_BEFORE_EXPIRATION = void 0;
4
4
  // time for refresh token
5
5
  exports.SECONDS_BEFORE_EXPIRATION = 600;
6
6
  // Internal SDK events, subscribed by SyncManager and PushManager
@@ -26,6 +26,7 @@ exports.PUSH_SUBSYSTEM_UP = 'PUSH_SUBSYSTEM_UP';
26
26
  exports.PUSH_SUBSYSTEM_DOWN = 'PUSH_SUBSYSTEM_DOWN';
27
27
  // Update-type push notifications, handled by NotificationProcessor
28
28
  exports.MY_SEGMENTS_UPDATE = 'MY_SEGMENTS_UPDATE';
29
+ exports.MY_SEGMENTS_UPDATE_V2 = 'MY_SEGMENTS_UPDATE_V2';
29
30
  exports.SEGMENT_UPDATE = 'SEGMENT_UPDATE';
30
31
  exports.SPLIT_KILL = 'SPLIT_KILL';
31
32
  exports.SPLIT_UPDATE = 'SPLIT_UPDATE';
@@ -37,4 +38,5 @@ var ControlType;
37
38
  ControlType["STREAMING_DISABLED"] = "STREAMING_DISABLED";
38
39
  ControlType["STREAMING_PAUSED"] = "STREAMING_PAUSED";
39
40
  ControlType["STREAMING_RESUMED"] = "STREAMING_RESUMED";
41
+ ControlType["STREAMING_RESET"] = "STREAMING_RESET";
40
42
  })(ControlType = exports.ControlType || (exports.ControlType = {}));