@featbit/js-client-sdk 3.0.9 → 3.0.11

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@featbit/js-client-sdk",
3
- "version": "3.0.9",
3
+ "version": "3.0.11",
4
4
  "description": "https://github.com/featbit/featbit-js-client-sdk",
5
5
  "main": "./dist/esm/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -164,12 +164,23 @@ export class FbClientCore implements IFbClientCore {
164
164
  return;
165
165
  }
166
166
 
167
+ const [oldFlags, oldVersion] = this.store!.all(DataKinds.Flags);
168
+ const oldData = {
169
+ flags: {...oldFlags},
170
+ version: oldVersion
171
+ }
167
172
  this.config.user = user;
168
173
  await this.store!.identify(user);
169
174
  this.dataSynchronizer!.identify(user);
170
- const [ flags ] = this.store!.all(DataKinds.Flags);
171
- if (Object.keys(flags).length === 0) {
175
+ const [ newFlags, newVersion ] = this.store!.all(DataKinds.Flags);
176
+ const newData = {
177
+ flags: {...newFlags},
178
+ version: newVersion
179
+ }
180
+ if (Object.keys(newFlags).length === 0) {
172
181
  await this.config.bootstrapProvider.populate(user.keyId, this.dataSourceUpdates!);
182
+ } else {
183
+ this.dataSourceUpdates?.checkUpdates(oldData, newData);
173
184
  }
174
185
  }
175
186
 
@@ -57,6 +57,26 @@ export default class DataSourceUpdates implements IDataSourceUpdates {
57
57
  }
58
58
  }
59
59
 
