@splitsoftware/splitio-commons 2.4.2-rc.3 → 11.5.0-rc.0
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/CHANGES.txt +895 -152
- package/CONTRIBUTORS-GUIDE.md +26 -16
- package/README.md +43 -5
- package/cjs/factory/browser.js +73 -0
- package/cjs/factory/node.js +79 -0
- package/cjs/factory/package.json +4 -0
- package/cjs/index.js +3 -16
- package/cjs/{utils/MinEvents.js → platform/EventEmitter.js} +153 -27
- package/cjs/platform/browser.js +15 -0
- package/cjs/platform/filter/bloomFilter.js +32 -0
- package/cjs/platform/getEventSource/browser.js +7 -0
- package/cjs/platform/getEventSource/eventsource.js +480 -0
- package/cjs/platform/getEventSource/node.js +25 -0
- package/cjs/platform/getEventSource/package.json +4 -0
- package/cjs/platform/getFetch/browser.js +9 -0
- package/cjs/platform/getFetch/node.js +26 -0
- package/cjs/platform/getFetch/package.json +4 -0
- package/cjs/platform/getOptions/node.js +25 -0
- package/cjs/platform/node.js +18 -0
- package/cjs/platform/package.json +4 -0
- package/cjs/settings/browser.js +21 -0
- package/cjs/settings/defaults/browser.js +21 -0
- package/cjs/settings/defaults/node.js +23 -0
- package/cjs/{listeners/types.js → settings/defaults/version.js} +2 -0
- package/cjs/settings/integrations/browser.js +9 -0
- package/cjs/settings/node.js +22 -0
- package/cjs/settings/package.json +4 -0
- package/cjs/settings/runtime/node.js +22 -0
- package/cjs/settings/storage/browser.js +35 -0
- package/cjs/settings/storage/node.js +67 -0
- package/cjs/sync/offline/LocalhostFromFile.js +8 -0
- package/cjs/sync/offline/splitsParserFromFile.js +148 -0
- package/cjs/umd.js +5 -0
- package/cjs/utils/ip.js +114 -0
- package/client/package.json +5 -0
- package/esm/factory/browser.js +69 -0
- package/esm/factory/node.js +75 -0
- package/esm/factory/package.json +4 -0
- package/esm/index.js +1 -10
- package/esm/{utils/MinEvents.js → platform/EventEmitter.js} +143 -17
- package/esm/platform/browser.js +12 -0
- package/esm/platform/filter/bloomFilter.js +28 -0
- package/esm/platform/getEventSource/browser.js +3 -0
- package/esm/platform/getEventSource/eventsource.js +480 -0
- package/esm/platform/getEventSource/node.js +19 -0
- package/esm/platform/getEventSource/package.json +4 -0
- package/esm/platform/getFetch/browser.js +4 -0
- package/esm/platform/getFetch/node.js +21 -0
- package/esm/platform/getFetch/package.json +4 -0
- package/esm/platform/getOptions/node.js +20 -0
- package/esm/platform/node.js +14 -0
- package/esm/platform/package.json +4 -0
- package/esm/settings/browser.js +17 -0
- package/esm/settings/defaults/browser.js +18 -0
- package/esm/settings/defaults/node.js +20 -0
- package/esm/settings/defaults/version.js +1 -0
- package/esm/settings/integrations/browser.js +5 -0
- package/esm/settings/node.js +18 -0
- package/esm/settings/package.json +4 -0
- package/esm/settings/runtime/node.js +17 -0
- package/esm/settings/storage/browser.js +31 -0
- package/esm/settings/storage/node.js +63 -0
- package/esm/sync/offline/LocalhostFromFile.js +5 -0
- package/esm/sync/offline/splitsParserFromFile.js +143 -0
- package/esm/umd.js +3 -0
- package/esm/utils/ip.js +109 -0
- package/package.json +99 -58
- package/server/package.json +5 -0
- package/src/factory/browser.js +85 -0
- package/src/factory/node.js +92 -0
- package/src/factory/package.json +4 -0
- package/src/index.js +1 -0
- package/src/{utils/MinEvents.ts → platform/EventEmitter.js} +164 -19
- package/src/platform/browser.js +14 -0
- package/src/platform/filter/bloomFilter.js +33 -0
- package/src/platform/getEventSource/browser.js +3 -0
- package/src/platform/getEventSource/eventsource.js +519 -0
- package/src/platform/getEventSource/node.js +20 -0
- package/src/platform/getEventSource/package.json +4 -0
- package/src/platform/getFetch/browser.js +5 -0
- package/src/platform/getFetch/node.js +24 -0
- package/src/platform/getFetch/package.json +4 -0
- package/src/platform/getOptions/node.js +23 -0
- package/src/platform/node.js +16 -0
- package/src/platform/package.json +4 -0
- package/src/settings/browser.js +20 -0
- package/src/settings/defaults/browser.js +21 -0
- package/src/settings/defaults/node.js +23 -0
- package/src/settings/defaults/version.js +1 -0
- package/src/settings/integrations/browser.js +6 -0
- package/src/settings/node.js +21 -0
- package/src/settings/package.json +4 -0
- package/src/settings/runtime/node.js +21 -0
- package/src/settings/storage/browser.js +47 -0
- package/src/settings/storage/node.js +84 -0
- package/src/sync/offline/LocalhostFromFile.js +6 -0
- package/src/sync/offline/splitsParserFromFile.js +173 -0
- package/src/umd.js +4 -0
- package/src/utils/ip.js +123 -0
- package/types/client/index.d.ts +15 -0
- package/types/index.d.ts +24 -1
- package/types/server/index.d.ts +21 -0
- package/types/splitio.d.ts +2 -2083
- package/cjs/consent/index.js +0 -10
- package/cjs/consent/sdkUserConsent.js +0 -60
- package/cjs/dtos/types.js +0 -2
- package/cjs/evaluator/Engine.js +0 -58
- package/cjs/evaluator/combiners/and.js +0 -25
- package/cjs/evaluator/combiners/ifelseif.js +0 -48
- package/cjs/evaluator/condition/engineUtils.js +0 -29
- package/cjs/evaluator/condition/index.js +0 -41
- package/cjs/evaluator/convertions/index.js +0 -11
- package/cjs/evaluator/index.js +0 -134
- package/cjs/evaluator/matchers/all.js +0 -9
- package/cjs/evaluator/matchers/between.js +0 -10
- package/cjs/evaluator/matchers/boolean.js +0 -10
- package/cjs/evaluator/matchers/cont_all.js +0 -23
- package/cjs/evaluator/matchers/cont_any.js +0 -18
- package/cjs/evaluator/matchers/cont_str.js +0 -11
- package/cjs/evaluator/matchers/dependency.js +0 -28
- package/cjs/evaluator/matchers/eq.js +0 -10
- package/cjs/evaluator/matchers/eq_set.js +0 -20
- package/cjs/evaluator/matchers/ew.js +0 -11
- package/cjs/evaluator/matchers/gte.js +0 -10
- package/cjs/evaluator/matchers/index.js +0 -66
- package/cjs/evaluator/matchers/large_segment.js +0 -10
- package/cjs/evaluator/matchers/lte.js +0 -10
- package/cjs/evaluator/matchers/matcherTypes.js +0 -46
- package/cjs/evaluator/matchers/part_of.js +0 -20
- package/cjs/evaluator/matchers/prerequisites.js +0 -22
- package/cjs/evaluator/matchers/rbsegment.js +0 -56
- package/cjs/evaluator/matchers/segment.js +0 -10
- package/cjs/evaluator/matchers/semver_between.js +0 -14
- package/cjs/evaluator/matchers/semver_eq.js +0 -13
- package/cjs/evaluator/matchers/semver_gte.js +0 -13
- package/cjs/evaluator/matchers/semver_inlist.js +0 -16
- package/cjs/evaluator/matchers/semver_lte.js +0 -13
- package/cjs/evaluator/matchers/string.js +0 -11
- package/cjs/evaluator/matchers/sw.js +0 -11
- package/cjs/evaluator/matchers/whitelist.js +0 -11
- package/cjs/evaluator/matchersTransform/index.js +0 -104
- package/cjs/evaluator/matchersTransform/segment.js +0 -12
- package/cjs/evaluator/matchersTransform/unaryNumeric.js +0 -10
- package/cjs/evaluator/matchersTransform/whitelist.js +0 -10
- package/cjs/evaluator/parser/index.js +0 -61
- package/cjs/evaluator/treatments/index.js +0 -42
- package/cjs/evaluator/types.js +0 -2
- package/cjs/evaluator/value/index.js +0 -37
- package/cjs/evaluator/value/sanitize.js +0 -94
- package/cjs/integrations/pluggable.js +0 -35
- package/cjs/integrations/types.js +0 -2
- package/cjs/listeners/browser.js +0 -121
- package/cjs/listeners/node.js +0 -68
- package/cjs/logger/browser/DebugLogger.js +0 -9
- package/cjs/logger/browser/ErrorLogger.js +0 -9
- package/cjs/logger/browser/InfoLogger.js +0 -9
- package/cjs/logger/browser/WarnLogger.js +0 -9
- package/cjs/logger/constants.js +0 -140
- package/cjs/logger/index.js +0 -100
- package/cjs/logger/messages/debug.js +0 -36
- package/cjs/logger/messages/error.js +0 -42
- package/cjs/logger/messages/info.js +0 -37
- package/cjs/logger/messages/warn.js +0 -42
- package/cjs/logger/sdkLogger.js +0 -45
- package/cjs/logger/types.js +0 -2
- package/cjs/readiness/constants.js +0 -13
- package/cjs/readiness/readinessManager.js +0 -154
- package/cjs/readiness/sdkReadinessManager.js +0 -104
- package/cjs/readiness/types.js +0 -2
- package/cjs/sdkClient/client.js +0 -183
- package/cjs/sdkClient/clientAttributesDecoration.js +0 -122
- package/cjs/sdkClient/clientCS.js +0 -30
- package/cjs/sdkClient/clientInputValidation.js +0 -147
- package/cjs/sdkClient/identity.js +0 -7
- package/cjs/sdkClient/sdkClient.js +0 -64
- package/cjs/sdkClient/sdkClientMethod.js +0 -22
- package/cjs/sdkClient/sdkClientMethodCS.js +0 -66
- package/cjs/sdkFactory/index.js +0 -108
- package/cjs/sdkFactory/types.js +0 -2
- package/cjs/sdkManager/index.js +0 -96
- package/cjs/services/decorateHeaders.js +0 -40
- package/cjs/services/splitApi.js +0 -131
- package/cjs/services/splitHttpClient.js +0 -82
- package/cjs/services/types.js +0 -2
- package/cjs/storages/AbstractMySegmentsCacheSync.js +0 -60
- package/cjs/storages/AbstractSplitsCacheAsync.js +0 -51
- package/cjs/storages/AbstractSplitsCacheSync.js +0 -75
- package/cjs/storages/KeyBuilder.js +0 -68
- package/cjs/storages/KeyBuilderCS.js +0 -65
- package/cjs/storages/KeyBuilderSS.js +0 -60
- package/cjs/storages/dataLoader.js +0 -50
- package/cjs/storages/findLatencyIndex.js +0 -18
- package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +0 -81
- package/cjs/storages/inLocalStorage/RBSegmentsCacheInLocal.js +0 -117
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +0 -204
- package/cjs/storages/inLocalStorage/constants.js +0 -5
- package/cjs/storages/inLocalStorage/index.js +0 -91
- package/cjs/storages/inLocalStorage/storageAdapter.js +0 -54
- package/cjs/storages/inLocalStorage/validateCache.js +0 -85
- package/cjs/storages/inMemory/AttributesCacheInMemory.js +0 -70
- package/cjs/storages/inMemory/EventsCacheInMemory.js +0 -63
- package/cjs/storages/inMemory/ImpressionCountsCacheInMemory.js +0 -65
- package/cjs/storages/inMemory/ImpressionsCacheInMemory.js +0 -51
- package/cjs/storages/inMemory/InMemoryStorage.js +0 -46
- package/cjs/storages/inMemory/InMemoryStorageCS.js +0 -63
- package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +0 -46
- package/cjs/storages/inMemory/RBSegmentsCacheInMemory.js +0 -61
- package/cjs/storages/inMemory/SegmentsCacheInMemory.js +0 -61
- package/cjs/storages/inMemory/SplitsCacheInMemory.js +0 -121
- package/cjs/storages/inMemory/TelemetryCacheInMemory.js +0 -207
- package/cjs/storages/inMemory/UniqueKeysCacheInMemory.js +0 -72
- package/cjs/storages/inMemory/UniqueKeysCacheInMemoryCS.js +0 -71
- package/cjs/storages/inRedis/EventsCacheInRedis.js +0 -60
- package/cjs/storages/inRedis/ImpressionCountsCacheInRedis.js +0 -85
- package/cjs/storages/inRedis/ImpressionsCacheInRedis.js +0 -45
- package/cjs/storages/inRedis/RBSegmentsCacheInRedis.js +0 -64
- package/cjs/storages/inRedis/RedisAdapter.js +0 -195
- package/cjs/storages/inRedis/SegmentsCacheInRedis.js +0 -57
- package/cjs/storages/inRedis/SplitsCacheInRedis.js +0 -243
- package/cjs/storages/inRedis/TelemetryCacheInRedis.js +0 -124
- package/cjs/storages/inRedis/UniqueKeysCacheInRedis.js +0 -69
- package/cjs/storages/inRedis/constants.js +0 -7
- package/cjs/storages/inRedis/index.js +0 -73
- package/cjs/storages/pluggable/EventsCachePluggable.js +0 -64
- package/cjs/storages/pluggable/ImpressionCountsCachePluggable.js +0 -81
- package/cjs/storages/pluggable/ImpressionsCachePluggable.js +0 -48
- package/cjs/storages/pluggable/RBSegmentsCachePluggable.js +0 -64
- package/cjs/storages/pluggable/SegmentsCachePluggable.js +0 -80
- package/cjs/storages/pluggable/SplitsCachePluggable.js +0 -212
- package/cjs/storages/pluggable/TelemetryCachePluggable.js +0 -141
- package/cjs/storages/pluggable/UniqueKeysCachePluggable.js +0 -62
- package/cjs/storages/pluggable/constants.js +0 -4
- package/cjs/storages/pluggable/inMemoryWrapper.js +0 -141
- package/cjs/storages/pluggable/index.js +0 -135
- package/cjs/storages/pluggable/wrapperAdapter.js +0 -53
- package/cjs/storages/types.js +0 -2
- package/cjs/storages/utils.js +0 -74
- package/cjs/sync/offline/LocalhostFromObject.js +0 -8
- package/cjs/sync/offline/splitsParser/parseCondition.js +0 -55
- package/cjs/sync/offline/splitsParser/splitsParserFromSettings.js +0 -62
- package/cjs/sync/offline/splitsParser/types.js +0 -2
- package/cjs/sync/offline/syncManagerOffline.js +0 -52
- package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +0 -71
- package/cjs/sync/polling/fetchers/mySegmentsFetcher.js +0 -18
- package/cjs/sync/polling/fetchers/segmentChangesFetcher.js +0 -34
- package/cjs/sync/polling/fetchers/splitChangesFetcher.js +0 -68
- package/cjs/sync/polling/fetchers/types.js +0 -2
- package/cjs/sync/polling/pollingManagerCS.js +0 -100
- package/cjs/sync/polling/pollingManagerSS.js +0 -49
- package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +0 -13
- package/cjs/sync/polling/syncTasks/segmentsSyncTask.js +0 -13
- package/cjs/sync/polling/syncTasks/splitsSyncTask.js +0 -13
- package/cjs/sync/polling/types.js +0 -2
- package/cjs/sync/polling/updaters/mySegmentsUpdater.js +0 -83
- package/cjs/sync/polling/updaters/segmentChangesUpdater.js +0 -80
- package/cjs/sync/polling/updaters/splitChangesUpdater.js +0 -190
- package/cjs/sync/streaming/AuthClient/index.js +0 -43
- package/cjs/sync/streaming/AuthClient/types.js +0 -2
- package/cjs/sync/streaming/SSEClient/index.js +0 -86
- package/cjs/sync/streaming/SSEClient/types.js +0 -2
- package/cjs/sync/streaming/SSEHandler/NotificationKeeper.js +0 -98
- package/cjs/sync/streaming/SSEHandler/NotificationParser.js +0 -41
- package/cjs/sync/streaming/SSEHandler/index.js +0 -97
- package/cjs/sync/streaming/SSEHandler/types.js +0 -16
- package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +0 -124
- package/cjs/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +0 -92
- package/cjs/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +0 -136
- package/cjs/sync/streaming/UpdateWorkers/constants.js +0 -6
- package/cjs/sync/streaming/UpdateWorkers/types.js +0 -2
- package/cjs/sync/streaming/constants.js +0 -43
- package/cjs/sync/streaming/parseUtils.js +0 -98
- package/cjs/sync/streaming/pushManager.js +0 -317
- package/cjs/sync/streaming/types.js +0 -2
- package/cjs/sync/submitters/eventsSubmitter.js +0 -28
- package/cjs/sync/submitters/impressionCountsSubmitter.js +0 -36
- package/cjs/sync/submitters/impressionsSubmitter.js +0 -54
- package/cjs/sync/submitters/submitter.js +0 -66
- package/cjs/sync/submitters/submitterManager.js +0 -46
- package/cjs/sync/submitters/telemetrySubmitter.js +0 -125
- package/cjs/sync/submitters/types.js +0 -2
- package/cjs/sync/submitters/uniqueKeysSubmitter.js +0 -27
- package/cjs/sync/syncManagerOnline.js +0 -176
- package/cjs/sync/syncTask.js +0 -84
- package/cjs/sync/types.js +0 -2
- package/cjs/trackers/eventTracker.js +0 -62
- package/cjs/trackers/impressionObserver/ImpressionObserver.js +0 -18
- package/cjs/trackers/impressionObserver/buildKey.js +0 -7
- package/cjs/trackers/impressionObserver/impressionObserverCS.js +0 -15
- package/cjs/trackers/impressionObserver/impressionObserverSS.js +0 -15
- package/cjs/trackers/impressionObserver/types.js +0 -2
- package/cjs/trackers/impressionsTracker.js +0 -78
- package/cjs/trackers/strategy/strategyDebug.js +0 -20
- package/cjs/trackers/strategy/strategyNone.js +0 -24
- package/cjs/trackers/strategy/strategyOptimized.js +0 -28
- package/cjs/trackers/telemetryTracker.js +0 -75
- package/cjs/trackers/types.js +0 -2
- package/cjs/trackers/uniqueKeysTracker.js +0 -40
- package/cjs/types.js +0 -2
- package/cjs/utils/Backoff.js +0 -41
- package/cjs/utils/LRUCache/LinkedList.js +0 -114
- package/cjs/utils/LRUCache/index.js +0 -42
- package/cjs/utils/MinEventEmitter.js +0 -100
- package/cjs/utils/Semver.js +0 -103
- package/cjs/utils/base64/index.js +0 -75
- package/cjs/utils/constants/index.js +0 -100
- package/cjs/utils/decompress/index.js +0 -427
- package/cjs/utils/env/isLocalStorageAvailable.js +0 -39
- package/cjs/utils/env/isNode.js +0 -9
- package/cjs/utils/inputValidation/apiKey.js +0 -54
- package/cjs/utils/inputValidation/attribute.js +0 -20
- package/cjs/utils/inputValidation/attributes.js +0 -25
- package/cjs/utils/inputValidation/event.js +0 -28
- package/cjs/utils/inputValidation/eventProperties.js +0 -74
- package/cjs/utils/inputValidation/eventValue.js +0 -12
- package/cjs/utils/inputValidation/index.js +0 -34
- package/cjs/utils/inputValidation/isOperational.js +0 -18
- package/cjs/utils/inputValidation/key.js +0 -51
- package/cjs/utils/inputValidation/preloadedData.js +0 -59
- package/cjs/utils/inputValidation/split.js +0 -30
- package/cjs/utils/inputValidation/splitExistence.js +0 -19
- package/cjs/utils/inputValidation/splits.js +0 -25
- package/cjs/utils/inputValidation/trafficType.js +0 -29
- package/cjs/utils/inputValidation/trafficTypeExistence.js +0 -31
- package/cjs/utils/jwt/index.js +0 -17
- package/cjs/utils/jwt/types.js +0 -2
- package/cjs/utils/key/index.js +0 -36
- package/cjs/utils/labels/index.js +0 -12
- package/cjs/utils/lang/binarySearch.js +0 -42
- package/cjs/utils/lang/getFnName.js +0 -12
- package/cjs/utils/lang/getGlobal.js +0 -18
- package/cjs/utils/lang/index.js +0 -281
- package/cjs/utils/lang/objectAssign.js +0 -20
- package/cjs/utils/lang/sets.js +0 -23
- package/cjs/utils/murmur3/common.js +0 -46
- package/cjs/utils/murmur3/legacy.js +0 -44
- package/cjs/utils/murmur3/murmur3.js +0 -62
- package/cjs/utils/murmur3/murmur3_128.js +0 -219
- package/cjs/utils/murmur3/murmur3_128_x86.js +0 -154
- package/cjs/utils/murmur3/murmur3_64.js +0 -36
- package/cjs/utils/murmur3/utfx.js +0 -108
- package/cjs/utils/promise/thenable.js +0 -8
- package/cjs/utils/promise/timeout.js +0 -20
- package/cjs/utils/promise/wrapper.js +0 -58
- package/cjs/utils/settingsValidation/consent.js +0 -16
- package/cjs/utils/settingsValidation/impressionsMode.js +0 -14
- package/cjs/utils/settingsValidation/index.js +0 -184
- package/cjs/utils/settingsValidation/integrations/common.js +0 -27
- package/cjs/utils/settingsValidation/integrations/configurable.js +0 -18
- package/cjs/utils/settingsValidation/integrations/pluggable.js +0 -15
- package/cjs/utils/settingsValidation/logger/builtinLogger.js +0 -46
- package/cjs/utils/settingsValidation/logger/commons.js +0 -28
- package/cjs/utils/settingsValidation/logger/pluggableLogger.js +0 -32
- package/cjs/utils/settingsValidation/mode.js +0 -20
- package/cjs/utils/settingsValidation/runtime.js +0 -11
- package/cjs/utils/settingsValidation/splitFilters.js +0 -188
- package/cjs/utils/settingsValidation/storage/storageCS.js +0 -49
- package/cjs/utils/settingsValidation/types.js +0 -2
- package/cjs/utils/settingsValidation/url.js +0 -31
- package/cjs/utils/time/index.js +0 -11
- package/cjs/utils/timeTracker/now/browser.js +0 -15
- package/cjs/utils/timeTracker/now/node.js +0 -9
- package/cjs/utils/timeTracker/timer.js +0 -10
- package/esm/consent/index.js +0 -6
- package/esm/consent/sdkUserConsent.js +0 -56
- package/esm/dtos/types.js +0 -1
- package/esm/evaluator/Engine.js +0 -54
- package/esm/evaluator/combiners/and.js +0 -21
- package/esm/evaluator/combiners/ifelseif.js +0 -44
- package/esm/evaluator/condition/engineUtils.js +0 -24
- package/esm/evaluator/condition/index.js +0 -37
- package/esm/evaluator/convertions/index.js +0 -6
- package/esm/evaluator/index.js +0 -128
- package/esm/evaluator/matchers/all.js +0 -5
- package/esm/evaluator/matchers/between.js +0 -6
- package/esm/evaluator/matchers/boolean.js +0 -6
- package/esm/evaluator/matchers/cont_all.js +0 -19
- package/esm/evaluator/matchers/cont_any.js +0 -14
- package/esm/evaluator/matchers/cont_str.js +0 -7
- package/esm/evaluator/matchers/dependency.js +0 -24
- package/esm/evaluator/matchers/eq.js +0 -6
- package/esm/evaluator/matchers/eq_set.js +0 -16
- package/esm/evaluator/matchers/ew.js +0 -7
- package/esm/evaluator/matchers/gte.js +0 -6
- package/esm/evaluator/matchers/index.js +0 -62
- package/esm/evaluator/matchers/large_segment.js +0 -6
- package/esm/evaluator/matchers/lte.js +0 -6
- package/esm/evaluator/matchers/matcherTypes.js +0 -42
- package/esm/evaluator/matchers/part_of.js +0 -16
- package/esm/evaluator/matchers/prerequisites.js +0 -18
- package/esm/evaluator/matchers/rbsegment.js +0 -52
- package/esm/evaluator/matchers/segment.js +0 -6
- package/esm/evaluator/matchers/semver_between.js +0 -10
- package/esm/evaluator/matchers/semver_eq.js +0 -9
- package/esm/evaluator/matchers/semver_gte.js +0 -9
- package/esm/evaluator/matchers/semver_inlist.js +0 -12
- package/esm/evaluator/matchers/semver_lte.js +0 -9
- package/esm/evaluator/matchers/string.js +0 -7
- package/esm/evaluator/matchers/sw.js +0 -7
- package/esm/evaluator/matchers/whitelist.js +0 -7
- package/esm/evaluator/matchersTransform/index.js +0 -100
- package/esm/evaluator/matchersTransform/segment.js +0 -8
- package/esm/evaluator/matchersTransform/unaryNumeric.js +0 -6
- package/esm/evaluator/matchersTransform/whitelist.js +0 -6
- package/esm/evaluator/parser/index.js +0 -57
- package/esm/evaluator/treatments/index.js +0 -39
- package/esm/evaluator/types.js +0 -1
- package/esm/evaluator/value/index.js +0 -33
- package/esm/evaluator/value/sanitize.js +0 -90
- package/esm/integrations/pluggable.js +0 -31
- package/esm/integrations/types.js +0 -1
- package/esm/listeners/browser.js +0 -118
- package/esm/listeners/node.js +0 -65
- package/esm/listeners/types.js +0 -1
- package/esm/logger/browser/DebugLogger.js +0 -5
- package/esm/logger/browser/ErrorLogger.js +0 -5
- package/esm/logger/browser/InfoLogger.js +0 -5
- package/esm/logger/browser/WarnLogger.js +0 -5
- package/esm/logger/constants.js +0 -135
- package/esm/logger/index.js +0 -95
- package/esm/logger/messages/debug.js +0 -32
- package/esm/logger/messages/error.js +0 -38
- package/esm/logger/messages/info.js +0 -33
- package/esm/logger/messages/warn.js +0 -38
- package/esm/logger/sdkLogger.js +0 -41
- package/esm/logger/types.js +0 -1
- package/esm/readiness/constants.js +0 -10
- package/esm/readiness/readinessManager.js +0 -150
- package/esm/readiness/sdkReadinessManager.js +0 -100
- package/esm/readiness/types.js +0 -1
- package/esm/sdkClient/client.js +0 -179
- package/esm/sdkClient/clientAttributesDecoration.js +0 -118
- package/esm/sdkClient/clientCS.js +0 -26
- package/esm/sdkClient/clientInputValidation.js +0 -143
- package/esm/sdkClient/identity.js +0 -3
- package/esm/sdkClient/sdkClient.js +0 -60
- package/esm/sdkClient/sdkClientMethod.js +0 -18
- package/esm/sdkClient/sdkClientMethodCS.js +0 -62
- package/esm/sdkFactory/index.js +0 -104
- package/esm/sdkFactory/types.js +0 -1
- package/esm/sdkManager/index.js +0 -92
- package/esm/services/decorateHeaders.js +0 -35
- package/esm/services/splitApi.js +0 -127
- package/esm/services/splitHttpClient.js +0 -78
- package/esm/services/types.js +0 -1
- package/esm/storages/AbstractMySegmentsCacheSync.js +0 -57
- package/esm/storages/AbstractSplitsCacheAsync.js +0 -48
- package/esm/storages/AbstractSplitsCacheSync.js +0 -70
- package/esm/storages/KeyBuilder.js +0 -63
- package/esm/storages/KeyBuilderCS.js +0 -61
- package/esm/storages/KeyBuilderSS.js +0 -57
- package/esm/storages/dataLoader.js +0 -46
- package/esm/storages/findLatencyIndex.js +0 -14
- package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +0 -78
- package/esm/storages/inLocalStorage/RBSegmentsCacheInLocal.js +0 -114
- package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +0 -201
- package/esm/storages/inLocalStorage/constants.js +0 -2
- package/esm/storages/inLocalStorage/index.js +0 -87
- package/esm/storages/inLocalStorage/storageAdapter.js +0 -50
- package/esm/storages/inLocalStorage/validateCache.js +0 -81
- package/esm/storages/inMemory/AttributesCacheInMemory.js +0 -67
- package/esm/storages/inMemory/EventsCacheInMemory.js +0 -60
- package/esm/storages/inMemory/ImpressionCountsCacheInMemory.js +0 -62
- package/esm/storages/inMemory/ImpressionsCacheInMemory.js +0 -48
- package/esm/storages/inMemory/InMemoryStorage.js +0 -42
- package/esm/storages/inMemory/InMemoryStorageCS.js +0 -59
- package/esm/storages/inMemory/MySegmentsCacheInMemory.js +0 -43
- package/esm/storages/inMemory/RBSegmentsCacheInMemory.js +0 -58
- package/esm/storages/inMemory/SegmentsCacheInMemory.js +0 -58
- package/esm/storages/inMemory/SplitsCacheInMemory.js +0 -118
- package/esm/storages/inMemory/TelemetryCacheInMemory.js +0 -202
- package/esm/storages/inMemory/UniqueKeysCacheInMemory.js +0 -68
- package/esm/storages/inMemory/UniqueKeysCacheInMemoryCS.js +0 -68
- package/esm/storages/inRedis/EventsCacheInRedis.js +0 -57
- package/esm/storages/inRedis/ImpressionCountsCacheInRedis.js +0 -82
- package/esm/storages/inRedis/ImpressionsCacheInRedis.js +0 -42
- package/esm/storages/inRedis/RBSegmentsCacheInRedis.js +0 -61
- package/esm/storages/inRedis/RedisAdapter.js +0 -192
- package/esm/storages/inRedis/SegmentsCacheInRedis.js +0 -54
- package/esm/storages/inRedis/SplitsCacheInRedis.js +0 -240
- package/esm/storages/inRedis/TelemetryCacheInRedis.js +0 -121
- package/esm/storages/inRedis/UniqueKeysCacheInRedis.js +0 -66
- package/esm/storages/inRedis/constants.js +0 -4
- package/esm/storages/inRedis/index.js +0 -69
- package/esm/storages/pluggable/EventsCachePluggable.js +0 -61
- package/esm/storages/pluggable/ImpressionCountsCachePluggable.js +0 -78
- package/esm/storages/pluggable/ImpressionsCachePluggable.js +0 -45
- package/esm/storages/pluggable/RBSegmentsCachePluggable.js +0 -61
- package/esm/storages/pluggable/SegmentsCachePluggable.js +0 -77
- package/esm/storages/pluggable/SplitsCachePluggable.js +0 -209
- package/esm/storages/pluggable/TelemetryCachePluggable.js +0 -138
- package/esm/storages/pluggable/UniqueKeysCachePluggable.js +0 -59
- package/esm/storages/pluggable/constants.js +0 -1
- package/esm/storages/pluggable/inMemoryWrapper.js +0 -137
- package/esm/storages/pluggable/index.js +0 -131
- package/esm/storages/pluggable/wrapperAdapter.js +0 -49
- package/esm/storages/types.js +0 -1
- package/esm/storages/utils.js +0 -66
- package/esm/sync/offline/LocalhostFromObject.js +0 -5
- package/esm/sync/offline/splitsParser/parseCondition.js +0 -51
- package/esm/sync/offline/splitsParser/splitsParserFromSettings.js +0 -58
- package/esm/sync/offline/splitsParser/types.js +0 -1
- package/esm/sync/offline/syncManagerOffline.js +0 -48
- package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +0 -66
- package/esm/sync/polling/fetchers/mySegmentsFetcher.js +0 -14
- package/esm/sync/polling/fetchers/segmentChangesFetcher.js +0 -30
- package/esm/sync/polling/fetchers/splitChangesFetcher.js +0 -64
- package/esm/sync/polling/fetchers/types.js +0 -1
- package/esm/sync/polling/pollingManagerCS.js +0 -96
- package/esm/sync/polling/pollingManagerSS.js +0 -45
- package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +0 -9
- package/esm/sync/polling/syncTasks/segmentsSyncTask.js +0 -9
- package/esm/sync/polling/syncTasks/splitsSyncTask.js +0 -9
- package/esm/sync/polling/types.js +0 -1
- package/esm/sync/polling/updaters/mySegmentsUpdater.js +0 -79
- package/esm/sync/polling/updaters/segmentChangesUpdater.js +0 -76
- package/esm/sync/polling/updaters/splitChangesUpdater.js +0 -184
- package/esm/sync/streaming/AuthClient/index.js +0 -38
- package/esm/sync/streaming/AuthClient/types.js +0 -1
- package/esm/sync/streaming/SSEClient/index.js +0 -83
- package/esm/sync/streaming/SSEClient/types.js +0 -1
- package/esm/sync/streaming/SSEHandler/NotificationKeeper.js +0 -94
- package/esm/sync/streaming/SSEHandler/NotificationParser.js +0 -36
- package/esm/sync/streaming/SSEHandler/index.js +0 -93
- package/esm/sync/streaming/SSEHandler/types.js +0 -13
- package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +0 -120
- package/esm/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.js +0 -88
- package/esm/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +0 -132
- package/esm/sync/streaming/UpdateWorkers/constants.js +0 -3
- package/esm/sync/streaming/UpdateWorkers/types.js +0 -1
- package/esm/sync/streaming/constants.js +0 -40
- package/esm/sync/streaming/parseUtils.js +0 -90
- package/esm/sync/streaming/pushManager.js +0 -313
- package/esm/sync/streaming/types.js +0 -1
- package/esm/sync/submitters/eventsSubmitter.js +0 -24
- package/esm/sync/submitters/impressionCountsSubmitter.js +0 -31
- package/esm/sync/submitters/impressionsSubmitter.js +0 -49
- package/esm/sync/submitters/submitter.js +0 -61
- package/esm/sync/submitters/submitterManager.js +0 -42
- package/esm/sync/submitters/telemetrySubmitter.js +0 -119
- package/esm/sync/submitters/types.js +0 -1
- package/esm/sync/submitters/uniqueKeysSubmitter.js +0 -23
- package/esm/sync/syncManagerOnline.js +0 -172
- package/esm/sync/syncTask.js +0 -80
- package/esm/sync/types.js +0 -1
- package/esm/trackers/eventTracker.js +0 -58
- package/esm/trackers/impressionObserver/ImpressionObserver.js +0 -15
- package/esm/trackers/impressionObserver/buildKey.js +0 -3
- package/esm/trackers/impressionObserver/impressionObserverCS.js +0 -10
- package/esm/trackers/impressionObserver/impressionObserverSS.js +0 -10
- package/esm/trackers/impressionObserver/types.js +0 -1
- package/esm/trackers/impressionsTracker.js +0 -74
- package/esm/trackers/strategy/strategyDebug.js +0 -16
- package/esm/trackers/strategy/strategyNone.js +0 -20
- package/esm/trackers/strategy/strategyOptimized.js +0 -24
- package/esm/trackers/telemetryTracker.js +0 -71
- package/esm/trackers/types.js +0 -1
- package/esm/trackers/uniqueKeysTracker.js +0 -36
- package/esm/types.js +0 -1
- package/esm/utils/Backoff.js +0 -38
- package/esm/utils/LRUCache/LinkedList.js +0 -111
- package/esm/utils/LRUCache/index.js +0 -39
- package/esm/utils/MinEventEmitter.js +0 -97
- package/esm/utils/Semver.js +0 -100
- package/esm/utils/base64/index.js +0 -70
- package/esm/utils/constants/index.js +0 -96
- package/esm/utils/decompress/index.js +0 -424
- package/esm/utils/env/isLocalStorageAvailable.js +0 -33
- package/esm/utils/env/isNode.js +0 -6
- package/esm/utils/inputValidation/apiKey.js +0 -48
- package/esm/utils/inputValidation/attribute.js +0 -16
- package/esm/utils/inputValidation/attributes.js +0 -20
- package/esm/utils/inputValidation/event.js +0 -24
- package/esm/utils/inputValidation/eventProperties.js +0 -69
- package/esm/utils/inputValidation/eventValue.js +0 -8
- package/esm/utils/inputValidation/index.js +0 -14
- package/esm/utils/inputValidation/isOperational.js +0 -13
- package/esm/utils/inputValidation/key.js +0 -47
- package/esm/utils/inputValidation/preloadedData.js +0 -55
- package/esm/utils/inputValidation/split.js +0 -26
- package/esm/utils/inputValidation/splitExistence.js +0 -15
- package/esm/utils/inputValidation/splits.js +0 -21
- package/esm/utils/inputValidation/trafficType.js +0 -25
- package/esm/utils/inputValidation/trafficTypeExistence.js +0 -27
- package/esm/utils/jwt/index.js +0 -13
- package/esm/utils/jwt/types.js +0 -1
- package/esm/utils/key/index.js +0 -30
- package/esm/utils/labels/index.js +0 -9
- package/esm/utils/lang/binarySearch.js +0 -38
- package/esm/utils/lang/getFnName.js +0 -8
- package/esm/utils/lang/getGlobal.js +0 -14
- package/esm/utils/lang/index.js +0 -258
- package/esm/utils/lang/objectAssign.js +0 -17
- package/esm/utils/lang/sets.js +0 -17
- package/esm/utils/murmur3/common.js +0 -39
- package/esm/utils/murmur3/legacy.js +0 -39
- package/esm/utils/murmur3/murmur3.js +0 -57
- package/esm/utils/murmur3/murmur3_128.js +0 -215
- package/esm/utils/murmur3/murmur3_128_x86.js +0 -150
- package/esm/utils/murmur3/murmur3_64.js +0 -32
- package/esm/utils/murmur3/utfx.js +0 -102
- package/esm/utils/promise/thenable.js +0 -4
- package/esm/utils/promise/timeout.js +0 -16
- package/esm/utils/promise/wrapper.js +0 -54
- package/esm/utils/settingsValidation/consent.js +0 -12
- package/esm/utils/settingsValidation/impressionsMode.js +0 -10
- package/esm/utils/settingsValidation/index.js +0 -180
- package/esm/utils/settingsValidation/integrations/common.js +0 -23
- package/esm/utils/settingsValidation/integrations/configurable.js +0 -14
- package/esm/utils/settingsValidation/integrations/pluggable.js +0 -11
- package/esm/utils/settingsValidation/logger/builtinLogger.js +0 -42
- package/esm/utils/settingsValidation/logger/commons.js +0 -24
- package/esm/utils/settingsValidation/logger/pluggableLogger.js +0 -28
- package/esm/utils/settingsValidation/mode.js +0 -15
- package/esm/utils/settingsValidation/runtime.js +0 -7
- package/esm/utils/settingsValidation/splitFilters.js +0 -183
- package/esm/utils/settingsValidation/storage/storageCS.js +0 -44
- package/esm/utils/settingsValidation/types.js +0 -1
- package/esm/utils/settingsValidation/url.js +0 -27
- package/esm/utils/time/index.js +0 -7
- package/esm/utils/timeTracker/now/browser.js +0 -12
- package/esm/utils/timeTracker/now/node.js +0 -5
- package/esm/utils/timeTracker/timer.js +0 -6
- package/src/consent/index.ts +0 -8
- package/src/consent/sdkUserConsent.ts +0 -60
- package/src/dtos/types.ts +0 -294
- package/src/evaluator/Engine.ts +0 -73
- package/src/evaluator/combiners/and.ts +0 -29
- package/src/evaluator/combiners/ifelseif.ts +0 -56
- package/src/evaluator/condition/engineUtils.ts +0 -31
- package/src/evaluator/condition/index.ts +0 -50
- package/src/evaluator/convertions/index.ts +0 -7
- package/src/evaluator/index.ts +0 -199
- package/src/evaluator/matchers/all.ts +0 -6
- package/src/evaluator/matchers/between.ts +0 -10
- package/src/evaluator/matchers/boolean.ts +0 -8
- package/src/evaluator/matchers/cont_all.ts +0 -18
- package/src/evaluator/matchers/cont_any.ts +0 -13
- package/src/evaluator/matchers/cont_str.ts +0 -9
- package/src/evaluator/matchers/dependency.ts +0 -32
- package/src/evaluator/matchers/eq.ts +0 -8
- package/src/evaluator/matchers/eq_set.ts +0 -15
- package/src/evaluator/matchers/ew.ts +0 -9
- package/src/evaluator/matchers/gte.ts +0 -8
- package/src/evaluator/matchers/index.ts +0 -70
- package/src/evaluator/matchers/large_segment.ts +0 -11
- package/src/evaluator/matchers/lte.ts +0 -8
- package/src/evaluator/matchers/matcherTypes.ts +0 -42
- package/src/evaluator/matchers/part_of.ts +0 -15
- package/src/evaluator/matchers/prerequisites.ts +0 -24
- package/src/evaluator/matchers/rbsegment.ts +0 -74
- package/src/evaluator/matchers/segment.ts +0 -11
- package/src/evaluator/matchers/semver_between.ts +0 -15
- package/src/evaluator/matchers/semver_eq.ts +0 -13
- package/src/evaluator/matchers/semver_gte.ts +0 -13
- package/src/evaluator/matchers/semver_inlist.ts +0 -16
- package/src/evaluator/matchers/semver_lte.ts +0 -13
- package/src/evaluator/matchers/string.ts +0 -9
- package/src/evaluator/matchers/sw.ts +0 -9
- package/src/evaluator/matchers/whitelist.ts +0 -9
- package/src/evaluator/matchersTransform/index.ts +0 -118
- package/src/evaluator/matchersTransform/segment.ts +0 -10
- package/src/evaluator/matchersTransform/unaryNumeric.ts +0 -8
- package/src/evaluator/matchersTransform/whitelist.ts +0 -8
- package/src/evaluator/parser/index.ts +0 -82
- package/src/evaluator/treatments/index.ts +0 -53
- package/src/evaluator/types.ts +0 -34
- package/src/evaluator/value/index.ts +0 -37
- package/src/evaluator/value/sanitize.ts +0 -106
- package/src/index.ts +0 -14
- package/src/integrations/pluggable.ts +0 -39
- package/src/integrations/types.ts +0 -21
- package/src/listeners/browser.ts +0 -138
- package/src/listeners/node.ts +0 -81
- package/src/listeners/types.ts +0 -4
- package/src/logger/browser/DebugLogger.ts +0 -6
- package/src/logger/browser/ErrorLogger.ts +0 -6
- package/src/logger/browser/InfoLogger.ts +0 -6
- package/src/logger/browser/WarnLogger.ts +0 -6
- package/src/logger/constants.ts +0 -139
- package/src/logger/index.ts +0 -110
- package/src/logger/messages/debug.ts +0 -33
- package/src/logger/messages/error.ts +0 -39
- package/src/logger/messages/info.ts +0 -36
- package/src/logger/messages/warn.ts +0 -40
- package/src/logger/sdkLogger.ts +0 -46
- package/src/logger/types.ts +0 -21
- package/src/readiness/constants.ts +0 -12
- package/src/readiness/readinessManager.ts +0 -170
- package/src/readiness/sdkReadinessManager.ts +0 -121
- package/src/readiness/types.ts +0 -85
- package/src/sdkClient/client.ts +0 -217
- package/src/sdkClient/clientAttributesDecoration.ts +0 -139
- package/src/sdkClient/clientCS.ts +0 -34
- package/src/sdkClient/clientInputValidation.ts +0 -178
- package/src/sdkClient/identity.ts +0 -5
- package/src/sdkClient/sdkClient.ts +0 -77
- package/src/sdkClient/sdkClientMethod.ts +0 -24
- package/src/sdkClient/sdkClientMethodCS.ts +0 -85
- package/src/sdkFactory/index.ts +0 -131
- package/src/sdkFactory/types.ts +0 -119
- package/src/sdkManager/index.ts +0 -114
- package/src/services/decorateHeaders.ts +0 -37
- package/src/services/splitApi.ts +0 -148
- package/src/services/splitHttpClient.ts +0 -84
- package/src/services/types.ts +0 -86
- package/src/storages/AbstractMySegmentsCacheSync.ts +0 -94
- package/src/storages/AbstractSplitsCacheAsync.ts +0 -63
- package/src/storages/AbstractSplitsCacheSync.ts +0 -94
- package/src/storages/KeyBuilder.ts +0 -81
- package/src/storages/KeyBuilderCS.ts +0 -79
- package/src/storages/KeyBuilderSS.ts +0 -74
- package/src/storages/dataLoader.ts +0 -55
- package/src/storages/findLatencyIndex.ts +0 -16
- package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +0 -87
- package/src/storages/inLocalStorage/RBSegmentsCacheInLocal.ts +0 -137
- package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +0 -241
- package/src/storages/inLocalStorage/constants.ts +0 -2
- package/src/storages/inLocalStorage/index.ts +0 -104
- package/src/storages/inLocalStorage/storageAdapter.ts +0 -62
- package/src/storages/inLocalStorage/validateCache.ts +0 -99
- package/src/storages/inMemory/AttributesCacheInMemory.ts +0 -74
- package/src/storages/inMemory/EventsCacheInMemory.ts +0 -76
- package/src/storages/inMemory/ImpressionCountsCacheInMemory.ts +0 -69
- package/src/storages/inMemory/ImpressionsCacheInMemory.ts +0 -58
- package/src/storages/inMemory/InMemoryStorage.ts +0 -50
- package/src/storages/inMemory/InMemoryStorageCS.ts +0 -69
- package/src/storages/inMemory/MySegmentsCacheInMemory.ts +0 -49
- package/src/storages/inMemory/RBSegmentsCacheInMemory.ts +0 -68
- package/src/storages/inMemory/SegmentsCacheInMemory.ts +0 -74
- package/src/storages/inMemory/SplitsCacheInMemory.ts +0 -130
- package/src/storages/inMemory/TelemetryCacheInMemory.ts +0 -263
- package/src/storages/inMemory/UniqueKeysCacheInMemory.ts +0 -79
- package/src/storages/inMemory/UniqueKeysCacheInMemoryCS.ts +0 -80
- package/src/storages/inRedis/EventsCacheInRedis.ts +0 -75
- package/src/storages/inRedis/ImpressionCountsCacheInRedis.ts +0 -95
- package/src/storages/inRedis/ImpressionsCacheInRedis.ts +0 -61
- package/src/storages/inRedis/RBSegmentsCacheInRedis.ts +0 -79
- package/src/storages/inRedis/RedisAdapter.ts +0 -209
- package/src/storages/inRedis/SegmentsCacheInRedis.ts +0 -70
- package/src/storages/inRedis/SplitsCacheInRedis.ts +0 -268
- package/src/storages/inRedis/TelemetryCacheInRedis.ts +0 -144
- package/src/storages/inRedis/UniqueKeysCacheInRedis.ts +0 -75
- package/src/storages/inRedis/constants.ts +0 -4
- package/src/storages/inRedis/index.ts +0 -85
- package/src/storages/package.json +0 -3
- package/src/storages/pluggable/EventsCachePluggable.ts +0 -79
- package/src/storages/pluggable/ImpressionCountsCachePluggable.ts +0 -92
- package/src/storages/pluggable/ImpressionsCachePluggable.ts +0 -63
- package/src/storages/pluggable/RBSegmentsCachePluggable.ts +0 -76
- package/src/storages/pluggable/SegmentsCachePluggable.ts +0 -90
- package/src/storages/pluggable/SplitsCachePluggable.ts +0 -230
- package/src/storages/pluggable/TelemetryCachePluggable.ts +0 -159
- package/src/storages/pluggable/UniqueKeysCachePluggable.ts +0 -67
- package/src/storages/pluggable/constants.ts +0 -1
- package/src/storages/pluggable/inMemoryWrapper.ts +0 -130
- package/src/storages/pluggable/index.ts +0 -152
- package/src/storages/pluggable/wrapperAdapter.ts +0 -58
- package/src/storages/types.ts +0 -538
- package/src/storages/utils.ts +0 -80
- package/src/sync/offline/LocalhostFromObject.ts +0 -6
- package/src/sync/offline/splitsParser/parseCondition.ts +0 -59
- package/src/sync/offline/splitsParser/splitsParserFromSettings.ts +0 -72
- package/src/sync/offline/splitsParser/types.ts +0 -5
- package/src/sync/offline/syncManagerOffline.ts +0 -66
- package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +0 -97
- package/src/sync/polling/fetchers/mySegmentsFetcher.ts +0 -25
- package/src/sync/polling/fetchers/segmentChangesFetcher.ts +0 -41
- package/src/sync/polling/fetchers/splitChangesFetcher.ts +0 -85
- package/src/sync/polling/fetchers/types.ts +0 -25
- package/src/sync/polling/pollingManagerCS.ts +0 -116
- package/src/sync/polling/pollingManagerSS.ts +0 -56
- package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +0 -34
- package/src/sync/polling/syncTasks/segmentsSyncTask.ts +0 -30
- package/src/sync/polling/syncTasks/splitsSyncTask.ts +0 -35
- package/src/sync/polling/types.ts +0 -33
- package/src/sync/polling/updaters/mySegmentsUpdater.ts +0 -104
- package/src/sync/polling/updaters/segmentChangesUpdater.ts +0 -92
- package/src/sync/polling/updaters/splitChangesUpdater.ts +0 -220
- package/src/sync/streaming/AuthClient/index.ts +0 -42
- package/src/sync/streaming/AuthClient/types.ts +0 -20
- package/src/sync/streaming/SSEClient/index.ts +0 -103
- package/src/sync/streaming/SSEClient/types.ts +0 -13
- package/src/sync/streaming/SSEHandler/NotificationKeeper.ts +0 -107
- package/src/sync/streaming/SSEHandler/NotificationParser.ts +0 -40
- package/src/sync/streaming/SSEHandler/index.ts +0 -105
- package/src/sync/streaming/SSEHandler/types.ts +0 -73
- package/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts +0 -134
- package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +0 -99
- package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +0 -145
- package/src/sync/streaming/UpdateWorkers/constants.ts +0 -3
- package/src/sync/streaming/UpdateWorkers/types.ts +0 -4
- package/src/sync/streaming/constants.ts +0 -44
- package/src/sync/streaming/parseUtils.ts +0 -100
- package/src/sync/streaming/pushManager.ts +0 -358
- package/src/sync/streaming/types.ts +0 -51
- package/src/sync/submitters/eventsSubmitter.ts +0 -35
- package/src/sync/submitters/impressionCountsSubmitter.ts +0 -44
- package/src/sync/submitters/impressionsSubmitter.ts +0 -66
- package/src/sync/submitters/submitter.ts +0 -76
- package/src/sync/submitters/submitterManager.ts +0 -48
- package/src/sync/submitters/telemetrySubmitter.ts +0 -148
- package/src/sync/submitters/types.ts +0 -241
- package/src/sync/submitters/uniqueKeysSubmitter.ts +0 -35
- package/src/sync/syncManagerOnline.ts +0 -195
- package/src/sync/syncTask.ts +0 -83
- package/src/sync/types.ts +0 -48
- package/src/trackers/eventTracker.ts +0 -72
- package/src/trackers/impressionObserver/ImpressionObserver.ts +0 -20
- package/src/trackers/impressionObserver/buildKey.ts +0 -5
- package/src/trackers/impressionObserver/impressionObserverCS.ts +0 -14
- package/src/trackers/impressionObserver/impressionObserverSS.ts +0 -14
- package/src/trackers/impressionObserver/types.ts +0 -5
- package/src/trackers/impressionsTracker.ts +0 -87
- package/src/trackers/strategy/strategyDebug.ts +0 -23
- package/src/trackers/strategy/strategyNone.ts +0 -28
- package/src/trackers/strategy/strategyOptimized.ts +0 -35
- package/src/trackers/telemetryTracker.ts +0 -73
- package/src/trackers/types.ts +0 -86
- package/src/trackers/uniqueKeysTracker.ts +0 -50
- package/src/types.ts +0 -79
- package/src/utils/Backoff.ts +0 -51
- package/src/utils/LRUCache/LinkedList.ts +0 -130
- package/src/utils/LRUCache/index.ts +0 -43
- package/src/utils/MinEventEmitter.ts +0 -102
- package/src/utils/Semver.ts +0 -111
- package/src/utils/base64/index.ts +0 -74
- package/src/utils/constants/index.ts +0 -116
- package/src/utils/decompress/index.ts +0 -429
- package/src/utils/env/isLocalStorageAvailable.ts +0 -32
- package/src/utils/env/isNode.ts +0 -6
- package/src/utils/inputValidation/apiKey.ts +0 -52
- package/src/utils/inputValidation/attribute.ts +0 -21
- package/src/utils/inputValidation/attributes.ts +0 -26
- package/src/utils/inputValidation/event.ts +0 -24
- package/src/utils/inputValidation/eventProperties.ts +0 -78
- package/src/utils/inputValidation/eventValue.ts +0 -11
- package/src/utils/inputValidation/index.ts +0 -14
- package/src/utils/inputValidation/isOperational.ts +0 -17
- package/src/utils/inputValidation/key.ts +0 -51
- package/src/utils/inputValidation/preloadedData.ts +0 -57
- package/src/utils/inputValidation/split.ts +0 -27
- package/src/utils/inputValidation/splitExistence.ts +0 -19
- package/src/utils/inputValidation/splits.ts +0 -21
- package/src/utils/inputValidation/trafficType.ts +0 -27
- package/src/utils/inputValidation/trafficTypeExistence.ts +0 -33
- package/src/utils/jwt/index.ts +0 -16
- package/src/utils/jwt/types.ts +0 -10
- package/src/utils/key/index.ts +0 -34
- package/src/utils/labels/index.ts +0 -9
- package/src/utils/lang/binarySearch.ts +0 -41
- package/src/utils/lang/getFnName.ts +0 -8
- package/src/utils/lang/getGlobal.ts +0 -17
- package/src/utils/lang/index.ts +0 -279
- package/src/utils/lang/objectAssign.ts +0 -25
- package/src/utils/lang/sets.ts +0 -17
- package/src/utils/murmur3/common.ts +0 -54
- package/src/utils/murmur3/legacy.ts +0 -48
- package/src/utils/murmur3/murmur3.ts +0 -74
- package/src/utils/murmur3/murmur3_128.ts +0 -273
- package/src/utils/murmur3/murmur3_128_x86.ts +0 -188
- package/src/utils/murmur3/murmur3_64.ts +0 -36
- package/src/utils/murmur3/utfx.ts +0 -109
- package/src/utils/promise/thenable.ts +0 -4
- package/src/utils/promise/timeout.ts +0 -17
- package/src/utils/promise/wrapper.ts +0 -60
- package/src/utils/settingsValidation/consent.ts +0 -16
- package/src/utils/settingsValidation/impressionsMode.ts +0 -14
- package/src/utils/settingsValidation/index.ts +0 -207
- package/src/utils/settingsValidation/integrations/common.ts +0 -27
- package/src/utils/settingsValidation/integrations/configurable.ts +0 -20
- package/src/utils/settingsValidation/integrations/pluggable.ts +0 -19
- package/src/utils/settingsValidation/logger/builtinLogger.ts +0 -54
- package/src/utils/settingsValidation/logger/commons.ts +0 -24
- package/src/utils/settingsValidation/logger/pluggableLogger.ts +0 -35
- package/src/utils/settingsValidation/mode.ts +0 -17
- package/src/utils/settingsValidation/runtime.ts +0 -9
- package/src/utils/settingsValidation/splitFilters.ts +0 -197
- package/src/utils/settingsValidation/storage/storageCS.ts +0 -52
- package/src/utils/settingsValidation/types.ts +0 -27
- package/src/utils/settingsValidation/url.ts +0 -30
- package/src/utils/time/index.ts +0 -8
- package/src/utils/timeTracker/now/browser.ts +0 -12
- package/src/utils/timeTracker/now/node.ts +0 -6
- package/src/utils/timeTracker/timer.ts +0 -7
package/src/sdkFactory/types.ts
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { IIntegrationManager, IIntegrationFactoryParams } from '../integrations/types';
|
|
2
|
-
import { ISignalListener } from '../listeners/types';
|
|
3
|
-
import { IReadinessManager, ISdkReadinessManager } from '../readiness/types';
|
|
4
|
-
import type { sdkManagerFactory } from '../sdkManager';
|
|
5
|
-
import type { splitApiFactory } from '../services/splitApi';
|
|
6
|
-
import { IFetch, ISplitApi, IEventSourceConstructor } from '../services/types';
|
|
7
|
-
import { IStorageAsync, IStorageSync, IStorageFactoryParams } from '../storages/types';
|
|
8
|
-
import { ISyncManager } from '../sync/types';
|
|
9
|
-
import { IImpressionObserver } from '../trackers/impressionObserver/types';
|
|
10
|
-
import { IImpressionsTracker, IEventTracker, ITelemetryTracker, IFilterAdapter, IUniqueKeysTracker } from '../trackers/types';
|
|
11
|
-
import { ISettings } from '../types';
|
|
12
|
-
import SplitIO from '../../types/splitio';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Environment related dependencies.
|
|
16
|
-
*/
|
|
17
|
-
export interface IPlatform {
|
|
18
|
-
/**
|
|
19
|
-
* If provided, it is used to retrieve the Fetch API for HTTP requests. Otherwise, the global fetch is used.
|
|
20
|
-
*/
|
|
21
|
-
getFetch?: (settings: ISettings) => (IFetch | undefined)
|
|
22
|
-
/**
|
|
23
|
-
* If provided, it is used to pass additional options to fetch and eventsource calls.
|
|
24
|
-
*/
|
|
25
|
-
getOptions?: (settings: ISettings) => (object | undefined)
|
|
26
|
-
/**
|
|
27
|
-
* If provided, it is used to retrieve the EventSource constructor for streaming support.
|
|
28
|
-
*/
|
|
29
|
-
getEventSource?: (settings: ISettings) => (IEventSourceConstructor | undefined)
|
|
30
|
-
/**
|
|
31
|
-
* EventEmitter constructor, like Node.js EventEmitter or a polyfill.
|
|
32
|
-
*/
|
|
33
|
-
EventEmitter: new () => SplitIO.IEventEmitter,
|
|
34
|
-
/**
|
|
35
|
-
* Function used to track latencies for telemetry.
|
|
36
|
-
*/
|
|
37
|
-
now?: () => number
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface ISdkFactoryContext {
|
|
41
|
-
platform: IPlatform,
|
|
42
|
-
sdkReadinessManager: ISdkReadinessManager,
|
|
43
|
-
readiness: IReadinessManager,
|
|
44
|
-
settings: ISettings
|
|
45
|
-
impressionsTracker: IImpressionsTracker,
|
|
46
|
-
eventTracker: IEventTracker,
|
|
47
|
-
telemetryTracker: ITelemetryTracker,
|
|
48
|
-
storage: IStorageSync | IStorageAsync,
|
|
49
|
-
uniqueKeysTracker: IUniqueKeysTracker,
|
|
50
|
-
signalListener?: ISignalListener
|
|
51
|
-
splitApi?: ISplitApi
|
|
52
|
-
syncManager?: ISyncManager,
|
|
53
|
-
clients: Record<string, SplitIO.IBasicClient>,
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export interface ISdkFactoryContextSync extends ISdkFactoryContext {
|
|
57
|
-
storage: IStorageSync,
|
|
58
|
-
splitApi: ISplitApi
|
|
59
|
-
syncManager: ISyncManager,
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export interface ISdkFactoryContextAsync extends ISdkFactoryContext {
|
|
63
|
-
storage: IStorageAsync,
|
|
64
|
-
splitApi: undefined,
|
|
65
|
-
syncManager: undefined
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Object parameter with the modules required to create an SDK factory instance
|
|
70
|
-
*/
|
|
71
|
-
export interface ISdkFactoryParams {
|
|
72
|
-
// If true, the `sdkFactory` is pure (no side effects), and the SDK instance includes a `init` method to run initialization side effects
|
|
73
|
-
lazyInit?: boolean,
|
|
74
|
-
|
|
75
|
-
// The settings must be already validated
|
|
76
|
-
settings: ISettings,
|
|
77
|
-
|
|
78
|
-
// Platform dependencies
|
|
79
|
-
platform: IPlatform,
|
|
80
|
-
|
|
81
|
-
// Storage factory. The result storage type implies the type of the SDK:
|
|
82
|
-
// sync SDK (`IBrowserSDK` and `ISDK`) with `IStorageSync`, and async SDK (`IBrowserAsyncSDK` and `IAsyncSDK`) with `IStorageAsync`
|
|
83
|
-
storageFactory: (params: IStorageFactoryParams) => IStorageSync | IStorageAsync,
|
|
84
|
-
|
|
85
|
-
// Factory of Split Api (HTTP Client Service).
|
|
86
|
-
// It is not required when providing an asynchronous storage or offline SyncManager
|
|
87
|
-
splitApiFactory?: typeof splitApiFactory,
|
|
88
|
-
|
|
89
|
-
// SyncManager factory.
|
|
90
|
-
// Not required when providing an asynchronous storage (consumer mode), but required in standalone mode to avoid SDK timeout.
|
|
91
|
-
// It can create an offline or online sync manager, with or without streaming support.
|
|
92
|
-
syncManagerFactory?: (params: ISdkFactoryContextSync) => ISyncManager,
|
|
93
|
-
|
|
94
|
-
// Sdk manager factory
|
|
95
|
-
sdkManagerFactory: typeof sdkManagerFactory,
|
|
96
|
-
|
|
97
|
-
// Sdk client method factory.
|
|
98
|
-
// It Allows to distinguish SDK clients with the client-side API (`IBrowserSDK` and `IBrowserAsyncSDK`) or server-side API (`ISDK` and `IAsyncSDK`).
|
|
99
|
-
sdkClientMethodFactory: (params: ISdkFactoryContext) => ({ (): SplitIO.IBrowserClient; (key: SplitIO.SplitKey): SplitIO.IBrowserClient; } | (() => SplitIO.IClient) | (() => SplitIO.IAsyncClient))
|
|
100
|
-
|
|
101
|
-
// Impression observer factory.
|
|
102
|
-
impressionsObserverFactory: () => IImpressionObserver
|
|
103
|
-
|
|
104
|
-
filterAdapterFactory?: () => IFilterAdapter
|
|
105
|
-
|
|
106
|
-
// Optional signal listener constructor. Used to handle special app states, like shutdown, app paused or resumed.
|
|
107
|
-
// Pass only if `syncManager` (used by NodeSignalListener) and `splitApi` (used by Browser listener) are passed.
|
|
108
|
-
SignalListener?: new (
|
|
109
|
-
syncManager: ISyncManager | undefined, // Used by NodeSignalListener to flush data, and by BrowserSignalListener to close streaming connection.
|
|
110
|
-
settings: ISettings, // Used by BrowserSignalListener
|
|
111
|
-
storage: IStorageSync | IStorageAsync, // Used by BrowserSignalListener
|
|
112
|
-
serviceApi: ISplitApi | undefined) => ISignalListener, // Used by BrowserSignalListener
|
|
113
|
-
|
|
114
|
-
// @TODO review impressionListener and integrations interfaces. What about handling impressionListener as an integration ?
|
|
115
|
-
integrationsManagerFactory?: (params: IIntegrationFactoryParams) => IIntegrationManager | undefined,
|
|
116
|
-
|
|
117
|
-
// Optional function to assign additional properties to the factory instance
|
|
118
|
-
extraProps?: (params: ISdkFactoryContext) => object
|
|
119
|
-
}
|
package/src/sdkManager/index.ts
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { objectAssign } from '../utils/lang/objectAssign';
|
|
2
|
-
import { thenable } from '../utils/promise/thenable';
|
|
3
|
-
import { find } from '../utils/lang';
|
|
4
|
-
import { validateSplit, validateSplitExistence, validateIfNotDestroyed, validateIfOperational } from '../utils/inputValidation';
|
|
5
|
-
import { ISplitsCacheAsync, ISplitsCacheSync } from '../storages/types';
|
|
6
|
-
import { ISdkReadinessManager } from '../readiness/types';
|
|
7
|
-
import { ISplit } from '../dtos/types';
|
|
8
|
-
import { ISettings } from '../types';
|
|
9
|
-
import SplitIO from '../../types/splitio';
|
|
10
|
-
import { isConsumerMode } from '../utils/settingsValidation/mode';
|
|
11
|
-
import { SPLIT_FN_LABEL, SPLITS_FN_LABEL, NAMES_FN_LABEL } from '../utils/constants';
|
|
12
|
-
|
|
13
|
-
function collectTreatments(splitObject: ISplit) {
|
|
14
|
-
const conditions = splitObject.conditions;
|
|
15
|
-
// Rollout conditions are supposed to have the entire partitions list, so we find the first one.
|
|
16
|
-
let allTreatmentsCondition = find(conditions, (cond) => cond.conditionType === 'ROLLOUT');
|
|
17
|
-
// Localstorage mode could fall into a no rollout conditions state. Take the first condition in that case.
|
|
18
|
-
if (!allTreatmentsCondition) allTreatmentsCondition = conditions[0];
|
|
19
|
-
// Then extract the treatments from the partitions
|
|
20
|
-
return allTreatmentsCondition ? allTreatmentsCondition.partitions!.map(v => v.treatment) : [];
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function objectToView(splitObject: ISplit | null): SplitIO.SplitView | null {
|
|
24
|
-
if (!splitObject) return null;
|
|
25
|
-
|
|
26
|
-
return {
|
|
27
|
-
name: splitObject.name,
|
|
28
|
-
trafficType: splitObject.trafficTypeName,
|
|
29
|
-
killed: splitObject.killed,
|
|
30
|
-
changeNumber: splitObject.changeNumber || 0,
|
|
31
|
-
treatments: collectTreatments(splitObject),
|
|
32
|
-
configs: splitObject.configurations || {},
|
|
33
|
-
sets: splitObject.sets || [],
|
|
34
|
-
defaultTreatment: splitObject.defaultTreatment,
|
|
35
|
-
impressionsDisabled: splitObject.impressionsDisabled === true,
|
|
36
|
-
prerequisites: (splitObject.prerequisites || []).map(p => ({ flagName: p.n, treatments: p.ts })),
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function objectsToViews(splitObjects: ISplit[]) {
|
|
41
|
-
let views: SplitIO.SplitView[] = [];
|
|
42
|
-
|
|
43
|
-
splitObjects.forEach(split => {
|
|
44
|
-
const view = objectToView(split);
|
|
45
|
-
if (view) views.push(view);
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
return views;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function sdkManagerFactory<TSplitCache extends ISplitsCacheSync | ISplitsCacheAsync>(
|
|
52
|
-
settings: Pick<ISettings, 'log' | 'mode'>,
|
|
53
|
-
splits: TSplitCache,
|
|
54
|
-
{ readinessManager, sdkStatus }: ISdkReadinessManager,
|
|
55
|
-
): TSplitCache extends ISplitsCacheAsync ? SplitIO.IAsyncManager : SplitIO.IManager {
|
|
56
|
-
|
|
57
|
-
const { log, mode } = settings;
|
|
58
|
-
const isAsync = isConsumerMode(mode);
|
|
59
|
-
|
|
60
|
-
return objectAssign(
|
|
61
|
-
// Proto-linkage of the readiness Event Emitter
|
|
62
|
-
Object.create(sdkStatus),
|
|
63
|
-
{
|
|
64
|
-
/**
|
|
65
|
-
* Get the feature flag object corresponding to the given feature flag name if valid
|
|
66
|
-
*/
|
|
67
|
-
split(featureFlagName: string) {
|
|
68
|
-
const splitName = validateSplit(log, featureFlagName, SPLIT_FN_LABEL);
|
|
69
|
-
if (!validateIfNotDestroyed(log, readinessManager, SPLIT_FN_LABEL) || !validateIfOperational(log, readinessManager, SPLIT_FN_LABEL) || !splitName) {
|
|
70
|
-
return isAsync ? Promise.resolve(null) : null;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const split = splits.getSplit(splitName);
|
|
74
|
-
|
|
75
|
-
if (thenable(split)) {
|
|
76
|
-
return split.catch(() => null).then(result => { // handle possible rejections when using pluggable storage
|
|
77
|
-
validateSplitExistence(log, readinessManager, splitName, result, SPLIT_FN_LABEL);
|
|
78
|
-
return objectToView(result);
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
validateSplitExistence(log, readinessManager, splitName, split, SPLIT_FN_LABEL);
|
|
83
|
-
|
|
84
|
-
return objectToView(split);
|
|
85
|
-
},
|
|
86
|
-
/**
|
|
87
|
-
* Get the feature flag objects present on the factory storage
|
|
88
|
-
*/
|
|
89
|
-
splits() {
|
|
90
|
-
if (!validateIfNotDestroyed(log, readinessManager, SPLITS_FN_LABEL) || !validateIfOperational(log, readinessManager, SPLITS_FN_LABEL)) {
|
|
91
|
-
return isAsync ? Promise.resolve([]) : [];
|
|
92
|
-
}
|
|
93
|
-
const currentSplits = splits.getAll();
|
|
94
|
-
|
|
95
|
-
return thenable(currentSplits) ?
|
|
96
|
-
currentSplits.catch(() => []).then(objectsToViews) : // handle possible rejections when using pluggable storage
|
|
97
|
-
objectsToViews(currentSplits);
|
|
98
|
-
},
|
|
99
|
-
/**
|
|
100
|
-
* Get the feature flag names present on the factory storage
|
|
101
|
-
*/
|
|
102
|
-
names() {
|
|
103
|
-
if (!validateIfNotDestroyed(log, readinessManager, NAMES_FN_LABEL) || !validateIfOperational(log, readinessManager, NAMES_FN_LABEL)) {
|
|
104
|
-
return isAsync ? Promise.resolve([]) : [];
|
|
105
|
-
}
|
|
106
|
-
const splitNames = splits.getSplitNames();
|
|
107
|
-
|
|
108
|
-
return thenable(splitNames) ?
|
|
109
|
-
splitNames.catch(() => []) : // handle possible rejections when using pluggable storage
|
|
110
|
-
splitNames;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
);
|
|
114
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { objectAssign } from '../utils/lang/objectAssign';
|
|
2
|
-
import { ISettings } from '../types';
|
|
3
|
-
|
|
4
|
-
const FORBIDDEN_HEADERS = new Set([
|
|
5
|
-
'splitsdkclientkey',
|
|
6
|
-
'splitsdkversion',
|
|
7
|
-
'splitsdkmachineip',
|
|
8
|
-
'splitsdkmachinename',
|
|
9
|
-
'splitsdkimpressionsmode',
|
|
10
|
-
'host',
|
|
11
|
-
'referrer',
|
|
12
|
-
'content-type',
|
|
13
|
-
'content-length',
|
|
14
|
-
'content-encoding',
|
|
15
|
-
'accept',
|
|
16
|
-
'keep-alive',
|
|
17
|
-
'x-fastly-debug'
|
|
18
|
-
]);
|
|
19
|
-
|
|
20
|
-
export function decorateHeaders(settings: ISettings, headers: Record<string, string>) {
|
|
21
|
-
if (settings.sync.requestOptions?.getHeaderOverrides) {
|
|
22
|
-
try {
|
|
23
|
-
const headerOverrides = settings.sync.requestOptions.getHeaderOverrides({ headers: objectAssign({}, headers) });
|
|
24
|
-
Object.keys(headerOverrides)
|
|
25
|
-
.filter(key => !FORBIDDEN_HEADERS.has(key.toLowerCase()))
|
|
26
|
-
.forEach(key => headers[key] = headerOverrides[key]);
|
|
27
|
-
} catch (e) {
|
|
28
|
-
settings.log.error('Problem adding custom headers to request decorator: ' + e);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return headers;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function removeNonISO88591(input: string) {
|
|
35
|
-
// eslint-disable-next-line no-control-regex
|
|
36
|
-
return input.replace(/[^\x00-\xFF]/g, '');
|
|
37
|
-
}
|
package/src/services/splitApi.ts
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { IPlatform } from '../sdkFactory/types';
|
|
2
|
-
import { ISettings } from '../types';
|
|
3
|
-
import { splitHttpClientFactory } from './splitHttpClient';
|
|
4
|
-
import { ISplitApi } from './types';
|
|
5
|
-
import { objectAssign } from '../utils/lang/objectAssign';
|
|
6
|
-
import { ITelemetryTracker } from '../trackers/types';
|
|
7
|
-
import { SPLITS, IMPRESSIONS, IMPRESSIONS_COUNT, EVENTS, TELEMETRY, TOKEN, SEGMENT, MEMBERSHIPS } from '../utils/constants';
|
|
8
|
-
import { ERROR_TOO_MANY_SETS } from '../logger/constants';
|
|
9
|
-
|
|
10
|
-
const noCacheHeaderOptions = { headers: { 'Cache-Control': 'no-cache' } };
|
|
11
|
-
|
|
12
|
-
function userKeyToQueryParam(userKey: string) {
|
|
13
|
-
return 'users=' + encodeURIComponent(userKey); // no need to check availability of `encodeURIComponent`, since it is a global highly supported.
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Factory of SplitApi objects, which group the collection of Split HTTP endpoints used by the SDK
|
|
18
|
-
*
|
|
19
|
-
* @param settings - validated settings object
|
|
20
|
-
* @param platform - object containing environment-specific dependencies
|
|
21
|
-
* @param telemetryTracker - telemetry tracker
|
|
22
|
-
*/
|
|
23
|
-
export function splitApiFactory(
|
|
24
|
-
settings: ISettings,
|
|
25
|
-
platform: Pick<IPlatform, 'getOptions' | 'getFetch'>,
|
|
26
|
-
telemetryTracker: ITelemetryTracker
|
|
27
|
-
): ISplitApi {
|
|
28
|
-
|
|
29
|
-
const urls = settings.urls;
|
|
30
|
-
const filterQueryString = settings.sync.__splitFiltersValidation && settings.sync.__splitFiltersValidation.queryString;
|
|
31
|
-
const SplitSDKImpressionsMode = settings.sync.impressionsMode;
|
|
32
|
-
const splitHttpClient = splitHttpClientFactory(settings, platform);
|
|
33
|
-
|
|
34
|
-
return {
|
|
35
|
-
// @TODO throw errors if health check requests fail, to log them in the Synchronizer
|
|
36
|
-
getSdkAPIHealthCheck() {
|
|
37
|
-
const url = `${urls.sdk}/version`;
|
|
38
|
-
return splitHttpClient(url).then(() => true).catch(() => false);
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
getEventsAPIHealthCheck() {
|
|
42
|
-
const url = `${urls.events}/version`;
|
|
43
|
-
return splitHttpClient(url).then(() => true).catch(() => false);
|
|
44
|
-
},
|
|
45
|
-
|
|
46
|
-
fetchAuth(userMatchingKeys?: string[]) {
|
|
47
|
-
let url = `${urls.auth}/v2/auth?s=${settings.sync.flagSpecVersion}`;
|
|
48
|
-
if (userMatchingKeys) { // `userMatchingKeys` is undefined in server-side
|
|
49
|
-
const queryParams = userMatchingKeys.map(userKeyToQueryParam).join('&');
|
|
50
|
-
if (queryParams) url += '&' + queryParams;
|
|
51
|
-
}
|
|
52
|
-
return splitHttpClient(url, undefined, telemetryTracker.trackHttp(TOKEN));
|
|
53
|
-
},
|
|
54
|
-
|
|
55
|
-
fetchSplitChanges(since: number, noCache?: boolean, till?: number, rbSince?: number) {
|
|
56
|
-
const url = `${urls.sdk}/splitChanges?s=${settings.sync.flagSpecVersion}&since=${since}${rbSince ? '&rbSince=' + rbSince : ''}${filterQueryString || ''}${till ? '&till=' + till : ''}`;
|
|
57
|
-
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SPLITS))
|
|
58
|
-
.catch((err) => {
|
|
59
|
-
if (err.statusCode === 414) settings.log.error(ERROR_TOO_MANY_SETS);
|
|
60
|
-
throw err;
|
|
61
|
-
});
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
fetchSegmentChanges(since: number, segmentName: string, noCache?: boolean, till?: number) {
|
|
65
|
-
const url = `${urls.sdk}/segmentChanges/${segmentName}?since=${since}${till ? '&till=' + till : ''}`;
|
|
66
|
-
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SEGMENT));
|
|
67
|
-
},
|
|
68
|
-
|
|
69
|
-
fetchMemberships(userMatchingKey: string, noCache?: boolean, till?: number) {
|
|
70
|
-
/**
|
|
71
|
-
* URI encoding of user keys in order to:
|
|
72
|
-
* - avoid 400 responses (due to URI malformed). E.g.: '/api/memberships/%'
|
|
73
|
-
* - avoid 404 responses. E.g.: '/api/memberships/foo/bar'
|
|
74
|
-
* - match user keys with special characters. E.g.: 'foo%bar', 'foo/bar'
|
|
75
|
-
*/
|
|
76
|
-
const url = `${urls.sdk}/memberships/${encodeURIComponent(userMatchingKey)}${till ? '?till=' + till : ''}`;
|
|
77
|
-
return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(MEMBERSHIPS));
|
|
78
|
-
},
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Post events.
|
|
82
|
-
*
|
|
83
|
-
* @param body - Events bulk payload
|
|
84
|
-
* @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
|
|
85
|
-
*/
|
|
86
|
-
postEventsBulk(body: string, headers?: Record<string, string>) {
|
|
87
|
-
const url = `${urls.events}/events/bulk`;
|
|
88
|
-
return splitHttpClient(url, { method: 'POST', body, headers }, telemetryTracker.trackHttp(EVENTS));
|
|
89
|
-
},
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Post impressions.
|
|
93
|
-
*
|
|
94
|
-
* @param body - Impressions bulk payload
|
|
95
|
-
* @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
|
|
96
|
-
*/
|
|
97
|
-
postTestImpressionsBulk(body: string, headers?: Record<string, string>) {
|
|
98
|
-
const url = `${urls.events}/testImpressions/bulk`;
|
|
99
|
-
return splitHttpClient(url, {
|
|
100
|
-
// Adding extra headers to send impressions in OPTIMIZED or DEBUG modes.
|
|
101
|
-
method: 'POST', body, headers: objectAssign({ SplitSDKImpressionsMode }, headers)
|
|
102
|
-
}, telemetryTracker.trackHttp(IMPRESSIONS));
|
|
103
|
-
},
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Post impressions counts.
|
|
107
|
-
*
|
|
108
|
-
* @param body - Impressions counts payload
|
|
109
|
-
* @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
|
|
110
|
-
*/
|
|
111
|
-
postTestImpressionsCount(body: string, headers?: Record<string, string>) {
|
|
112
|
-
const url = `${urls.events}/testImpressions/count`;
|
|
113
|
-
return splitHttpClient(url, { method: 'POST', body, headers }, telemetryTracker.trackHttp(IMPRESSIONS_COUNT));
|
|
114
|
-
},
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Post unique keys for client side.
|
|
118
|
-
*
|
|
119
|
-
* @param body - unique keys payload
|
|
120
|
-
* @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
|
|
121
|
-
*/
|
|
122
|
-
postUniqueKeysBulkCs(body: string, headers?: Record<string, string>) {
|
|
123
|
-
const url = `${urls.telemetry}/v1/keys/cs`;
|
|
124
|
-
return splitHttpClient(url, { method: 'POST', body, headers }, telemetryTracker.trackHttp(TELEMETRY));
|
|
125
|
-
},
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Post unique keys for server side.
|
|
129
|
-
*
|
|
130
|
-
* @param body - unique keys payload
|
|
131
|
-
* @param headers - Optionals headers to overwrite default ones. For example, it is used in producer mode to overwrite metadata headers.
|
|
132
|
-
*/
|
|
133
|
-
postUniqueKeysBulkSs(body: string, headers?: Record<string, string>) {
|
|
134
|
-
const url = `${urls.telemetry}/v1/keys/ss`;
|
|
135
|
-
return splitHttpClient(url, { method: 'POST', body, headers }, telemetryTracker.trackHttp(TELEMETRY));
|
|
136
|
-
},
|
|
137
|
-
|
|
138
|
-
postMetricsConfig(body: string, headers?: Record<string, string>) {
|
|
139
|
-
const url = `${urls.telemetry}/v1/metrics/config`;
|
|
140
|
-
return splitHttpClient(url, { method: 'POST', body, headers }, telemetryTracker.trackHttp(TELEMETRY), true);
|
|
141
|
-
},
|
|
142
|
-
|
|
143
|
-
postMetricsUsage(body: string, headers?: Record<string, string>) {
|
|
144
|
-
const url = `${urls.telemetry}/v1/metrics/usage`;
|
|
145
|
-
return splitHttpClient(url, { method: 'POST', body, headers }, telemetryTracker.trackHttp(TELEMETRY), true);
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { IRequestOptions, IResponse, ISplitHttpClient, NetworkError } from './types';
|
|
2
|
-
import { objectAssign } from '../utils/lang/objectAssign';
|
|
3
|
-
import { ERROR_HTTP, ERROR_CLIENT_CANNOT_GET_READY } from '../logger/constants';
|
|
4
|
-
import { ISettings } from '../types';
|
|
5
|
-
import { IPlatform } from '../sdkFactory/types';
|
|
6
|
-
import { decorateHeaders, removeNonISO88591 } from './decorateHeaders';
|
|
7
|
-
import { timeout } from '../utils/promise/timeout';
|
|
8
|
-
|
|
9
|
-
const PENDING_FETCH_ERROR_TIMEOUT = 100;
|
|
10
|
-
const messageNoFetch = 'Global fetch API is not available.';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Factory of Split HTTP clients, which are HTTP clients with predefined headers for Split endpoints.
|
|
14
|
-
*
|
|
15
|
-
* @param settings - SDK settings, used to access authorizationKey, logger instance and metadata (SDK version, ip and hostname) to set additional headers
|
|
16
|
-
* @param platform - object containing environment-specific dependencies
|
|
17
|
-
*/
|
|
18
|
-
export function splitHttpClientFactory(settings: ISettings, { getOptions, getFetch }: Pick<IPlatform, 'getOptions' | 'getFetch'>): ISplitHttpClient {
|
|
19
|
-
|
|
20
|
-
const { log, core: { authorizationKey }, version, runtime: { ip, hostname } } = settings;
|
|
21
|
-
const options = getOptions && getOptions(settings);
|
|
22
|
-
const fetch = getFetch && getFetch(settings);
|
|
23
|
-
|
|
24
|
-
// if fetch is not available, log Error
|
|
25
|
-
if (!fetch) log.error(ERROR_CLIENT_CANNOT_GET_READY, [messageNoFetch]);
|
|
26
|
-
|
|
27
|
-
const commonHeaders: Record<string, string> = {
|
|
28
|
-
'Accept': 'application/json',
|
|
29
|
-
'Content-Type': 'application/json',
|
|
30
|
-
'Authorization': `Bearer ${authorizationKey}`,
|
|
31
|
-
'SplitSDKVersion': version
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
if (ip) commonHeaders['SplitSDKMachineIP'] = ip;
|
|
35
|
-
if (hostname) commonHeaders['SplitSDKMachineName'] = removeNonISO88591(hostname);
|
|
36
|
-
|
|
37
|
-
return function httpClient(url: string, reqOpts: IRequestOptions = {}, latencyTracker: (error?: NetworkError) => void = () => { }, logErrorsAsInfo: boolean = false): Promise<IResponse> {
|
|
38
|
-
|
|
39
|
-
const request = objectAssign({
|
|
40
|
-
headers: decorateHeaders(settings, objectAssign({}, commonHeaders, reqOpts.headers || {})),
|
|
41
|
-
method: reqOpts.method || 'GET',
|
|
42
|
-
body: reqOpts.body
|
|
43
|
-
}, options);
|
|
44
|
-
|
|
45
|
-
// using `fetch(url, options)` signature to work with unfetch, a lightweight ponyfill of fetch API.
|
|
46
|
-
return fetch ? fetch(url, request)
|
|
47
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Checking_that_the_fetch_was_successful
|
|
48
|
-
.then(response => {
|
|
49
|
-
if (!response.ok) {
|
|
50
|
-
// timeout since `text()` promise might not settle in some fetch implementations and cases (e.g. no content)
|
|
51
|
-
return timeout(PENDING_FETCH_ERROR_TIMEOUT, response.text()).then(message => Promise.reject({ response, message }), () => Promise.reject({ response }));
|
|
52
|
-
}
|
|
53
|
-
latencyTracker();
|
|
54
|
-
return response;
|
|
55
|
-
})
|
|
56
|
-
.catch(error => {
|
|
57
|
-
const resp = error && error.response;
|
|
58
|
-
let msg = '';
|
|
59
|
-
|
|
60
|
-
if (resp) { // An HTTP error
|
|
61
|
-
switch (resp.status) {
|
|
62
|
-
case 404: msg = 'Invalid SDK key or resource not found.';
|
|
63
|
-
break;
|
|
64
|
-
// Don't use resp.statusText since reason phrase is removed in HTTP/2
|
|
65
|
-
default: msg = error.message;
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
} else { // Something else, either an error making the request or a Network error.
|
|
69
|
-
msg = error.message || 'Network Error';
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (!resp || resp.status !== 403) { // 403's log we'll be handled somewhere else.
|
|
73
|
-
log[logErrorsAsInfo ? 'info' : 'error'](ERROR_HTTP, [resp ? 'status code ' + resp.status : 'no status code', url, msg]);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const networkError: NetworkError = new Error(msg);
|
|
77
|
-
// passes `undefined` as statusCode if not an HTTP error (resp === undefined)
|
|
78
|
-
networkError.statusCode = resp && resp.status;
|
|
79
|
-
|
|
80
|
-
latencyTracker(networkError);
|
|
81
|
-
throw networkError;
|
|
82
|
-
}) : Promise.reject(new Error(messageNoFetch));
|
|
83
|
-
};
|
|
84
|
-
}
|
package/src/services/types.ts
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
export type IRequestOptions = {
|
|
2
|
-
method?: string,
|
|
3
|
-
headers?: Record<string, string>,
|
|
4
|
-
body?: string
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
export type IResponse = {
|
|
8
|
-
ok: boolean,
|
|
9
|
-
status: number,
|
|
10
|
-
json: () => Promise<any>, // Used to parse OK response body. Promise rejects if body cannot be parsed
|
|
11
|
-
text: () => Promise<string>, // Used to read Not OK response body. Promise never rejects
|
|
12
|
-
|
|
13
|
-
/** Other available properties when using Unfetch */
|
|
14
|
-
// statusText: string, // `undefined` in Web fetch since HTTP/2 doesn't have reason phrases anymore. `node-fetch` overwrites it depending on the status code
|
|
15
|
-
// url: string,
|
|
16
|
-
// blob: () => Promise<Blob>,
|
|
17
|
-
// clone: () => IResponse,
|
|
18
|
-
// headers: {
|
|
19
|
-
// keys: () => string[],
|
|
20
|
-
// entries: () => Array<[string, string]>,
|
|
21
|
-
// get: (key: string) => string | undefined,
|
|
22
|
-
// has: (key: string) => boolean,
|
|
23
|
-
// }
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export type NetworkError = Error & { statusCode?: number }
|
|
27
|
-
|
|
28
|
-
// Reduced version of Fetch API
|
|
29
|
-
export type IFetch = (url: string, options?: IRequestOptions) => Promise<IResponse>
|
|
30
|
-
|
|
31
|
-
// IFetch specialization
|
|
32
|
-
export type IHealthCheckAPI = () => Promise<boolean>
|
|
33
|
-
|
|
34
|
-
export type ISplitHttpClient = (url: string, options?: IRequestOptions, latencyTracker?: (error?: NetworkError) => void, logErrorsAsInfo?: boolean) => Promise<IResponse>
|
|
35
|
-
|
|
36
|
-
export type IFetchAuth = (userKeys?: string[]) => Promise<IResponse>
|
|
37
|
-
|
|
38
|
-
export type IFetchSplitChanges = (since: number, noCache?: boolean, till?: number, rbSince?: number) => Promise<IResponse>
|
|
39
|
-
|
|
40
|
-
export type IFetchSegmentChanges = (since: number, segmentName: string, noCache?: boolean, till?: number) => Promise<IResponse>
|
|
41
|
-
|
|
42
|
-
export type IFetchMemberships = (userMatchingKey: string, noCache?: boolean, till?: number) => Promise<IResponse>
|
|
43
|
-
|
|
44
|
-
export type IPostEventsBulk = (body: string, headers?: Record<string, string>) => Promise<IResponse>
|
|
45
|
-
|
|
46
|
-
export type IPostUniqueKeysBulkCs = (body: string, headers?: Record<string, string>) => Promise<IResponse>
|
|
47
|
-
|
|
48
|
-
export type IPostUniqueKeysBulkSs = (body: string, headers?: Record<string, string>) => Promise<IResponse>
|
|
49
|
-
|
|
50
|
-
export type IPostTestImpressionsBulk = (body: string, headers?: Record<string, string>) => Promise<IResponse>
|
|
51
|
-
|
|
52
|
-
export type IPostTestImpressionsCount = (body: string, headers?: Record<string, string>) => Promise<IResponse>
|
|
53
|
-
|
|
54
|
-
export type IPostMetricsConfig = (body: string, headers?: Record<string, string>) => Promise<IResponse>
|
|
55
|
-
|
|
56
|
-
export type IPostMetricsUsage = (body: string, headers?: Record<string, string>) => Promise<IResponse>
|
|
57
|
-
|
|
58
|
-
export interface ISplitApi {
|
|
59
|
-
getSdkAPIHealthCheck: IHealthCheckAPI
|
|
60
|
-
getEventsAPIHealthCheck: IHealthCheckAPI
|
|
61
|
-
fetchAuth: IFetchAuth
|
|
62
|
-
fetchSplitChanges: IFetchSplitChanges
|
|
63
|
-
fetchSegmentChanges: IFetchSegmentChanges
|
|
64
|
-
fetchMemberships: IFetchMemberships
|
|
65
|
-
postEventsBulk: IPostEventsBulk
|
|
66
|
-
postUniqueKeysBulkCs: IPostUniqueKeysBulkCs
|
|
67
|
-
postUniqueKeysBulkSs: IPostUniqueKeysBulkSs
|
|
68
|
-
postTestImpressionsBulk: IPostTestImpressionsBulk
|
|
69
|
-
postTestImpressionsCount: IPostTestImpressionsCount
|
|
70
|
-
postMetricsConfig: IPostMetricsConfig
|
|
71
|
-
postMetricsUsage: IPostMetricsUsage
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Minimal version of EventSource API used by the SDK
|
|
75
|
-
interface EventSourceEventMap {
|
|
76
|
-
'error': Event
|
|
77
|
-
'message': MessageEvent
|
|
78
|
-
'open': Event
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
interface IEventSource {
|
|
82
|
-
addEventListener<K extends keyof EventSourceEventMap>(type: K, listener: (this: IEventSource, ev: EventSourceEventMap[K]) => any): void
|
|
83
|
-
close(): void
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export type IEventSourceConstructor = new (url: string, eventSourceInitDict?: any) => IEventSource
|