@splitsoftware/splitio-commons 1.17.1-rc.4 → 1.17.1

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 (261) hide show
  1. package/CHANGES.txt +28 -29
  2. package/LICENSE +1 -1
  3. package/README.md +4 -3
  4. package/cjs/consent/sdkUserConsent.js +4 -2
  5. package/cjs/evaluator/matchers/index.js +1 -3
  6. package/cjs/evaluator/matchers/matcherTypes.js +0 -1
  7. package/cjs/evaluator/matchers/segment.js +0 -6
  8. package/cjs/evaluator/matchersTransform/index.js +1 -4
  9. package/cjs/evaluator/matchersTransform/segment.js +1 -3
  10. package/cjs/logger/constants.js +2 -2
  11. package/cjs/logger/messages/info.js +1 -1
  12. package/cjs/logger/messages/warn.js +1 -1
  13. package/cjs/readiness/readinessManager.js +8 -18
  14. package/cjs/readiness/sdkReadinessManager.js +6 -5
  15. package/cjs/sdkClient/sdkClient.js +5 -5
  16. package/cjs/sdkClient/sdkClientMethod.js +1 -3
  17. package/cjs/sdkClient/sdkClientMethodCS.js +15 -9
  18. package/cjs/sdkClient/sdkClientMethodCSWithTT.js +15 -9
  19. package/cjs/sdkFactory/index.js +10 -32
  20. package/cjs/services/decorateHeaders.js +6 -1
  21. package/cjs/services/splitApi.js +5 -5
  22. package/cjs/services/splitHttpClient.js +5 -2
  23. package/cjs/storages/AbstractSegmentsCacheSync.js +33 -0
  24. package/cjs/storages/AbstractSplitsCacheSync.js +1 -2
  25. package/cjs/storages/KeyBuilderCS.js +5 -23
  26. package/cjs/storages/dataLoader.js +1 -1
  27. package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +56 -33
  28. package/cjs/storages/inLocalStorage/index.js +2 -6
  29. package/cjs/storages/inMemory/InMemoryStorageCS.js +1 -6
  30. package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +44 -13
  31. package/cjs/storages/inMemory/SegmentsCacheInMemory.js +28 -14
  32. package/cjs/storages/inMemory/SplitsCacheInMemory.js +9 -8
  33. package/cjs/storages/inMemory/TelemetryCacheInMemory.js +10 -7
  34. package/cjs/storages/inRedis/SegmentsCacheInRedis.js +21 -15
  35. package/cjs/storages/inRedis/index.js +11 -5
  36. package/cjs/storages/pluggable/SegmentsCachePluggable.js +34 -13
  37. package/cjs/storages/pluggable/inMemoryWrapper.js +1 -1
  38. package/cjs/sync/offline/syncManagerOffline.js +11 -18
  39. package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +8 -5
  40. package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
  41. package/cjs/sync/polling/pollingManagerCS.js +1 -1
  42. package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  43. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +21 -15
  44. package/cjs/sync/polling/updaters/segmentChangesUpdater.js +28 -12
  45. package/cjs/sync/polling/updaters/splitChangesUpdater.js +1 -1
  46. package/cjs/sync/streaming/AuthClient/index.js +1 -1
  47. package/cjs/sync/streaming/SSEHandler/index.js +5 -3
  48. package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +48 -107
  49. package/cjs/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +3 -3
  50. package/cjs/sync/streaming/constants.js +3 -3
  51. package/cjs/sync/streaming/parseUtils.js +9 -14
  52. package/cjs/sync/streaming/pushManager.js +67 -69
  53. package/cjs/sync/syncManagerOnline.js +21 -20
  54. package/cjs/sync/syncTask.js +2 -2
  55. package/cjs/trackers/eventTracker.js +10 -12
  56. package/cjs/trackers/impressionsTracker.js +14 -16
  57. package/cjs/trackers/uniqueKeysTracker.js +3 -5
  58. package/cjs/utils/constants/index.js +4 -5
  59. package/cjs/utils/settingsValidation/index.js +1 -2
  60. package/esm/consent/sdkUserConsent.js +4 -2
  61. package/esm/evaluator/matchers/index.js +1 -3
  62. package/esm/evaluator/matchers/matcherTypes.js +0 -1
  63. package/esm/evaluator/matchers/segment.js +0 -6
  64. package/esm/evaluator/matchersTransform/index.js +1 -4
  65. package/esm/evaluator/matchersTransform/segment.js +1 -3
  66. package/esm/logger/constants.js +1 -1
  67. package/esm/logger/messages/info.js +1 -1
  68. package/esm/logger/messages/warn.js +1 -1
  69. package/esm/readiness/readinessManager.js +8 -18
  70. package/esm/readiness/sdkReadinessManager.js +6 -5
  71. package/esm/sdkClient/sdkClient.js +5 -5
  72. package/esm/sdkClient/sdkClientMethod.js +1 -3
  73. package/esm/sdkClient/sdkClientMethodCS.js +13 -7
  74. package/esm/sdkClient/sdkClientMethodCSWithTT.js +13 -7
  75. package/esm/sdkFactory/index.js +10 -32
  76. package/esm/services/decorateHeaders.js +4 -0
  77. package/esm/services/splitApi.js +6 -6
  78. package/esm/services/splitHttpClient.js +6 -3
  79. package/esm/storages/AbstractSegmentsCacheSync.js +30 -0
  80. package/esm/storages/AbstractSplitsCacheSync.js +2 -3
  81. package/esm/storages/KeyBuilderCS.js +4 -21
  82. package/esm/storages/dataLoader.js +1 -1
  83. package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +56 -33
  84. package/esm/storages/inLocalStorage/index.js +3 -7
  85. package/esm/storages/inMemory/InMemoryStorageCS.js +1 -6
  86. package/esm/storages/inMemory/MySegmentsCacheInMemory.js +44 -13
  87. package/esm/storages/inMemory/SegmentsCacheInMemory.js +28 -14
  88. package/esm/storages/inMemory/SplitsCacheInMemory.js +9 -8
  89. package/esm/storages/inMemory/TelemetryCacheInMemory.js +10 -7
  90. package/esm/storages/inRedis/SegmentsCacheInRedis.js +21 -15
  91. package/esm/storages/inRedis/index.js +11 -5
  92. package/esm/storages/pluggable/SegmentsCachePluggable.js +34 -13
  93. package/esm/storages/pluggable/inMemoryWrapper.js +1 -1
  94. package/esm/sync/offline/syncManagerOffline.js +11 -18
  95. package/esm/sync/polling/fetchers/mySegmentsFetcher.js +8 -5
  96. package/esm/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
  97. package/esm/sync/polling/pollingManagerCS.js +1 -1
  98. package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  99. package/esm/sync/polling/updaters/mySegmentsUpdater.js +21 -15
  100. package/esm/sync/polling/updaters/segmentChangesUpdater.js +28 -12
  101. package/esm/sync/polling/updaters/splitChangesUpdater.js +1 -1
  102. package/esm/sync/streaming/AuthClient/index.js +1 -1
  103. package/esm/sync/streaming/SSEHandler/index.js +6 -4
  104. package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +49 -108
  105. package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +3 -3
  106. package/esm/sync/streaming/constants.js +2 -2
  107. package/esm/sync/streaming/parseUtils.js +8 -12
  108. package/esm/sync/streaming/pushManager.js +70 -72
  109. package/esm/sync/syncManagerOnline.js +21 -20
  110. package/esm/sync/syncTask.js +2 -2
  111. package/esm/trackers/eventTracker.js +10 -12
  112. package/esm/trackers/impressionsTracker.js +14 -16
  113. package/esm/trackers/uniqueKeysTracker.js +3 -5
  114. package/esm/utils/constants/index.js +2 -3
  115. package/esm/utils/settingsValidation/index.js +1 -2
  116. package/package.json +2 -2
  117. package/src/consent/sdkUserConsent.ts +3 -2
  118. package/src/dtos/types.ts +7 -21
  119. package/src/evaluator/matchers/index.ts +0 -2
  120. package/src/evaluator/matchers/matcherTypes.ts +0 -1
  121. package/src/evaluator/matchers/segment.ts +0 -7
  122. package/src/evaluator/matchersTransform/index.ts +1 -4
  123. package/src/evaluator/matchersTransform/segment.ts +3 -5
  124. package/src/logger/constants.ts +1 -1
  125. package/src/logger/messages/info.ts +1 -1
  126. package/src/logger/messages/warn.ts +1 -1
  127. package/src/readiness/readinessManager.ts +8 -19
  128. package/src/readiness/sdkReadinessManager.ts +7 -7
  129. package/src/readiness/types.ts +2 -5
  130. package/src/sdkClient/sdkClient.ts +5 -5
  131. package/src/sdkClient/sdkClientMethod.ts +1 -4
  132. package/src/sdkClient/sdkClientMethodCS.ts +15 -7
  133. package/src/sdkClient/sdkClientMethodCSWithTT.ts +15 -7
  134. package/src/sdkFactory/index.ts +12 -35
  135. package/src/sdkFactory/types.ts +1 -4
  136. package/src/services/decorateHeaders.ts +5 -0
  137. package/src/services/splitApi.ts +7 -7
  138. package/src/services/splitHttpClient.ts +7 -4
  139. package/src/services/types.ts +2 -2
  140. package/src/storages/AbstractSegmentsCacheSync.ts +68 -0
  141. package/src/storages/AbstractSplitsCacheSync.ts +3 -4
  142. package/src/storages/KeyBuilderCS.ts +5 -34
  143. package/src/storages/dataLoader.ts +1 -1
  144. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +63 -33
  145. package/src/storages/inLocalStorage/index.ts +4 -8
  146. package/src/storages/inMemory/InMemoryStorageCS.ts +1 -6
  147. package/src/storages/inMemory/MySegmentsCacheInMemory.ts +47 -13
  148. package/src/storages/inMemory/SegmentsCacheInMemory.ts +27 -13
  149. package/src/storages/inMemory/SplitsCacheInMemory.ts +9 -7
  150. package/src/storages/inMemory/TelemetryCacheInMemory.ts +11 -7
  151. package/src/storages/inRedis/SegmentsCacheInRedis.ts +24 -15
  152. package/src/storages/inRedis/index.ts +12 -6
  153. package/src/storages/pluggable/SegmentsCachePluggable.ts +37 -13
  154. package/src/storages/pluggable/inMemoryWrapper.ts +1 -1
  155. package/src/storages/types.ts +17 -15
  156. package/src/sync/offline/syncManagerOffline.ts +13 -21
  157. package/src/sync/polling/fetchers/mySegmentsFetcher.ts +10 -8
  158. package/src/sync/polling/fetchers/segmentChangesFetcher.ts +1 -1
  159. package/src/sync/polling/fetchers/types.ts +2 -3
  160. package/src/sync/polling/pollingManagerCS.ts +4 -4
  161. package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +5 -4
  162. package/src/sync/polling/types.ts +6 -7
  163. package/src/sync/polling/updaters/mySegmentsUpdater.ts +22 -19
  164. package/src/sync/polling/updaters/segmentChangesUpdater.ts +29 -13
  165. package/src/sync/polling/updaters/splitChangesUpdater.ts +1 -1
  166. package/src/sync/streaming/AuthClient/index.ts +1 -1
  167. package/src/sync/streaming/SSEClient/index.ts +6 -4
  168. package/src/sync/streaming/SSEHandler/index.ts +8 -5
  169. package/src/sync/streaming/SSEHandler/types.ts +15 -15
  170. package/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts +49 -116
  171. package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +4 -4
  172. package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +1 -1
  173. package/src/sync/streaming/UpdateWorkers/types.ts +2 -2
  174. package/src/sync/streaming/constants.ts +2 -2
  175. package/src/sync/streaming/parseUtils.ts +11 -19
  176. package/src/sync/streaming/pushManager.ts +72 -73
  177. package/src/sync/streaming/types.ts +10 -10
  178. package/src/sync/submitters/types.ts +5 -8
  179. package/src/sync/syncManagerOnline.ts +17 -17
  180. package/src/sync/syncTask.ts +2 -2
  181. package/src/sync/types.ts +1 -1
  182. package/src/trackers/eventTracker.ts +8 -11
  183. package/src/trackers/impressionsTracker.ts +10 -13
  184. package/src/trackers/types.ts +0 -1
  185. package/src/trackers/uniqueKeysTracker.ts +4 -6
  186. package/src/types.ts +1 -7
  187. package/src/utils/constants/index.ts +2 -3
  188. package/src/utils/settingsValidation/index.ts +2 -3
  189. package/src/utils/settingsValidation/types.ts +1 -1
  190. package/types/dtos/types.d.ts +7 -18
  191. package/types/evaluator/matchersTransform/segment.d.ts +2 -2
  192. package/types/logger/constants.d.ts +1 -1
  193. package/types/readiness/readinessManager.d.ts +2 -2
  194. package/types/readiness/sdkReadinessManager.d.ts +3 -2
  195. package/types/readiness/types.d.ts +2 -5
  196. package/types/sdkClient/sdkClientMethod.d.ts +1 -1
  197. package/types/sdkFactory/types.d.ts +1 -3
  198. package/types/services/decorateHeaders.d.ts +1 -0
  199. package/types/services/splitApi.d.ts +1 -1
  200. package/types/services/splitHttpClient.d.ts +1 -1
  201. package/types/services/types.d.ts +2 -2
  202. package/types/storages/AbstractSegmentsCacheSync.d.ts +11 -9
  203. package/types/storages/AbstractSplitsCacheSync.d.ts +1 -1
  204. package/types/storages/KeyBuilderCS.d.ts +2 -9
  205. package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +18 -8
  206. package/types/storages/inMemory/MySegmentsCacheInMemory.d.ts +13 -7
  207. package/types/storages/inMemory/SegmentsCacheInMemory.d.ts +8 -6
  208. package/types/storages/inMemory/SplitsCacheInMemory.d.ts +2 -1
  209. package/types/storages/inMemory/TelemetryCacheInMemory.d.ts +6 -4
  210. package/types/storages/inRedis/SegmentsCacheInRedis.d.ts +4 -7
  211. package/types/storages/inRedis/index.d.ts +1 -1
  212. package/types/storages/pluggable/SegmentsCachePluggable.d.ts +17 -5
  213. package/types/storages/pluggable/inMemoryWrapper.d.ts +1 -1
  214. package/types/storages/types.d.ts +15 -11
  215. package/types/sync/polling/fetchers/mySegmentsFetcher.d.ts +2 -2
  216. package/types/sync/polling/fetchers/types.d.ts +2 -2
  217. package/types/sync/polling/syncTasks/mySegmentsSyncTask.d.ts +2 -2
  218. package/types/sync/polling/types.d.ts +4 -7
  219. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +3 -4
  220. package/types/sync/streaming/SSEHandler/types.d.ts +14 -16
  221. package/types/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.d.ts +2 -4
  222. package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -2
  223. package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +2 -3
  224. package/types/sync/streaming/UpdateWorkers/types.d.ts +2 -2
  225. package/types/sync/streaming/constants.d.ts +2 -2
  226. package/types/sync/streaming/parseUtils.d.ts +5 -4
  227. package/types/sync/streaming/types.d.ts +8 -8
  228. package/types/sync/submitters/types.d.ts +4 -7
  229. package/types/sync/types.d.ts +1 -1
  230. package/types/trackers/eventTracker.d.ts +1 -1
  231. package/types/trackers/impressionsTracker.d.ts +1 -1
  232. package/types/trackers/types.d.ts +0 -1
  233. package/types/types.d.ts +1 -7
  234. package/types/utils/constants/index.d.ts +2 -3
  235. package/types/utils/settingsValidation/types.d.ts +1 -1
  236. package/cjs/evaluator/matchers/large_segment.js +0 -16
  237. package/cjs/sdkClient/identity.js +0 -7
  238. package/cjs/storages/AbstractMySegmentsCacheSync.js +0 -60
  239. package/esm/evaluator/matchers/large_segment.js +0 -12
  240. package/esm/sdkClient/identity.js +0 -3
  241. package/esm/storages/AbstractMySegmentsCacheSync.js +0 -57
  242. package/src/evaluator/matchers/large_segment.ts +0 -18
  243. package/src/sdkClient/identity.ts +0 -5
  244. package/src/storages/AbstractMySegmentsCacheSync.ts +0 -94
  245. package/types/evaluator/matchers/large_segment.d.ts +0 -5
  246. package/types/evaluator/matchers/sember_inlist.d.ts +0 -3
  247. package/types/evaluator/matchersTransform/set.d.ts +0 -5
  248. package/types/evaluator/matchersTransform/string.d.ts +0 -7
  249. package/types/sdkClient/identity.d.ts +0 -2
  250. package/types/storages/AbstractMySegmentsCacheSync.d.ts +0 -39
  251. package/types/storages/AbstractSplitsCache.d.ts +0 -46
  252. package/types/sync/streaming/mySegmentsV2utils.d.ts +0 -27
  253. package/types/sync/streaming/pushManagerCS_Spec1_3.d.ts +0 -9
  254. package/types/sync/streaming/pushManager_Spec1_3.d.ts +0 -9
  255. package/types/trackers/impressionObserver/utils.d.ts +0 -5
  256. package/types/utils/inputValidation/sdkKey.d.ts +0 -7
  257. package/types/utils/inputValidation/splitExistance.d.ts +0 -7
  258. package/types/utils/inputValidation/trafficTypeExistance.d.ts +0 -9
  259. package/types/utils/redis/RedisMock.d.ts +0 -4
  260. package/types/utils/settingsValidation/logger/globalLogLevel.d.ts +0 -8
  261. /package/types/utils/{semVer.d.ts → Semver.d.ts} +0 -0
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildInstanceId = void 0;
4
- function buildInstanceId(key, trafficType) {
5
- return (key.matchingKey ? key.matchingKey : key) + "-" + (key.bucketingKey ? key.bucketingKey : key) + "-" + (trafficType ? trafficType : '');
6
- }
7
- exports.buildInstanceId = buildInstanceId;
@@ -1,60 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AbstractMySegmentsCacheSync = void 0;
4
- /**
5
- * This class provides a skeletal implementation of the ISegmentsCacheSync interface
6
- * to minimize the effort required to implement this interface.
7
- */
8
- var AbstractMySegmentsCacheSync = /** @class */ (function () {
9
- function AbstractMySegmentsCacheSync() {
10
- }
11
- /**
12
- * clear the cache.
13
- */
14
- AbstractMySegmentsCacheSync.prototype.clear = function () {
15
- this.resetSegments({});
16
- };
17
- // No-op. Not used in client-side.
18
- AbstractMySegmentsCacheSync.prototype.registerSegments = function () { return false; };
19
- AbstractMySegmentsCacheSync.prototype.update = function () { return false; };
20
- /**
21
- * For server-side synchronizer: the method is not used.
22
- * For client-side synchronizer: it resets or updates the cache.
23
- */
24
- AbstractMySegmentsCacheSync.prototype.resetSegments = function (segmentsData) {
25
- var _this = this;
26
- this.setChangeNumber(segmentsData.cn);
27
- var _a = segmentsData, added = _a.added, removed = _a.removed;
28
- if (added && removed) {
29
- var isDiff_1 = false;
30
- added.forEach(function (segment) {
31
- isDiff_1 = _this.addSegment(segment) || isDiff_1;
32
- });
33
- removed.forEach(function (segment) {
34
- isDiff_1 = _this.removeSegment(segment) || isDiff_1;
35
- });
36
- return isDiff_1;
37
- }
38
- var names = (segmentsData.k || []).map(function (s) { return s.n; }).sort();
39
- var storedSegmentKeys = this.getRegisteredSegments().sort();
40
- // Extreme fast => everything is empty
41
- if (!names.length && !storedSegmentKeys.length)
42
- return false;
43
- var index = 0;
44
- while (index < names.length && index < storedSegmentKeys.length && names[index] === storedSegmentKeys[index])
45
- index++;
46
- // Quick path => no changes
47
- if (index === names.length && index === storedSegmentKeys.length)
48
- return false;
49
- // Slowest path => add and/or remove segments
50
- for (var removeIndex = index; removeIndex < storedSegmentKeys.length; removeIndex++) {
51
- this.removeSegment(storedSegmentKeys[removeIndex]);
52
- }
53
- for (var addIndex = index; addIndex < names.length; addIndex++) {
54
- this.addSegment(names[addIndex]);
55
- }
56
- return true;
57
- };
58
- return AbstractMySegmentsCacheSync;
59
- }());
60
- exports.AbstractMySegmentsCacheSync = AbstractMySegmentsCacheSync;
@@ -1,12 +0,0 @@
1
- import { thenable } from '../../utils/promise/thenable';
2
- export function largeSegmentMatcherContext(largeSegmentName, storage) {
3
- return function largeSegmentMatcher(key) {
4
- var isInLargeSegment = storage.largeSegments ? storage.largeSegments.isInSegment(largeSegmentName, key) : false;
5
- if (thenable(isInLargeSegment)) {
6
- isInLargeSegment.then(function (result) {
7
- return result;
8
- });
9
- }
10
- return isInLargeSegment;
11
- };
12
- }
@@ -1,3 +0,0 @@
1
- export function buildInstanceId(key, trafficType) {
2
- return (key.matchingKey ? key.matchingKey : key) + "-" + (key.bucketingKey ? key.bucketingKey : key) + "-" + (trafficType ? trafficType : '');
3
- }
@@ -1,57 +0,0 @@
1
- /**
2
- * This class provides a skeletal implementation of the ISegmentsCacheSync interface
3
- * to minimize the effort required to implement this interface.
4
- */
5
- var AbstractMySegmentsCacheSync = /** @class */ (function () {
6
- function AbstractMySegmentsCacheSync() {
7
- }
8
- /**
9
- * clear the cache.
10
- */
11
- AbstractMySegmentsCacheSync.prototype.clear = function () {
12
- this.resetSegments({});
13
- };
14
- // No-op. Not used in client-side.
15
- AbstractMySegmentsCacheSync.prototype.registerSegments = function () { return false; };
16
- AbstractMySegmentsCacheSync.prototype.update = function () { return false; };
17
- /**
18
- * For server-side synchronizer: the method is not used.
19
- * For client-side synchronizer: it resets or updates the cache.
20
- */
21
- AbstractMySegmentsCacheSync.prototype.resetSegments = function (segmentsData) {
22
- var _this = this;
23
- this.setChangeNumber(segmentsData.cn);
24
- var _a = segmentsData, added = _a.added, removed = _a.removed;
25
- if (added && removed) {
26
- var isDiff_1 = false;
27
- added.forEach(function (segment) {
28
- isDiff_1 = _this.addSegment(segment) || isDiff_1;
29
- });
30
- removed.forEach(function (segment) {
31
- isDiff_1 = _this.removeSegment(segment) || isDiff_1;
32
- });
33
- return isDiff_1;
34
- }
35
- var names = (segmentsData.k || []).map(function (s) { return s.n; }).sort();
36
- var storedSegmentKeys = this.getRegisteredSegments().sort();
37
- // Extreme fast => everything is empty
38
- if (!names.length && !storedSegmentKeys.length)
39
- return false;
40
- var index = 0;
41
- while (index < names.length && index < storedSegmentKeys.length && names[index] === storedSegmentKeys[index])
42
- index++;
43
- // Quick path => no changes
44
- if (index === names.length && index === storedSegmentKeys.length)
45
- return false;
46
- // Slowest path => add and/or remove segments
47
- for (var removeIndex = index; removeIndex < storedSegmentKeys.length; removeIndex++) {
48
- this.removeSegment(storedSegmentKeys[removeIndex]);
49
- }
50
- for (var addIndex = index; addIndex < names.length; addIndex++) {
51
- this.addSegment(names[addIndex]);
52
- }
53
- return true;
54
- };
55
- return AbstractMySegmentsCacheSync;
56
- }());
57
- export { AbstractMySegmentsCacheSync };
@@ -1,18 +0,0 @@
1
- import { MaybeThenable } from '../../dtos/types';
2
- import { ISegmentsCacheBase } from '../../storages/types';
3
- import { thenable } from '../../utils/promise/thenable';
4
-
5
- export function largeSegmentMatcherContext(largeSegmentName: string, storage: { largeSegments?: ISegmentsCacheBase }) {
6
-
7
- return function largeSegmentMatcher(key: string): MaybeThenable<boolean> {
8
- const isInLargeSegment = storage.largeSegments ? storage.largeSegments.isInSegment(largeSegmentName, key) : false;
9
-
10
- if (thenable(isInLargeSegment)) {
11
- isInLargeSegment.then(result => {
12
- return result;
13
- });
14
- }
15
-
16
- return isInLargeSegment;
17
- };
18
- }
@@ -1,5 +0,0 @@
1
- import { SplitIO } from '../types';
2
-
3
- export function buildInstanceId(key: SplitIO.SplitKey, trafficType?: string) { // @ts-ignore
4
- return `${key.matchingKey ? key.matchingKey : key}-${key.bucketingKey ? key.bucketingKey : key}-${trafficType ? trafficType : ''}`;
5
- }
@@ -1,94 +0,0 @@
1
- import { IMySegmentsResponse } from '../dtos/types';
2
- import { MySegmentsData } from '../sync/polling/types';
3
- import { ISegmentsCacheSync } from './types';
4
-
5
- /**
6
- * This class provides a skeletal implementation of the ISegmentsCacheSync interface
7
- * to minimize the effort required to implement this interface.
8
- */
9
- export abstract class AbstractMySegmentsCacheSync implements ISegmentsCacheSync {
10
-
11
- protected abstract addSegment(name: string): boolean
12
- protected abstract removeSegment(name: string): boolean
13
- protected abstract setChangeNumber(changeNumber?: number): boolean | void
14
-
15
- /**
16
- * For server-side synchronizer: check if `key` is in `name` segment.
17
- * For client-side synchronizer: check if `name` segment is in the cache. `key` is undefined.
18
- */
19
- abstract isInSegment(name: string, key?: string): boolean
20
-
21
- /**
22
- * clear the cache.
23
- */
24
- clear() {
25
- this.resetSegments({});
26
- }
27
-
28
-
29
- // No-op. Not used in client-side.
30
- registerSegments(): boolean { return false; }
31
- update() { return false; }
32
-
33
- /**
34
- * For server-side synchronizer: get the list of segments to fetch changes.
35
- * Also used for the `seC` (segment count) telemetry stat.
36
- */
37
- abstract getRegisteredSegments(): string[]
38
-
39
- /**
40
- * Only used for the `skC`(segment keys count) telemetry stat: 1 for client-side, and total count of keys in server-side.
41
- * @TODO for client-side it should be the number of clients, but it requires a refactor of MySegments caches to simplify the code.
42
- */
43
- abstract getKeysCount(): number
44
-
45
- abstract getChangeNumber(name: string): number
46
-
47
- /**
48
- * For server-side synchronizer: the method is not used.
49
- * For client-side synchronizer: it resets or updates the cache.
50
- */
51
- resetSegments(segmentsData: MySegmentsData | IMySegmentsResponse): boolean {
52
- this.setChangeNumber(segmentsData.cn);
53
-
54
- const { added, removed } = segmentsData as MySegmentsData;
55
-
56
- if (added && removed) {
57
- let isDiff = false;
58
-
59
- added.forEach(segment => {
60
- isDiff = this.addSegment(segment) || isDiff;
61
- });
62
-
63
- removed.forEach(segment => {
64
- isDiff = this.removeSegment(segment) || isDiff;
65
- });
66
-
67
- return isDiff;
68
- }
69
-
70
- const names = ((segmentsData as IMySegmentsResponse).k || []).map(s => s.n).sort();
71
- const storedSegmentKeys = this.getRegisteredSegments().sort();
72
-
73
- // Extreme fast => everything is empty
74
- if (!names.length && !storedSegmentKeys.length) return false;
75
-
76
- let index = 0;
77
-
78
- while (index < names.length && index < storedSegmentKeys.length && names[index] === storedSegmentKeys[index]) index++;
79
-
80
- // Quick path => no changes
81
- if (index === names.length && index === storedSegmentKeys.length) return false;
82
-
83
- // Slowest path => add and/or remove segments
84
- for (let removeIndex = index; removeIndex < storedSegmentKeys.length; removeIndex++) {
85
- this.removeSegment(storedSegmentKeys[removeIndex]);
86
- }
87
-
88
- for (let addIndex = index; addIndex < names.length; addIndex++) {
89
- this.addSegment(names[addIndex]);
90
- }
91
-
92
- return true;
93
- }
94
- }
@@ -1,5 +0,0 @@
1
- import { MaybeThenable } from '../../dtos/types';
2
- import { ISegmentsCacheBase } from '../../storages/types';
3
- export declare function largeSegmentMatcherContext(largeSegmentName: string, storage: {
4
- largeSegments?: ISegmentsCacheBase;
5
- }): (key: string) => MaybeThenable<boolean>;
@@ -1,3 +0,0 @@
1
- import { ISet } from '../../utils/lang/sets';
2
- import { ILogger } from '../../logger/types';
3
- export declare function inListSemverMatcherContext(log: ILogger, ruleAttr: ISet<string>): (runtimeAttr: string) => boolean;
@@ -1,5 +0,0 @@
1
- import { ISplitMatcher } from '../../dtos/types';
2
- /**
3
- * Extract whitelist array. Used by set and string matchers
4
- */
5
- export declare function setTransform(whitelistObject: ISplitMatcher['whitelistMatcherData']): string[] | null | undefined;
@@ -1,7 +0,0 @@
1
- import { ISplitMatcher } from '../../dtos/types';
2
- /**
3
- * Extract value from string matcher data.
4
- */
5
- export declare function stringTransform({ stringMatcherData }: ISplitMatcher): {
6
- value: string | null | undefined;
7
- };
@@ -1,2 +0,0 @@
1
- import { SplitIO } from '../types';
2
- export declare function buildInstanceId(key: SplitIO.SplitKey, trafficType?: string): string;
@@ -1,39 +0,0 @@
1
- import { IMySegmentsResponse } from '../dtos/types';
2
- import { MySegmentsData } from '../sync/polling/types';
3
- import { ISegmentsCacheSync } from './types';
4
- /**
5
- * This class provides a skeletal implementation of the ISegmentsCacheSync interface
6
- * to minimize the effort required to implement this interface.
7
- */
8
- export declare abstract class AbstractMySegmentsCacheSync implements ISegmentsCacheSync {
9
- protected abstract addSegment(name: string): boolean;
10
- protected abstract removeSegment(name: string): boolean;
11
- protected abstract setChangeNumber(changeNumber?: number): boolean | void;
12
- /**
13
- * For server-side synchronizer: check if `key` is in `name` segment.
14
- * For client-side synchronizer: check if `name` segment is in the cache. `key` is undefined.
15
- */
16
- abstract isInSegment(name: string, key?: string): boolean;
17
- /**
18
- * clear the cache.
19
- */
20
- clear(): void;
21
- registerSegments(): boolean;
22
- update(): boolean;
23
- /**
24
- * For server-side synchronizer: get the list of segments to fetch changes.
25
- * Also used for the `seC` (segment count) telemetry stat.
26
- */
27
- abstract getRegisteredSegments(): string[];
28
- /**
29
- * Only used for the `skC`(segment keys count) telemetry stat: 1 for client-side, and total count of keys in server-side.
30
- * @TODO for client-side it should be the number of clients, but it requires a refactor of MySegments caches to simplify the code.
31
- */
32
- abstract getKeysCount(): number;
33
- abstract getChangeNumber(name: string): number;
34
- /**
35
- * For server-side synchronizer: the method is not used.
36
- * For client-side synchronizer: it resets or updates the cache.
37
- */
38
- resetSegments(segmentsData: MySegmentsData | IMySegmentsResponse): boolean;
39
- }
@@ -1,46 +0,0 @@
1
- import { ISplit, MaybeThenable } from '../dtos/types';
2
- /**
3
- * This class provides a skeletal implementation of the ISplitsCacheAsync interface
4
- * to minimize the effort required to implement this interface.
5
- */
6
- export declare abstract class AbstractSplitsCache {
7
- /**
8
- * Check if the splits information is already stored in cache. This data can be preloaded.
9
- * It is used as condition to emit SDK_SPLITS_CACHE_LOADED, and then SDK_READY_FROM_CACHE.
10
- */
11
- checkCache(): boolean;
12
- protected abstract addSplit(name: string, split: ISplit): MaybeThenable<boolean>;
13
- /**
14
- * Add a list of splits.
15
- * The returned promise is resolved when the operation success or rejected if it fails (e.g., wrapper operation fails).
16
- */
17
- protected addSplits(entries: [string, ISplit][]): Promise<boolean[]>;
18
- protected abstract removeSplit(name: string): MaybeThenable<boolean>;
19
- /**
20
- * Remove a list of splits.
21
- * The returned promise is resolved when the operation success, with a boolean array indicating if the splits existed or not.
22
- * or rejected if it fails (e.g., wrapper operation fails).
23
- */
24
- protected removeSplits(names: string[]): Promise<boolean[]>;
25
- protected abstract setChangeNumber(changeNumber: number): MaybeThenable<boolean | void>;
26
- /**
27
- * Updates the cache with the provided changeNumber, feature flags to add and feature flags to remove.
28
- *
29
- * @returns {Promise<boolean>} a promise that resolved once the operation is performed successfully. The fulfillment value is `true` if at least one feature flag was added, modified or removed; or `false` if there was no change.
30
- * The promise will reject if some storage operation rejects.
31
- */
32
- update(changeNumber: number, toAdd: [string, ISplit][], toRemove?: string[]): Promise<boolean>;
33
- abstract getSplit(name: string): MaybeThenable<ISplit | null>;
34
- /**
35
- * Kill `name` split and set `defaultTreatment` and `changeNumber`.
36
- * Used for SPLIT_KILL push notifications.
37
- *
38
- * @param {string} name
39
- * @param {string} defaultTreatment
40
- * @param {number} changeNumber
41
- * @returns {Promise} a promise that is resolved once the split kill operation is performed. The fulfillment value is a boolean: `true` if the operation successed updating the split or `false` if no split is updated,
42
- * for instance, if the `changeNumber` is old, or if the split is not found (e.g., `/splitchanges` hasn't been fetched yet), or if the storage fails to apply the update.
43
- * The promise will never be rejected.
44
- */
45
- killLocally(name: string, defaultTreatment: string, changeNumber: number): Promise<boolean>;
46
- }
@@ -1,27 +0,0 @@
1
- import { Compression, KeyList } from './SSEHandler/types';
2
- /**
3
- * Decode, decompress and parse the provided 'data' into a KeyList object
4
- *
5
- * @param {string} data
6
- * @param {number} compression
7
- * @returns {{a?: string[], r?: string[] }}
8
- * @throws if data string cannot be decoded, decompressed or parsed
9
- */
10
- export declare function parseKeyList(data: string, compression: Compression): KeyList;
11
- /**
12
- * Decode, decompress and parse the provided 'data' into a Bitmap object
13
- *
14
- * @param {string} data
15
- * @param {number} compression
16
- * @returns {Uint8Array}
17
- * @throws if data string cannot be decoded or decompressed
18
- */
19
- export declare function parseBitmap(data: string, compression: Compression): Uint8Array;
20
- /**
21
- * Check if the 'bitmap' bit at 'hash64hex' position is 1
22
- *
23
- * @param {Uint8Array} bitmap
24
- * @param {string} hash64hex 16-chars string, representing a number in hexa
25
- * @returns {boolean}
26
- */
27
- export declare function isInBitmap(bitmap: Uint8Array, hash64hex: string): boolean;
@@ -1,9 +0,0 @@
1
- import { IPushManager } from './types';
2
- import { IPollingManager } from '../polling/types';
3
- import { ISdkFactoryContextSync } from '../../sdkFactory/types';
4
- /**
5
- * PushManager factory:
6
- * - for server-side if key is not provided in settings.
7
- * - for client-side, with support for multiple clients, if key is provided in settings
8
- */
9
- export declare function pushManagerFactory(params: ISdkFactoryContextSync, pollingManager: IPollingManager): IPushManager | undefined;
@@ -1,9 +0,0 @@
1
- import { IPushManager } from './types';
2
- import { IPollingManager } from '../polling/types';
3
- import { ISdkFactoryContextSync } from '../../sdkFactory/types';
4
- /**
5
- * PushManager factory:
6
- * - for server-side if key is not provided in settings.
7
- * - for client-side, with support for multiple clients, if key is provided in settings
8
- */
9
- export declare function pushManagerFactory(params: ISdkFactoryContextSync, pollingManager: IPollingManager): IPushManager | undefined;
@@ -1,5 +0,0 @@
1
- import { ISettings } from '../../types';
2
- /**
3
- * Storage is async if mode is consumer or partial consumer
4
- */
5
- export declare function isStorageSync(settings: Pick<ISettings, 'mode'>): boolean;
@@ -1,7 +0,0 @@
1
- import { ILogger } from '../../logger/types';
2
- /** validates the given SDK key */
3
- export declare function validateApiKey(log: ILogger, maybeSdkKey: any): string | false;
4
- export declare const usedKeysMap: Record<string, number>;
5
- /** validates the given SDK key and also warns if it is in use */
6
- export declare function validateAndTrackApiKey(log: ILogger, maybeSdkKey: any): string | false;
7
- export declare function releaseApiKey(sdkKey: string): void;
@@ -1,7 +0,0 @@
1
- import { IReadinessManager } from '../../readiness/types';
2
- import { ILogger } from '../../logger/types';
3
- /**
4
- * This is defined here and in this format mostly because of the logger and the fact that it's considered a validation at product level.
5
- * But it's not going to run on the input validation layer. In any case, the most compeling reason to use it as we do is to avoid going to Redis and get a split twice.
6
- */
7
- export declare function validateSplitExistance(log: ILogger, readinessManager: IReadinessManager, splitName: string, labelOrSplitObj: any, method: string): boolean;
@@ -1,9 +0,0 @@
1
- import { ISplitsCacheBase } from '../../storages/types';
2
- import { IReadinessManager } from '../../readiness/types';
3
- import { SDKMode } from '../../types';
4
- import { MaybeThenable } from '../../dtos/types';
5
- import { ILogger } from '../../logger/types';
6
- /**
7
- * Separated from the previous method since on some cases it'll be async.
8
- */
9
- export declare function validateTrafficTypeExistance(log: ILogger, readinessManager: IReadinessManager, splitsCache: ISplitsCacheBase, mode: SDKMode, maybeTT: string, method: string): MaybeThenable<boolean>;
@@ -1,4 +0,0 @@
1
- export declare class RedisMock {
2
- private pipelineMethods;
3
- constructor();
4
- }
@@ -1,8 +0,0 @@
1
- import { LogLevel } from '../../../types';
2
- /**
3
- * The debug level can be set globally via the `localStorage.splitio_debug` item in browser, or the `SPLITIO_DEBUG` env var in NodeJS.
4
- * Acceptable values are: 'DEBUG', 'INFO', 'WARN', 'ERROR', 'NONE'.
5
- * Other acceptable values are 'on', 'enable' and 'enabled', which are equivalent to 'DEBUG'.
6
- * Any other value, like undefined, null or an invalid string, returns `undefined` and means that the global log level is not set.
7
- */
8
- export declare function getGlobalLogLevel(): LogLevel | undefined;
File without changes