@featbit/js-client-sdk 3.0.14 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/Configuration.d.ts +1 -0
- package/dist/esm/Configuration.d.ts.map +1 -1
- package/dist/esm/Configuration.js +3 -0
- package/dist/esm/Configuration.js.map +1 -1
- package/dist/esm/FbClientBuilder.d.ts +4 -0
- package/dist/esm/FbClientBuilder.d.ts.map +1 -1
- package/dist/esm/FbClientBuilder.js +7 -0
- package/dist/esm/FbClientBuilder.js.map +1 -1
- package/dist/esm/FbClientCore.d.ts +6 -5
- package/dist/esm/FbClientCore.d.ts.map +1 -1
- package/dist/esm/FbClientCore.js +36 -5
- package/dist/esm/FbClientCore.js.map +1 -1
- package/dist/esm/IFbClientCore.d.ts +7 -6
- package/dist/esm/IFbClientCore.d.ts.map +1 -1
- package/dist/esm/options/IOptions.d.ts +5 -0
- package/dist/esm/options/IOptions.d.ts.map +1 -1
- package/dist/esm/options/IValidatedOptions.d.ts +1 -0
- package/dist/esm/options/IValidatedOptions.d.ts.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.d.ts.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/umd/featbit-js-client-sdk-4.1.0.js +2 -0
- package/dist/umd/featbit-js-client-sdk-4.1.0.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 +1 -1
- package/src/Configuration.ts +5 -0
- package/src/FbClientBuilder.ts +8 -0
- package/src/FbClientCore.ts +40 -9
- package/src/IFbClientCore.ts +11 -10
- package/src/options/IOptions.ts +6 -0
- package/src/options/IValidatedOptions.ts +1 -0
- package/src/version.ts +1 -1
- package/dist/umd/featbit-js-client-sdk-3.0.14.js +0 -2
- package/dist/umd/featbit-js-client-sdk-3.0.14.js.map +0 -1
package/package.json
CHANGED
package/src/Configuration.ts
CHANGED
|
@@ -39,6 +39,7 @@ const validations: Record<string, TypeValidator> = {
|
|
|
39
39
|
dataSynchronizer: TypeValidators.ObjectOrFactory,
|
|
40
40
|
flushInterval: TypeValidators.Number,
|
|
41
41
|
maxEventsInQueue: TypeValidators.Number,
|
|
42
|
+
disableEvents: TypeValidators.Boolean,
|
|
42
43
|
pollingInterval: TypeValidators.Number,
|
|
43
44
|
offline: TypeValidators.Boolean,
|
|
44
45
|
dataSyncMode: TypeValidators.String,
|
|
@@ -60,6 +61,7 @@ export const defaultValues: IValidatedOptions = {
|
|
|
60
61
|
webSocketPingInterval: 18 * 1000,
|
|
61
62
|
flushInterval: 2000,
|
|
62
63
|
maxEventsInQueue: 10000,
|
|
64
|
+
disableEvents: false,
|
|
63
65
|
pollingInterval: 30000,
|
|
64
66
|
offline: false,
|
|
65
67
|
store: (options: IOptions) => new InMemoryStore(),
|
|
@@ -149,6 +151,8 @@ export default class Configuration {
|
|
|
149
151
|
|
|
150
152
|
public readonly maxEventsInQueue: number;
|
|
151
153
|
|
|
154
|
+
public readonly disableEvents: boolean;
|
|
155
|
+
|
|
152
156
|
public readonly pollingInterval: number;
|
|
153
157
|
|
|
154
158
|
public readonly offline: boolean;
|
|
@@ -195,6 +199,7 @@ export default class Configuration {
|
|
|
195
199
|
|
|
196
200
|
this.flushInterval = validatedOptions.flushInterval;
|
|
197
201
|
this.maxEventsInQueue = validatedOptions.maxEventsInQueue;
|
|
202
|
+
this.disableEvents = validatedOptions.disableEvents;
|
|
198
203
|
this.pollingInterval = validatedOptions.pollingInterval;
|
|
199
204
|
|
|
200
205
|
this.offline = validatedOptions.offline;
|
package/src/FbClientBuilder.ts
CHANGED
|
@@ -126,6 +126,14 @@ export class FbClientBuilder {
|
|
|
126
126
|
return this;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
+
/**
|
|
130
|
+
* Refer to {@link IOptions.disableEvents}.
|
|
131
|
+
*/
|
|
132
|
+
disableEvents(param: boolean): FbClientBuilder {
|
|
133
|
+
this._options.disableEvents = param;
|
|
134
|
+
return this;
|
|
135
|
+
}
|
|
136
|
+
|
|
129
137
|
/**
|
|
130
138
|
* Refer to {@link IOptions.logger}.
|
|
131
139
|
*/
|
package/src/FbClientCore.ts
CHANGED
|
@@ -26,6 +26,7 @@ import { MetricEvent } from "./events/event";
|
|
|
26
26
|
import { DataSyncModeEnum } from "./data-sync/DataSyncMode";
|
|
27
27
|
import { IUser } from "./options/IUser";
|
|
28
28
|
import { UserValidator } from "./options/Validators";
|
|
29
|
+
import { FlagValue, VariationDataType } from "./evaluation";
|
|
29
30
|
|
|
30
31
|
enum ClientState {
|
|
31
32
|
Initializing,
|
|
@@ -111,13 +112,21 @@ export class FbClientCore implements IFbClientCore {
|
|
|
111
112
|
// use bootstrap provider to populate store
|
|
112
113
|
await this.config.bootstrapProvider.populate(this.config.user.keyId, this.dataSourceUpdates);
|
|
113
114
|
|
|
115
|
+
if (this.config.disableEvents || this.config.offline) {
|
|
116
|
+
this.eventProcessor = new NullEventProcessor();
|
|
117
|
+
}
|
|
118
|
+
|
|
114
119
|
if (this.config.offline) {
|
|
115
120
|
this.eventProcessor = new NullEventProcessor();
|
|
116
121
|
this.dataSynchronizer = new NullDataSynchronizer();
|
|
117
122
|
|
|
118
123
|
this.initSuccess();
|
|
119
124
|
} else {
|
|
120
|
-
this.
|
|
125
|
+
if (this.config.disableEvents) {
|
|
126
|
+
this.eventProcessor = new NullEventProcessor();
|
|
127
|
+
} else {
|
|
128
|
+
this.eventProcessor = new DefaultEventProcessor(clientContext);
|
|
129
|
+
}
|
|
121
130
|
|
|
122
131
|
const listeners = createStreamListeners(this.dataSourceUpdates, this.logger, {
|
|
123
132
|
put: () => this.initSuccess(),
|
|
@@ -264,11 +273,11 @@ export class FbClientCore implements IFbClientCore {
|
|
|
264
273
|
return this.evaluateCore(key, defaultValue, ValueConverters.bool);
|
|
265
274
|
}
|
|
266
275
|
|
|
267
|
-
jsonVariation(key: string, defaultValue:
|
|
276
|
+
jsonVariation(key: string, defaultValue: FlagValue): FlagValue {
|
|
268
277
|
return this.evaluateCore(key, defaultValue, ValueConverters.json).value!;
|
|
269
278
|
}
|
|
270
279
|
|
|
271
|
-
jsonVariationDetail(key: string, defaultValue:
|
|
280
|
+
jsonVariationDetail(key: string, defaultValue: FlagValue): IEvalDetail<FlagValue> {
|
|
272
281
|
return this.evaluateCore(key, defaultValue, ValueConverters.json);
|
|
273
282
|
}
|
|
274
283
|
|
|
@@ -288,12 +297,12 @@ export class FbClientCore implements IFbClientCore {
|
|
|
288
297
|
return this.evaluateCore(key, defaultValue, ValueConverters.string);
|
|
289
298
|
}
|
|
290
299
|
|
|
291
|
-
variation(key: string, defaultValue:
|
|
292
|
-
return this.evaluateCore(key, defaultValue
|
|
300
|
+
variation(key: string, defaultValue: FlagValue): FlagValue {
|
|
301
|
+
return this.evaluateCore(key, defaultValue).value!;
|
|
293
302
|
}
|
|
294
303
|
|
|
295
|
-
variationDetail(key: string, defaultValue:
|
|
296
|
-
return this.evaluateCore(key, defaultValue
|
|
304
|
+
variationDetail(key: string, defaultValue: FlagValue): IEvalDetail<FlagValue> {
|
|
305
|
+
return this.evaluateCore(key, defaultValue);
|
|
297
306
|
}
|
|
298
307
|
|
|
299
308
|
getAllVariations(): Promise<IEvalDetail<string>[]> {
|
|
@@ -342,7 +351,7 @@ export class FbClientCore implements IFbClientCore {
|
|
|
342
351
|
evaluateCore<TValue>(
|
|
343
352
|
flagKey: string,
|
|
344
353
|
defaultValue: TValue,
|
|
345
|
-
typeConverter
|
|
354
|
+
typeConverter?: (value: string) => IConvertResult<TValue>
|
|
346
355
|
): IEvalDetail<TValue> {
|
|
347
356
|
const context = Context.fromUser(this.config.user);
|
|
348
357
|
if (!context.valid) {
|
|
@@ -374,7 +383,29 @@ export class FbClientCore implements IFbClientCore {
|
|
|
374
383
|
this.eventProcessor!.record(evalResult.toEvalEvent(this.config.user));
|
|
375
384
|
}
|
|
376
385
|
|
|
377
|
-
|
|
386
|
+
let converter: (value: string) => IConvertResult<any>;
|
|
387
|
+
if (!typeConverter) {
|
|
388
|
+
switch (evalResult.value!.variationType) {
|
|
389
|
+
case VariationDataType.boolean:
|
|
390
|
+
converter = ValueConverters.bool;
|
|
391
|
+
break;
|
|
392
|
+
case VariationDataType.number:
|
|
393
|
+
converter = ValueConverters.number;
|
|
394
|
+
break;
|
|
395
|
+
case VariationDataType.json:
|
|
396
|
+
converter = ValueConverters.json;
|
|
397
|
+
break;
|
|
398
|
+
case VariationDataType.string:
|
|
399
|
+
converter = ValueConverters.string;
|
|
400
|
+
break;
|
|
401
|
+
default:
|
|
402
|
+
converter = ValueConverters.string;
|
|
403
|
+
}
|
|
404
|
+
} else {
|
|
405
|
+
converter = typeConverter;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
const {isSucceeded, value} = converter(evalResult.value!.variation!);
|
|
378
409
|
return isSucceeded
|
|
379
410
|
? {flagKey, kind: evalResult.kind, reason: evalResult.reason, value}
|
|
380
411
|
: {flagKey, kind: ReasonKinds.WrongType, reason: 'type mismatch', value: defaultValue};
|
package/src/IFbClientCore.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { IEvalDetail } from "./evaluation/IEvalDetail";
|
|
2
2
|
import { IConvertResult } from "./utils/ValueConverters";
|
|
3
3
|
import { IUser } from "./options";
|
|
4
|
+
import { FlagValue } from "./evaluation";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* The FeatBit SDK client object.
|
|
@@ -168,8 +169,8 @@ export interface IFbClientCore {
|
|
|
168
169
|
*/
|
|
169
170
|
jsonVariation(
|
|
170
171
|
key: string,
|
|
171
|
-
defaultValue:
|
|
172
|
-
):
|
|
172
|
+
defaultValue: FlagValue
|
|
173
|
+
): FlagValue;
|
|
173
174
|
|
|
174
175
|
/**
|
|
175
176
|
* Calculates the JSON value of a feature flag for a given user, and returns an object that
|
|
@@ -188,8 +189,8 @@ export interface IFbClientCore {
|
|
|
188
189
|
*/
|
|
189
190
|
jsonVariationDetail(
|
|
190
191
|
key: string,
|
|
191
|
-
defaultValue:
|
|
192
|
-
): IEvalDetail<
|
|
192
|
+
defaultValue: FlagValue
|
|
193
|
+
): IEvalDetail<FlagValue>;
|
|
193
194
|
|
|
194
195
|
/**
|
|
195
196
|
* Calculates the string value of a feature flag for a given user.
|
|
@@ -207,8 +208,8 @@ export interface IFbClientCore {
|
|
|
207
208
|
*/
|
|
208
209
|
variation(
|
|
209
210
|
key: string,
|
|
210
|
-
defaultValue:
|
|
211
|
-
):
|
|
211
|
+
defaultValue: FlagValue
|
|
212
|
+
): FlagValue;
|
|
212
213
|
|
|
213
214
|
/**
|
|
214
215
|
* Calculates the string value of a feature flag for a given user, and returns an object that
|
|
@@ -227,8 +228,8 @@ export interface IFbClientCore {
|
|
|
227
228
|
*/
|
|
228
229
|
variationDetail(
|
|
229
230
|
key: string,
|
|
230
|
-
defaultValue:
|
|
231
|
-
): IEvalDetail<
|
|
231
|
+
defaultValue: FlagValue
|
|
232
|
+
): IEvalDetail<FlagValue>;
|
|
232
233
|
|
|
233
234
|
/**
|
|
234
235
|
* This method is exposed only for testing purpose, please DO NOT USE IT
|
|
@@ -244,14 +245,14 @@ export interface IFbClientCore {
|
|
|
244
245
|
* @param defaultValue
|
|
245
246
|
* The default value to return if the flag cannot be evaluated.
|
|
246
247
|
* @param typeConverter
|
|
247
|
-
* the function to convert result
|
|
248
|
+
* the function to convert result, if null, the value returned will have the same type of the flag defined in FeatBit
|
|
248
249
|
*
|
|
249
250
|
* @returns {@link IEvalDetail} object describing the way the value was determined.
|
|
250
251
|
*/
|
|
251
252
|
evaluateCore<TValue>(
|
|
252
253
|
flagKey: string,
|
|
253
254
|
defaultValue: TValue,
|
|
254
|
-
typeConverter
|
|
255
|
+
typeConverter?: (value: string) => IConvertResult<TValue>
|
|
255
256
|
): IEvalDetail<TValue>;
|
|
256
257
|
|
|
257
258
|
/**
|
package/src/options/IOptions.ts
CHANGED
|
@@ -75,6 +75,12 @@ export interface IOptions {
|
|
|
75
75
|
*/
|
|
76
76
|
maxEventsInQueue?: number;
|
|
77
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Whether sending events should be disabled.
|
|
80
|
+
* defaults to false
|
|
81
|
+
*/
|
|
82
|
+
disableEvents?: boolean;
|
|
83
|
+
|
|
78
84
|
/**
|
|
79
85
|
* Configures a logger for warnings and errors generated by the SDK.
|
|
80
86
|
*
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = "
|
|
1
|
+
export const version = "4.1.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.14",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.14.js.map
|