@splitsoftware/splitio-commons 1.1.1-rc.0 → 1.2.1-rc.2

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 (269) hide show
  1. package/CHANGES.txt +1 -1
  2. package/cjs/evaluator/Engine.js +6 -6
  3. package/cjs/evaluator/combiners/and.js +1 -1
  4. package/cjs/evaluator/combiners/ifelseif.js +2 -2
  5. package/cjs/evaluator/condition/engineUtils.js +2 -2
  6. package/cjs/evaluator/condition/index.js +4 -4
  7. package/cjs/evaluator/index.js +5 -5
  8. package/cjs/evaluator/matchers/cont_all.js +1 -1
  9. package/cjs/evaluator/matchers/cont_any.js +1 -1
  10. package/cjs/evaluator/matchers/cont_str.js +1 -1
  11. package/cjs/evaluator/matchers/dependency.js +1 -1
  12. package/cjs/evaluator/matchers/eq_set.js +1 -1
  13. package/cjs/evaluator/matchers/ew.js +3 -3
  14. package/cjs/evaluator/matchers/part_of.js +1 -1
  15. package/cjs/evaluator/matchers/segment.js +1 -1
  16. package/cjs/evaluator/matchers/sw.js +1 -1
  17. package/cjs/evaluator/matchers/whitelist.js +1 -1
  18. package/cjs/evaluator/matchersTransform/index.js +12 -12
  19. package/cjs/evaluator/parser/index.js +6 -6
  20. package/cjs/evaluator/treatments/index.js +1 -1
  21. package/cjs/evaluator/value/index.js +1 -1
  22. package/cjs/evaluator/value/sanitize.js +4 -4
  23. package/cjs/integrations/browser.js +3 -3
  24. package/cjs/integrations/ga/GaToSplit.js +14 -14
  25. package/cjs/integrations/ga/GoogleAnalyticsToSplit.js +1 -1
  26. package/cjs/integrations/ga/SplitToGa.js +1 -1
  27. package/cjs/listeners/browser.js +1 -1
  28. package/cjs/listeners/node.js +1 -1
  29. package/cjs/logger/constants.js +3 -1
  30. package/cjs/logger/index.js +2 -2
  31. package/cjs/logger/messages/debug.js +1 -1
  32. package/cjs/logger/messages/error.js +1 -1
  33. package/cjs/logger/messages/info.js +4 -4
  34. package/cjs/logger/messages/warn.js +1 -1
  35. package/cjs/logger/sdkLogger.js +1 -1
  36. package/cjs/readiness/readinessManager.js +2 -2
  37. package/cjs/readiness/sdkReadinessManager.js +4 -4
  38. package/cjs/sdkClient/client.js +11 -10
  39. package/cjs/sdkClient/clientAttributesDecoration.js +4 -4
  40. package/cjs/sdkClient/clientCS.js +4 -3
  41. package/cjs/sdkClient/clientInputValidation.js +14 -14
  42. package/cjs/sdkClient/sdkClient.js +3 -3
  43. package/cjs/sdkClient/sdkClientMethod.js +1 -1
  44. package/cjs/sdkClient/sdkClientMethodCS.js +6 -6
  45. package/cjs/sdkClient/sdkClientMethodCSWithTT.js +8 -8
  46. package/cjs/sdkFactory/index.js +8 -8
  47. package/cjs/sdkManager/index.js +11 -11
  48. package/cjs/services/splitApi.js +3 -2
  49. package/cjs/services/splitHttpClient.js +3 -3
  50. package/cjs/storages/KeyBuilder.js +2 -2
  51. package/cjs/storages/KeyBuilderCS.js +2 -2
  52. package/cjs/storages/KeyBuilderSS.js +1 -1
  53. package/cjs/storages/findLatencyIndex.js +1 -1
  54. package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +1 -1
  55. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +12 -12
  56. package/cjs/storages/inLocalStorage/index.js +3 -3
  57. package/cjs/storages/inMemory/AttributesCacheInMemory.js +1 -1
  58. package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
  59. package/cjs/storages/inMemory/LatenciesCacheInMemory.js +1 -1
  60. package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +1 -1
  61. package/cjs/storages/inMemory/SegmentsCacheInMemory.js +2 -2
  62. package/cjs/storages/inMemory/SplitsCacheInMemory.js +5 -5
  63. package/cjs/storages/inRedis/LatenciesCacheInRedis.js +1 -1
  64. package/cjs/storages/inRedis/RedisAdapter.js +16 -10
  65. package/cjs/storages/inRedis/SegmentsCacheInRedis.js +1 -1
  66. package/cjs/storages/inRedis/SplitsCacheInRedis.js +3 -3
  67. package/cjs/storages/inRedis/index.js +1 -1
  68. package/cjs/storages/pluggable/SegmentsCachePluggable.js +1 -1
  69. package/cjs/storages/pluggable/SplitsCachePluggable.js +3 -3
  70. package/cjs/storages/pluggable/inMemoryWrapper.js +4 -4
  71. package/cjs/storages/pluggable/index.js +4 -4
  72. package/cjs/sync/offline/LocalhostFromFile.js +1 -1
  73. package/cjs/sync/offline/LocalhostFromObject.js +1 -1
  74. package/cjs/sync/offline/splitsParser/parseCondition.js +1 -1
  75. package/cjs/sync/offline/splitsParser/splitsParserFromFile.js +13 -13
  76. package/cjs/sync/offline/splitsParser/splitsParserFromSettings.js +3 -3
  77. package/cjs/sync/offline/syncManagerOffline.js +1 -1
  78. package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +2 -2
  79. package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +2 -2
  80. package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
  81. package/cjs/sync/polling/pollingManagerCS.js +8 -7
  82. package/cjs/sync/polling/pollingManagerSS.js +5 -4
  83. package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +1 -1
  84. package/cjs/sync/polling/syncTasks/segmentsSyncTask.js +1 -1
  85. package/cjs/sync/polling/syncTasks/splitsSyncTask.js +1 -1
  86. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +3 -3
  87. package/cjs/sync/polling/updaters/segmentChangesUpdater.js +2 -2
  88. package/cjs/sync/polling/updaters/splitChangesUpdater.js +2 -2
  89. package/cjs/sync/streaming/AuthClient/index.js +4 -5
  90. package/cjs/sync/streaming/SSEHandler/NotificationParser.js +1 -1
  91. package/cjs/sync/streaming/SSEHandler/index.js +3 -3
  92. package/cjs/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +1 -1
  93. package/cjs/sync/streaming/mySegmentsV2utils.js +1 -1
  94. package/cjs/sync/streaming/pushManager.js +39 -35
  95. package/cjs/sync/submitters/eventsSyncTask.js +1 -1
  96. package/cjs/sync/submitters/impressionCountsSyncTask.js +1 -1
  97. package/cjs/sync/submitters/impressionsSyncTask.js +3 -3
  98. package/cjs/sync/submitters/metricsSyncTask.js +3 -3
  99. package/cjs/sync/submitters/submitterManager.js +6 -5
  100. package/cjs/sync/submitters/submitterSyncTask.js +1 -1
  101. package/cjs/sync/syncManagerOnline.js +12 -12
  102. package/cjs/trackers/eventTracker.js +3 -3
  103. package/cjs/trackers/impressionObserver/impressionObserverCS.js +1 -1
  104. package/cjs/trackers/impressionObserver/impressionObserverSS.js +1 -1
  105. package/cjs/trackers/impressionsTracker.js +3 -3
  106. package/cjs/utils/MinEvents.js +2 -1
  107. package/cjs/utils/inputValidation/apiKey.js +1 -1
  108. package/cjs/utils/inputValidation/attribute.js +4 -4
  109. package/cjs/utils/inputValidation/attributes.js +2 -2
  110. package/cjs/utils/inputValidation/event.js +1 -1
  111. package/cjs/utils/inputValidation/eventProperties.js +7 -5
  112. package/cjs/utils/inputValidation/eventValue.js +1 -1
  113. package/cjs/utils/inputValidation/key.js +6 -5
  114. package/cjs/utils/inputValidation/preloadedData.js +8 -8
  115. package/cjs/utils/inputValidation/split.js +1 -1
  116. package/cjs/utils/inputValidation/splits.js +2 -2
  117. package/cjs/utils/inputValidation/trafficType.js +1 -1
  118. package/cjs/utils/inputValidation/trafficTypeExistance.js +1 -1
  119. package/cjs/utils/jwt/index.js +1 -1
  120. package/cjs/utils/key/index.js +3 -3
  121. package/cjs/utils/lang/index.js +2 -14
  122. package/cjs/utils/murmur3/common.js +1 -1
  123. package/cjs/utils/murmur3/legacy.js +44 -0
  124. package/cjs/utils/murmur3/murmur3.js +10 -10
  125. package/cjs/utils/murmur3/murmur3_128.js +1 -1
  126. package/cjs/utils/murmur3/murmur3_128_x86.js +37 -37
  127. package/cjs/utils/murmur3/murmur3_64.js +1 -1
  128. package/cjs/utils/promise/timeout.js +1 -1
  129. package/cjs/utils/settingsValidation/index.js +5 -10
  130. package/cjs/utils/settingsValidation/integrations/configurable.js +1 -1
  131. package/cjs/utils/settingsValidation/integrations/pluggable.js +1 -1
  132. package/cjs/utils/settingsValidation/localhost/builtin.js +2 -2
  133. package/cjs/utils/settingsValidation/logger/builtinLogger.js +3 -3
  134. package/cjs/utils/settingsValidation/logger/commons.js +1 -1
  135. package/cjs/utils/settingsValidation/logger/pluggableLogger.js +1 -1
  136. package/cjs/utils/settingsValidation/runtime/browser.js +10 -0
  137. package/cjs/utils/settingsValidation/runtime/node.js +22 -0
  138. package/cjs/utils/settingsValidation/splitFilters.js +1 -1
  139. package/cjs/utils/settingsValidation/storage/storageCS.js +1 -1
  140. package/cjs/utils/timeTracker/index.js +3 -3
  141. package/esm/evaluator/matchers/ew.js +4 -4
  142. package/esm/logger/messages/info.js +3 -3
  143. package/esm/sdkClient/client.js +2 -1
  144. package/esm/sdkClient/clientCS.js +2 -1
  145. package/esm/services/splitApi.js +2 -1
  146. package/esm/services/splitHttpClient.js +1 -1
  147. package/esm/storages/inRedis/RedisAdapter.js +7 -1
  148. package/esm/sync/offline/splitsParser/splitsParserFromFile.js +1 -1
  149. package/esm/sync/polling/fetchers/mySegmentsFetcher.js +2 -2
  150. package/esm/sync/polling/fetchers/segmentChangesFetcher.js +2 -2
  151. package/esm/sync/polling/pollingManagerCS.js +2 -1
  152. package/esm/sync/polling/pollingManagerSS.js +2 -1
  153. package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +1 -1
  154. package/esm/sync/polling/updaters/mySegmentsUpdater.js +2 -2
  155. package/esm/sync/streaming/AuthClient/index.js +1 -2
  156. package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +1 -1
  157. package/esm/sync/streaming/pushManager.js +27 -23
  158. package/esm/sync/submitters/submitterManager.js +2 -1
  159. package/esm/sync/syncManagerOnline.js +12 -12
  160. package/esm/utils/inputValidation/eventProperties.js +4 -2
  161. package/esm/utils/inputValidation/key.js +2 -1
  162. package/esm/utils/lang/index.js +2 -13
  163. package/esm/utils/murmur3/legacy.js +39 -0
  164. package/esm/utils/promise/timeout.js +1 -1
  165. package/esm/utils/settingsValidation/index.js +1 -6
  166. package/esm/utils/settingsValidation/runtime/browser.js +6 -0
  167. package/esm/utils/settingsValidation/runtime/node.js +17 -0
  168. package/package.json +8 -7
  169. package/src/evaluator/matchers/ew.ts +4 -4
  170. package/src/logger/.DS_Store +0 -0
  171. package/src/logger/messages/info.ts +3 -3
  172. package/src/logger/types.ts +4 -0
  173. package/src/sdkClient/client.ts +2 -1
  174. package/src/sdkClient/clientCS.ts +3 -1
  175. package/src/services/splitHttpClient.ts +1 -1
  176. package/src/sync/offline/splitsParser/splitsParserFromFile.ts +1 -1
  177. package/src/sync/polling/fetchers/mySegmentsFetcher.ts +2 -1
  178. package/src/sync/polling/fetchers/types.ts +1 -0
  179. package/src/sync/polling/pollingManagerCS.ts +3 -6
  180. package/src/sync/polling/pollingManagerSS.ts +3 -8
  181. package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +2 -1
  182. package/src/sync/polling/types.ts +0 -12
  183. package/src/sync/polling/updaters/mySegmentsUpdater.ts +2 -1
  184. package/src/sync/streaming/AuthClient/index.ts +1 -2
  185. package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
  186. package/src/sync/streaming/pushManager.ts +31 -38
  187. package/src/sync/streaming/types.ts +5 -25
  188. package/src/sync/submitters/submitterManager.ts +4 -8
  189. package/src/sync/syncManagerOnline.ts +16 -22
  190. package/src/types.ts +5 -1
  191. package/src/utils/inputValidation/eventProperties.ts +4 -2
  192. package/src/utils/lang/index.ts +0 -14
  193. package/src/utils/murmur3/legacy.ts +48 -0
  194. package/src/utils/promise/timeout.ts +1 -1
  195. package/src/utils/settingsValidation/index.ts +1 -6
  196. package/src/utils/settingsValidation/runtime/browser.ts +6 -0
  197. package/src/utils/settingsValidation/runtime/node.ts +22 -0
  198. package/src/utils/settingsValidation/types.ts +6 -6
  199. package/types/integrations/ga/GaToSplitPlugin.d.ts +3 -0
  200. package/types/integrations/ga/SplitToGaPlugin.d.ts +4 -0
  201. package/types/logger/browser/{DebugLogger.d.ts → debugLogger.d.ts} +0 -0
  202. package/types/logger/browser/{ErrorLogger.d.ts → errorLogger.d.ts} +0 -0
  203. package/types/logger/browser/{InfoLogger.d.ts → infoLogger.d.ts} +0 -0
  204. package/types/logger/browser/{WarnLogger.d.ts → warnLogger.d.ts} +0 -0
  205. package/types/logger/codes.d.ts +2 -0
  206. package/types/logger/codesConstants.d.ts +117 -0
  207. package/types/logger/codesConstantsBrowser.d.ts +2 -0
  208. package/types/logger/codesConstantsNode.d.ts +14 -0
  209. package/types/logger/codesDebug.d.ts +1 -0
  210. package/types/logger/codesDebugBrowser.d.ts +1 -0
  211. package/types/logger/codesDebugNode.d.ts +1 -0
  212. package/types/logger/codesError.d.ts +1 -0
  213. package/types/logger/codesErrorNode.d.ts +1 -0
  214. package/types/logger/codesInfo.d.ts +1 -0
  215. package/types/logger/codesWarn.d.ts +1 -0
  216. package/types/logger/codesWarnNode.d.ts +1 -0
  217. package/types/logger/debugLogger.d.ts +2 -0
  218. package/types/logger/errorLogger.d.ts +2 -0
  219. package/types/logger/infoLogger.d.ts +2 -0
  220. package/types/logger/messages/debugBrowser.d.ts +1 -0
  221. package/types/logger/messages/debugNode.d.ts +1 -0
  222. package/types/logger/messages/errorNode.d.ts +1 -0
  223. package/types/logger/messages/warnNode.d.ts +1 -0
  224. package/types/logger/noopLogger.d.ts +2 -0
  225. package/types/logger/types.d.ts +4 -0
  226. package/types/logger/warnLogger.d.ts +2 -0
  227. package/types/sdkClient/clientAttributesDecoration.d.ts +1 -1
  228. package/types/sdkManager/sdkManagerMethod.d.ts +6 -0
  229. package/types/storages/getRegisteredSegments.d.ts +10 -0
  230. package/types/storages/inMemory/TelemetryCacheInMemory.d.ts +51 -0
  231. package/types/storages/inMemory/index.d.ts +10 -0
  232. package/types/storages/inRedis/TelemetryCacheInRedis.d.ts +0 -0
  233. package/types/storages/parseSegments.d.ts +6 -0
  234. package/types/storages/pluggable/TelemetryCachePluggable.d.ts +2 -0
  235. package/types/sync/polling/fetchers/mySegmentsFetcher.d.ts +1 -1
  236. package/types/sync/polling/fetchers/types.d.ts +1 -1
  237. package/types/sync/polling/pollingManagerCS.d.ts +2 -5
  238. package/types/sync/polling/pollingManagerSS.d.ts +2 -5
  239. package/types/sync/polling/syncTasks/splitsSyncTask.copy.d.ts +35 -0
  240. package/types/sync/polling/syncTasks/splitsSyncTask.morelikeoriginal.d.ts +35 -0
  241. package/types/sync/polling/types.d.ts +0 -11
  242. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +1 -1
  243. package/types/sync/streaming/AuthClient/indexV1.d.ts +12 -0
  244. package/types/sync/streaming/AuthClient/indexV2.d.ts +8 -0
  245. package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -1
  246. package/types/sync/streaming/pushManager.d.ts +3 -7
  247. package/types/sync/streaming/pushManagerCS.d.ts +1 -0
  248. package/types/sync/streaming/pushManagerNoUsers.d.ts +13 -0
  249. package/types/sync/streaming/pushManagerSS.d.ts +1 -0
  250. package/types/sync/streaming/types.d.ts +3 -23
  251. package/types/sync/submitters/submitterManager.d.ts +2 -4
  252. package/types/sync/submitters/telemetrySyncTask.d.ts +17 -0
  253. package/types/sync/syncManagerFromFile.d.ts +2 -0
  254. package/types/sync/syncManagerFromObject.d.ts +2 -0
  255. package/types/sync/syncManagerOffline.d.ts +9 -0
  256. package/types/sync/syncManagerOnline.d.ts +3 -3
  257. package/types/trackers/telemetryRecorder.d.ts +0 -0
  258. package/types/types.d.ts +1 -0
  259. package/types/utils/EventEmitter.d.ts +4 -0
  260. package/types/utils/lang/errors.d.ts +10 -0
  261. package/types/utils/lang/index.d.ts +0 -4
  262. package/types/utils/murmur3/commons.d.ts +12 -0
  263. package/types/utils/murmur3/legacy.d.ts +2 -0
  264. package/types/utils/settingsValidation/buildMetadata.d.ts +3 -0
  265. package/types/utils/settingsValidation/localhost/index.d.ts +9 -0
  266. package/types/utils/settingsValidation/logger.d.ts +11 -0
  267. package/types/utils/settingsValidation/runtime/browser.d.ts +4 -0
  268. package/types/utils/settingsValidation/runtime/node.d.ts +5 -0
  269. package/types/utils/settingsValidation/types.d.ts +6 -6
