@featbit/js-client-sdk 4.2.11 → 4.2.13
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/dist/cjs/Configuration.js +183 -0
- package/dist/cjs/Configuration.js.map +1 -0
- package/dist/cjs/Context.js +49 -0
- package/dist/cjs/Context.js.map +1 -0
- package/dist/cjs/FbClientBuilder.js +151 -0
- package/dist/cjs/FbClientBuilder.js.map +1 -0
- package/dist/cjs/FbClientCore.js +334 -0
- package/dist/cjs/FbClientCore.js.map +1 -0
- package/dist/cjs/IContextProperty.js +3 -0
- package/dist/cjs/IContextProperty.js.map +1 -0
- package/dist/cjs/IDataKind.js +3 -0
- package/dist/cjs/IDataKind.js.map +1 -0
- package/dist/cjs/IFbClient.js +3 -0
- package/dist/cjs/IFbClient.js.map +1 -0
- package/dist/cjs/IFbClientCore.js +3 -0
- package/dist/cjs/IFbClientCore.js.map +1 -0
- package/dist/cjs/IVersionedData.js +3 -0
- package/dist/cjs/IVersionedData.js.map +1 -0
- package/dist/cjs/bootstrap/IBootstrapProvider.js +3 -0
- package/dist/cjs/bootstrap/IBootstrapProvider.js.map +1 -0
- package/dist/cjs/bootstrap/JsonBootstrapProvider.js +30 -0
- package/dist/cjs/bootstrap/JsonBootstrapProvider.js.map +1 -0
- package/dist/cjs/bootstrap/NullBootstrapProvider.js +19 -0
- package/dist/cjs/bootstrap/NullBootstrapProvider.js.map +1 -0
- package/dist/cjs/bootstrap/index.js +20 -0
- package/dist/cjs/bootstrap/index.js.map +1 -0
- package/dist/cjs/constants.js +6 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/data-sources/DataSourceUpdates.js +125 -0
- package/dist/cjs/data-sources/DataSourceUpdates.js.map +1 -0
- package/dist/cjs/data-sources/createStreamListeners.js +49 -0
- package/dist/cjs/data-sources/createStreamListeners.js.map +1 -0
- package/dist/cjs/data-sources/index.js +19 -0
- package/dist/cjs/data-sources/index.js.map +1 -0
- package/dist/cjs/data-sync/DataSyncMode.js +9 -0
- package/dist/cjs/data-sync/DataSyncMode.js.map +1 -0
- package/dist/cjs/data-sync/IDataSynchronizer.js +3 -0
- package/dist/cjs/data-sync/IDataSynchronizer.js.map +1 -0
- package/dist/cjs/data-sync/IRequestor.js +3 -0
- package/dist/cjs/data-sync/IRequestor.js.map +1 -0
- package/dist/cjs/data-sync/NullDataSynchronizer.js +26 -0
- package/dist/cjs/data-sync/NullDataSynchronizer.js.map +1 -0
- package/dist/cjs/data-sync/PollingDataSynchronizer.js +115 -0
- package/dist/cjs/data-sync/PollingDataSynchronizer.js.map +1 -0
- package/dist/cjs/data-sync/Requestor.js +56 -0
- package/dist/cjs/data-sync/Requestor.js.map +1 -0
- package/dist/cjs/data-sync/WebSocketDataSynchronizer.js +77 -0
- package/dist/cjs/data-sync/WebSocketDataSynchronizer.js.map +1 -0
- package/dist/cjs/data-sync/index.js +26 -0
- package/dist/cjs/data-sync/index.js.map +1 -0
- package/dist/cjs/data-sync/types.js +9 -0
- package/dist/cjs/data-sync/types.js.map +1 -0
- package/dist/cjs/data-sync/utils.js +33 -0
- package/dist/cjs/data-sync/utils.js.map +1 -0
- package/dist/cjs/errors.js +51 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/evaluation/EvalResult.js +33 -0
- package/dist/cjs/evaluation/EvalResult.js.map +1 -0
- package/dist/cjs/evaluation/Evaluator.js +28 -0
- package/dist/cjs/evaluation/Evaluator.js.map +1 -0
- package/dist/cjs/evaluation/IEvalDetail.js +3 -0
- package/dist/cjs/evaluation/IEvalDetail.js.map +1 -0
- package/dist/cjs/evaluation/ReasonKinds.js +15 -0
- package/dist/cjs/evaluation/ReasonKinds.js.map +1 -0
- package/dist/cjs/evaluation/data/IFlag.js +12 -0
- package/dist/cjs/evaluation/data/IFlag.js.map +1 -0
- package/dist/cjs/evaluation/data/index.js +18 -0
- package/dist/cjs/evaluation/data/index.js.map +1 -0
- package/dist/cjs/evaluation/index.js +22 -0
- package/dist/cjs/evaluation/index.js.map +1 -0
- package/dist/cjs/events/DefaultEventProcessor.js +79 -0
- package/dist/cjs/events/DefaultEventProcessor.js.map +1 -0
- package/dist/cjs/events/DefaultEventQueue.js +42 -0
- package/dist/cjs/events/DefaultEventQueue.js.map +1 -0
- package/dist/cjs/events/DefaultEventSender.js +67 -0
- package/dist/cjs/events/DefaultEventSender.js.map +1 -0
- package/dist/cjs/events/DefaultEventSerializer.js +14 -0
- package/dist/cjs/events/DefaultEventSerializer.js.map +1 -0
- package/dist/cjs/events/EventDispatcher.js +127 -0
- package/dist/cjs/events/EventDispatcher.js.map +1 -0
- package/dist/cjs/events/EventSerializer.js +3 -0
- package/dist/cjs/events/EventSerializer.js.map +1 -0
- package/dist/cjs/events/IEventProcessor.js +3 -0
- package/dist/cjs/events/IEventProcessor.js.map +1 -0
- package/dist/cjs/events/IEventQueue.js +3 -0
- package/dist/cjs/events/IEventQueue.js.map +1 -0
- package/dist/cjs/events/IEventSender.js +10 -0
- package/dist/cjs/events/IEventSender.js.map +1 -0
- package/dist/cjs/events/NullEventProcessor.js +16 -0
- package/dist/cjs/events/NullEventProcessor.js.map +1 -0
- package/dist/cjs/events/event.js +115 -0
- package/dist/cjs/events/event.js.map +1 -0
- package/dist/cjs/events/index.js +28 -0
- package/dist/cjs/events/index.js.map +1 -0
- package/dist/cjs/index.js +37 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/integrations/TestLogger.js +25 -0
- package/dist/cjs/integrations/TestLogger.js.map +1 -0
- package/dist/cjs/integrations/index.js +21 -0
- package/dist/cjs/integrations/index.js.map +1 -0
- package/dist/cjs/integrations/test_data/FlagBuilder.js +67 -0
- package/dist/cjs/integrations/test_data/FlagBuilder.js.map +1 -0
- package/dist/cjs/integrations/test_data/TestData.js +38 -0
- package/dist/cjs/integrations/test_data/TestData.js.map +1 -0
- package/dist/cjs/integrations/test_data/TestDataSynchronizer.js +52 -0
- package/dist/cjs/integrations/test_data/TestDataSynchronizer.js.map +1 -0
- package/dist/cjs/integrations/test_data/index.js +13 -0
- package/dist/cjs/integrations/test_data/index.js.map +1 -0
- package/dist/cjs/logging/BasicLogger.js +101 -0
- package/dist/cjs/logging/BasicLogger.js.map +1 -0
- package/dist/cjs/logging/IBasicLoggerOptions.js +3 -0
- package/dist/cjs/logging/IBasicLoggerOptions.js.map +1 -0
- package/dist/cjs/logging/ILogger.js +3 -0
- package/dist/cjs/logging/ILogger.js.map +1 -0
- package/dist/cjs/logging/LogLevel.js +3 -0
- package/dist/cjs/logging/LogLevel.js.map +1 -0
- package/dist/cjs/logging/SafeLogger.js +64 -0
- package/dist/cjs/logging/SafeLogger.js.map +1 -0
- package/dist/cjs/logging/format.js +156 -0
- package/dist/cjs/logging/format.js.map +1 -0
- package/dist/cjs/logging/index.js +23 -0
- package/dist/cjs/logging/index.js.map +1 -0
- package/dist/cjs/options/ClientContext.js +21 -0
- package/dist/cjs/options/ClientContext.js.map +1 -0
- package/dist/cjs/options/IClientContext.js +3 -0
- package/dist/cjs/options/IClientContext.js.map +1 -0
- package/dist/cjs/options/IOptions.js +3 -0
- package/dist/cjs/options/IOptions.js.map +1 -0
- package/dist/cjs/options/IUser.js +3 -0
- package/dist/cjs/options/IUser.js.map +1 -0
- package/dist/cjs/options/IValidatedOptions.js +3 -0
- package/dist/cjs/options/IValidatedOptions.js.map +1 -0
- package/dist/cjs/options/OptionMessages.js +33 -0
- package/dist/cjs/options/OptionMessages.js.map +1 -0
- package/dist/cjs/options/UserBuilder.js +35 -0
- package/dist/cjs/options/UserBuilder.js.map +1 -0
- package/dist/cjs/options/Validators.js +249 -0
- package/dist/cjs/options/Validators.js.map +1 -0
- package/dist/cjs/options/index.js +25 -0
- package/dist/cjs/options/index.js.map +1 -0
- package/dist/cjs/platform/IInfo.js +3 -0
- package/dist/cjs/platform/IInfo.js.map +1 -0
- package/dist/cjs/platform/IPlatform.js +3 -0
- package/dist/cjs/platform/IPlatform.js.map +1 -0
- package/dist/cjs/platform/IStore.js +3 -0
- package/dist/cjs/platform/IStore.js.map +1 -0
- package/dist/cjs/platform/IWebSocket.js +3 -0
- package/dist/cjs/platform/IWebSocket.js.map +1 -0
- package/dist/cjs/platform/browser/BrowserInfo.js +24 -0
- package/dist/cjs/platform/browser/BrowserInfo.js.map +1 -0
- package/dist/cjs/platform/browser/BrowserPlatform.js +18 -0
- package/dist/cjs/platform/browser/BrowserPlatform.js.map +1 -0
- package/dist/cjs/platform/browser/BrowserRequests.js +10 -0
- package/dist/cjs/platform/browser/BrowserRequests.js.map +1 -0
- package/dist/cjs/platform/browser/BrowserWebSocket.js +136 -0
- package/dist/cjs/platform/browser/BrowserWebSocket.js.map +1 -0
- package/dist/cjs/platform/browser/FbClient.js +62 -0
- package/dist/cjs/platform/browser/FbClient.js.map +1 -0
- package/dist/cjs/platform/browser/LocalStorageStore.js +67 -0
- package/dist/cjs/platform/browser/LocalStorageStore.js.map +1 -0
- package/dist/cjs/platform/index.js +29 -0
- package/dist/cjs/platform/index.js.map +1 -0
- package/dist/cjs/platform/requests.js +7 -0
- package/dist/cjs/platform/requests.js.map +1 -0
- package/dist/cjs/store/BaseStore.js +128 -0
- package/dist/cjs/store/BaseStore.js.map +1 -0
- package/dist/cjs/store/DataKinds.js +9 -0
- package/dist/cjs/store/DataKinds.js.map +1 -0
- package/dist/cjs/store/IDataSourceUpdates.js +3 -0
- package/dist/cjs/store/IDataSourceUpdates.js.map +1 -0
- package/dist/cjs/store/InMemoryStore.js +49 -0
- package/dist/cjs/store/InMemoryStore.js.map +1 -0
- package/dist/cjs/store/index.js +23 -0
- package/dist/cjs/store/index.js.map +1 -0
- package/dist/cjs/store/serialization.js +37 -0
- package/dist/cjs/store/serialization.js.map +1 -0
- package/dist/cjs/store/store.js +11 -0
- package/dist/cjs/store/store.js.map +1 -0
- package/dist/cjs/utils/Emits.js +64 -0
- package/dist/cjs/utils/Emits.js.map +1 -0
- package/dist/cjs/utils/EventEmitter.js +108 -0
- package/dist/cjs/utils/EventEmitter.js.map +1 -0
- package/dist/cjs/utils/IEventEmitter.js +3 -0
- package/dist/cjs/utils/IEventEmitter.js.map +1 -0
- package/dist/cjs/utils/Regex.js +22 -0
- package/dist/cjs/utils/Regex.js.map +1 -0
- package/dist/cjs/utils/ValueConverters.js +46 -0
- package/dist/cjs/utils/ValueConverters.js.map +1 -0
- package/dist/cjs/utils/VoidFunction.js +3 -0
- package/dist/cjs/utils/VoidFunction.js.map +1 -0
- package/dist/cjs/utils/canonicalizeUri.js +9 -0
- package/dist/cjs/utils/canonicalizeUri.js.map +1 -0
- package/dist/cjs/utils/debounce.js +34 -0
- package/dist/cjs/utils/debounce.js.map +1 -0
- package/dist/cjs/utils/deepCopy.js +8 -0
- package/dist/cjs/utils/deepCopy.js.map +1 -0
- package/dist/cjs/utils/http.js +27 -0
- package/dist/cjs/utils/http.js.map +1 -0
- package/dist/cjs/utils/index.js +24 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/isNullOrUndefined.js +8 -0
- package/dist/cjs/utils/isNullOrUndefined.js.map +1 -0
- package/dist/cjs/utils/serializeUser.js +48 -0
- package/dist/cjs/utils/serializeUser.js.map +1 -0
- package/dist/cjs/utils/sleep.js +18 -0
- package/dist/cjs/utils/sleep.js.map +1 -0
- package/dist/cjs/version.js +6 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/esm/Configuration.js +56 -63
- package/dist/esm/Configuration.js.map +1 -1
- package/dist/esm/Context.js +1 -4
- package/dist/esm/Context.js.map +1 -1
- package/dist/esm/FbClientBuilder.js +3 -10
- package/dist/esm/FbClientBuilder.js.map +1 -1
- package/dist/esm/FbClientCore.js +67 -74
- package/dist/esm/FbClientCore.js.map +1 -1
- package/dist/esm/IContextProperty.js +1 -2
- package/dist/esm/IDataKind.js +1 -2
- package/dist/esm/IFbClient.js +1 -2
- package/dist/esm/IFbClientCore.js +1 -2
- package/dist/esm/IVersionedData.js +1 -2
- package/dist/esm/bootstrap/IBootstrapProvider.js +1 -2
- package/dist/esm/bootstrap/JsonBootstrapProvider.js +7 -11
- package/dist/esm/bootstrap/JsonBootstrapProvider.js.map +1 -1
- package/dist/esm/bootstrap/NullBootstrapProvider.js +1 -5
- package/dist/esm/bootstrap/NullBootstrapProvider.js.map +1 -1
- package/dist/esm/bootstrap/index.js +3 -19
- package/dist/esm/bootstrap/index.js.map +1 -1
- package/dist/esm/constants.js +2 -5
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/data-sources/DataSourceUpdates.js +6 -12
- package/dist/esm/data-sources/DataSourceUpdates.js.map +1 -1
- package/dist/esm/data-sources/createStreamListeners.js +4 -8
- package/dist/esm/data-sources/createStreamListeners.js.map +1 -1
- package/dist/esm/data-sources/index.js +2 -18
- package/dist/esm/data-sources/index.js.map +1 -1
- package/dist/esm/data-sync/DataSyncMode.js +2 -5
- package/dist/esm/data-sync/DataSyncMode.js.map +1 -1
- package/dist/esm/data-sync/IDataSynchronizer.js +1 -2
- package/dist/esm/data-sync/IRequestor.js +1 -2
- package/dist/esm/data-sync/NullDataSynchronizer.js +1 -5
- package/dist/esm/data-sync/NullDataSynchronizer.js.map +1 -1
- package/dist/esm/data-sync/PollingDataSynchronizer.js +12 -15
- package/dist/esm/data-sync/PollingDataSynchronizer.js.map +1 -1
- package/dist/esm/data-sync/Requestor.js +5 -8
- package/dist/esm/data-sync/Requestor.js.map +1 -1
- package/dist/esm/data-sync/WebSocketDataSynchronizer.js +3 -5
- package/dist/esm/data-sync/WebSocketDataSynchronizer.js.map +1 -1
- package/dist/esm/data-sync/index.js +9 -25
- package/dist/esm/data-sync/index.js.map +1 -1
- package/dist/esm/data-sync/types.js +2 -5
- package/dist/esm/data-sync/types.js.map +1 -1
- package/dist/esm/data-sync/utils.js +1 -5
- package/dist/esm/data-sync/utils.js.map +1 -1
- package/dist/esm/errors.js +6 -15
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/evaluation/EvalResult.js +7 -10
- package/dist/esm/evaluation/EvalResult.js.map +1 -1
- package/dist/esm/evaluation/Evaluator.js +6 -12
- package/dist/esm/evaluation/Evaluator.js.map +1 -1
- package/dist/esm/evaluation/IEvalDetail.js +1 -2
- package/dist/esm/evaluation/ReasonKinds.js +2 -5
- package/dist/esm/evaluation/ReasonKinds.js.map +1 -1
- package/dist/esm/evaluation/data/IFlag.js +2 -5
- package/dist/esm/evaluation/data/IFlag.js.map +1 -1
- package/dist/esm/evaluation/data/index.js +1 -17
- package/dist/esm/evaluation/data/index.js.map +1 -1
- package/dist/esm/evaluation/index.js +5 -21
- package/dist/esm/evaluation/index.js.map +1 -1
- package/dist/esm/events/DefaultEventProcessor.js +11 -15
- package/dist/esm/events/DefaultEventProcessor.js.map +1 -1
- package/dist/esm/events/DefaultEventQueue.js +1 -5
- package/dist/esm/events/DefaultEventQueue.js.map +1 -1
- package/dist/esm/events/DefaultEventSender.js +12 -19
- package/dist/esm/events/DefaultEventSender.js.map +1 -1
- package/dist/esm/events/DefaultEventSerializer.js +3 -7
- package/dist/esm/events/DefaultEventSerializer.js.map +1 -1
- package/dist/esm/events/EventDispatcher.js +15 -22
- package/dist/esm/events/EventDispatcher.js.map +1 -1
- package/dist/esm/events/EventSerializer.js +1 -2
- package/dist/esm/events/IEventProcessor.js +1 -2
- package/dist/esm/events/IEventQueue.js +1 -2
- package/dist/esm/events/IEventSender.js +2 -5
- package/dist/esm/events/IEventSender.js.map +1 -1
- package/dist/esm/events/NullEventProcessor.js +1 -5
- package/dist/esm/events/NullEventProcessor.js.map +1 -1
- package/dist/esm/events/event.js +6 -15
- package/dist/esm/events/event.js.map +1 -1
- package/dist/esm/events/index.js +11 -27
- package/dist/esm/events/index.js.map +1 -1
- package/dist/esm/index.js +20 -36
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/integrations/TestLogger.js +1 -5
- package/dist/esm/integrations/TestLogger.js.map +1 -1
- package/dist/esm/integrations/index.js +2 -20
- package/dist/esm/integrations/index.js.map +1 -1
- package/dist/esm/integrations/test_data/FlagBuilder.js +3 -7
- package/dist/esm/integrations/test_data/FlagBuilder.js.map +1 -1
- package/dist/esm/integrations/test_data/TestData.js +8 -14
- package/dist/esm/integrations/test_data/TestData.js.map +1 -1
- package/dist/esm/integrations/test_data/TestDataSynchronizer.js +1 -4
- package/dist/esm/integrations/test_data/TestDataSynchronizer.js.map +1 -1
- package/dist/esm/integrations/test_data/index.js +4 -12
- package/dist/esm/integrations/test_data/index.js.map +1 -1
- package/dist/esm/logging/BasicLogger.js +4 -11
- package/dist/esm/logging/BasicLogger.js.map +1 -1
- package/dist/esm/logging/IBasicLoggerOptions.js +1 -2
- package/dist/esm/logging/ILogger.js +1 -2
- package/dist/esm/logging/LogLevel.js +1 -2
- package/dist/esm/logging/SafeLogger.js +6 -10
- package/dist/esm/logging/SafeLogger.js.map +1 -1
- package/dist/esm/logging/format.js +3 -6
- package/dist/esm/logging/format.js.map +1 -1
- package/dist/esm/logging/index.js +6 -22
- package/dist/esm/logging/index.js.map +1 -1
- package/dist/esm/options/ClientContext.js +1 -4
- package/dist/esm/options/ClientContext.js.map +1 -1
- package/dist/esm/options/IClientContext.js +1 -2
- package/dist/esm/options/IOptions.js +1 -2
- package/dist/esm/options/IUser.js +1 -2
- package/dist/esm/options/IValidatedOptions.js +1 -2
- package/dist/esm/options/OptionMessages.js +1 -4
- package/dist/esm/options/OptionMessages.js.map +1 -1
- package/dist/esm/options/UserBuilder.js +1 -5
- package/dist/esm/options/UserBuilder.js.map +1 -1
- package/dist/esm/options/Validators.js +21 -39
- package/dist/esm/options/Validators.js.map +1 -1
- package/dist/esm/options/index.js +8 -24
- package/dist/esm/options/index.js.map +1 -1
- package/dist/esm/platform/IInfo.js +1 -2
- package/dist/esm/platform/IPlatform.js +1 -2
- package/dist/esm/platform/IStore.js +1 -2
- package/dist/esm/platform/IWebSocket.js +1 -2
- package/dist/esm/platform/browser/BrowserInfo.js +5 -8
- package/dist/esm/platform/browser/BrowserInfo.js.map +1 -1
- package/dist/esm/platform/browser/BrowserPlatform.js +7 -14
- package/dist/esm/platform/browser/BrowserPlatform.js.map +1 -1
- package/dist/esm/platform/browser/BrowserRequests.js +1 -5
- package/dist/esm/platform/browser/BrowserRequests.js.map +1 -1
- package/dist/esm/platform/browser/BrowserWebSocket.js +9 -11
- package/dist/esm/platform/browser/BrowserWebSocket.js.map +1 -1
- package/dist/esm/platform/browser/FbClient.js +15 -20
- package/dist/esm/platform/browser/FbClient.js.map +1 -1
- package/dist/esm/platform/browser/LocalStorageStore.js +9 -12
- package/dist/esm/platform/browser/LocalStorageStore.js.map +1 -1
- package/dist/esm/platform/index.js +8 -28
- package/dist/esm/platform/index.js.map +1 -1
- package/dist/esm/platform/requests.js +1 -2
- package/dist/esm/platform/requests.js.map +1 -1
- package/dist/esm/store/BaseStore.d.ts.map +1 -1
- package/dist/esm/store/BaseStore.js +2 -5
- package/dist/esm/store/BaseStore.js.map +1 -1
- package/dist/esm/store/DataKinds.js +1 -3
- package/dist/esm/store/DataKinds.js.map +1 -1
- package/dist/esm/store/IDataSourceUpdates.js +1 -2
- package/dist/esm/store/InMemoryStore.js +10 -13
- package/dist/esm/store/InMemoryStore.js.map +1 -1
- package/dist/esm/store/index.js +6 -22
- package/dist/esm/store/index.js.map +1 -1
- package/dist/esm/store/serialization.js +6 -14
- package/dist/esm/store/serialization.js.map +1 -1
- package/dist/esm/store/store.js +4 -7
- package/dist/esm/store/store.js.map +1 -1
- package/dist/esm/utils/Emits.js +1 -5
- package/dist/esm/utils/Emits.js.map +1 -1
- package/dist/esm/utils/EventEmitter.js +1 -5
- package/dist/esm/utils/EventEmitter.js.map +1 -1
- package/dist/esm/utils/IEventEmitter.js +1 -2
- package/dist/esm/utils/Regex.js +3 -7
- package/dist/esm/utils/Regex.js.map +1 -1
- package/dist/esm/utils/ValueConverters.js +1 -5
- package/dist/esm/utils/ValueConverters.js.map +1 -1
- package/dist/esm/utils/VoidFunction.js +1 -2
- package/dist/esm/utils/canonicalizeUri.js +1 -5
- package/dist/esm/utils/canonicalizeUri.js.map +1 -1
- package/dist/esm/utils/debounce.js +1 -5
- package/dist/esm/utils/debounce.js.map +1 -1
- package/dist/esm/utils/deepCopy.js +1 -5
- package/dist/esm/utils/deepCopy.js.map +1 -1
- package/dist/esm/utils/http.js +2 -7
- package/dist/esm/utils/http.js.map +1 -1
- package/dist/esm/utils/index.js +7 -23
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/isNullOrUndefined.js +1 -5
- package/dist/esm/utils/isNullOrUndefined.js.map +1 -1
- package/dist/esm/utils/serializeUser.js +2 -7
- package/dist/esm/utils/serializeUser.js.map +1 -1
- package/dist/esm/utils/sleep.js +1 -3
- package/dist/esm/utils/sleep.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +2 -5
- package/dist/esm/version.js.map +1 -1
- package/dist/umd/featbit-js-client-sdk-4.2.13.js +2 -0
- package/dist/umd/featbit-js-client-sdk-4.2.13.js.map +1 -0
- package/dist/umd/featbit-js-client-sdk.js +1 -1
- package/dist/umd/featbit-js-client-sdk.js.map +1 -1
- package/package.json +11 -3
- package/src/store/BaseStore.ts +1 -0
- package/src/version.ts +1 -1
- package/dist/umd/featbit-js-client-sdk-4.2.11.js +0 -2
- package/dist/umd/featbit-js-client-sdk-4.2.11.js.map +0 -1
package/dist/esm/utils/Regex.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.Regex = void 0;
|
|
4
|
-
const isNullOrUndefined_1 = require("./isNullOrUndefined");
|
|
5
|
-
class Regex {
|
|
1
|
+
import { isNullOrUndefined } from "./isNullOrUndefined";
|
|
2
|
+
export class Regex {
|
|
6
3
|
static fromString(patternString) {
|
|
7
4
|
let flags = '';
|
|
8
5
|
const match = patternString.match(Regex.patternWithFlags);
|
|
@@ -13,10 +10,9 @@ class Regex {
|
|
|
13
10
|
return new RegExp(patternString, flags);
|
|
14
11
|
}
|
|
15
12
|
static isNullOrWhiteSpace(str) {
|
|
16
|
-
return
|
|
13
|
+
return isNullOrUndefined(str) || !str.replace(Regex.whiteSpaceRegex, '').length;
|
|
17
14
|
}
|
|
18
15
|
}
|
|
19
|
-
exports.Regex = Regex;
|
|
20
16
|
Regex.patternWithFlags = /\/(.*)\/([a-z]*)/i;
|
|
21
17
|
Regex.whiteSpaceRegex = /\s/g;
|
|
22
18
|
//# sourceMappingURL=Regex.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Regex.js","sourceRoot":"","sources":["../../../src/utils/Regex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Regex.js","sourceRoot":"","sources":["../../../src/utils/Regex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,OAAO,KAAK;IAIhB,MAAM,CAAC,UAAU,CAAC,aAAqB;QACrC,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAE1D,IAAI,KAAK,EAAE;YACT,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;YACtD,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;SACtC;QAED,OAAO,IAAI,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAW;QACnC,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;IAClF,CAAC;;AAjBc,sBAAgB,GAAG,mBAAmB,CAAC;AACvC,qBAAe,GAAG,KAAK,CAAC"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ValueConverters = void 0;
|
|
4
|
-
class ValueConverters {
|
|
1
|
+
export class ValueConverters {
|
|
5
2
|
static bool(value) {
|
|
6
3
|
if ((value === null || value === void 0 ? void 0 : value.toUpperCase()) === 'TRUE') {
|
|
7
4
|
return ValueConverters.success(true);
|
|
@@ -42,5 +39,4 @@ class ValueConverters {
|
|
|
42
39
|
};
|
|
43
40
|
}
|
|
44
41
|
}
|
|
45
|
-
exports.ValueConverters = ValueConverters;
|
|
46
42
|
//# sourceMappingURL=ValueConverters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValueConverters.js","sourceRoot":"","sources":["../../../src/utils/ValueConverters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ValueConverters.js","sourceRoot":"","sources":["../../../src/utils/ValueConverters.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,IAAI,CAAC,KAAa;QACvB,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,EAAE,MAAK,MAAM,EAAE;YACnC,OAAO,eAAe,CAAC,OAAO,CAAU,IAAI,CAAC,CAAC;SAC/C;QAED,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,EAAE,MAAK,OAAO,EAAE;YACpC,OAAO,eAAe,CAAC,OAAO,CAAU,KAAK,CAAC,CAAC;SAChD;QAED,OAAO,eAAe,CAAC,KAAK,EAAW,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAa;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACrB,OAAO,eAAe,CAAC,KAAK,EAAU,CAAC;SACxC;QAED,OAAO,eAAe,CAAC,OAAO,CAAS,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAa;QACzB,OAAO,eAAe,CAAC,OAAO,CAAS,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,KAAa;QACvB,IAAI;YACF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO,eAAe,CAAC,OAAO,CAAU,GAAG,CAAC,CAAC;SAC9C;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,eAAe,CAAC,KAAK,EAAW,CAAC;SACzC;IACH,CAAC;IAEO,MAAM,CAAC,OAAO,CAAS,KAAa;QAC1C,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,KAAK;SACb,CAAA;IACH,CAAC;IAEO,MAAM,CAAC,KAAK;QAClB,OAAO;YACL,WAAW,EAAE,KAAK;SACnB,CAAA;IACH,CAAC;CACF"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.canonicalizeUri = void 0;
|
|
4
1
|
// This function is designed to remove any trailing forward slashes at the end of the provided URI string
|
|
5
|
-
function canonicalizeUri(uri) {
|
|
2
|
+
export function canonicalizeUri(uri) {
|
|
6
3
|
return uri.replace(/\/+$/, '');
|
|
7
4
|
}
|
|
8
|
-
exports.canonicalizeUri = canonicalizeUri;
|
|
9
5
|
//# sourceMappingURL=canonicalizeUri.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonicalizeUri.js","sourceRoot":"","sources":["../../../src/utils/canonicalizeUri.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canonicalizeUri.js","sourceRoot":"","sources":["../../../src/utils/canonicalizeUri.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.debounce = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* Wait before calling the same function. Useful for expensive calls.
|
|
6
3
|
* Adapted from https://amitd.co/code/typescript/debounce.
|
|
@@ -21,7 +18,7 @@ exports.debounce = void 0;
|
|
|
21
18
|
* @param fn The function to be debounced.
|
|
22
19
|
* @param delayMs Defaults to 5 seconds.
|
|
23
20
|
*/
|
|
24
|
-
const debounce = (fn, delayMs = 5000) => {
|
|
21
|
+
export const debounce = (fn, delayMs = 5000) => {
|
|
25
22
|
let timer;
|
|
26
23
|
return (...args) => {
|
|
27
24
|
clearTimeout(timer);
|
|
@@ -30,5 +27,4 @@ const debounce = (fn, delayMs = 5000) => {
|
|
|
30
27
|
}, delayMs);
|
|
31
28
|
};
|
|
32
29
|
};
|
|
33
|
-
exports.debounce = debounce;
|
|
34
30
|
//# sourceMappingURL=debounce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../../src/utils/debounce.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../../src/utils/debounce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,EAAK,EACL,UAAkB,IAAI,EACc,EAAE;IACtC,IAAI,KAAoC,CAAC;IAEzC,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;QAChC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.deepCopy = void 0;
|
|
4
|
-
function deepCopy(obj) {
|
|
1
|
+
export function deepCopy(obj) {
|
|
5
2
|
return JSON.parse(JSON.stringify(obj));
|
|
6
3
|
}
|
|
7
|
-
exports.deepCopy = deepCopy;
|
|
8
4
|
//# sourceMappingURL=deepCopy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepCopy.js","sourceRoot":"","sources":["../../../src/utils/deepCopy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deepCopy.js","sourceRoot":"","sources":["../../../src/utils/deepCopy.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAI,GAAM;IAChC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/esm/utils/http.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.httpErrorMessage = exports.defaultHeaders = void 0;
|
|
4
|
-
function defaultHeaders(sdkKey, info) {
|
|
1
|
+
export function defaultHeaders(sdkKey, info) {
|
|
5
2
|
const { userAgent, version } = info.sdkData();
|
|
6
3
|
const headers = {
|
|
7
4
|
'Content-Type': 'application/json',
|
|
@@ -11,8 +8,7 @@ function defaultHeaders(sdkKey, info) {
|
|
|
11
8
|
};
|
|
12
9
|
return headers;
|
|
13
10
|
}
|
|
14
|
-
|
|
15
|
-
function httpErrorMessage(err, context, retryMessage) {
|
|
11
|
+
export function httpErrorMessage(err, context, retryMessage) {
|
|
16
12
|
let desc;
|
|
17
13
|
if (err.status) {
|
|
18
14
|
desc = `error ${err.status}${err.status === 401 ? ' (invalid SDK key)' : ''}`;
|
|
@@ -23,5 +19,4 @@ function httpErrorMessage(err, context, retryMessage) {
|
|
|
23
19
|
const action = retryMessage !== null && retryMessage !== void 0 ? retryMessage : 'giving up permanently';
|
|
24
20
|
return `Received ${desc} for ${context} - ${action}`;
|
|
25
21
|
}
|
|
26
|
-
exports.httpErrorMessage = httpErrorMessage;
|
|
27
22
|
//# sourceMappingURL=http.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/utils/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/utils/http.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,IAAW;IAEX,MAAM,EAAC,SAAS,EAAE,OAAO,EAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAE5C,MAAM,OAAO,GAAY;QACvB,cAAc,EAAE,kBAAkB;QAClC,cAAc,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;QACzD,YAAY,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;QACvD,eAAe,EAAE,MAAM;KACxB,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,GAGC,EACD,OAAe,EACf,YAAqB;IAErB,IAAI,IAAI,CAAC;IACT,IAAI,GAAG,CAAC,MAAM,EAAE;QACd,IAAI,GAAG,SAAU,GAAG,CAAC,MAAO,GAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAG,EAAE,CAAC;KACnF;SAAM;QACL,IAAI,GAAG,cAAe,GAAG,CAAC,OAAO,IAAI,GAAI,GAAG,CAAC;KAC9C;IACD,MAAM,MAAM,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,uBAAuB,CAAC;IACvD,OAAO,YAAa,IAAK,QAAS,OAAQ,MAAO,MAAO,EAAE,CAAC;AAC7D,CAAC"}
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -1,24 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./isNullOrUndefined"), exports);
|
|
18
|
-
__exportStar(require("./sleep"), exports);
|
|
19
|
-
__exportStar(require("./ValueConverters"), exports);
|
|
20
|
-
__exportStar(require("./VoidFunction"), exports);
|
|
21
|
-
__exportStar(require("./serializeUser"), exports);
|
|
22
|
-
__exportStar(require("./debounce"), exports);
|
|
23
|
-
__exportStar(require("./deepCopy"), exports);
|
|
1
|
+
export * from './isNullOrUndefined';
|
|
2
|
+
export * from './sleep';
|
|
3
|
+
export * from './ValueConverters';
|
|
4
|
+
export * from './VoidFunction';
|
|
5
|
+
export * from './serializeUser';
|
|
6
|
+
export * from './debounce';
|
|
7
|
+
export * from './deepCopy';
|
|
24
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isNullOrUndefined = void 0;
|
|
4
|
-
function isNullOrUndefined(val) {
|
|
1
|
+
export function isNullOrUndefined(val) {
|
|
5
2
|
return val === null || val === undefined;
|
|
6
3
|
}
|
|
7
|
-
exports.isNullOrUndefined = isNullOrUndefined;
|
|
8
4
|
//# sourceMappingURL=isNullOrUndefined.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isNullOrUndefined.js","sourceRoot":"","sources":["../../../src/utils/isNullOrUndefined.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"isNullOrUndefined.js","sourceRoot":"","sources":["../../../src/utils/isNullOrUndefined.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,GAAQ;IACxC,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,CAAC;AAC3C,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,9 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
exports.hashSerializeUser = exports.serializeUser = void 0;
|
|
13
|
-
function serializeUser(user) {
|
|
10
|
+
export function serializeUser(user) {
|
|
14
11
|
var _a, _b;
|
|
15
12
|
if (!user) {
|
|
16
13
|
return '';
|
|
@@ -29,8 +26,7 @@ function serializeUser(user) {
|
|
|
29
26
|
}).map(p => `${p.name}:${p.value}`).join(',');
|
|
30
27
|
return `${builtInProperties},${customizedProperties}`;
|
|
31
28
|
}
|
|
32
|
-
|
|
33
|
-
function hashSerializeUser(user) {
|
|
29
|
+
export function hashSerializeUser(user) {
|
|
34
30
|
return __awaiter(this, void 0, void 0, function* () {
|
|
35
31
|
const serialized = serializeUser(user);
|
|
36
32
|
if (!serialized) {
|
|
@@ -44,5 +40,4 @@ function hashSerializeUser(user) {
|
|
|
44
40
|
.join('');
|
|
45
41
|
});
|
|
46
42
|
}
|
|
47
|
-
exports.hashSerializeUser = hashSerializeUser;
|
|
48
43
|
//# sourceMappingURL=serializeUser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializeUser.js","sourceRoot":"","sources":["../../../src/utils/serializeUser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serializeUser.js","sourceRoot":"","sources":["../../../src/utils/serializeUser.ts"],"names":[],"mappings":";;;;;;;;;AAEA,MAAM,UAAU,aAAa,CAAC,IAAuB;;IACnD,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,CAAC;KACX;IAED,MAAM,iBAAiB,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,EAAE,CAAC;IAE7D,MAAM,oBAAoB,GAAG,MAAA,IAAI,CAAC,oBAAoB,0CAClD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,KAAK,GAAG,KAAK,EAAE;YACjB,OAAO,CAAC,CAAC,CAAC;SACX;QAED,IAAI,KAAK,GAAG,KAAK,EAAE;YACjB,OAAO,CAAC,CAAC;SACV;QAED,OAAO,CAAC,CAAC;IACX,CAAC,EACA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,EAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,GAAG,iBAAiB,IAAI,oBAAoB,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAgB,iBAAiB,CACrC,IAAuB;;QAEvB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,EAAE,CAAC;SACX;QAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE/D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;aAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACzC,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;CAAA"}
|
package/dist/esm/utils/sleep.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,11 +7,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
10
|
const sleep = (delayMillis = 1000) => __awaiter(void 0, void 0, void 0, function* () {
|
|
13
11
|
return new Promise((resolve) => {
|
|
14
12
|
setTimeout(resolve, delayMillis);
|
|
15
13
|
});
|
|
16
14
|
});
|
|
17
|
-
|
|
15
|
+
export default sleep;
|
|
18
16
|
//# sourceMappingURL=sleep.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../../src/utils/sleep.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../../src/utils/sleep.ts"],"names":[],"mappings":";;;;;;;;;AAAA,MAAM,KAAK,GAAG,CAAO,cAAsB,IAAI,EAAE,EAAE;IACjD,OAAA,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACtB,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnC,CAAC,CAAC,CAAA;EAAA,CAAC;AAEL,eAAe,KAAK,CAAC"}
|
package/dist/esm/version.d.ts
CHANGED
package/dist/esm/version.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.name = exports.version = void 0;
|
|
4
|
-
exports.version = "4.2.11";
|
|
5
|
-
exports.name = "@featbit/js-client-sdk";
|
|
1
|
+
export const version = "4.2.13";
|
|
2
|
+
export const name = "@featbit/js-client-sdk";
|
|
6
3
|
//# sourceMappingURL=version.js.map
|
package/dist/esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAAC,MAAM,CAAC,MAAM,IAAI,GAAG,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var n in i)("object"==typeof exports?exports:t)[n]=i[n]}}(this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{AsyncEvent:()=>b,BaseStore:()=>kt,BasicLogger:()=>ut,BootstrapValidator:()=>X,BrowserRequests:()=>vt,BrowserWebSocket:()=>St,ClientError:()=>N,CurrentUserStorageKey:()=>a,DataSyncModeEnum:()=>jt,DateValidator:()=>et,DefaultEventProcessor:()=>A,DefaultEventQueue:()=>I,DefaultEventSender:()=>L,DefaultEventSerializer:()=>D,DeliveryStatus:()=>p,EmptyString:()=>Kt,EvalEvent:()=>O,EventDispatcher:()=>R,FactoryOrInstance:()=>W,FbClientBuilder:()=>ne,FbClientCore:()=>Gt,FlushEvent:()=>w,Function:()=>G,JsonBootstrapProvider:()=>c,KindValidator:()=>it,MetricEvent:()=>k,MinInt:()=>At,NullBootstrapProvider:()=>h,NullDataSynchronizer:()=>Nt,NullEventProcessor:()=>B,NullableBoolean:()=>Y,NumberWithMinimum:()=>H,PayloadEvent:()=>E,PollingError:()=>j,ReasonKinds:()=>f,SafeLogger:()=>ht,ShutdownEvent:()=>S,StoreItemOriginEnum:()=>l,StoreStorageKey:()=>o,StreamResponseEventType:()=>bt,StreamingError:()=>U,StringMatchingRegex:()=>Q,TimeoutError:()=>z,Type:()=>q,TypeArray:()=>J,TypeValidators:()=>nt,UnexpectedResponseError:()=>$,UserBuilder:()=>dt,UserValidator:()=>Z,ValueConverters:()=>Ot,VariationDataType:()=>g,createStreamListeners:()=>v,debounce:()=>Ft,deepCopy:()=>xt,defaultValues:()=>Vt,deserializeAll:()=>s,deserializePatch:()=>r,generateConnectionToken:()=>yt,hashSerializeUser:()=>It,isHttpRecoverable:()=>_,isNullOrUndefined:()=>u,serializeUser:()=>Tt});class i{}i.Flags={namespace:"flags"};const n=i;function s(t){const e={[n.Flags.namespace]:{}};return(null==t?void 0:t.length)&&(e[n.Flags.namespace]=t.reduce(((t,e)=>(t[e.id]=Object.assign(Object.assign({},e),{version:e.timestamp||0,key:e.id,variations:e.variationOptions}),t)),{})),e}function r(t){return[...(null==t?void 0:t.map((t=>({data:Object.assign(Object.assign({},t),{version:t.timestamp,key:t.id,variations:t.variationOptions}),kind:n.Flags}))))||[]]}const o="fb-datastore",a="fb-user";var l;function u(t){return null==t}!function(t){t.Local="Local",t.Remote="Remote"}(l||(l={}));class c{constructor(t){const e=s((t||[]).map((t=>Object.assign(Object.assign({},t),{origin:l.Local,variationOptions:t.variationOptions||[{id:null,variation:t.variation}]}))));this.dataSet={flags:e.flags,version:0}}populate(t,e,i){return new Promise(((n,s)=>{if(u(this.dataSet))return n();e.init(t,this.dataSet,(()=>{n(),null==i||i()}))}))}}class h{constructor(){this.dataSet={flags:{},version:0}}populate(t,e,i){return new Promise(((t,e)=>{t(),null==i||i()}))}}var d=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};const v=(t,e,i)=>{const n=new Map;return n.set("put",((t,e,i=(()=>{}))=>({deserializeData:s,processJson:(n,{flags:s})=>d(void 0,void 0,void 0,(function*(){const r={flags:s,version:0};null==e||e.debug("Initializing all data"),yield t.init(n,r,i)}))}))(t,e,null==i?void 0:i.put)),n.set("patch",((t,e,i=(()=>{}))=>({deserializeData:r,processJson:(n,s)=>d(void 0,void 0,void 0,(function*(){if(0!==(null==s?void 0:s.length)){if((null==s?void 0:s.length)>0)for(const r of s)null==e||e.debug(`Updating ${r.data.key} in ${r.kind.namespace}`),yield t.upsert(n,r.kind,r.data,i)}else null==i||i()}))}))(t,e,null==i?void 0:i.patch)),n};var g,f,p,m=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};class y{constructor(t,e,i){this.store=t,this.hasEventListeners=e,this.onChange=i}init(t,e,i){return m(this,void 0,void 0,(function*(){if(t!==this.store.user.keyId)return void(null==i||i());const s=this.hasEventListeners(),[r,o]=this.store.all(n.Flags),a={flags:r,version:o};yield(t=>m(this,void 0,void 0,(function*(){if(!Object.keys(e.flags).some((t=>e.flags[t].origin===l.Local))&&t){const i=Object.keys(t.flags).filter((i=>t.flags[i]&&!e.flags[i]&&t.flags[i].origin===l.Local)).reduce(((e,i)=>(e[i]=t.flags[i],e)),{});e={version:e.version,flags:Object.assign(Object.assign({},e.flags),i)}}yield this.store.init(e),Promise.resolve().then((()=>{if(s){const i=Object.keys(e).filter((t=>"version"!==t)).flatMap((i=>{const n=(null==t?void 0:t[i])||{},s=e[i],r=Object.assign(Object.assign({},n),s);return Object.keys(r).filter((t=>this.isUpdated(n&&n[t],s&&s[t])))}));i.length>0&&this.onChange(i)}})),null==i||i()})))(a)}))}checkUpdates(t,e,i){if(!this.hasEventListeners())return;const n=Object.keys(e).filter((t=>"version"!==t)).flatMap((i=>{const n=(null==t?void 0:t[i])||{},s=e[i],r=Object.assign(Object.assign({},n),s);return Object.keys(r).filter((t=>this.isUpdated(n&&n[t],s&&s[t])))}));n.length>0&&this.onChange(n),null==i||i()}upsert(t,e,i,n){return m(this,void 0,void 0,(function*(){if(t!==this.store.user.keyId)return void(null==n||n());const{key:s}=i,r=this.hasEventListeners(),o=t=>m(this,void 0,void 0,(function*(){yield this.store.upsert(e,i),Promise.resolve().then((()=>{r&&this.isUpdated(t,i)&&this.onChange([s])})),null==n||n()}));if(r){const t=this.store.get(e,s);yield o(t||void 0)}else yield o()}))}isUpdated(t,e){return!(!t&&!e||t&&e&&!(e.version>=t.version&&e.variation!==t.variation))}}!function(t){t.string="string",t.boolean="boolean",t.number="number",t.json="json",t.empty=""}(g||(g={})),function(t){t.ClientNotReady="ClientNotReady",t.Match="Match",t.WrongType="WrongType",t.FlagNotFound="FlagNotFound",t.Error="Error"}(f||(f={}));class b{get hash(){return this.timestamp.toString()}constructor(){this.timestamp=(new Date).getTime(),this.isCompletedPromise=new Promise((t=>{this.resolveFn=t}))}waitForCompletion(){return this.isCompletedPromise}complete(){var t;null===(t=this.resolveFn)||void 0===t||t.call(this,this)}}class w extends b{}class S extends b{}class E{constructor(){this.timestamp=(new Date).getTime()}get hash(){return this.timestamp.toString()}toPayload(){}}class k extends E{constructor(t,e,i,n){super(),this.user=t,this.eventName=e,this.appType=i,this.metricValue=n}userPayload(){return{keyId:this.user.keyId,name:this.user.name,customizedProperties:this.user.customizedProperties}}toPayload(){return{user:this.userPayload(),metrics:[{route:"index/metric",timestamp:this.timestamp,numericValue:this.metricValue,appType:this.appType,eventName:this.eventName,type:"CustomEvent"}]}}get hash(){const t=this.toPayload(),e={user:t.user,metrics:t.metrics.map((t=>Object.assign(Object.assign({},t),{timestamp:void 0})))};return JSON.stringify(e)}}class O extends E{constructor(t,e,i,n){super(),this.user=t,this.flagKey=e,this.variation=i,this.sendToExperiment=n}userPayload(){return{keyId:this.user.keyId,name:this.user.name,customizedProperties:this.user.customizedProperties}}toPayload(){return{user:this.userPayload(),variations:[{featureFlagKey:this.flagKey,sendToExperiment:this.sendToExperiment,timestamp:this.timestamp,variation:this.variation}]}}get hash(){const t=this.toPayload(),e={user:t.user,variations:t.variations.map((t=>Object.assign(Object.assign({},t),{timestamp:void 0})))};return JSON.stringify(e)}}class P{constructor(t,e,i){this.kind=t,this.value=e,this.reason=i}static flagNotFound(t){return new P(f.FlagNotFound,null,`flag not found: ${t}`)}static matched(t){return new P(f.Match,t,t.matchReason)}toEvalEvent(t){var e,i,n;if(this.kind!==f.Match)return null;const s=null===(e=this.value)||void 0===e?void 0:e.variations.find((t=>{var e;return t.value===(null===(e=this.value)||void 0===e?void 0:e.variation)}));return new O(t,null===(i=this.value)||void 0===i?void 0:i.id,s,null===(n=this.value)||void 0===n?void 0:n.sendToExperiment)}}class T{constructor(t){this.store=t}evaluate(t){const e=this.store.get(n.Flags,t);return e?P.matched(e):P.flagNotFound(t)}}!function(t){t[t.Succeeded=0]="Succeeded",t[t.Failed=1]="Failed",t[t.FailedAndMustShutDown=2]="FailedAndMustShutDown"}(p||(p={}));class I{constructor(t,e){this.capacity=t,this.logger=e,this.closed=!1,this.events=[]}addEvent(t){return!this.closed&&(this.events.length>=this.capacity?(this.logger.warn("Events are being produced faster than they can be processed. We shouldn't see this."),!1):(this.events.push(t),!0))}clear(){this.events=[]}shift(){return this.events.shift()}close(){this.closed=!0}get eventsSnapshot(){return[...this.events]}get length(){return this.events.length}get isEmpty(){return 0===this.length}}function F(t,e){const{userAgent:i,version:n}=e.sdkData();return{"Content-Type":"application/json","X-User-Agent":null!=i?i:`${e.appType}/${n}`,"User-Agent":null!=i?i:`${e.appType}/${n}`,Authorization:t}}function x(t,e,i){let n;return n=t.status?`error ${t.status}${401===t.status?" (invalid SDK key)":""}`:`I/O error (${t.message||t})`,`Received ${n} for ${e} - ${null!=i?i:"giving up permanently"}`}class j extends Error{constructor(t,e){super(t),this.status=e,this.name="FbPollingError"}}class U extends Error{constructor(t,e){super(t),this.code=e,this.name="FbStreamingError"}}class $ extends Error{constructor(t){super(t),this.name="FbUnexpectedResponseError"}}class N extends Error{constructor(t){super(t),this.name="FbClientError"}}class z extends Error{constructor(t){super(t),this.name="FeatBitTimeoutError"}}function _(t){return!(void 0===t||t>=400&&t<500&&400!==t&&408!==t&&429!==t)}const C=(t=1e3)=>{return e=void 0,i=void 0,s=function*(){return new Promise((e=>{setTimeout(e,t)}))},new((n=void 0)||(n=Promise))((function(t,r){function o(t){try{l(s.next(t))}catch(t){r(t)}}function a(t){try{l(s.throw(t))}catch(t){r(t)}}function l(e){var i;e.done?t(e.value):(i=e.value,i instanceof n?i:new n((function(t){t(i)}))).then(o,a)}l((s=s.apply(e,i||[])).next())}));var e,i,n,s};class L{constructor(t){const{sdkKey:e,eventsUri:i,platform:n}=t,{info:s,requests:r}=n;this.defaultHeaders=F(e,s),this.eventsUri=i,this.requests=r}send(t,e){return i=this,n=void 0,r=function*(){const i={status:p.Succeeded},n=Object.assign({},this.defaultHeaders);let s;try{const{status:e}=yield this.requests.fetch(this.eventsUri,{headers:n,body:t,method:"POST"});if(e>=200&&e<=299)return i;if(s=new $(x({status:e,message:"some events were dropped"},"event posting")),!_(e))return i.status=p.FailedAndMustShutDown,i.error=s,i}catch(t){s=t}return s&&!e?(i.status=p.Failed,i.error=s,i):(yield C(),this.send(t,!1))},new((s=void 0)||(s=Promise))((function(t,e){function o(t){try{l(r.next(t))}catch(t){e(t)}}function a(t){try{l(r.throw(t))}catch(t){e(t)}}function l(e){var i;e.done?t(e.value):(i=e.value,i instanceof s?i:new s((function(t){t(i)}))).then(o,a)}l((r=r.apply(i,n||[])).next())}));var i,n,s,r}}class D{serialize(t){const e=t.map((t=>t instanceof O||t instanceof k?t.toPayload():null)).filter((t=>null!==t));return JSON.stringify(e)}}var M=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};class R{constructor(t,e){this.maxEventPerRequest=50,this.stopped=!1;const{logger:i,maxEventsInQueue:n}=t;this.logger=i,this.buffer=new I(n,this.logger),this.sender=new L(t),this.serializer=new D,this.dispatchLoop(e).then()}dispatchLoop(t){return M(this,void 0,void 0,(function*(){this.logger.debug("Start dispatch loop.");let e=!0;for(;e;)try{const i=t.shift();if(void 0===i){yield C(1e3);continue}i instanceof E?this.addEventToBuffer(i):i instanceof w?yield this.triggerFlush(i):i instanceof S&&(yield this.triggerFlush(i),this.stopped=!0,e=!1)}catch(t){this.logger.error("Unexpected error in event dispatcher.",t)}this.logger.debug("Finish dispatch loop.")}))}addEventToBuffer(t){this.stopped||(this.buffer.addEvent(t)?this.logger.debug("Added event to buffer."):this.logger.warn("Exceeded event queue capacity, event will be dropped. Increase capacity to avoid dropping events."))}triggerFlush(t){return M(this,void 0,void 0,(function*(){if(this.stopped)return void t.complete();if(this.buffer.isEmpty)return t.complete(),void this.logger.debug("Flush empty buffer.");const e=this.buffer.eventsSnapshot;this.buffer.clear();try{yield this.flushEvents(e),this.logger.debug(`${e.length} events has been flushed.`)}catch(t){this.logger.warn("Exception happened when flushing events",t)}t.complete()}))}flushEvents(t){return M(this,void 0,void 0,(function*(){const e=(t=this.getUniqueEvents(t)).length;for(let i=0;i<e;i+=this.maxEventPerRequest){const n=Math.min(this.maxEventPerRequest,e-i),s=t.slice(i,i+n),r=this.serializer.serialize(s),{status:o}=yield this.sender.send(r,!0);o===p.FailedAndMustShutDown&&(this.stopped=!0)}}))}getUniqueEvents(t){const e=[],i=[];for(const n of t)i.includes(n.hash)||(e.push(n),i.push(n.hash));return e}}var K=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};class A{constructor(t){this.closed=!1;const{logger:e,flushInterval:i,maxEventsInQueue:n}=t;this.logger=e,this.flushInterval=i,this.eventQueue=new I(n,this.logger),this.eventDispatcher=new R(t,this.eventQueue),this.flushLoop()}flushLoop(){this.closed||setTimeout((()=>K(this,void 0,void 0,(function*(){try{yield this.flush()}catch(t){this.logger.error("Unexpected error while flushing events in event processor.",t)}this.flushLoop()}))),this.flushInterval)}flush(){const t=new w;return this.record(t),t.waitForCompletion()}close(){return K(this,void 0,void 0,(function*(){if(this.closed)return;const t=new S;this.record(t);try{yield t.waitForCompletion()}catch(t){this.logger.error("Event processor shutdown but not complete.")}this.eventQueue.close(),this.closed=!0}))}record(t){return!(u(t)||!this.eventQueue.addEvent(t)&&(t instanceof w&&t.complete(),1))}}class B{flush(){return Promise.resolve()}close(){return Promise.resolve()}record(t){return!1}}class V{static optionBelowMinimum(t,e,i){return`Config option "${t}" had invalid value of ${e}, using minimum of ${i} instead`}static unknownOption(t){return`Ignoring unknown config option "${t}"`}static wrongOptionType(t,e,i){return`Config option "${t}" should be of type ${e}, got ${i}, using default value`}static wrongOptionTypeBoolean(t,e){return`Config option "${t}" should be a boolean, got ${e}, converting to boolean`}static partialEndpoint(t){return`You have set custom uris without specifying the ${t} URI; connections may not work properly`}static mandatory(t){return`${t} is mandatory`}static invalidOptionValue(t){return`Invalid option value: ${t}`}static missingKeyInBootstrapValue(t){return`Missing key "${t}" in bootstrap value`}}class W{is(t){if(Array.isArray(t))return!1;const e=typeof t;return"function"===e||"object"===e}getType(){return"factory method or object"}}class q{constructor(t,e){this.typeName=t,this.typeOf=typeof e}is(t){return!Array.isArray(t)&&typeof t===this.typeOf}getType(){return this.typeName}}class J{constructor(t,e){this.typeName=t,this.typeOf=typeof e}is(t){return!!Array.isArray(t)&&(!(t.length>0)||t.every((t=>typeof t===this.typeOf)))}getType(){return this.typeName}}class H extends q{constructor(t){super(`number with minimum value of ${t}`,0),this.min=t}is(t){return typeof t===this.typeOf&&t>=this.min}}class Q extends q{constructor(t){super(`string matching ${t}`,""),this.expression=t}is(t){return!!t.match(this.expression)}}class G{is(t){return"function"==typeof t}getType(){return"function"}}class Y{is(t){return"boolean"==typeof t||null==t}getType(){return"boolean | undefined | null"}}class X{constructor(){this.messages=[]}is(t){if("object"!=typeof t||null===t)return this.messages.push(V.invalidOptionValue("bootstrap")),!1;try{const e=t;for(let t of e){const e=Object.keys(t);if(e.includes("id")||this.messages.push(V.missingKeyInBootstrapValue("id")),e.includes("variation")||this.messages.push(V.missingKeyInBootstrapValue("variation")),e.includes("variationType")||this.messages.push(V.missingKeyInBootstrapValue("variationType")),this.messages.length>0)return!1}}catch(e){return this.messages.push(V.wrongOptionType("bootstrap",this.getType(),typeof t)),!1}return!0}getType(){return"IFlagBase[]"}}class Z{constructor(){this.messages=[]}is(t){if("object"!=typeof t||null===t)return this.messages.push(V.mandatory("user")),!1;const e=t;return"string"!=typeof e.keyId||""===e.keyId.trim()?(this.messages.push(V.mandatory("user.keyId")),!1):"string"==typeof e.name&&""!==e.name.trim()||(this.messages.push(V.mandatory("user.name")),!1)}getType(){return"user"}}const tt=/^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d\d*)?(Z|[-+]\d\d(:\d\d)?)/;class et{is(t){return"number"==typeof t||"string"==typeof t&&tt.test(t)}getType(){return"date"}}class it extends Q{constructor(){super(/^(\w|\.|-)+$/)}is(t){return super.is(t)&&"kind"!==t}}class nt{static createTypeArray(t,e){return new J(t,e)}static numberWithMin(t){return new H(t)}static stringMatchingRegex(t){return new Q(t)}}function st(t){if("string"==typeof t)return t;if(void 0===t)return"undefined";if(null===t)return"null";if(Object.prototype.hasOwnProperty.call(t,"toString"))try{return t.toString()}catch(t){}if("bigint"==typeof t)return`${t}n`;try{return JSON.stringify(t)}catch(t){return t instanceof TypeError&&t.message.indexOf("circular")>=0?"[Circular]":"[Not Stringifiable]"}}nt.String=new q("string",""),nt.Number=new q("number",0),nt.ObjectOrFactory=new W,nt.Object=new q("object",{}),nt.StringArray=new J("string[]",""),nt.Boolean=new q("boolean",!0),nt.User=new Z,nt.Bootstrap=new X,nt.Function=new G,nt.Date=new et,nt.Kind=new it,nt.NullableBoolean=new Y;const rt={s:t=>st(t),d:t=>function(t){return"symbol"==typeof t?"NaN":"bigint"==typeof t?`${t}n`:String(Number(t))}(t),i:t=>function(t){return"symbol"==typeof t?"NaN":"bigint"==typeof t?`${t}n`:String(parseInt(t,10))}(t),f:t=>function(t){return"symbol"==typeof t?"NaN":String(parseFloat(t))}(t),j:t=>st(t),o:t=>st(t),O:t=>st(t),c:()=>""};function ot(...t){var e;const i=t.shift();if(nt.String.is(i)){let n="",s=0;for(;s<i.length;){const r=i.charAt(s);if("%"===r){if(s+1<i.length){const r=i.charAt(s+1);if(r in rt&&t.length){const i=t.shift();n+=null===(e=rt[r])||void 0===e?void 0:e.call(rt,i)}else n+="%"===r?"%":`%${r}`;s+=2}}else n+=r,s+=1}return t.length&&(n.length&&(n+=" "),n+=t.map(st).join(" ")),n}return t.map(st).join(" ")}const at={debug:0,info:1,warn:2,error:3,none:4},lt=["debug","info","warn","error","none"];class ut{static get(){return new ut({})}constructor(t){var e,i,n,s;this.logLevel=null!==(i=at[null!==(e=t.level)&&void 0!==e?e:"info"])&&void 0!==i?i:at.info,this.name=null!==(n=t.name)&&void 0!==n?n:"FeatBit",this.destination=null!==(s=t.destination)&&void 0!==s?s:console.log,this.formatter=t.formatter}tryFormat(...t){var e;try{return this.formatter?null===(e=this.formatter)||void 0===e?void 0:e.call(this,...t):ot(...t)}catch(e){return ot(...t)}}tryWrite(t){try{this.destination(t)}catch(e){console.error(t)}}log(t,e){if(t>=this.logLevel){const i=`${lt[t]}: [${this.name}]`;try{this.destination?this.tryWrite(`${i} ${this.tryFormat(...e)}`):console.error(...e)}catch(t){console.error(...e)}}}error(...t){this.log(at.error,t)}warn(...t){this.log(at.warn,t)}info(...t){this.log(at.info,t)}debug(...t){this.log(at.debug,t)}}const ct={error:nt.Function,warn:nt.Function,info:nt.Function,debug:nt.Function};class ht{constructor(t,e){Object.entries(ct).forEach((([e,i])=>{if(!i.is(t[e]))throw new Error(`Provided logger instance must support logger.${e}(...) method`)})),this.logger=t,this.fallback=e}log(t,e){try{this.logger[t](...e)}catch(i){this.fallback[t](...e)}}error(...t){this.log("error",t)}warn(...t){this.log("warn",t)}info(...t){this.log("info",t)}debug(...t){this.log("debug",t)}}class dt{constructor(t){this._keyId="",this._name="",this._custom=[],this._keyId=t}name(t){return this._name=t,this}custom(t,e){var i;return null===(i=this._custom)||void 0===i||i.push({name:t,value:`${e}`}),this}build(){return{name:this._name,keyId:this._keyId,customizedProperties:this._custom}}}class vt{fetch(t,e={}){return fetch(t,e)}}function gt(t){return class extends t{on(t,e,i){return this.emitter.on(t,e,i),this}addListener(t,e,i){return this.emitter.addListener(t,e,i),this}once(t,e,i){return this.emitter.once(t,e,i),this}removeListener(t,e,i){return this.emitter.removeListener(t,e,i),this}off(t,e,i){return this.emitter.off(t,e,i),this}removeAllListeners(t){return this.emitter.removeAllListeners(t),this}listeners(t){return this.emitter.listeners(t)}emit(t,...e){return this.emitter.emit(t,e),this}listenerCount(t){return this.emitter.listenerCount(t)}prependListener(t,e,i){return this.emitter.prependListener(t,e,i),this}prependOnceListener(t,e,i){return this.emitter.prependOnceListener(t,e,i),this}eventNames(){return this.emitter.eventNames()}maybeReportError(t){return this.emitter.maybeReportError(t),this}}}class ft{constructor(t){this.logger=t,this.events={}}listeningTo(t){return!!this.events[t]}on(t,e,i){return this.events[t]=this.events[t]||[],this.events[t]=this.events[t].concat({handler:e,context:i}),this}addListener(t,e,i){return this.on(t,e,i)}once(t,e,i){const n=(...s)=>{this.off(t,n,i),e.apply(i,s)};return this.on(t,n,i)}off(t,e,i){if(!this.events[t])return this;for(let n=0;n<this.events[t].length;n++)this.events[t][n].handler===e&&this.events[t][n].context===i&&(this.events[t]=this.events[t].slice(0,n).concat(this.events[t].slice(n+1)));return this}removeListener(t,e,i){return this.off(t,e,i)}removeAllListeners(t){return t?delete this.events[t]:this.events={},this}listeners(t){return this.events[t]?this.events[t].map((t=>t.handler)):[]}emit(t,...e){if(!this.events[t])return this;const i=[...this.events[t]];for(let t=0;t<i.length;t++)i[t].handler.apply(i[t].context,Array.prototype.slice.call(arguments,1));return this}listenerCount(t){return this.events[t]?this.events[t].length:0}prependListener(t,e,i){return this.events[t]=this.events[t]||[],this.events[t]=[{handler:e,context:i},...this.events[t]],this}prependOnceListener(t,e,i){const n=(...s)=>{this.off(t,n,i),e.apply(i,s)};return this.prependListener(t,n,i)}eventNames(){return Object.keys(this.events)}maybeReportError(t){var e;return t?(this.listeningTo("error")?this.emit("error",t):null===(e=this.logger)||void 0===e||e.error(t),this):this}}const pt={0:"Q",1:"B",2:"W",3:"S",4:"P",5:"H",6:"D",7:"X",8:"Z",9:"U"};function mt(t,e){var i="000000000000"+t;return i.slice(i.length-e).split("").map((t=>pt[t])).join("")}function yt(t){t=t.replace(/=*$/,"");const e=Date.now(),i=mt(e,e.toString().length),n=Math.max(Math.floor(Math.random()*t.length),2);return`${mt(n,3)}${mt(i.length,2)}${t.slice(0,n)}${i}${t.slice(n)}`}var bt;!function(t){t.full="full",t.patch="patch"}(bt||(bt={}));const wt=[1e3,3e3,5e3,7e3,11e3,13e3,3e4,6e4],St=gt(class{constructor(){this.retryCounter=0,this.closed=!1,this._config={},this.emitter=new ft}identify(t){return this._config.user=t,this.doDataSync()}connect(){var t,e,i,n;let s=this;const r=Date.now(),o=this._config.streamingUri.replace(/^http/,"ws")+`?type=client&token=${yt(this._config.sdkKey)}`;this.ws=new WebSocket(o),null===(t=s.ws)||void 0===t||t.addEventListener("open",(function(t){s._config.logger.info(`WebSocket connection succeeded, connection time: ${Date.now()-r} ms`),s.doDataSync(),s.sendPingMessage()})),null===(e=s.ws)||void 0===e||e.addEventListener("close",(function(t){s._config.logger.warn("WebSocket closed"),4003!==t.code&&s.reconnect()})),null===(i=s.ws)||void 0===i||i.addEventListener("error",(function(t){s._config.logger.debug("error")})),null===(n=s.ws)||void 0===n||n.addEventListener("message",(function(t){const e=JSON.parse(t.data);if("data-sync"===e.messageType){if(e.data.userKeyId!==s._config.user.keyId)return;switch(e.data.eventType){case bt.patch:s.emitter.emit("patch",e);break;case bt.full:s.emitter.emit("put",e)}}}))}close(){var t;this.closed=!0,null===(t=this.ws)||void 0===t||t.close(4003,"The client is closed by user"),this.ws=void 0}config(t){t.emitter&&(this.emitter=t.emitter),this._config=Object.assign({},t)}sendPingMessage(){const t={messageType:"ping",data:null};setTimeout((()=>{var e;try{(null===(e=this.ws)||void 0===e?void 0:e.readyState)===WebSocket.OPEN?(this._config.logger.debug("sending ping"),this.ws.send(JSON.stringify(t)),this.sendPingMessage()):this._config.logger.debug(`socket closed at ${new Date}`)}catch(t){this._config.logger.debug(t)}}),this._config.pingInterval)}doDataSync(){var t,e;const i={messageType:"data-sync",data:{timestamp:this._config.getStoreTimestamp(),user:this._config.user}};try{return(null===(t=this.ws)||void 0===t?void 0:t.readyState)===WebSocket.OPEN?(this._config.logger.debug("requesting data"),null===(e=this.ws)||void 0===e||e.send(JSON.stringify(i)),!0):(this._config.logger.error("not requesting data because socket not open"),!1)}catch(t){return this._config.logger.debug(t),!1}}reconnect(){if(!this.closed){this.ws=void 0;const t=wt[Math.min(this.retryCounter++,wt.length-1)];this._config.logger.info(`The client will try to reconnect in ${t} milliseconds.`),setTimeout((()=>{this._config.logger.info(`The client is trying to reconnect, flag evaluation results may be stale until reconnected, waited for: ${t} milliseconds`),this.connect()}),t)}}});var Et=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};class kt{constructor(){this.store={},this.initCalled=!1,this._user={}}identify(t){return Et(this,void 0,void 0,(function*(){this._user=Object.assign({},t),yield this.saveUser(),this.store.version=0}))}get user(){return this._user}addItem(t,e,i){return Et(this,void 0,void 0,(function*(){let n=this.store[t.namespace];if(n||(n={},this.store[t.namespace]=n),Object.hasOwnProperty.call(n,e)){const t=n[e];(!t||t.version<=i.version)&&(n[e]=i)}else n[e]=i;i.version>this.store.version&&(this.store.version=i.version),yield this.dumpStoreToStorage()}))}get(t,e){const i=this.store[t.namespace];if(i&&Object.prototype.hasOwnProperty.call(i,e)){const t=i[e];if(t)return t}return null}all(t){var e;const i={},n=null!==(e=this.store[t.namespace])&&void 0!==e?e:{};return Object.entries(n).forEach((([t,e])=>{e&&(i[t]=e)})),[i,this.store.version]}init(t){return Et(this,void 0,void 0,(function*(){this.store=t,Object.keys(t).map((e=>{Object.entries(t[e]).forEach((([t,e])=>{const i=e;i.version>this.store.version&&(this.store.version=i.version)}))})),yield this.dumpStoreToStorage(),this.initCalled=!0}))}upsert(t,e){return Et(this,void 0,void 0,(function*(){yield this.addItem(t,e.key,e)}))}initialized(){return this.initCalled}close(){}get version(){return this.store.version}get description(){return""}saveUser(){return Et(this,void 0,void 0,(function*(){}))}loadStoreFromStorage(){return Et(this,void 0,void 0,(function*(){}))}dumpStoreToStorage(){return Et(this,void 0,void 0,(function*(){}))}}class Ot{static bool(t){return"TRUE"===(null==t?void 0:t.toUpperCase())?Ot.success(!0):"FALSE"===(null==t?void 0:t.toUpperCase())?Ot.success(!1):Ot.error()}static number(t){const e=Number(t);return Number.isNaN(e)?Ot.error():Ot.success(e)}static string(t){return Ot.success(t)}static json(t){try{const e=JSON.parse(t);return Ot.success(e)}catch(t){return Ot.error()}}static success(t){return{isSucceeded:!0,value:t}}static error(){return{isSucceeded:!1}}}var Pt=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};function Tt(t){var e,i;return t?`${t.keyId},${null!==(e=t.name)&&void 0!==e?e:""},${null===(i=t.customizedProperties)||void 0===i?void 0:i.sort(((t,e)=>{const i=t.name.toLowerCase(),n=e.name.toLowerCase();return i<n?-1:i>n?1:0})).map((t=>`${t.name}:${t.value}`)).join(",")}`:""}function It(t){return Pt(this,void 0,void 0,(function*(){const e=Tt(t);if(!e)return"";const i=(new TextEncoder).encode(e),n=yield crypto.subtle.digest("SHA-256",i);return Array.from(new Uint8Array(n)).map((t=>t.toString(16).padStart(2,"0"))).join("")}))}const Ft=(t,e=5e3)=>{let i;return(...n)=>{clearTimeout(i),i=setTimeout((()=>{t(...n)}),e)}};function xt(t){return JSON.parse(JSON.stringify(t))}var jt,Ut=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};class $t extends kt{constructor(){super(),this.allStores={}}close(){}get description(){return"in-memory-store"}saveUser(){return Ut(this,void 0,void 0,(function*(){}))}dumpStoreToStorage(){return Ut(this,void 0,void 0,(function*(){const t=yield It(this._user),e=`${o}-${t}`;this.allStores[e]=xt(this.store)}))}loadStoreFromStorage(){var t;return Ut(this,void 0,void 0,(function*(){const e=yield It(this._user),i=`${o}-${e}`;this.store=null!==(t=xt(this.allStores[i]))&&void 0!==t?t:{flags:{},version:0}}))}}!function(t){t.POLLING="polling",t.STREAMING="streaming"}(jt||(jt={}));class Nt{close(){}start(){}stop(){}identify(){return t=this,e=void 0,n=function*(){},new((i=void 0)||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}));var t,e,i,n}}var zt=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};class _t{constructor(t,e,i,n,s){this.requestor=e,this.getStoreTimestamp=i,this.listeners=n,this.errorHandler=s,this.stopped=!1,this.logger=t.logger,this.pollingInterval=t.pollingInterval,this.user=t.user}poll(t,e){var i;if(this.stopped)return;const n=Date.now();null===(i=this.logger)||void 0===i||i.debug("Polling for feature flag and segments updates"),this.requestor.requestData(this.getStoreTimestamp(),this.user,((i,s)=>zt(this,void 0,void 0,(function*(){var r,o,a,u,c,h,d;const v=Date.now()-n,g=Math.max(this.pollingInterval-v,0);if(null===(r=this.logger)||void 0===r||r.debug("Elapsed: %d ms, sleeping for %d ms",v,g),i){const{status:n}=i;if(!_(n)){const t=x(i,"polling request");return null===(o=this.logger)||void 0===o||o.error(t),null===(a=this.errorHandler)||void 0===a||a.call(this,new j(t,n)),void(null==e||e())}null===(u=this.logger)||void 0===u||u.warn(x(i,"polling request","will retry")),this.timeoutHandle=setTimeout((()=>{this.poll(t,e)}),g)}else{let e=[],i=null===(c=this.user)||void 0===c?void 0:c.keyId,n=this.listeners.get("patch");if(s){const t=JSON.parse(s);if("data-sync"===t.messageType){switch(t.data.eventType){case bt.patch:n=this.listeners.get("patch");break;case bt.full:n=this.listeners.get("put")}({featureFlags:e,userKeyId:i}=t.data),e=e.map((t=>Object.assign(Object.assign({},t),{origin:l.Remote})))}}const r=null===(h=null==n?void 0:n.deserializeData)||void 0===h?void 0:h.call(n,e);yield null===(d=null==n?void 0:n.processJson)||void 0===d?void 0:d.call(n,i,r),null==t||t(),this.timeoutHandle=setTimeout((()=>{this.poll()}),g)}}))))}identify(t){return zt(this,void 0,void 0,(function*(){return this.user=Object.assign({},t),this.timeoutHandle&&(clearTimeout(this.timeoutHandle),this.timeoutHandle=void 0),new Promise(((t,e)=>{this.poll(t,e)}))}))}close(){this.stop()}start(){this.poll()}stop(){this.timeoutHandle&&(clearTimeout(this.timeoutHandle),this.timeoutHandle=void 0),this.stopped=!0}}var Ct=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};class Lt{constructor(t,e,i,n){this.requests=n,this.headers=F(t,i),this.uri=e.pollingUri}request(t,e){return Ct(this,void 0,void 0,(function*(){const i=yield this.requests.fetch(t,e),n=yield i.text();return{res:i,body:n}}))}requestData(t,e,i){return Ct(this,void 0,void 0,(function*(){const n={method:"POST",headers:this.headers,body:JSON.stringify(e)};try{const{res:e,body:s}=yield this.request(`${this.uri}?timestamp=${null!=t?t:0}`,n);if(200!==e.status&&304!==e.status){const t=new U(`Unexpected status code: ${e.status}`,e.status);return i(t,void 0)}return i(void 0,304===e.status?null:s)}catch(t){return i(t,void 0)}}))}}var Dt=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};const Mt=class{constructor(t,e,i,n,s,r,o){this.getStoreTimestamp=s,this.listeners=r;const{logger:a,streamingUri:u}=i;this.logger=a,this.socket=n,this.socket.config({sdkKey:t,streamingUri:u,pingInterval:o,user:e,logger:a,getStoreTimestamp:s}),this.listeners.forEach((({deserializeData:t,processJson:e},i)=>{var n;null===(n=this.socket)||void 0===n||n.addListener(i,(n=>Dt(this,void 0,void 0,(function*(){var s,r;if(null===(s=this.logger)||void 0===s||s.debug(`Received ${i} event`),null==n?void 0:n.data){const{userKeyId:i}=n.data,s=n.data.featureFlags.map((t=>Object.assign(Object.assign({},t),{origin:l.Remote}))),o=t(s);yield e(i,o),null===(r=this.identifyResolve)||void 0===r||r.call(this),this.identifyResolve=void 0}}))))}))}identify(t){var e;return Dt(this,void 0,void 0,(function*(){const i=null===(e=this.socket)||void 0===e?void 0:e.identify(t);return new Promise(((t,e)=>{this.identifyResolve=t,i||e(new Error("Websocket identify failed"))}))}))}start(){var t;this.logConnectionStarted(),null===(t=this.socket)||void 0===t||t.connect()}logConnectionStarted(){var t;this.connectionAttemptStartTime=Date.now(),null===(t=this.logger)||void 0===t||t.info(`Stream connection attempt StartTime ${this.connectionAttemptStartTime}`)}close(){this.stop()}stop(){var t;null===(t=this.socket)||void 0===t||t.close(),this.socket=void 0}};function Rt(t){return t.replace(/\/+$/,"")}const Kt="",At=2147483648,Bt={startWaitTime:nt.Number,sdkKey:nt.String,pollingUri:nt.String,streamingUri:nt.String,eventsUri:nt.String,webSocketPingInterval:nt.Number,logger:nt.Object,logLevel:nt.String,store:nt.ObjectOrFactory,dataSynchronizer:nt.ObjectOrFactory,flushInterval:nt.Number,maxEventsInQueue:nt.Number,disableEvents:nt.Boolean,pollingInterval:nt.Number,offline:nt.Boolean,dataSyncMode:nt.String,bootstrap:nt.Bootstrap,user:nt.User},Vt={startWaitTime:5e3,sdkKey:"",pollingUri:"",streamingUri:"",eventsUri:"",dataSyncMode:jt.STREAMING,sendEvents:!0,webSocketPingInterval:18e3,flushInterval:2e3,maxEventsInQueue:1e4,disableEvents:!1,pollingInterval:3e4,offline:!1,store:t=>new $t,bootstrap:void 0,user:void 0};class Wt{constructor(t={}){var e,i;this.bootstrapProvider=new h,t=t||{},this.logger=t.logger;const{errors:n,validatedOptions:s}=function(t){let e=[];const i=Object.assign({},Vt);return Object.keys(t).forEach((n=>{var s;const r=t[n],o=Bt[n];if(o)if(o.is(r))i[n]=r;else if("boolean"===o.getType())e.push(V.wrongOptionTypeBoolean(n,typeof r)),i[n]=!!r;else if(o instanceof H&&nt.Number.is(r)){const{min:t}=o;e.push(V.optionBelowMinimum(n,r,t)),i[n]=t}else o instanceof Z?(e=[...e,...o.messages],i[n]=Vt[n]):(e.push(V.wrongOptionType(n,o.getType(),typeof r)),i[n]=Vt[n]);else null===(s=t.logger)||void 0===s||s.warn(V.unknownOption(n))})),{errors:e,validatedOptions:i}}(t);if(n.forEach((t=>{var e;null===(e=this.logger)||void 0===e||e.error(t)})),this.user=s.user,function(t,e){var i,n,s;const{streamingUri:r,pollingUri:o,eventsUri:a}=t,l=u(r)||r===Kt,c=u(o)||o===Kt,h=u(a)||a===Kt;!e.offline&&(h||l&&c)&&(h&&(null===(i=e.logger)||void 0===i||i.error(V.partialEndpoint("eventsUri"))),e.dataSyncMode===jt.STREAMING&&l&&(null===(n=e.logger)||void 0===n||n.error(V.partialEndpoint("streamingUri"))),e.dataSyncMode===jt.POLLING&&c&&(null===(s=e.logger)||void 0===s||s.error(V.partialEndpoint("pollingUri"))))}(t,s),this.streamingUri=`${Rt(s.streamingUri)}/streaming`,this.pollingUri=`${Rt(s.pollingUri)}/api/public/sdk/client/latest-all`,this.eventsUri=`${Rt(s.eventsUri)}/api/public/insight/track`,this.startWaitTime=s.startWaitTime,this.sdkKey=s.sdkKey,this.webSocketPingInterval=s.webSocketPingInterval,this.flushInterval=s.flushInterval,this.maxEventsInQueue=s.maxEventsInQueue,this.disableEvents=s.disableEvents,this.pollingInterval=s.pollingInterval,this.offline=s.offline,s.bootstrap&&s.bootstrap.length>0)try{this.bootstrapProvider=new c(s.bootstrap)}catch(t){null===(e=this.logger)||void 0===e||e.error("Failed to parse bootstrap JSON, use NullBootstrapProvider.")}this.offline&&(null===(i=this.logger)||void 0===i||i.info("Offline mode enabled. No data synchronization with the FeatBit server will occur.")),this.dataSyncMode=s.dataSyncMode,nt.Function.is(s.dataSynchronizer)?this.dataSynchronizerFactory=s.dataSynchronizer:this.dataSynchronizerFactory=()=>s.dataSynchronizer,nt.Function.is(s.store)?this.storeFactory=s.store:this.storeFactory=()=>s.store}}class qt{constructor(t,e,i){this.sdkKey=t,this.platform=i,this.logger=e.logger,this.offline=e.offline,this.flushInterval=e.flushInterval,this.maxEventsInQueue=e.maxEventsInQueue,this.streamingUri=e.streamingUri,this.pollingUri=e.pollingUri,this.eventsUri=e.eventsUri}}class Jt{constructor(t,e){this.valid=t,this.message=e}static fromUser(t){if(!t)return Jt.contextForError("No user specified");const{keyId:e,name:i}=t;if(null==e||""===e.trim())return Jt.contextForError("key is mandatory");const n=new Jt(!0);return n._user=t,n}get user(){return this._user}get keyId(){return this._user.keyId}value(t){var e,i,n,s,r;return"keyId"===t?null===(e=this._user)||void 0===e?void 0:e.keyId:"name"===t?null===(i=this._user)||void 0===i?void 0:i.name:null===(r=null===(s=null===(n=this._user)||void 0===n?void 0:n.customizedProperties)||void 0===s?void 0:s.find((e=>e.name===t)))||void 0===r?void 0:r.value}static contextForError(t){return new Jt(!1,t)}}var Ht,Qt=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};!function(t){t[t.Initializing=0]="Initializing",t[t.Initialized=1]="Initialized",t[t.Failed=2]="Failed"}(Ht||(Ht={}));class Gt{constructor(t,e,i){this.options=t,this.platform=e,this.state=Ht.Initializing,this.onError=i.onError,this.onFailed=i.onFailed,this.onReady=i.onReady;const{onUpdate:n,hasEventListeners:s}=i,r=new Wt(t);if(!r.sdkKey&&!r.offline)throw new Error("You must configure the client with an SDK key");if(!r.user)throw new Error("You must configure the client with a user");this.config=r,this.logger=r.logger,this.init(n,s)}init(t,e){var i,n,s;return Qt(this,void 0,void 0,(function*(){const r=new qt(this.config.sdkKey,this.config,this.platform);if(this.store=this.config.storeFactory(r),yield this.store.identify(this.config.user),this.dataSourceUpdates=new y(this.store,e,t),this.evaluator=new T(this.store),yield this.config.bootstrapProvider.populate(this.config.user.keyId,this.dataSourceUpdates),this.config.offline)this.eventProcessor=new B,this.dataSynchronizer=new Nt,this.initSuccess();else{this.config.disableEvents?this.eventProcessor=new B:this.eventProcessor=new A(r);const t=v(this.dataSourceUpdates,this.logger,{put:()=>this.initSuccess(),patch:()=>this.initSuccess()}),e=this.config.dataSyncMode===jt.STREAMING?new Mt(this.config.sdkKey,this.config.user,r,this.platform.webSocket,(()=>this.store.version),t,this.config.webSocketPingInterval):new _t(this.config,new Lt(this.config.sdkKey,this.config,this.platform.info,this.platform.requests),(()=>this.store.version),t,(t=>this.dataSourceErrorHandler(t)));this.dataSynchronizer=null!==(s=null===(n=(i=this.config).dataSynchronizerFactory)||void 0===n?void 0:n.call(i,r,this.store,this.dataSourceUpdates,(()=>this.initSuccess()),(t=>this.dataSourceErrorHandler(t))))&&void 0!==s?s:e}this.start()}))}identify(t){var e,i;return Qt(this,void 0,void 0,(function*(){const s=new Z;if(!s.is(t))return void s.messages.forEach((t=>{var e;null===(e=this.logger)||void 0===e||e.warn(t)}));const[r,o]=this.store.all(n.Flags),a={flags:Object.assign({},r),version:o};this.config.user=t,yield this.store.identify(t);try{yield this.dataSynchronizer.identify(t)}catch(t){null===(e=this.logger)||void 0===e||e.error("dataSynchronizer unable to identify user.")}const[l,u]=this.store.all(n.Flags),c={flags:Object.assign({},l),version:u};0===Object.keys(l).length?yield this.config.bootstrapProvider.populate(t.keyId,this.dataSourceUpdates):null===(i=this.dataSourceUpdates)||void 0===i||i.checkUpdates(a,c)}))}start(){this.config.offline||(this.dataSynchronizer.start(),setTimeout((()=>{var t,e;if(!this.initialized()){const i=`FbClient failed to start successfully within ${this.config.startWaitTime} milliseconds. This error usually indicates a connection issue with FeatBit or an invalid sdkKey.Please double-check your sdkKey and streamingUri/pollingUri configuration. We will continue to initialize the FbClient, it still have a chance to get to work if it's a temporary network issue`,n=new z(i);return this.state=Ht.Failed,this.rejectionReason=n,null===(t=this.initReject)||void 0===t||t.call(this,n),null===(e=this.logger)||void 0===e?void 0:e.warn(i)}}),this.config.startWaitTime))}initialized(){return this.state===Ht.Initialized}waitForInitialization(){return this.initializedPromise?this.initializedPromise:this.state===Ht.Initialized?(this.initializedPromise=Promise.resolve(this),this.initializedPromise):this.state===Ht.Failed?(this.initializedPromise=Promise.reject(this.rejectionReason),this.initializedPromise):(this.initializedPromise||(this.initializedPromise=new Promise(((t,e)=>{this.initResolve=t,this.initReject=e}))),this.initializedPromise)}boolVariation(t,e){return this.evaluateCore(t,e,Ot.bool).value}boolVariationDetail(t,e){return this.evaluateCore(t,e,Ot.bool)}jsonVariation(t,e){return this.evaluateCore(t,e,Ot.json).value}jsonVariationDetail(t,e){return this.evaluateCore(t,e,Ot.json)}numberVariation(t,e){return this.evaluateCore(t,e,Ot.number).value}numberVariationDetail(t,e){return this.evaluateCore(t,e,Ot.number)}stringVariation(t,e){return this.evaluateCore(t,e,Ot.string).value}stringVariationDetail(t,e){return this.evaluateCore(t,e,Ot.string)}variation(t,e){return this.evaluateCore(t,e).value}variationDetail(t,e){return this.evaluateCore(t,e)}getAllVariations(){var t;const e=Jt.fromUser(this.config.user);if(!e.valid){const i=new N(`${null!==(t=e.message)&&void 0!==t?t:"User not valid;"} returning default value.`);return this.onError(i),Promise.resolve([])}const[i,s]=this.store.all(n.Flags),r=Object.keys(i).map((t=>{var e;const i=this.evaluator.evaluate(t);return{flagKey:t,kind:i.kind,reason:i.reason,value:null===(e=i.value)||void 0===e?void 0:e.variation}}));return Promise.resolve(r)}close(){var t;return Qt(this,void 0,void 0,(function*(){yield this.eventProcessor.close(),null===(t=this.dataSynchronizer)||void 0===t||t.close(),this.store.close()}))}track(t,e){const i=new k(this.config.user,t,this.platform.info.appType,null!=e?e:1);this.eventProcessor.record(i)}flush(t){return Qt(this,void 0,void 0,(function*(){try{return yield this.eventProcessor.flush(),null==t||t(!0),!0}catch(e){return null==t||t(!1),!1}}))}evaluateCore(t,e,i){var s,r,o;const a=Jt.fromUser(this.config.user);if(!a.valid){const i=new N(`${null!==(s=a.message)&&void 0!==s?s:"User not valid;"} returning default value.`);return this.onError(i),{flagKey:t,kind:f.Error,reason:i.message,value:e}}const u=this.evaluator.evaluate(t);if(u.kind===f.FlagNotFound){const i=new N(u.reason);return this.onError(i),{flagKey:t,kind:u.kind,reason:u.reason,value:e}}if(this.initialized()){const e=null===(o=this.store)||void 0===o?void 0:o.get(n.Flags,t);(null==e?void 0:e.origin)===l.Remote&&this.eventProcessor.record(u.toEvalEvent(this.config.user))}else null===(r=this.logger)||void 0===r||r.warn("Variation called before FeatBit client initialization completed (did you wait for the'ready' event?)");let c;if(i)c=i;else switch(u.value.variationType){case g.boolean:c=Ot.bool;break;case g.number:c=Ot.number;break;case g.json:c=Ot.json;break;case g.string:default:c=Ot.string}const{isSucceeded:h,value:d}=c(u.value.variation);return h?{flagKey:t,kind:u.kind,reason:u.reason,value:d}:{flagKey:t,kind:f.WrongType,reason:"type mismatch",value:e}}dataSourceErrorHandler(t){var e;const i=401===t.code?new Error("Authentication failed. Double check your SDK key."):t;this.onError(i),this.onFailed(i),this.initialized()||(this.state=Ht.Failed,this.rejectionReason=i,null===(e=this.initReject)||void 0===e||e.call(this,i))}initSuccess(){var t,e;this.initialized()||(this.state=Ht.Initialized,null===(t=this.logger)||void 0===t||t.info("FbClient started successfully."),null===(e=this.initResolve)||void 0===e||e.call(this,this),this.onReady())}}const Yt="4.2.13";class Xt{get appType(){return"Browser-Client-SDK"}platformData(){return{os:{},name:"Browser",additional:{}}}sdkData(){return{name:"@featbit/js-client-sdk",version:Yt,userAgent:`${this.appType}/${Yt}`}}}class Zt{constructor(t){this.info=new Xt,this.requests=new vt,this.webSocket=new St}}var te=function(t,e,i,n){return new(i||(i=Promise))((function(s,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};class ee extends kt{constructor(t){super(),this.logger=t.logger}close(){}get description(){return"local-storage-store"}saveUser(){return te(this,void 0,void 0,(function*(){localStorage.setItem(a,Tt(this._user))}))}dumpStoreToStorage(){return te(this,void 0,void 0,(function*(){const t=yield It(this._user),e=`${o}-${t}`;localStorage.setItem(e,JSON.stringify(this.store))}))}loadStoreFromStorage(){return te(this,void 0,void 0,(function*(){const t=yield It(this._user),e=`${o}-${t}`,i=localStorage.getItem(e);let n=null;try{i&&i.trim().length>0&&(n=JSON.parse(i))}catch(t){this.logger.error(`error while loading local data store: ${e}`,t)}this.store=n||{flags:{},version:0}}))}}const ie=gt(class extends Gt{constructor(t,e=void 0){var i;const n=new ut({level:"warn",destination:console.log});let s;s=t.logger?new ht(t.logger,n):new ut({level:null!==(i=t.logLevel)&&void 0!==i?i:"warn",destination:console.log});const r=new ft(s);let{store:o}=t;o||(o=new ee(t)),super(Object.assign(Object.assign({},t),{logger:s,store:o}),null!=e?e:new Zt(Object.assign(Object.assign({},t),{logger:s})),{onError:t=>{r.listenerCount("error")&&r.emit("error",t)},onFailed:t=>{r.emit("failed",t)},onReady:()=>{r.emit("ready")},onUpdate:t=>{r.emit("update",[t]),t.forEach((t=>r.emit(`update:${t}`,t)))},hasEventListeners:()=>r.eventNames().some((t=>"update"===t||"string"==typeof t&&t.startsWith("update:")))}),this.emitter=r}});class ne{constructor(t){this._options=null!=t?t:{}}build(){return new ie(this._options,this._platform)}platform(t){return this._platform=t,this}startWaitTime(t){return this._options.startWaitTime=t,this}sdkKey(t){return this._options.sdkKey=t,this}user(t){return this._options.user=t,this}streamingUri(t){return this._options.streamingUri=t,this}pollingUri(t){return this._options.pollingUri=t,this}eventsUri(t){return this._options.eventsUri=t,this}dataSyncMode(t){return this._options.dataSyncMode=t,this}pollingInterval(t){return this._options.pollingInterval=t,this}flushInterval(t){return this._options.flushInterval=t,this}maxEventsInQueue(t){return this._options.maxEventsInQueue=t,this}disableEvents(t){return this._options.disableEvents=t,this}logger(t){return this._options.logger=t,this}logLevel(t){return this._options.logLevel=t,this}offline(t){return this._options.offline=t,this}bootstrap(t){return this._options.bootstrap=t,this}dataSynchronizer(t){return this._options.dataSynchronizer=t,this}}return e})()));
|
|
2
|
+
//# sourceMappingURL=featbit-js-client-sdk-4.2.13.js.map
|