@featbit/js-client-sdk 3.0.13 → 4.0.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.
Files changed (120) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +301 -301
  3. package/dist/esm/FbClientCore.d.ts +6 -5
  4. package/dist/esm/FbClientCore.d.ts.map +1 -1
  5. package/dist/esm/FbClientCore.js +27 -4
  6. package/dist/esm/FbClientCore.js.map +1 -1
  7. package/dist/esm/IFbClientCore.d.ts +8 -7
  8. package/dist/esm/IFbClientCore.d.ts.map +1 -1
  9. package/dist/esm/version.d.ts +1 -1
  10. package/dist/esm/version.d.ts.map +1 -1
  11. package/dist/esm/version.js +1 -1
  12. package/dist/esm/version.js.map +1 -1
  13. package/dist/umd/featbit-js-client-sdk-4.0.0.js +2 -0
  14. package/dist/umd/featbit-js-client-sdk-4.0.0.js.map +1 -0
  15. package/dist/umd/featbit-js-client-sdk.js +1 -1
  16. package/dist/umd/featbit-js-client-sdk.js.map +1 -1
  17. package/package.json +46 -46
  18. package/src/Configuration.ts +232 -232
  19. package/src/Context.ts +61 -61
  20. package/src/FbClientBuilder.ts +167 -167
  21. package/src/FbClientCore.ts +428 -405
  22. package/src/IContextProperty.ts +3 -3
  23. package/src/IDataKind.ts +11 -11
  24. package/src/IFbClient.ts +29 -29
  25. package/src/IFbClientCore.ts +291 -290
  26. package/src/IVersionedData.ts +18 -18
  27. package/src/bootstrap/IBootstrapProvider.ts +4 -4
  28. package/src/bootstrap/JsonBootstrapProvider.ts +34 -34
  29. package/src/bootstrap/NullBootstrapProvider.ts +20 -20
  30. package/src/bootstrap/index.ts +2 -2
  31. package/src/constants.ts +1 -1
  32. package/src/data-sources/DataSourceUpdates.ts +116 -116
  33. package/src/data-sources/createStreamListeners.ts +67 -67
  34. package/src/data-sources/index.ts +1 -1
  35. package/src/data-sync/DataSyncMode.ts +3 -3
  36. package/src/data-sync/IDataSynchronizer.ts +15 -15
  37. package/src/data-sync/IRequestor.ts +10 -10
  38. package/src/data-sync/NullDataSynchronizer.ts +14 -14
  39. package/src/data-sync/PollingDataSynchronizer.ts +125 -125
  40. package/src/data-sync/Requestor.ts +61 -61
  41. package/src/data-sync/WebSocketDataSynchronizer.ts +77 -77
  42. package/src/data-sync/index.ts +8 -8
  43. package/src/data-sync/types.ts +19 -19
  44. package/src/data-sync/utils.ts +31 -31
  45. package/src/errors.ts +47 -47
  46. package/src/evaluation/EvalResult.ts +35 -35
  47. package/src/evaluation/Evaluator.ts +26 -26
  48. package/src/evaluation/IEvalDetail.ts +23 -23
  49. package/src/evaluation/ReasonKinds.ts +9 -9
  50. package/src/evaluation/data/IFlag.ts +29 -29
  51. package/src/evaluation/index.ts +4 -4
  52. package/src/events/DefaultEventProcessor.ts +83 -83
  53. package/src/events/DefaultEventQueue.ts +49 -49
  54. package/src/events/DefaultEventSender.ts +73 -73
  55. package/src/events/DefaultEventSerializer.ts +11 -11
  56. package/src/events/EventDispatcher.ts +127 -127
  57. package/src/events/EventSerializer.ts +4 -4
  58. package/src/events/IEventProcessor.ts +8 -8
  59. package/src/events/IEventQueue.ts +16 -16
  60. package/src/events/IEventSender.ts +13 -13
  61. package/src/events/NullEventProcessor.ts +15 -15
  62. package/src/events/event.ts +129 -129
  63. package/src/events/index.ts +11 -11
  64. package/src/index.ts +21 -21
  65. package/src/integrations/TestLogger.ts +24 -24
  66. package/src/integrations/index.ts +1 -1
  67. package/src/integrations/test_data/FlagBuilder.ts +59 -59
  68. package/src/integrations/test_data/TestData.ts +57 -57
  69. package/src/integrations/test_data/TestDataSynchronizer.ts +49 -49
  70. package/src/integrations/test_data/index.ts +4 -4
  71. package/src/logging/BasicLogger.ts +108 -108
  72. package/src/logging/IBasicLoggerOptions.ts +46 -46
  73. package/src/logging/ILogger.ts +49 -49
  74. package/src/logging/LogLevel.ts +8 -8
  75. package/src/logging/SafeLogger.ts +69 -69
  76. package/src/logging/format.ts +154 -154
  77. package/src/logging/index.ts +5 -5
  78. package/src/options/ClientContext.ts +39 -39
  79. package/src/options/IClientContext.ts +53 -53
  80. package/src/options/IOptions.ts +123 -123
  81. package/src/options/IUser.ts +6 -6
  82. package/src/options/IValidatedOptions.ts +29 -29
  83. package/src/options/OptionMessages.ts +35 -35
  84. package/src/options/UserBuilder.ts +35 -35
  85. package/src/options/Validators.ts +300 -300
  86. package/src/options/index.ts +7 -7
  87. package/src/platform/IInfo.ts +102 -102
  88. package/src/platform/IPlatform.ts +20 -20
  89. package/src/platform/IStore.ts +112 -112
  90. package/src/platform/IWebSocket.ts +22 -22
  91. package/src/platform/browser/BrowserInfo.ts +24 -24
  92. package/src/platform/browser/BrowserPlatform.ts +19 -19
  93. package/src/platform/browser/BrowserRequests.ts +6 -6
  94. package/src/platform/browser/BrowserWebSocket.ts +147 -147
  95. package/src/platform/browser/FbClient.ts +65 -65
  96. package/src/platform/browser/LocalStorageStore.ts +59 -59
  97. package/src/platform/index.ts +11 -11
  98. package/src/platform/requests.ts +76 -76
  99. package/src/store/BaseStore.ts +125 -125
  100. package/src/store/DataKinds.ts +6 -6
  101. package/src/store/IDataSourceUpdates.ts +68 -68
  102. package/src/store/InMemoryStore.ts +36 -36
  103. package/src/store/index.ts +5 -5
  104. package/src/store/serialization.ts +52 -52
  105. package/src/store/store.ts +37 -37
  106. package/src/utils/Emits.ts +75 -75
  107. package/src/utils/EventEmitter.ts +128 -128
  108. package/src/utils/IEventEmitter.ts +14 -14
  109. package/src/utils/Regex.ts +21 -21
  110. package/src/utils/ValueConverters.ts +55 -55
  111. package/src/utils/canonicalizeUri.ts +3 -3
  112. package/src/utils/debounce.ts +33 -33
  113. package/src/utils/http.ts +40 -40
  114. package/src/utils/index.ts +5 -5
  115. package/src/utils/isNullOrUndefined.ts +2 -2
  116. package/src/utils/serializeUser.ts +27 -27
  117. package/src/utils/sleep.ts +5 -5
  118. package/src/version.ts +1 -1
  119. package/dist/umd/featbit-js-client-sdk-3.0.13.js +0 -2
  120. package/dist/umd/featbit-js-client-sdk-3.0.13.js.map +0 -1