@@ -2,8 +2,8 @@ import { ISyncManagerCS, ISyncManagerFactoryParams } from './types';
2
2
  import { submitterManagerFactory } from './submitters/submitterManager';
3
3
  import { IReadinessManager } from '../readiness/types';
4
4
  import { IStorageSync } from '../storages/types';
5
- import { IPushManagerFactoryParams, IPushManager, IPushManagerCS } from './streaming/types';
6
- import { IPollingManager, IPollingManagerCS, IPollingManagerFactoryParams } from './polling/types';
5
+ import { IPushManager } from './streaming/types';
6
+ import { IPollingManager, IPollingManagerCS } from './polling/types';
7
7
  import { PUSH_SUBSYSTEM_UP, PUSH_SUBSYSTEM_DOWN } from './streaming/constants';
8
8
  import { SYNC_START_POLLING, SYNC_CONTINUE_POLLING, SYNC_STOP_POLLING } from '../logger/constants';
9
9
 
@@ -16,44 +16,38 @@ import { SYNC_START_POLLING, SYNC_CONTINUE_POLLING, SYNC_STOP_POLLING } from '..
16
16
  * @param pushManagerFactory optional to build a SyncManager with or without streaming support
17
17
  */
18
18
  export function syncManagerOnlineFactory(
19
- pollingManagerFactory?: (...args: IPollingManagerFactoryParams) => IPollingManager,
20
- pushManagerFactory?: (...args: IPushManagerFactoryParams) => IPushManager | undefined
19
+ pollingManagerFactory?: (params: ISyncManagerFactoryParams) => IPollingManager,
20
+ pushManagerFactory?: (params: ISyncManagerFactoryParams, pollingManager: IPollingManager) => IPushManager | undefined,
21
21
  ): (params: ISyncManagerFactoryParams) => ISyncManagerCS {
22
22
 
23
23
  /**
24
24
  * SyncManager factory for modular SDK
25
25
  */
26
- return function ({
27
- settings,
28
- platform,
29
- splitApi,
30
- storage,
31
- readiness
32
- }: ISyncManagerFactoryParams): ISyncManagerCS {
26
+ return function (params: ISyncManagerFactoryParams): ISyncManagerCS {
33
27
 
34
- const log = settings.log;
28
+ const { log, streamingEnabled } = params.settings;
35
29
 
36
30
  /** Polling Manager */
37
- const pollingManager = pollingManagerFactory && pollingManagerFactory(splitApi, storage, readiness, settings);
31
+ const pollingManager = pollingManagerFactory && pollingManagerFactory(params);
38
32
 
39
33
  /** Push Manager */
40
- const pushManager = settings.streamingEnabled && pollingManager && pushManagerFactory ?
41
- pushManagerFactory(pollingManager, storage, readiness, splitApi.fetchAuth, platform, settings) :
34
+ const pushManager = streamingEnabled && pollingManager && pushManagerFactory ?
35
+ pushManagerFactory(params, pollingManager) :
42
36
  undefined;
43
37
 
44
38
  /** Submitter Manager */
45
39
  // It is not inyected as push and polling managers, because at the moment it is required
46
- const submitter = submitterManagerFactory(settings, storage, splitApi);
40
+ const submitter = submitterManagerFactory(params);
47
41
 
48
42
 
49
43
  /** Sync Manager logic */
50
44
 
51
45
  function startPolling() {
52
- if (!pollingManager!.isRunning()) {
46
+ if (pollingManager!.isRunning()) {
47
+ log.info(SYNC_CONTINUE_POLLING);
48
+ } else {
53
49
  log.info(SYNC_START_POLLING);
54
50
  pollingManager!.start();
55
- } else {
56
- log.info(SYNC_CONTINUE_POLLING);
57
51
  }
58
52
  }
59
53
 
@@ -96,7 +90,7 @@ export function syncManagerOnlineFactory(
96
90
  }
97
91
 
98
92
  // start periodic data recording (events, impressions, telemetry).
99
- submitter && submitter.start();
93
+ if (submitter) submitter.start();
100
94
  running = true;
101
95
  },
102
96
 
@@ -141,7 +135,7 @@ export function syncManagerOnlineFactory(
141
135
  // of segments since `syncAll` was already executed when starting the main client
142
136
  mySegmentsSyncTask.execute();
143
137
  }
144
- (pushManager as IPushManagerCS).add(matchingKey, mySegmentsSyncTask);
138
+ pushManager.add(matchingKey, mySegmentsSyncTask);
145
139
  } else {
146
140
  if (storage.splits.usesSegments()) mySegmentsSyncTask.start();
147
141
  }
@@ -151,7 +145,7 @@ export function syncManagerOnlineFactory(
151
145
  const mySegmentsSyncTask = (pollingManager as IPollingManagerCS).get(matchingKey);
152
146
  if (mySegmentsSyncTask) {
153
147
  // stop syncing
154
- if (pushManager) (pushManager as IPushManagerCS).remove(matchingKey);
148
+ if (pushManager) pushManager.remove(matchingKey);
155
149
  if (mySegmentsSyncTask.isRunning()) mySegmentsSyncTask.stop();
156
150
 
157
151
  (pollingManager as IPollingManagerCS).remove(matchingKey);
package/src/types.ts CHANGED
@@ -381,6 +381,10 @@ interface IBasicClient extends IStatusInterface {
381
381
  * @returns {Promise<void>}
382
382
  */
383
383
  destroy(): Promise<void>
384
+
385
+ // Whether the client implements the client-side API, i.e, with bound key, (true), or the server-side API (false).
386
+ // Exposed for internal purposes only. Not considered part of the public API, and might be renamed eventually.
387
+ isBrowserClient: boolean
384
388
  }
385
389
  /**
386
390
  * Common definitions between SDK instances for different environments interface.
@@ -1139,7 +1143,7 @@ export namespace SplitIO {
1139
1143
  /**
1140
1144
  * Removes from client's in memory attributes storage the attribute with the given key
1141
1145
  * @function removeAttribute
1142
- * @param {string} attributeName
1146
+ * @param {string} attributeName
1143
1147
  * @returns {boolean} true if attribute was removed and false otherways
1144
1148
  */
1145
1149
  removeAttribute(attributeName: string): boolean,
@@ -1,4 +1,5 @@
1
- import { isObject, shallowClone, isString, isFiniteNumber, isBoolean } from '../lang';
1
+ import { isObject, isString, isFiniteNumber, isBoolean } from '../lang';
2
+ import { objectAssign } from '../lang/objectAssign';
2
3
  import { SplitIO } from '../../types';
3
4
  import { ILogger } from '../../logger/types';
4
5
  import { ERROR_NOT_PLAIN_OBJECT, ERROR_SIZE_EXCEEDED, WARN_SETTING_NULL, WARN_TRIMMING_PROPERTIES } from '../../logger/constants';
@@ -22,7 +23,8 @@ export function validateEventProperties(log: ILogger, maybeProperties: any, meth
22
23
  }
23
24
 
24
25
  const keys = Object.keys(maybeProperties);
25
- const clone = shallowClone(maybeProperties);
26
+ // Shallow clone
27
+ const clone = objectAssign({}, maybeProperties);
26
28
  // To avoid calculating the size twice we'll return it from here.
27
29
  const output = {
28
30
  properties: clone,
@@ -194,20 +194,6 @@ export function merge(target: { [key: string]: any }, source: { [key: string]: a
194
194
  return res;
195
195
  }
196
196
 
197
- /**
198
- * Shallow clone an object
199
- */
200
- export function shallowClone(obj: any): any {
201
- const keys = Object.keys(obj);
202
- const output: Record<string, any> = {};
203
-
204
- for (let i = 0; i < keys.length; i++) {
205
- output[keys[i]] = obj[keys[i]];
206
- }
207
-
208
- return output;
209
- }
210
-
211
197
  /**
212
198
  * Checks if the target string starts with the sub string.
213
199
  */
@@ -0,0 +1,48 @@
1
+ // Deprecated hashing function, used for split bucketing. Replaced by murmur3
2
+
3
+ //
4
+ // JAVA reference implementation for the hashing function.
5
+ //
6
+ // int h = 0;
7
+ // for (int i = 0; i < key.length(); i++) {
8
+ // h = 31 * h + key.charAt(i);
9
+ // }
10
+ // return h ^ seed; // XOR the hash and seed
11
+ //
12
+
13
+ function ToInteger(x: number) {
14
+ x = Number(x);
15
+ return x < 0 ? Math.ceil(x) : Math.floor(x);
16
+ }
17
+
18
+ function modulo(a: number, b: number) {
19
+ return a - Math.floor(a / b) * b;
20
+ }
21
+
22
+ function ToUint32(x: number) {
23
+ return modulo(ToInteger(x), Math.pow(2, 32));
24
+ }
25
+
26
+ function ToInt32(x: number) {
27
+ let uint32 = ToUint32(x);
28
+
29
+ if (uint32 >= Math.pow(2, 31)) {
30
+ return uint32 - Math.pow(2, 32);
31
+ } else {
32
+ return uint32;
33
+ }
34
+ }
35
+
36
+ export function hash(str: string, seed: number): number {
37
+ let h = 0;
38
+
39
+ for (let i = 0; i < str.length; i++) {
40
+ h = ToInt32(ToInt32(31 * h) + str.charCodeAt(i));
41
+ }
42
+
43
+ return ToInt32(h ^ seed);
44
+ }
45
+
46
+ export function bucket(str: string, seed: number): number {
47
+ return Math.abs(hash(str, seed) % 100) + 1;
48
+ }
@@ -3,7 +3,7 @@ export function timeout<T>(ms: number, promise: Promise<T>): Promise<T> {
3
3
 
4
4
  return new Promise((resolve, reject) => {
5
5
  const tid = setTimeout(() => {
6
- reject(new Error(`Operation timed out because it exceeded the configured time limit of ${ms}ms.`));
6
+ reject(new Error(`Operation timed out because it exceeded the configured time limit of ${ms} ms.`));
7
7
  }, ms);
8
8
 
9
9
  promise.then((res) => {
@@ -78,11 +78,6 @@ const base = {
78
78
  localhostMode: undefined
79
79
  },
80
80
 
81
- runtime: {
82
- ip: false,
83
- hostname: false
84
- },
85
-
86
81
  // Logger
87
82
  log: undefined
88
83
  };
@@ -139,7 +134,7 @@ export function settingsValidation(config: unknown, validationParams: ISettingsV
139
134
 
140
135
  // Current ip/hostname information
141
136
  // @ts-ignore, modify readonly prop
142
- if (runtime) withDefaults.runtime = runtime(withDefaults);
137
+ withDefaults.runtime = runtime(withDefaults);
143
138
 
144
139
  // ensure a valid list of integrations.
145
140
  // `integrations` returns an array of valid integration items.
@@ -0,0 +1,6 @@
1
+ export function validateRuntime() {
2
+ return {
3
+ ip: false,
4
+ hostname: false
5
+ };
6
+ }
@@ -0,0 +1,22 @@
1
+ import osFunction from 'os';
2
+ import ipFunction from 'ip';
3
+
4
+ import { UNKNOWN, NA, CONSUMER_MODE } from '../../constants';
5
+ import { ISettings } from '../../../types';
6
+
7
+ export function validateRuntime(settings: ISettings) {
8
+ const isIPAddressesEnabled = settings.core.IPAddressesEnabled === true;
9
+ const isConsumerMode = settings.mode === CONSUMER_MODE;
10
+
11
+ // If the values are not available, default to false (for standalone) or "unknown" (for consumer mode, to be used on Redis keys)
12
+ let ip = ipFunction.address() || (isConsumerMode ? UNKNOWN : false);
13
+ let hostname = osFunction.hostname() || (isConsumerMode ? UNKNOWN : false);
14
+
15
+ if (!isIPAddressesEnabled) { // If IPAddresses setting is not enabled, set as false (for standalone) or "NA" (for consumer mode, to be used on Redis keys)
16
+ ip = hostname = isConsumerMode ? NA : false;
17
+ }
18
+
19
+ return {
20
+ ip, hostname
21
+ };
22
+ }
@@ -6,15 +6,15 @@ import { ISettings } from '../../types';
6
6
  */
7
7
  export interface ISettingsValidationParams {
8
8
  /**
9
- * Object of values to overwrite default settings.
10
- * Version and startup properties are mandatory, because these values are not part of the base setting.
9
+ * Object of values to overwrite base settings.
10
+ * Version and startup properties are required, because they are not defined in the base settings.
11
11
  */
12
12
  defaults: Partial<ISettings> & { version: string } & { startup: ISettings['startup'] },
13
- /** Function to overwrite runtime values (ip and hostname) which are false by default */
14
- runtime?: (settings: ISettings) => ISettings['runtime'],
15
- /** Storage validator */
13
+ /** Function to define runtime values (`settings.runtime`) */
14
+ runtime: (settings: ISettings) => ISettings['runtime'],
15
+ /** Storage validator (`settings.storage`) */
16
16
  storage?: (settings: ISettings) => ISettings['storage'],
17
- /** Integrations validator */
17
+ /** Integrations validator (`settings.integrations`) */
18
18
  integrations?: (settings: ISettings) => ISettings['integrations'],
19
19
  /** Logger validator (`settings.debug`) */
20
20
  logger: (settings: ISettings) => ISettings['log'],
@@ -0,0 +1,3 @@
1
+ import { IIntegrationFactoryParams } from '../types';
2
+ import { GoogleAnalyticsToSplitOptions } from './types';
3
+ export declare function GoogleAnalyticsToSplit(options: GoogleAnalyticsToSplitOptions): (params: IIntegrationFactoryParams) => void;
@@ -0,0 +1,4 @@
1
+ import { IIntegrationFactoryParams } from '../types';
2
+ import SplitToGa from './SplitToGa';
3
+ import { SplitToGoogleAnalyticsOptions } from './types';
4
+ export declare function SplitToGoogleAnalytics(options?: SplitToGoogleAnalyticsOptions): (params: IIntegrationFactoryParams) => SplitToGa;
@@ -0,0 +1,2 @@
1
+ import { ICodes } from './types';
2
+ export declare const codes: ICodes;
@@ -0,0 +1,117 @@
1
+ export declare const DEBUG_0 = 0;
2
+ export declare const DEBUG_1 = 1;
3
+ export declare const DEBUG_2 = 2;
4
+ export declare const DEBUG_3 = 3;
5
+ export declare const DEBUG_4 = 4;
6
+ export declare const DEBUG_5 = 5;
7
+ export declare const DEBUG_6 = 6;
8
+ export declare const DEBUG_7 = 7;
9
+ export declare const DEBUG_8 = 8;
10
+ export declare const DEBUG_9 = 9;
11
+ export declare const DEBUG_10 = 10;
12
+ export declare const DEBUG_11 = 11;
13
+ export declare const DEBUG_12 = 12;
14
+ export declare const DEBUG_13 = 13;
15
+ export declare const DEBUG_14 = 14;
16
+ export declare const DEBUG_15 = 15;
17
+ export declare const DEBUG_16 = 16;
18
+ export declare const DEBUG_17 = 17;
19
+ export declare const DEBUG_18 = 18;
20
+ export declare const DEBUG_19 = 19;
21
+ export declare const DEBUG_20 = 20;
22
+ export declare const DEBUG_21 = 21;
23
+ export declare const DEBUG_22 = 22;
24
+ export declare const DEBUG_23 = 23;
25
+ export declare const DEBUG_24 = 24;
26
+ export declare const DEBUG_25 = 25;
27
+ export declare const DEBUG_31 = 31;
28
+ export declare const DEBUG_32 = 32;
29
+ export declare const DEBUG_33 = 33;
30
+ export declare const DEBUG_36 = 36;
31
+ export declare const DEBUG_42 = 42;
32
+ export declare const DEBUG_43 = 43;
33
+ export declare const DEBUG_44 = 44;
34
+ export declare const DEBUG_45 = 45;
35
+ export declare const DEBUG_46 = 46;
36
+ export declare const DEBUG_47 = 47;
37
+ export declare const DEBUG_48 = 48;
38
+ export declare const DEBUG_49 = 49;
39
+ export declare const DEBUG_50 = 50;
40
+ export declare const DEBUG_51 = 51;
41
+ export declare const INFO_0 = 100;
42
+ export declare const INFO_1 = 101;
43
+ export declare const INFO_2 = 102;
44
+ export declare const INFO_3 = 103;
45
+ export declare const INFO_4 = 104;
46
+ export declare const INFO_5 = 105;
47
+ export declare const INFO_6 = 106;
48
+ export declare const INFO_7 = 107;
49
+ export declare const INFO_8 = 108;
50
+ export declare const INFO_9 = 109;
51
+ export declare const INFO_10 = 110;
52
+ export declare const INFO_11 = 111;
53
+ export declare const INFO_12 = 112;
54
+ export declare const INFO_13 = 113;
55
+ export declare const INFO_14 = 114;
56
+ export declare const INFO_15 = 115;
57
+ export declare const INFO_16 = 116;
58
+ export declare const INFO_17 = 117;
59
+ export declare const INFO_18 = 118;
60
+ export declare const INFO_19 = 119;
61
+ export declare const INFO_20 = 120;
62
+ export declare const INFO_21 = 121;
63
+ export declare const WARN_0 = 200;
64
+ export declare const WARN_1 = 201;
65
+ export declare const WARN_2 = 202;
66
+ export declare const WARN_4 = 204;
67
+ export declare const WARN_5 = 205;
68
+ export declare const WARN_6 = 206;
69
+ export declare const WARN_7 = 207;
70
+ export declare const WARN_8 = 208;
71
+ export declare const WARN_9 = 209;
72
+ export declare const WARN_10 = 210;
73
+ export declare const WARN_11 = 211;
74
+ export declare const WARN_12 = 212;
75
+ export declare const WARN_13 = 213;
76
+ export declare const WARN_14 = 214;
77
+ export declare const WARN_15 = 215;
78
+ export declare const WARN_17 = 217;
79
+ export declare const WARN_18 = 218;
80
+ export declare const WARN_19 = 219;
81
+ export declare const WARN_20 = 220;
82
+ export declare const WARN_21 = 221;
83
+ export declare const WARN_22 = 222;
84
+ export declare const WARN_23 = 223;
85
+ export declare const WARN_24 = 224;
86
+ export declare const WARN_25 = 225;
87
+ export declare const ERROR_0 = 300;
88
+ export declare const ERROR_2 = 302;
89
+ export declare const ERROR_3 = 303;
90
+ export declare const ERROR_4 = 304;
91
+ export declare const ERROR_5 = 305;
92
+ export declare const ERROR_7 = 307;
93
+ export declare const ERROR_9 = 309;
94
+ export declare const ERROR_10 = 310;
95
+ export declare const ERROR_11 = 311;
96
+ export declare const ERROR_12 = 312;
97
+ export declare const ERROR_13 = 313;
98
+ export declare const ERROR_14 = 314;
99
+ export declare const ERROR_15 = 315;
100
+ export declare const ERROR_16 = 316;
101
+ export declare const ERROR_17 = 317;
102
+ export declare const ERROR_18 = 318;
103
+ export declare const ERROR_19 = 319;
104
+ export declare const ERROR_20 = 320;
105
+ export declare const ERROR_21 = 321;
106
+ export declare const ERROR_22 = 322;
107
+ export declare const ERROR_23 = 323;
108
+ export declare const ERROR_24 = 324;
109
+ export declare const ERROR_25 = 325;
110
+ export declare const ERROR_26 = 326;
111
+ export declare const ERROR_32 = 332;
112
+ export declare const ERROR_33 = 333;
113
+ export declare const ERROR_34 = 334;
114
+ export declare const ERROR_35 = 335;
115
+ export declare const ERROR_36 = 336;
116
+ export declare const ERROR_37 = 337;
117
+ export declare const ERROR_38 = 338;
@@ -0,0 +1,2 @@
1
+ export declare const DEBUG_26 = 26;
2
+ export declare const DEBUG_27 = 27;
@@ -0,0 +1,14 @@
1
+ export declare const DEBUG_28 = 28;
2
+ export declare const DEBUG_29 = 29;
3
+ export declare const DEBUG_30 = 30;
4
+ export declare const ERROR_1 = 301;
5
+ export declare const DEBUG_39 = 39;
6
+ export declare const DEBUG_40 = 40;
7
+ export declare const DEBUG_41 = 41;
8
+ export declare const ERROR_8 = 308;
9
+ export declare const DEBUG_34 = 34;
10
+ export declare const DEBUG_35 = 35;
11
+ export declare const ERROR_6 = 306;
12
+ export declare const WARN_3 = 203;
13
+ export declare const DEBUG_37 = 37;
14
+ export declare const DEBUG_38 = 38;
@@ -0,0 +1 @@
1
+ export declare const codesDebug: [number, string][];
@@ -0,0 +1 @@
1
+ export declare const codesDebugBrowser: [number, string][];
@@ -0,0 +1 @@
1
+ export declare const codesDebugNode: [number, string][];
@@ -0,0 +1 @@
1
+ export declare const codesError: [number, string][];
@@ -0,0 +1 @@
1
+ export declare const codesErrorNode: [number, string][];
@@ -0,0 +1 @@
1
+ export declare const codesInfo: [number, string][];
@@ -0,0 +1 @@
1
+ export declare const codesWarn: [number, string][];
@@ -0,0 +1 @@
1
+ export declare const codesWarnNode: [number, string][];
@@ -0,0 +1,2 @@
1
+ import { Logger } from '.';
2
+ export declare const debugLogger: Logger;
@@ -0,0 +1,2 @@
1
+ import { Logger } from '.';
2
+ export declare const errorLogger: Logger;
@@ -0,0 +1,2 @@
1
+ import { Logger } from '.';
2
+ export declare const infoLogger: Logger;
@@ -0,0 +1 @@
1
+ export declare const codesDebugBrowser: [number, string][];
@@ -0,0 +1 @@
1
+ export declare const codesDebugNode: [number, string][];
@@ -0,0 +1 @@
1
+ export declare const codesErrorNode: [number, string][];
@@ -0,0 +1 @@
1
+ export declare const codesWarnNode: [number, string][];
@@ -0,0 +1,2 @@
1
+ import { ILogger } from './types';
2
+ export declare const noopLogger: ILogger;
@@ -6,8 +6,12 @@ export interface ILoggerOptions {
6
6
  }
7
7
  export interface ILogger {
8
8
  setLogLevel(logLevel: LogLevel): void;
9
+ debug(msg: unknown): void;
9
10
  debug(msg: string | number, args?: any[]): void;
11
+ info(msg: unknown): void;
10
12
  info(msg: string | number, args?: any[]): void;
13
+ warn(msg: unknown): void;
11
14
  warn(msg: string | number, args?: any[]): void;
15
+ error(msg: unknown): void;
12
16
  error(msg: string | number, args?: any[]): void;
13
17
  }
@@ -0,0 +1,2 @@
1
+ import { Logger } from '.';
2
+ export declare const warnLogger: Logger;
@@ -8,7 +8,7 @@ export declare function clientAttributesDecoration<TClient extends SplitIO.IClie
8
8
  getTreatmentWithConfig: (maybeKey: SplitIO.SplitKey, maybeSplit: string, maybeAttributes?: SplitIO.Attributes | undefined) => SplitIO.TreatmentWithConfig | SplitIO.AsyncTreatmentWithConfig;
9
9
  getTreatments: (maybeKey: SplitIO.SplitKey, maybeSplits: string[], maybeAttributes?: SplitIO.Attributes | undefined) => SplitIO.Treatments | SplitIO.AsyncTreatments;
10
10
  getTreatmentsWithConfig: (maybeKey: SplitIO.SplitKey, maybeSplits: string[], maybeAttributes?: SplitIO.Attributes | undefined) => SplitIO.TreatmentsWithConfig | SplitIO.AsyncTreatmentsWithConfig;
11
- track: (maybeKey: SplitIO.SplitKey, maybeTT: string, maybeEvent: string, maybeEventValue?: number | undefined, maybeProperties?: SplitIO.Properties | undefined) => import("../dtos/types").MaybeThenable<boolean>;
11
+ track: (maybeKey: SplitIO.SplitKey, maybeTT: string, maybeEvent: string, maybeEventValue?: number | undefined, maybeProperties?: SplitIO.Properties | undefined) => boolean | Promise<boolean>;
12
12
  /**
13
13
  * Add an attribute to client's in memory attributes storage
14
14
  *
@@ -0,0 +1,6 @@
1
+ import { ISdkClientFactoryParams } from '../sdkClient/types';
2
+ import { SplitIO } from '../types';
3
+ /**
4
+ * Factory of client method for server-side SDKs (ISDK and IAsyncSDK)
5
+ */
6
+ export declare function sdkManagerMethodFactory(params: ISdkClientFactoryParams): () => SplitIO.IManager | SplitIO.IAsyncManager;
@@ -0,0 +1,10 @@
1
+ import { ISplit } from '../dtos/types';
2
+ /**
3
+ * Collect segments from a raw split definition.
4
+ * Exported for testing purposes.
5
+ */
6
+ export declare function _parseSegments({ conditions }: ISplit): import("../utils/lang/sets").ISet<string>;
7
+ /**
8
+ * Computes the set of segments used by splits.
9
+ */
10
+ export declare function getRegisteredSegments(splitDefs: string[]): string[];
@@ -0,0 +1,51 @@
1
+ import { ImpressionDataType, EventDataType, StreamingEvent, Method, OperationType } from '../../sync/submitters/types';
2
+ import { TelemetryCacheSync } from '../types';
3
+ export declare class TelemetryCacheInMemory implements TelemetryCacheSync {
4
+ private timeUntilReady?;
5
+ getTimeUntilReady(): number | undefined;
6
+ recordTimeUntilReady(ms: number): void;
7
+ private timeUntilReadyFromCache?;
8
+ getTimeUntilReadyFromCache(): number | undefined;
9
+ recordTimeUntilReadyFromCache(ms: number): void;
10
+ private notReadyUsage;
11
+ getNonReadyUsage(): number;
12
+ recordNonReadyUsage(): void;
13
+ private impressionStats;
14
+ getImpressionStats(type: ImpressionDataType): number;
15
+ recordImpressionStats(type: ImpressionDataType, count: number): void;
16
+ private eventStats;
17
+ getEventStats(type: EventDataType): number;
18
+ recordEventStats(type: EventDataType, count: number): void;
19
+ private lastSync;
20
+ getLastSynchronization(): Record<OperationType, number | undefined>;
21
+ recordSuccessfulSync(resource: OperationType, timeMs: number): void;
22
+ private httpErrors;
23
+ popHttpErrors(): Record<OperationType, {
24
+ [statusCode: string]: number;
25
+ }>;
26
+ recordSyncError(resource: OperationType, status: number): void;
27
+ private httpLatencies;
28
+ popHttpLatencies(): Record<OperationType, number[]>;
29
+ recordSyncLatency(resource: OperationType, latencyMs: number): void;
30
+ private authRejections;
31
+ popAuthRejections(): number;
32
+ recordAuthRejections(): void;
33
+ private tokenRefreshes;
34
+ popTokenRefreshes(): number;
35
+ recordTokenRefreshes(): void;
36
+ private streamingEvents;
37
+ popStreamingEvents(): StreamingEvent[];
38
+ recordStreamingEvents(streamingEvent: StreamingEvent): void;
39
+ private tags;
40
+ popTags(): string[];
41
+ addTag(tag: string): void;
42
+ private sessionLength?;
43
+ getSessionLength(): number | undefined;
44
+ recordSessionLength(ms: number): void;
45
+ private exceptions;
46
+ popExceptions(): Record<Method, number>;
47
+ recordException(method: Method): void;
48
+ private latencies;
49
+ popLatencies(): Record<Method, number[]>;
50
+ recordLatency(method: Method, latencyMs: number): void;
51
+ }
@@ -0,0 +1,10 @@
1
+ import { IStorageFactoryParams, IStorageSync } from '../types';
2
+ /**
3
+ * InMemory storage factory for standalone server-side SplitFactory
4
+ *
5
+ * @param params parameters required by EventsCacheSync
6
+ */
7
+ export declare function InMemoryStorageFactory(params: IStorageFactoryParams): IStorageSync;
8
+ export declare namespace InMemoryStorageFactory {
9
+ var type: import("../types").StorageType;
10
+ }
@@ -0,0 +1,6 @@
1
+ import { ISplit } from '../dtos/types';
2
+ import { ISet } from '../utils/lang/sets';
3
+ /**
4
+ * Collect segments from a list of splits.
5
+ */
6
+ export declare function parseSegments(splits: ISplit[]): ISet<string>;
@@ -0,0 +1,2 @@
1
+ export declare class TelemetryCachePluggable {
2
+ }
@@ -4,4 +4,4 @@ import { IMySegmentsFetcher } from './types';
4
4
  * Factory of MySegments fetcher.
5
5
  * MySegments fetcher is a wrapper around `mySegments` API service that parses the response and handle errors.
6
6
  */
7
- export declare function mySegmentsFetcherFactory(fetchMySegments: IFetchMySegments, userMatchingKey: string): IMySegmentsFetcher;
7
+ export declare function mySegmentsFetcherFactory(fetchMySegments: IFetchMySegments): IMySegmentsFetcher;