@splitsoftware/splitio-commons 1.2.0 → 1.2.1-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/evaluator/Engine.js +6 -6
- package/cjs/evaluator/combiners/and.js +1 -1
- package/cjs/evaluator/combiners/ifelseif.js +2 -2
- package/cjs/evaluator/condition/engineUtils.js +2 -2
- package/cjs/evaluator/condition/index.js +4 -4
- package/cjs/evaluator/index.js +5 -5
- package/cjs/evaluator/matchers/cont_all.js +1 -1
- package/cjs/evaluator/matchers/cont_any.js +1 -1
- package/cjs/evaluator/matchers/cont_str.js +1 -1
- package/cjs/evaluator/matchers/dependency.js +1 -1
- package/cjs/evaluator/matchers/eq_set.js +1 -1
- package/cjs/evaluator/matchers/ew.js +3 -3
- package/cjs/evaluator/matchers/part_of.js +1 -1
- package/cjs/evaluator/matchers/segment.js +1 -1
- package/cjs/evaluator/matchers/sw.js +1 -1
- package/cjs/evaluator/matchers/whitelist.js +1 -1
- package/cjs/evaluator/matchersTransform/index.js +12 -12
- package/cjs/evaluator/parser/index.js +6 -6
- package/cjs/evaluator/treatments/index.js +1 -1
- package/cjs/evaluator/value/index.js +1 -1
- package/cjs/evaluator/value/sanitize.js +4 -4
- package/cjs/integrations/browser.js +3 -3
- package/cjs/integrations/ga/GaToSplit.js +14 -14
- package/cjs/integrations/ga/GoogleAnalyticsToSplit.js +5 -3
- package/cjs/integrations/ga/SplitToGa.js +1 -1
- package/cjs/integrations/ga/SplitToGoogleAnalytics.js +4 -2
- package/cjs/listeners/browser.js +15 -11
- package/cjs/listeners/node.js +1 -1
- package/cjs/logger/constants.js +8 -3
- package/cjs/logger/index.js +2 -2
- package/cjs/logger/messages/debug.js +4 -4
- package/cjs/logger/messages/error.js +5 -4
- package/cjs/logger/messages/info.js +10 -8
- package/cjs/logger/messages/warn.js +1 -1
- package/cjs/logger/sdkLogger.js +1 -1
- package/cjs/readiness/readinessManager.js +2 -2
- package/cjs/readiness/sdkReadinessManager.js +4 -4
- package/cjs/sdkClient/client.js +13 -11
- package/cjs/sdkClient/clientAttributesDecoration.js +4 -4
- package/cjs/sdkClient/clientCS.js +4 -3
- package/cjs/sdkClient/clientInputValidation.js +20 -22
- package/cjs/sdkClient/sdkClient.js +3 -6
- package/cjs/sdkClient/sdkClientMethod.js +1 -1
- package/cjs/sdkClient/sdkClientMethodCS.js +6 -10
- package/cjs/sdkClient/sdkClientMethodCSWithTT.js +7 -15
- package/cjs/sdkFactory/index.js +14 -12
- package/cjs/sdkFactory/userConsentProps.js +37 -0
- package/cjs/sdkManager/index.js +11 -11
- package/cjs/services/splitApi.js +3 -2
- package/cjs/services/splitHttpClient.js +3 -3
- package/cjs/storages/KeyBuilder.js +2 -6
- package/cjs/storages/KeyBuilderCS.js +13 -3
- package/cjs/storages/KeyBuilderSS.js +1 -1
- package/cjs/storages/findLatencyIndex.js +1 -1
- package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +24 -4
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +12 -12
- package/cjs/storages/inLocalStorage/index.js +4 -4
- package/cjs/storages/inMemory/AttributesCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/ImpressionsCacheInMemory.js +15 -1
- package/cjs/storages/inMemory/InMemoryStorage.js +1 -1
- package/cjs/storages/inMemory/InMemoryStorageCS.js +1 -1
- package/cjs/storages/inMemory/LatenciesCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +1 -1
- package/cjs/storages/inMemory/SegmentsCacheInMemory.js +2 -2
- package/cjs/storages/inMemory/SplitsCacheInMemory.js +5 -5
- package/cjs/storages/inRedis/LatenciesCacheInRedis.js +1 -1
- package/cjs/storages/inRedis/RedisAdapter.js +24 -11
- package/cjs/storages/inRedis/SegmentsCacheInRedis.js +1 -1
- package/cjs/storages/inRedis/SplitsCacheInRedis.js +3 -3
- package/cjs/storages/inRedis/index.js +1 -1
- package/cjs/storages/pluggable/SegmentsCachePluggable.js +1 -1
- package/cjs/storages/pluggable/SplitsCachePluggable.js +3 -3
- package/cjs/storages/pluggable/inMemoryWrapper.js +4 -4
- package/cjs/storages/pluggable/index.js +6 -6
- package/cjs/sync/offline/LocalhostFromFile.js +1 -1
- package/cjs/sync/offline/LocalhostFromObject.js +1 -1
- package/cjs/sync/offline/splitsParser/parseCondition.js +1 -1
- package/cjs/sync/offline/splitsParser/splitsParserFromFile.js +13 -13
- package/cjs/sync/offline/splitsParser/splitsParserFromSettings.js +3 -3
- package/cjs/sync/offline/syncManagerOffline.js +1 -1
- package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +2 -2
- package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +2 -2
- package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +1 -1
- package/cjs/sync/polling/pollingManagerCS.js +8 -7
- package/cjs/sync/polling/pollingManagerSS.js +5 -4
- package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +1 -1
- package/cjs/sync/polling/syncTasks/segmentsSyncTask.js +1 -1
- package/cjs/sync/polling/syncTasks/splitsSyncTask.js +1 -1
- package/cjs/sync/polling/updaters/mySegmentsUpdater.js +3 -3
- package/cjs/sync/polling/updaters/segmentChangesUpdater.js +2 -2
- package/cjs/sync/polling/updaters/splitChangesUpdater.js +2 -2
- package/cjs/sync/streaming/AuthClient/index.js +4 -5
- package/cjs/sync/streaming/SSEClient/index.js +2 -1
- package/cjs/sync/streaming/SSEHandler/NotificationParser.js +1 -1
- package/cjs/sync/streaming/SSEHandler/index.js +3 -3
- package/cjs/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +1 -1
- package/cjs/sync/streaming/mySegmentsV2utils.js +1 -1
- package/cjs/sync/streaming/pushManager.js +46 -35
- package/cjs/sync/submitters/eventsSyncTask.js +17 -5
- package/cjs/sync/submitters/impressionCountsSyncTask.js +1 -1
- package/cjs/sync/submitters/impressionsSyncTask.js +15 -3
- package/cjs/sync/submitters/metricsSyncTask.js +3 -3
- package/cjs/sync/submitters/submitterManager.js +6 -5
- package/cjs/sync/submitters/submitterSyncTask.js +1 -1
- package/cjs/sync/syncManagerOnline.js +21 -17
- package/cjs/trackers/eventTracker.js +11 -4
- package/cjs/trackers/impressionObserver/impressionObserverCS.js +1 -1
- package/cjs/trackers/impressionObserver/impressionObserverSS.js +1 -1
- package/cjs/trackers/impressionObserver/utils.js +8 -1
- package/cjs/trackers/impressionsTracker.js +9 -8
- package/cjs/utils/MinEvents.js +2 -1
- package/cjs/utils/consent.js +10 -0
- package/cjs/utils/constants/index.js +5 -1
- package/cjs/utils/inputValidation/apiKey.js +1 -1
- package/cjs/utils/inputValidation/attribute.js +4 -4
- package/cjs/utils/inputValidation/attributes.js +2 -2
- package/cjs/utils/inputValidation/event.js +1 -1
- package/cjs/utils/inputValidation/eventProperties.js +7 -5
- package/cjs/utils/inputValidation/eventValue.js +1 -1
- package/cjs/utils/inputValidation/key.js +6 -5
- package/cjs/utils/inputValidation/preloadedData.js +8 -8
- package/cjs/utils/inputValidation/split.js +1 -1
- package/cjs/utils/inputValidation/splits.js +2 -2
- package/cjs/utils/inputValidation/trafficType.js +1 -1
- package/cjs/utils/inputValidation/trafficTypeExistance.js +1 -1
- package/cjs/utils/jwt/index.js +1 -1
- package/cjs/utils/key/index.js +3 -3
- package/cjs/utils/lang/index.js +13 -16
- package/cjs/utils/lang/maps.js +16 -2
- package/cjs/utils/murmur3/common.js +1 -1
- package/cjs/utils/murmur3/legacy.js +44 -0
- package/cjs/utils/murmur3/murmur3.js +10 -10
- package/cjs/utils/murmur3/murmur3_128.js +1 -1
- package/cjs/utils/murmur3/murmur3_128_x86.js +37 -37
- package/cjs/utils/murmur3/murmur3_64.js +1 -1
- package/cjs/utils/promise/timeout.js +1 -1
- package/cjs/utils/settingsValidation/consent.js +16 -0
- package/cjs/utils/settingsValidation/impressionsMode.js +6 -6
- package/cjs/utils/settingsValidation/index.js +32 -14
- package/cjs/utils/settingsValidation/integrations/configurable.js +1 -1
- package/cjs/utils/settingsValidation/integrations/pluggable.js +1 -1
- package/cjs/utils/settingsValidation/localhost/builtin.js +2 -2
- package/cjs/utils/settingsValidation/logger/builtinLogger.js +3 -3
- package/cjs/utils/settingsValidation/logger/commons.js +1 -1
- package/cjs/utils/settingsValidation/logger/pluggableLogger.js +1 -1
- package/cjs/utils/settingsValidation/runtime.js +11 -0
- package/cjs/utils/settingsValidation/splitFilters.js +1 -1
- package/cjs/utils/settingsValidation/storage/storageCS.js +1 -1
- package/cjs/utils/timeTracker/index.js +3 -3
- package/esm/evaluator/matchers/ew.js +4 -4
- package/esm/integrations/ga/GoogleAnalyticsToSplit.js +4 -2
- package/esm/integrations/ga/SplitToGoogleAnalytics.js +4 -2
- package/esm/listeners/browser.js +14 -10
- package/esm/logger/constants.js +5 -2
- package/esm/logger/messages/debug.js +3 -3
- package/esm/logger/messages/error.js +4 -3
- package/esm/logger/messages/info.js +9 -7
- package/esm/sdkClient/client.js +4 -2
- package/esm/sdkClient/clientCS.js +2 -1
- package/esm/sdkClient/clientInputValidation.js +6 -8
- package/esm/sdkClient/sdkClient.js +1 -4
- package/esm/sdkClient/sdkClientMethodCS.js +1 -5
- package/esm/sdkClient/sdkClientMethodCSWithTT.js +1 -9
- package/esm/sdkFactory/index.js +8 -6
- package/esm/sdkFactory/userConsentProps.js +33 -0
- package/esm/services/splitApi.js +2 -1
- package/esm/services/splitHttpClient.js +1 -1
- package/esm/storages/KeyBuilder.js +2 -6
- package/esm/storages/KeyBuilderCS.js +11 -1
- package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +23 -3
- package/esm/storages/inLocalStorage/index.js +1 -1
- package/esm/storages/inMemory/ImpressionsCacheInMemory.js +15 -1
- package/esm/storages/inMemory/InMemoryStorage.js +1 -1
- package/esm/storages/inMemory/InMemoryStorageCS.js +1 -1
- package/esm/storages/inRedis/RedisAdapter.js +15 -2
- package/esm/storages/pluggable/index.js +2 -2
- package/esm/sync/offline/splitsParser/splitsParserFromFile.js +1 -1
- package/esm/sync/polling/fetchers/mySegmentsFetcher.js +2 -2
- package/esm/sync/polling/fetchers/segmentChangesFetcher.js +2 -2
- package/esm/sync/polling/pollingManagerCS.js +2 -1
- package/esm/sync/polling/pollingManagerSS.js +2 -1
- package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +1 -1
- package/esm/sync/polling/updaters/mySegmentsUpdater.js +2 -2
- package/esm/sync/streaming/AuthClient/index.js +1 -2
- package/esm/sync/streaming/SSEClient/index.js +2 -1
- package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +1 -1
- package/esm/sync/streaming/pushManager.js +34 -23
- package/esm/sync/submitters/eventsSyncTask.js +18 -6
- package/esm/sync/submitters/impressionsSyncTask.js +13 -1
- package/esm/sync/submitters/submitterManager.js +2 -1
- package/esm/sync/syncManagerOnline.js +21 -17
- package/esm/trackers/eventTracker.js +8 -1
- package/esm/trackers/impressionObserver/utils.js +7 -1
- package/esm/trackers/impressionsTracker.js +6 -5
- package/esm/utils/consent.js +6 -0
- package/esm/utils/constants/index.js +4 -0
- package/esm/utils/inputValidation/attributes.js +1 -1
- package/esm/utils/inputValidation/eventProperties.js +4 -2
- package/esm/utils/inputValidation/key.js +2 -1
- package/esm/utils/lang/index.js +12 -15
- package/esm/utils/lang/maps.js +14 -1
- package/esm/utils/murmur3/legacy.js +39 -0
- package/esm/utils/promise/timeout.js +1 -1
- package/esm/utils/settingsValidation/consent.js +12 -0
- package/esm/utils/settingsValidation/impressionsMode.js +7 -7
- package/esm/utils/settingsValidation/index.js +28 -10
- package/esm/utils/settingsValidation/runtime.js +7 -0
- package/package.json +7 -7
- package/src/evaluator/matchers/ew.ts +4 -4
- package/src/evaluator/parser/index.ts +1 -1
- package/src/evaluator/types.ts +2 -2
- package/src/evaluator/value/index.ts +2 -2
- package/src/evaluator/value/sanitize.ts +2 -2
- package/src/integrations/ga/GoogleAnalyticsToSplit.ts +7 -4
- package/src/integrations/ga/SplitToGoogleAnalytics.ts +7 -4
- package/src/integrations/pluggable.ts +2 -2
- package/src/integrations/types.ts +5 -0
- package/src/listeners/browser.ts +13 -9
- package/src/logger/.DS_Store +0 -0
- package/src/logger/constants.ts +5 -2
- package/src/logger/messages/debug.ts +3 -3
- package/src/logger/messages/error.ts +4 -3
- package/src/logger/messages/info.ts +9 -7
- package/src/logger/types.ts +4 -0
- package/src/sdkClient/client.ts +4 -2
- package/src/sdkClient/clientCS.ts +3 -1
- package/src/sdkClient/clientInputValidation.ts +8 -7
- package/src/sdkClient/sdkClient.ts +2 -5
- package/src/sdkClient/sdkClientMethodCS.ts +1 -6
- package/src/sdkClient/sdkClientMethodCSWithTT.ts +2 -11
- package/src/sdkFactory/index.ts +9 -7
- package/src/sdkFactory/types.ts +2 -1
- package/src/sdkFactory/userConsentProps.ts +40 -0
- package/src/services/splitHttpClient.ts +1 -1
- package/src/storages/KeyBuilder.ts +2 -6
- package/src/storages/KeyBuilderCS.ts +13 -1
- package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +23 -3
- package/src/storages/inLocalStorage/index.ts +1 -1
- package/src/storages/inMemory/ImpressionsCacheInMemory.ts +22 -1
- package/src/storages/inMemory/InMemoryStorage.ts +1 -1
- package/src/storages/inMemory/InMemoryStorageCS.ts +1 -1
- package/src/storages/inRedis/RedisAdapter.ts +8 -2
- package/src/storages/pluggable/index.ts +2 -2
- package/src/storages/types.ts +6 -2
- package/src/sync/offline/splitsParser/splitsParserFromFile.ts +1 -1
- package/src/sync/polling/fetchers/mySegmentsFetcher.ts +2 -1
- package/src/sync/polling/fetchers/types.ts +1 -0
- package/src/sync/polling/pollingManagerCS.ts +3 -6
- package/src/sync/polling/pollingManagerSS.ts +3 -8
- package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +2 -1
- package/src/sync/polling/types.ts +0 -12
- package/src/sync/polling/updaters/mySegmentsUpdater.ts +2 -1
- package/src/sync/streaming/AuthClient/index.ts +1 -2
- package/src/sync/streaming/SSEClient/index.ts +2 -1
- package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
- package/src/sync/streaming/pushManager.ts +39 -37
- package/src/sync/streaming/types.ts +5 -25
- package/src/sync/submitters/eventsSyncTask.ts +19 -6
- package/src/sync/submitters/impressionsSyncTask.ts +16 -1
- package/src/sync/submitters/submitterManager.ts +4 -8
- package/src/sync/syncManagerOnline.ts +27 -27
- package/src/sync/types.ts +4 -1
- package/src/trackers/eventTracker.ts +11 -3
- package/src/trackers/impressionObserver/utils.ts +8 -1
- package/src/trackers/impressionsTracker.ts +7 -8
- package/src/types.ts +26 -1
- package/src/utils/consent.ts +8 -0
- package/src/utils/constants/index.ts +5 -0
- package/src/utils/inputValidation/attributes.ts +1 -2
- package/src/utils/inputValidation/eventProperties.ts +4 -2
- package/src/utils/lang/index.ts +15 -18
- package/src/utils/lang/maps.ts +15 -1
- package/src/utils/murmur3/legacy.ts +48 -0
- package/src/utils/promise/timeout.ts +1 -1
- package/src/utils/settingsValidation/consent.ts +16 -0
- package/src/utils/settingsValidation/impressionsMode.ts +8 -8
- package/src/utils/settingsValidation/index.ts +29 -10
- package/src/utils/settingsValidation/runtime.ts +9 -0
- package/src/utils/settingsValidation/types.ts +12 -6
- package/types/evaluator/types.d.ts +2 -2
- package/types/evaluator/value/index.d.ts +1 -1
- package/types/evaluator/value/sanitize.d.ts +1 -1
- package/types/integrations/ga/GaToSplitPlugin.d.ts +3 -0
- package/types/integrations/ga/GoogleAnalyticsToSplit.d.ts +2 -2
- package/types/integrations/ga/SplitToGaPlugin.d.ts +4 -0
- package/types/integrations/ga/SplitToGoogleAnalytics.d.ts +2 -3
- package/types/integrations/types.d.ts +4 -0
- package/types/logger/browser/{DebugLogger.d.ts → debugLogger.d.ts} +0 -0
- package/types/logger/browser/{ErrorLogger.d.ts → errorLogger.d.ts} +0 -0
- package/types/logger/browser/{InfoLogger.d.ts → infoLogger.d.ts} +0 -0
- package/types/logger/browser/{WarnLogger.d.ts → warnLogger.d.ts} +0 -0
- package/types/logger/codes.d.ts +2 -0
- package/types/logger/codesConstants.d.ts +117 -0
- package/types/logger/codesConstantsBrowser.d.ts +2 -0
- package/types/logger/codesConstantsNode.d.ts +14 -0
- package/types/logger/codesDebug.d.ts +1 -0
- package/types/logger/codesDebugBrowser.d.ts +1 -0
- package/types/logger/codesDebugNode.d.ts +1 -0
- package/types/logger/codesError.d.ts +1 -0
- package/types/logger/codesErrorNode.d.ts +1 -0
- package/types/logger/codesInfo.d.ts +1 -0
- package/types/logger/codesWarn.d.ts +1 -0
- package/types/logger/codesWarnNode.d.ts +1 -0
- package/types/logger/constants.d.ts +5 -2
- package/types/logger/debugLogger.d.ts +2 -0
- package/types/logger/errorLogger.d.ts +2 -0
- package/types/logger/infoLogger.d.ts +2 -0
- package/types/logger/messages/debugBrowser.d.ts +1 -0
- package/types/logger/messages/debugNode.d.ts +1 -0
- package/types/logger/messages/errorNode.d.ts +1 -0
- package/types/logger/messages/warnNode.d.ts +1 -0
- package/types/logger/noopLogger.d.ts +2 -0
- package/types/logger/types.d.ts +4 -0
- package/types/logger/warnLogger.d.ts +2 -0
- package/types/sdkClient/clientAttributesDecoration.d.ts +1 -1
- package/types/sdkClient/clientInputValidation.d.ts +2 -3
- package/types/sdkFactory/types.d.ts +1 -1
- package/types/sdkFactory/userConsentProps.d.ts +6 -0
- package/types/sdkManager/sdkManagerMethod.d.ts +6 -0
- package/types/storages/KeyBuilderCS.d.ts +2 -0
- package/types/storages/getRegisteredSegments.d.ts +10 -0
- package/types/storages/inMemory/ImpressionsCacheInMemory.d.ts +9 -0
- package/types/storages/inMemory/TelemetryCacheInMemory.d.ts +51 -0
- package/types/storages/inMemory/index.d.ts +10 -0
- package/types/storages/inRedis/RedisAdapter.d.ts +1 -1
- package/types/storages/inRedis/TelemetryCacheInRedis.d.ts +0 -0
- package/types/storages/parseSegments.d.ts +6 -0
- package/types/storages/pluggable/TelemetryCachePluggable.d.ts +2 -0
- package/types/storages/types.d.ts +3 -1
- package/types/sync/polling/fetchers/mySegmentsFetcher.d.ts +1 -1
- package/types/sync/polling/fetchers/types.d.ts +1 -1
- package/types/sync/polling/pollingManagerCS.d.ts +2 -5
- package/types/sync/polling/pollingManagerSS.d.ts +2 -5
- package/types/sync/polling/syncTasks/splitsSyncTask.copy.d.ts +35 -0
- package/types/sync/polling/syncTasks/splitsSyncTask.morelikeoriginal.d.ts +35 -0
- package/types/sync/polling/types.d.ts +0 -11
- package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +1 -1
- package/types/sync/streaming/AuthClient/indexV1.d.ts +12 -0
- package/types/sync/streaming/AuthClient/indexV2.d.ts +8 -0
- package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -1
- package/types/sync/streaming/pushManager.d.ts +3 -7
- package/types/sync/streaming/pushManagerCS.d.ts +1 -0
- package/types/sync/streaming/pushManagerNoUsers.d.ts +13 -0
- package/types/sync/streaming/pushManagerSS.d.ts +1 -0
- package/types/sync/streaming/types.d.ts +3 -23
- package/types/sync/submitters/submitterManager.d.ts +2 -4
- package/types/sync/submitters/telemetrySyncTask.d.ts +17 -0
- package/types/sync/syncManagerFromFile.d.ts +2 -0
- package/types/sync/syncManagerFromObject.d.ts +2 -0
- package/types/sync/syncManagerOffline.d.ts +9 -0
- package/types/sync/syncManagerOnline.d.ts +3 -3
- package/types/sync/types.d.ts +3 -0
- package/types/trackers/eventTracker.d.ts +2 -2
- package/types/trackers/impressionObserver/utils.d.ts +4 -0
- package/types/trackers/impressionsTracker.d.ts +2 -3
- package/types/trackers/telemetryRecorder.d.ts +0 -0
- package/types/types.d.ts +22 -0
- package/types/utils/EventEmitter.d.ts +4 -0
- package/types/utils/consent.d.ts +2 -0
- package/types/utils/constants/index.d.ts +3 -0
- package/types/utils/lang/errors.d.ts +10 -0
- package/types/utils/lang/index.d.ts +6 -5
- package/types/utils/lang/maps.d.ts +7 -0
- package/types/utils/murmur3/commons.d.ts +12 -0
- package/types/utils/murmur3/legacy.d.ts +2 -0
- package/types/utils/settingsValidation/buildMetadata.d.ts +3 -0
- package/types/utils/settingsValidation/consent.d.ts +6 -0
- package/types/utils/settingsValidation/impressionsMode.d.ts +1 -1
- package/types/utils/settingsValidation/localhost/index.d.ts +9 -0
- package/types/utils/settingsValidation/logger.d.ts +11 -0
- package/types/utils/settingsValidation/runtime/browser.d.ts +2 -0
- package/types/utils/settingsValidation/runtime/node.d.ts +2 -0
- package/types/utils/settingsValidation/runtime.d.ts +2 -0
- package/types/utils/settingsValidation/types.d.ts +12 -6
- package/types/utils/settingsValidation/userConsent.d.ts +5 -0
|
@@ -65,7 +65,7 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
|
|
|
65
65
|
log.debug(constants_2.LOG_PREFIX_SYNC_SEGMENTS + "Processed " + segmentName + " with till = " + x.till + ". Added: " + x.added.length + ". Removed: " + x.removed.length);
|
|
66
66
|
});
|
|
67
67
|
// If at least one storage operation result is a promise, join all in a single promise.
|
|
68
|
-
if (results.some(function (result) { return thenable_1.thenable(result); }))
|
|
68
|
+
if (results.some(function (result) { return (0, thenable_1.thenable)(result); }))
|
|
69
69
|
return Promise.all(results).then(function () { return changeNumber; });
|
|
70
70
|
return changeNumber;
|
|
71
71
|
});
|
|
@@ -76,7 +76,7 @@ function segmentChangesUpdaterFactory(log, segmentChangesFetcher, segments, read
|
|
|
76
76
|
}
|
|
77
77
|
return Promise.all(updaters).then(function (shouldUpdateFlags) {
|
|
78
78
|
// if at least one segment fetch succeeded, mark segments ready
|
|
79
|
-
if (lang_1.findIndex(shouldUpdateFlags, function (v) { return v !== -1; }) !== -1 || readyOnAlreadyExistentState) {
|
|
79
|
+
if ((0, lang_1.findIndex)(shouldUpdateFlags, function (v) { return v !== -1; }) !== -1 || readyOnAlreadyExistentState) {
|
|
80
80
|
readyOnAlreadyExistentState = false;
|
|
81
81
|
if (readiness)
|
|
82
82
|
readiness.segments.emit(constants_1.SDK_SEGMENTS_ARRIVED);
|
|
@@ -51,7 +51,7 @@ function computeSplitsMutation(entries) {
|
|
|
51
51
|
}
|
|
52
52
|
return accum;
|
|
53
53
|
}, { added: [], removed: [], segments: [] });
|
|
54
|
-
computed.segments = sets_1.setToArray(segments);
|
|
54
|
+
computed.segments = (0, sets_1.setToArray)(segments);
|
|
55
55
|
return computed;
|
|
56
56
|
}
|
|
57
57
|
exports.computeSplitsMutation = computeSplitsMutation;
|
|
@@ -76,7 +76,7 @@ function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, segments,
|
|
|
76
76
|
/** timeout and telemetry decorator for `splitChangesFetcher` promise */
|
|
77
77
|
function _promiseDecorator(promise) {
|
|
78
78
|
if (startingUp && requestTimeoutBeforeReady)
|
|
79
|
-
promise = timeout_1.timeout(requestTimeoutBeforeReady, promise);
|
|
79
|
+
promise = (0, timeout_1.timeout)(requestTimeoutBeforeReady, promise);
|
|
80
80
|
return promise;
|
|
81
81
|
// @TODO telemetry
|
|
82
82
|
// const collectMetrics = startingUp || isNode; // If we are on the browser, only collect this metric for first fetch. On node do it always.
|
|
@@ -16,16 +16,15 @@ function authenticateFactory(fetchAuth) {
|
|
|
16
16
|
* @param {string[] | undefined} userKeys set of user Keys to track MY_SEGMENTS_CHANGES. It is undefined for server-side API.
|
|
17
17
|
*/
|
|
18
18
|
return function authenticate(userKeys) {
|
|
19
|
-
|
|
20
|
-
return authPromise
|
|
19
|
+
return fetchAuth(userKeys)
|
|
21
20
|
.then(function (resp) { return resp.json(); })
|
|
22
21
|
.then(function (json) {
|
|
23
22
|
if (json.token) { // empty token when `"pushEnabled": false`
|
|
24
|
-
var decodedToken = jwt_1.decodeJWTtoken(json.token);
|
|
23
|
+
var decodedToken = (0, jwt_1.decodeJWTtoken)(json.token);
|
|
25
24
|
if (typeof decodedToken.iat !== 'number' || typeof decodedToken.exp !== 'number')
|
|
26
25
|
throw new Error('token properties "issuedAt" (iat) or "expiration" (exp) are missing or invalid');
|
|
27
26
|
var channels = JSON.parse(decodedToken['x-ably-capability']);
|
|
28
|
-
return objectAssign_1.objectAssign({
|
|
27
|
+
return (0, objectAssign_1.objectAssign)({
|
|
29
28
|
decodedToken: decodedToken,
|
|
30
29
|
channels: channels
|
|
31
30
|
}, json);
|
|
@@ -39,6 +38,6 @@ exports.authenticateFactory = authenticateFactory;
|
|
|
39
38
|
* Returns the hash of a given user key
|
|
40
39
|
*/
|
|
41
40
|
function hashUserKey(userKey) {
|
|
42
|
-
return base64_1.encodeToBase64(murmur3_1.hash(userKey, 0).toString());
|
|
41
|
+
return (0, base64_1.encodeToBase64)((0, murmur3_1.hash)(userKey, 0).toString());
|
|
43
42
|
}
|
|
44
43
|
exports.hashUserKey = hashUserKey;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SSEClient = void 0;
|
|
4
|
+
var lang_1 = require("../../../utils/lang");
|
|
4
5
|
var VERSION = '1.1';
|
|
5
6
|
var CONTROL_CHANNEL_REGEX = /^control_/;
|
|
6
7
|
/**
|
|
@@ -11,7 +12,7 @@ var CONTROL_CHANNEL_REGEX = /^control_/;
|
|
|
11
12
|
*/
|
|
12
13
|
function buildSSEHeaders(settings) {
|
|
13
14
|
var headers = {
|
|
14
|
-
SplitSDKClientKey: settings.core.authorizationKey.slice(-4),
|
|
15
|
+
SplitSDKClientKey: (0, lang_1.isString)(settings.core.authorizationKey) ? settings.core.authorizationKey.slice(-4) : '',
|
|
15
16
|
SplitSDKVersion: settings.version,
|
|
16
17
|
};
|
|
17
18
|
// ip and hostname are false if IPAddressesEnabled is false
|
|
@@ -13,7 +13,7 @@ var lang_1 = require("../../../utils/lang");
|
|
|
13
13
|
*/
|
|
14
14
|
function errorParser(error) {
|
|
15
15
|
// @ts-ignore
|
|
16
|
-
if (lang_1.isString(error.data))
|
|
16
|
+
if ((0, lang_1.isString)(error.data))
|
|
17
17
|
error.parsedData = JSON.parse(error.data); // cannot assign to read only property 'data'
|
|
18
18
|
return error;
|
|
19
19
|
}
|
|
@@ -25,7 +25,7 @@ function isRetryableError(error) {
|
|
|
25
25
|
* @param pushEmitter emitter for events related to streaming support
|
|
26
26
|
*/
|
|
27
27
|
function SSEHandlerFactory(log, pushEmitter) {
|
|
28
|
-
var notificationKeeper = NotificationKeeper_1.notificationKeeperFactory(pushEmitter);
|
|
28
|
+
var notificationKeeper = (0, NotificationKeeper_1.notificationKeeperFactory)(pushEmitter);
|
|
29
29
|
return {
|
|
30
30
|
handleOpen: function () {
|
|
31
31
|
notificationKeeper.handleOpen();
|
|
@@ -34,7 +34,7 @@ function SSEHandlerFactory(log, pushEmitter) {
|
|
|
34
34
|
handleError: function (error) {
|
|
35
35
|
var errorWithParsedData = error;
|
|
36
36
|
try {
|
|
37
|
-
errorWithParsedData = NotificationParser_1.errorParser(error);
|
|
37
|
+
errorWithParsedData = (0, NotificationParser_1.errorParser)(error);
|
|
38
38
|
}
|
|
39
39
|
catch (err) {
|
|
40
40
|
log.warn(constants_2.STREAMING_PARSING_ERROR_FAILS, [err]);
|
|
@@ -52,7 +52,7 @@ function SSEHandlerFactory(log, pushEmitter) {
|
|
|
52
52
|
handleMessage: function (message) {
|
|
53
53
|
var messageWithParsedData;
|
|
54
54
|
try {
|
|
55
|
-
messageWithParsedData = NotificationParser_1.messageParser(message);
|
|
55
|
+
messageWithParsedData = (0, NotificationParser_1.messageParser)(message);
|
|
56
56
|
if (!messageWithParsedData)
|
|
57
57
|
return; // Messages with empty data are ignored
|
|
58
58
|
}
|
|
@@ -10,7 +10,7 @@ var SegmentsUpdateWorker = /** @class */ (function () {
|
|
|
10
10
|
* @param {Object} segmentsCache segments data cache
|
|
11
11
|
* @param {Object} segmentsSyncTask task for syncing segments data
|
|
12
12
|
*/
|
|
13
|
-
function SegmentsUpdateWorker(
|
|
13
|
+
function SegmentsUpdateWorker(segmentsSyncTask, segmentsCache) {
|
|
14
14
|
this.segmentsCache = segmentsCache;
|
|
15
15
|
this.segmentsSyncTask = segmentsSyncTask;
|
|
16
16
|
this.maxChangeNumbers = {};
|
|
@@ -21,7 +21,7 @@ function StringToUint8Array(myString) {
|
|
|
21
21
|
* @throws if data string cannot be decoded, decompressed or the provided compression value is invalid (not 1 or 2)
|
|
22
22
|
*/
|
|
23
23
|
function decompress(data, compression) {
|
|
24
|
-
var compressData = base64_1.decodeFromBase64(data);
|
|
24
|
+
var compressData = (0, base64_1.decodeFromBase64)(data);
|
|
25
25
|
var binData = StringToUint8Array(compressData);
|
|
26
26
|
if (typeof decompress_1.algorithms === 'string')
|
|
27
27
|
throw new Error(decompress_1.algorithms);
|
|
@@ -22,10 +22,11 @@ var murmur3_64_1 = require("../../utils/murmur3/murmur3_64");
|
|
|
22
22
|
* - for server-side if key is not provided in settings.
|
|
23
23
|
* - for client-side, with support for multiple clients, if key is provided in settings
|
|
24
24
|
*/
|
|
25
|
-
function pushManagerFactory(
|
|
25
|
+
function pushManagerFactory(params, pollingManager) {
|
|
26
|
+
var settings = params.settings, storage = params.storage, splitApi = params.splitApi, readiness = params.readiness, platform = params.platform;
|
|
26
27
|
// `userKey` is the matching key of main client in client-side SDK.
|
|
27
28
|
// It can be used to check if running on client-side or server-side SDK.
|
|
28
|
-
var userKey = settings.core.key ? key_1.getMatching(settings.core.key) : undefined;
|
|
29
|
+
var userKey = settings.core.key ? (0, key_1.getMatching)(settings.core.key) : undefined;
|
|
29
30
|
var log = settings.log;
|
|
30
31
|
var sseClient;
|
|
31
32
|
try {
|
|
@@ -36,13 +37,14 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
36
37
|
log.warn(constants_2.STREAMING_FALLBACK, [e]);
|
|
37
38
|
return;
|
|
38
39
|
}
|
|
39
|
-
var authenticate = AuthClient_1.authenticateFactory(fetchAuth);
|
|
40
|
+
var authenticate = (0, AuthClient_1.authenticateFactory)(splitApi.fetchAuth);
|
|
40
41
|
// init feedback loop
|
|
41
42
|
var pushEmitter = new platform.EventEmitter();
|
|
42
|
-
var sseHandler = SSEHandler_1.SSEHandlerFactory(log, pushEmitter);
|
|
43
|
+
var sseHandler = (0, SSEHandler_1.SSEHandlerFactory)(log, pushEmitter);
|
|
43
44
|
sseClient.setEventHandler(sseHandler);
|
|
44
45
|
// init workers
|
|
45
|
-
|
|
46
|
+
// MySegmentsUpdateWorker (client-side) are initiated in `add` method
|
|
47
|
+
var segmentsUpdateWorker = userKey ? undefined : new SegmentsUpdateWorker_1.SegmentsUpdateWorker(pollingManager.segmentsSyncTask, storage.segments);
|
|
46
48
|
// For server-side we pass the segmentsSyncTask, used by SplitsUpdateWorker to fetch new segments
|
|
47
49
|
var splitsUpdateWorker = new SplitsUpdateWorker_1.SplitsUpdateWorker(storage.splits, pollingManager.splitsSyncTask, readiness.splits, userKey ? undefined : pollingManager.segmentsSyncTask);
|
|
48
50
|
// [Only for client-side] map of hashes to user keys, to dispatch MY_SEGMENTS_UPDATE events to the corresponding MySegmentsUpdateWorker
|
|
@@ -50,17 +52,13 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
50
52
|
// [Only for client-side] map of user keys to their corresponding hash64 and MySegmentsUpdateWorkers.
|
|
51
53
|
// Hash64 is used to process MY_SEGMENTS_UPDATE_V2 events and dispatch actions to the corresponding MySegmentsUpdateWorker.
|
|
52
54
|
var clients = {};
|
|
53
|
-
if (userKey) {
|
|
54
|
-
var hash = AuthClient_1.hashUserKey(userKey);
|
|
55
|
-
userKeyHashes[hash] = userKey;
|
|
56
|
-
clients[userKey] = { hash64: murmur3_64_1.hash64(userKey), worker: segmentsUpdateWorker };
|
|
57
|
-
}
|
|
58
55
|
// [Only for client-side] variable to flag that a new client was added. It is needed to reconnect streaming.
|
|
59
56
|
var connectForNewClient = false;
|
|
60
57
|
// flag that indicates if `stop/disconnectPush` was called, either by the SyncManager, when the client is destroyed, or due to a PUSH_NONRETRYABLE_ERROR error.
|
|
61
58
|
// It is used to halt the `connectPush` process if it was in progress.
|
|
62
59
|
var disconnected;
|
|
63
60
|
// flag that indicates a PUSH_NONRETRYABLE_ERROR, condition with which starting pushManager again is ignored.
|
|
61
|
+
// true if STREAMING_DISABLED control event, or 'pushEnabled: false', or non-recoverable SSE or Auth errors.
|
|
64
62
|
var disabled; // `disabled` implies `disconnected === true`
|
|
65
63
|
/** PushManager functions related to initialization */
|
|
66
64
|
var connectPushRetryBackoff = new Backoff_1.Backoff(connectPush, settings.scheduler.pushRetryBackoffBase);
|
|
@@ -141,7 +139,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
141
139
|
function stopWorkers() {
|
|
142
140
|
splitsUpdateWorker.backoff.reset();
|
|
143
141
|
if (userKey)
|
|
144
|
-
lang_1.forOwn(clients, function (_a) {
|
|
142
|
+
(0, lang_1.forOwn)(clients, function (_a) {
|
|
145
143
|
var worker = _a.worker;
|
|
146
144
|
return worker.backoff.reset();
|
|
147
145
|
});
|
|
@@ -197,15 +195,15 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
197
195
|
case types_1.UpdateStrategy.BoundedFetchRequest: {
|
|
198
196
|
var bitmap_1;
|
|
199
197
|
try {
|
|
200
|
-
bitmap_1 = mySegmentsV2utils_1.parseBitmap(parsedData.d, parsedData.c);
|
|
198
|
+
bitmap_1 = (0, mySegmentsV2utils_1.parseBitmap)(parsedData.d, parsedData.c);
|
|
201
199
|
}
|
|
202
200
|
catch (e) {
|
|
203
201
|
log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['BoundedFetchRequest', e]);
|
|
204
202
|
break;
|
|
205
203
|
}
|
|
206
|
-
lang_1.forOwn(clients, function (_a) {
|
|
204
|
+
(0, lang_1.forOwn)(clients, function (_a) {
|
|
207
205
|
var hash64 = _a.hash64, worker = _a.worker;
|
|
208
|
-
if (mySegmentsV2utils_1.isInBitmap(bitmap_1, hash64.hex)) {
|
|
206
|
+
if ((0, mySegmentsV2utils_1.isInBitmap)(bitmap_1, hash64.hex)) {
|
|
209
207
|
worker.put(parsedData.changeNumber); // fetch mySegments
|
|
210
208
|
}
|
|
211
209
|
});
|
|
@@ -214,7 +212,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
214
212
|
case types_1.UpdateStrategy.KeyList: {
|
|
215
213
|
var keyList = void 0, added_1, removed_1;
|
|
216
214
|
try {
|
|
217
|
-
keyList = mySegmentsV2utils_1.parseKeyList(parsedData.d, parsedData.c);
|
|
215
|
+
keyList = (0, mySegmentsV2utils_1.parseKeyList)(parsedData.d, parsedData.c);
|
|
218
216
|
added_1 = new sets_1._Set(keyList.a);
|
|
219
217
|
removed_1 = new sets_1._Set(keyList.r);
|
|
220
218
|
}
|
|
@@ -222,7 +220,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
222
220
|
log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['KeyList', e]);
|
|
223
221
|
break;
|
|
224
222
|
}
|
|
225
|
-
lang_1.forOwn(clients, function (_a) {
|
|
223
|
+
(0, lang_1.forOwn)(clients, function (_a) {
|
|
226
224
|
var hash64 = _a.hash64, worker = _a.worker;
|
|
227
225
|
var add = added_1.has(hash64.dec) ? true : removed_1.has(hash64.dec) ? false : undefined;
|
|
228
226
|
if (add !== undefined) {
|
|
@@ -239,7 +237,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
239
237
|
log.warn(constants_2.STREAMING_PARSING_MY_SEGMENTS_UPDATE_V2, ['SegmentRemoval', 'No segment name was provided']);
|
|
240
238
|
break;
|
|
241
239
|
}
|
|
242
|
-
lang_1.forOwn(clients, function (_a) {
|
|
240
|
+
(0, lang_1.forOwn)(clients, function (_a) {
|
|
243
241
|
var worker = _a.worker;
|
|
244
242
|
return worker.put(parsedData.changeNumber, {
|
|
245
243
|
name: parsedData.segmentName,
|
|
@@ -249,7 +247,7 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
249
247
|
return;
|
|
250
248
|
}
|
|
251
249
|
// `UpdateStrategy.UnboundedFetchRequest` and fallbacks of other cases
|
|
252
|
-
lang_1.forOwn(clients, function (_a) {
|
|
250
|
+
(0, lang_1.forOwn)(clients, function (_a) {
|
|
253
251
|
var worker = _a.worker;
|
|
254
252
|
worker.put(parsedData.changeNumber);
|
|
255
253
|
});
|
|
@@ -258,40 +256,53 @@ function pushManagerFactory(pollingManager, storage, readiness, fetchAuth, platf
|
|
|
258
256
|
else {
|
|
259
257
|
pushEmitter.on(constants_1.SEGMENT_UPDATE, segmentsUpdateWorker.put);
|
|
260
258
|
}
|
|
261
|
-
return objectAssign_1.objectAssign(
|
|
259
|
+
return (0, objectAssign_1.objectAssign)(
|
|
262
260
|
// Expose Event Emitter functionality and Event constants
|
|
263
261
|
Object.create(pushEmitter), {
|
|
264
|
-
//
|
|
265
|
-
|
|
262
|
+
// Stop/pause push mode.
|
|
263
|
+
// It doesn't emit events. Neither PUSH_SUBSYSTEM_DOWN to start polling.
|
|
264
|
+
stop: function () {
|
|
265
|
+
disconnectPush(); // `handleNonRetryableError` cannot be used as `stop`, because it emits PUSH_SUBSYSTEM_DOWN event, which starts polling.
|
|
266
|
+
if (userKey)
|
|
267
|
+
this.remove(userKey); // Necessary to properly resume streaming in client-side (e.g., RN SDK transition to foreground).
|
|
268
|
+
},
|
|
269
|
+
// Start/resume push mode.
|
|
270
|
+
// It eventually emits PUSH_SUBSYSTEM_DOWN, that starts polling, or PUSH_SUBSYSTEM_UP, that executes a syncAll
|
|
266
271
|
start: function () {
|
|
267
272
|
// Guard condition to avoid calling `connectPush` again if the `start` method is called multiple times or if push has been disabled.
|
|
268
273
|
if (disabled || disconnected === false)
|
|
269
274
|
return;
|
|
270
275
|
disconnected = false;
|
|
271
|
-
|
|
272
|
-
|
|
276
|
+
if (userKey)
|
|
277
|
+
this.add(userKey, pollingManager.segmentsSyncTask); // client-side
|
|
278
|
+
else
|
|
279
|
+
setTimeout(connectPush); // server-side runs in next cycle as in client-side, for consistency with client-side
|
|
280
|
+
},
|
|
281
|
+
// true/false if start or stop was called last respectively
|
|
282
|
+
isRunning: function () {
|
|
283
|
+
return disconnected === false;
|
|
273
284
|
},
|
|
274
285
|
// [Only for client-side]
|
|
275
286
|
add: function (userKey, mySegmentsSyncTask) {
|
|
276
|
-
|
|
277
|
-
var hash = AuthClient_1.hashUserKey(userKey);
|
|
287
|
+
var hash = (0, AuthClient_1.hashUserKey)(userKey);
|
|
278
288
|
if (!userKeyHashes[hash]) {
|
|
279
289
|
userKeyHashes[hash] = userKey;
|
|
290
|
+
clients[userKey] = { hash64: (0, murmur3_64_1.hash64)(userKey), worker: new MySegmentsUpdateWorker_1.MySegmentsUpdateWorker(mySegmentsSyncTask) };
|
|
280
291
|
connectForNewClient = true; // we must reconnect on start, to listen the channel for the new user key
|
|
292
|
+
// Reconnects in case of a new client.
|
|
293
|
+
// Run in next event-loop cycle to save authentication calls
|
|
294
|
+
// in case multiple clients are created in the current cycle.
|
|
295
|
+
setTimeout(function checkForReconnect() {
|
|
296
|
+
if (connectForNewClient) {
|
|
297
|
+
connectForNewClient = false;
|
|
298
|
+
connectPush();
|
|
299
|
+
}
|
|
300
|
+
}, 0);
|
|
281
301
|
}
|
|
282
|
-
// Reconnects in case of a new client.
|
|
283
|
-
// Run in next event-loop cycle to save authentication calls
|
|
284
|
-
// in case the user is creating several clients in the current cycle.
|
|
285
|
-
setTimeout(function checkForReconnect() {
|
|
286
|
-
if (connectForNewClient) {
|
|
287
|
-
connectForNewClient = false;
|
|
288
|
-
connectPush();
|
|
289
|
-
}
|
|
290
|
-
}, 0);
|
|
291
302
|
},
|
|
292
303
|
// [Only for client-side]
|
|
293
304
|
remove: function (userKey) {
|
|
294
|
-
var hash = AuthClient_1.hashUserKey(userKey);
|
|
305
|
+
var hash = (0, AuthClient_1.hashUserKey)(userKey);
|
|
295
306
|
delete userKeyHashes[hash];
|
|
296
307
|
delete clients[userKey];
|
|
297
308
|
}
|
|
@@ -3,29 +3,41 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.eventsSyncTaskFactory = void 0;
|
|
4
4
|
var submitterSyncTask_1 = require("./submitterSyncTask");
|
|
5
5
|
var constants_1 = require("../../logger/constants");
|
|
6
|
+
var DATA_NAME = 'events';
|
|
6
7
|
/**
|
|
7
8
|
* Sync task that periodically posts tracked events
|
|
8
9
|
*/
|
|
9
10
|
function eventsSyncTaskFactory(log, postEventsBulk, eventsCache, eventsPushRate, eventsFirstPushWindow, latencyTracker) {
|
|
10
11
|
// don't retry events.
|
|
11
|
-
var syncTask = submitterSyncTask_1.submitterSyncTaskFactory(log, postEventsBulk, eventsCache, eventsPushRate,
|
|
12
|
-
// Set a timer for the first push of events
|
|
12
|
+
var syncTask = (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postEventsBulk, eventsCache, eventsPushRate, DATA_NAME, latencyTracker);
|
|
13
|
+
// Set a timer for the first push window of events.
|
|
14
|
+
// Not implemented in the base submitter or sync task, since this feature is only used by the events submitter.
|
|
13
15
|
if (eventsFirstPushWindow > 0) {
|
|
16
|
+
var running_1 = false;
|
|
14
17
|
var stopEventPublisherTimeout_1;
|
|
15
18
|
var originalStart_1 = syncTask.start;
|
|
16
19
|
syncTask.start = function () {
|
|
20
|
+
running_1 = true;
|
|
17
21
|
stopEventPublisherTimeout_1 = setTimeout(originalStart_1, eventsFirstPushWindow);
|
|
18
22
|
};
|
|
19
23
|
var originalStop_1 = syncTask.stop;
|
|
20
24
|
syncTask.stop = function () {
|
|
25
|
+
running_1 = false;
|
|
21
26
|
clearTimeout(stopEventPublisherTimeout_1);
|
|
22
27
|
originalStop_1();
|
|
23
28
|
};
|
|
29
|
+
syncTask.isRunning = function () {
|
|
30
|
+
return running_1;
|
|
31
|
+
};
|
|
24
32
|
}
|
|
25
|
-
// register
|
|
33
|
+
// register events submitter to be executed when events cache is full
|
|
26
34
|
eventsCache.setOnFullQueueCb(function () {
|
|
27
|
-
|
|
28
|
-
|
|
35
|
+
if (syncTask.isRunning()) {
|
|
36
|
+
log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [DATA_NAME]);
|
|
37
|
+
syncTask.execute();
|
|
38
|
+
}
|
|
39
|
+
// If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data.
|
|
40
|
+
// Data will be sent when submitter is resumed.
|
|
29
41
|
});
|
|
30
42
|
return syncTask;
|
|
31
43
|
}
|
|
@@ -30,6 +30,6 @@ var IMPRESSIONS_COUNT_RATE = 1800000; // 30 minutes
|
|
|
30
30
|
*/
|
|
31
31
|
function impressionCountsSyncTaskFactory(log, postTestImpressionsCount, impressionCountsCache, latencyTracker) {
|
|
32
32
|
// retry impressions counts only once.
|
|
33
|
-
return submitterSyncTask_1.submitterSyncTaskFactory(log, postTestImpressionsCount, impressionCountsCache, IMPRESSIONS_COUNT_RATE, 'impression counts', latencyTracker, fromImpressionCountsCollector, 1);
|
|
33
|
+
return (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postTestImpressionsCount, impressionCountsCache, IMPRESSIONS_COUNT_RATE, 'impression counts', latencyTracker, fromImpressionCountsCollector, 1);
|
|
34
34
|
}
|
|
35
35
|
exports.impressionCountsSyncTaskFactory = impressionCountsSyncTaskFactory;
|
|
@@ -3,14 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.impressionsSyncTaskFactory = exports.fromImpressionsCollector = void 0;
|
|
4
4
|
var lang_1 = require("../../utils/lang");
|
|
5
5
|
var submitterSyncTask_1 = require("./submitterSyncTask");
|
|
6
|
+
var constants_1 = require("../../logger/constants");
|
|
7
|
+
var DATA_NAME = 'impressions';
|
|
6
8
|
/**
|
|
7
9
|
* Converts `impressions` data from cache into request payload.
|
|
8
10
|
*/
|
|
9
11
|
function fromImpressionsCollector(sendLabels, data) {
|
|
10
|
-
var groupedByFeature = lang_1.groupBy(data, 'feature');
|
|
12
|
+
var groupedByFeature = (0, lang_1.groupBy)(data, 'feature');
|
|
11
13
|
var dto = [];
|
|
12
14
|
// using forOwn instead of for...in since the last also iterates over prototype enumerables
|
|
13
|
-
lang_1.forOwn(groupedByFeature, function (value, name) {
|
|
15
|
+
(0, lang_1.forOwn)(groupedByFeature, function (value, name) {
|
|
14
16
|
dto.push({
|
|
15
17
|
f: name,
|
|
16
18
|
i: value.map(function (entry) {
|
|
@@ -36,6 +38,16 @@ exports.fromImpressionsCollector = fromImpressionsCollector;
|
|
|
36
38
|
function impressionsSyncTaskFactory(log, postTestImpressionsBulk, impressionsCache, impressionsRefreshRate, sendLabels, latencyTracker) {
|
|
37
39
|
if (sendLabels === void 0) { sendLabels = false; }
|
|
38
40
|
// retry impressions only once.
|
|
39
|
-
|
|
41
|
+
var syncTask = (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postTestImpressionsBulk, impressionsCache, impressionsRefreshRate, DATA_NAME, latencyTracker, fromImpressionsCollector.bind(undefined, sendLabels), 1);
|
|
42
|
+
// register impressions submitter to be executed when impressions cache is full
|
|
43
|
+
impressionsCache.setOnFullQueueCb(function () {
|
|
44
|
+
if (syncTask.isRunning()) {
|
|
45
|
+
log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [DATA_NAME]);
|
|
46
|
+
syncTask.execute();
|
|
47
|
+
}
|
|
48
|
+
// If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data.
|
|
49
|
+
// Data will be sent when submitter is resumed.
|
|
50
|
+
});
|
|
51
|
+
return syncTask;
|
|
40
52
|
}
|
|
41
53
|
exports.impressionsSyncTaskFactory = impressionsSyncTaskFactory;
|
|
@@ -7,7 +7,7 @@ var submitterSyncTask_1 = require("./submitterSyncTask");
|
|
|
7
7
|
function fromCache(propertyName) {
|
|
8
8
|
return function (data) {
|
|
9
9
|
var result = [];
|
|
10
|
-
lang_1.forOwn(data, function (value, key) {
|
|
10
|
+
(0, lang_1.forOwn)(data, function (value, key) {
|
|
11
11
|
var _a;
|
|
12
12
|
result.push((_a = { name: key }, _a[propertyName] = value, _a));
|
|
13
13
|
});
|
|
@@ -18,7 +18,7 @@ function fromCache(propertyName) {
|
|
|
18
18
|
* Sync task that periodically posts telemetry counts
|
|
19
19
|
*/
|
|
20
20
|
function countsSyncTaskFactory(log, postMetricsCounters, countsCache, metricsRefreshRate, latencyTracker) {
|
|
21
|
-
return submitterSyncTask_1.submitterSyncTaskFactory(log, postMetricsCounters, countsCache, metricsRefreshRate, 'count metrics', latencyTracker, fromCache('delta'));
|
|
21
|
+
return (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postMetricsCounters, countsCache, metricsRefreshRate, 'count metrics', latencyTracker, fromCache('delta'));
|
|
22
22
|
}
|
|
23
23
|
exports.countsSyncTaskFactory = countsSyncTaskFactory;
|
|
24
24
|
/**
|
|
@@ -26,6 +26,6 @@ exports.countsSyncTaskFactory = countsSyncTaskFactory;
|
|
|
26
26
|
*/
|
|
27
27
|
function latenciesSyncTaskFactory(log, postMetricsLatencies, latenciesCache, metricsRefreshRate, latencyTracker) {
|
|
28
28
|
// don't retry metrics.
|
|
29
|
-
return submitterSyncTask_1.submitterSyncTaskFactory(log, postMetricsLatencies, latenciesCache, metricsRefreshRate, 'latency metrics', latencyTracker, fromCache('latencies'), 0, true);
|
|
29
|
+
return (0, submitterSyncTask_1.submitterSyncTaskFactory)(log, postMetricsLatencies, latenciesCache, metricsRefreshRate, 'latency metrics', latencyTracker, fromCache('latencies'), 0, true);
|
|
30
30
|
}
|
|
31
31
|
exports.latenciesSyncTaskFactory = latenciesSyncTaskFactory;
|
|
@@ -5,15 +5,16 @@ var syncTaskComposite_1 = require("../syncTaskComposite");
|
|
|
5
5
|
var eventsSyncTask_1 = require("./eventsSyncTask");
|
|
6
6
|
var impressionsSyncTask_1 = require("./impressionsSyncTask");
|
|
7
7
|
var impressionCountsSyncTask_1 = require("./impressionCountsSyncTask");
|
|
8
|
-
function submitterManagerFactory(
|
|
8
|
+
function submitterManagerFactory(params) {
|
|
9
|
+
var settings = params.settings, storage = params.storage, splitApi = params.splitApi;
|
|
9
10
|
var log = settings.log;
|
|
10
11
|
var submitters = [
|
|
11
|
-
impressionsSyncTask_1.impressionsSyncTaskFactory(log, splitApi.postTestImpressionsBulk, storage.impressions, settings.scheduler.impressionsRefreshRate, settings.core.labelsEnabled),
|
|
12
|
-
eventsSyncTask_1.eventsSyncTaskFactory(log, splitApi.postEventsBulk, storage.events, settings.scheduler.eventsPushRate, settings.startup.eventsFirstPushWindow)
|
|
12
|
+
(0, impressionsSyncTask_1.impressionsSyncTaskFactory)(log, splitApi.postTestImpressionsBulk, storage.impressions, settings.scheduler.impressionsRefreshRate, settings.core.labelsEnabled),
|
|
13
|
+
(0, eventsSyncTask_1.eventsSyncTaskFactory)(log, splitApi.postEventsBulk, storage.events, settings.scheduler.eventsPushRate, settings.startup.eventsFirstPushWindow)
|
|
13
14
|
// @TODO add telemetry submitter
|
|
14
15
|
];
|
|
15
16
|
if (storage.impressionCounts)
|
|
16
|
-
submitters.push(impressionCountsSyncTask_1.impressionCountsSyncTaskFactory(log, splitApi.postTestImpressionsCount, storage.impressionCounts));
|
|
17
|
-
return syncTaskComposite_1.syncTaskComposite(submitters);
|
|
17
|
+
submitters.push((0, impressionCountsSyncTask_1.impressionCountsSyncTaskFactory)(log, splitApi.postTestImpressionsCount, storage.impressionCounts));
|
|
18
|
+
return (0, syncTaskComposite_1.syncTaskComposite)(submitters);
|
|
18
19
|
}
|
|
19
20
|
exports.submitterManagerFactory = submitterManagerFactory;
|
|
@@ -39,6 +39,6 @@ function submitterSyncTaskFactory(log, postClient, sourceCache, postRate, dataNa
|
|
|
39
39
|
// if latencyTracker provided, attach stop callback to postEventsPromise
|
|
40
40
|
return latencyTrackerStop ? postPromise.then(latencyTrackerStop).catch(latencyTrackerStop) : postPromise;
|
|
41
41
|
}
|
|
42
|
-
return syncTask_1.syncTaskFactory(log, postData, postRate, dataName + ' submitter');
|
|
42
|
+
return (0, syncTask_1.syncTaskFactory)(log, postData, postRate, dataName + ' submitter');
|
|
43
43
|
}
|
|
44
44
|
exports.submitterSyncTaskFactory = submitterSyncTaskFactory;
|
|
@@ -4,6 +4,7 @@ exports.syncManagerOnlineFactory = void 0;
|
|
|
4
4
|
var submitterManager_1 = require("./submitters/submitterManager");
|
|
5
5
|
var constants_1 = require("./streaming/constants");
|
|
6
6
|
var constants_2 = require("../logger/constants");
|
|
7
|
+
var consent_1 = require("../utils/consent");
|
|
7
8
|
/**
|
|
8
9
|
* Online SyncManager factory.
|
|
9
10
|
* Can be used for server-side API, and client-side API with or without multiple clients.
|
|
@@ -16,26 +17,25 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
|
|
|
16
17
|
/**
|
|
17
18
|
* SyncManager factory for modular SDK
|
|
18
19
|
*/
|
|
19
|
-
return function (
|
|
20
|
-
var settings =
|
|
21
|
-
var log = settings.log;
|
|
20
|
+
return function (params) {
|
|
21
|
+
var settings = params.settings, _a = params.settings, log = _a.log, streamingEnabled = _a.streamingEnabled;
|
|
22
22
|
/** Polling Manager */
|
|
23
|
-
var pollingManager = pollingManagerFactory && pollingManagerFactory(
|
|
23
|
+
var pollingManager = pollingManagerFactory && pollingManagerFactory(params);
|
|
24
24
|
/** Push Manager */
|
|
25
|
-
var pushManager =
|
|
26
|
-
pushManagerFactory(
|
|
25
|
+
var pushManager = streamingEnabled && pollingManager && pushManagerFactory ?
|
|
26
|
+
pushManagerFactory(params, pollingManager) :
|
|
27
27
|
undefined;
|
|
28
28
|
/** Submitter Manager */
|
|
29
29
|
// It is not inyected as push and polling managers, because at the moment it is required
|
|
30
|
-
var submitter = submitterManager_1.submitterManagerFactory(
|
|
30
|
+
var submitter = (0, submitterManager_1.submitterManagerFactory)(params);
|
|
31
31
|
/** Sync Manager logic */
|
|
32
32
|
function startPolling() {
|
|
33
|
-
if (
|
|
34
|
-
log.info(constants_2.
|
|
35
|
-
pollingManager.start();
|
|
33
|
+
if (pollingManager.isRunning()) {
|
|
34
|
+
log.info(constants_2.SYNC_CONTINUE_POLLING);
|
|
36
35
|
}
|
|
37
36
|
else {
|
|
38
|
-
log.info(constants_2.
|
|
37
|
+
log.info(constants_2.SYNC_START_POLLING);
|
|
38
|
+
pollingManager.start();
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
function stopPollingAndSyncAll() {
|
|
@@ -53,11 +53,16 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
|
|
|
53
53
|
var running = false; // flag that indicates whether the syncManager has been started (true) or stopped (false)
|
|
54
54
|
var startFirstTime = true; // flag to distinguish calling the `start` method for the first time, to support pausing and resuming the synchronization
|
|
55
55
|
return {
|
|
56
|
+
// Exposed for fine-grained control of synchronization.
|
|
57
|
+
// E.g.: user consent, app state changes (Page hide, Foreground/Background, Online/Offline).
|
|
58
|
+
pollingManager: pollingManager,
|
|
56
59
|
pushManager: pushManager,
|
|
60
|
+
submitter: submitter,
|
|
57
61
|
/**
|
|
58
62
|
* Method used to start the syncManager for the first time, or resume it after being stopped.
|
|
59
63
|
*/
|
|
60
64
|
start: function () {
|
|
65
|
+
running = true;
|
|
61
66
|
// start syncing splits and segments
|
|
62
67
|
if (pollingManager) {
|
|
63
68
|
if (pushManager) {
|
|
@@ -73,28 +78,27 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
|
|
|
73
78
|
}
|
|
74
79
|
}
|
|
75
80
|
// start periodic data recording (events, impressions, telemetry).
|
|
76
|
-
|
|
77
|
-
|
|
81
|
+
if ((0, consent_1.isConsentGranted)(settings))
|
|
82
|
+
submitter.start();
|
|
78
83
|
},
|
|
79
84
|
/**
|
|
80
85
|
* Method used to stop/pause the syncManager.
|
|
81
86
|
*/
|
|
82
87
|
stop: function () {
|
|
88
|
+
running = false;
|
|
83
89
|
// stop syncing
|
|
84
90
|
if (pushManager)
|
|
85
91
|
pushManager.stop();
|
|
86
92
|
if (pollingManager && pollingManager.isRunning())
|
|
87
93
|
pollingManager.stop();
|
|
88
94
|
// stop periodic data recording (events, impressions, telemetry).
|
|
89
|
-
|
|
90
|
-
submitter.stop();
|
|
91
|
-
running = false;
|
|
95
|
+
submitter.stop();
|
|
92
96
|
},
|
|
93
97
|
isRunning: function () {
|
|
94
98
|
return running;
|
|
95
99
|
},
|
|
96
100
|
flush: function () {
|
|
97
|
-
if (
|
|
101
|
+
if ((0, consent_1.isConsentGranted)(settings))
|
|
98
102
|
return submitter.execute();
|
|
99
103
|
else
|
|
100
104
|
return Promise.resolve();
|
|
@@ -4,13 +4,17 @@ exports.eventTrackerFactory = void 0;
|
|
|
4
4
|
var objectAssign_1 = require("../utils/lang/objectAssign");
|
|
5
5
|
var thenable_1 = require("../utils/promise/thenable");
|
|
6
6
|
var constants_1 = require("../logger/constants");
|
|
7
|
+
var constants_2 = require("../utils/constants");
|
|
8
|
+
var utils_1 = require("./impressionObserver/utils");
|
|
7
9
|
/**
|
|
8
10
|
* Event tracker stores events in cache and pass them to the integrations manager if provided.
|
|
9
11
|
*
|
|
10
12
|
* @param eventsCache cache to save events
|
|
11
13
|
* @param integrationsManager optional event handler used for integrations
|
|
12
14
|
*/
|
|
13
|
-
function eventTrackerFactory(
|
|
15
|
+
function eventTrackerFactory(settings, eventsCache, integrationsManager) {
|
|
16
|
+
var log = settings.log;
|
|
17
|
+
var isSync = (0, utils_1.isStorageSync)(settings);
|
|
14
18
|
function queueEventsCallback(eventData, tracked) {
|
|
15
19
|
var eventTypeId = eventData.eventTypeId, trafficTypeName = eventData.trafficTypeName, key = eventData.key, value = eventData.value, timestamp = eventData.timestamp, properties = eventData.properties;
|
|
16
20
|
// Logging every prop would be too much.
|
|
@@ -21,9 +25,9 @@ function eventTrackerFactory(log, eventsCache, integrationsManager) {
|
|
|
21
25
|
// Wrap in a timeout because we don't want it to be blocking.
|
|
22
26
|
setTimeout(function () {
|
|
23
27
|
// copy of event, to avoid unexpected behaviour if modified by integrations
|
|
24
|
-
var eventDataCopy = objectAssign_1.objectAssign({}, eventData);
|
|
28
|
+
var eventDataCopy = (0, objectAssign_1.objectAssign)({}, eventData);
|
|
25
29
|
if (eventData.properties)
|
|
26
|
-
eventDataCopy.properties = objectAssign_1.objectAssign({}, eventData.properties);
|
|
30
|
+
eventDataCopy.properties = (0, objectAssign_1.objectAssign)({}, eventData.properties);
|
|
27
31
|
// integrationsManager does not throw errors (they are internally handled by each integration module)
|
|
28
32
|
integrationsManager.handleEvent(eventDataCopy);
|
|
29
33
|
}, 0);
|
|
@@ -36,8 +40,11 @@ function eventTrackerFactory(log, eventsCache, integrationsManager) {
|
|
|
36
40
|
}
|
|
37
41
|
return {
|
|
38
42
|
track: function (eventData, size) {
|
|
43
|
+
if (settings.userConsent === constants_2.CONSENT_DECLINED) {
|
|
44
|
+
return isSync ? false : Promise.resolve(false);
|
|
45
|
+
}
|
|
39
46
|
var tracked = eventsCache.track(eventData, size);
|
|
40
|
-
if (thenable_1.thenable(tracked)) {
|
|
47
|
+
if ((0, thenable_1.thenable)(tracked)) {
|
|
41
48
|
return tracked.then(queueEventsCallback.bind(null, eventData));
|
|
42
49
|
}
|
|
43
50
|
else {
|
|
@@ -5,7 +5,7 @@ var ImpressionObserver_1 = require("./ImpressionObserver");
|
|
|
5
5
|
var murmur3_1 = require("../../utils/murmur3/murmur3");
|
|
6
6
|
var buildKey_1 = require("./buildKey");
|
|
7
7
|
function hashImpression32(impression) {
|
|
8
|
-
return murmur3_1.hash(buildKey_1.buildKey(impression));
|
|
8
|
+
return (0, murmur3_1.hash)((0, buildKey_1.buildKey)(impression));
|
|
9
9
|
}
|
|
10
10
|
exports.hashImpression32 = hashImpression32;
|
|
11
11
|
var LAST_SEEN_CACHE_SIZE = 500; // cache up to 500 impression hashes
|