UNPKG

@openfeature/web-sdk

Version:
3 lines (2 loc) 38.9 kB
"use strict";var OpenFeature=(()=>{var Me=Object.create;var W=Object.defineProperty,Ge=Object.defineProperties,je=Object.getOwnPropertyDescriptor,Ye=Object.getOwnPropertyDescriptors,Ue=Object.getOwnPropertyNames,_e=Object.getOwnPropertySymbols,Oe=Object.getPrototypeOf,be=Object.prototype.hasOwnProperty,We=Object.prototype.propertyIsEnumerable,Ke=Reflect.get;var Ae=(a,e,t)=>e in a?W(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t,m=(a,e)=>{for(var t in e||(e={}))be.call(e,t)&&Ae(a,t,e[t]);if(_e)for(var t of _e(e))We.call(e,t)&&Ae(a,t,e[t]);return a},C=(a,e)=>Ge(a,Ye(e));var $e=(a,e)=>()=>(e||a((e={exports:{}}).exports,e),e.exports),Je=(a,e)=>{for(var t in e)W(a,t,{get:e[t],enumerable:!0})},Fe=(a,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ue(e))!be.call(a,o)&&o!==t&&W(a,o,{get:()=>e[o],enumerable:!(r=je(e,o))||r.enumerable});return a};var ze=(a,e,t)=>(t=a!=null?Me(Oe(a)):{},Fe(e||!a||!a.__esModule?W(t,"default",{value:a,enumerable:!0}):t,a)),Xe=a=>Fe(W({},"__esModule",{value:!0}),a);var ne=(a,e,t)=>Ke(Oe(a),t,e);var E=(a,e,t)=>new Promise((r,o)=>{var n=s=>{try{l(t.next(s))}catch(d){o(d)}},i=s=>{try{l(t.throw(s))}catch(d){o(d)}},l=s=>s.done?r(s.value):Promise.resolve(s.value).then(n,i);l((t=t.apply(a,e)).next())});var Ve=$e((Sr,Pe)=>{"use strict";var tt=Object.prototype.hasOwnProperty,T="~";function re(){}Object.create&&(re.prototype=Object.create(null),new re().__proto__||(T=!1));function rt(a,e,t){this.fn=a,this.context=e,this.once=t||!1}function Le(a,e,t,r,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var n=new rt(t,r||a,o),i=T?T+e:e;return a._events[i]?a._events[i].fn?a._events[i]=[a._events[i],n]:a._events[i].push(n):(a._events[i]=n,a._eventsCount++),a}function de(a,e){--a._eventsCount===0?a._events=new re:delete a._events[e]}function x(){this._events=new re,this._eventsCount=0}x.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)tt.call(t,r)&&e.push(T?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};x.prototype.listeners=function(e){var t=T?T+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var o=0,n=r.length,i=new Array(n);o<n;o++)i[o]=r[o].fn;return i};x.prototype.listenerCount=function(e){var t=T?T+e:e,r=this._events[t];return r?r.fn?1:r.length:0};x.prototype.emit=function(e,t,r,o,n,i){var l=T?T+e:e;if(!this._events[l])return!1;var s=this._events[l],d=arguments.length,v,u;if(s.fn){switch(s.once&&this.removeListener(e,s.fn,void 0,!0),d){case 1:return s.fn.call(s.context),!0;case 2:return s.fn.call(s.context,t),!0;case 3:return s.fn.call(s.context,t,r),!0;case 4:return s.fn.call(s.context,t,r,o),!0;case 5:return s.fn.call(s.context,t,r,o,n),!0;case 6:return s.fn.call(s.context,t,r,o,n,i),!0}for(u=1,v=new Array(d-1);u<d;u++)v[u-1]=arguments[u];s.fn.apply(s.context,v)}else{var P=s.length,c;for(u=0;u<P;u++)switch(s[u].once&&this.removeListener(e,s[u].fn,void 0,!0),d){case 1:s[u].fn.call(s[u].context);break;case 2:s[u].fn.call(s[u].context,t);break;case 3:s[u].fn.call(s[u].context,t,r);break;case 4:s[u].fn.call(s[u].context,t,r,o);break;default:if(!v)for(c=1,v=new Array(d-1);c<d;c++)v[c-1]=arguments[c];s[u].fn.apply(s[u].context,v)}}return!0};x.prototype.on=function(e,t,r){return Le(this,e,t,r,!1)};x.prototype.once=function(e,t,r){return Le(this,e,t,r,!0)};x.prototype.removeListener=function(e,t,r,o){var n=T?T+e:e;if(!this._events[n])return this;if(!t)return de(this,n),this;var i=this._events[n];if(i.fn)i.fn===t&&(!o||i.once)&&(!r||i.context===r)&&de(this,n);else{for(var l=0,s=[],d=i.length;l<d;l++)(i[l].fn!==t||o&&!i[l].once||r&&i[l].context!==r)&&s.push(i[l]);s.length?this._events[n]=s.length===1?s[0]:s:de(this,n)}return this};x.prototype.removeAllListeners=function(e){var t;return e?(t=T?T+e:e,this._events[t]&&de(this,t)):(this._events=new re,this._eventsCount=0),this};x.prototype.off=x.prototype.removeListener;x.prototype.addListener=x.prototype.on;x.prefixed=T;x.EventEmitter=x;typeof Pe!="undefined"&&(Pe.exports=x)});var nt={};Je(nt,{AggregateError:()=>ie,AllProviderEvents:()=>A,AllProviderStatus:()=>_,BaseComparisonStrategy:()=>U,BaseEvaluationStrategy:()=>F,BaseFirstMatchStrategy:()=>j,BaseFirstSuccessfulStrategy:()=>Y,ClientProviderEvents:()=>A,ClientProviderStatus:()=>_,ComparisonStrategy:()=>Re,DefaultLogger:()=>k,ErrorCode:()=>G,ErrorWithCode:()=>X,FirstMatchStrategy:()=>oe,FirstSuccessfulStrategy:()=>Te,FlagNotFoundError:()=>H,GeneralError:()=>h,GenericEventEmitter:()=>Z,InMemoryProvider:()=>ve,InvalidContextError:()=>$,LOG_LEVELS:()=>De,MapHookData:()=>K,MultiProvider:()=>Ce,NOOP_PROVIDER:()=>le,OpenFeature:()=>ot,OpenFeatureAPI:()=>ge,OpenFeatureCommonAPI:()=>te,OpenFeatureError:()=>p,OpenFeatureEventEmitter:()=>O,ParseError:()=>J,ProviderEvents:()=>A,ProviderFatalError:()=>w,ProviderNotReadyError:()=>L,ProviderStatus:()=>_,ProviderWrapper:()=>I,SafeLogger:()=>N,ServerProviderEvents:()=>Ne,ServerProviderStatus:()=>ke,StandardResolutionReasons:()=>S,StatusTracker:()=>q,TargetingKeyMissingError:()=>z,TelemetryAttribute:()=>R,TelemetryFlagMetadata:()=>ee,TypeMismatchError:()=>V,TypedInMemoryProvider:()=>ye,constructAggregateError:()=>se,createEvaluationEvent:()=>Ze,instantiateErrorByErrorCode:()=>me,isObject:()=>we,isString:()=>He,objectOrUndefined:()=>y,statusMatchesEvent:()=>Q,stringOrUndefined:()=>D,throwAggregateErrorFromPromiseResults:()=>ae});var K=class{constructor(){this.data=new Map}set(e,t){this.data.set(e,t)}get(e){return this.data.get(e)}has(e){return this.data.has(e)}delete(e){return this.data.delete(e)}clear(){this.data.clear()}};var S={STATIC:"STATIC",DEFAULT:"DEFAULT",TARGETING_MATCH:"TARGETING_MATCH",SPLIT:"SPLIT",CACHED:"CACHED",DISABLED:"DISABLED",UNKNOWN:"UNKNOWN",STALE:"STALE",ERROR:"ERROR"},G=(s=>(s.PROVIDER_NOT_READY="PROVIDER_NOT_READY",s.PROVIDER_FATAL="PROVIDER_FATAL",s.FLAG_NOT_FOUND="FLAG_NOT_FOUND",s.PARSE_ERROR="PARSE_ERROR",s.TYPE_MISMATCH="TYPE_MISMATCH",s.TARGETING_KEY_MISSING="TARGETING_KEY_MISSING",s.INVALID_CONTEXT="INVALID_CONTEXT",s.GENERAL="GENERAL",s))(G||{});var p=class a extends Error{constructor(e,t){super(e),Object.setPrototypeOf(this,a.prototype),this.name="OpenFeatureError",this.cause=t==null?void 0:t.cause}};var H=class a extends p{constructor(e,t){super(e,t),Object.setPrototypeOf(this,a.prototype),this.name="FlagNotFoundError",this.code="FLAG_NOT_FOUND"}};var h=class a extends p{constructor(e,t){super(e,t),Object.setPrototypeOf(this,a.prototype),this.name="GeneralError",this.code="GENERAL"}};var $=class a extends p{constructor(e,t){super(e,t),Object.setPrototypeOf(this,a.prototype),this.name="InvalidContextError",this.code="INVALID_CONTEXT"}};var J=class a extends p{constructor(e,t){super(e,t),Object.setPrototypeOf(this,a.prototype),this.name="ParseError",this.code="PARSE_ERROR"}};var w=class a extends p{constructor(e,t){super(e,t),Object.setPrototypeOf(this,a.prototype),this.name="ProviderFatalError",this.code="PROVIDER_FATAL"}};var L=class a extends p{constructor(e,t){super(e,t),Object.setPrototypeOf(this,a.prototype),this.name="ProviderNotReadyError",this.code="PROVIDER_NOT_READY"}};var z=class a extends p{constructor(e,t){super(e,t),Object.setPrototypeOf(this,a.prototype),this.name="TargetingKeyMissingError",this.code="TARGETING_KEY_MISSING"}};var V=class a extends p{constructor(e,t){super(e,t),Object.setPrototypeOf(this,a.prototype),this.name="TypeMismatchError",this.code="TYPE_MISMATCH"}};var me=(a,e)=>{switch(a){case"FLAG_NOT_FOUND":return new H(e);case"PARSE_ERROR":return new J(e);case"TYPE_MISMATCH":return new V(e);case"TARGETING_KEY_MISSING":return new z(e);case"INVALID_CONTEXT":return new $(e);case"PROVIDER_NOT_READY":return new L(e);case"PROVIDER_FATAL":return new w(e);default:return new h(e)}};var ke=(n=>(n.NOT_READY="NOT_READY",n.READY="READY",n.ERROR="ERROR",n.STALE="STALE",n.FATAL="FATAL",n))(ke||{}),_=(i=>(i.NOT_READY="NOT_READY",i.READY="READY",i.ERROR="ERROR",i.STALE="STALE",i.FATAL="FATAL",i.RECONCILING="RECONCILING",i))(_||{});var X=class extends p{constructor(t,r){super(r);this.code=t}},ie=class a extends h{constructor(t,r){super(t);this.originalErrors=r;Object.setPrototypeOf(this,a.prototype),this.name="AggregateError"}},se=a=>{let e=a.map(({providerName:o,error:n})=>({source:o,error:n})).flat(),t=e[0],r=t?`Provider errors occurred: ${t.source}: ${t.error}`:"Provider errors occurred";return new ie(r,e)},ae=(a,e)=>{let t=a.map((r,o)=>r.status==="rejected"?{error:r.reason,providerName:e[o].name}:null).filter(r=>!!r);if(t.length)throw se(t)};var q=class{constructor(e,t,r){this.events=e;this.statusEnum=t;this.eventEnum=r;this.providerStatuses={}}wrapEventHandler(e){var n,i,l,s,d;let t=e.provider;(n=t.events)==null||n.addHandler(this.eventEnum.Error,v=>{this.changeProviderStatus(e.name,this.statusEnum.ERROR,v)}),(i=t.events)==null||i.addHandler(this.eventEnum.Stale,v=>{this.changeProviderStatus(e.name,this.statusEnum.STALE,v)}),(l=t.events)==null||l.addHandler(this.eventEnum.ConfigurationChanged,v=>{this.events.emit(this.eventEnum.ConfigurationChanged,v)}),(s=t.events)==null||s.addHandler(this.eventEnum.Ready,v=>{this.changeProviderStatus(e.name,this.statusEnum.READY,v)});let r=this.eventEnum.Reconciling,o=this.statusEnum.RECONCILING;r&&o&&((d=t.events)==null||d.addHandler(r,v=>{this.changeProviderStatus(e.name,o,v)}))}providerStatus(e){return this.providerStatuses[e]}getStatusFromProviderStatuses(){let e=Object.values(this.providerStatuses);return e.includes(this.statusEnum.FATAL)?this.statusEnum.FATAL:e.includes(this.statusEnum.NOT_READY)?this.statusEnum.NOT_READY:e.includes(this.statusEnum.ERROR)?this.statusEnum.ERROR:e.includes(this.statusEnum.STALE)?this.statusEnum.STALE:this.statusEnum.RECONCILING&&e.includes(this.statusEnum.RECONCILING)?this.statusEnum.RECONCILING:this.statusEnum.READY}changeProviderStatus(e,t,r){let o=this.getStatusFromProviderStatuses();this.providerStatuses[e]=t;let n=this.getStatusFromProviderStatuses();if(o!==n)if(n===this.statusEnum.FATAL||n===this.statusEnum.ERROR)this.events.emit(this.eventEnum.Error,r);else if(n===this.statusEnum.STALE)this.events.emit(this.eventEnum.Stale,r);else if(n===this.statusEnum.READY)this.events.emit(this.eventEnum.Ready,r);else{let i=this.eventEnum.Reconciling;i&&this.statusEnum.RECONCILING&&n===this.statusEnum.RECONCILING&&this.events.emit(i,r)}}};var F=class{constructor(e){this.statusEnum=e;this.runMode="sequential"}shouldEvaluateThisProvider(e,t){return!(e.providerStatus===this.statusEnum.NOT_READY||e.providerStatus===this.statusEnum.FATAL)}shouldEvaluateNextProvider(e,t,r){return!0}shouldTrackWithThisProvider(e,t,r,o){return!(e.providerStatus===this.statusEnum.NOT_READY||e.providerStatus===this.statusEnum.FATAL)}hasError(e){return"thrownError"in e||!!e.details.errorCode}hasErrorWithCode(e,t){var r;return"thrownError"in e?((r=e.thrownError)==null?void 0:r.code)===t:e.details.errorCode===t}collectProviderErrors(e){var r;let t=[];for(let o of e)"thrownError"in o?t.push({providerName:o.providerName,error:o.thrownError}):o.details.errorCode&&t.push({providerName:o.providerName,error:new X(o.details.errorCode,(r=o.details.errorMessage)!=null?r:"unknown error")});return{errors:t}}resolutionToFinalResult(e){return{details:e.details,provider:e.provider,providerName:e.providerName}}};var j=class extends F{shouldEvaluateNextProvider(e,t,r){return this.hasErrorWithCode(r,"FLAG_NOT_FOUND")?!0:(this.hasError(r),!1)}determineFinalResult(e,t,r){let o=r[r.length-1];return this.hasError(o)?this.collectProviderErrors(r):this.resolutionToFinalResult(o)}};var Y=class extends F{shouldEvaluateNextProvider(e,t,r){return this.hasError(r)}determineFinalResult(e,t,r){let o=r[r.length-1];return this.hasError(o)?this.collectProviderErrors(r):this.resolutionToFinalResult(o)}};var U=class extends F{constructor(t,r,o){super(t);this.fallbackProvider=r;this.onMismatch=o;this.runMode="parallel"}determineFinalResult(t,r,o){var d;let n,i,l,s=!1;for(let[v,u]of o.entries()){if(this.hasError(u))return this.collectProviderErrors(o);u.provider===this.fallbackProvider&&(i=u),v===0&&(l=u),typeof n!="undefined"&&n!==u.details.value?s=!0:n=u.details.value}if(!i)throw new h("Fallback provider not found in resolution results");if(!l)throw new h("Final resolution not found in resolution results");return s?((d=this.onMismatch)==null||d.call(this,o),{details:i.details,provider:i.provider}):this.resolutionToFinalResult(l)}};var Ne=(o=>(o.Ready="PROVIDER_READY",o.Error="PROVIDER_ERROR",o.ConfigurationChanged="PROVIDER_CONFIGURATION_CHANGED",o.Stale="PROVIDER_STALE",o))(Ne||{}),A=(i=>(i.Ready="PROVIDER_READY",i.Error="PROVIDER_ERROR",i.ConfigurationChanged="PROVIDER_CONFIGURATION_CHANGED",i.ContextChanged="PROVIDER_CONTEXT_CHANGED",i.Reconciling="PROVIDER_RECONCILING",i.Stale="PROVIDER_STALE",i))(A||{});var qe={READY:"PROVIDER_READY",ERROR:"PROVIDER_ERROR",FATAL:"PROVIDER_ERROR",STALE:"PROVIDER_STALE",RECONCILING:"PROVIDER_RECONCILING",NOT_READY:void 0},Q=(a,e)=>!e&&a==="PROVIDER_READY"||qe[e]===a;var k=class{error(...e){console.error(...e)}warn(...e){console.warn(...e)}info(){}debug(){}};var De=["error","warn","info","debug"],N=class{constructor(e){this.fallbackLogger=new k;try{for(let t of De)if(!e[t]||typeof e[t]!="function")throw new Error(`The provided logger is missing the ${t} method.`);this.logger=e}catch(t){console.error(t),console.error("Falling back to the default logger."),this.logger=this.fallbackLogger}}error(...e){this.log("error",...e)}warn(...e){this.log("warn",...e)}info(...e){this.log("info",...e)}debug(...e){this.log("debug",...e)}log(e,...t){try{this.logger[e](...t)}catch(r){this.fallbackLogger[e](...t)}}};var Z=class{constructor(e){this.globalLogger=e;this._handlers={PROVIDER_CONFIGURATION_CHANGED:new WeakMap,PROVIDER_CONTEXT_CHANGED:new WeakMap,PROVIDER_READY:new WeakMap,PROVIDER_ERROR:new WeakMap,PROVIDER_STALE:new WeakMap,PROVIDER_RECONCILING:new WeakMap}}emit(e,t){this.eventEmitter.emit(e,t)}addHandler(e,t){let r=n=>E(this,null,function*(){var i;try{yield t(n)}catch(l){(i=this._logger)==null||i.error("Error running event handler:",l)}}),o=this._handlers[e].get(t);this._handlers[e].set(t,[...o||[],r]),this.eventEmitter.on(e,r)}removeHandler(e,t){let r=this._handlers[e].get(t);if(r){let o=r.pop();o&&this.eventEmitter.removeListener(e,o)}}removeAllHandlers(e){e?this.eventEmitter.removeAllListeners(e):this.eventEmitter.removeAllListeners()}getHandlers(e){return this.eventEmitter.listeners(e)}setLogger(e){return this._eventLogger=new N(e),this}get _logger(){var e,t;return(t=this._eventLogger)!=null?t:(e=this.globalLogger)==null?void 0:e.call(this)}};var R={KEY:"feature_flag.key",ERROR_CODE:"error.type",ERROR_MESSAGE:"error.message",VARIANT:"feature_flag.result.variant",VALUE:"feature_flag.result.value",CONTEXT_ID:"feature_flag.context.id",REASON:"feature_flag.result.reason",PROVIDER:"feature_flag.provider.name",FLAG_SET_ID:"feature_flag.set.id",VERSION:"feature_flag.version"};var ee={CONTEXT_ID:"contextId",FLAG_SET_ID:"flagSetId",VERSION:"version"};var Qe="feature_flag.evaluation";function Ze(a,e){var i,l,s;let t={[R.KEY]:a.flagKey,[R.PROVIDER]:a.providerMetadata.name,[R.REASON]:((i=e.reason)!=null?i:S.UNKNOWN).toLowerCase()};if(e.variant&&(t[R.VARIANT]=e.variant),e.value!==null)if(typeof e.value!="object")t[R.VALUE]=e.value;else try{t[R.VALUE]=JSON.stringify(e.value)}catch(d){}let r=(l=e.flagMetadata[ee.CONTEXT_ID])!=null?l:a.context.targetingKey;r&&(t[R.CONTEXT_ID]=r);let o=e.flagMetadata[ee.FLAG_SET_ID];o&&(t[R.FLAG_SET_ID]=o);let n=e.flagMetadata[ee.VERSION];return n&&(t[R.VERSION]=n),e.reason===S.ERROR&&(t[R.ERROR_CODE]=((s=e.errorCode)!=null?s:"GENERAL").toLowerCase(),e.errorMessage&&(t[R.ERROR_MESSAGE]=e.errorMessage)),{name:Qe,attributes:t}}function He(a){return typeof a=="string"}function D(a){return He(a)?a:void 0}function we(a){return typeof a=="object"}function y(a){return we(a)?a:void 0}function he(a){return typeof a!="undefined"&&a!==null}var I=class{constructor(e,t,r){this._provider=e;this._status=t;this._pendingContextChanges=0;var o,n,i;(o=e.events)==null||o.addHandler("PROVIDER_READY",()=>{this._status=r.READY}),(n=e.events)==null||n.addHandler("PROVIDER_STALE",()=>{this._status=r.STALE}),(i=e.events)==null||i.addHandler("PROVIDER_ERROR",l=>{(l==null?void 0:l.errorCode)==="PROVIDER_FATAL"?this._status=r.FATAL:this._status=r.ERROR})}get provider(){return this._provider}set provider(e){this._provider=e}get status(){return this._status}set status(e){this._status=e}get allContextChangesSettled(){return this._pendingContextChanges===0}incrementPendingContextChanges(){this._pendingContextChanges++}decrementPendingContextChanges(){this._pendingContextChanges--}},te=class{constructor(e){this._hooks=[];this._context={};this._logger=new k;this._clientEventHandlers=new Map;this._domainScopedContext=new Map;this._clientEvents=new Map;this._runsOn=e}addHooks(...e){return this._hooks=[...this._hooks,...e],this}getHooks(){return this._hooks}clearHooks(){return this._hooks=[],this}setLogger(e){return this._logger=new N(e),this}get providerMetadata(){return this.getProviderMetadata()}getProviderMetadata(e){return this.getProviderForClient(e).metadata}addHandler(e,t,r){[...new Map([[void 0,this._defaultProvider]]),...this._domainScopedProviders].forEach(o=>{var d;let n=o[0],i=o[1].provider,l=o[1].status;if(Q(e,l))try{t({domain:n,providerName:i.metadata.name})}catch(v){(d=this._logger)==null||d.error("Error running event handler:",v)}}),this._apiEmitter.addHandler(e,t),r!=null&&r.signal&&typeof r.signal.addEventListener=="function"&&r.signal.addEventListener("abort",()=>{this.removeHandler(e,t)})}removeHandler(e,t){this._apiEmitter.removeHandler(e,t)}clearHandlers(){this._apiEmitter.removeAllHandlers()}getHandlers(e){return this._apiEmitter.getHandlers(e)}setAwaitableProvider(e,t){var v,u,P,c,f,b,B,Se;let r=D(e),o=(v=y(e))!=null?v:y(t);if(!o){this._logger.debug("No provider defined, ignoring setProvider call");return}let n=this.getProviderForClient(r),i=o.metadata.name;if(n===o){this._logger.debug("Provider is already set, ignoring setProvider call");return}if(!o.runsOn)this._logger.debug(`Provider '${o.metadata.name}' has not defined its intended use.`);else if(o.runsOn!==this._runsOn)throw new h(`Provider '${o.metadata.name}' is intended for use on the ${o.runsOn}.`);let l=this.getAssociatedEventEmitters(r),s,d=new I(o,this._statusEnumType.NOT_READY,this._statusEnumType);return typeof o.initialize=="function"&&!this.allProviders.includes(o)?s=(f=(c=(P=o.initialize)==null?void 0:P.call(o,r?(u=this._domainScopedContext.get(r))!=null?u:this._context:this._context))==null?void 0:c.then(()=>{var g;d.status=this._statusEnumType.READY,this.getAssociatedEventEmitters(r).forEach(M=>{M==null||M.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:i})}),(g=this._apiEmitter)==null||g.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:i})}))==null?void 0:f.catch(g=>{var M;throw(g==null?void 0:g.code)==="PROVIDER_FATAL"?d.status=this._statusEnumType.FATAL:d.status=this._statusEnumType.ERROR,this.getAssociatedEventEmitters(r).forEach(Ee=>{Ee==null||Ee.emit("PROVIDER_ERROR",{clientName:r,domain:r,providerName:i,message:g==null?void 0:g.message})}),(M=this._apiEmitter)==null||M.emit("PROVIDER_ERROR",{clientName:r,domain:r,providerName:i,message:g==null?void 0:g.message}),g}):(d.status=this._statusEnumType.READY,l.forEach(g=>{g==null||g.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:i})}),(b=this._apiEmitter)==null||b.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:i})),r?this._domainScopedProviders.set(r,d):this._defaultProvider=d,this.transferListeners(n,o,r,l),this.allProviders.includes(n)||(Se=(B=n==null?void 0:n.onClose)==null?void 0:B.call(n))==null||Se.catch(g=>{this._logger.error(`error closing provider: ${g==null?void 0:g.message}, ${g==null?void 0:g.stack}`)}),s}getProviderForClient(e){var t,r;return e?(r=(t=this._domainScopedProviders.get(e))==null?void 0:t.provider)!=null?r:this._defaultProvider.provider:this._defaultProvider.provider}buildAndCacheEventEmitterForClient(e){let t=this._clientEvents.get(e);if(t)return t;let r=this._createEventEmitter();this._clientEvents.set(e,r);let o=this.getProviderForClient(e);return Object.values(A).forEach(n=>{var i;return(i=o.events)==null?void 0:i.addHandler(n,l=>E(this,null,function*(){r.emit(n,C(m({},l),{clientName:e,domain:e,providerName:o.metadata.name}))}))}),r}getUnboundEmitters(){let e=[...this._domainScopedProviders.keys()];return[...[...this._clientEvents.keys()].filter(he).filter(o=>!e.includes(o)).map(o=>this._clientEvents.get(o)),this._clientEvents.get(void 0)].filter(he)}getAssociatedEventEmitters(e){return e?[this.buildAndCacheEventEmitterForClient(e)]:this.getUnboundEmitters()}transferListeners(e,t,r,o){var i;(i=this._clientEventHandlers.get(r))==null||i.forEach(l=>{var s;return(s=e.events)==null?void 0:s.removeHandler(...l)});let n=Object.values(A).map(l=>[l,d=>E(this,null,function*(){o.forEach(v=>{v==null||v.emit(l,C(m({},d),{clientName:r,domain:r,providerName:t.metadata.name}))}),this._apiEmitter.emit(l,C(m({},d),{clientName:r,domain:r,providerName:t.metadata.name}))})]);this._clientEventHandlers.set(r,n),n.forEach(l=>{var s;return(s=t.events)==null?void 0:s.addHandler(...l)})}close(){return E(this,null,function*(){var t,r;try{yield(r=(t=this==null?void 0:this._defaultProvider.provider)==null?void 0:t.onClose)==null?void 0:r.call(t)}catch(o){this.handleShutdownError(this._defaultProvider.provider,o)}let e=Array.from(this._domainScopedProviders);yield Promise.all(e.map(n=>E(this,[n],function*([,o]){var i,l;try{yield(l=o==null?void 0:(i=o.provider).onClose)==null?void 0:l.call(i)}catch(s){this.handleShutdownError(o==null?void 0:o.provider,s)}})))})}clearProvidersAndSetDefault(e){return E(this,null,function*(){try{yield this.close()}catch(t){this._logger.error("Unable to cleanly close providers. Resetting to the default configuration.")}finally{this._domainScopedProviders.clear(),this._defaultProvider=new I(e,this._statusEnumType.NOT_READY,this._statusEnumType)}})}get allProviders(){return[...[...this._domainScopedProviders.values()].map(e=>e.provider),this._defaultProvider.provider]}handleShutdownError(e,t){this._logger.error(`Error during shutdown of provider ${e.metadata.name}: ${t}`),this._logger.error(t==null?void 0:t.stack)}};var et="No-op",fe=class{constructor(){this.metadata={name:"No-op Provider"}}resolveBooleanEvaluation(e,t){return this.noOp(t)}resolveStringEvaluation(e,t){return this.noOp(t)}resolveNumberEvaluation(e,t){return this.noOp(t)}resolveObjectEvaluation(e,t){return this.noOp(t)}noOp(e){return{value:e,reason:et}}},le=new fe;var xe=ze(Ve(),1);var O=class extends Z{constructor(){super();this.eventEmitter=new xe.default}};var ue=class a extends p{constructor(e){super(e),Object.setPrototypeOf(this,a.prototype),this.name="VariantNotFoundError",this.code="GENERAL"}};var ve=class{constructor(e={}){this.events=new O;this.runsOn="client";this.metadata={name:"in-memory"};this._flagConfiguration=m({},e)}putConfiguration(e){return E(this,null,function*(){try{let t=Object.entries(m(m({},e),this._flagConfiguration)).map(([r])=>r);this._flagConfiguration=m({},e),this.events.emit("PROVIDER_CONFIGURATION_CHANGED",{flagsChanged:t})}catch(t){throw this.events.emit("PROVIDER_ERROR"),t}})}resolveBooleanEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveNumberEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveStringEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveObjectEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveAndCheckFlag(e,t,r,o){if(!(e in this._flagConfiguration)){let i=`no flag found with key ${e}`;throw o==null||o.debug(i),new H(i)}if(this._flagConfiguration[e].disabled)return{value:t,reason:S.DISABLED};let n=this.resolveFlagWithReason(e,r);if(n.value===void 0){let i=`no value associated with variant provided for ${e} found`;throw o==null||o.error(i),new ue(i)}if(typeof n.value!=typeof t)throw new V;return n}resolveFlagWithReason(e,t){try{return this.lookupFlagValue(e,t)}catch(r){throw r instanceof p?r:new h((r==null?void 0:r.message)||"unknown error")}}lookupFlagValue(e,t){var s;let r=this._flagConfiguration[e],o=t&&(r==null?void 0:r.contextEvaluator),n=o?(s=r.contextEvaluator)==null?void 0:s.call(r,t):r.defaultVariant,i=n&&(r==null?void 0:r.variants[n]),l=o?S.TARGETING_MATCH:S.STATIC;return C(m({value:i},n&&{variant:n}),{reason:l})}},ye=class a extends ve{constructor(e={}){super(e)}putConfiguration(e){return E(this,null,function*(){yield ne(a.prototype,this,"putConfiguration").call(this,e)})}};var oe=class extends j{constructor(){super(_)}},Te=class extends Y{constructor(){super(_)}},Re=class extends U{constructor(e,t){super(_,e,t)}};var ce=class{constructor(e){this.logger=e}beforeHooks(e,t,r){var o;for(let n of e!=null?e:[])(o=n==null?void 0:n.before)==null||o.call(n,t,Object.freeze(r))}afterHooks(e,t,r,o){var n;for(let i of e!=null?e:[])(n=i==null?void 0:i.after)==null||n.call(i,t,r,o)}errorHooks(e,t,r,o){var n;for(let i of e!=null?e:[])try{(n=i==null?void 0:i.error)==null||n.call(i,t,r,o)}catch(l){this.logger.error(`Unhandled error during 'error' hook: ${l}`),l instanceof Error&&this.logger.error(l.stack)}}finallyHooks(e,t,r,o){var n;for(let i of e!=null?e:[])try{(n=i==null?void 0:i.finally)==null||n.call(i,t,r,o)}catch(l){this.logger.error(`Unhandled error during 'finally' hook: ${l}`),l instanceof Error&&this.logger.error(l.stack)}}};var Ce=class a{constructor(e,t=new oe,r=new k){this.constructorProviders=e;this.evaluationStrategy=t;this.logger=r;this.runsOn="client";this.events=new O;this.hookContexts=new WeakMap;this.hookHints=new WeakMap;this.providerEntries=[];this.providerEntriesByName={};this.statusTracker=new q(this.events,_,A);this.hookExecutor=new ce(this.logger),this.registerProviders(e);let o=Object.keys(this.providerEntriesByName).reduce((n,i)=>C(m({},n),{[i]:this.providerEntriesByName[i].provider.metadata}),{});this.metadata=C(m({},o),{name:a.name})}registerProviders(e){var r,o;let t={};for(let n of e){let i=n.provider.metadata.name,l=(r=n.name)!=null?r:i;if(n.name&&t[n.name])throw new Error("Provider names must be unique");(o=t[l])!=null||(t[l]=[]),t[l].push(n.provider)}for(let n of Object.keys(t)){let i=t[n].length>1;for(let l=0;l<t[n].length;l++){let s=i?`${n}-${l+1}`:n;this.providerEntriesByName[s]={provider:t[n][l],name:s},this.providerEntries.push(this.providerEntriesByName[s]),this.statusTracker.wrapEventHandler(this.providerEntriesByName[s])}}Object.freeze(this.providerEntries),Object.freeze(this.providerEntriesByName)}initialize(e){return E(this,null,function*(){let t=yield Promise.allSettled(this.providerEntries.map(r=>{var o,n;return(n=(o=r.provider).initialize)==null?void 0:n.call(o,e)}));ae(t,this.providerEntries)})}onClose(){return E(this,null,function*(){let e=yield Promise.allSettled(this.providerEntries.map(t=>{var r,o;return(o=(r=t.provider).onClose)==null?void 0:o.call(r)}));ae(e,this.providerEntries)})}onContextChange(e,t){return E(this,null,function*(){var r,o;for(let n of this.providerEntries)yield(o=(r=n.provider).onContextChange)==null?void 0:o.call(r,e,t)})}resolveBooleanEvaluation(e,t,r){return this.flagResolutionProxy(e,"boolean",t,r)}resolveStringEvaluation(e,t,r){return this.flagResolutionProxy(e,"string",t,r)}resolveNumberEvaluation(e,t,r){return this.flagResolutionProxy(e,"number",t,r)}resolveObjectEvaluation(e,t,r){return this.flagResolutionProxy(e,"object",t,r)}track(e,t,r){var o,n;for(let i of this.providerEntries){if(!i.provider.track)continue;let l={provider:i.provider,providerName:i.name,providerStatus:this.statusTracker.providerStatus(i.name)};if(this.evaluationStrategy.shouldTrackWithThisProvider(l,t,e,r))try{(n=(o=i.provider).track)==null||n.call(o,e,t,r)}catch(s){this.logger.error(`Error tracking event "${e}" with provider "${i.name}":`,s)}}}flagResolutionProxy(e,t,r,o){var v;let n=this.hookContexts.get(o),i=this.hookHints.get(o);if(!n||!i)throw new h("Hook context not available for evaluation");let l=[];for(let u of this.providerEntries){let[P,c]=this.evaluateProviderEntry(e,t,r,u,n,i,o);if(l.push(c),!P)break}let s=l.filter(u=>!!u),d=this.evaluationStrategy.determineFinalResult({flagKey:e,flagType:t},o,s);if((v=d.errors)!=null&&v.length)throw se(d.errors);if(!d.details)throw new h("No result was returned from any provider");return d.details}evaluateProviderEntry(e,t,r,o,n,i,l){let s,d=o.provider,v={flagKey:e,flagType:t,provider:d,providerName:o.name,providerStatus:this.statusTracker.providerStatus(o.name)};if(!this.evaluationStrategy.shouldEvaluateThisProvider(v,l))return[!0,null];let u;try{s=this.evaluateProviderAndHooks(e,r,d,n,i),u={details:s,provider:d,providerName:o.name}}catch(P){u={thrownError:P,provider:d,providerName:o.name}}return[this.evaluationStrategy.shouldEvaluateNextProvider(v,l,u),u]}evaluateProviderAndHooks(e,t,r,o,n){var l;let i;try{this.hookExecutor.beforeHooks(r.hooks,o,n);let s=this.callProviderResolve(r,e,t,o.context);i=C(m({},s),{flagMetadata:Object.freeze((l=s.flagMetadata)!=null?l:{}),flagKey:e}),this.hookExecutor.afterHooks(r.hooks,o,i,n)}catch(s){this.hookExecutor.errorHooks(r.hooks,o,s,n),i=this.getErrorEvaluationDetails(e,t,s)}return this.hookExecutor.finallyHooks(r.hooks,o,i,n),i}callProviderResolve(e,t,r,o){switch(typeof r){case"string":return e.resolveStringEvaluation(t,r,o,this.logger);case"number":return e.resolveNumberEvaluation(t,r,o,this.logger);case"object":return e.resolveObjectEvaluation(t,r,o,this.logger);case"boolean":return e.resolveBooleanEvaluation(t,r,o,this.logger);default:throw new h("Invalid flag evaluation type")}}get hooks(){return[{before:(e,t)=>(this.hookContexts.set(e.context,e),this.hookHints.set(e.context,t!=null?t:{}),e.context)}]}getErrorEvaluationDetails(e,t,r,o={}){let n=r==null?void 0:r.message;return{errorCode:(r==null?void 0:r.code)||"GENERAL",errorMessage:n,value:t,reason:S.ERROR,flagMetadata:Object.freeze(o),flagKey:e}}};var pe=class{constructor(e,t,r,o,n,i,l){this.providerAccessor=e;this.providerStatusAccessor=t;this.emitterAccessor=r;this.apiContextAccessor=o;this.apiHooksAccessor=n;this.globalLogger=i;this.options=l;this._hooks=[]}get metadata(){var e,t;return{name:(e=this.options.domain)!=null?e:this.options.name,domain:(t=this.options.domain)!=null?t:this.options.name,version:this.options.version,providerMetadata:this.providerAccessor().metadata}}get providerStatus(){return this.providerStatusAccessor()}addHandler(e,t,r){var n;if(this.emitterAccessor().addHandler(e,t),Q(e,this.providerStatus))try{t({clientName:this.metadata.name,domain:this.metadata.domain,providerName:this._provider.metadata.name})}catch(i){(n=this._logger)==null||n.error("Error running event handler:",i)}r!=null&&r.signal&&typeof r.signal.addEventListener=="function"&&r.signal.addEventListener("abort",()=>{this.removeHandler(e,t)})}removeHandler(e,t){this.emitterAccessor().removeHandler(e,t)}getHandlers(e){return this.emitterAccessor().getHandlers(e)}setLogger(e){return this._clientLogger=new N(e),this}addHooks(...e){return this._hooks=[...this._hooks,...e],this}getHooks(){return this._hooks}clearHooks(){return this._hooks=[],this}getBooleanValue(e,t,r){return this.getBooleanDetails(e,t,r).value}getBooleanDetails(e,t,r){return this.evaluate(e,this._provider.resolveBooleanEvaluation,t,"boolean",r)}getStringValue(e,t,r){return this.getStringDetails(e,t,r).value}getStringDetails(e,t,r){return this.evaluate(e,this._provider.resolveStringEvaluation,t,"string",r)}getNumberValue(e,t,r){return this.getNumberDetails(e,t,r).value}getNumberDetails(e,t,r){return this.evaluate(e,this._provider.resolveNumberEvaluation,t,"number",r)}getObjectValue(e,t,r){return this.getObjectDetails(e,t,r).value}getObjectDetails(e,t,r){return this.evaluate(e,this._provider.resolveObjectEvaluation,t,"object",r)}track(e,t={}){var r,o,n;try{if(this.shortCircuitIfNotReady(),typeof this._provider.track=="function"){let i=Object.freeze(m({},this.apiContextAccessor((r=this==null?void 0:this.options)==null?void 0:r.domain)));return(n=(o=this._provider).track)==null?void 0:n.call(o,e,i,t)}else this._logger.debug("Provider does not support the track function; will no-op.")}catch(i){this._logger.debug("Error recording tracking event.",i)}}evaluate(e,t,r,o,n={}){var u,P;let i=[...this.apiHooksAccessor(),...this.getHooks(),...n.hooks||[],...this._provider.hooks||[]],l=[...i].reverse(),s=m({},this.apiContextAccessor((u=this==null?void 0:this.options)==null?void 0:u.domain)),d=l.map(()=>Object.freeze({flagKey:e,defaultValue:r,flagValueType:o,clientMetadata:this.metadata,providerMetadata:this._provider.metadata,context:s,logger:this._logger,hookData:new K})),v;try{this.beforeHooks(i,d,n),this.shortCircuitIfNotReady();let c=t.call(this._provider,e,r,s,this._logger),f=C(m({},c),{flagMetadata:Object.freeze((P=c.flagMetadata)!=null?P:{}),flagKey:e});if(f.errorCode){let b=me(f.errorCode,f.errorMessage);this.errorHooks(l,d,b,n),v=this.getErrorEvaluationDetails(e,r,b,f.flagMetadata)}else this.afterHooks(l,d,f,n),v=f}catch(c){this.errorHooks(l,d,c,n),v=this.getErrorEvaluationDetails(e,r,c)}return this.finallyHooks(l,d,v,n),v}beforeHooks(e,t,r){var o;for(let[n,i]of e.entries()){let l=e.length-1-n,s=t[l];Object.freeze(s),Object.freeze(s.context),(o=i==null?void 0:i.before)==null||o.call(i,s,Object.freeze(r.hookHints))}}afterHooks(e,t,r,o){var n;for(let[i,l]of e.entries()){let s=t[i];(n=l==null?void 0:l.after)==null||n.call(l,s,r,o.hookHints)}}errorHooks(e,t,r,o){var n;for(let[i,l]of e.entries())try{let s=t[i];(n=l==null?void 0:l.error)==null||n.call(l,s,r,o.hookHints)}catch(s){this._logger.error(`Unhandled error during 'error' hook: ${s}`),s instanceof Error&&this._logger.error(s.stack),this._logger.error(s==null?void 0:s.stack)}}finallyHooks(e,t,r,o){var n;for(let[i,l]of e.entries())try{let s=t[i];(n=l==null?void 0:l.finally)==null||n.call(l,s,r,o.hookHints)}catch(s){this._logger.error(`Unhandled error during 'finally' hook: ${s}`),s instanceof Error&&this._logger.error(s.stack),this._logger.error(s==null?void 0:s.stack)}}get _provider(){return this.providerAccessor()}get _logger(){return this._clientLogger||this.globalLogger()}shortCircuitIfNotReady(){if(this.providerStatus==="NOT_READY")throw new L("provider has not yet initialized");if(this.providerStatus==="FATAL")throw new w("provider is in an irrecoverable error state")}getErrorEvaluationDetails(e,t,r,o={}){let n=r==null?void 0:r.message;return{errorCode:(r==null?void 0:r.code)||"GENERAL",errorMessage:n,value:t,reason:S.ERROR,flagMetadata:Object.freeze(o),flagKey:e}}};var Ie=Symbol.for("@openfeature/web-sdk/api"),Be=globalThis,ge=class a extends te{constructor(){super("client");this._statusEnumType=_;this._apiEmitter=new O;this._defaultProvider=new I(le,"NOT_READY",this._statusEnumType);this._domainScopedProviders=new Map;this._createEventEmitter=()=>new O}static getInstance(){let t=Be[Ie];if(t)return t;let r=new a;return Be[Ie]=r,r}getProviderStatus(t){var r,o;return t?(o=(r=this._domainScopedProviders.get(t))==null?void 0:r.status)!=null?o:this._defaultProvider.status:this._defaultProvider.status}setProviderAndWait(t,r,o){return E(this,null,function*(){let n=D(t),i=n?y(r):y(t),l=n?y(o):y(r);l&&(n?this._domainScopedContext.set(n,l):this._context=l),yield this.setAwaitableProvider(n,i)})}setProvider(t,r,o){let n=D(t),i=n?y(r):y(t),l=n?y(o):y(r);l&&(n?this._domainScopedContext.set(n,l):this._context=l);let s=this.setAwaitableProvider(n,i);return Promise.resolve(s).catch(d=>{this._logger.error("Error during provider initialization:",d)}),this}getProvider(t){return this.getProviderForClient(t)}setContext(t,r){return E(this,null,function*(){var i,l;let o=D(t),n=(l=(i=y(t))!=null?i:y(r))!=null?l:{};if(o){let s=this._domainScopedProviders.get(o);if(s){let d=this.getContext(o);this._domainScopedContext.set(o,n),yield this.runProviderContextChangeHandler(o,s,d,n)}else this._domainScopedContext.set(o,n)}else{let s=this._context;this._context=n;let d=Array.from(this._domainScopedProviders.entries()).filter(([u])=>!this._domainScopedContext.has(u)).reduce((u,[P,c])=>(u.push({domain:P,wrapper:c}),u),[]),v=[{domain:void 0,wrapper:this._defaultProvider},...d];yield Promise.all(v.map(u=>this.runProviderContextChangeHandler(u.domain,u.wrapper,s,n)))}})}getContext(t){let r=D(t);if(r){let o=this._domainScopedContext.get(r);if(o)return o;this._logger.debug(`Unable to find context for '${r}'.`)}return this._context}clearContext(t){return E(this,null,function*(){let r=D(t);if(r){let o=this._domainScopedProviders.get(r);if(o){let n=this.getContext(r);this._domainScopedContext.delete(r);let i=this.getContext();yield this.runProviderContextChangeHandler(r,o,n,i)}else this._domainScopedContext.delete(r)}else return this.setContext({})})}clearContexts(){return E(this,null,function*(){yield this.clearContext(),yield Promise.allSettled(Array.from(this._domainScopedProviders.keys()).map(t=>this.clearContext(t)))})}getClient(t,r){return new pe(()=>this.getProviderForClient(t),()=>this.getProviderStatus(t),()=>this.buildAndCacheEventEmitterForClient(t),o=>this.getContext(o),()=>this.getHooks(),()=>this._logger,{domain:t,version:r})}clearProviders(){return E(this,null,function*(){yield ne(a.prototype,this,"clearProvidersAndSetDefault").call(this,le),this._domainScopedContext.clear()})}runProviderContextChangeHandler(t,r,o,n){return E(this,null,function*(){var l,s,d,v,u,P;let i=((s=(l=r.provider)==null?void 0:l.metadata)==null?void 0:s.name)||"unnamed-provider";try{if(typeof r.provider.onContextChange=="function"){let c=r.provider.onContextChange(o,n);c&&typeof(c==null?void 0:c.then)=="function"&&(r.incrementPendingContextChanges(),r.status=this._statusEnumType.RECONCILING,this.getAssociatedEventEmitters(t).forEach(f=>{f==null||f.emit("PROVIDER_RECONCILING",{domain:t,providerName:i})}),(d=this._apiEmitter)==null||d.emit("PROVIDER_RECONCILING",{domain:t,providerName:i}),yield c,r.decrementPendingContextChanges())}r.status=this._statusEnumType.READY,r.allContextChangesSettled&&(this.getAssociatedEventEmitters(t).forEach(c=>{c==null||c.emit("PROVIDER_CONTEXT_CHANGED",{clientName:t,domain:t,providerName:i})}),(v=this._apiEmitter)==null||v.emit("PROVIDER_CONTEXT_CHANGED",{clientName:t,domain:t,providerName:i}))}catch(c){if(r.decrementPendingContextChanges(),r.status=this._statusEnumType.ERROR,r.allContextChangesSettled){let f=c,b=`Error running ${i}'s context change handler: ${f==null?void 0:f.message}`;(u=this._logger)==null||u.error(`${b}`,c),this.getAssociatedEventEmitters(t).forEach(B=>{B==null||B.emit("PROVIDER_ERROR",{clientName:t,domain:t,providerName:i,message:b})}),(P=this._apiEmitter)==null||P.emit("PROVIDER_ERROR",{clientName:t,domain:t,providerName:i,message:b})}}})}},ot=ge.getInstance();return Xe(nt);})(); //# sourceMappingURL=index.min.js.map