@splitsoftware/splitio-commons 1.2.0 → 1.2.1-rc.3

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 (281) hide show
  1. package/cjs/evaluator/Engine.js +6 -6
  2. package/cjs/evaluator/combiners/and.js +1 -1
  3. package/cjs/evaluator/combiners/ifelseif.js +2 -2
  4. package/cjs/evaluator/condition/engineUtils.js +2 -2
  5. package/cjs/evaluator/condition/index.js +4 -4
  6. package/cjs/evaluator/index.js +5 -5
  7. package/cjs/evaluator/matchers/cont_all.js +1 -1
  8. package/cjs/evaluator/matchers/cont_any.js +1 -1
  9. package/cjs/evaluator/matchers/cont_str.js +1 -1
  10. package/cjs/evaluator/matchers/dependency.js +1 -1
  11. package/cjs/evaluator/matchers/eq_set.js +1 -1
  12. package/cjs/evaluator/matchers/ew.js +3 -3
  13. package/cjs/evaluator/matchers/part_of.js +1 -1
  14. package/cjs/evaluator/matchers/segment.js +1 -1
  15. package/cjs/evaluator/matchers/sw.js +1 -1
  16. package/cjs/evaluator/matchers/whitelist.js +1 -1
  17. package/cjs/evaluator/matchersTransform/index.js +12 -12
  18. package/cjs/evaluator/parser/index.js +6 -6
  19. package/cjs/evaluator/treatments/index.js +1 -1
  20. package/cjs/evaluator/value/index.js +1 -1
  21. package/cjs/evaluator/value/sanitize.js +4 -4
  22. package/cjs/integrations/browser.js +3 -3
  23. package/cjs/integrations/ga/GaToSplit.js +14 -14
  24. package/cjs/integrations/ga/GoogleAnalyticsToSplit.js +5 -3
  25. package/cjs/integrations/ga/SplitToGa.js +1 -1
  26. package/cjs/integrations/ga/SplitToGoogleAnalytics.js +4 -2
  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 +2 -2
  33. package/cjs/logger/messages/info.js +5 -5
  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 +46 -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/integrations/ga/GoogleAnalyticsToSplit.js +4 -2
  143. package/esm/integrations/ga/SplitToGoogleAnalytics.js +4 -2
  144. package/esm/logger/messages/error.js +1 -1
  145. package/esm/logger/messages/info.js +4 -4
  146. package/esm/sdkClient/client.js +2 -1
  147. package/esm/sdkClient/clientCS.js +2 -1
  148. package/esm/services/splitApi.js +2 -1
  149. package/esm/services/splitHttpClient.js +1 -1
  150. package/esm/storages/inRedis/RedisAdapter.js +7 -1
  151. package/esm/sync/offline/splitsParser/splitsParserFromFile.js +1 -1
  152. package/esm/sync/polling/fetchers/mySegmentsFetcher.js +2 -2
  153. package/esm/sync/polling/fetchers/segmentChangesFetcher.js +2 -2
  154. package/esm/sync/polling/pollingManagerCS.js +2 -1
  155. package/esm/sync/polling/pollingManagerSS.js +2 -1
  156. package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +1 -1
  157. package/esm/sync/polling/updaters/mySegmentsUpdater.js +2 -2
  158. package/esm/sync/streaming/AuthClient/index.js +1 -2
  159. package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +1 -1
  160. package/esm/sync/streaming/pushManager.js +34 -23
  161. package/esm/sync/submitters/submitterManager.js +2 -1
  162. package/esm/sync/syncManagerOnline.js +12 -12
  163. package/esm/utils/inputValidation/eventProperties.js +4 -2
  164. package/esm/utils/inputValidation/key.js +2 -1
  165. package/esm/utils/lang/index.js +2 -13
  166. package/esm/utils/murmur3/legacy.js +39 -0
  167. package/esm/utils/promise/timeout.js +1 -1
  168. package/esm/utils/settingsValidation/index.js +1 -6
  169. package/esm/utils/settingsValidation/runtime/browser.js +6 -0
  170. package/esm/utils/settingsValidation/runtime/node.js +17 -0
  171. package/package.json +8 -7
  172. package/src/evaluator/matchers/ew.ts +4 -4
  173. package/src/integrations/ga/GoogleAnalyticsToSplit.ts +7 -4
  174. package/src/integrations/ga/SplitToGoogleAnalytics.ts +7 -4
  175. package/src/integrations/types.ts +5 -0
  176. package/src/logger/.DS_Store +0 -0
  177. package/src/logger/messages/error.ts +1 -1
  178. package/src/logger/messages/info.ts +4 -4
  179. package/src/logger/types.ts +4 -0
  180. package/src/sdkClient/client.ts +2 -1
  181. package/src/sdkClient/clientCS.ts +3 -1
  182. package/src/services/splitHttpClient.ts +1 -1
  183. package/src/storages/types.ts +1 -1
  184. package/src/sync/offline/splitsParser/splitsParserFromFile.ts +1 -1
  185. package/src/sync/polling/fetchers/mySegmentsFetcher.ts +2 -1
  186. package/src/sync/polling/fetchers/types.ts +1 -0
  187. package/src/sync/polling/pollingManagerCS.ts +3 -6
  188. package/src/sync/polling/pollingManagerSS.ts +3 -8
  189. package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +2 -1
  190. package/src/sync/polling/types.ts +0 -12
  191. package/src/sync/polling/updaters/mySegmentsUpdater.ts +2 -1
  192. package/src/sync/streaming/AuthClient/index.ts +1 -2
  193. package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
  194. package/src/sync/streaming/pushManager.ts +39 -37
  195. package/src/sync/streaming/types.ts +5 -25
  196. package/src/sync/submitters/submitterManager.ts +4 -8
  197. package/src/sync/syncManagerOnline.ts +16 -22
  198. package/src/types.ts +5 -1
  199. package/src/utils/inputValidation/eventProperties.ts +4 -2
  200. package/src/utils/lang/index.ts +0 -14
  201. package/src/utils/murmur3/legacy.ts +48 -0
  202. package/src/utils/promise/timeout.ts +1 -1
  203. package/src/utils/settingsValidation/index.ts +1 -6
  204. package/src/utils/settingsValidation/runtime/browser.ts +8 -0
  205. package/src/utils/settingsValidation/runtime/node.ts +22 -0
  206. package/src/utils/settingsValidation/types.ts +6 -6
  207. package/types/integrations/ga/GaToSplitPlugin.d.ts +3 -0
  208. package/types/integrations/ga/GoogleAnalyticsToSplit.d.ts +2 -2
  209. package/types/integrations/ga/SplitToGaPlugin.d.ts +4 -0
  210. package/types/integrations/ga/SplitToGoogleAnalytics.d.ts +2 -3
  211. package/types/integrations/types.d.ts +4 -0
  212. package/types/logger/browser/{DebugLogger.d.ts → debugLogger.d.ts} +0 -0
  213. package/types/logger/browser/{ErrorLogger.d.ts → errorLogger.d.ts} +0 -0
  214. package/types/logger/browser/{InfoLogger.d.ts → infoLogger.d.ts} +0 -0
  215. package/types/logger/browser/{WarnLogger.d.ts → warnLogger.d.ts} +0 -0
  216. package/types/logger/codes.d.ts +2 -0
  217. package/types/logger/codesConstants.d.ts +117 -0
  218. package/types/logger/codesConstantsBrowser.d.ts +2 -0
  219. package/types/logger/codesConstantsNode.d.ts +14 -0
  220. package/types/logger/codesDebug.d.ts +1 -0
  221. package/types/logger/codesDebugBrowser.d.ts +1 -0
  222. package/types/logger/codesDebugNode.d.ts +1 -0
  223. package/types/logger/codesError.d.ts +1 -0
  224. package/types/logger/codesErrorNode.d.ts +1 -0
  225. package/types/logger/codesInfo.d.ts +1 -0
  226. package/types/logger/codesWarn.d.ts +1 -0
  227. package/types/logger/codesWarnNode.d.ts +1 -0
  228. package/types/logger/debugLogger.d.ts +2 -0
  229. package/types/logger/errorLogger.d.ts +2 -0
  230. package/types/logger/infoLogger.d.ts +2 -0
  231. package/types/logger/messages/debugBrowser.d.ts +1 -0
  232. package/types/logger/messages/debugNode.d.ts +1 -0
  233. package/types/logger/messages/errorNode.d.ts +1 -0
  234. package/types/logger/messages/warnNode.d.ts +1 -0
  235. package/types/logger/noopLogger.d.ts +2 -0
  236. package/types/logger/types.d.ts +4 -0
  237. package/types/logger/warnLogger.d.ts +2 -0
  238. package/types/sdkClient/clientAttributesDecoration.d.ts +1 -1
  239. package/types/sdkManager/sdkManagerMethod.d.ts +6 -0
  240. package/types/storages/getRegisteredSegments.d.ts +10 -0
  241. package/types/storages/inMemory/TelemetryCacheInMemory.d.ts +51 -0
  242. package/types/storages/inMemory/index.d.ts +10 -0
  243. package/types/storages/inRedis/TelemetryCacheInRedis.d.ts +0 -0
  244. package/types/storages/parseSegments.d.ts +6 -0
  245. package/types/storages/pluggable/TelemetryCachePluggable.d.ts +2 -0
  246. package/types/storages/types.d.ts +1 -1
  247. package/types/sync/polling/fetchers/mySegmentsFetcher.d.ts +1 -1
  248. package/types/sync/polling/fetchers/types.d.ts +1 -1
  249. package/types/sync/polling/pollingManagerCS.d.ts +2 -5
  250. package/types/sync/polling/pollingManagerSS.d.ts +2 -5
  251. package/types/sync/polling/syncTasks/splitsSyncTask.copy.d.ts +35 -0
  252. package/types/sync/polling/syncTasks/splitsSyncTask.morelikeoriginal.d.ts +35 -0
  253. package/types/sync/polling/types.d.ts +0 -11
  254. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +1 -1
  255. package/types/sync/streaming/AuthClient/indexV1.d.ts +12 -0
  256. package/types/sync/streaming/AuthClient/indexV2.d.ts +8 -0
  257. package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -1
  258. package/types/sync/streaming/pushManager.d.ts +3 -7
  259. package/types/sync/streaming/pushManagerCS.d.ts +1 -0
  260. package/types/sync/streaming/pushManagerNoUsers.d.ts +13 -0
  261. package/types/sync/streaming/pushManagerSS.d.ts +1 -0
  262. package/types/sync/streaming/types.d.ts +3 -23
  263. package/types/sync/submitters/submitterManager.d.ts +2 -4
  264. package/types/sync/submitters/telemetrySyncTask.d.ts +17 -0
  265. package/types/sync/syncManagerFromFile.d.ts +2 -0
  266. package/types/sync/syncManagerFromObject.d.ts +2 -0
  267. package/types/sync/syncManagerOffline.d.ts +9 -0
  268. package/types/sync/syncManagerOnline.d.ts +3 -3
  269. package/types/trackers/telemetryRecorder.d.ts +0 -0
  270. package/types/types.d.ts +1 -0
  271. package/types/utils/EventEmitter.d.ts +4 -0
  272. package/types/utils/lang/errors.d.ts +10 -0
  273. package/types/utils/lang/index.d.ts +0 -4
  274. package/types/utils/murmur3/commons.d.ts +12 -0
  275. package/types/utils/murmur3/legacy.d.ts +2 -0
  276. package/types/utils/settingsValidation/buildMetadata.d.ts +3 -0
  277. package/types/utils/settingsValidation/localhost/index.d.ts +9 -0
  278. package/types/utils/settingsValidation/logger.d.ts +11 -0
  279. package/types/utils/settingsValidation/runtime/browser.d.ts +2 -0
  280. package/types/utils/settingsValidation/runtime/node.d.ts +2 -0
  281. package/types/utils/settingsValidation/types.d.ts +6 -6
