@splitsoftware/splitio-commons 2.5.0-rc.0 → 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 +893 -142
- 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 -2087
- 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 -109
- package/cjs/storages/findLatencyIndex.js +0 -18
- package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +0 -81
- package/cjs/storages/inLocalStorage/RBSegmentsCacheInLocal.js +0 -121
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +0 -208
- package/cjs/storages/inLocalStorage/constants.js +0 -5
- package/cjs/storages/inLocalStorage/index.js +0 -73
- package/cjs/storages/inLocalStorage/validateCache.js +0 -80
- 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 -81
- package/cjs/storages/inMemory/MySegmentsCacheInMemory.js +0 -46
- package/cjs/storages/inMemory/RBSegmentsCacheInMemory.js +0 -65
- 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 -72
- 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 -81
- package/cjs/sync/polling/updaters/segmentChangesUpdater.js +0 -80
- package/cjs/sync/polling/updaters/splitChangesUpdater.js +0 -188
- 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 -172
- 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 -16
- 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 -104
- package/esm/storages/findLatencyIndex.js +0 -14
- package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +0 -78
- package/esm/storages/inLocalStorage/RBSegmentsCacheInLocal.js +0 -118
- package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +0 -205
- package/esm/storages/inLocalStorage/constants.js +0 -2
- package/esm/storages/inLocalStorage/index.js +0 -69
- package/esm/storages/inLocalStorage/validateCache.js +0 -76
- 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 -77
- package/esm/storages/inMemory/MySegmentsCacheInMemory.js +0 -43
- package/esm/storages/inMemory/RBSegmentsCacheInMemory.js +0 -62
- 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 -67
- 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 -77
- package/esm/sync/polling/updaters/segmentChangesUpdater.js +0 -76
- package/esm/sync/polling/updaters/splitChangesUpdater.js +0 -182
- 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 -168
- 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 -12
- 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 -132
- 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 -113
- package/src/storages/findLatencyIndex.ts +0 -16
- package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +0 -86
- package/src/storages/inLocalStorage/RBSegmentsCacheInLocal.ts +0 -140
- package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +0 -244
- package/src/storages/inLocalStorage/constants.ts +0 -2
- package/src/storages/inLocalStorage/index.ts +0 -83
- package/src/storages/inLocalStorage/validateCache.ts +0 -93
- 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 -92
- package/src/storages/inMemory/MySegmentsCacheInMemory.ts +0 -49
- package/src/storages/inMemory/RBSegmentsCacheInMemory.ts +0 -72
- 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 -522
- 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 -98
- 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 -102
- package/src/sync/polling/updaters/segmentChangesUpdater.ts +0 -92
- package/src/sync/polling/updaters/splitChangesUpdater.ts +0 -218
- 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 -190
- 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 -44
- 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 -11
- 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
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateLogger = void 0;
|
|
4
|
-
var logger_1 = require("../../../logger");
|
|
5
|
-
var isLocalStorageAvailable_1 = require("../../env/isLocalStorageAvailable");
|
|
6
|
-
var isNode_1 = require("../../env/isNode");
|
|
7
|
-
var debug_1 = require("../../../logger/messages/debug");
|
|
8
|
-
var commons_1 = require("./commons");
|
|
9
|
-
var allCodes = new Map(debug_1.codesDebug);
|
|
10
|
-
// @TODO set default debug setting instead of initialLogLevel when integrating in JS and Node packages
|
|
11
|
-
var LS_KEY = 'splitio_debug';
|
|
12
|
-
var ENV_VAR_KEY = 'SPLITIO_DEBUG';
|
|
13
|
-
/**
|
|
14
|
-
* Logger initial debug level, that is disabled ('NONE') by default.
|
|
15
|
-
* Acceptable values are: 'DEBUG', 'INFO', 'WARN', 'ERROR', 'NONE'.
|
|
16
|
-
* Other acceptable values are 'on', 'enable' and 'enabled', which are equivalent to 'DEBUG'.
|
|
17
|
-
* Any other string value is equivalent to disable.
|
|
18
|
-
*/
|
|
19
|
-
var initialState = String(
|
|
20
|
-
// eslint-disable-next-line no-undef
|
|
21
|
-
isNode_1.isNode ? process.env[ENV_VAR_KEY] : (0, isLocalStorageAvailable_1.isLocalStorageAvailable)() ? localStorage.getItem(LS_KEY) : '');
|
|
22
|
-
// By default it starts disabled.
|
|
23
|
-
var initialLogLevel = logger_1.LogLevels.NONE;
|
|
24
|
-
// Kept to avoid a breaking change ('on', 'enable' and 'enabled' are equivalent)
|
|
25
|
-
if (/^(enabled?|on)/i.test(initialState)) {
|
|
26
|
-
initialLogLevel = logger_1.LogLevels.DEBUG;
|
|
27
|
-
}
|
|
28
|
-
else if ((0, logger_1.isLogLevelString)(initialState)) {
|
|
29
|
-
initialLogLevel = initialState;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Validates the `debug` property at config and use it to set the log level.
|
|
33
|
-
*
|
|
34
|
-
* @param settings - user config object, with an optional `debug` property of type boolean or string log level.
|
|
35
|
-
* @returns a logger instance with the log level at `settings.debug`. If `settings.debug` is invalid or not provided, `initialLogLevel` is used.
|
|
36
|
-
*/
|
|
37
|
-
function validateLogger(settings) {
|
|
38
|
-
var debug = settings.debug;
|
|
39
|
-
var logLevel = debug !== undefined ? (0, commons_1.getLogLevel)(debug) : initialLogLevel;
|
|
40
|
-
var log = new logger_1.Logger({ logLevel: logLevel || initialLogLevel }, allCodes);
|
|
41
|
-
// @ts-ignore // if logLevel is undefined at this point, it means that settings `debug` value is invalid
|
|
42
|
-
if (!logLevel)
|
|
43
|
-
log._log(logger_1.LogLevels.ERROR, 'Invalid Log Level - No changes to the logs will be applied.');
|
|
44
|
-
return log;
|
|
45
|
-
}
|
|
46
|
-
exports.validateLogger = validateLogger;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getLogLevel = void 0;
|
|
4
|
-
var logger_1 = require("../../../logger");
|
|
5
|
-
/**
|
|
6
|
-
* Returns the LogLevel for the given debugValue or undefined if it is invalid,
|
|
7
|
-
* i.e., if the debugValue is not a boolean or LogLevel string.
|
|
8
|
-
*
|
|
9
|
-
* @param debugValue - debug value at config
|
|
10
|
-
* @returns LogLevel of the given debugValue or undefined if the provided value is invalid
|
|
11
|
-
*/
|
|
12
|
-
function getLogLevel(debugValue) {
|
|
13
|
-
if (typeof debugValue === 'boolean') {
|
|
14
|
-
if (debugValue) {
|
|
15
|
-
return logger_1.LogLevels.DEBUG;
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
return logger_1.LogLevels.NONE;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
else if (typeof debugValue === 'string' && (0, logger_1.isLogLevelString)(debugValue)) {
|
|
22
|
-
return debugValue;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
return undefined;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
exports.getLogLevel = getLogLevel;
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateLogger = void 0;
|
|
4
|
-
var logger_1 = require("../../../logger");
|
|
5
|
-
var commons_1 = require("./commons");
|
|
6
|
-
function isLogger(log) {
|
|
7
|
-
return log !== null && typeof log === 'object' && typeof log.debug === 'function' && typeof log.info === 'function' && typeof log.warn === 'function' && typeof log.error === 'function' && typeof log.setLogLevel === 'function';
|
|
8
|
-
}
|
|
9
|
-
// By default it starts disabled.
|
|
10
|
-
var initialLogLevel = logger_1.LogLevels.NONE;
|
|
11
|
-
/**
|
|
12
|
-
* Validates the `debug` property at config and use it to set the logger.
|
|
13
|
-
*
|
|
14
|
-
* @param settings - user config object, with an optional `debug` property of type boolean, string log level or a Logger object.
|
|
15
|
-
* @returns a logger instance, that might be: the provided logger at `settings.debug`, or one with the given `debug` log level,
|
|
16
|
-
* or one with NONE log level if `debug` is not defined or invalid.
|
|
17
|
-
*/
|
|
18
|
-
function validateLogger(settings) {
|
|
19
|
-
var debug = settings.debug;
|
|
20
|
-
var logLevel = initialLogLevel;
|
|
21
|
-
if (debug !== undefined) {
|
|
22
|
-
if (isLogger(debug))
|
|
23
|
-
return debug;
|
|
24
|
-
logLevel = (0, commons_1.getLogLevel)(settings.debug);
|
|
25
|
-
}
|
|
26
|
-
var log = new logger_1.Logger({ logLevel: logLevel || initialLogLevel });
|
|
27
|
-
// @ts-ignore // `debug` value is invalid if logLevel is undefined at this point
|
|
28
|
-
if (!logLevel)
|
|
29
|
-
log._log(logger_1.LogLevels.ERROR, 'Invalid `debug` value at config. Logs will be disabled.');
|
|
30
|
-
return log;
|
|
31
|
-
}
|
|
32
|
-
exports.validateLogger = validateLogger;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isConsumerMode = exports.validateMode = void 0;
|
|
4
|
-
var constants_1 = require("../constants");
|
|
5
|
-
function validateMode(key, mode) {
|
|
6
|
-
// Leaving the comparison as is, in case we change the mode name but not the setting.
|
|
7
|
-
if (key === 'localhost')
|
|
8
|
-
return constants_1.LOCALHOST_MODE;
|
|
9
|
-
if ([constants_1.STANDALONE_MODE, constants_1.PRODUCER_MODE, constants_1.CONSUMER_MODE, constants_1.CONSUMER_PARTIAL_MODE].indexOf(mode) === -1)
|
|
10
|
-
throw Error('Invalid mode provided');
|
|
11
|
-
return mode;
|
|
12
|
-
}
|
|
13
|
-
exports.validateMode = validateMode;
|
|
14
|
-
/**
|
|
15
|
-
* Storage is async if mode is consumer or partial consumer
|
|
16
|
-
*/
|
|
17
|
-
function isConsumerMode(mode) {
|
|
18
|
-
return constants_1.CONSUMER_MODE === mode || constants_1.CONSUMER_PARTIAL_MODE === mode;
|
|
19
|
-
}
|
|
20
|
-
exports.isConsumerMode = isConsumerMode;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateRuntime = void 0;
|
|
4
|
-
// For client-side SDKs, machine IP and Hostname are not captured and sent to Split backend.
|
|
5
|
-
function validateRuntime() {
|
|
6
|
-
return {
|
|
7
|
-
ip: false,
|
|
8
|
-
hostname: false
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
exports.validateRuntime = validateRuntime;
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateFlagSets = exports.validateSplitFilters = void 0;
|
|
4
|
-
var splits_1 = require("../inputValidation/splits");
|
|
5
|
-
var constants_1 = require("../../logger/constants");
|
|
6
|
-
var objectAssign_1 = require("../lang/objectAssign");
|
|
7
|
-
var lang_1 = require("../lang");
|
|
8
|
-
var mode_1 = require("./mode");
|
|
9
|
-
// Split filters metadata.
|
|
10
|
-
// Ordered according to their precedency when forming the filter query string: `&names=<values>&prefixes=<values>`
|
|
11
|
-
var FILTERS_METADATA = [
|
|
12
|
-
{
|
|
13
|
-
type: 'bySet',
|
|
14
|
-
maxLength: 50,
|
|
15
|
-
queryParam: 'sets='
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
type: 'byName',
|
|
19
|
-
maxLength: 400,
|
|
20
|
-
queryParam: 'names='
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
type: 'byPrefix',
|
|
24
|
-
maxLength: 50,
|
|
25
|
-
queryParam: 'prefixes='
|
|
26
|
-
}
|
|
27
|
-
];
|
|
28
|
-
var VALID_FLAGSET_REGEX = /^[a-z0-9][_a-z0-9]{0,49}$/;
|
|
29
|
-
var CAPITAL_LETTERS_REGEX = /[A-Z]/;
|
|
30
|
-
/**
|
|
31
|
-
* Validates that the given value is a valid filter type
|
|
32
|
-
*/
|
|
33
|
-
function validateFilterType(maybeFilterType) {
|
|
34
|
-
return FILTERS_METADATA.some(function (filterMetadata) { return filterMetadata.type === maybeFilterType; });
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Validate, deduplicate and sort a given list of filter values.
|
|
38
|
-
*
|
|
39
|
-
* @param type - filter type string used for log messages
|
|
40
|
-
* @param values - list of values to validate, deduplicate and sort
|
|
41
|
-
* @param maxLength - max length allowed for the list of values
|
|
42
|
-
* @returns list of valid, unique and alphabetically sorted non-empty strings. The list is empty if `values` param is not a non-empty array or all its values are invalid.
|
|
43
|
-
*
|
|
44
|
-
* @throws Error if the sanitized list exceeds the length indicated by `maxLength`
|
|
45
|
-
*/
|
|
46
|
-
function validateSplitFilter(log, type, values, maxLength) {
|
|
47
|
-
// validate and remove invalid and duplicated values
|
|
48
|
-
var result = (0, splits_1.validateSplits)(log, values, constants_1.LOG_PREFIX_SETTINGS, type + " filter", type + " filter value");
|
|
49
|
-
if (result) {
|
|
50
|
-
if (type === 'bySet') {
|
|
51
|
-
result = sanitizeFlagSets(log, result, constants_1.LOG_PREFIX_SETTINGS);
|
|
52
|
-
}
|
|
53
|
-
// check max length
|
|
54
|
-
if (result.length > maxLength)
|
|
55
|
-
throw new Error(maxLength + " unique values can be specified at most for '" + type + "' filter. You passed " + result.length + ". Please consider reducing the amount or using other filter.");
|
|
56
|
-
// sort values
|
|
57
|
-
result.sort();
|
|
58
|
-
}
|
|
59
|
-
return result || []; // returns empty array if `result` is `false`
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Returns a string representing the URL encoded query component of /splitChanges URL.
|
|
63
|
-
*
|
|
64
|
-
* @param groupedFilters - object of filters. Each filter must be a list of valid, unique and ordered string values.
|
|
65
|
-
* @returns null or string with the `split filter query` component of the URL.
|
|
66
|
-
*/
|
|
67
|
-
function queryStringBuilder(groupedFilters) {
|
|
68
|
-
var queryParams = [];
|
|
69
|
-
FILTERS_METADATA.forEach(function (_a) {
|
|
70
|
-
var type = _a.type, queryParam = _a.queryParam;
|
|
71
|
-
var filter = groupedFilters[type];
|
|
72
|
-
if (filter.length > 0)
|
|
73
|
-
queryParams.push(queryParam + filter.map(function (value) { return encodeURIComponent(value); }).join(','));
|
|
74
|
-
});
|
|
75
|
-
return queryParams.length > 0 ? '&' + queryParams.join('&') : null;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Sanitizes set names list taking into account:
|
|
79
|
-
* - It should be lowercase
|
|
80
|
-
* - Must adhere the following regular expression `/^[a-z0-9][_a-z0-9]{0,49}$/` that means
|
|
81
|
-
* - must start with a letter or number
|
|
82
|
-
* - Be in lowercase
|
|
83
|
-
* - Be alphanumeric
|
|
84
|
-
* - have a max length of 50 characters
|
|
85
|
-
*
|
|
86
|
-
* @returns sanitized list of set names
|
|
87
|
-
*/
|
|
88
|
-
function sanitizeFlagSets(log, flagSets, method) {
|
|
89
|
-
var sanitizedSets = flagSets
|
|
90
|
-
.map(function (flagSet) {
|
|
91
|
-
if (CAPITAL_LETTERS_REGEX.test(flagSet)) {
|
|
92
|
-
log.warn(constants_1.WARN_LOWERCASE_FLAGSET, [method, flagSet]);
|
|
93
|
-
flagSet = flagSet.toLowerCase();
|
|
94
|
-
}
|
|
95
|
-
return flagSet;
|
|
96
|
-
})
|
|
97
|
-
.filter(function (flagSet) {
|
|
98
|
-
if (!VALID_FLAGSET_REGEX.test(flagSet)) {
|
|
99
|
-
log.warn(constants_1.WARN_INVALID_FLAGSET, [method, flagSet, VALID_FLAGSET_REGEX, flagSet]);
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
if (typeof flagSet !== 'string')
|
|
103
|
-
return false;
|
|
104
|
-
return true;
|
|
105
|
-
});
|
|
106
|
-
return (0, lang_1.uniq)(sanitizedSets);
|
|
107
|
-
}
|
|
108
|
-
function configuredFilter(validFilters, filterType) {
|
|
109
|
-
return (0, lang_1.find)(validFilters, function (filter) { return filter.type === filterType && filter.values.length > 0; });
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Validates `splitFilters` configuration object and parses it into a query string for filtering splits on `/splitChanges` fetch.
|
|
113
|
-
*
|
|
114
|
-
* @param log - logger
|
|
115
|
-
* @param maybeSplitFilters - split filters configuration param provided by the user
|
|
116
|
-
* @param mode - settings mode
|
|
117
|
-
* @returns it returns an object with the following properties:
|
|
118
|
-
* - `validFilters`: the validated `splitFilters` configuration object defined by the user.
|
|
119
|
-
* - `queryString`: the parsed split filter query. it is null if all filters are invalid or all values in filters are invalid.
|
|
120
|
-
* - `groupedFilters`: list of values grouped by filter type.
|
|
121
|
-
*
|
|
122
|
-
* @throws Error if the some of the grouped list of values per filter exceeds the max allowed length
|
|
123
|
-
*/
|
|
124
|
-
function validateSplitFilters(log, maybeSplitFilters, mode) {
|
|
125
|
-
// Validation result schema
|
|
126
|
-
var res = {
|
|
127
|
-
validFilters: [],
|
|
128
|
-
queryString: null,
|
|
129
|
-
groupedFilters: { bySet: [], byName: [], byPrefix: [] },
|
|
130
|
-
};
|
|
131
|
-
// do nothing if `splitFilters` param is not a non-empty array or mode is not STANDALONE
|
|
132
|
-
if (!maybeSplitFilters)
|
|
133
|
-
return res;
|
|
134
|
-
// Warn depending on the mode
|
|
135
|
-
if ((0, mode_1.isConsumerMode)(mode)) {
|
|
136
|
-
log.warn(constants_1.WARN_SPLITS_FILTER_IGNORED);
|
|
137
|
-
return res;
|
|
138
|
-
}
|
|
139
|
-
// Check collection type
|
|
140
|
-
if (!Array.isArray(maybeSplitFilters) || maybeSplitFilters.length === 0) {
|
|
141
|
-
log.warn(constants_1.WARN_SPLITS_FILTER_EMPTY);
|
|
142
|
-
return res;
|
|
143
|
-
}
|
|
144
|
-
// Validate filters and group their values by filter type inside `groupedFilters` object
|
|
145
|
-
res.validFilters = maybeSplitFilters.filter(function (filter, index) {
|
|
146
|
-
if (filter && validateFilterType(filter.type) && Array.isArray(filter.values)) {
|
|
147
|
-
res.groupedFilters[filter.type] = res.groupedFilters[filter.type].concat(filter.values);
|
|
148
|
-
return true;
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
log.warn(constants_1.WARN_SPLITS_FILTER_INVALID, [index]);
|
|
152
|
-
}
|
|
153
|
-
return false;
|
|
154
|
-
});
|
|
155
|
-
// By filter type, remove invalid and duplicated values and order them
|
|
156
|
-
FILTERS_METADATA.forEach(function (_a) {
|
|
157
|
-
var type = _a.type, maxLength = _a.maxLength;
|
|
158
|
-
if (res.groupedFilters[type].length > 0)
|
|
159
|
-
res.groupedFilters[type] = validateSplitFilter(log, type, res.groupedFilters[type], maxLength);
|
|
160
|
-
});
|
|
161
|
-
var setFilter = configuredFilter(res.validFilters, 'bySet');
|
|
162
|
-
// Clean all filters if set filter is present
|
|
163
|
-
if (setFilter) {
|
|
164
|
-
if (configuredFilter(res.validFilters, 'byName') || configuredFilter(res.validFilters, 'byPrefix'))
|
|
165
|
-
log.error(constants_1.ERROR_SETS_FILTER_EXCLUSIVE);
|
|
166
|
-
(0, objectAssign_1.objectAssign)(res.groupedFilters, { byName: [], byPrefix: [] });
|
|
167
|
-
}
|
|
168
|
-
// build query string
|
|
169
|
-
res.queryString = queryStringBuilder(res.groupedFilters);
|
|
170
|
-
log.debug(constants_1.SETTINGS_SPLITS_FILTER, [res.queryString]);
|
|
171
|
-
return res;
|
|
172
|
-
}
|
|
173
|
-
exports.validateSplitFilters = validateSplitFilters;
|
|
174
|
-
function validateFlagSets(log, method, flagSets, flagSetsInConfig) {
|
|
175
|
-
var sets = (0, splits_1.validateSplits)(log, flagSets, method, 'flag sets', 'flag set');
|
|
176
|
-
var toReturn = sets ? sanitizeFlagSets(log, sets, method) : [];
|
|
177
|
-
if (flagSetsInConfig.length > 0) {
|
|
178
|
-
toReturn = toReturn.filter(function (flagSet) {
|
|
179
|
-
if (flagSetsInConfig.indexOf(flagSet) > -1) {
|
|
180
|
-
return true;
|
|
181
|
-
}
|
|
182
|
-
log.warn(constants_1.WARN_FLAGSET_NOT_CONFIGURED, [method, flagSet]);
|
|
183
|
-
return false;
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
return toReturn.length ? toReturn : false;
|
|
187
|
-
}
|
|
188
|
-
exports.validateFlagSets = validateFlagSets;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateStorageCS = exports.__InLocalStorageMockFactory = void 0;
|
|
4
|
-
var InMemoryStorageCS_1 = require("../../../storages/inMemory/InMemoryStorageCS");
|
|
5
|
-
var constants_1 = require("../../../logger/constants");
|
|
6
|
-
var constants_2 = require("../../../utils/constants");
|
|
7
|
-
function __InLocalStorageMockFactory(params) {
|
|
8
|
-
var result = (0, InMemoryStorageCS_1.InMemoryStorageCSFactory)(params);
|
|
9
|
-
result.validateCache = function () { return true; }; // to emit SDK_READY_FROM_CACHE
|
|
10
|
-
return result;
|
|
11
|
-
}
|
|
12
|
-
exports.__InLocalStorageMockFactory = __InLocalStorageMockFactory;
|
|
13
|
-
__InLocalStorageMockFactory.type = constants_2.STORAGE_MEMORY;
|
|
14
|
-
/**
|
|
15
|
-
* This function validates `settings.storage` object
|
|
16
|
-
*
|
|
17
|
-
* @param settings - config object provided by the user to initialize the sdk
|
|
18
|
-
*
|
|
19
|
-
* @returns valid storage factory. Default to `InMemoryStorageCSFactory` if the provided storage is invalid or not compatible with the sdk mode if mode is standalone or localhost
|
|
20
|
-
*
|
|
21
|
-
* @throws error if mode is consumer and the provided storage is not compatible
|
|
22
|
-
*/
|
|
23
|
-
function validateStorageCS(settings) {
|
|
24
|
-
var _a = settings.storage, storage = _a === void 0 ? InMemoryStorageCS_1.InMemoryStorageCSFactory : _a, log = settings.log, mode = settings.mode;
|
|
25
|
-
// If an invalid storage is provided, fallback into MEMORY
|
|
26
|
-
if (typeof storage !== 'function' || [constants_2.STORAGE_MEMORY, constants_2.STORAGE_LOCALSTORAGE, constants_2.STORAGE_PLUGGABLE].indexOf(storage.type) === -1) {
|
|
27
|
-
storage = InMemoryStorageCS_1.InMemoryStorageCSFactory;
|
|
28
|
-
log.error(constants_1.ERROR_STORAGE_INVALID);
|
|
29
|
-
}
|
|
30
|
-
// In localhost mode with InLocalStorage, fallback to a mock InLocalStorage to emit SDK_READY_FROM_CACHE
|
|
31
|
-
if (mode === constants_2.LOCALHOST_MODE && storage.type === constants_2.STORAGE_LOCALSTORAGE) {
|
|
32
|
-
return __InLocalStorageMockFactory;
|
|
33
|
-
}
|
|
34
|
-
if ([constants_2.LOCALHOST_MODE, constants_2.STANDALONE_MODE].indexOf(mode) === -1) {
|
|
35
|
-
// Consumer modes require an async storage
|
|
36
|
-
if (storage.type !== constants_2.STORAGE_PLUGGABLE)
|
|
37
|
-
throw new Error('A PluggableStorage instance is required on consumer mode');
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
// Standalone and localhost modes require a sync storage
|
|
41
|
-
if (storage.type === constants_2.STORAGE_PLUGGABLE) {
|
|
42
|
-
storage = InMemoryStorageCS_1.InMemoryStorageCSFactory;
|
|
43
|
-
log.error(constants_1.ERROR_STORAGE_INVALID, [' It requires consumer mode.']);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
// return default InMemory storage if provided one is not valid
|
|
47
|
-
return storage;
|
|
48
|
-
}
|
|
49
|
-
exports.validateStorageCS = validateStorageCS;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.url = void 0;
|
|
4
|
-
var telemetryEndpointMatcher = /^\/v1\/metrics\/(config|usage)/;
|
|
5
|
-
var eventsEndpointMatcher = /^\/(testImpressions|metrics|events)/;
|
|
6
|
-
var authEndpointMatcher = /^\/v2\/auth/;
|
|
7
|
-
var streamingEndpointMatcher = /^\/(sse|event-stream)/;
|
|
8
|
-
/**
|
|
9
|
-
* Get URL based on a given target (path).
|
|
10
|
-
* ATM, it is only used for testing purposes.
|
|
11
|
-
*
|
|
12
|
-
* @param settings - settings object
|
|
13
|
-
* @param target - url path
|
|
14
|
-
* @returns complete url
|
|
15
|
-
*/
|
|
16
|
-
function url(settings, target) {
|
|
17
|
-
if (telemetryEndpointMatcher.test(target)) {
|
|
18
|
-
return "" + settings.urls.telemetry + target;
|
|
19
|
-
}
|
|
20
|
-
if (eventsEndpointMatcher.test(target)) {
|
|
21
|
-
return "" + settings.urls.events + target;
|
|
22
|
-
}
|
|
23
|
-
if (authEndpointMatcher.test(target)) {
|
|
24
|
-
return "" + settings.urls.auth + target;
|
|
25
|
-
}
|
|
26
|
-
if (streamingEndpointMatcher.test(target)) {
|
|
27
|
-
return "" + settings.urls.streaming + target;
|
|
28
|
-
}
|
|
29
|
-
return "" + settings.urls.sdk + target;
|
|
30
|
-
}
|
|
31
|
-
exports.url = url;
|
package/cjs/utils/time/index.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.truncateTimeFrame = void 0;
|
|
4
|
-
var DEDUP_WINDOW_SIZE_MS = 3600 * 1000;
|
|
5
|
-
/**
|
|
6
|
-
* Truncates de time frame received with the time window.
|
|
7
|
-
*/
|
|
8
|
-
function truncateTimeFrame(timestampInMs) {
|
|
9
|
-
return timestampInMs - (timestampInMs % DEDUP_WINDOW_SIZE_MS);
|
|
10
|
-
}
|
|
11
|
-
exports.truncateTimeFrame = truncateTimeFrame;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.now = void 0;
|
|
4
|
-
// Can be used on any runtime, since it fallbacks to `Date.now` if `performance.now` is not available
|
|
5
|
-
function nowFactory() {
|
|
6
|
-
// eslint-disable-next-line
|
|
7
|
-
if (typeof performance === 'object' && typeof performance.now === 'function') {
|
|
8
|
-
// eslint-disable-next-line
|
|
9
|
-
return performance.now.bind(performance);
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
return Date.now;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
exports.now = nowFactory();
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.now = void 0;
|
|
4
|
-
function now() {
|
|
5
|
-
// eslint-disable-next-line no-undef
|
|
6
|
-
var time = process.hrtime();
|
|
7
|
-
return time[0] * 1e3 + time[1] * 1e-6; // convert it to millis
|
|
8
|
-
}
|
|
9
|
-
exports.now = now;
|
package/esm/consent/index.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { ERROR_NOT_BOOLEAN, USER_CONSENT_UPDATED, USER_CONSENT_NOT_UPDATED, USER_CONSENT_INITIAL } from '../logger/constants';
|
|
2
|
-
import { isConsentGranted } from './index';
|
|
3
|
-
import { CONSENT_GRANTED, CONSENT_DECLINED, CONSENT_UNKNOWN } from '../utils/constants';
|
|
4
|
-
import { isBoolean } from '../utils/lang';
|
|
5
|
-
// User consent enum
|
|
6
|
-
var ConsentStatus = {
|
|
7
|
-
GRANTED: CONSENT_GRANTED,
|
|
8
|
-
DECLINED: CONSENT_DECLINED,
|
|
9
|
-
UNKNOWN: CONSENT_UNKNOWN,
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* The public user consent API exposed via SplitFactory, used to control if the SDK tracks and sends impressions and events or not.
|
|
13
|
-
*/
|
|
14
|
-
export function createUserConsentAPI(params) {
|
|
15
|
-
var settings = params.settings, log = params.settings.log, syncManager = params.syncManager, _a = params.storage, events = _a.events, impressions = _a.impressions, impressionCounts = _a.impressionCounts, uniqueKeys = _a.uniqueKeys;
|
|
16
|
-
if (!isConsentGranted(settings))
|
|
17
|
-
log.info(USER_CONSENT_INITIAL, [settings.userConsent]);
|
|
18
|
-
return {
|
|
19
|
-
setStatus: function (consent) {
|
|
20
|
-
var _a, _b;
|
|
21
|
-
// validate input param
|
|
22
|
-
if (!isBoolean(consent)) {
|
|
23
|
-
log.warn(ERROR_NOT_BOOLEAN, ['UserConsent.setStatus']);
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
var newConsentStatus = consent ? CONSENT_GRANTED : CONSENT_DECLINED;
|
|
27
|
-
if (settings.userConsent !== newConsentStatus) {
|
|
28
|
-
log.info(USER_CONSENT_UPDATED, [settings.userConsent, newConsentStatus]); // @ts-ignore, modify readonly prop
|
|
29
|
-
settings.userConsent = newConsentStatus;
|
|
30
|
-
if (consent) { // resumes submitters if transitioning to GRANTED
|
|
31
|
-
(_a = syncManager === null || syncManager === void 0 ? void 0 : syncManager.submitterManager) === null || _a === void 0 ? void 0 : _a.start();
|
|
32
|
-
}
|
|
33
|
-
else { // pauses submitters (except telemetry), and drops tracked data if transitioning to DECLINED
|
|
34
|
-
(_b = syncManager === null || syncManager === void 0 ? void 0 : syncManager.submitterManager) === null || _b === void 0 ? void 0 : _b.stop(true);
|
|
35
|
-
// @ts-ignore, clear method is present in storage for standalone and partial consumer mode
|
|
36
|
-
if (events.clear)
|
|
37
|
-
events.clear(); // @ts-ignore
|
|
38
|
-
if (impressions.clear)
|
|
39
|
-
impressions.clear(); // @ts-ignore
|
|
40
|
-
if (impressionCounts.clear)
|
|
41
|
-
impressionCounts.clear(); // @ts-ignore
|
|
42
|
-
if (uniqueKeys.clear)
|
|
43
|
-
uniqueKeys.clear();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
log.info(USER_CONSENT_NOT_UPDATED, [newConsentStatus]);
|
|
48
|
-
}
|
|
49
|
-
return true;
|
|
50
|
-
},
|
|
51
|
-
getStatus: function () {
|
|
52
|
-
return settings.userConsent;
|
|
53
|
-
},
|
|
54
|
-
Status: ConsentStatus
|
|
55
|
-
};
|
|
56
|
-
}
|
package/esm/dtos/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/esm/evaluator/Engine.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { get, isString } from '../utils/lang';
|
|
2
|
-
import { parser } from './parser';
|
|
3
|
-
import { keyParser } from '../utils/key';
|
|
4
|
-
import { thenable } from '../utils/promise/thenable';
|
|
5
|
-
import { NO_CONDITION_MATCH, SPLIT_ARCHIVED, SPLIT_KILLED, PREREQUISITES_NOT_MET } from '../utils/labels';
|
|
6
|
-
import { CONTROL } from '../utils/constants';
|
|
7
|
-
import { ENGINE_DEFAULT } from '../logger/constants';
|
|
8
|
-
import { prerequisitesMatcherContext } from './matchers/prerequisites';
|
|
9
|
-
function evaluationResult(result, defaultTreatment) {
|
|
10
|
-
return {
|
|
11
|
-
treatment: get(result, 'treatment', defaultTreatment),
|
|
12
|
-
label: get(result, 'label', NO_CONDITION_MATCH)
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
export function engineParser(log, split, storage) {
|
|
16
|
-
var killed = split.killed, seed = split.seed, trafficAllocation = split.trafficAllocation, trafficAllocationSeed = split.trafficAllocationSeed, status = split.status, conditions = split.conditions, prerequisites = split.prerequisites;
|
|
17
|
-
var defaultTreatment = isString(split.defaultTreatment) ? split.defaultTreatment : CONTROL;
|
|
18
|
-
var evaluator = parser(log, conditions, storage);
|
|
19
|
-
var prerequisiteMatcher = prerequisitesMatcherContext(prerequisites, storage, log);
|
|
20
|
-
return {
|
|
21
|
-
getTreatment: function (key, attributes, splitEvaluator) {
|
|
22
|
-
var parsedKey = keyParser(key);
|
|
23
|
-
function evaluate(prerequisitesMet) {
|
|
24
|
-
if (!prerequisitesMet) {
|
|
25
|
-
log.debug(ENGINE_DEFAULT, ['Prerequisite not met']);
|
|
26
|
-
return {
|
|
27
|
-
treatment: defaultTreatment,
|
|
28
|
-
label: PREREQUISITES_NOT_MET
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
var evaluation = evaluator(parsedKey, seed, trafficAllocation, trafficAllocationSeed, attributes, splitEvaluator);
|
|
32
|
-
return thenable(evaluation) ?
|
|
33
|
-
evaluation.then(function (result) { return evaluationResult(result, defaultTreatment); }) :
|
|
34
|
-
evaluationResult(evaluation, defaultTreatment);
|
|
35
|
-
}
|
|
36
|
-
if (status === 'ARCHIVED')
|
|
37
|
-
return {
|
|
38
|
-
treatment: CONTROL,
|
|
39
|
-
label: SPLIT_ARCHIVED
|
|
40
|
-
};
|
|
41
|
-
if (killed) {
|
|
42
|
-
log.debug(ENGINE_DEFAULT, ['Flag is killed']);
|
|
43
|
-
return {
|
|
44
|
-
treatment: defaultTreatment,
|
|
45
|
-
label: SPLIT_KILLED
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
var prerequisitesMet = prerequisiteMatcher({ key: key, attributes: attributes }, splitEvaluator);
|
|
49
|
-
return thenable(prerequisitesMet) ?
|
|
50
|
-
prerequisitesMet.then(evaluate) :
|
|
51
|
-
evaluate(prerequisitesMet);
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { findIndex } from '../../utils/lang';
|
|
2
|
-
import { thenable } from '../../utils/promise/thenable';
|
|
3
|
-
import { ENGINE_COMBINER_AND } from '../../logger/constants';
|
|
4
|
-
export function andCombinerContext(log, matchers) {
|
|
5
|
-
function andResults(results) {
|
|
6
|
-
// Array.prototype.every is supported by target environments
|
|
7
|
-
var hasMatchedAll = results.every(function (value) { return value; });
|
|
8
|
-
log.debug(ENGINE_COMBINER_AND, [hasMatchedAll]);
|
|
9
|
-
return hasMatchedAll;
|
|
10
|
-
}
|
|
11
|
-
return function andCombiner(key, attributes, splitEvaluator) {
|
|
12
|
-
var matcherResults = matchers.map(function (matcher) { return matcher(key, attributes, splitEvaluator); });
|
|
13
|
-
// If any matching result is a thenable we should use Promise.all
|
|
14
|
-
if (findIndex(matcherResults, thenable) !== -1) {
|
|
15
|
-
return Promise.all(matcherResults).then(andResults);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
return andResults(matcherResults);
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { findIndex, isBoolean } from '../../utils/lang';
|
|
2
|
-
import { thenable } from '../../utils/promise/thenable';
|
|
3
|
-
import { UNSUPPORTED_MATCHER_TYPE } from '../../utils/labels';
|
|
4
|
-
import { CONTROL } from '../../utils/constants';
|
|
5
|
-
import { ENGINE_COMBINER_IFELSEIF, ENGINE_COMBINER_IFELSEIF_NO_TREATMENT, ERROR_ENGINE_COMBINER_IFELSEIF } from '../../logger/constants';
|
|
6
|
-
export function ifElseIfCombinerContext(log, predicates) {
|
|
7
|
-
function unexpectedInputHandler() {
|
|
8
|
-
log.error(ERROR_ENGINE_COMBINER_IFELSEIF);
|
|
9
|
-
return {
|
|
10
|
-
treatment: CONTROL,
|
|
11
|
-
label: UNSUPPORTED_MATCHER_TYPE
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
function computeEvaluation(predicateResults) {
|
|
15
|
-
for (var i = 0, len = predicateResults.length; i < len; i++) {
|
|
16
|
-
var evaluation = predicateResults[i];
|
|
17
|
-
if (evaluation !== undefined) {
|
|
18
|
-
if (!isBoolean(evaluation))
|
|
19
|
-
log.debug(ENGINE_COMBINER_IFELSEIF, [evaluation.treatment]);
|
|
20
|
-
return evaluation;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
log.debug(ENGINE_COMBINER_IFELSEIF_NO_TREATMENT);
|
|
24
|
-
return undefined;
|
|
25
|
-
}
|
|
26
|
-
function ifElseIfCombiner(key, seed, trafficAllocation, trafficAllocationSeed, attributes, splitEvaluator) {
|
|
27
|
-
// In Async environments we are going to have async predicates. There is none way to know
|
|
28
|
-
// before hand so we need to evaluate all the predicates, verify for thenables, and finally,
|
|
29
|
-
// define how to return the treatment (wrap result into a Promise or not).
|
|
30
|
-
var predicateResults = predicates.map(function (evaluator) { return evaluator(key, seed, trafficAllocation, trafficAllocationSeed, attributes, splitEvaluator); });
|
|
31
|
-
// if we find a thenable
|
|
32
|
-
if (findIndex(predicateResults, thenable) !== -1) {
|
|
33
|
-
return Promise.all(predicateResults).then(function (results) { return computeEvaluation(results); });
|
|
34
|
-
}
|
|
35
|
-
return computeEvaluation(predicateResults);
|
|
36
|
-
}
|
|
37
|
-
// if there is none predicates, then there was an error in parsing phase
|
|
38
|
-
if (!Array.isArray(predicates) || predicates.length === 0) {
|
|
39
|
-
return unexpectedInputHandler;
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
return ifElseIfCombiner;
|
|
43
|
-
}
|
|
44
|
-
}
|