@@ -1,56 +1,56 @@
1
- import { Regex } from "./Regex";
2
-
3
- export interface IConvertResult<TValue> {
4
- isSucceeded: boolean,
5
- value?: TValue
6
- }
7
-
8
- export class ValueConverters {
9
- static bool(value: string): IConvertResult<boolean> {
10
- if (value?.toUpperCase() === 'TRUE') {
11
- return ValueConverters.success<boolean>(true);
12
- }
13
-
14
- if (value?.toUpperCase() === 'FALSE') {
15
- return ValueConverters.success<boolean>(false);
16
- }
17
-
18
- return ValueConverters.error<boolean>();
19
- }
20
-
21
- static number(value: string): IConvertResult<number> {
22
- const num = Number(value);
23
-
24
- if (Number.isNaN(num)) {
25
- return ValueConverters.error<number>();
26
- }
27
-
28
- return ValueConverters.success<number>(num);
29
- }
30
-
31
- static string(value: string): IConvertResult<string> {
32
- return ValueConverters.success<string>(value);
33
- }
34
-
35
- static json(value: string): IConvertResult<unknown> {
36
- try {
37
- const val = JSON.parse(value);
38
- return ValueConverters.success<unknown>(val);
39
- } catch (err) {
40
- return ValueConverters.error<unknown>();
41
- }
42
- }
43
-
44
- private static success<TValue>(value: TValue): IConvertResult<TValue> {
45
- return {
46
- isSucceeded: true,
47
- value: value
48
- }
49
- }
50
-
51
- private static error<TValue>(): IConvertResult<TValue> {
52
- return {
53
- isSucceeded: false
54
- }
55
- }
1
+ import { Regex } from "./Regex";
2
+
3
+ export interface IConvertResult<TValue> {
4
+ isSucceeded: boolean,
5
+ value?: TValue
6
+ }
7
+
8
+ export class ValueConverters {
9
+ static bool(value: string): IConvertResult<boolean> {
10
+ if (value?.toUpperCase() === 'TRUE') {
11
+ return ValueConverters.success<boolean>(true);
12
+ }
13
+
14
+ if (value?.toUpperCase() === 'FALSE') {
15
+ return ValueConverters.success<boolean>(false);
16
+ }
17
+
18
+ return ValueConverters.error<boolean>();
19
+ }
20
+
21
+ static number(value: string): IConvertResult<number> {
22
+ const num = Number(value);
23
+
24
+ if (Number.isNaN(num)) {
25
+ return ValueConverters.error<number>();
26
+ }
27
+
28
+ return ValueConverters.success<number>(num);
29
+ }
30
+
31
+ static string(value: string): IConvertResult<string> {
32
+ return ValueConverters.success<string>(value);
33
+ }
34
+
35
+ static json(value: string): IConvertResult<unknown> {
36
+ try {
37
+ const val = JSON.parse(value);
38
+ return ValueConverters.success<unknown>(val);
39
+ } catch (err) {
40
+ return ValueConverters.error<unknown>();
41
+ }
42
+ }
43
+
44
+ private static success<TValue>(value: TValue): IConvertResult<TValue> {
45
+ return {
46
+ isSucceeded: true,
47
+ value: value
48
+ }
49
+ }
50
+
51
+ private static error<TValue>(): IConvertResult<TValue> {
52
+ return {
53
+ isSucceeded: false
54
+ }
55
+ }
56
56
  }
@@ -1,4 +1,4 @@
1
- // This function is designed to remove any trailing forward slashes at the end of the provided URI string
2
- export function canonicalizeUri(uri: string): string {
3
- return uri.replace(/\/+$/, '');
1
+ // This function is designed to remove any trailing forward slashes at the end of the provided URI string
2
+ export function canonicalizeUri(uri: string): string {
3
+ return uri.replace(/\/+$/, '');
4
4
  }
@@ -1,33 +1,33 @@
1
- /**
2
- * Wait before calling the same function. Useful for expensive calls.
3
- * Adapted from https://amitd.co/code/typescript/debounce.
4
- *
5
- * @return The debounced function.
6
- *
7
- * @example
8
- *
9
- * ```js
10
- * const debouncedFunction = debounce(e => {
11
- * console.log(e);
12
- * }, 5000);
13
- *
14
- * // Console logs 'Hello world again ' after 5 seconds
15
- * debouncedFunction('Hello world');
16
- * debouncedFunction('Hello world again');
17
- * ```
18
- * @param fn The function to be debounced.
19
- * @param delayMs Defaults to 5 seconds.
20
- */
21
- export const debounce = <T extends (...args: any[]) => ReturnType<T>>(
22
- fn: T,
23
- delayMs: number = 5000,
24
- ): ((...args: Parameters<T>) => void) => {
25
- let timer: ReturnType<typeof setTimeout>;
26
-
27
- return (...args: Parameters<T>) => {
28
- clearTimeout(timer);
29
- timer = setTimeout(() => {
30
- fn(...args);
31
- }, delayMs);
32
- };
33
- };
1
+ /**
2
+ * Wait before calling the same function. Useful for expensive calls.
3
+ * Adapted from https://amitd.co/code/typescript/debounce.
4
+ *
5
+ * @return The debounced function.
6
+ *
7
+ * @example
8
+ *
9
+ * ```js
10
+ * const debouncedFunction = debounce(e => {
11
+ * console.log(e);
12
+ * }, 5000);
13
+ *
14
+ * // Console logs 'Hello world again ' after 5 seconds
15
+ * debouncedFunction('Hello world');
16
+ * debouncedFunction('Hello world again');
17
+ * ```
18
+ * @param fn The function to be debounced.
19
+ * @param delayMs Defaults to 5 seconds.
20
+ */
21
+ export const debounce = <T extends (...args: any[]) => ReturnType<T>>(
22
+ fn: T,
23
+ delayMs: number = 5000,
24
+ ): ((...args: Parameters<T>) => void) => {
25
+ let timer: ReturnType<typeof setTimeout>;
26
+
27
+ return (...args: Parameters<T>) => {
28
+ clearTimeout(timer);
29
+ timer = setTimeout(() => {
30
+ fn(...args);
31
+ }, delayMs);
32
+ };
33
+ };
package/src/utils/http.ts CHANGED
@@ -1,40 +1,40 @@
1
- import { IInfo } from "../platform/IInfo";
2
-
3
- export type Headers = {
4
- Authorization: string;
5
- 'X-User-Agent': string;
6
- 'Content-Type': string;
7
- };
8
-
9
- export function defaultHeaders(
10
- sdkKey: string,
11
- info: IInfo
12
- ): Headers {
13
- const {userAgent, version} = info.sdkData();
14
-
15
- const headers: Headers = {
16
- 'Content-Type': 'application/json',
17
- 'X-User-Agent': userAgent ?? `${info.appType}/${version}`,
18
- 'Authorization': sdkKey
19
- };
20
-
21
- return headers;
22
- }
23
-
24
- export function httpErrorMessage(
25
- err: {
26
- status: number;
27
- message: string;
28
- },
29
- context: string,
30
- retryMessage?: string,
31
- ): string {
32
- let desc;
33
- if (err.status) {
34
- desc = `error ${ err.status }${ err.status === 401 ? ' (invalid SDK key)' : '' }`;
35
- } else {
36
- desc = `I/O error (${ err.message || err })`;
37
- }
38
- const action = retryMessage ?? 'giving up permanently';
39
- return `Received ${ desc } for ${ context } - ${ action }`;
40
- }
1
+ import { IInfo } from "../platform/IInfo";
2
+
3
+ export type Headers = {
4
+ Authorization: string;
5
+ 'X-User-Agent': string;
6
+ 'Content-Type': string;
7
+ };
8
+
9
+ export function defaultHeaders(
10
+ sdkKey: string,
11
+ info: IInfo
12
+ ): Headers {
13
+ const {userAgent, version} = info.sdkData();
14
+
15
+ const headers: Headers = {
16
+ 'Content-Type': 'application/json',
17
+ 'X-User-Agent': userAgent ?? `${info.appType}/${version}`,
18
+ 'Authorization': sdkKey
19
+ };
20
+
21
+ return headers;
22
+ }
23
+
24
+ export function httpErrorMessage(
25
+ err: {
26
+ status: number;
27
+ message: string;
28
+ },
29
+ context: string,
30
+ retryMessage?: string,
31
+ ): string {
32
+ let desc;
33
+ if (err.status) {
34
+ desc = `error ${ err.status }${ err.status === 401 ? ' (invalid SDK key)' : '' }`;
35
+ } else {
36
+ desc = `I/O error (${ err.message || err })`;
37
+ }
38
+ const action = retryMessage ?? 'giving up permanently';
39
+ return `Received ${ desc } for ${ context } - ${ action }`;
40
+ }
@@ -1,6 +1,6 @@
1
- export * from './isNullOrUndefined';
2
- export * from './sleep';
3
- export * from './ValueConverters';
4
- export * from './VoidFunction';
5
- export * from './serializeUser';
1
+ export * from './isNullOrUndefined';
2
+ export * from './sleep';
3
+ export * from './ValueConverters';
4
+ export * from './VoidFunction';
5
+ export * from './serializeUser';
6
6
  export * from './debounce';
@@ -1,3 +1,3 @@
1
- export function isNullOrUndefined(val: any) {
2
- return val === null || val === undefined;
1
+ export function isNullOrUndefined(val: any) {
2
+ return val === null || val === undefined;
3
3
  }
@@ -1,28 +1,28 @@
1
- import { IUser } from "../options/IUser";
2
-
3
- export function serializeUser(user: IUser | undefined): string {
4
- if (!user) {
5
- return '';
6
- }
7
-
8
- const builtInProperties = `${user.keyId},${user.name}`;
9
-
10
- const customizedProperties = user.customizedProperties
11
- ?.sort((a, b) => {
12
- const nameA = a.name.toLowerCase();
13
- const nameB = b.name.toLowerCase();
14
- if (nameA < nameB) {
15
- return -1;
16
- }
17
-
18
- if (nameA > nameB) {
19
- return 1;
20
- }
21
-
22
- return 0;
23
- })
24
- .map(p => `${p.name}:${p.value}`)
25
- .join(',');
26
-
27
- return `${builtInProperties},${customizedProperties}`;
1
+ import { IUser } from "../options/IUser";
2
+
3
+ export function serializeUser(user: IUser | undefined): string {
4
+ if (!user) {
5
+ return '';
6
+ }
7
+
8
+ const builtInProperties = `${user.keyId},${user.name}`;
9
+
10
+ const customizedProperties = user.customizedProperties
11
+ ?.sort((a, b) => {
12
+ const nameA = a.name.toLowerCase();
13
+ const nameB = b.name.toLowerCase();
14
+ if (nameA < nameB) {
15
+ return -1;
16
+ }
17
+
18
+ if (nameA > nameB) {
19
+ return 1;
20
+ }
21
+
22
+ return 0;
23
+ })
24
+ .map(p => `${p.name}:${p.value}`)
25
+ .join(',');
26
+
27
+ return `${builtInProperties},${customizedProperties}`;
28
28
  }
@@ -1,6 +1,6 @@
1
- const sleep = async (delayMillis: number = 1000) =>
2
- new Promise((resolve) => {
3
- setTimeout(resolve, delayMillis);
4
- });
5
-
1
+ const sleep = async (delayMillis: number = 1000) =>
2
+ new Promise((resolve) => {
3
+ setTimeout(resolve, delayMillis);
4
+ });
5
+
6
6
  export default sleep;
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "3.0.13"; export const name = "@featbit/js-client-sdk";
1
+ export const version = "4.0.0"; export const name = "@featbit/js-client-sdk";
@@ -1,2 +0,0 @@
1
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i=t();for(var r in i)("object"==typeof exports?exports:e)[r]=i[r]}}(this,(()=>(()=>{"use strict";var e={1058:function(e,t,i){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.defaultValues=void 0;const n=i(5862),s=r(i(9176)),o=r(i(7783)),a=i(5562),l=i(1624),u=i(665),c=i(7837),d=i(607),h=i(8317),f={startWaitTime:n.TypeValidators.Number,sdkKey:n.TypeValidators.String,pollingUri:n.TypeValidators.String,streamingUri:n.TypeValidators.String,eventsUri:n.TypeValidators.String,webSocketPingInterval:n.TypeValidators.Number,logger:n.TypeValidators.Object,store:n.TypeValidators.ObjectOrFactory,dataSynchronizer:n.TypeValidators.ObjectOrFactory,flushInterval:n.TypeValidators.Number,maxEventsInQueue:n.TypeValidators.Number,pollingInterval:n.TypeValidators.Number,offline:n.TypeValidators.Boolean,dataSyncMode:n.TypeValidators.String,bootstrap:n.TypeValidators.Bootstrap,user:n.TypeValidators.User};t.defaultValues={startWaitTime:5e3,sdkKey:"",pollingUri:"",streamingUri:"",eventsUri:"",dataSyncMode:d.DataSyncModeEnum.STREAMING,sendEvents:!0,webSocketPingInterval:18e3,flushInterval:2e3,maxEventsInQueue:1e4,pollingInterval:3e4,offline:!1,store:e=>new o.default,bootstrap:void 0,user:void 0},t.default=class{constructor(e={}){var i,r;this.bootstrapProvider=new u.NullBootstrapProvider,e=e||{},this.logger=e.logger;const{errors:o,validatedOptions:v}=function(e){let i=[];const r=Object.assign({},t.defaultValues);return Object.keys(e).forEach((o=>{var a;const l=e[o],u=f[o];if(u)if(u.is(l))r[o]=l;else if("boolean"===u.getType())i.push(s.default.wrongOptionTypeBoolean(o,typeof l)),r[o]=!!l;else if(u instanceof n.NumberWithMinimum&&n.TypeValidators.Number.is(l)){const{min:e}=u;i.push(s.default.optionBelowMinimum(o,l,e)),r[o]=e}else u instanceof n.UserValidator?(i=[...i,...u.messages],r[o]=t.defaultValues[o]):(i.push(s.default.wrongOptionType(o,u.getType(),typeof l)),r[o]=t.defaultValues[o]);else null===(a=e.logger)||void 0===a||a.warn(s.default.unknownOption(o))})),{errors:i,validatedOptions:r}}(e);if(o.forEach((e=>{var t;null===(t=this.logger)||void 0===t||t.warn(e)})),this.user=e.user,function(e,t){var i,r,n;const{streamingUri:o,pollingUri:l,eventsUri:u}=e,h=(0,a.isNullOrUndefined)(o)||o===c.EmptyString,f=(0,a.isNullOrUndefined)(l)||l===c.EmptyString,v=(0,a.isNullOrUndefined)(u)||u===c.EmptyString;!t.offline&&(v||h&&f)&&(v&&(null===(i=t.logger)||void 0===i||i.error(s.default.partialEndpoint("eventsUri"))),t.dataSyncMode===d.DataSyncModeEnum.STREAMING&&h&&(null===(r=t.logger)||void 0===r||r.error(s.default.partialEndpoint("streamingUri"))),t.dataSyncMode===d.DataSyncModeEnum.POLLING&&f&&(null===(n=t.logger)||void 0===n||n.error(s.default.partialEndpoint("pollingUri"))))}(e,v),this.streamingUri=`${(0,l.canonicalizeUri)(v.streamingUri)}/streaming`,this.pollingUri=`${(0,l.canonicalizeUri)(v.pollingUri)}/api/public/sdk/client/latest-all`,this.eventsUri=`${(0,l.canonicalizeUri)(v.eventsUri)}/api/public/insight/track`,this.startWaitTime=v.startWaitTime,this.sdkKey=v.sdkKey,this.webSocketPingInterval=v.webSocketPingInterval,this.flushInterval=v.flushInterval,this.maxEventsInQueue=v.maxEventsInQueue,this.pollingInterval=v.pollingInterval,this.offline=v.offline,v.bootstrap&&v.bootstrap.length>0)try{this.bootstrapProvider=new h.JsonBootstrapProvider(v.bootstrap)}catch(e){null===(i=this.logger)||void 0===i||i.error("Failed to parse bootstrap JSON, use NullBootstrapProvider.")}this.offline&&(null===(r=this.logger)||void 0===r||r.info("Offline mode enabled. No data synchronization with the FeatBit server will occur.")),this.dataSyncMode=v.dataSyncMode,n.TypeValidators.Function.is(v.dataSynchronizer)?this.dataSynchronizerFactory=v.dataSynchronizer:this.dataSynchronizerFactory=()=>v.dataSynchronizer,n.TypeValidators.Function.is(v.store)?this.storeFactory=v.store:this.storeFactory=()=>v.store}}},1731:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});class i{constructor(e,t){this.valid=e,this.message=t}static fromUser(e){if(!e)return i.contextForError("No user specified");const{keyId:t,name:r}=e;if(null==t||""===t.trim())return i.contextForError("key is mandatory");const n=new i(!0);return n._user=e,n}get user(){return this._user}get keyId(){return this._user.keyId}value(e){var t,i,r,n,s;return"keyId"===e?null===(t=this._user)||void 0===t?void 0:t.keyId:"name"===e?null===(i=this._user)||void 0===i?void 0:i.name:null===(s=null===(n=null===(r=this._user)||void 0===r?void 0:r.customizedProperties)||void 0===n?void 0:n.find((t=>t.name===e)))||void 0===s?void 0:s.value}static contextForError(e){return new i(!1,e)}}t.default=i},70:function(e,t,i){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FbClientBuilder=void 0;const n=r(i(8322));t.FbClientBuilder=class{constructor(e){this._options=null!=e?e:{}}build(){return new n.default(this._options,this._platform)}platform(e){return this._platform=e,this}startWaitTime(e){return this._options.startWaitTime=e,this}sdkKey(e){return this._options.sdkKey=e,this}user(e){return this._options.user=e,this}streamingUri(e){return this._options.streamingUri=e,this}pollingUri(e){return this._options.pollingUri=e,this}eventsUri(e){return this._options.eventsUri=e,this}dataSyncMode(e){return this._options.dataSyncMode=e,this}pollingInterval(e){return this._options.pollingInterval=e,this}flushInterval(e){return this._options.flushInterval=e,this}maxEventsInQueue(e){return this._options.maxEventsInQueue=e,this}logger(e){return this._options.logger=e,this}offline(e){return this._options.offline=e,this}bootstrap(e){return this._options.bootstrap=e,this}dataSynchronizer(e){return this._options.dataSynchronizer=e,this}}},4129:function(e,t,i){var r=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))},n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FbClientCore=void 0;const s=n(i(1058)),o=n(i(8311)),a=n(i(4659)),l=i(7539),u=n(i(6100)),c=n(i(3148)),d=n(i(4943)),h=n(i(2093)),f=n(i(8874)),v=i(5192),p=i(7449),g=n(i(1731)),y=i(1142),m=i(8722),_=i(407),b=i(2305),w=i(7584),O=i(607),P=i(5862);var S;!function(e){e[e.Initializing=0]="Initializing",e[e.Initialized=1]="Initialized",e[e.Failed=2]="Failed"}(S||(S={})),t.FbClientCore=class{constructor(e,t,i){this.options=e,this.platform=t,this.state=S.Initializing,this.onError=i.onError,this.onFailed=i.onFailed,this.onReady=i.onReady;const{onUpdate:r,hasEventListeners:n}=i,o=new s.default(e);if(!o.sdkKey&&!o.offline)throw new Error("You must configure the client with an SDK key");if(!o.user)throw new Error("You must configure the client with a user");this.config=o,this.logger=o.logger,this.init(r,n)}init(e,t){var i,n,s;return r(this,void 0,void 0,(function*(){const r=new o.default(this.config.sdkKey,this.config,this.platform);if(this.store=this.config.storeFactory(r),yield this.store.identify(this.config.user),this.dataSourceUpdates=new a.default(this.store,t,e),this.evaluator=new f.default(this.store),yield this.config.bootstrapProvider.populate(this.config.user.keyId,this.dataSourceUpdates),this.config.offline)this.eventProcessor=new _.NullEventProcessor,this.dataSynchronizer=new m.NullDataSynchronizer,this.initSuccess();else{this.eventProcessor=new b.DefaultEventProcessor(r);const e=(0,l.createStreamListeners)(this.dataSourceUpdates,this.logger,{put:()=>this.initSuccess(),patch:()=>this.initSuccess()}),t=this.config.dataSyncMode===O.DataSyncModeEnum.STREAMING?new u.default(this.config.sdkKey,this.config.user,r,this.platform.webSocket,(()=>this.store.version),e,this.config.webSocketPingInterval):new c.default(this.config,new d.default(this.config.sdkKey,this.config,this.platform.info,this.platform.requests),(()=>this.store.version),e,(e=>this.dataSourceErrorHandler(e)));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()),(e=>this.dataSourceErrorHandler(e))))&&void 0!==s?s:t}this.start()}))}identify(e){var t;return r(this,void 0,void 0,(function*(){const i=new P.UserValidator;if(!i.is(e))return void i.messages.forEach((e=>{var t;null===(t=this.logger)||void 0===t||t.warn(e)}));const[r,n]=this.store.all(h.default.Flags),s={flags:Object.assign({},r),version:n};this.config.user=e,yield this.store.identify(e),yield this.dataSynchronizer.identify(e);const[o,a]=this.store.all(h.default.Flags),l={flags:Object.assign({},o),version:a};0===Object.keys(o).length?yield this.config.bootstrapProvider.populate(e.keyId,this.dataSourceUpdates):null===(t=this.dataSourceUpdates)||void 0===t||t.checkUpdates(s,l)}))}start(){this.config.offline||(this.dataSynchronizer.start(),setTimeout((()=>{var e,t;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`,r=new p.TimeoutError(i);return this.state=S.Failed,this.rejectionReason=r,null===(e=this.initReject)||void 0===e||e.call(this,r),null===(t=this.logger)||void 0===t?void 0:t.warn(i)}}),this.config.startWaitTime))}initialized(){return this.state===S.Initialized}waitForInitialization(){return this.initializedPromise?this.initializedPromise:this.state===S.Initialized?(this.initializedPromise=Promise.resolve(this),this.initializedPromise):this.state===S.Failed?(this.initializedPromise=Promise.reject(this.rejectionReason),this.initializedPromise):(this.initializedPromise||(this.initializedPromise=new Promise(((e,t)=>{this.initResolve=e,this.initReject=t}))),this.initializedPromise)}boolVariation(e,t){return this.evaluateCore(e,t,y.ValueConverters.bool).value}boolVariationDetail(e,t){return this.evaluateCore(e,t,y.ValueConverters.bool)}jsonVariation(e,t){return this.evaluateCore(e,t,y.ValueConverters.json).value}jsonVariationDetail(e,t){return this.evaluateCore(e,t,y.ValueConverters.json)}numberVariation(e,t){return this.evaluateCore(e,t,y.ValueConverters.number).value}numberVariationDetail(e,t){return this.evaluateCore(e,t,y.ValueConverters.number)}stringVariation(e,t){return this.evaluateCore(e,t,y.ValueConverters.string).value}stringVariationDetail(e,t){return this.evaluateCore(e,t,y.ValueConverters.string)}variation(e,t){return this.evaluateCore(e,t,y.ValueConverters.string).value}variationDetail(e,t){return this.evaluateCore(e,t,y.ValueConverters.string)}getAllVariations(){var e;const t=g.default.fromUser(this.config.user);if(!t.valid){const i=new p.ClientError(`${null!==(e=t.message)&&void 0!==e?e:"User not valid;"} returning default value.`);return this.onError(i),Promise.resolve([])}const[i,r]=this.store.all(h.default.Flags),n=Object.keys(i).map((e=>{var t;const i=this.evaluator.evaluate(e);return{flagKey:e,kind:i.kind,reason:i.reason,value:null===(t=i.value)||void 0===t?void 0:t.variation}}));return Promise.resolve(n)}close(){var e;return r(this,void 0,void 0,(function*(){yield this.eventProcessor.close(),null===(e=this.dataSynchronizer)||void 0===e||e.close(),this.store.close()}))}track(e,t){const i=new w.MetricEvent(this.config.user,e,this.platform.info.appType,null!=t?t:1);this.eventProcessor.record(i)}flush(e){return r(this,void 0,void 0,(function*(){try{return yield this.eventProcessor.flush(),null==e||e(!0),!0}catch(t){return null==e||e(!1),!1}}))}evaluateCore(e,t,i){var r,n,s;const o=g.default.fromUser(this.config.user);if(!o.valid){const i=new p.ClientError(`${null!==(r=o.message)&&void 0!==r?r:"User not valid;"} returning default value.`);return this.onError(i),{flagKey:e,kind:v.ReasonKinds.Error,reason:i.message,value:t}}const a=this.evaluator.evaluate(e);if(a.kind===v.ReasonKinds.FlagNotFound){const i=new p.ClientError(a.reason);return this.onError(i),{flagKey:e,kind:a.kind,reason:a.reason,value:t}}this.initialized()?this.eventProcessor.record(a.toEvalEvent(this.config.user)):null===(n=this.logger)||void 0===n||n.warn("Variation called before FeatBit client initialization completed (did you wait for the'ready' event?)");const{isSucceeded:l,value:u}=i(null===(s=a.value)||void 0===s?void 0:s.variation);return l?{flagKey:e,kind:a.kind,reason:a.reason,value:u}:{flagKey:e,kind:v.ReasonKinds.WrongType,reason:"type mismatch",value:t}}dataSourceErrorHandler(e){var t;const i=401===e.code?new Error("Authentication failed. Double check your SDK key."):e;this.onError(i),this.onFailed(i),this.initialized()||(this.state=S.Failed,this.rejectionReason=i,null===(t=this.initReject)||void 0===t||t.call(this,i))}initSuccess(){var e,t;this.initialized()||(this.state=S.Initialized,null===(e=this.logger)||void 0===e||e.info("FbClient started successfully."),null===(t=this.initResolve)||void 0===t||t.call(this,this),this.onReady())}}},5717:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},4881:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},292:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},226:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},6399:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},700:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.JsonBootstrapProvider=void 0;const r=i(4426),n=i(5562);t.JsonBootstrapProvider=class{constructor(e){const t=(e||[]).map((e=>Object.assign(Object.assign({},e),{variationOptions:e.variationOptions||[{id:null,variation:e.variation}]}))),i=(0,r.deserializeAll)(t);this.dataSet={flags:i.flags,version:0}}populate(e,t,i){return new Promise(((r,s)=>{if((0,n.isNullOrUndefined)(this.dataSet))return r();t.init(e,this.dataSet,(()=>{r(),null==i||i()}))}))}}},665:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NullBootstrapProvider=void 0,t.NullBootstrapProvider=class{constructor(){this.dataSet={flags:{},version:0}}populate(e,t,i){return new Promise(((e,t)=>{e(),null==i||i()}))}}},8317:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(6399),t),n(i(700),t),n(i(665),t)},7837:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MinInt=t.EmptyString=void 0,t.EmptyString="",t.MinInt=2147483648},4659:function(e,t,i){var r=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))},n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const s=n(i(2093));t.default=class{constructor(e,t,i){this.store=e,this.hasEventListeners=t,this.onChange=i}init(e,t,i){return r(this,void 0,void 0,(function*(){if(e!==this.store.user.keyId)return void(null==i||i());const n=this.hasEventListeners(),o=e=>r(this,void 0,void 0,(function*(){yield this.store.init(t),Promise.resolve().then((()=>{if(n){const i=Object.keys(t).flatMap((i=>{const r=(null==e?void 0:e[i])||{},n=t[i],s=Object.assign(Object.assign({},r),n);return Object.keys(s).filter((e=>this.isUpdated(r&&r[e],n&&n[e])))}));i.length>0&&this.onChange(i)}})),null==i||i()}));if(n){const[e,t]=this.store.all(s.default.Flags),i={flags:e,version:t};yield o(i)}else yield o()}))}checkUpdates(e,t,i){if(!this.hasEventListeners())return;const r=Object.keys(t).flatMap((i=>{const r=(null==e?void 0:e[i])||{},n=t[i],s=Object.assign(Object.assign({},r),n);return Object.keys(s).filter((e=>this.isUpdated(r&&r[e],n&&n[e])))}));r.length>0&&this.onChange(r),null==i||i()}upsert(e,t,i,n){return r(this,void 0,void 0,(function*(){if(e!==this.store.user.keyId)return void(null==n||n());const{key:s}=i,o=this.hasEventListeners(),a=e=>r(this,void 0,void 0,(function*(){yield this.store.upsert(t,i),Promise.resolve().then((()=>{o&&this.isUpdated(e,i[s])&&this.onChange([s])})),null==n||n()}));if(o){const e=this.store.get(t,s);yield a(e||void 0)}else yield a()}))}isUpdated(e,t){return!(!e&&!t||e&&t&&!(t.version>=e.version&&t.variation!==e.variation))}}},7539:function(e,t,i){var r=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.createStreamListeners=void 0;const n=i(4426);t.createStreamListeners=(e,t,i)=>{const s=new Map;return s.set("put",((e,t,i=(()=>{}))=>({deserializeData:n.deserializeAll,processJson:(n,{flags:s})=>r(void 0,void 0,void 0,(function*(){const r={flags:s,version:0};null==t||t.debug("Initializing all data"),yield e.init(n,r,i)}))}))(e,t,null==i?void 0:i.put)),s.set("patch",((e,t,i=(()=>{}))=>({deserializeData:n.deserializePatch,processJson:(n,s)=>r(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==t||t.debug(`Updating ${r.data.key} in ${r.kind.namespace}`),yield e.upsert(n,r.kind,r.data,i)}else null==i||i()}))}))(e,t,null==i?void 0:i.patch)),s}},3758:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(7539),t),n(i(4659),t)},607:(e,t)=>{var i;Object.defineProperty(t,"__esModule",{value:!0}),t.DataSyncModeEnum=void 0,function(e){e.POLLING="polling",e.STREAMING="streaming"}(i||(t.DataSyncModeEnum=i={}))},304:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},450:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},8722:function(e,t){var i=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.NullDataSynchronizer=void 0,t.NullDataSynchronizer=class{close(){}start(){}stop(){}identify(){return i(this,void 0,void 0,(function*(){}))}}},3148:function(e,t,i){var r=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0});const n=i(7449),s=i(1962),o=i(8688);t.default=class{constructor(e,t,i,r,n){this.requestor=t,this.getStoreTimestamp=i,this.listeners=r,this.errorHandler=n,this.stopped=!1,this.logger=e.logger,this.pollingInterval=e.pollingInterval,this.user=e.user}poll(e,t){var i;if(this.stopped)return;const a=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,l)=>r(this,void 0,void 0,(function*(){var r,u,c,d,h,f,v;const p=Date.now()-a,g=Math.max(this.pollingInterval-p,0);if(null===(r=this.logger)||void 0===r||r.debug("Elapsed: %d ms, sleeping for %d ms",p,g),i){const{status:r}=i;if(r&&!(0,n.isHttpRecoverable)(r)){const e=(0,o.httpErrorMessage)(i,"polling request");return null===(u=this.logger)||void 0===u||u.error(e),null===(c=this.errorHandler)||void 0===c||c.call(this,new n.PollingError(e,r)),void(null==t||t())}null===(d=this.logger)||void 0===d||d.warn((0,o.httpErrorMessage)(i,"polling request","will retry")),this.timeoutHandle=setTimeout((()=>{this.poll(e,t)}),g)}else{let t=[],i=null===(h=this.user)||void 0===h?void 0:h.keyId,r=this.listeners.get("patch");if(l){const e=JSON.parse(l);if("data-sync"===e.messageType){switch(e.data.eventType){case s.StreamResponseEventType.patch:r=this.listeners.get("patch");break;case s.StreamResponseEventType.full:r=this.listeners.get("put")}({featureFlags:t,userKeyId:i}=e.data)}}const n=null===(f=null==r?void 0:r.deserializeData)||void 0===f?void 0:f.call(r,t);yield null===(v=null==r?void 0:r.processJson)||void 0===v?void 0:v.call(r,i,n),null==e||e(),this.timeoutHandle=setTimeout((()=>{this.poll()}),g)}}))))}identify(e){return r(this,void 0,void 0,(function*(){return this.user=Object.assign({},e),this.timeoutHandle&&(clearTimeout(this.timeoutHandle),this.timeoutHandle=void 0),new Promise(((e,t)=>{this.poll(e,t)}))}))}close(){this.stop()}start(){this.poll()}stop(){this.timeoutHandle&&(clearTimeout(this.timeoutHandle),this.timeoutHandle=void 0),this.stopped=!0}}},4943:function(e,t,i){var r=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0});const n=i(7449),s=i(8688);t.default=class{constructor(e,t,i,r){this.requests=r,this.headers=(0,s.defaultHeaders)(e,i),this.uri=t.pollingUri}request(e,t){return r(this,void 0,void 0,(function*(){const i=yield this.requests.fetch(e,t),r=yield i.text();return{res:i,body:r}}))}requestData(e,t,i){return r(this,void 0,void 0,(function*(){const r={method:"POST",headers:this.headers,body:JSON.stringify(t)};try{const{res:t,body:s}=yield this.request(`${this.uri}?timestamp=${null!=e?e:0}`,r);if(200!==t.status&&304!==t.status){const e=new n.StreamingError(`Unexpected status code: ${t.status}`,t.status);return i(e,void 0)}return i(void 0,304===t.status?null:s)}catch(e){return i(e,void 0)}}))}}},6100:function(e,t){var i=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.default=class{constructor(e,t,r,n,s,o,a){this.getStoreTimestamp=s,this.listeners=o;const{logger:l,streamingUri:u}=r;this.logger=l,this.socket=n,this.socket.config({sdkKey:e,streamingUri:u,pingInterval:a,user:t,logger:l,getStoreTimestamp:s}),this.listeners.forEach((({deserializeData:e,processJson:t},r)=>{var n;null===(n=this.socket)||void 0===n||n.addListener(r,(n=>i(this,void 0,void 0,(function*(){var i,s;if(null===(i=this.logger)||void 0===i||i.debug(`Received ${r} event`),null==n?void 0:n.data){const{featureFlags:i,userKeyId:r}=n.data,o=e(i);yield t(r,o),null===(s=this.identifyResolve)||void 0===s||s.call(this),this.identifyResolve=void 0}}))))}))}identify(e){var t;return i(this,void 0,void 0,(function*(){return null===(t=this.socket)||void 0===t||t.identify(e),new Promise((e=>this.identifyResolve=e))}))}start(){var e;this.logConnectionStarted(),null===(e=this.socket)||void 0===e||e.connect()}logConnectionStarted(){var e;this.connectionAttemptStartTime=Date.now(),null===(e=this.logger)||void 0===e||e.info(`Stream connection attempt StartTime ${this.connectionAttemptStartTime}`)}close(){this.stop()}stop(){var e;null===(e=this.socket)||void 0===e||e.close(),this.socket=void 0}}},9999:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(607),t),n(i(304),t),n(i(450),t),n(i(8722),t),n(i(3148),t),n(i(4943),t),n(i(1962),t),n(i(6870),t),n(i(6100),t)},1962:(e,t)=>{var i;Object.defineProperty(t,"__esModule",{value:!0}),t.StreamResponseEventType=void 0,function(e){e.full="full",e.patch="patch"}(i||(t.StreamResponseEventType=i={}))},6870:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateConnectionToken=void 0;const i={0:"Q",1:"B",2:"W",3:"S",4:"P",5:"H",6:"D",7:"X",8:"Z",9:"U"};function r(e,t){var r="000000000000"+e;return r.slice(r.length-t).split("").map((e=>i[e])).join("")}t.generateConnectionToken=function(e){e=e.replace(/=*$/,"");const t=Date.now(),i=r(t,t.toString().length),n=Math.max(Math.floor(Math.random()*e.length),2);return`${r(n,3)}${r(i.length,2)}${e.slice(0,n)}${i}${e.slice(n)}`}},7449:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isHttpRecoverable=t.TimeoutError=t.ClientError=t.UnexpectedResponseError=t.StreamingError=t.PollingError=void 0;class i extends Error{constructor(e,t){super(e),this.status=t,this.name="FbPollingError"}}t.PollingError=i;class r extends Error{constructor(e,t){super(e),this.code=t,this.name="FbStreamingError"}}t.StreamingError=r;class n extends Error{constructor(e){super(e),this.name="FbUnexpectedResponseError"}}t.UnexpectedResponseError=n;class s extends Error{constructor(e){super(e),this.name="FbClientError"}}t.ClientError=s;class o extends Error{constructor(e){super(e),this.name="FeatBitTimeoutError"}}t.TimeoutError=o,t.isHttpRecoverable=function(e){return!(e>=400&&e<500)||400===e||408===e||429===e}},3100:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0});const r=i(5192),n=i(7584);class s{constructor(e,t,i){this.kind=e,this.value=t,this.reason=i}static flagNotFound(e){return new s(r.ReasonKinds.FlagNotFound,null,`flag not found: ${e}`)}static matched(e){return new s(r.ReasonKinds.Match,e,"target match")}toEvalEvent(e){var t,i,s;if(this.kind!==r.ReasonKinds.Match)return null;const o=null===(t=this.value)||void 0===t?void 0:t.variations.find((e=>{var t;return e.value===(null===(t=this.value)||void 0===t?void 0:t.variation)}));return new n.EvalEvent(e,null===(i=this.value)||void 0===i?void 0:i.id,o,null===(s=this.value)||void 0===s?void 0:s.sendToExperiment)}}t.default=s},8874:function(e,t,i){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const n=r(i(3100)),s=r(i(2093));t.default=class{constructor(e){this.store=e}evaluate(e){const t=this.store.get(s.default.Flags,e);return t?n.default.matched(t):n.default.flagNotFound(e)}}},3675:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},5192:(e,t)=>{var i;Object.defineProperty(t,"__esModule",{value:!0}),t.ReasonKinds=void 0,function(e){e.ClientNotReady="ClientNotReady",e.Match="Match",e.WrongType="WrongType",e.FlagNotFound="FlagNotFound",e.Error="Error"}(i||(t.ReasonKinds=i={}))},9653:(e,t)=>{var i;Object.defineProperty(t,"__esModule",{value:!0}),t.VariationDataType=void 0,function(e){e.string="string",e.boolean="boolean",e.number="number",e.json="json",e.empty=""}(i||(t.VariationDataType=i={}))},4228:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(9653),t)},9823:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(4228),t),n(i(3100),t),n(i(8874),t),n(i(3675),t),n(i(5192),t)},2305:function(e,t,i){var r=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.DefaultEventProcessor=void 0;const n=i(5381),s=i(7584),o=i(5562),a=i(1218);t.DefaultEventProcessor=class{constructor(e){this.closed=!1;const{logger:t,flushInterval:i,maxEventsInQueue:r}=e;this.logger=t,this.flushInterval=i,this.eventQueue=new a.DefaultEventQueue(r,this.logger),this.eventDispatcher=new n.EventDispatcher(e,this.eventQueue),this.flushLoop()}flushLoop(){this.closed||setTimeout((()=>r(this,void 0,void 0,(function*(){try{yield this.flush()}catch(e){this.logger.error("Unexpected error while flushing events in event processor.",e)}this.flushLoop()}))),this.flushInterval)}flush(){const e=new s.FlushEvent;return this.record(e),e.waitForCompletion()}close(){return r(this,void 0,void 0,(function*(){if(this.closed)return;const e=new s.ShutdownEvent;this.record(e);try{yield e.waitForCompletion()}catch(e){this.logger.error("Event processor shutdown but not complete.")}this.eventQueue.close(),this.closed=!0}))}record(e){return!((0,o.isNullOrUndefined)(e)||!this.eventQueue.addEvent(e)&&(e instanceof s.FlushEvent&&e.complete(),1))}}},1218:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DefaultEventQueue=void 0,t.DefaultEventQueue=class{constructor(e,t){this.capacity=e,this.logger=t,this.closed=!1,this.events=[]}addEvent(e){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(e),!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}}},2580:function(e,t,i){var r=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))},n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DefaultEventSender=void 0;const s=i(8174),o=i(8688),a=i(7449),l=n(i(1773));t.DefaultEventSender=class{constructor(e){const{sdkKey:t,eventsUri:i,platform:r}=e,{info:n,requests:s}=r;this.defaultHeaders=(0,o.defaultHeaders)(t,n),this.eventsUri=i,this.requests=s}send(e,t){return r(this,void 0,void 0,(function*(){const i={status:s.DeliveryStatus.Succeeded},r=Object.assign({},this.defaultHeaders);let n;try{const{status:t}=yield this.requests.fetch(this.eventsUri,{headers:r,body:e,method:"POST"});if(t>=200&&t<=299)return i;if(n=new a.UnexpectedResponseError((0,o.httpErrorMessage)({status:t,message:"some events were dropped"},"event posting")),!(0,a.isHttpRecoverable)(t))return i.status=s.DeliveryStatus.FailedAndMustShutDown,i.error=n,i}catch(e){n=e}return n&&!t?(i.status=s.DeliveryStatus.Failed,i.error=n,i):(yield(0,l.default)(),this.send(e,!1))}))}}},9657:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DefaultEventSerializer=void 0;const r=i(7584);t.DefaultEventSerializer=class{serialize(e){const t=e.map((e=>e instanceof r.EvalEvent||e instanceof r.MetricEvent?e.toPayload():null)).filter((e=>null!==e));return JSON.stringify(t)}}},5381:function(e,t,i){var r=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))},n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.EventDispatcher=void 0;const s=i(8174),o=i(1218),a=i(2580),l=i(7584),u=i(9657),c=n(i(1773));t.EventDispatcher=class{constructor(e,t){this.maxEventPerRequest=50,this.stopped=!1;const{logger:i,maxEventsInQueue:r}=e;this.logger=i,this.buffer=new o.DefaultEventQueue(r,this.logger),this.sender=new a.DefaultEventSender(e),this.serializer=new u.DefaultEventSerializer,this.dispatchLoop(t).then()}dispatchLoop(e){return r(this,void 0,void 0,(function*(){this.logger.debug("Start dispatch loop.");let t=!0;for(;t;)try{const i=e.shift();if(void 0===i){yield(0,c.default)(1e3);continue}i instanceof l.PayloadEvent?this.addEventToBuffer(i):i instanceof l.FlushEvent?yield this.triggerFlush(i):i instanceof l.ShutdownEvent&&(yield this.triggerFlush(i),this.stopped=!0,t=!1)}catch(e){this.logger.error("Unexpected error in event dispatcher.",e)}this.logger.debug("Finish dispatch loop.")}))}addEventToBuffer(e){this.stopped||(this.buffer.addEvent(e)?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(e){return r(this,void 0,void 0,(function*(){if(this.stopped)return void e.complete();if(this.buffer.isEmpty)return e.complete(),void this.logger.debug("Flush empty buffer.");const t=this.buffer.eventsSnapshot;this.buffer.clear();try{yield this.flushEvents(t),this.logger.debug(`${t.length} events has been flushed.`)}catch(e){this.logger.warn("Exception happened when flushing events",e)}e.complete()}))}flushEvents(e){return r(this,void 0,void 0,(function*(){const t=(e=this.getUniqueEvents(e)).length;for(let i=0;i<t;i+=this.maxEventPerRequest){const r=Math.min(this.maxEventPerRequest,t-i),n=e.slice(i,i+r),o=this.serializer.serialize(n),{status:a}=yield this.sender.send(o,!0);a===s.DeliveryStatus.FailedAndMustShutDown&&(this.stopped=!0)}}))}getUniqueEvents(e){const t=[],i=[];for(const r of e)i.includes(r.hash)||(t.push(r),i.push(r.hash));return t}}},8284:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},6735:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},1564:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},8174:(e,t)=>{var i;Object.defineProperty(t,"__esModule",{value:!0}),t.DeliveryStatus=void 0,function(e){e[e.Succeeded=0]="Succeeded",e[e.Failed=1]="Failed",e[e.FailedAndMustShutDown=2]="FailedAndMustShutDown"}(i||(t.DeliveryStatus=i={}))},407:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NullEventProcessor=void 0,t.NullEventProcessor=class{flush(){return Promise.resolve()}close(){return Promise.resolve()}record(e){return!1}}},7584:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.EvalEvent=t.MetricEvent=t.PayloadEvent=t.ShutdownEvent=t.FlushEvent=t.AsyncEvent=void 0;class i{get hash(){return this.timestamp.toString()}constructor(){this.timestamp=(new Date).getTime(),this.isCompletedPromise=new Promise((e=>{this.resolveFn=e}))}waitForCompletion(){return this.isCompletedPromise}complete(){var e;null===(e=this.resolveFn)||void 0===e||e.call(this,this)}}t.AsyncEvent=i,t.FlushEvent=class extends i{},t.ShutdownEvent=class extends i{};class r{constructor(){this.timestamp=(new Date).getTime()}get hash(){return this.timestamp.toString()}toPayload(){}}t.PayloadEvent=r,t.MetricEvent=class extends r{constructor(e,t,i,r){super(),this.user=e,this.eventName=t,this.appType=i,this.metricValue=r}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 e=this.toPayload(),t={user:e.user,metrics:e.metrics.map((e=>Object.assign(Object.assign({},e),{timestamp:void 0})))};return JSON.stringify(t)}},t.EvalEvent=class extends r{constructor(e,t,i,r){super(),this.user=e,this.flagKey=t,this.variation=i,this.sendToExperiment=r}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 e=this.toPayload(),t={user:e.user,variations:e.variations.map((e=>Object.assign(Object.assign({},e),{timestamp:void 0})))};return JSON.stringify(t)}}},4008:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(2305),t),n(i(1218),t),n(i(2580),t),n(i(9657),t),n(i(7584),t),n(i(5381),t),n(i(8284),t),n(i(6735),t),n(i(1564),t),n(i(8174),t),n(i(407),t)},9872:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(8317),t),n(i(3758),t),n(i(9823),t),n(i(4008),t),n(i(7302),t),n(i(1045),t),n(i(9718),t),n(i(8598),t),n(i(9999),t),n(i(2710),t),n(i(1058),t),n(i(7837),t),n(i(1731),t),n(i(7449),t),n(i(70),t),n(i(5717),t),n(i(4881),t),n(i(292),t),n(i(226),t),n(i(4129),t)},5768:function(e,t,i){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.BasicLogger=void 0;const n=r(i(3919)),s={debug:0,info:1,warn:2,error:3,none:4},o=["debug","info","warn","error","none"];class a{static get(){return new a({})}constructor(e){var t,i,r;this.logLevel=null!==(i=s[null!==(t=e.level)&&void 0!==t?t:"info"])&&void 0!==i?i:s.info,this.name=null!==(r=e.name)&&void 0!==r?r:"FeatBit",this.destination=e.destination,this.formatter=e.formatter}tryFormat(...e){var t;try{return this.formatter?null===(t=this.formatter)||void 0===t?void 0:t.call(this,...e):(0,n.default)(...e)}catch(t){return(0,n.default)(...e)}}tryWrite(e){try{this.destination(e)}catch(t){console.error(e)}}log(e,t){if(e>=this.logLevel){const i=`${o[e]}: [${this.name}]`;try{this.destination?this.tryWrite(`${i} ${this.tryFormat(...t)}`):console.error(...t)}catch(e){console.error(...t)}}}error(...e){this.log(s.error,e)}warn(...e){this.log(s.warn,e)}info(...e){this.log(s.info,e)}debug(...e){this.log(s.debug,e)}}t.BasicLogger=a},7973:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},5781:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},7076:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},7689:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SafeLogger=void 0;const r=i(5862),n={error:r.TypeValidators.Function,warn:r.TypeValidators.Function,info:r.TypeValidators.Function,debug:r.TypeValidators.Function};t.SafeLogger=class{constructor(e,t){Object.entries(n).forEach((([t,i])=>{if(!i.is(e[t]))throw new Error(`Provided logger instance must support logger.${t}(...) method`)})),this.logger=e,this.fallback=t}log(e,t){try{this.logger[e](...t)}catch(i){this.fallback[e](...t)}}error(...e){this.log("error",e)}warn(...e){this.log("warn",e)}info(...e){this.log("info",e)}debug(...e){this.log("debug",e)}}},3919:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0});const r=i(5862);function n(e){if("string"==typeof e)return e;if(void 0===e)return"undefined";if(null===e)return"null";if(Object.prototype.hasOwnProperty.call(e,"toString"))try{return e.toString()}catch(e){}if("bigint"==typeof e)return`${e}n`;try{return JSON.stringify(e)}catch(e){return e instanceof TypeError&&e.message.indexOf("circular")>=0?"[Circular]":"[Not Stringifiable]"}}const s={s:e=>n(e),d:e=>function(e){return"symbol"==typeof e?"NaN":"bigint"==typeof e?`${e}n`:String(Number(e))}(e),i:e=>function(e){return"symbol"==typeof e?"NaN":"bigint"==typeof e?`${e}n`:String(parseInt(e,10))}(e),f:e=>function(e){return"symbol"==typeof e?"NaN":String(parseFloat(e))}(e),j:e=>n(e),o:e=>n(e),O:e=>n(e),c:()=>""};t.default=function(...e){var t;const i=e.shift();if(r.TypeValidators.String.is(i)){let r="",o=0;for(;o<i.length;){const n=i.charAt(o);if("%"===n){if(o+1<i.length){const n=i.charAt(o+1);if(n in s&&e.length){const i=e.shift();r+=null===(t=s[n])||void 0===t?void 0:t.call(s,i)}else r+="%"===n?"%":`%${n}`;o+=2}}else r+=n,o+=1}return e.length&&(r.length&&(r+=" "),r+=e.map(n).join(" ")),r}return e.map(n).join(" ")}},7302:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(5768),t),n(i(3919),t),n(i(7973),t),n(i(5781),t),n(i(7076),t),n(i(7689),t)},8311:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=class{constructor(e,t,i){this.sdkKey=e,this.platform=i,this.logger=t.logger,this.offline=t.offline,this.flushInterval=t.flushInterval,this.maxEventsInQueue=t.maxEventsInQueue,this.streamingUri=t.streamingUri,this.pollingUri=t.pollingUri,this.eventsUri=t.eventsUri}}},8222:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},4670:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},6273:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},8758:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},9176:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=class{static optionBelowMinimum(e,t,i){return`Config option "${e}" had invalid value of ${t}, using minimum of ${i} instead`}static unknownOption(e){return`Ignoring unknown config option "${e}"`}static wrongOptionType(e,t,i){return`Config option "${e}" should be of type ${t}, got ${i}, using default value`}static wrongOptionTypeBoolean(e,t){return`Config option "${e}" should be a boolean, got ${t}, converting to boolean`}static partialEndpoint(e){return`You have set custom uris without specifying the ${e} URI; connections may not work properly`}static mandatory(e){return`${e} is mandatory`}static invalidOptionValue(e){return`Invalid option value: ${e}`}static missingKeyInBootstrapValue(e){return`Missing key "${e}" in bootstrap value`}}},595:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UserBuilder=void 0,t.UserBuilder=class{constructor(e){this._keyId="",this._name="",this._custom=[],this._keyId=e}name(e){return this._name=e,this}custom(e,t){var i;return null===(i=this._custom)||void 0===i||i.push({name:e,value:`${t}`}),this}build(){return{name:this._name,keyId:this._keyId,customizedProperties:this._custom}}}},5862:function(e,t,i){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TypeValidators=t.KindValidator=t.DateValidator=t.UserValidator=t.BootstrapValidator=t.NullableBoolean=t.Function=t.StringMatchingRegex=t.NumberWithMinimum=t.TypeArray=t.Type=t.FactoryOrInstance=void 0;const n=r(i(9176));class s{is(e){if(Array.isArray(e))return!1;const t=typeof e;return"function"===t||"object"===t}getType(){return"factory method or object"}}t.FactoryOrInstance=s;class o{constructor(e,t){this.typeName=e,this.typeOf=typeof t}is(e){return!Array.isArray(e)&&typeof e===this.typeOf}getType(){return this.typeName}}t.Type=o;class a{constructor(e,t){this.typeName=e,this.typeOf=typeof t}is(e){return!!Array.isArray(e)&&(!(e.length>0)||e.every((e=>typeof e===this.typeOf)))}getType(){return this.typeName}}t.TypeArray=a;class l extends o{constructor(e){super(`number with minimum value of ${e}`,0),this.min=e}is(e){return typeof e===this.typeOf&&e>=this.min}}t.NumberWithMinimum=l;class u extends o{constructor(e){super(`string matching ${e}`,""),this.expression=e}is(e){return!!e.match(this.expression)}}t.StringMatchingRegex=u;class c{is(e){return"function"==typeof e}getType(){return"function"}}t.Function=c;class d{is(e){return"boolean"==typeof e||null==e}getType(){return"boolean | undefined | null"}}t.NullableBoolean=d,t.BootstrapValidator=class{constructor(){this.messages=[]}is(e){if("object"!=typeof e||null===e)return this.messages.push(n.default.invalidOptionValue("bootstrap")),!1;try{const t=e;for(let e of t){["id","variation"].every((t=>Object.keys(e).includes(t)));const t=Object.keys(e);if(t.includes("id")&&this.messages.push(n.default.missingKeyInBootstrapValue("id")),t.includes("variation")&&this.messages.push(n.default.missingKeyInBootstrapValue("variation")),this.messages.length>0)return!1}}catch(t){return this.messages.push(n.default.wrongOptionType("bootstrap",this.getType(),typeof e)),!1}return!0}getType(){return"IFlagBase[]"}},t.UserValidator=class{constructor(){this.messages=[]}is(e){if("object"!=typeof e||null===e)return this.messages.push(n.default.mandatory("user")),!1;const t=e;return"string"!=typeof t.keyId||""===t.keyId.trim()?(this.messages.push(n.default.mandatory("user.keyId")),!1):"string"==typeof t.name&&""!==t.name.trim()||(this.messages.push(n.default.mandatory("user.name")),!1)}getType(){return"user"}};const h=/^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d\d*)?(Z|[-+]\d\d(:\d\d)?)/;class f{is(e){return"number"==typeof e||"string"==typeof e&&h.test(e)}getType(){return"date"}}t.DateValidator=f;class v extends u{constructor(){super(/^(\w|\.|-)+$/)}is(e){return super.is(e)&&"kind"!==e}}t.KindValidator=v;class p{static createTypeArray(e,t){return new a(e,t)}static numberWithMin(e){return new l(e)}static stringMatchingRegex(e){return new u(e)}}t.TypeValidators=p,p.String=new o("string",""),p.Number=new o("number",0),p.ObjectOrFactory=new s,p.Object=new o("object",{}),p.StringArray=new a("string[]",""),p.Boolean=new o("boolean",!0),p.User=new o("object",{}),p.Bootstrap=new o("object",{}),p.Function=new c,p.Date=new f,p.Kind=new v,p.NullableBoolean=new d},1045:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(8311),t),n(i(8222),t),n(i(4670),t),n(i(6273),t),n(i(8758),t),n(i(9176),t),n(i(595),t),n(i(5862),t)},5309:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},9938:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},5800:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},6510:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},2833:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0});const r=i(5972);t.default=class{get appType(){return"Browser-Client-SDK"}platformData(){return{os:{},name:"Browser",additional:{}}}sdkData(){return{name:r.name,version:r.version,userAgent:`${this.appType}/${r.version}`}}}},9174:function(e,t,i){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.BrowserPlatform=void 0;const n=r(i(2833)),s=i(891),o=r(i(9018));t.BrowserPlatform=class{constructor(e){this.info=new n.default,this.requests=new s.BrowserRequests,this.webSocket=new o.default}}},891:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BrowserRequests=void 0,t.BrowserRequests=class{fetch(e,t={}){return fetch(e,t)}}},9018:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0});const r=i(3046),n=i(6842),s=i(6870),o=i(1962),a=[1e3,3e3,5e3,7e3,11e3,13e3,3e4,6e4];t.default=(0,r.Emits)(class{constructor(){this.retryCounter=0,this.closed=!1,this._config={},this.emitter=new n.EventEmitter}identify(e){this._config.user=e,this.doDataSync()}connect(){var e,t,i,r;let n=this;const a=Date.now(),l=this._config.streamingUri.replace(/^http/,"ws")+`?type=client&token=${(0,s.generateConnectionToken)(this._config.sdkKey)}`;this.ws=new WebSocket(l),null===(e=n.ws)||void 0===e||e.addEventListener("open",(function(e){n._config.logger.info(`WebSocket connection succeeded, connection time: ${Date.now()-a} ms`),n.doDataSync(),n.sendPingMessage()})),null===(t=n.ws)||void 0===t||t.addEventListener("close",(function(e){n._config.logger.warn("WebSocket closed"),4003!==e.code&&n.reconnect()})),null===(i=n.ws)||void 0===i||i.addEventListener("error",(function(e){n._config.logger.debug("error")})),null===(r=n.ws)||void 0===r||r.addEventListener("message",(function(e){const t=JSON.parse(e.data);if("data-sync"===t.messageType){if(t.data.userKeyId!==n._config.user.keyId)return;switch(t.data.eventType){case o.StreamResponseEventType.patch:n.emitter.emit("patch",t);break;case o.StreamResponseEventType.full:n.emitter.emit("put",t)}}}))}close(){var e;this.closed=!0,null===(e=this.ws)||void 0===e||e.close(4003,"The client is closed by user"),this.ws=void 0}config(e){e.emitter&&(this.emitter=e.emitter),this._config=Object.assign({},e)}sendPingMessage(){const e={messageType:"ping",data:null};setTimeout((()=>{var t;try{(null===(t=this.ws)||void 0===t?void 0:t.readyState)===WebSocket.OPEN?(this._config.logger.debug("sending ping"),this.ws.send(JSON.stringify(e)),this.sendPingMessage()):this._config.logger.debug(`socket closed at ${new Date}`)}catch(e){this._config.logger.debug(e)}}),this._config.pingInterval)}doDataSync(){var e,t;const i={messageType:"data-sync",data:{timestamp:this._config.getStoreTimestamp(),user:this._config.user}};try{(null===(e=this.ws)||void 0===e?void 0:e.readyState)===WebSocket.OPEN?(this._config.logger.debug("requesting data"),null===(t=this.ws)||void 0===t||t.send(JSON.stringify(i))):this._config.logger.error("not requesting data because socket not open")}catch(e){this._config.logger.debug(e)}}reconnect(){if(!this.closed){this.ws=void 0;const e=a[Math.min(this.retryCounter++,a.length-1)];this._config.logger.info(`The client will try to reconnect in ${e} milliseconds.`),setTimeout((()=>{this._config.logger.info(`The client is trying to reconnect, flag evaluation results may be stale until reconnected, waited for: ${e} milliseconds`),this.connect()}),e)}}})},8322:function(e,t,i){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const n=i(4129),s=i(5768),o=i(6842),a=i(7689),l=i(3046),u=i(9174),c=r(i(6940));class d extends n.FbClientCore{constructor(e,t=void 0){const i=new s.BasicLogger({level:"none",destination:console.log}),r=e.logger?new a.SafeLogger(e.logger,i):i,n=new o.EventEmitter(r);let{store:l}=e;l||(l=new c.default(e)),super(Object.assign(Object.assign({},e),{logger:r,store:l}),null!=t?t:new u.BrowserPlatform(Object.assign(Object.assign({},e),{logger:r})),{onError:e=>{n.listenerCount("error")&&n.emit("error",e)},onFailed:e=>{n.emit("failed",e)},onReady:()=>{n.emit("ready")},onUpdate:e=>{n.emit("update",[e]),e.forEach((e=>n.emit(`update:${e}`,e)))},hasEventListeners:()=>n.eventNames().some((e=>"update"===e||"string"==typeof e&&e.startsWith("update:")))}),this.emitter=n}}t.default=(0,l.Emits)(d)},6940:function(e,t,i){var r=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0});const n=i(443),s=i(6860),o=i(5067);class a extends s.BaseStore{constructor(e){super(),this.logger=e.logger}close(){}get description(){return"local-storage-store"}saveUser(){return r(this,void 0,void 0,(function*(){localStorage.setItem(n.CurrentUserStorageKey,(0,o.serializeUser)(this._user))}))}dumpStoreToStorage(){return r(this,void 0,void 0,(function*(){const e=`${n.StoreStorageKey}-${this._user.keyId}`;localStorage.setItem(e,JSON.stringify(this.store))}))}loadStoreFromStorage(){return r(this,void 0,void 0,(function*(){const e=`${n.StoreStorageKey}-${this._user.keyId}`,t=localStorage.getItem(e);let i=null;try{t&&t.trim().length>0&&(i=JSON.parse(t))}catch(t){this.logger.error(`error while loading local data store: ${e}`,t)}this.store=i||{flags:{},version:0}}))}}t.default=a},9718:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.BrowserWebSocket=void 0,n(i(5309),t),n(i(5800),t),n(i(9938),t),n(i(6510),t),n(i(2894),t),n(i(891),t);const o=s(i(9018));t.BrowserWebSocket=o.default},2894:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},6860:function(e,t){var i=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.BaseStore=void 0,t.BaseStore=class{constructor(){this.store={},this.initCalled=!1,this._user={}}identify(e){return i(this,void 0,void 0,(function*(){this._user=Object.assign({},e),yield this.saveUser(),yield this.loadStoreFromStorage()}))}get user(){return this._user}addItem(e,t,r){return i(this,void 0,void 0,(function*(){let i=this.store[e.namespace];if(i||(i={},this.store[e.namespace]=i),Object.hasOwnProperty.call(i,t)){const e=i[t];(!e||e.version<=r.version)&&(i[t]=r)}else i[t]=r;r.version>this.store.version&&(this.store.version=r.version),yield this.dumpStoreToStorage()}))}get(e,t){const i=this.store[e.namespace];if(i&&Object.prototype.hasOwnProperty.call(i,t)){const e=i[t];if(e)return e}return null}all(e){var t;const i={},r=null!==(t=this.store[e.namespace])&&void 0!==t?t:{};return Object.entries(r).forEach((([e,t])=>{t&&(i[e]=t)})),[i,this.store.version]}init(e){return i(this,void 0,void 0,(function*(){this.store=e,Object.keys(e).map((t=>{Object.entries(e[t]).forEach((([e,t])=>{const i=t;i.version>this.store.version&&(this.store.version=i.version)}))})),yield this.dumpStoreToStorage(),this.initCalled=!0}))}upsert(e,t){return i(this,void 0,void 0,(function*(){yield this.addItem(e,t.key,t)}))}initialized(){return this.initCalled}close(){}get version(){return this.store.version}get description(){return""}saveUser(){return i(this,void 0,void 0,(function*(){}))}loadStoreFromStorage(){return i(this,void 0,void 0,(function*(){}))}dumpStoreToStorage(){return i(this,void 0,void 0,(function*(){}))}}},2093:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});class i{}i.Flags={namespace:"flags"},t.default=i},356:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},7783:function(e,t,i){var r=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0});const n=i(443),s=i(6860);class o extends s.BaseStore{constructor(){super(),this.allStores={}}close(){}get description(){return"in-memory-store"}saveUser(){return r(this,void 0,void 0,(function*(){}))}dumpStoreToStorage(){return r(this,void 0,void 0,(function*(){const e=`${n.StoreStorageKey}-${this._user.keyId}`;this.allStores[e]=Object.assign({},this.store)}))}loadStoreFromStorage(){var e;return r(this,void 0,void 0,(function*(){const t=`${n.StoreStorageKey}-${this._user.keyId}`;this.store=null!==(e=this.allStores[t])&&void 0!==e?e:{flags:{},version:0}}))}}t.default=o},8598:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(2093),t),n(i(356),t),n(i(7783),t),n(i(4426),t),n(i(443),t),n(i(6860),t)},4426:function(e,t,i){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.deserializePatch=t.deserializeAll=void 0;const n=r(i(2093));t.deserializeAll=function(e){const t={[n.default.Flags.namespace]:{}};return(null==e?void 0:e.length)&&(t[n.default.Flags.namespace]=e.reduce(((e,t)=>(e[t.id]=Object.assign(Object.assign({},t),{version:t.timestamp||0,key:t.id,variations:t.variationOptions}),e)),{})),t},t.deserializePatch=function(e){return[...(null==e?void 0:e.map((e=>({data:Object.assign(Object.assign({},e),{version:e.timestamp,key:e.id,variations:e.variationOptions}),kind:n.default.Flags}))))||[]]}},443:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CurrentUserStorageKey=t.StoreStorageKey=void 0,t.StoreStorageKey="fb-datastore",t.CurrentUserStorageKey="fb-user"},3046:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Emits=void 0,t.Emits=function(e){return class extends e{on(e,t,i){return this.emitter.on(e,t,i),this}addListener(e,t,i){return this.emitter.addListener(e,t,i),this}once(e,t,i){return this.emitter.once(e,t,i),this}removeListener(e,t,i){return this.emitter.removeListener(e,t,i),this}off(e,t,i){return this.emitter.off(e,t,i),this}removeAllListeners(e){return this.emitter.removeAllListeners(e),this}listeners(e){return this.emitter.listeners(e)}emit(e,...t){return this.emitter.emit(e,t),this}listenerCount(e){return this.emitter.listenerCount(e)}prependListener(e,t,i){return this.emitter.prependListener(e,t,i),this}prependOnceListener(e,t,i){return this.emitter.prependOnceListener(e,t,i),this}eventNames(){return this.emitter.eventNames()}maybeReportError(e){return this.emitter.maybeReportError(e),this}}}},6842:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.EventEmitter=void 0,t.EventEmitter=class{constructor(e){this.logger=e,this.events={}}listeningTo(e){return!!this.events[e]}on(e,t,i){return this.events[e]=this.events[e]||[],this.events[e]=this.events[e].concat({handler:t,context:i}),this}addListener(e,t,i){return this.on(e,t,i)}once(e,t,i){const r=(...n)=>{this.off(e,r,i),t.apply(i,n)};return this.on(e,r,i)}off(e,t,i){if(!this.events[e])return this;for(let r=0;r<this.events[e].length;r++)this.events[e][r].handler===t&&this.events[e][r].context===i&&(this.events[e]=this.events[e].slice(0,r).concat(this.events[e].slice(r+1)));return this}removeListener(e,t,i){return this.off(e,t,i)}removeAllListeners(e){return e?delete this.events[e]:this.events={},this}listeners(e){return this.events[e]?this.events[e].map((e=>e.handler)):[]}emit(e,...t){if(!this.events[e])return this;const i=[...this.events[e]];for(let e=0;e<i.length;e++)i[e].handler.apply(i[e].context,Array.prototype.slice.call(arguments,1));return this}listenerCount(e){return this.events[e]?this.events[e].length:0}prependListener(e,t,i){return this.events[e]=this.events[e]||[],this.events[e]=[{handler:t,context:i},...this.events[e]],this}prependOnceListener(e,t,i){const r=(...n)=>{this.off(e,r,i),t.apply(i,n)};return this.prependListener(e,r,i)}eventNames(){return Object.keys(this.events)}maybeReportError(e){var t;return e?(this.listeningTo("error")?this.emit("error",e):null===(t=this.logger)||void 0===t||t.error(e),this):this}}},1142:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ValueConverters=void 0;class i{static bool(e){return"TRUE"===(null==e?void 0:e.toUpperCase())?i.success(!0):"FALSE"===(null==e?void 0:e.toUpperCase())?i.success(!1):i.error()}static number(e){const t=Number(e);return Number.isNaN(t)?i.error():i.success(t)}static string(e){return i.success(e)}static json(e){try{const t=JSON.parse(e);return i.success(t)}catch(e){return i.error()}}static success(e){return{isSucceeded:!0,value:e}}static error(){return{isSucceeded:!1}}}t.ValueConverters=i},7266:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},1624:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.canonicalizeUri=void 0,t.canonicalizeUri=function(e){return e.replace(/\/+$/,"")}},9183:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.debounce=void 0,t.debounce=(e,t=5e3)=>{let i;return(...r)=>{clearTimeout(i),i=setTimeout((()=>{e(...r)}),t)}}},8688:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.httpErrorMessage=t.defaultHeaders=void 0,t.defaultHeaders=function(e,t){const{userAgent:i,version:r}=t.sdkData();return{"Content-Type":"application/json","X-User-Agent":null!=i?i:`${t.appType}/${r}`,Authorization:e}},t.httpErrorMessage=function(e,t,i){let r;return r=e.status?`error ${e.status}${401===e.status?" (invalid SDK key)":""}`:`I/O error (${e.message||e})`,`Received ${r} for ${t} - ${null!=i?i:"giving up permanently"}`}},2710:function(e,t,i){var r=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var n=Object.getOwnPropertyDescriptor(t,i);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,n)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),n=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),n(i(5562),t),n(i(1773),t),n(i(1142),t),n(i(7266),t),n(i(5067),t),n(i(9183),t)},5562:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isNullOrUndefined=void 0,t.isNullOrUndefined=function(e){return null==e}},5067:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.serializeUser=void 0,t.serializeUser=function(e){var t;return e?`${e.keyId},${e.name},${null===(t=e.customizedProperties)||void 0===t?void 0:t.sort(((e,t)=>{const i=e.name.toLowerCase(),r=t.name.toLowerCase();return i<r?-1:i>r?1:0})).map((e=>`${e.name}:${e.value}`)).join(",")}`:""}},1773:function(e,t){var i=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))((function(n,s){function o(e){try{l(r.next(e))}catch(e){s(e)}}function a(e){try{l(r.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,a)}l((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.default=(e=1e3)=>i(void 0,void 0,void 0,(function*(){return new Promise((t=>{setTimeout(t,e)}))}))},5972:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.name=t.version=void 0,t.version="3.0.13",t.name="@featbit/js-client-sdk"}},t={};return function i(r){var n=t[r];if(void 0!==n)return n.exports;var s=t[r]={exports:{}};return e[r].call(s.exports,s,s.exports,i),s.exports}(9872)})()));
2
- //# sourceMappingURL=featbit-js-client-sdk-3.0.13.js.map