@@ -21,12 +21,13 @@ export function mySegmentsSyncTaskFactory(
21
21
  settings.log,
22
22
  mySegmentsUpdaterFactory(
23
23
  settings.log,
24
- mySegmentsFetcherFactory(fetchMySegments, matchingKey),
24
+ mySegmentsFetcherFactory(fetchMySegments),
25
25
  storage.splits,
26
26
  storage.segments,
27
27
  readiness.segments,
28
28
  settings.startup.requestTimeoutBeforeReady,
29
29
  settings.startup.retriesOnFailureBeforeReady,
30
+ matchingKey
30
31
  ),
31
32
  settings.scheduler.segmentsRefreshRate,
32
33
  'mySegmentsUpdater',
@@ -1,7 +1,5 @@
1
1
  import { IReadinessManager } from '../../readiness/types';
2
- import { ISplitApi } from '../../services/types';
3
2
  import { IStorageSync } from '../../storages/types';
4
- import { ISettings } from '../../types';
5
3
  import { SegmentsData } from '../streaming/SSEHandler/types';
6
4
  import { ITask, ISyncTask } from '../types';
7
5
 
@@ -23,13 +21,3 @@ export interface IPollingManagerCS extends IPollingManager {
23
21
  remove(matchingKey: string): void;
24
22
  get(matchingKey: string): ISegmentsSyncTask | undefined
25
23
  }
26
-
27
- /**
28
- * Signature of polling manager factory/constructor
29
- */
30
- export type IPollingManagerFactoryParams = [
31
- splitApi: ISplitApi,
32
- storage: IStorageSync,
33
- readiness: IReadinessManager,
34
- settings: ISettings,
35
- ]
@@ -23,6 +23,7 @@ export function mySegmentsUpdaterFactory(
23
23
  segmentsEventEmitter: ISegmentsEventEmitter,
24
24
  requestTimeoutBeforeReady: number,
25
25
  retriesOnFailureBeforeReady: number,
26
+ matchingKey: string
26
27
  ): IMySegmentsUpdater {
27
28
 
28
29
  let readyOnAlreadyExistentState = true;
@@ -69,7 +70,7 @@ export function mySegmentsUpdaterFactory(
69
70
  // If segmentsData is provided, there is no need to fetch mySegments
70
71
  new Promise((res) => { updateSegments(segmentsData); res(true); }) :
71
72
  // If not provided, fetch mySegments
72
- mySegmentsFetcher(noCache, _promiseDecorator).then(segments => {
73
+ mySegmentsFetcher(matchingKey, noCache, _promiseDecorator).then(segments => {
73
74
  // Only when we have downloaded segments completely, we should not keep retrying anymore
74
75
  startingUp = false;
75
76
 
@@ -17,8 +17,7 @@ export function authenticateFactory(fetchAuth: IFetchAuth): IAuthenticate {
17
17
  * @param {string[] | undefined} userKeys set of user Keys to track MY_SEGMENTS_CHANGES. It is undefined for server-side API.
18
18
  */
19
19
  return function authenticate(userKeys?: string[]): Promise<IAuthToken> {
20
- let authPromise = fetchAuth(userKeys); // errors handled by fetchAuth service
21
- return authPromise
20
+ return fetchAuth(userKeys)
22
21
  .then(resp => resp.json())
23
22
  .then(json => {
24
23
  if (json.token) { // empty token when `"pushEnabled": false`
@@ -19,7 +19,7 @@ export class SegmentsUpdateWorker implements IUpdateWorker {
19
19
  * @param {Object} segmentsCache segments data cache
20
20
  * @param {Object} segmentsSyncTask task for syncing segments data
21
21
  */
22
- constructor(segmentsCache: ISegmentsCacheSync, segmentsSyncTask: ISegmentsSyncTask) {
22
+ constructor(segmentsSyncTask: ISegmentsSyncTask, segmentsCache: ISegmentsCacheSync) {
23
23
  this.segmentsCache = segmentsCache;
24
24
  this.segmentsSyncTask = segmentsSyncTask;
25
25
  this.maxChangeNumbers = {};
@@ -1,7 +1,5 @@
1
- import { IPushEventEmitter, IPushManagerCS } from './types';
1
+ import { IPushEventEmitter, IPushManager } from './types';
2
2
  import { ISSEClient } from './SSEClient/types';
3
- import { IStorageSync } from '../../storages/types';
4
- import { IReadinessManager } from '../../readiness/types';
5
3
  import { ISegmentsSyncTask, IPollingManager } from '../polling/types';
6
4
  import { objectAssign } from '../../utils/lang/objectAssign';
7
5
  import { Backoff } from '../../utils/Backoff';
@@ -12,17 +10,15 @@ import { SplitsUpdateWorker } from './UpdateWorkers/SplitsUpdateWorker';
12
10
  import { authenticateFactory, hashUserKey } from './AuthClient';
13
11
  import { forOwn } from '../../utils/lang';
14
12
  import { SSEClient } from './SSEClient';
15
- import { IFetchAuth } from '../../services/types';
16
- import { ISettings } from '../../types';
17
13
  import { getMatching } from '../../utils/key';
18
14
  import { MY_SEGMENTS_UPDATE, MY_SEGMENTS_UPDATE_V2, PUSH_NONRETRYABLE_ERROR, PUSH_SUBSYSTEM_DOWN, SECONDS_BEFORE_EXPIRATION, SEGMENT_UPDATE, SPLIT_KILL, SPLIT_UPDATE, PUSH_RETRYABLE_ERROR, PUSH_SUBSYSTEM_UP, ControlType } from './constants';
19
- import { IPlatform } from '../../sdkFactory/types';
20
15
  import { STREAMING_FALLBACK, STREAMING_REFRESH_TOKEN, STREAMING_CONNECTING, STREAMING_DISABLED, ERROR_STREAMING_AUTH, STREAMING_DISCONNECTING, STREAMING_RECONNECT, STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2 } from '../../logger/constants';
21
16
  import { KeyList, UpdateStrategy } from './SSEHandler/types';
22
17
  import { isInBitmap, parseBitmap, parseKeyList } from './mySegmentsV2utils';
23
18
  import { ISet, _Set } from '../../utils/lang/sets';
24
19
  import { Hash64, hash64 } from '../../utils/murmur3/murmur3_64';
25
20
  import { IAuthTokenPushEnabled } from './AuthClient/types';
21
+ import { ISyncManagerFactoryParams } from '../types';
26
22
 
27
23
  /**
28
24
  * PushManager factory:
@@ -30,17 +26,15 @@ import { IAuthTokenPushEnabled } from './AuthClient/types';
30
26
  * - for client-side, with support for multiple clients, if key is provided in settings
31
27
  */
32
28
  export function pushManagerFactory(
29
+ params: ISyncManagerFactoryParams,
33
30
  pollingManager: IPollingManager,
34
- storage: IStorageSync,
35
- readiness: IReadinessManager,
36
- fetchAuth: IFetchAuth,
37
- platform: IPlatform,
38
- settings: ISettings,
39
- ): IPushManagerCS | undefined {
31
+ ): IPushManager | undefined {
32
+
33
+ const { settings, storage, splitApi, readiness, platform } = params;
40
34
 
41
35
  // `userKey` is the matching key of main client in client-side SDK.
42
36
  // It can be used to check if running on client-side or server-side SDK.
43
- const userKey = settings.core.key ? getMatching(settings.core.key) : undefined; //
37
+ const userKey = settings.core.key ? getMatching(settings.core.key) : undefined;
44
38
  const log = settings.log;
45
39
 
46
40
  let sseClient: ISSEClient;
@@ -51,7 +45,7 @@ export function pushManagerFactory(
51
45
  log.warn(STREAMING_FALLBACK, [e]);
52
46
  return;
53
47
  }
54
- const authenticate = authenticateFactory(fetchAuth);
48
+ const authenticate = authenticateFactory(splitApi.fetchAuth);
55
49
 
56
50
  // init feedback loop
57
51
  const pushEmitter = new platform.EventEmitter() as IPushEventEmitter;
@@ -59,7 +53,8 @@ export function pushManagerFactory(
59
53
  sseClient.setEventHandler(sseHandler);
60
54
 
61
55
  // init workers
62
- const segmentsUpdateWorker = userKey ? new MySegmentsUpdateWorker(pollingManager.segmentsSyncTask) : new SegmentsUpdateWorker(storage.segments, pollingManager.segmentsSyncTask);
56
+ // MySegmentsUpdateWorker (client-side) are initiated in `add` method
57
+ const segmentsUpdateWorker = userKey ? undefined : new SegmentsUpdateWorker(pollingManager.segmentsSyncTask, storage.segments);
63
58
  // For server-side we pass the segmentsSyncTask, used by SplitsUpdateWorker to fetch new segments
64
59
  const splitsUpdateWorker = new SplitsUpdateWorker(storage.splits, pollingManager.splitsSyncTask, readiness.splits, userKey ? undefined : pollingManager.segmentsSyncTask);
65
60
 
@@ -68,11 +63,6 @@ export function pushManagerFactory(
68
63
  // [Only for client-side] map of user keys to their corresponding hash64 and MySegmentsUpdateWorkers.
69
64
  // Hash64 is used to process MY_SEGMENTS_UPDATE_V2 events and dispatch actions to the corresponding MySegmentsUpdateWorker.
70
65
  const clients: Record<string, { hash64: Hash64, worker: MySegmentsUpdateWorker }> = {};
71
- if (userKey) {
72
- const hash = hashUserKey(userKey);
73
- userKeyHashes[hash] = userKey;
74
- clients[userKey] = { hash64: hash64(userKey), worker: segmentsUpdateWorker as MySegmentsUpdateWorker };
75
- }
76
66
 
77
67
  // [Only for client-side] variable to flag that a new client was added. It is needed to reconnect streaming.
78
68
  let connectForNewClient = false;
@@ -81,6 +71,7 @@ export function pushManagerFactory(
81
71
  // It is used to halt the `connectPush` process if it was in progress.
82
72
  let disconnected: boolean | undefined;
83
73
  // flag that indicates a PUSH_NONRETRYABLE_ERROR, condition with which starting pushManager again is ignored.
74
+ // true if STREAMING_DISABLED control event, or 'pushEnabled: false', or non-recoverable SSE or Auth errors.
84
75
  let disabled: boolean | undefined; // `disabled` implies `disconnected === true`
85
76
 
86
77
  /** PushManager functions related to initialization */
@@ -176,7 +167,7 @@ export function pushManagerFactory(
176
167
  function stopWorkers() {
177
168
  splitsUpdateWorker.backoff.reset();
178
169
  if (userKey) forOwn(clients, ({ worker }) => worker.backoff.reset());
179
- else segmentsUpdateWorker.backoff.reset();
170
+ else (segmentsUpdateWorker as SegmentsUpdateWorker).backoff.reset();
180
171
  }
181
172
 
182
173
  pushEmitter.on(PUSH_SUBSYSTEM_DOWN, stopWorkers);
@@ -306,37 +297,48 @@ export function pushManagerFactory(
306
297
  // Expose Event Emitter functionality and Event constants
307
298
  Object.create(pushEmitter),
308
299
  {
309
- // Expose functionality for starting and stoping push mode:
310
- stop: disconnectPush, // `handleNonRetryableError` cannot be used as `stop`, because it emits PUSH_SUBSYSTEM_DOWN event, which starts polling.
300
+ // Stop/pause push mode.
301
+ // It doesn't emit events. Neither PUSH_SUBSYSTEM_DOWN to start polling.
302
+ stop() {
303
+ disconnectPush(); // `handleNonRetryableError` cannot be used as `stop`, because it emits PUSH_SUBSYSTEM_DOWN event, which starts polling.
304
+ if (userKey) this.remove(userKey); // Necessary to properly resume streaming in client-side (e.g., RN SDK transition to foreground).
305
+ },
311
306
 
307
+ // Start/resume push mode.
308
+ // It eventually emits PUSH_SUBSYSTEM_DOWN, that starts polling, or PUSH_SUBSYSTEM_UP, that executes a syncAll
312
309
  start() {
313
310
  // Guard condition to avoid calling `connectPush` again if the `start` method is called multiple times or if push has been disabled.
314
311
  if (disabled || disconnected === false) return;
315
312
  disconnected = false;
316
- // Run in next event-loop cycle for optimization on client-side: if multiple clients are created in the same cycle than the factory, only one authentication is performed.
317
- setTimeout(connectPush);
313
+
314
+ if (userKey) this.add(userKey, pollingManager.segmentsSyncTask); // client-side
315
+ else setTimeout(connectPush); // server-side runs in next cycle as in client-side, for consistency with client-side
316
+ },
317
+
318
+ // true/false if start or stop was called last respectively
319
+ isRunning(){
320
+ return disconnected === false;
318
321
  },
319
322
 
320
323
  // [Only for client-side]
321
324
  add(userKey: string, mySegmentsSyncTask: ISegmentsSyncTask) {
322
- clients[userKey] = { hash64: hash64(userKey), worker: new MySegmentsUpdateWorker(mySegmentsSyncTask) };
323
-
324
325
  const hash = hashUserKey(userKey);
325
326
 
326
327
  if (!userKeyHashes[hash]) {
327
328
  userKeyHashes[hash] = userKey;
329
+ clients[userKey] = { hash64: hash64(userKey), worker: new MySegmentsUpdateWorker(mySegmentsSyncTask) };
328
330
  connectForNewClient = true; // we must reconnect on start, to listen the channel for the new user key
329
- }
330
331
 
331
- // Reconnects in case of a new client.
332
- // Run in next event-loop cycle to save authentication calls
333
- // in case the user is creating several clients in the current cycle.
334
- setTimeout(function checkForReconnect() {
335
- if (connectForNewClient) {
336
- connectForNewClient = false;
337
- connectPush();
338
- }
339
- }, 0);
332
+ // Reconnects in case of a new client.
333
+ // Run in next event-loop cycle to save authentication calls
334
+ // in case multiple clients are created in the current cycle.
335
+ setTimeout(function checkForReconnect() {
336
+ if (connectForNewClient) {
337
+ connectForNewClient = false;
338
+ connectPush();
339
+ }
340
+ }, 0);
341
+ }
340
342
  },
341
343
  // [Only for client-side]
342
344
  remove(userKey: string) {
@@ -1,11 +1,7 @@
1
1
  import { IMySegmentsUpdateData, IMySegmentsUpdateV2Data, ISegmentUpdateData, ISplitUpdateData, ISplitKillData } from './SSEHandler/types';
2
2
  import { ITask } from '../types';
3
- import { IPollingManager, ISegmentsSyncTask } from '../polling/types';
4
- import { IReadinessManager } from '../../readiness/types';
5
- import { IFetchAuth } from '../../services/types';
6
- import { IStorageSync } from '../../storages/types';
7
- import { IEventEmitter, ISettings } from '../../types';
8
- import { IPlatform } from '../../sdkFactory/types';
3
+ import { ISegmentsSyncTask } from '../polling/types';
4
+ import { IEventEmitter } from '../../types';
9
5
  import { ControlType } from './constants';
10
6
 
11
7
  // Internal SDK events, subscribed by SyncManager and PushManager
@@ -45,26 +41,10 @@ export interface IPushEventEmitter extends IEventEmitter {
45
41
  }
46
42
 
47
43
  /**
48
- * PushManager for server-side
44
+ * PushManager
49
45
  */
50
- export interface IPushManager extends ITask, IPushEventEmitter { }
51
-
52
- /**
53
- * PushManager for client-side with support for multiple clients
54
- */
55
- export interface IPushManagerCS extends IPushManager {
46
+ export interface IPushManager extends ITask, IPushEventEmitter {
47
+ // Methods used in client-side, to support multiple clients
56
48
  add(userKey: string, mySegmentsSyncTask: ISegmentsSyncTask): void,
57
49
  remove(userKey: string): void
58
50
  }
59
-
60
- /**
61
- * Signature of push manager factory/constructor
62
- */
63
- export type IPushManagerFactoryParams = [
64
- pollingManager: IPollingManager,
65
- storage: IStorageSync,
66
- readiness: IReadinessManager,
67
- fetchAuth: IFetchAuth,
68
- platform: IPlatform,
69
- settings: ISettings
70
- ]
@@ -2,15 +2,11 @@ import { syncTaskComposite } from '../syncTaskComposite';
2
2
  import { eventsSyncTaskFactory } from './eventsSyncTask';
3
3
  import { impressionsSyncTaskFactory } from './impressionsSyncTask';
4
4
  import { impressionCountsSyncTaskFactory } from './impressionCountsSyncTask';
5
- import { ISplitApi } from '../../services/types';
6
- import { IStorageSync } from '../../storages/types';
7
- import { ISettings } from '../../types';
5
+ import { ISyncManagerFactoryParams } from '../types';
8
6
 
9
- export function submitterManagerFactory(
10
- settings: ISettings,
11
- storage: IStorageSync,
12
- splitApi: ISplitApi,
13
- ) {
7
+ export function submitterManagerFactory(params: ISyncManagerFactoryParams) {
8
+
9
+ const { settings, storage, splitApi } = params;
14
10
  const log = settings.log;
15
11
  const submitters = [
16
12
  impressionsSyncTaskFactory(log, splitApi.postTestImpressionsBulk, storage.impressions, settings.scheduler.impressionsRefreshRate, settings.core.labelsEnabled),
@@ -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,8 @@
1
+ import { ISettings } from '../../../types';
2
+
3
+ export function validateRuntime(): ISettings['runtime'] {
4
+ return {
5
+ ip: false,
6
+ hostname: false
7
+ };
8
+ }
@@ -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): ISettings['runtime'] {
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;
@@ -1,3 +1,3 @@
1
- import { IIntegrationFactoryParams } from '../types';
1
+ import { IntegrationFactory } from '../types';
2
2
  import { GoogleAnalyticsToSplitOptions } from './types';
3
- export declare function GoogleAnalyticsToSplit(options: GoogleAnalyticsToSplitOptions): (params: IIntegrationFactoryParams) => void;
3
+ export declare function GoogleAnalyticsToSplit(options: GoogleAnalyticsToSplitOptions): IntegrationFactory;
@@ -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;
@@ -1,4 +1,3 @@
1
- import { IIntegrationFactoryParams } from '../types';
2
- import { SplitToGa } from './SplitToGa';
1
+ import { IntegrationFactory } from '../types';
3
2
  import { SplitToGoogleAnalyticsOptions } from './types';
4
- export declare function SplitToGoogleAnalytics(options?: SplitToGoogleAnalyticsOptions): (params: IIntegrationFactoryParams) => SplitToGa;
3
+ export declare function SplitToGoogleAnalytics(options?: SplitToGoogleAnalyticsOptions): IntegrationFactory;
@@ -11,3 +11,7 @@ export interface IIntegrationFactoryParams {
11
11
  };
12
12
  settings: ISettings;
13
13
  }
14
+ export declare type IntegrationFactory = {
15
+ readonly type: string;
16
+ (params: IIntegrationFactoryParams): IIntegration | void;
17
+ };
@@ -0,0 +1,2 @@
1
+ import { ICodes } from './types';
2
+ export declare const codes: ICodes;