60
+ checkUpdates(oldData: IStoreDataStorage, newData: IStoreDataStorage, callback?: () => void): void {
61
+ const checkForChanges = this.hasEventListeners();
62
+
63
+ if (!checkForChanges) {
64
+ return;
65
+ }
66
+
67
+ const updatedKeys = Object.keys(newData)
68
+ .flatMap((namespace) => {
69
+ const oldDataForKind = oldData?.[namespace] || {};
70
+ const newDataForKind = newData[namespace];
71
+ const mergedData = {...oldDataForKind, ...newDataForKind};
72
+ return Object.keys(mergedData)
73
+ .filter((key: string) => this.isUpdated(oldDataForKind && oldDataForKind[key], newDataForKind && newDataForKind[key]));
74
+ });
75
+ updatedKeys.length > 0 && this.onChange(updatedKeys);
76
+
77
+ callback?.();
78
+ }
79
+
60
80
  upsert(userKeyId: string, kind: IDataKind, data: IKeyedStoreItem, callback: () => void): void {
61
81
  if (userKeyId !== this.store.user.keyId) {
62
82
  callback?.();
@@ -84,6 +104,14 @@ export default class DataSourceUpdates implements IDataSourceUpdates {
84
104
  }
85
105
 
86
106
  private isUpdated(oldData?: IStoreItem, newData?: IStoreItem): boolean {
87
- return !oldData || !newData || newData.version > oldData.version
107
+ if (!oldData && !newData) {
108
+ return false;
109
+ }
110
+
111
+ if (!oldData || !newData) {
112
+ return true;
113
+ }
114
+
115
+ return newData.version >= oldData.version && newData.variation !== oldData.variation;
88
116
  }
89
117
  }
@@ -32,7 +32,10 @@ export class BaseStore implements IStore {
32
32
  }
33
33
  if (Object.hasOwnProperty.call(items, key)) {
34
34
  const old = items[key];
35
- if (!old || old.version < item.version) {
35
+ // we use <= here, the reason is that when a segment is changed, the upstream service would push the flag
36
+ // to client SDK with flag timestamp (version) instead of segment timestamp, so to ensure that the new flag value
37
+ // is saved, we need to use <=
38
+ if (!old || old.version <= item.version) {
36
39
  items[key] = item;
37
40
  }
38
41
  } else {
@@ -25,6 +25,25 @@ export interface IDataSourceUpdates {
25
25
  */
26
26
  init(userKeyId: string, allData: IStoreDataStorage, callback?: () => void): void;
27
27
 
28
+ /**
29
+ * Compare old and new data, check if any update exists
30
+ * If update exists, send onUpdate events
31
+ *
32
+ * @param oldData
33
+ * An object in which each key is the "namespace" of a collection (e.g. `"features"`) and
34
+ * the value is an object that maps keys to entities. The actual type of this parameter is
35
+ * `interfaces.FullDataSet<VersionedData>`.
36
+ *
37
+ * @param newData
38
+ * An object in which each key is the "namespace" of a collection (e.g. `"features"`) and
39
+ * the value is an object that maps keys to entities. The actual type of this parameter is
40
+ * `interfaces.FullDataSet<VersionedData>`.
41
+ *
42
+ * @param callback
43
+ * Will be called when the store has been initialized.
44
+ */
45
+ checkUpdates(oldData: IStoreDataStorage, newData: IStoreDataStorage, callback?: () => void): void;
46
+
28
47
  /**
29
48
  * Updates or inserts an item in the specified collection. For updates, the object will only be
30
49
  * updated if the existing version is less than the new version.
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "3.0.9"; export const name = "@featbit/js-client-sdk";
1
+ export const version = "3.0.11"; 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),O=i(7584),w=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===w.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){return r(this,void 0,void 0,(function*(){const t=new P.UserValidator;if(!t.is(e))return void t.messages.forEach((e=>{var t;null===(t=this.logger)||void 0===t||t.warn(e)}));this.config.user=e,yield this.store.identify(e),this.dataSynchronizer.identify(e);const[i]=this.store.all(h.default.Flags);0===Object.keys(i).length&&(yield this.config.bootstrapProvider.populate(e.keyId,this.dataSourceUpdates))}))}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 O.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){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);o({flags:e,version:t})}else o()}upsert(e,t,i,n){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()}));o?a(this.store.get(t,s)||void 0):a()}isUpdated(e,t){return!e||!t||t.version>e.version}}},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=t.createPatchListener=t.createPutListener=void 0;const n=i(4426);t.createPutListener=(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"),e.init(n,r,i)}))}),t.createPatchListener=(e,t,i=(()=>{}))=>({deserializeData:n.deserializePatch,processJson:(n,s)=>r(void 0,void 0,void 0,(function*(){0!==(null==s?void 0:s.length)?null==s||s.forEach((r=>{null==t||t.debug(`Updating ${r.data.key} in ${r.kind.namespace}`),e.upsert(n,r.kind,r.data,i)})):null==i||i()}))}),t.createStreamListeners=(e,i,r)=>{const n=new Map;return n.set("put",(0,t.createPutListener)(e,i,null==r?void 0:r.put)),n.set("patch",(0,t.createPatchListener)(e,i,null==r?void 0:r.patch)),n}},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:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NullDataSynchronizer=void 0,t.NullDataSynchronizer=class{close(){}start(){}stop(){}identify(){}}},3148:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0});const r=i(7449),n=i(1962),s=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(){var e;if(this.stopped)return;const t=Date.now();null===(e=this.logger)||void 0===e||e.debug("Polling for feature flag and segments updates"),this.requestor.requestData(this.getStoreTimestamp(),this.user,((e,i)=>{var o,a,l,u,c,d,h;const f=Date.now()-t,v=Math.max(this.pollingInterval-f,0);if(null===(o=this.logger)||void 0===o||o.debug("Elapsed: %d ms, sleeping for %d ms",f,v),e){const{status:t}=e;if(t&&!(0,r.isHttpRecoverable)(t)){const i=(0,s.httpErrorMessage)(e,"polling request");return null===(a=this.logger)||void 0===a||a.error(i),void(null===(l=this.errorHandler)||void 0===l||l.call(this,new r.PollingError(i,t)))}null===(u=this.logger)||void 0===u||u.warn((0,s.httpErrorMessage)(e,"polling request","will retry"))}else{let e=[],t=null===(c=this.user)||void 0===c?void 0:c.keyId,r=this.listeners.get("patch");if(i){const s=JSON.parse(i);if("data-sync"===s.messageType){switch(s.data.eventType){case n.StreamResponseEventType.patch:r=this.listeners.get("patch");break;case n.StreamResponseEventType.full:r=this.listeners.get("put")}({featureFlags:e,userKeyId:t}=s.data)}}const s=null===(d=null==r?void 0:r.deserializeData)||void 0===d?void 0:d.call(r,e);null===(h=null==r?void 0:r.processJson)||void 0===h||h.call(r,t,s)}this.timeoutHandle=setTimeout((()=>{this.poll()}),v)}))}identify(e){this.user=Object.assign({},e)}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:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=class{constructor(e,t,i,r,n,s,o){this.getStoreTimestamp=n,this.listeners=s;const{logger:a,streamingUri:l}=i;this.logger=a,this.socket=r,this.socket.config({sdkKey:e,streamingUri:l,pingInterval:o,user:t,logger:a,getStoreTimestamp:n}),this.listeners.forEach((({deserializeData:e,processJson:t},i)=>{var r;null===(r=this.socket)||void 0===r||r.addListener(i,(r=>{var n;if(null===(n=this.logger)||void 0===n||n.debug(`Received ${i} event`),null==r?void 0:r.data){const{featureFlags:i,userKeyId:n}=r.data,s=e(i);t(n,s)}}))}))}identify(e){var t;null===(t=this.socket)||void 0===t||t.identify(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)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.9",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.9.js.map