@statsig/js-client 3.8.3 → 3.9.1
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/build/statsig-js-client+session-replay+web-analytics.min.js +1 -1
- package/build/statsig-js-client+session-replay.min.js +1 -1
- package/build/statsig-js-client+web-analytics.min.js +1 -1
- package/build/statsig-js-client.min.js +1 -1
- package/package.json +2 -2
- package/src/StatsigClient.d.ts +94 -6
- package/src/StatsigClient.js +105 -83
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Statsig=e():t.Statsig=e()}(this,()=>(()=>{"use strict";var $Q=(e)=>Object.defineProperty(e,"__esModule",{value:!0});var $Q2=(a,b,c)=>Object.defineProperty(a,b,c);var $P=(a,b)=>Object.assign(a,b);var $A=()=>((t,r,u,l)=>{return new(u=u||Promise)(function(n,e){function i(t){try{s(l.next(t))}catch(t){e(t)}}function o(t){try{s(l.throw(t))}catch(t){e(t)}}function s(t){var e;t.done?n(t.value):((e=t.value)instanceof u?e:new u(function(t){t(e)})).then(i,o)}s((l=l.apply(t,r||[])).next())})});var i={845:(t,i,e)=>{var n;$Q2(i,"__esModule",{value:!0}),i.t=i.i=i.l=void 0;const s=e(512);i.l=()=>__STATSIG__||u,i.i=t=>(0,i.l)()[t];i.t=t=>{var e=(0,i.l)();return t?e.instances&&e.instances[t]:(e.instances&&1<Object.keys(e.instances).length&&s.Log.warn("Call made to Statsig global instance without an SDK key but there is more than one client instance. If you are using mulitple clients, please specify the SDK key."),e.firstInstance)};var r="__STATSIG__",l="undefined"!=typeof window?window:{},e=void 0!==e.g?e.g:{},o="undefined"!=typeof globalThis?globalThis:{};const u=null!=(n=null!=(n=null!=(n=l[r])?n:e[r])?n:o[r])?n:{instance:i.t};l[r]=u,e[r]=u,o[r]=u},137:(t,e,i)=>{$Q(e),e.o=e.u=void 0;const s=i(406);function n(t,e,i){if(i)return i(t,e);const n=e&&e.customIDs?e.customIDs:{};e=["uid:"+(null!=(i=null==e?void 0:e.userID)?i:""),"cids:"+Object.keys(n).sort((t,e)=>t.localeCompare(e)).map(t=>t+"-"+n[t]).join(","),"k:"+t];return(0,s.h)(e.join("|"))}e.u=n,e.o=function(t,e,i){return e?n(t,e,i):(0,s.h)("k:"+t)}},427:(t,e)=>{$Q(e)},694:function(t,e,i){var s=this&&this.__awaiter||$A();$Q(e),e.DataAdapterCore=void 0;const u=i(512),a=i(122),r=i(578),l=i(534),c=i(401);function h(t,e,i,n){return{source:t,data:e,receivedAt:Date.now(),stableID:i,fullUserHash:(0,r.v)(n)}}e.DataAdapterCore=class{constructor(t,e){this._=t,this.p=e,this.m=null,this.O=null,this.j="statsig.last_modified_time."+e,this.S=new n}attach(t,e){this.O=t,this.m=e}getDataSync(t){var t=t&&(0,r.T)(t,this.m),e=this.k(t),i=this.S.get(e,t);return i||((i=this.I(e))?(this.S.add(e,i),this.S.get(e,t)):null)}setData(t,e){var e=e&&(0,r.T)(e,this.m),i=this.k(e);this.S.add(i,h("Bootstrap",t,null,e))}D(e,i,n){return s(this,void 0,void 0,function*(){l.Storage.isReady()||(yield l.Storage.isReadyResolver());var t=null!=e?e:this.getDataSync(i),t=[this.M(t,i,n)];return null!=n&&n.timeoutMs&&t.push(new Promise(t=>setTimeout(t,n.timeoutMs)).then(()=>(u.Log.debug("Fetching latest value timed out"),null))),yield Promise.race(t)})}A(i,n){return s(this,void 0,void 0,function*(){var t=i&&(0,r.T)(i,this.m),e=this.k(t),t=yield this.D(null,t,n);t&&this.S.add(e,$P($P({},t),{source:"Prefetch"}))})}M(r,l,o){return s(this,void 0,void 0,function*(){let t=null;r&&this.N(r,l)&&(t=r.data);var e=yield this.R(t,l,o);if(!e)return u.Log.debug("No response returned for latest value"),null;var i=(0,c.P)(e,"has_updates","Response"),n=this.C(),n=a.StableID.get(n);let s=null;if(!0===(null==i?void 0:i.has_updates))s=h("Network",e,n,l);else{if(!t||!1!==(null==i?void 0:i.has_updates))return null;s=h("NetworkNotModified",t,n,l)}e=this.k(l);return this.S.add(e,s),this.U(e,s),s})}C(){return null!=this.O?this.O:(u.Log.error(this._+" is not attached to a Client"),"")}I(t){var e=null==(e=l.Storage.getItem)?void 0:e.call(l.Storage,t);return null!=e&&(t=(0,c.P)(e,"source","Cached Result"))?$P($P({},t),{source:"Cache"}):null}U(t,e){l.Storage.setItem(t,JSON.stringify(e)),this.F(t)}F(t){var e=null!=(e=(0,l.G)(this.j))?e:{},t=(e[t]=Date.now(),o(e,10));t&&(delete e[t],l.Storage.removeItem(t)),(0,l.L)(this.j,e)}};class n{constructor(){this.K={}}get(t,e){var t=this.K[t],i=null==t?void 0:t.stableID,e=null==(e=null==e?void 0:e.customIDs)?void 0:e.stableID;return e&&i&&e!==i?(u.Log.warn("'StatsigUser.customIDs.stableID' mismatch"),null):t}add(t,e){var i=o(this.K,9);i&&delete this.K[i],this.K[t]=e}merge(t){this.K=$P($P({},this.K),t)}}function o(s,t){var e=Object.keys(s);return e.length<=t?null:e.reduce((t,e)=>{var i=s[t],n=s[e];return"object"==typeof i&&"object"==typeof n?n.receivedAt<i.receivedAt?e:t:n<i?e:t})}},962:(t,r)=>{$Q2(r,"__esModule",{value:!0}),r.Diagnostics=void 0;const n=new Map,i="start";function s(t,e,i,n){return $P({key:i,action:e,step:n,timestamp:Date.now()},t)}function l(t,e){var i=null!=(i=n.get(t))?i:[];i.push(e),n.set(t,i)}function e(t,e){if(e in t)return t[e]}r.Diagnostics={q:t=>n.get(t),B:t=>{l(t,s({},i,"overall"))},V:(t,e,i)=>{l(t,s({success:e,error:e?void 0:{name:"InitializeError",message:"Failed to initialize"},evaluationDetails:i},"end","overall"))},J:(t,e)=>{l(t,s(e,i,"initialize","network_request"))},$:(t,e)=>{l(t,s(e,"end","initialize","network_request"))},W:t=>{l(t,s({},i,"initialize","process"))},H:(t,e)=>{l(t,s(e,"end","initialize","process"))},Y:t=>{n.delete(t)},X(t){if(t&&"object"==typeof t)return{code:e(t,"code"),name:e(t,"name"),message:e(t,"message")}},Z(t,e,i,n){return{success:!0===(null==t?void 0:t.ok),statusCode:null==t?void 0:t.status,sdkRegion:null==(t=null==t?void 0:t.headers)?void 0:t.get("x-statsig-region"),isDelta:!0===i.includes('"is_delta":true')||void 0,attempt:e,error:r.Diagnostics.X(n)}},tt(t,e,i,n){var s=r.Diagnostics.q(i);null==s||s.length<=0||(r.Diagnostics.Y(i),i=function(t,e){t={eventName:"statsig::diagnostics",user:t,value:null,metadata:e,time:Date.now()};return t}(t,{context:"initialize",markers:s.slice(),statsigOptions:n}),e.enqueue(i))}}},809:function(t,e){var i=this&&this.__awaiter||$A();$Q(e),e.et=void 0;const s=new Uint8Array([0,0,1,0,0,1,0,0,0,0,0,0,13,102,101,97,116,117,114,101,97,115,115,101,116,115,3,111,114,103,0,0,16,0,1]),r="https://cloudflare-dns.com/dns-query",l=["i","e","d"],o=200;e.et=function(e){return i(this,void 0,void 0,function*(){var i=yield e(r,{method:"POST",headers:{"Content-Type":"application/dns-message",Accept:"application/dns-message"},body:s});if(i.ok){var t,i=yield i.arrayBuffer(),i=new Uint8Array(i);{var n=i,i=n.findIndex((t,e)=>e<o&&"="===String.fromCharCode(t)&&l.includes(String.fromCharCode(n[e-1])));if(-1===i)throw(t=new Error("Failed to parse TXT records from DNS")).name="DnsTxtParseError",t;let e="";for(let t=i-1;t<n.length;t++)e+=String.fromCharCode(n[t]);return e.split(",")}}throw(t=new Error("Failed to fetch TXT records from DNS")).name="DnsTxtFetchError",t})}},539:(t,e)=>{$Q(e)},542:function(t,o,e){var i=this&&this.__awaiter||$A();$Q2(o,"__esModule",{value:!0}),o.ErrorBoundary=o.EXCEPTION_ENDPOINT=void 0;const n=e(512),u=e(902),a=e(0),c=(o.EXCEPTION_ENDPOINT="https://statsigapi.net/v1/sdk_exception","[Statsig] UnknownError");o.ErrorBoundary=class{constructor(t,e,i){this.O=t,this.m=e,this.nt=i,this.it=new Set}wrap(n){try{const t=n;!function(t){const e=new Set;let i=Object.getPrototypeOf(t);for(;i&&i!==Object.prototype;)Object.getOwnPropertyNames(i).filter(t=>"function"==typeof(null===i||void 0===i?void 0:i[t])).forEach(t=>e.add(t)),i=Object.getPrototypeOf(i);return Array.from(e)}(t).forEach(e=>{const i=t[e];"$EB"in i||(t[e]=(...t)=>this.rt(e,()=>i.apply(n,t)),t[e].$EB=!0)})}catch(t){this.st("eb:wrap",t)}}logError(t,e){this.st(t,e)}rt(e,t){try{var i=t();return i&&i instanceof Promise?i.catch(t=>this.st(e,t)):i}catch(t){return this.st(e,t),null}}st(r,l){try{n.Log.warn("Caught error in "+r,{error:l});i(this,void 0,void 0,function*(){var t,e,i=l||Error(c),n=i instanceof Error,s=n?i.name:"No Name";this.it.has(s)||(this.it.add(s),null!=(t=null==(t=this.m)?void 0:t.networkConfig)&&t.preventAllNetworkTraffic?null!=(t=this.nt)&&t.call(this,{name:"error",error:l,tag:r}):(t=u.SDKType.lt(this.O),e=a.StatsigMetadataProvider.get(),n=n?i.stack:function(t){try{return JSON.stringify(t)}catch(t){return c}}(i),i=JSON.stringify($P({tag:r,exception:s,info:n},$P($P({},e),{sdkType:t}))),yield(null!=(s=null==(n=null==(s=this.m)?void 0:s.networkConfig)?void 0:n.networkOverrideFunc)?s:fetch)(o.EXCEPTION_ENDPOINT,{method:"POST",headers:{"STATSIG-API-KEY":this.O,"STATSIG-SDK-TYPE":String(t),"STATSIG-SDK-VERSION":String(e.sdkVersion),"Content-Type":"application/json"},body:i}),null!=(n=this.nt)&&n.call(this,{name:"error",error:l,tag:r})))}).then(()=>{}).catch(()=>{})}catch(t){}}}},922:(t,e)=>{$Q(e)},417:(t,e)=>{$Q(e)},770:function(t,e,i){var n=this&&this.__awaiter||$A();$Q(e),e.EventLogger=void 0;const s=i(137),r=i(406),l=i(512),o=i(410),u=i(830),a=i(637),c=i(534),h=i(881),d=i(397),v={},f={Startup:"startup",GainedFocus:"gained_focus"};class _{static ot(t){null!=(t=v[t])&&t.flush().catch(()=>{})}static ut(t){null!=(t=v[t])&&t.ct(f.GainedFocus)}constructor(t,e,i,n){this.O=t,this.nt=e,this.ht=i,this.m=n,this.dt=[],this.vt={},this.ft={},this._t=!1,this.gt=Date.now(),this.bt=!0===(null==n?void 0:n.disableLogging),this.yt=null!=(t=null==n?void 0:n.loggingBufferMaxSize)?t:50;e=null==n?void 0:n.networkConfig;this.Ot=new h.UrlConfiguration(o.Endpoint.jt,null==e?void 0:e.logEventUrl,null==e?void 0:e.api,null==e?void 0:e.logEventFallbackUrls)}setLoggingDisabled(t){this.bt=t}enqueue(t){this.St(t)&&(this.wt(t),this.Tt(),this.dt.length>this.yt)&&_.ot(this.O)}incrementNonExposureCount(t){var e=null!=(e=this.ft[t])?e:0;this.ft[t]=e+1}reset(){this.vt={}}start(){(0,u.kt)()||(v[this.O]=this,(0,d.It)(t=>{"background"===t?_.ot(this.O):"foreground"===t&&_.ut(this.O)}),this.ct(f.Startup),this.Dt())}stop(){return n(this,void 0,void 0,function*(){this.Et&&(clearInterval(this.Et),this.Et=null),delete v[this.O],yield this.flush()})}flush(){return n(this,void 0,void 0,function*(){var t;this.Mt(),0!==this.dt.length&&(t=this.dt,this.dt=[],yield this.At(t))})}Tt(){this._t||(this._t=!0,200<Date.now()-this.gt)||setTimeout(()=>_.ot(this.O),200)}St(t){if((0,u.kt)())return!1;if((0,a.xt)(t)){var e=t.user||{statsigEnvironment:void 0},e=(0,s.u)(this.O,e),i=t.metadata||{},t=[t.eventName,e,i.gate,i.config,i.ruleID,i.allocatedExperiment,i.parameterName,String(i.isExplicitParameter),i.reason].join("|"),e=this.vt[t],i=Date.now();if(e&&i-e<6e4)return!1;1e3<Object.keys(this.vt).length&&(this.vt={}),this.vt[t]=i}return!0}At(t){var e,i;return n(this,void 0,void 0,function*(){if(this.bt)return this.Nt(t),!1;try{return((0,d.Rt)()&&this.ht.isBeaconSupported()&&null==(null==(i=null==(e=this.m)?void 0:e.networkConfig)?void 0:i.networkOverrideFunc)?yield this.Pt(t):yield this.Ct(t)).success?(this.nt({name:"logs_flushed",events:t}),!0):(l.Log.warn("Failed to flush events."),this.Nt(t),!1)}catch(t){return l.Log.warn("Failed to flush events."),!1}})}Ct(e){var i;return n(this,void 0,void 0,function*(){var t=yield this.ht.post(this.Ut(e)),t=null!=(i=null==t?void 0:t.code)?i:-1;return{success:200<=t&&t<300}})}Pt(t){return n(this,void 0,void 0,function*(){return{success:yield this.ht.beacon(this.Ut(t))}})}Ut(t){return{sdkKey:this.O,data:{events:t},urlConfig:this.Ot,retries:3,isCompressable:!0,params:{[o.NetworkParam.EventCount]:String(t.length)}}}Nt(t){for(;500<t.length;)t.shift();var e=this.o();try{(0,c.L)(e,t)}catch(t){l.Log.warn("Unable to save failed logs to storage")}}ct(e){const i=this.o();n(this,void 0,void 0,function*(){c.Storage.isReady()||(yield c.Storage.isReadyResolver());var t=(0,c.G)(i);t&&(e===f.Startup&&c.Storage.removeItem(i),yield this.At(t))&&e===f.GainedFocus&&c.Storage.removeItem(i)}).catch(()=>{l.Log.warn("Failed to flush stored logs")})}o(){return"statsig.failed_logs."+(0,r.h)(this.O)}wt(t){t.user&&(t.user=$P({},t.user),delete t.user.privateAttributes);var e={},i=this.Ft(),i=(i&&(e.statsigMetadata={currentPage:i}),$P($P({},t),e));l.Log.debug("Enqueued Event:",i),this.dt.push(i)}Mt(){0!==Object.keys(this.ft).length&&(this.wt({eventName:"statsig::non_exposed_checks",user:null,time:Date.now(),metadata:{checks:$P({},this.ft)}}),this.ft={})}Ft(){var t;if(!1!==(null==(t=this.m)?void 0:t.includeCurrentPageUrlWithEvents))return(0,u.Gt)()}Dt(){var t=null!=(t=null==(t=this.m)?void 0:t.loggingIntervalMs)?t:1e4;const e=setInterval(()=>{var t=v[this.O];t&&t.Et===e?_.ot(this.O):clearInterval(e)},t);this.Et=e}}e.EventLogger=_},406:(t,r,e)=>{$Q2(r,"__esModule",{value:!0}),r.Lt=r.Kt=r.h=void 0;const l=e(634);r.h=e=>{let i=0;for(let t=0;t<e.length;t++){var n=e.charCodeAt(t);i=(i<<5)-i+n,i&=i}return String(i>>>0)},r.Kt=(t,e)=>(0,r.h)(JSON.stringify((0,r.Lt)(t,e)));r.Lt=(i,n)=>{if(null==i)return null;var t=Object.keys(i).sort();const s={};return t.forEach(t=>{var e=i[t];0===n||"object"!==(0,l.zt)(e)?s[t]=e:s[t]=(0,r.Lt)(e,null!=n?n-1:n)}),s}},333:(t,e)=>{$Q(e)},512:(t,e)=>{$Q(e),e.Log=e.LogLevel=void 0;function i(t){return t.unshift("[Statsig]"),t}e.LogLevel={None:0,Error:1,Warn:2,Info:3,Debug:4};class n{static info(...t){this.level>=e.LogLevel.Info&&console.info(" INFO ",...i(t))}static debug(...t){this.level>=e.LogLevel.Debug&&console.debug(" DEBUG ",...i(t))}static warn(...t){this.level>=e.LogLevel.Warn&&console.warn(" WARN ",...i(t))}static error(...t){this.level>=e.LogLevel.Error&&console.error(" ERROR ",...i(t))}}(e.Log=n).level=e.LogLevel.Warn},410:(t,e)=>{$Q(e),e.NetworkParam=e.NetworkDefault=e.Endpoint=void 0,e.Endpoint={qt:"initialize",jt:"rgstr",Bt:"download_config_specs"},e.NetworkDefault={[e.Endpoint.jt]:"https://prodregistryv2.org/v1",[e.Endpoint.qt]:"https://featureassets.org/v1",[e.Endpoint.Bt]:"https://api.statsigcdn.com/v1"},e.NetworkParam={EventCount:"ec",SdkKey:"k",SdkType:"st",SdkVersion:"sv",Time:"t",SessionID:"sid",StatsigEncoded:"se",IsGzipped:"gz"}},404:function(t,e,i){var y=this&&this.__awaiter||$A();$Q(e),e.NetworkCore=void 0,i(845);const l=i(845),m=i(962),O=i(512),j=i(410),n=i(308),o=i(902),u=i(830),a=i(143),c=i(122),S=i(636),h=i(0),w=i(397),T=500,k=3e4,D=new Set([408,500,502,503,504,522,524,599]);e.NetworkCore=class{constructor(t,e){this.nt=e,this.Vt=1e4,this.Jt={},this.m={},this.$t=null,t&&(this.m=t),this.m.networkConfig&&(this.Jt=this.m.networkConfig),this.Jt.networkTimeoutMs&&(this.Vt=this.Jt.networkTimeoutMs),this.Wt=new n.NetworkFallbackResolver(this.m)}setErrorBoundary(t){this.$t=t,this.$t.wrap(this),this.$t.wrap(this.Wt),this.Wt.setErrorBoundary(t)}isBeaconSupported(){return"undefined"!=typeof navigator&&"function"==typeof navigator.sendBeacon}beacon(n){return y(this,void 0,void 0,function*(){var t,e,i;return!!I(n)&&(e=this.Ht("POST",n),t=yield this.Yt(e,n.data),e=yield this.Xt(e),(i=navigator).sendBeacon.bind(i)(e,t))})}post(e){return y(this,void 0,void 0,function*(){var t=this.Ht("POST",e);return t.body=yield this.Yt(t,e.data),e.isStatsigEncodable&&(t.body=this.Qt(t,t.body)),this.Zt(t)})}get(t){t=this.Ht("GET",t);return this.Zt(t)}Zt(g){var b,p;return y(this,void 0,void 0,function*(){if(!I(g))return null;if(this.Jt.preventAllNetworkTraffic)return null;var{method:e,body:i,retries:n,attempt:s}=g,s=null!=s?s:1;const r="undefined"!=typeof AbortController?new AbortController:null;var t=setTimeout(()=>{null!==r&&void 0!==r&&r.abort(`Timeout of ${this.Vt}ms expired.`)},this.Vt),l=yield this.Xt(g);let o=null;var u,a=(0,w.Rt)();try{var c,h,d,v={method:e,body:i,headers:$P({},g.headers),signal:null===r||void 0===r?void 0:r.signal,priority:g.priority,keepalive:a},f=(u=s,(_=g).urlConfig.endpoint===j.Endpoint.qt&&m.Diagnostics.J(_.sdkKey,{attempt:u}),null!=(b=this.Jt.networkOverrideFunc)?b:fetch);if(o=yield f(l,v),clearTimeout(t),o.ok)return d=yield o.text(),x(g,o,s,d),this.Wt.tryBumpExpiryTime(g.sdkKey,g.urlConfig),{body:d,code:o.status};throw c=yield o.text().catch(()=>"No Text"),(h=new Error(`NetworkError: ${l} `+c)).name="NetworkError",h}catch(t){var i=function(t,e){if(null!=t&&t.signal.aborted&&"string"==typeof t.signal.reason)return t.signal.reason;if("string"==typeof e)return e;if(e instanceof Error)return e.name+": "+e.message;return"Unknown Error"}(r,t),a=function(t){t=(null==t?void 0:t.signal.aborted)&&"string"==typeof t.signal.reason&&t.signal.reason.includes("Timeout");return t||!1}(r),_=(x(g,o,s,"",t),yield this.Wt.tryFetchUpdatedFallbackInfo(g.sdkKey,g.urlConfig,i,a));return(_&&(g.fallbackUrl=this.Wt.getActiveFallbackUrl(g.sdkKey,g.urlConfig)),!n||n<s||!D.has(null!=(p=null===o||void 0===o?void 0:o.status)?p:500))?(null!=(p=this.nt)&&p.call(this,{name:"error",error:t,tag:S.ErrorTag.NetworkError,requestArgs:g}),O.Log.error(`A networking error occured during ${e} request to ${l}.`,i,t),null):(yield function(e){return y(this,void 0,void 0,function*(){yield new Promise(t=>setTimeout(t,Math.min(T*(e*e),k)))})}(s),this.Zt($P($P({},g),{retries:n,attempt:s+1})))}})}Xt(n){var s;return y(this,void 0,void 0,function*(){var t=null!=(s=n.fallbackUrl)?s:n.urlConfig.getUrl();const e=$P({[j.NetworkParam.SdkKey]:n.sdkKey,[j.NetworkParam.SdkType]:o.SDKType.lt(n.sdkKey),[j.NetworkParam.SdkVersion]:h.SDK_VERSION,[j.NetworkParam.Time]:String(Date.now()),[j.NetworkParam.SessionID]:a.SessionID.get(n.sdkKey)},n.params);var i=Object.keys(e).map(t=>encodeURIComponent(t)+"="+encodeURIComponent(e[t])).join("&");return t+(i?"?"+i:"")})}Yt(s,r){return y(this,void 0,void 0,function*(){var{sdkKey:t,fallbackUrl:e}=s,i=c.StableID.get(t),n=a.SessionID.get(t),t=o.SDKType.lt(t);return JSON.stringify($P($P({},r),{statsigMetadata:$P($P({},h.StatsigMetadataProvider.get()),{stableID:i,sessionID:n,sdkType:t,fallbackUrl:e})}))})}Qt(e,i){var t,n,s=(0,u.te)();if(this.m.disableStatsigEncoding||null!=(0,l.i)("no-encode")||null==s||!s.btoa)return i;try{var r=null!=(t=s.btoa(i).split("").reverse().join(""))?t:i;return e.params=$P($P({},null!=(n=e.params)?n:{}),{[j.NetworkParam.StatsigEncoded]:"1"}),r}catch(t){return O.Log.warn("Request encoding failed for "+e.urlConfig.getUrl()),i}}Ht(t,e){var i=this.Wt.getActiveFallbackUrl(e.sdkKey,e.urlConfig);return $P($P({},e),{method:t,fallbackUrl:i})}};const I=t=>!!t.sdkKey||(O.Log.warn("Unable to make request without an SDK key"),!1);function x(t,e,i,n,s){t.urlConfig.endpoint===j.Endpoint.qt&&m.Diagnostics.$(t.sdkKey,m.Diagnostics.Z(e,i,n,s))}},308:function(t,e,i){var u=this&&this.__awaiter||$A();$Q(e),e.ee=e.NetworkFallbackResolver=void 0;const o=i(809),n=i(406),r=i(512),l=i(534);function a(t,e){t=null!=(t=null==t?void 0:t.toLowerCase())?t:"";return e||t.includes("uncaught exception")||t.includes("failed to fetch")||t.includes("networkerror when attempting to fetch resource")}function c(t){return"statsig.network_fallback."+(0,n.h)(t)}function h(t,e){t=c(t);e&&0!==Object.keys(e).length?l.Storage.setItem(t,JSON.stringify(e)):l.Storage.removeItem(t)}function d(t){try{return new URL(t).pathname}catch(t){return null}}e.NetworkFallbackResolver=class{constructor(t){this.ne=null,this.$t=null,this.ie={},this.re=null==(t=t.networkConfig)?void 0:t.networkOverrideFunc}setErrorBoundary(t){this.$t=t}tryBumpExpiryTime(t,e){var i=null==(i=this.ne)?void 0:i[e.endpoint];i&&(i.expiryTime=Date.now()+6048e5,h(t,$P($P({},this.ne),{[e.endpoint]:i})))}getActiveFallbackUrl(t,e){var i;let n=this.ne;null==n&&(n=null!=(s=function(t){t=c(t),t=l.Storage.getItem(t);if(!t)return null;try{return JSON.parse(t)}catch(t){return r.Log.error("Failed to parse FallbackInfo"),null}}(t))?s:{},this.ne=n);var s=n[e.endpoint];return!s||Date.now()>(null!=(i=s.expiryTime)?i:0)?(delete n[e.endpoint],this.ne=n,h(t,this.ne),null):s.url||null}getFallbackFromProvided(t){var e=d(t);return e?t.replace(e,""):null}tryFetchUpdatedFallbackInfo(i,n,s,r){var l,o;return u(this,void 0,void 0,function*(){try{var t,e;return a(s,r)?(t=null==n.customUrl&&null==n.fallbackUrls?yield this.se(n):n.fallbackUrls,!!(e=this.le(null==(l=this.ne)?void 0:l[n.endpoint],t))&&(this.oe(i,n.endpoint,e),!0)):!1}catch(t){return null!=(o=this.$t)&&o.logError("tryFetchUpdatedFallbackInfo",t),!1}})}oe(t,e,i){var i={url:i,expiryTime:Date.now()+6048e5,previous:[]},n=null==(n=this.ne)?void 0:n[e],n=(n&&i.previous.push(...n.previous),10<i.previous.length&&(i.previous=[]),null==(n=null==(n=this.ne)?void 0:n[e])?void 0:n.url);null!=n&&i.previous.push(n),this.ne=$P($P({},this.ne),{[e]:i}),h(t,this.ne)}se(r){var l;return u(this,void 0,void 0,function*(){var t=this.ie[r.endpoint];if(t&&Date.now()<t)return null;this.ie[r.endpoint]=Date.now()+144e5;var e=[],t=yield(0,o.et)(null!=(l=this.re)?l:fetch),i=d(r.defaultUrl);for(const s of t)if(s.startsWith(r.endpointDnsKey+"=")){var n=s.split("=");if(1<n.length){let t=n[1];t.endsWith("/")&&(t=t.slice(0,-1)),e.push("https://"+t+i)}}return e})}le(t,e){var i;if(null==e)return null;var n=new Set(null!=(i=null==t?void 0:t.previous)?i:[]),s=null==t?void 0:t.url;let r=null;for(const o of e){var l=o.endsWith("/")?o.slice(0,-1):o;if(!n.has(o)&&l!==s){r=l;break}}return r}},e.ee=a},405:(t,e)=>{$Q(e)},361:(t,e)=>{$Q(e)},902:(t,e)=>{$Q(e),e.SDKType=void 0;const i={};let n;e.SDKType={lt:t=>{return(null!=(t=i[t])?t:"js-mono")+(null!==n&&void 0!==n?n:"")},ue(t,e){i[t]=e},ae(t){n&&"-react"!==n||(n="-"+t)}}},830:(t,n)=>{$Q2(n,"__esModule",{value:!0}),n.Gt=n.ce=n.he=n.kt=n.de=n.te=void 0;n.te=()=>"undefined"!=typeof window?window:null,n.de=()=>{var t=(0,n.te)();return null!=(t=null==t?void 0:t.document)?t:null},n.kt=()=>{var t;return null===(0,n.de)()&&(t="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node,"string"==typeof EdgeRuntime||t)},n.he=(t,e)=>{var i=(0,n.te)();"function"==typeof(null==i?void 0:i.addEventListener)&&i.addEventListener(t,e)},n.ce=(t,e)=>{var i=(0,n.de)();"function"==typeof(null==i?void 0:i.addEventListener)&&i.addEventListener(t,e)};n.Gt=()=>{var t;try{return null==(t=(0,n.te)())?void 0:t.location.href.split(/[?#]/)[0]}catch(t){}}},143:(t,e,i)=>{$Q(e),e.StatsigSession=e.SessionID=void 0;const n=i(137),r=i(512),l=i(534),o=i(23),u=18e5,a=144e5,c={};function h(e,t){return setTimeout(()=>{var t=null===__STATSIG__||void 0===__STATSIG__?void 0:__STATSIG__.instance(e);t&&t.$emt({name:"session_expired"})},t)}function d(t){return"statsig.session_id."+(0,n.o)(t)}e.SessionID={get:t=>e.StatsigSession.get(t).data.sessionID},e.StatsigSession={get:t=>{null==c[t]&&(c[t]=function(t){let e=function(t){t=d(t);return(0,l.G)(t)}(t);var i=Date.now();e=e||{sessionID:(0,o.getUUID)(),startTime:i,lastUpdate:i};return{data:e,sdkKey:t}}(t));var t=c[t],e=Date.now(),i=t.data,n=((function({lastUpdate:t}){return Date.now()-t>u}(i)||function({startTime:t}){return Date.now()-t>a}(i))&&(i.sessionID=(0,o.getUUID)(),i.startTime=e),i.lastUpdate=e,i),s=t.sdkKey;s=d(s);try{(0,l.L)(s,n)}catch(t){r.Log.warn("Failed to save SessionID")}return clearTimeout(t.idleTimeoutID),clearTimeout(t.ageTimeoutID),e-=i.startTime,i=t.sdkKey,t.idleTimeoutID=h(i,u),t.ageTimeoutID=h(i,a-e),t},overrideInitialSessionID:(t,e)=>{var i;c[e]=(t=t,e=e,i=Date.now(),{data:{sessionID:t,startTime:i,lastUpdate:i},sdkKey:e})}}},122:(t,e,i)=>{$Q(e),e.StableID=void 0;const n=i(137),s=i(512),r=i(534),l=i(23),o={};function u(t){return"statsig.stable_id."+(0,n.o)(t)}function a(t,e){e=u(e);try{(0,r.L)(e,t)}catch(t){s.Log.warn("Failed to save StableID")}}e.StableID={get:e=>{if(null==o[e]){let t=function(t){t=u(t);return(0,r.G)(t)}(e);null==t&&a(t=(0,l.getUUID)(),e),o[e]=t}return o[e]},setOverride:(t,e)=>{a(o[e]=t,e)}}},375:function(t,e,i){var n=this&&this.__awaiter||$A();$Q(e),e.StatsigClientBase=void 0,i(845);const l=i(845),o=i(542),u=i(770),a=i(512),c=i(830),h=i(143),d=i(534);e.StatsigClientBase=class{constructor(t,e,i,n){this.loadingStatus="Uninitialized",this.ve=null,this.fe={};var s,r=this.$emt.bind(this);null!=(null==n?void 0:n.logLevel)&&(a.Log.level=n.logLevel),null!=n&&n.disableStorage&&d.Storage._e(!0),null!=n&&n.initialSessionID&&h.StatsigSession.overrideInitialSessionID(n.initialSessionID,t),null!=n&&n.storageProvider&&d.Storage.ge(n.storageProvider),this.O=t,this.m=null!=n?n:{},this.overrideAdapter=null!=(s=null==n?void 0:n.overrideAdapter)?s:null,this.pe=new u.EventLogger(t,r,i,n),this.$t=new o.ErrorBoundary(t,n,r),this.$t.wrap(this),this.$t.wrap(e),this.$t.wrap(this.pe),i.setErrorBoundary(this.$t),this.dataAdapter=e,this.dataAdapter.attach(t,n),this.storageProvider=d.Storage,this.be(),s=t,r=this,(0,c.kt)()||(i=(0,l.l)(),e=null!=(e=i.instances)?e:{},r=r,null!=e[s]&&a.Log.warn("Creating multiple Statsig clients with the same SDK key can lead to unexpected behavior. Multi-instance support requires different SDK keys."),e[s]=r,i.firstInstance||(i.firstInstance=r),i.instances=e,__STATSIG__=i)}updateRuntimeOptions(t){null!=t.disableLogging&&(this.m.disableLogging=t.disableLogging,this.pe.setLoggingDisabled(t.disableLogging)),null!=t.disableStorage&&(this.m.disableStorage=t.disableStorage,d.Storage._e(t.disableStorage))}flush(){return this.pe.flush()}shutdown(){return n(this,void 0,void 0,function*(){this.$emt({name:"pre_shutdown"}),this.me("Uninitialized",null),this.ve=null,yield this.pe.stop()})}on(t,e){this.fe[t]||(this.fe[t]=[]),this.fe[t].push(e)}off(t,e){this.fe[t]&&-1!==(e=this.fe[t].indexOf(e))&&this.fe[t].splice(e,1)}$on(t,e){e.__isInternal=!0,this.on(t,e)}$emt(i){var t;const e=e=>{try{e(i)}catch(t){!0===e.__isInternal?this.$t.logError("__emit:"+i.name,t):a.Log.error("An error occurred in a StatsigClientEvent listener. This is not an issue with Statsig.",i)}};this.fe[i.name]&&this.fe[i.name].forEach(t=>e(t)),null!=(t=this.fe["*"])&&t.forEach(e)}me(t,e){this.loadingStatus=t,this.$emt({name:"values_updated",status:t,values:e})}ye(t,e,i){!0===(null==i?void 0:i.disableExposureLog)?this.pe.incrementNonExposureCount(t):this.pe.enqueue(e)}}},636:(t,e)=>{$Q(e),e.ErrorTag=void 0,e.ErrorTag={NetworkError:"NetworkError"}},206:(t,e)=>{$Q(e),e.DataAdapterCachePrefix=void 0,e.DataAdapterCachePrefix="statsig.cached"},637:(t,e)=>{$Q(e),e.Oe=e.je=e.Se=e.xt=void 0;const s="statsig::config_exposure",r="statsig::gate_exposure",u="statsig::layer_exposure",a=(t,e,i,n,s)=>(i.bootstrapMetadata&&(n.bootstrapMetadata=i.bootstrapMetadata),{eventName:t,user:e,value:null,metadata:l(i,n),secondaryExposures:s,time:Date.now()});e.xt=({eventName:t})=>t===r||t===s||t===u,e.Se=(t,e)=>{var i,n={gate:e.name,gateValue:String(e.value),ruleID:e.ruleID};return null!=(null==(i=e.__evaluation)?void 0:i.version)&&(n.configVersion=e.__evaluation.version),a(r,t,e.details,n,null!=(t=null==(i=e.__evaluation)?void 0:i.secondary_exposures)?t:[])},e.je=(t,e)=>{var i,n={config:e.name,ruleID:e.ruleID};return null!=(null==(i=e.__evaluation)?void 0:i.version)&&(n.configVersion=e.__evaluation.version),null!=(null==(i=e.__evaluation)?void 0:i.passed)&&(n.rulePassed=String(e.__evaluation.passed)),a(s,t,e.details,n,null!=(t=null==(i=e.__evaluation)?void 0:i.secondary_exposures)?t:[])};e.Oe=(t,e,i)=>{var n=e.__evaluation,s=!0===(null==(s=null==n?void 0:n.explicit_parameters)?void 0:s.includes(i));let r="",l=null!=(o=null==n?void 0:n.undelegated_secondary_exposures)?o:[];s&&(r=null!=(o=n.allocated_experiment_name)?o:"",l=n.secondary_exposures);var o={config:e.name,parameterName:i,ruleID:e.ruleID,allocatedExperiment:r,isExplicitParameter:String(s)};return null!=(null==(n=e.__evaluation)?void 0:n.version)&&(o.configVersion=e.__evaluation.version),a(u,t,e.details,o,l)};const l=(t,e)=>(e.reason=t.reason,t.lcut&&(e.lcut=String(t.lcut)),t.receivedAt&&(e.receivedAt=String(t.receivedAt)),e)},0:(t,e)=>{$Q(e),e.StatsigMetadataProvider=e.SDK_VERSION=void 0,e.SDK_VERSION="3.8.3";let i={sdkVersion:e.SDK_VERSION,sdkType:"js-mono"};e.StatsigMetadataProvider={get:()=>i,add:t=>{i=$P($P({},i),t)}}},586:(t,e)=>{$Q(e)},98:(t,e)=>{$Q(e)},59:(t,e,i)=>{$Q(e),e.we=e.Te=e.ke=e.Ie=e.De=e.Ee=void 0;const l=i(512),o=i(634),s="default";function r(t,e,i,n){return{name:t,details:e,ruleID:null!=(t=null==i?void 0:i.rule_id)?t:s,__evaluation:i,value:n}}function n(t,e,i){var n=null!=(n=null==i?void 0:i.value)?n:{};return $P($P({},r(t,e,i,n)),{get:u(t,null==i?void 0:i.value)})}function u(n,s,r){return(t,e)=>{var i=null!=(i=null==s?void 0:s[t])?i:null;return null==i?null!=e?e:null:null==e||(0,o.Me)(i,e)?(null!=r&&r(t),i):(l.Log.warn(`Parameter type mismatch. '${n}.${t}' was found to be type '${typeof i}' but fallback/return type is '${typeof e}'. See https://docs.statsig.com/client/javascript-sdk/#typed-getters`),null!=e?e:null)}}e.Ee=function(t,e,i){return r(t,e,i,!0===(null==i?void 0:i.value))},e.De=n,e.Ie=function(t,e,i){return t=n(t,e,i),$P($P({},t),{groupName:null!=(e=null==i?void 0:i.group_name)?e:null})},e.ke=function(t,e,i,n){return $P($P({},r(t,e,i,void 0)),{get:u(t,null==i?void 0:i.value,n),groupName:null!=(e=null==i?void 0:i.group_name)?e:null,__value:null!=(t=null==i?void 0:i.value)?t:{}})},e.Te=function(t,e,i,n){return $P($P($P({},t),e),{get:u(t.name,i,n)})},e.we=u},812:(t,e)=>{$Q(e)},578:(t,e,i)=>{$Q(e),e.v=e.T=void 0;const n=i(406),s=i(512);e.T=function(t,e,i){try{var n=JSON.parse(JSON.stringify(t));return null!=e&&null!=e.environment?n.statsigEnvironment=e.environment:null!=i&&(n.statsigEnvironment={tier:i}),n}catch(t){return s.Log.error("Failed to JSON.stringify user"),{statsigEnvironment:void 0}}},e.v=function(t){return t?(0,n.Kt)(t):null}},534:(t,i,e)=>{$Q2(i,"__esModule",{value:!0}),i.L=i.G=i.Storage=void 0;var n=e(512),e=e(830);const s={},r={isReady:()=>!0,isReadyResolver:()=>null,getProviderName:()=>"InMemory",getItem:t=>s[t]||null,setItem:(t,e)=>{s[t]=e},removeItem:t=>{delete s[t]},getAllKeys:()=>Object.keys(s)};let l=null;try{const a=(0,e.te)();a&&a.localStorage&&"function"==typeof a.localStorage.getItem&&(l={isReady:()=>!0,isReadyResolver:()=>null,getProviderName:()=>"LocalStorage",getItem:t=>a.localStorage.getItem(t),setItem:(t,e)=>a.localStorage.setItem(t,e),removeItem:t=>a.localStorage.removeItem(t),getAllKeys:()=>Object.keys(a.localStorage)})}catch(t){n.Log.warn("Failed to setup localStorageProvider.")}let o=null!==l&&void 0!==l?l:r,u=o;i.Storage={isReady:()=>u.isReady(),isReadyResolver:()=>u.isReadyResolver(),getProviderName:()=>u.getProviderName(),getItem:t=>{var e=()=>u.getItem(t);try{return e()}catch(t){if(t instanceof Error&&"SecurityError"===t.name)return i.Storage.ge(r),null;throw t}},setItem:(t,e)=>u.setItem(t,e),removeItem:t=>u.removeItem(t),getAllKeys:()=>u.getAllKeys(),ge:t=>{o=t,u=t},_e:t=>{u=t?r:o}},i.G=function(t){return t=i.Storage.getItem(t),JSON.parse(null!=t?t:"null")},i.L=function(t,e){i.Storage.setItem(t,JSON.stringify(e))}},401:(t,e,i)=>{$Q(e),e.P=void 0;const s=i(512);e.P=function(t,e,i){try{var n=JSON.parse(t);return"object"==typeof n&&0 in n,n}catch(t){}return s.Log.error("Failed to parse "+i),null}},634:(t,e)=>{$Q(e),e.Me=e.zt=void 0,e.zt=function(t){return Array.isArray(t)?"array":typeof t},e.Me=function(t,e){var i=t=>Array.isArray(t)?"array":typeof t;return i(t)===i(e)}},23:(t,e)=>{$Q(e),e.getUUID=void 0,e.getUUID=function(){if("undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID)return crypto.randomUUID();let i=(new Date).getTime(),n="undefined"!=typeof performance&&performance.now&&1e3*performance.now()||0;return`xxxxxxxx-xxxx-4xxx-${"89ab"[Math.floor(4*Math.random())]}xxx-xxxxxxxxxxxx`.replace(/[xy]/g,t=>{let e=16*Math.random();return 0<i?(e=(i+e)%16|0,i=Math.floor(i/16)):(e=(n+e)%16|0,n=Math.floor(n/16)),("x"===t?e:7&e|8).toString(16)})}},881:(t,e,i)=>{$Q(e),e.UrlConfiguration=void 0;const s=i(410),r={[s.Endpoint.qt]:"i",[s.Endpoint.jt]:"e",[s.Endpoint.Bt]:"d"};e.UrlConfiguration=class{constructor(t,e,i,n){this.customUrl=null,this.fallbackUrls=null,this.endpoint=t,this.endpointDnsKey=r[t],e&&(this.customUrl=e),!e&&i&&(this.customUrl=i.endsWith("/")?""+i+t:i+"/"+t),n&&(this.fallbackUrls=n);e=s.NetworkDefault[t];this.defaultUrl=e+"/"+t}getUrl(){var t;return null!=(t=this.customUrl)?t:this.defaultUrl}}},397:(t,e,i)=>{$Q(e),e.Ae=e.It=e.Rt=e.xe=void 0;i=i(830);const n="foreground",s="background",r=[];let l=n,o=!1;e.xe=()=>l===n,e.Rt=()=>o,e.It=t=>{r.unshift(t)};e.Ae=e=>{e!==l&&(l=e,r.forEach(t=>t(e)))},(0,i.he)("focus",()=>{(o=!1,e.Ae)(n)}),(0,i.he)("blur",()=>(0,e.Ae)(s)),(0,i.he)("beforeunload",()=>{o=!0,(0,e.Ae)(s)}),(0,i.ce)("visibilitychange",()=>{(0,e.Ae)("visible"===document.visibilityState?n:s)})},914:function(t,e,i){var n=this&&this.__createBinding||(Object.create?function(t,e,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(e,i);s&&("get"in s?e.__esModule:!s.writable&&!s.configurable)||(s={enumerable:!0,get:function(){return e[i]}}),$Q2(t,n,s)}:function(t,e,i,n){t[n=void 0===n?i:n]=e[i]}),s=this&&this.__exportStar||function(t,e){for(var i in t)"default"===i||Object.prototype.hasOwnProperty.call(e,i)||n(e,t,i)};$Q(e),e.Diagnostics=e.Log=e.Storage=e.EventLogger=void 0,i(845);const r=i(962),l=($Q2(e,"Diagnostics",{enumerable:!0,get:function(){return r.Diagnostics}}),i(770)),o=($Q2(e,"EventLogger",{enumerable:!0,get:function(){return l.EventLogger}}),i(512));$Q2(e,"Log",{enumerable:!0,get:function(){return o.Log}});var u=i(0);const a=i(534);$Q2(e,"Storage",{enumerable:!0,get:function(){return a.Storage}}),s(i(845),e),s(i(137),e),s(i(427),e),s(i(694),e),s(i(962),e),s(i(539),e),s(i(542),e),s(i(922),e),s(i(417),e),s(i(406),e),s(i(333),e),s(i(512),e),s(i(410),e),s(i(404),e),s(i(405),e),s(i(361),e),s(i(830),e),s(i(902),e),s(i(143),e),s(i(122),e),s(i(375),e),s(i(636),e),s(i(206),e),s(i(637),e),s(i(0),e),s(i(586),e),s(i(98),e),s(i(59),e),s(i(812),e),s(i(578),e),s(i(534),e),s(i(401),e),s(i(634),e),s(i(881),e),s(i(23),e),s(i(397),e),__STATSIG__=$P($P({},null!==__STATSIG__&&void 0!==__STATSIG__?__STATSIG__:{}),{Log:o.Log,SDK_VERSION:u.SDK_VERSION})},296:function(t,e,i){var n=this&&this.__createBinding||(Object.create?function(t,e,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(e,i);s&&("get"in s?e.__esModule:!s.writable&&!s.configurable)||(s={enumerable:!0,get:function(){return e[i]}}),$Q2(t,n,s)}:function(t,e,i,n){t[n=void 0===n?i:n]=e[i]}),s=this&&this.__exportStar||function(t,e){for(var i in t)"default"===i||Object.prototype.hasOwnProperty.call(e,i)||n(e,t,i)};$Q(e),s(i(18),e),e.default=__STATSIG__},262:(t,e,i)=>{$Q(e),e.Ne=void 0;const n=i(914);function s(t,e){null!=t&&t.forEach(t=>{delete e[t]})}e.Ne=function(t,e){var i;return(e=(0,n.P)(e,"checksum","DeltasEvaluationResponse"))?(t=t,i=e,t=$P($P($P({},t),i),{feature_gates:$P($P({},t.feature_gates),i.feature_gates),layer_configs:$P($P({},t.layer_configs),i.layer_configs),dynamic_configs:$P($P({},t.dynamic_configs),i.dynamic_configs)}),s((t=i=t).deleted_gates,t.feature_gates),delete t.deleted_gates,s(i.deleted_configs,t.dynamic_configs),delete t.deleted_configs,s(i.deleted_layers,t.layer_configs),delete t.deleted_layers,i=t,(t=(0,n.Kt)({feature_gates:i.feature_gates,dynamic_configs:i.dynamic_configs,layer_configs:i.layer_configs},2))===e.checksumV2?JSON.stringify(i):{hadBadDeltaChecksum:!0,badChecksum:t,badMergedConfigs:i,badFullResponse:e.deltas_full_response}):{hadBadDeltaChecksum:!0}}},226:(t,e,i)=>{$Q(e);const s=i(914);e.default=class{constructor(t){this.O=t,this.Re=null,this.Pe=null,this.Ce="Uninitialized",this.Ue=0,this.Fe=0,this.Ge=null,this.Le=new Set}reset(){this.Pe=null,this.Re=null,this.Ce="Loading",this.Ue=0,this.Fe=0,this.Ge=null}finalize(){this.Pe||(this.Ce="NoValues")}getValues(){return this.Re?(0,s.P)(this.Re,"has_updates","EvaluationStoreValues"):null}setValues(t,e){var i;return!!t&&null!=(i=(0,s.P)(t.data,"has_updates","EvaluationResponse"))&&(this.Ce=t.source,!0===(null==i?void 0:i.has_updates)&&(this.Re=t.data,this.Ue=i.time,this.Fe=t.receivedAt,this.Pe=i,this.Ge=this.Ke(t.source,i),t.source)&&i.user&&this.ze(e,i),!0)}getGate(t){var e;return this.qe(null==(e=this.Pe)?void 0:e.feature_gates,t)}getConfig(t){var e;return this.qe(null==(e=this.Pe)?void 0:e.dynamic_configs,t)}getLayer(t){var e;return this.qe(null==(e=this.Pe)?void 0:e.layer_configs,t)}getParamStore(t){var e;return this.qe(null==(e=this.Pe)?void 0:e.param_stores,t)}Ke(t,e){return"Bootstrap"!==t?null:(t={},e.user&&(t.user=e.user),e.sdkInfo&&(t.generatorSDKInfo=e.sdkInfo),t.lcut=e.time,t)}qe(t,e){let i=null;return{result:i=t?t[e]||t[(0,s.h)(e)]:i,details:this.Be(null==i)}}ze(t,e){var i,n=s.StableID.get(this.O);(null==(i=t.customIDs)?void 0:i.stableID)!==n?this.Le.add("StableIDMismatch"):"user"in e&&(i=e.user,(0,s.v)(t)!==(0,s.v)(i))&&this.Le.add("PartialUserMatch")}getCurrentSourceDetails(){var t;return"Uninitialized"===this.Ce||"NoValues"===this.Ce?{reason:this.Ce}:(t={reason:this.Ce,lcut:this.Ue,receivedAt:this.Fe},0<this.Le.size&&(t.warnings=Array.from(this.Le)),t)}Be(t){var e=this.getCurrentSourceDetails();let i=e.reason;var n=null!=(n=e.warnings)?n:[],t=("Bootstrap"===this.Ce&&0<n.length&&(i+=n[0]),"Uninitialized"!==i&&"NoValues"!==i&&(i=i+":"+(t?"Unrecognized":"Recognized")),"Bootstrap"===this.Ce&&null!=(n=this.Ge)?n:void 0);return t&&(e.bootstrapMetadata=t),$P($P({},e),{reason:i})}}},448:function(t,e,i){var l=this&&this.__awaiter||$A();$Q(e);const o=i(914),u=i(262);class n extends o.NetworkCore{constructor(t,e){super(t,e);e=null==t?void 0:t.networkConfig;this.Ve=new o.UrlConfiguration(o.Endpoint.qt,null==e?void 0:e.initializeUrl,null==e?void 0:e.api,null==e?void 0:e.initializeFallbackUrls)}fetchEvaluations(i,n,s,r){return l(this,void 0,void 0,function*(){var t=n?(0,o.P)(n,"has_updates","InitializeResponse"):null;let e={user:r,hash:"djb2",deltasResponseRequested:!1};return null!=t&&t.has_updates&&(e=$P($P({},e),{sinceTime:t.time,previousDerivedFields:"derived_fields"in t?t.derived_fields:{},deltasResponseRequested:!0})),this.Je(i,t,e,s)})}Je(e,i,n,s){var r;return l(this,void 0,void 0,function*(){var t=yield this.post({sdkKey:e,urlConfig:this.Ve,data:n,retries:2,isStatsigEncodable:!0,priority:s});return 204===(null==t?void 0:t.code)?'{"has_updates": false}':200!==(null==t?void 0:t.code)?null!=(r=null==t?void 0:t.body)?r:null:!0!==(null==i?void 0:i.has_updates)||!0!==(null==(r=t.body)?void 0:r.includes('"is_delta":true'))||!0!==n.deltasResponseRequested?t.body:"string"==typeof(t=(0,u.Ne)(i,t.body))?t:this.Je(e,i,$P($P($P({},n),t),{deltasResponseRequested:!1}),s)})}}e.default=n},583:(t,e,i)=>{$Q(e),e.$e=void 0;const g=i(914),b={disableExposureLog:!0};function p(t){return null==t||!1===t.disableExposureLog}function y(t,e){return null!=e&&!(0,g.Me)(t,e)}e.$e=function(v,f,_){return(t,e)=>{if(null==f)return e;var i,n,s,r,l,o,u,a,c,h,d=f[t];if(null==d||null!=e&&(0,g.zt)(e)!==d.param_type)return e;switch(d.ref_type){case"static":return d.value;case"gate":return h=d,v.getFeatureGate(h.gate_name,p(_)?void 0:b).value?h.pass_value:h.fail_value;case"dynamic_config":return h=d,u=e,a=_,y(c=(o=v).getDynamicConfig(h.config_name,b).get(h.param_name),u)?u:(p(a)&&o.getDynamicConfig(h.config_name),c);case"experiment":return u=d,a=e,o=_,y(l=(c=v).getExperiment(u.experiment_name,b).get(u.param_name),a)?a:(p(o)&&c.getExperiment(u.experiment_name),l);case"layer":return l=d,n=e,s=_,y(r=(i=v).getLayer(l.layer_name,b).get(l.param_name),n)?n:(p(s)&&i.getLayer(l.layer_name).get(l.param_name),r);default:return e}}}},198:function(t,e,i){var s=this&&this.__awaiter||$A();$Q(e);const l=i(914),o=i(226),u=i(448),r=i(583),a=i(131);class n extends l.StatsigClientBase{static instance(t){var e=(0,l.l)().instance(t);return e instanceof n?e:(l.Log.warn((0,l.kt)()?"StatsigClient.instance is not supported in server environments":"Unable to find StatsigClient instance"),new n(null!=t?t:"",{}))}constructor(t,e,i=null){l.SDKType.ue(t,"javascript-client");var n,s=new u.default(i,t=>{this.$emt(t)}),s=(super(t,null!=(n=null==i?void 0:i.dataAdapter)?n:new a.StatsigEvaluationsDataAdapter,s,i),this.We=new o.default(t),this.He=(0,l.T)(e,i),null!=(n=null==i?void 0:i.plugins)?n:[]);for(const r of s)r.bind(this)}initializeSync(t){"Uninitialized"===this.loadingStatus&&(this.pe.start(),this.updateUserSync(this.He,t))}initializeAsync(t){return s(this,void 0,void 0,function*(){return this.ve||(this.ve=this.Ye(t)),this.ve})}updateUserSync(t,e){this.Xe(t);t=this.dataAdapter.getDataSync(this.He),this.We.setValues(t,this.He),this.Qe(t),e=null==e?void 0:e.disableBackgroundCacheRefresh;!0===e||null==e&&"Bootstrap"===(null==t?void 0:t.source)||this.Ze(null!=t?t:null,this.He)}updateUserAsync(i,n){return s(this,void 0,void 0,function*(){this.Xe(i);var t=this.He,e=(l.Diagnostics.B(this.O),this.dataAdapter.getDataSync(t));if(this.We.setValues(e,this.He),this.me("Loading",e),e=yield this.dataAdapter.getDataAsync(e,t,n),t===this.He){let t=!1;null!=e&&(l.Diagnostics.W(this.O),t=this.We.setValues(e,this.He),l.Diagnostics.H(this.O,{success:t})),this.Qe(e),t||this.$emt({name:"initialization_failure"}),l.Diagnostics.V(this.O,t,this.We.getCurrentSourceDetails()),l.Diagnostics.tt(this.He,this.pe,this.O,this.m)}})}getContext(){return{sdkKey:this.O,options:this.m,values:this.We.getValues(),user:JSON.parse(JSON.stringify(this.He)),errorBoundary:this.$t,session:l.StatsigSession.get(this.O),stableID:l.StableID.get(this.O)}}checkGate(t,e){return this.getFeatureGate(t,e).value}getFeatureGate(t,e){var{result:i,details:n}=this.We.getGate(t),n=(0,l.Ee)(t,n,i),s=null==(s=null==(i=this.overrideAdapter)?void 0:i.getGateOverride)?void 0:s.call(i,n,this.He,e),i=null!=s?s:n;return this.ye(t,(0,l.Se)(this.He,i),e),this.$emt({name:"gate_evaluation",gate:i}),i}getDynamicConfig(t,e){var{result:i,details:n}=this.We.getConfig(t),n=(0,l.De)(t,n,i),s=null==(s=null==(i=this.overrideAdapter)?void 0:i.getDynamicConfigOverride)?void 0:s.call(i,n,this.He,e),i=null!=s?s:n;return this.ye(t,(0,l.je)(this.He,i),e),this.$emt({name:"dynamic_config_evaluation",dynamicConfig:i}),i}getExperiment(t,e){var{result:i,details:n}=this.We.getConfig(t),n=(0,l.Ie)(t,n,i),s=null==(s=null==(i=this.overrideAdapter)?void 0:i.getExperimentOverride)?void 0:s.call(i,n,this.He,e),i=null!=s?s:n;return this.ye(t,(0,l.je)(this.He,i),e),this.$emt({name:"experiment_evaluation",experiment:i}),i}getLayer(e,i){var{result:t,details:n}=this.We.getLayer(e),n=(0,l.ke)(e,n,t),s=null==(s=null==(t=this.overrideAdapter)?void 0:t.getLayerOverride)?void 0:s.call(t,n,this.He,i);const r=(0,l.Te)(n,s,null!=(t=null==s?void 0:s.__value)?t:n.__value,t=>{this.ye(e,(0,l.Oe)(this.He,r,t),i)});return this.$emt({name:"layer_evaluation",layer:r}),r}getParameterStore(t,e){var{result:i,details:n}=this.We.getParamStore(t);return this.pe.incrementNonExposureCount(t),{name:t,details:n,__configuration:i,get:(0,r.$e)(this,i,e)}}logEvent(t,e,i){this.pe.enqueue($P($P({},"string"==typeof t?{eventName:t,value:e,metadata:i}:t),{user:this.He,time:Date.now()}))}be(){this.$on("error",()=>{"Loading"===this.loadingStatus&&this.Qe(null)})}Ye(t){return s(this,void 0,void 0,function*(){return l.Storage.isReady()||(yield l.Storage.isReadyResolver()),this.pe.start(),this.updateUserAsync(this.He,t)})}Qe(t){this.We.finalize(),this.me("Ready",t)}Ze(t,e){this.dataAdapter.getDataAsync(t,e,{priority:"low"}).catch(t=>{l.Log.error("An error occurred after update.",t)})}Xe(t){this.pe.reset(),this.We.reset(),this.He=(0,l.T)(t,this.m);t=null==(t=this.He.customIDs)?void 0:t.stableID;t&&l.StableID.setOverride(t,this.O)}}e.default=n},131:function(t,e,i){var r=this&&this.__awaiter||$A();$Q(e),e.StatsigEvaluationsDataAdapter=void 0;const n=i(914),s=i(448);class l extends n.DataAdapterCore{constructor(){super("EvaluationsDataAdapter","evaluations"),this.ht=null,this.m=null}attach(t,e){super.attach(t,e),this.ht=new s.default(null!=e?e:{})}getDataAsync(t,e,i){return this.D(t,(0,n.T)(e,this.m),i)}prefetchData(t,e){return this.A(t,e)}setData(t){var e=(0,n.P)(t,"has_updates","data");e&&"user"in e?super.setData(t,e.user):n.Log.error("StatsigUser not found. You may be using an older server SDK version. Please upgrade your SDK or use setDataLegacy.")}setDataLegacy(t,e){super.setData(t,e)}R(e,i,n){var s;return r(this,void 0,void 0,function*(){var t=yield null==(s=this.ht)?void 0:s.fetchEvaluations(this.C(),e,null==n?void 0:n.priority,i);return null!=t?t:null})}k(t){t=(0,n.o)(this.C(),t,null==(t=this.m)?void 0:t.customUserCacheKeyFunc);return`${n.DataAdapterCachePrefix}.${this.p}.`+t}N(t,e){return null!=t.fullUserHash&&t.fullUserHash===(0,n.v)(e)}}e.StatsigEvaluationsDataAdapter=l},18:function(t,e,i){var n=this&&this.__createBinding||(Object.create?function(t,e,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(e,i);s&&("get"in s?e.__esModule:!s.writable&&!s.configurable)||(s={enumerable:!0,get:function(){return e[i]}}),$Q2(t,n,s)}:function(t,e,i,n){t[n=void 0===n?i:n]=e[i]}),s=this&&this.__exportStar||function(t,e){for(var i in t)"default"===i||Object.prototype.hasOwnProperty.call(e,i)||n(e,t,i)},r=($Q(e),e.StatsigClient=void 0,i(198));e.StatsigClient=r.default,s(i(914),e),__STATSIG__=$P($P({},null!==__STATSIG__&&void 0!==__STATSIG__?__STATSIG__:{}),{StatsigClient:r.default}),e.default=__STATSIG__}},n={};function s(t){var e=n[t];return void 0!==e||(e=n[t]={exports:{}},i[t].call(e.exports,e,e.exports,s)),e.exports}return s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s(296).default})());
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Statsig=e():t.Statsig=e()}(this,()=>(()=>{"use strict";var $Q=(e)=>Object.defineProperty(e,"__esModule",{value:!0});var $Q2=(a,b,c)=>Object.defineProperty(a,b,c);var $P=(a,b)=>Object.assign(a,b);var $A=()=>((t,r,u,l)=>{return new(u=u||Promise)(function(n,e){function i(t){try{s(l.next(t))}catch(t){e(t)}}function o(t){try{s(l.throw(t))}catch(t){e(t)}}function s(t){var e;t.done?n(t.value):((e=t.value)instanceof u?e:new u(function(t){t(e)})).then(i,o)}s((l=l.apply(t,r||[])).next())})});var i={845:(t,i,e)=>{var n;$Q2(i,"__esModule",{value:!0}),i.t=i.i=i.l=void 0;const s=e(512);i.l=()=>__STATSIG__||u,i.i=t=>(0,i.l)()[t];i.t=t=>{var e=(0,i.l)();return t?e.instances&&e.instances[t]:(e.instances&&1<Object.keys(e.instances).length&&s.Log.warn("Call made to Statsig global instance without an SDK key but there is more than one client instance. If you are using mulitple clients, please specify the SDK key."),e.firstInstance)};var r="__STATSIG__",l="undefined"!=typeof window?window:{},e=void 0!==e.g?e.g:{},o="undefined"!=typeof globalThis?globalThis:{};const u=null!=(n=null!=(n=null!=(n=l[r])?n:e[r])?n:o[r])?n:{instance:i.t};l[r]=u,e[r]=u,o[r]=u},137:(t,e,i)=>{$Q(e),e.o=e.u=void 0;const s=i(406);function n(t,e,i){if(i)return i(t,e);const n=e&&e.customIDs?e.customIDs:{};e=["uid:"+(null!=(i=null==e?void 0:e.userID)?i:""),"cids:"+Object.keys(n).sort((t,e)=>t.localeCompare(e)).map(t=>t+"-"+n[t]).join(","),"k:"+t];return(0,s.h)(e.join("|"))}e.u=n,e.o=function(t,e,i){return e?n(t,e,i):(0,s.h)("k:"+t)}},427:(t,e)=>{$Q(e)},694:function(t,e,i){var s=this&&this.__awaiter||$A();$Q(e),e.DataAdapterCore=void 0;const u=i(512),a=i(122),r=i(578),l=i(534),c=i(401);function h(t,e,i,n){return{source:t,data:e,receivedAt:Date.now(),stableID:i,fullUserHash:(0,r.v)(n)}}e.DataAdapterCore=class{constructor(t,e){this._=t,this.p=e,this.m=null,this.O=null,this.j="statsig.last_modified_time."+e,this.S=new n}attach(t,e){this.O=t,this.m=e}getDataSync(t){var t=t&&(0,r.T)(t,this.m),e=this.k(t),i=this.S.get(e,t);return i||((i=this.I(e))?(this.S.add(e,i),this.S.get(e,t)):null)}setData(t,e){var e=e&&(0,r.T)(e,this.m),i=this.k(e);this.S.add(i,h("Bootstrap",t,null,e))}D(e,i,n){return s(this,void 0,void 0,function*(){l.Storage.isReady()||(yield l.Storage.isReadyResolver());var t=null!=e?e:this.getDataSync(i),t=[this.M(t,i,n)];return null!=n&&n.timeoutMs&&t.push(new Promise(t=>setTimeout(t,n.timeoutMs)).then(()=>(u.Log.debug("Fetching latest value timed out"),null))),yield Promise.race(t)})}A(i,n){return s(this,void 0,void 0,function*(){var t=i&&(0,r.T)(i,this.m),e=this.k(t),t=yield this.D(null,t,n);t&&this.S.add(e,$P($P({},t),{source:"Prefetch"}))})}M(r,l,o){return s(this,void 0,void 0,function*(){let t=null;r&&this.N(r,l)&&(t=r.data);var e=yield this.R(t,l,o);if(!e)return u.Log.debug("No response returned for latest value"),null;var i=(0,c.P)(e,"has_updates","Response"),n=this.C(),n=a.StableID.get(n);let s=null;if(!0===(null==i?void 0:i.has_updates))s=h("Network",e,n,l);else{if(!t||!1!==(null==i?void 0:i.has_updates))return null;s=h("NetworkNotModified",t,n,l)}e=this.k(l);return this.S.add(e,s),this.U(e,s),s})}C(){return null!=this.O?this.O:(u.Log.error(this._+" is not attached to a Client"),"")}I(t){var e=null==(e=l.Storage.getItem)?void 0:e.call(l.Storage,t);return null!=e&&(t=(0,c.P)(e,"source","Cached Result"))?$P($P({},t),{source:"Cache"}):null}U(t,e){l.Storage.setItem(t,JSON.stringify(e)),this.F(t)}F(t){var e=null!=(e=(0,l.G)(this.j))?e:{},t=(e[t]=Date.now(),o(e,10));t&&(delete e[t],l.Storage.removeItem(t)),(0,l.L)(this.j,e)}};class n{constructor(){this.K={}}get(t,e){var t=this.K[t],i=null==t?void 0:t.stableID,e=null==(e=null==e?void 0:e.customIDs)?void 0:e.stableID;return e&&i&&e!==i?(u.Log.warn("'StatsigUser.customIDs.stableID' mismatch"),null):t}add(t,e){var i=o(this.K,9);i&&delete this.K[i],this.K[t]=e}merge(t){this.K=$P($P({},this.K),t)}}function o(s,t){var e=Object.keys(s);return e.length<=t?null:e.reduce((t,e)=>{var i=s[t],n=s[e];return"object"==typeof i&&"object"==typeof n?n.receivedAt<i.receivedAt?e:t:n<i?e:t})}},962:(t,r)=>{$Q2(r,"__esModule",{value:!0}),r.Diagnostics=void 0;const n=new Map,i="start";function s(t,e,i,n){return $P({key:i,action:e,step:n,timestamp:Date.now()},t)}function l(t,e){var i=null!=(i=n.get(t))?i:[];i.push(e),n.set(t,i)}function e(t,e){if(e in t)return t[e]}r.Diagnostics={q:t=>n.get(t),B:t=>{l(t,s({},i,"overall"))},V:(t,e,i)=>{l(t,s({success:e,error:e?void 0:{name:"InitializeError",message:"Failed to initialize"},evaluationDetails:i},"end","overall"))},J:(t,e)=>{l(t,s(e,i,"initialize","network_request"))},$:(t,e)=>{l(t,s(e,"end","initialize","network_request"))},W:t=>{l(t,s({},i,"initialize","process"))},H:(t,e)=>{l(t,s(e,"end","initialize","process"))},Y:t=>{n.delete(t)},X(t){if(t&&"object"==typeof t)return{code:e(t,"code"),name:e(t,"name"),message:e(t,"message")}},Z(t,e,i,n){return{success:!0===(null==t?void 0:t.ok),statusCode:null==t?void 0:t.status,sdkRegion:null==(t=null==t?void 0:t.headers)?void 0:t.get("x-statsig-region"),isDelta:!0===i.includes('"is_delta":true')||void 0,attempt:e,error:r.Diagnostics.X(n)}},tt(t,e,i,n){var s=r.Diagnostics.q(i);null==s||s.length<=0||(r.Diagnostics.Y(i),i=function(t,e){t={eventName:"statsig::diagnostics",user:t,value:null,metadata:e,time:Date.now()};return t}(t,{context:"initialize",markers:s.slice(),statsigOptions:n}),e.enqueue(i))}}},809:function(t,e){var i=this&&this.__awaiter||$A();$Q(e),e.et=void 0;const s=new Uint8Array([0,0,1,0,0,1,0,0,0,0,0,0,13,102,101,97,116,117,114,101,97,115,115,101,116,115,3,111,114,103,0,0,16,0,1]),r="https://cloudflare-dns.com/dns-query",l=["i","e","d"],o=200;e.et=function(e){return i(this,void 0,void 0,function*(){var i=yield e(r,{method:"POST",headers:{"Content-Type":"application/dns-message",Accept:"application/dns-message"},body:s});if(i.ok){var t,i=yield i.arrayBuffer(),i=new Uint8Array(i);{var n=i,i=n.findIndex((t,e)=>e<o&&"="===String.fromCharCode(t)&&l.includes(String.fromCharCode(n[e-1])));if(-1===i)throw(t=new Error("Failed to parse TXT records from DNS")).name="DnsTxtParseError",t;let e="";for(let t=i-1;t<n.length;t++)e+=String.fromCharCode(n[t]);return e.split(",")}}throw(t=new Error("Failed to fetch TXT records from DNS")).name="DnsTxtFetchError",t})}},539:(t,e)=>{$Q(e)},542:function(t,o,e){var i=this&&this.__awaiter||$A();$Q2(o,"__esModule",{value:!0}),o.ErrorBoundary=o.EXCEPTION_ENDPOINT=void 0;const n=e(512),u=e(902),a=e(0),c=(o.EXCEPTION_ENDPOINT="https://statsigapi.net/v1/sdk_exception","[Statsig] UnknownError");o.ErrorBoundary=class{constructor(t,e,i){this.O=t,this.m=e,this.nt=i,this.it=new Set}wrap(n){try{const t=n;!function(t){const e=new Set;let i=Object.getPrototypeOf(t);for(;i&&i!==Object.prototype;)Object.getOwnPropertyNames(i).filter(t=>"function"==typeof(null===i||void 0===i?void 0:i[t])).forEach(t=>e.add(t)),i=Object.getPrototypeOf(i);return Array.from(e)}(t).forEach(e=>{const i=t[e];"$EB"in i||(t[e]=(...t)=>this.rt(e,()=>i.apply(n,t)),t[e].$EB=!0)})}catch(t){this.st("eb:wrap",t)}}logError(t,e){this.st(t,e)}rt(e,t){try{var i=t();return i&&i instanceof Promise?i.catch(t=>this.st(e,t)):i}catch(t){return this.st(e,t),null}}st(r,l){try{n.Log.warn("Caught error in "+r,{error:l});i(this,void 0,void 0,function*(){var t,e,i=l||Error(c),n=i instanceof Error,s=n?i.name:"No Name";this.it.has(s)||(this.it.add(s),null!=(t=null==(t=this.m)?void 0:t.networkConfig)&&t.preventAllNetworkTraffic?null!=(t=this.nt)&&t.call(this,{name:"error",error:l,tag:r}):(t=u.SDKType.lt(this.O),e=a.StatsigMetadataProvider.get(),n=n?i.stack:function(t){try{return JSON.stringify(t)}catch(t){return c}}(i),i=JSON.stringify($P({tag:r,exception:s,info:n},$P($P({},e),{sdkType:t}))),yield(null!=(s=null==(n=null==(s=this.m)?void 0:s.networkConfig)?void 0:n.networkOverrideFunc)?s:fetch)(o.EXCEPTION_ENDPOINT,{method:"POST",headers:{"STATSIG-API-KEY":this.O,"STATSIG-SDK-TYPE":String(t),"STATSIG-SDK-VERSION":String(e.sdkVersion),"Content-Type":"application/json"},body:i}),null!=(n=this.nt)&&n.call(this,{name:"error",error:l,tag:r})))}).then(()=>{}).catch(()=>{})}catch(t){}}}},922:(t,e)=>{$Q(e)},417:(t,e)=>{$Q(e)},770:function(t,e,i){var n=this&&this.__awaiter||$A();$Q(e),e.EventLogger=void 0;const s=i(137),r=i(406),l=i(512),o=i(410),u=i(830),a=i(637),c=i(534),h=i(881),d=i(397),v={},f={Startup:"startup",GainedFocus:"gained_focus"};class _{static ot(t){null!=(t=v[t])&&t.flush().catch(()=>{})}static ut(t){null!=(t=v[t])&&t.ct(f.GainedFocus)}constructor(t,e,i,n){this.O=t,this.nt=e,this.ht=i,this.m=n,this.dt=[],this.vt={},this.ft={},this._t=!1,this.gt=Date.now(),this.bt=!0===(null==n?void 0:n.disableLogging),this.yt=null!=(t=null==n?void 0:n.loggingBufferMaxSize)?t:100;e=null==n?void 0:n.networkConfig;this.Ot=new h.UrlConfiguration(o.Endpoint.jt,null==e?void 0:e.logEventUrl,null==e?void 0:e.api,null==e?void 0:e.logEventFallbackUrls)}setLoggingDisabled(t){this.bt=t}enqueue(t){this.St(t)&&(this.wt(t),this.Tt(),this.dt.length>this.yt)&&_.ot(this.O)}incrementNonExposureCount(t){var e=null!=(e=this.ft[t])?e:0;this.ft[t]=e+1}reset(){this.vt={}}start(){(0,u.kt)()||(v[this.O]=this,(0,d.It)(t=>{"background"===t?_.ot(this.O):"foreground"===t&&_.ut(this.O)}),this.ct(f.Startup),this.Dt())}stop(){return n(this,void 0,void 0,function*(){this.Et&&(clearInterval(this.Et),this.Et=null),delete v[this.O],yield this.flush()})}flush(){return n(this,void 0,void 0,function*(){var t;this.Mt(),0!==this.dt.length&&(t=this.dt,this.dt=[],yield this.At(t))})}Tt(){this._t||(this._t=!0,200<Date.now()-this.gt)||setTimeout(()=>_.ot(this.O),200)}St(t){if((0,u.kt)())return!1;if((0,a.xt)(t)){var e=t.user||{statsigEnvironment:void 0},e=(0,s.u)(this.O,e),i=t.metadata||{},t=[t.eventName,e,i.gate,i.config,i.ruleID,i.allocatedExperiment,i.parameterName,String(i.isExplicitParameter),i.reason].join("|"),e=this.vt[t],i=Date.now();if(e&&i-e<6e5)return!1;1e3<Object.keys(this.vt).length&&(this.vt={}),this.vt[t]=i}return!0}At(t){var e,i;return n(this,void 0,void 0,function*(){if(this.bt)return this.Nt(t),!1;try{return((0,d.Rt)()&&this.ht.isBeaconSupported()&&null==(null==(i=null==(e=this.m)?void 0:e.networkConfig)?void 0:i.networkOverrideFunc)?yield this.Pt(t):yield this.Ct(t)).success?(this.nt({name:"logs_flushed",events:t}),!0):(l.Log.warn("Failed to flush events."),this.Nt(t),!1)}catch(t){return l.Log.warn("Failed to flush events."),!1}})}Ct(e){var i;return n(this,void 0,void 0,function*(){var t=yield this.ht.post(this.Ut(e)),t=null!=(i=null==t?void 0:t.code)?i:-1;return{success:200<=t&&t<300}})}Pt(t){return n(this,void 0,void 0,function*(){return{success:yield this.ht.beacon(this.Ut(t))}})}Ut(t){return{sdkKey:this.O,data:{events:t},urlConfig:this.Ot,retries:3,isCompressable:!0,params:{[o.NetworkParam.EventCount]:String(t.length)}}}Nt(t){for(;1e3<t.length;)t.shift();var e=this.o();try{(0,c.L)(e,t)}catch(t){l.Log.warn("Unable to save failed logs to storage")}}ct(e){const i=this.o();n(this,void 0,void 0,function*(){c.Storage.isReady()||(yield c.Storage.isReadyResolver());var t=(0,c.G)(i);t&&(e===f.Startup&&c.Storage.removeItem(i),yield this.At(t))&&e===f.GainedFocus&&c.Storage.removeItem(i)}).catch(()=>{l.Log.warn("Failed to flush stored logs")})}o(){return"statsig.failed_logs."+(0,r.h)(this.O)}wt(t){t.user&&(t.user=$P({},t.user),delete t.user.privateAttributes);var e={},i=this.Ft(),i=(i&&(e.statsigMetadata={currentPage:i}),$P($P({},t),e));l.Log.debug("Enqueued Event:",i),this.dt.push(i)}Mt(){0!==Object.keys(this.ft).length&&(this.wt({eventName:"statsig::non_exposed_checks",user:null,time:Date.now(),metadata:{checks:$P({},this.ft)}}),this.ft={})}Ft(){var t;if(!1!==(null==(t=this.m)?void 0:t.includeCurrentPageUrlWithEvents))return(0,u.Gt)()}Dt(){var t=null!=(t=null==(t=this.m)?void 0:t.loggingIntervalMs)?t:1e4;const e=setInterval(()=>{var t=v[this.O];t&&t.Et===e?_.ot(this.O):clearInterval(e)},t);this.Et=e}}e.EventLogger=_},406:(t,r,e)=>{$Q2(r,"__esModule",{value:!0}),r.Lt=r.Kt=r.h=void 0;const l=e(634);r.h=e=>{let i=0;for(let t=0;t<e.length;t++){var n=e.charCodeAt(t);i=(i<<5)-i+n,i&=i}return String(i>>>0)},r.Kt=(t,e)=>(0,r.h)(JSON.stringify((0,r.Lt)(t,e)));r.Lt=(i,n)=>{if(null==i)return null;var t=Object.keys(i).sort();const s={};return t.forEach(t=>{var e=i[t];0===n||"object"!==(0,l.zt)(e)?s[t]=e:s[t]=(0,r.Lt)(e,null!=n?n-1:n)}),s}},333:(t,e)=>{$Q(e)},512:(t,e)=>{$Q(e),e.Log=e.LogLevel=void 0;function i(t){return t.unshift("[Statsig]"),t}e.LogLevel={None:0,Error:1,Warn:2,Info:3,Debug:4};class n{static info(...t){this.level>=e.LogLevel.Info&&console.info(" INFO ",...i(t))}static debug(...t){this.level>=e.LogLevel.Debug&&console.debug(" DEBUG ",...i(t))}static warn(...t){this.level>=e.LogLevel.Warn&&console.warn(" WARN ",...i(t))}static error(...t){this.level>=e.LogLevel.Error&&console.error(" ERROR ",...i(t))}}(e.Log=n).level=e.LogLevel.Warn},787:(t,e)=>{$Q(e),e.createMemoKey=void 0;const s=new Set([]),r=new Set(["userPersistedValues"]);e.createMemoKey=function(t,e){let i=t;if(e)for(const n of Object.keys(e)){if(r.has(n))return;s.has(n)?i+=n+"=true":i+=n+"="+e[n]}return i}},410:(t,e)=>{$Q(e),e.NetworkParam=e.NetworkDefault=e.Endpoint=void 0,e.Endpoint={qt:"initialize",jt:"rgstr",Bt:"download_config_specs"},e.NetworkDefault={[e.Endpoint.jt]:"https://prodregistryv2.org/v1",[e.Endpoint.qt]:"https://featureassets.org/v1",[e.Endpoint.Bt]:"https://api.statsigcdn.com/v1"},e.NetworkParam={EventCount:"ec",SdkKey:"k",SdkType:"st",SdkVersion:"sv",Time:"t",SessionID:"sid",StatsigEncoded:"se",IsGzipped:"gz"}},404:function(t,e,i){var O=this&&this.__awaiter||$A();$Q(e),e.NetworkCore=void 0,i(845);const l=i(845),j=i(962),S=i(512),w=i(410),n=i(308),o=i(902),u=i(830),a=i(143),c=i(122),T=i(636),h=i(0),k=i(397),D=500,I=3e4;const x=new Set([408,500,502,503,504,522,524,599]);e.NetworkCore=class{constructor(t,e){this.nt=e,this.Vt=1e4,this.Jt={},this.m={},this.Oi={},this.$t=null,t&&(this.m=t),this.m.networkConfig&&(this.Jt=this.m.networkConfig),this.Jt.networkTimeoutMs&&(this.Vt=this.Jt.networkTimeoutMs),this.Wt=new n.NetworkFallbackResolver(this.m)}setErrorBoundary(t){this.$t=t,this.$t.wrap(this),this.$t.wrap(this.Wt),this.Wt.setErrorBoundary(t)}isBeaconSupported(){return"undefined"!=typeof navigator&&"function"==typeof navigator.sendBeacon}beacon(n){return O(this,void 0,void 0,function*(){var t,e,i;return!!E(n)&&(e=this.Ht("POST",n),t=yield this.Yt(e,n.data),e=yield this.Xt(e),(i=navigator).sendBeacon.bind(i)(e,t))})}post(e){return O(this,void 0,void 0,function*(){var t=this.Ht("POST",e);return t.body=yield this.Yt(t,e.data),e.isStatsigEncodable&&(t.body=this.Qt(t,t.body)),this.Zt(t)})}get(t){t=this.Ht("GET",t);return this.Zt(t)}Zt(p){var y,m;return O(this,void 0,void 0,function*(){if(!E(p))return null;if(this.Jt.preventAllNetworkTraffic)return null;var{method:e,body:i,retries:n,attempt:s}=p,t=p.urlConfig.endpoint;if(this.Si(t))return S.Log.warn(`Request to ${t} was blocked because you are making requests too frequently.`),null;s=null!=s?s:1;const r="undefined"!=typeof AbortController?new AbortController:null;var l=setTimeout(()=>{null!==r&&void 0!==r&&r.abort(`Timeout of ${this.Vt}ms expired.`)},this.Vt),o=yield this.Xt(p);let u=null;var a,c=(0,k.Rt)();try{var h,d,v,f={method:e,body:i,headers:$P({},p.headers),signal:null===r||void 0===r?void 0:r.signal,priority:p.priority,keepalive:c},_=(a=s,(b=p).urlConfig.endpoint===w.Endpoint.qt&&j.Diagnostics.J(b.sdkKey,{attempt:a}),this.Oi[t]),g=(_&&(_.lastRequestTime=Date.now(),this.Oi[t]=_),null!=(y=this.Jt.networkOverrideFunc)?y:fetch);if(u=yield g(o,f),clearTimeout(l),u.ok)return v=yield u.text(),M(p,u,s,v),this.Wt.tryBumpExpiryTime(p.sdkKey,p.urlConfig),{body:v,code:u.status};throw h=yield u.text().catch(()=>"No Text"),(d=new Error(`NetworkError: ${o} `+h)).name="NetworkError",d}catch(t){var i=function(t,e){if(null!=t&&t.signal.aborted&&"string"==typeof t.signal.reason)return t.signal.reason;if("string"==typeof e)return e;if(e instanceof Error)return e.name+": "+e.message;return"Unknown Error"}(r,t),c=function(t){t=(null==t?void 0:t.signal.aborted)&&"string"==typeof t.signal.reason&&t.signal.reason.includes("Timeout");return t||!1}(r),b=(M(p,u,s,"",t),yield this.Wt.tryFetchUpdatedFallbackInfo(p.sdkKey,p.urlConfig,i,c));return(b&&(p.fallbackUrl=this.Wt.getActiveFallbackUrl(p.sdkKey,p.urlConfig)),!n||n<s||!x.has(null!=(m=null===u||void 0===u?void 0:u.status)?m:500))?(null!=(m=this.nt)&&m.call(this,{name:"error",error:t,tag:T.ErrorTag.NetworkError,requestArgs:p}),S.Log.error(`A networking error occured during ${e} request to ${o}.`,i,t),null):(yield function(e){return O(this,void 0,void 0,function*(){yield new Promise(t=>setTimeout(t,Math.min(D*(e*e),I)))})}(s),this.Zt($P($P({},p),{retries:n,attempt:s+1})))}})}Si(t){var e=Date.now(),i=null!=(i=this.Oi[t])?i:{count:0,lastRequestTime:e},n=e-i.lastRequestTime,n=Math.floor(.05*n);return i.count=Math.max(0,i.count-n),50<=i.count||(i.count+=1,i.lastRequestTime=e,this.Oi[t]=i,!1)}Xt(n){var s;return O(this,void 0,void 0,function*(){var t=null!=(s=n.fallbackUrl)?s:n.urlConfig.getUrl();const e=$P({[w.NetworkParam.SdkKey]:n.sdkKey,[w.NetworkParam.SdkType]:o.SDKType.lt(n.sdkKey),[w.NetworkParam.SdkVersion]:h.SDK_VERSION,[w.NetworkParam.Time]:String(Date.now()),[w.NetworkParam.SessionID]:a.SessionID.get(n.sdkKey)},n.params);var i=Object.keys(e).map(t=>encodeURIComponent(t)+"="+encodeURIComponent(e[t])).join("&");return t+(i?"?"+i:"")})}Yt(s,r){return O(this,void 0,void 0,function*(){var{sdkKey:t,fallbackUrl:e}=s,i=c.StableID.get(t),n=a.SessionID.get(t),t=o.SDKType.lt(t);return JSON.stringify($P($P({},r),{statsigMetadata:$P($P({},h.StatsigMetadataProvider.get()),{stableID:i,sessionID:n,sdkType:t,fallbackUrl:e})}))})}Qt(e,i){var t,n,s=(0,u.te)();if(this.m.disableStatsigEncoding||null!=(0,l.i)("no-encode")||null==s||!s.btoa)return i;try{var r=null!=(t=s.btoa(i).split("").reverse().join(""))?t:i;return e.params=$P($P({},null!=(n=e.params)?n:{}),{[w.NetworkParam.StatsigEncoded]:"1"}),r}catch(t){return S.Log.warn("Request encoding failed for "+e.urlConfig.getUrl()),i}}Ht(t,e){var i=this.Wt.getActiveFallbackUrl(e.sdkKey,e.urlConfig);return $P($P({},e),{method:t,fallbackUrl:i})}};const E=t=>!!t.sdkKey||(S.Log.warn("Unable to make request without an SDK key"),!1);function M(t,e,i,n,s){t.urlConfig.endpoint===w.Endpoint.qt&&j.Diagnostics.$(t.sdkKey,j.Diagnostics.Z(e,i,n,s))}},308:function(t,e,i){var u=this&&this.__awaiter||$A();$Q(e),e.ee=e.NetworkFallbackResolver=void 0;const o=i(809),n=i(406),r=i(512),l=i(534);function a(t,e){t=null!=(t=null==t?void 0:t.toLowerCase())?t:"";return e||t.includes("uncaught exception")||t.includes("failed to fetch")||t.includes("networkerror when attempting to fetch resource")}function c(t){return"statsig.network_fallback."+(0,n.h)(t)}function h(t,e){t=c(t);e&&0!==Object.keys(e).length?l.Storage.setItem(t,JSON.stringify(e)):l.Storage.removeItem(t)}function d(t){try{return new URL(t).pathname}catch(t){return null}}e.NetworkFallbackResolver=class{constructor(t){this.ne=null,this.$t=null,this.ie={},this.re=null==(t=t.networkConfig)?void 0:t.networkOverrideFunc}setErrorBoundary(t){this.$t=t}tryBumpExpiryTime(t,e){var i=null==(i=this.ne)?void 0:i[e.endpoint];i&&(i.expiryTime=Date.now()+6048e5,h(t,$P($P({},this.ne),{[e.endpoint]:i})))}getActiveFallbackUrl(t,e){var i;let n=this.ne;null==n&&(n=null!=(s=function(t){t=c(t),t=l.Storage.getItem(t);if(!t)return null;try{return JSON.parse(t)}catch(t){return r.Log.error("Failed to parse FallbackInfo"),null}}(t))?s:{},this.ne=n);var s=n[e.endpoint];return!s||Date.now()>(null!=(i=s.expiryTime)?i:0)?(delete n[e.endpoint],this.ne=n,h(t,this.ne),null):s.url||null}getFallbackFromProvided(t){var e=d(t);return e?t.replace(e,""):null}tryFetchUpdatedFallbackInfo(i,n,s,r){var l,o;return u(this,void 0,void 0,function*(){try{var t,e;return a(s,r)?(t=null==n.customUrl&&null==n.fallbackUrls?yield this.se(n):n.fallbackUrls,!!(e=this.le(null==(l=this.ne)?void 0:l[n.endpoint],t))&&(this.oe(i,n.endpoint,e),!0)):!1}catch(t){return null!=(o=this.$t)&&o.logError("tryFetchUpdatedFallbackInfo",t),!1}})}oe(t,e,i){var i={url:i,expiryTime:Date.now()+6048e5,previous:[]},n=null==(n=this.ne)?void 0:n[e],n=(n&&i.previous.push(...n.previous),10<i.previous.length&&(i.previous=[]),null==(n=null==(n=this.ne)?void 0:n[e])?void 0:n.url);null!=n&&i.previous.push(n),this.ne=$P($P({},this.ne),{[e]:i}),h(t,this.ne)}se(r){var l;return u(this,void 0,void 0,function*(){var t=this.ie[r.endpoint];if(t&&Date.now()<t)return null;this.ie[r.endpoint]=Date.now()+144e5;var e=[],t=yield(0,o.et)(null!=(l=this.re)?l:fetch),i=d(r.defaultUrl);for(const s of t)if(s.startsWith(r.endpointDnsKey+"=")){var n=s.split("=");if(1<n.length){let t=n[1];t.endsWith("/")&&(t=t.slice(0,-1)),e.push("https://"+t+i)}}return e})}le(t,e){var i;if(null==e)return null;var n=new Set(null!=(i=null==t?void 0:t.previous)?i:[]),s=null==t?void 0:t.url;let r=null;for(const o of e){var l=o.endsWith("/")?o.slice(0,-1):o;if(!n.has(o)&&l!==s){r=l;break}}return r}},e.ee=a},405:(t,e)=>{$Q(e)},361:(t,e)=>{$Q(e)},902:(t,e)=>{$Q(e),e.SDKType=void 0;const i={};let n;e.SDKType={lt:t=>{return(null!=(t=i[t])?t:"js-mono")+(null!==n&&void 0!==n?n:"")},ue(t,e){i[t]=e},ae(t){n&&"-react"!==n||(n="-"+t)}}},830:(t,n)=>{$Q2(n,"__esModule",{value:!0}),n.Gt=n.ce=n.he=n.kt=n.de=n.te=void 0;n.te=()=>"undefined"!=typeof window?window:null,n.de=()=>{var t=(0,n.te)();return null!=(t=null==t?void 0:t.document)?t:null},n.kt=()=>{var t;return null===(0,n.de)()&&(t="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node,"string"==typeof EdgeRuntime||t)},n.he=(t,e)=>{var i=(0,n.te)();"function"==typeof(null==i?void 0:i.addEventListener)&&i.addEventListener(t,e)},n.ce=(t,e)=>{var i=(0,n.de)();"function"==typeof(null==i?void 0:i.addEventListener)&&i.addEventListener(t,e)};n.Gt=()=>{var t;try{return null==(t=(0,n.te)())?void 0:t.location.href.split(/[?#]/)[0]}catch(t){}}},143:(t,e,i)=>{$Q(e),e.StatsigSession=e.SessionID=void 0;const n=i(137),r=i(512),l=i(534),o=i(23),u=18e5,a=144e5,c={};function h(e,t){return setTimeout(()=>{var t=null===__STATSIG__||void 0===__STATSIG__?void 0:__STATSIG__.instance(e);t&&t.$emt({name:"session_expired"})},t)}function d(t){return"statsig.session_id."+(0,n.o)(t)}e.SessionID={get:t=>e.StatsigSession.get(t).data.sessionID},e.StatsigSession={get:t=>{null==c[t]&&(c[t]=function(t){let e=function(t){t=d(t);return(0,l.G)(t)}(t);var i=Date.now();e=e||{sessionID:(0,o.getUUID)(),startTime:i,lastUpdate:i};return{data:e,sdkKey:t}}(t));var t=c[t],e=Date.now(),i=t.data,n=((function({lastUpdate:t}){return Date.now()-t>u}(i)||function({startTime:t}){return Date.now()-t>a}(i))&&(i.sessionID=(0,o.getUUID)(),i.startTime=e),i.lastUpdate=e,i),s=t.sdkKey;s=d(s);try{(0,l.L)(s,n)}catch(t){r.Log.warn("Failed to save SessionID")}return clearTimeout(t.idleTimeoutID),clearTimeout(t.ageTimeoutID),e-=i.startTime,i=t.sdkKey,t.idleTimeoutID=h(i,u),t.ageTimeoutID=h(i,a-e),t},overrideInitialSessionID:(t,e)=>{var i;c[e]=(t=t,e=e,i=Date.now(),{data:{sessionID:t,startTime:i,lastUpdate:i},sdkKey:e})}}},122:(t,e,i)=>{$Q(e),e.StableID=void 0;const n=i(137),s=i(512),r=i(534),l=i(23),o={};function u(t){return"statsig.stable_id."+(0,n.o)(t)}function a(t,e){e=u(e);try{(0,r.L)(e,t)}catch(t){s.Log.warn("Failed to save StableID")}}e.StableID={get:e=>{if(null==o[e]){let t=function(t){t=u(t);return(0,r.G)(t)}(e);null==t&&a(t=(0,l.getUUID)(),e),o[e]=t}return o[e]},setOverride:(t,e)=>{a(o[e]=t,e)}}},375:function(t,e,i){var n=this&&this.__awaiter||$A();$Q(e),e.StatsigClientBase=void 0,i(845);const l=i(845),o=i(542),u=i(770),a=i(512),s=i(787),c=i(830),h=i(143),d=i(534);e.StatsigClientBase=class{constructor(t,e,i,n){this.loadingStatus="Uninitialized",this.ve=null,this.fe={};var s,r=this.$emt.bind(this);null!=(null==n?void 0:n.logLevel)&&(a.Log.level=n.logLevel),null!=n&&n.disableStorage&&d.Storage._e(!0),null!=n&&n.initialSessionID&&h.StatsigSession.overrideInitialSessionID(n.initialSessionID,t),null!=n&&n.storageProvider&&d.Storage.ge(n.storageProvider),this.O=t,this.m=null!=n?n:{},this.ji={},this.overrideAdapter=null!=(s=null==n?void 0:n.overrideAdapter)?s:null,this.pe=new u.EventLogger(t,r,i,n),this.$t=new o.ErrorBoundary(t,n,r),this.$t.wrap(this),this.$t.wrap(e),this.$t.wrap(this.pe),i.setErrorBoundary(this.$t),this.dataAdapter=e,this.dataAdapter.attach(t,n),this.storageProvider=d.Storage,this.be(),s=t,r=this,(0,c.kt)()||(i=(0,l.l)(),e=null!=(e=i.instances)?e:{},r=r,null!=e[s]&&a.Log.warn("Creating multiple Statsig clients with the same SDK key can lead to unexpected behavior. Multi-instance support requires different SDK keys."),e[s]=r,i.firstInstance||(i.firstInstance=r),i.instances=e,__STATSIG__=i)}updateRuntimeOptions(t){null!=t.disableLogging&&(this.m.disableLogging=t.disableLogging,this.pe.setLoggingDisabled(t.disableLogging)),null!=t.disableStorage&&(this.m.disableStorage=t.disableStorage,d.Storage._e(t.disableStorage))}flush(){return this.pe.flush()}shutdown(){return n(this,void 0,void 0,function*(){this.$emt({name:"pre_shutdown"}),this.me("Uninitialized",null),this.ve=null,yield this.pe.stop()})}on(t,e){this.fe[t]||(this.fe[t]=[]),this.fe[t].push(e)}off(t,e){this.fe[t]&&-1!==(e=this.fe[t].indexOf(e))&&this.fe[t].splice(e,1)}$on(t,e){e.__isInternal=!0,this.on(t,e)}$emt(i){var t;const e=e=>{try{e(i)}catch(t){!0===e.__isInternal?this.$t.logError("__emit:"+i.name,t):a.Log.error("An error occurred in a StatsigClientEvent listener. This is not an issue with Statsig.",i)}};this.fe[i.name]&&this.fe[i.name].forEach(t=>e(t)),null!=(t=this.fe["*"])&&t.forEach(e)}me(t,e){this.loadingStatus=t,this.ji={},this.$emt({name:"values_updated",status:t,values:e})}ye(t,e,i){!0===(null==i?void 0:i.disableExposureLog)?this.pe.incrementNonExposureCount(t):this.pe.enqueue(e)}wi(n){return(t,e)=>{var i=(0,s.createMemoKey)(t,e);return i?(i in this.ji||(3e3<=Object.keys(this.ji).length&&(this.ji={}),this.ji[i]=n(t,e)),this.ji[i]):n(t,e)}}}},636:(t,e)=>{$Q(e),e.ErrorTag=void 0,e.ErrorTag={NetworkError:"NetworkError"}},206:(t,e)=>{$Q(e),e.DataAdapterCachePrefix=void 0,e.DataAdapterCachePrefix="statsig.cached"},637:(t,e)=>{$Q(e),e.Oe=e.je=e.Se=e.xt=void 0;const s="statsig::config_exposure",r="statsig::gate_exposure",u="statsig::layer_exposure",a=(t,e,i,n,s)=>(i.bootstrapMetadata&&(n.bootstrapMetadata=i.bootstrapMetadata),{eventName:t,user:e,value:null,metadata:l(i,n),secondaryExposures:s,time:Date.now()});e.xt=({eventName:t})=>t===r||t===s||t===u,e.Se=(t,e)=>{var i,n={gate:e.name,gateValue:String(e.value),ruleID:e.ruleID};return null!=(null==(i=e.__evaluation)?void 0:i.version)&&(n.configVersion=e.__evaluation.version),a(r,t,e.details,n,null!=(t=null==(i=e.__evaluation)?void 0:i.secondary_exposures)?t:[])},e.je=(t,e)=>{var i,n={config:e.name,ruleID:e.ruleID};return null!=(null==(i=e.__evaluation)?void 0:i.version)&&(n.configVersion=e.__evaluation.version),null!=(null==(i=e.__evaluation)?void 0:i.passed)&&(n.rulePassed=String(e.__evaluation.passed)),a(s,t,e.details,n,null!=(t=null==(i=e.__evaluation)?void 0:i.secondary_exposures)?t:[])};e.Oe=(t,e,i)=>{var n=e.__evaluation,s=!0===(null==(s=null==n?void 0:n.explicit_parameters)?void 0:s.includes(i));let r="",l=null!=(o=null==n?void 0:n.undelegated_secondary_exposures)?o:[];s&&(r=null!=(o=n.allocated_experiment_name)?o:"",l=n.secondary_exposures);var o={config:e.name,parameterName:i,ruleID:e.ruleID,allocatedExperiment:r,isExplicitParameter:String(s)};return null!=(null==(n=e.__evaluation)?void 0:n.version)&&(o.configVersion=e.__evaluation.version),a(u,t,e.details,o,l)};const l=(t,e)=>(e.reason=t.reason,t.lcut&&(e.lcut=String(t.lcut)),t.receivedAt&&(e.receivedAt=String(t.receivedAt)),e)},0:(t,e)=>{$Q(e),e.StatsigMetadataProvider=e.SDK_VERSION=void 0,e.SDK_VERSION="3.9.1";let i={sdkVersion:e.SDK_VERSION,sdkType:"js-mono"};e.StatsigMetadataProvider={get:()=>i,add:t=>{i=$P($P({},i),t)}}},586:(t,e)=>{$Q(e)},98:(t,e)=>{$Q(e)},59:(t,e,i)=>{$Q(e),e.we=e.Te=e.ke=e.Ie=e.De=e.Ee=void 0;const l=i(512),o=i(634),s="default";function r(t,e,i,n){return{name:t,details:e,ruleID:null!=(t=null==i?void 0:i.rule_id)?t:s,__evaluation:i,value:n}}function n(t,e,i){var n=null!=(n=null==i?void 0:i.value)?n:{};return $P($P({},r(t,e,i,n)),{get:u(t,null==i?void 0:i.value)})}function u(n,s,r){return(t,e)=>{var i=null!=(i=null==s?void 0:s[t])?i:null;return null==i?null!=e?e:null:null==e||(0,o.Me)(i,e)?(null!=r&&r(t),i):(l.Log.warn(`Parameter type mismatch. '${n}.${t}' was found to be type '${typeof i}' but fallback/return type is '${typeof e}'. See https://docs.statsig.com/client/javascript-sdk/#typed-getters`),null!=e?e:null)}}e.Ee=function(t,e,i){return r(t,e,i,!0===(null==i?void 0:i.value))},e.De=n,e.Ie=function(t,e,i){return t=n(t,e,i),$P($P({},t),{groupName:null!=(e=null==i?void 0:i.group_name)?e:null})},e.ke=function(t,e,i,n){return $P($P({},r(t,e,i,void 0)),{get:u(t,null==i?void 0:i.value,n),groupName:null!=(e=null==i?void 0:i.group_name)?e:null,__value:null!=(t=null==i?void 0:i.value)?t:{}})},e.Te=function(t,e,i,n){return $P($P($P({},t),e),{get:u(t.name,i,n)})},e.we=u},812:(t,e)=>{$Q(e)},578:(t,e,i)=>{$Q(e),e.v=e.T=void 0;const n=i(406),s=i(512);e.T=function(t,e,i){try{var n=JSON.parse(JSON.stringify(t));return null!=e&&null!=e.environment?n.statsigEnvironment=e.environment:null!=i&&(n.statsigEnvironment={tier:i}),n}catch(t){return s.Log.error("Failed to JSON.stringify user"),{statsigEnvironment:void 0}}},e.v=function(t){return t?(0,n.Kt)(t):null}},534:(t,i,e)=>{$Q2(i,"__esModule",{value:!0}),i.L=i.G=i.Storage=void 0;var n=e(512),e=e(830);const s={},r={isReady:()=>!0,isReadyResolver:()=>null,getProviderName:()=>"InMemory",getItem:t=>s[t]||null,setItem:(t,e)=>{s[t]=e},removeItem:t=>{delete s[t]},getAllKeys:()=>Object.keys(s)};let l=null;try{const a=(0,e.te)();a&&a.localStorage&&"function"==typeof a.localStorage.getItem&&(l={isReady:()=>!0,isReadyResolver:()=>null,getProviderName:()=>"LocalStorage",getItem:t=>a.localStorage.getItem(t),setItem:(t,e)=>a.localStorage.setItem(t,e),removeItem:t=>a.localStorage.removeItem(t),getAllKeys:()=>Object.keys(a.localStorage)})}catch(t){n.Log.warn("Failed to setup localStorageProvider.")}let o=null!==l&&void 0!==l?l:r,u=o;i.Storage={isReady:()=>u.isReady(),isReadyResolver:()=>u.isReadyResolver(),getProviderName:()=>u.getProviderName(),getItem:t=>{var e=()=>u.getItem(t);try{return e()}catch(t){if(t instanceof Error&&"SecurityError"===t.name)return i.Storage.ge(r),null;throw t}},setItem:(t,e)=>u.setItem(t,e),removeItem:t=>u.removeItem(t),getAllKeys:()=>u.getAllKeys(),ge:t=>{o=t,u=t},_e:t=>{u=t?r:o}},i.G=function(t){return t=i.Storage.getItem(t),JSON.parse(null!=t?t:"null")},i.L=function(t,e){i.Storage.setItem(t,JSON.stringify(e))}},401:(t,e,i)=>{$Q(e),e.P=void 0;const s=i(512);e.P=function(t,e,i){try{var n=JSON.parse(t);return"object"==typeof n&&0 in n,n}catch(t){}return s.Log.error("Failed to parse "+i),null}},634:(t,e)=>{$Q(e),e.Me=e.zt=void 0,e.zt=function(t){return Array.isArray(t)?"array":typeof t},e.Me=function(t,e){var i=t=>Array.isArray(t)?"array":typeof t;return i(t)===i(e)}},23:(t,e)=>{$Q(e),e.getUUID=void 0,e.getUUID=function(){if("undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID)return crypto.randomUUID();let i=(new Date).getTime(),n="undefined"!=typeof performance&&performance.now&&1e3*performance.now()||0;return`xxxxxxxx-xxxx-4xxx-${"89ab"[Math.floor(4*Math.random())]}xxx-xxxxxxxxxxxx`.replace(/[xy]/g,t=>{let e=16*Math.random();return 0<i?(e=(i+e)%16|0,i=Math.floor(i/16)):(e=(n+e)%16|0,n=Math.floor(n/16)),("x"===t?e:7&e|8).toString(16)})}},881:(t,e,i)=>{$Q(e),e.UrlConfiguration=void 0;const s=i(410),r={[s.Endpoint.qt]:"i",[s.Endpoint.jt]:"e",[s.Endpoint.Bt]:"d"};e.UrlConfiguration=class{constructor(t,e,i,n){this.customUrl=null,this.fallbackUrls=null,this.endpoint=t,this.endpointDnsKey=r[t],e&&(this.customUrl=e),!e&&i&&(this.customUrl=i.endsWith("/")?""+i+t:i+"/"+t),n&&(this.fallbackUrls=n);e=s.NetworkDefault[t];this.defaultUrl=e+"/"+t}getUrl(){var t;return null!=(t=this.customUrl)?t:this.defaultUrl}}},397:(t,e,i)=>{$Q(e),e.Ae=e.It=e.Rt=e.xe=void 0;i=i(830);const n="foreground",s="background",r=[];let l=n,o=!1;e.xe=()=>l===n,e.Rt=()=>o,e.It=t=>{r.unshift(t)};e.Ae=e=>{e!==l&&(l=e,r.forEach(t=>t(e)))},(0,i.he)("focus",()=>{(o=!1,e.Ae)(n)}),(0,i.he)("blur",()=>(0,e.Ae)(s)),(0,i.he)("beforeunload",()=>{o=!0,(0,e.Ae)(s)}),(0,i.ce)("visibilitychange",()=>{(0,e.Ae)("visible"===document.visibilityState?n:s)})},914:function(t,e,i){var n=this&&this.__createBinding||(Object.create?function(t,e,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(e,i);s&&("get"in s?e.__esModule:!s.writable&&!s.configurable)||(s={enumerable:!0,get:function(){return e[i]}}),$Q2(t,n,s)}:function(t,e,i,n){t[n=void 0===n?i:n]=e[i]}),s=this&&this.__exportStar||function(t,e){for(var i in t)"default"===i||Object.prototype.hasOwnProperty.call(e,i)||n(e,t,i)};$Q(e),e.Diagnostics=e.Log=e.Storage=e.EventLogger=void 0,i(845);const r=i(962),l=($Q2(e,"Diagnostics",{enumerable:!0,get:function(){return r.Diagnostics}}),i(770)),o=($Q2(e,"EventLogger",{enumerable:!0,get:function(){return l.EventLogger}}),i(512));$Q2(e,"Log",{enumerable:!0,get:function(){return o.Log}});var u=i(0);const a=i(534);$Q2(e,"Storage",{enumerable:!0,get:function(){return a.Storage}}),s(i(845),e),s(i(137),e),s(i(427),e),s(i(694),e),s(i(962),e),s(i(539),e),s(i(542),e),s(i(922),e),s(i(417),e),s(i(406),e),s(i(333),e),s(i(512),e),s(i(410),e),s(i(404),e),s(i(405),e),s(i(361),e),s(i(830),e),s(i(902),e),s(i(143),e),s(i(122),e),s(i(375),e),s(i(636),e),s(i(206),e),s(i(637),e),s(i(0),e),s(i(586),e),s(i(98),e),s(i(59),e),s(i(812),e),s(i(578),e),s(i(534),e),s(i(401),e),s(i(634),e),s(i(881),e),s(i(23),e),s(i(397),e),__STATSIG__=$P($P({},null!==__STATSIG__&&void 0!==__STATSIG__?__STATSIG__:{}),{Log:o.Log,SDK_VERSION:u.SDK_VERSION})},296:function(t,e,i){var n=this&&this.__createBinding||(Object.create?function(t,e,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(e,i);s&&("get"in s?e.__esModule:!s.writable&&!s.configurable)||(s={enumerable:!0,get:function(){return e[i]}}),$Q2(t,n,s)}:function(t,e,i,n){t[n=void 0===n?i:n]=e[i]}),s=this&&this.__exportStar||function(t,e){for(var i in t)"default"===i||Object.prototype.hasOwnProperty.call(e,i)||n(e,t,i)};$Q(e),s(i(18),e),e.default=__STATSIG__},262:(t,e,i)=>{$Q(e),e.Ne=void 0;const n=i(914);function s(t,e){null!=t&&t.forEach(t=>{delete e[t]})}e.Ne=function(t,e){var i;return(e=(0,n.P)(e,"checksum","DeltasEvaluationResponse"))?(t=t,i=e,t=$P($P($P({},t),i),{feature_gates:$P($P({},t.feature_gates),i.feature_gates),layer_configs:$P($P({},t.layer_configs),i.layer_configs),dynamic_configs:$P($P({},t.dynamic_configs),i.dynamic_configs)}),s((t=i=t).deleted_gates,t.feature_gates),delete t.deleted_gates,s(i.deleted_configs,t.dynamic_configs),delete t.deleted_configs,s(i.deleted_layers,t.layer_configs),delete t.deleted_layers,i=t,(t=(0,n.Kt)({feature_gates:i.feature_gates,dynamic_configs:i.dynamic_configs,layer_configs:i.layer_configs},2))===e.checksumV2?JSON.stringify(i):{hadBadDeltaChecksum:!0,badChecksum:t,badMergedConfigs:i,badFullResponse:e.deltas_full_response}):{hadBadDeltaChecksum:!0}}},226:(t,e,i)=>{$Q(e);const s=i(914);e.default=class{constructor(t){this.O=t,this.Re=null,this.Pe=null,this.Ce="Uninitialized",this.Ue=0,this.Fe=0,this.Ge=null,this.Le=new Set}reset(){this.Pe=null,this.Re=null,this.Ce="Loading",this.Ue=0,this.Fe=0,this.Ge=null}finalize(){this.Pe||(this.Ce="NoValues")}getValues(){return this.Re?(0,s.P)(this.Re,"has_updates","EvaluationStoreValues"):null}setValues(t,e){var i;return!!t&&null!=(i=(0,s.P)(t.data,"has_updates","EvaluationResponse"))&&(this.Ce=t.source,!0===(null==i?void 0:i.has_updates)&&(this.Re=t.data,this.Ue=i.time,this.Fe=t.receivedAt,this.Pe=i,this.Ge=this.Ke(t.source,i),t.source)&&i.user&&this.ze(e,i),!0)}getGate(t){var e;return this.qe(null==(e=this.Pe)?void 0:e.feature_gates,t)}getConfig(t){var e;return this.qe(null==(e=this.Pe)?void 0:e.dynamic_configs,t)}getLayer(t){var e;return this.qe(null==(e=this.Pe)?void 0:e.layer_configs,t)}getParamStore(t){var e;return this.qe(null==(e=this.Pe)?void 0:e.param_stores,t)}Ke(t,e){return"Bootstrap"!==t?null:(t={},e.user&&(t.user=e.user),e.sdkInfo&&(t.generatorSDKInfo=e.sdkInfo),t.lcut=e.time,t)}qe(t,e){let i=null;return{result:i=t?t[e]||t[(0,s.h)(e)]:i,details:this.Be(null==i)}}ze(t,e){var i,n=s.StableID.get(this.O);(null==(i=t.customIDs)?void 0:i.stableID)!==n?this.Le.add("StableIDMismatch"):"user"in e&&(i=e.user,(0,s.v)(t)!==(0,s.v)(i))&&this.Le.add("PartialUserMatch")}getCurrentSourceDetails(){var t;return"Uninitialized"===this.Ce||"NoValues"===this.Ce?{reason:this.Ce}:(t={reason:this.Ce,lcut:this.Ue,receivedAt:this.Fe},0<this.Le.size&&(t.warnings=Array.from(this.Le)),t)}Be(t){var e=this.getCurrentSourceDetails();let i=e.reason;var n=null!=(n=e.warnings)?n:[],t=("Bootstrap"===this.Ce&&0<n.length&&(i+=n[0]),"Uninitialized"!==i&&"NoValues"!==i&&(i=i+":"+(t?"Unrecognized":"Recognized")),"Bootstrap"===this.Ce&&null!=(n=this.Ge)?n:void 0);return t&&(e.bootstrapMetadata=t),$P($P({},e),{reason:i})}}},448:function(t,e,i){var l=this&&this.__awaiter||$A();$Q(e);const o=i(914),u=i(262);class n extends o.NetworkCore{constructor(t,e){super(t,e);e=null==t?void 0:t.networkConfig;this.Ve=new o.UrlConfiguration(o.Endpoint.qt,null==e?void 0:e.initializeUrl,null==e?void 0:e.api,null==e?void 0:e.initializeFallbackUrls)}fetchEvaluations(i,n,s,r){return l(this,void 0,void 0,function*(){var t=n?(0,o.P)(n,"has_updates","InitializeResponse"):null;let e={user:r,hash:"djb2",deltasResponseRequested:!1};return null!=t&&t.has_updates&&(e=$P($P({},e),{sinceTime:t.time,previousDerivedFields:"derived_fields"in t?t.derived_fields:{},deltasResponseRequested:!0})),this.Je(i,t,e,s)})}Je(e,i,n,s){var r;return l(this,void 0,void 0,function*(){var t=yield this.post({sdkKey:e,urlConfig:this.Ve,data:n,retries:2,isStatsigEncodable:!0,priority:s});return 204===(null==t?void 0:t.code)?'{"has_updates": false}':200!==(null==t?void 0:t.code)?null!=(r=null==t?void 0:t.body)?r:null:!0!==(null==i?void 0:i.has_updates)||!0!==(null==(r=t.body)?void 0:r.includes('"is_delta":true'))||!0!==n.deltasResponseRequested?t.body:"string"==typeof(t=(0,u.Ne)(i,t.body))?t:this.Je(e,i,$P($P($P({},n),t),{deltasResponseRequested:!1}),s)})}}e.default=n},583:(t,e,i)=>{$Q(e),e.$e=void 0;const g=i(914),b={disableExposureLog:!0};function p(t){return null==t||!1===t.disableExposureLog}function y(t,e){return null!=e&&!(0,g.Me)(t,e)}e.$e=function(v,f,_){return(t,e)=>{if(null==f)return e;var i,n,s,r,l,o,u,a,c,h,d=f[t];if(null==d||null!=e&&(0,g.zt)(e)!==d.param_type)return e;switch(d.ref_type){case"static":return d.value;case"gate":return h=d,v.getFeatureGate(h.gate_name,p(_)?void 0:b).value?h.pass_value:h.fail_value;case"dynamic_config":return h=d,u=e,a=_,y(c=(o=v).getDynamicConfig(h.config_name,b).get(h.param_name),u)?u:(p(a)&&o.getDynamicConfig(h.config_name),c);case"experiment":return u=d,a=e,o=_,y(l=(c=v).getExperiment(u.experiment_name,b).get(u.param_name),a)?a:(p(o)&&c.getExperiment(u.experiment_name),l);case"layer":return l=d,n=e,s=_,y(r=(i=v).getLayer(l.layer_name,b).get(l.param_name),n)?n:(p(s)&&i.getLayer(l.layer_name).get(l.param_name),r);default:return e}}}},198:function(t,e,i){var s=this&&this.__awaiter||$A();$Q(e);const l=i(914),o=i(226),u=i(448),r=i(583),a=i(131);class n extends l.StatsigClientBase{static instance(t){var e=(0,l.l)().instance(t);return e instanceof n?e:(l.Log.warn((0,l.kt)()?"StatsigClient.instance is not supported in server environments":"Unable to find StatsigClient instance"),new n(null!=t?t:"",{}))}constructor(t,e,i=null){l.SDKType.ue(t,"javascript-client");var n,s=new u.default(i,t=>{this.$emt(t)}),s=(super(t,null!=(n=null==i?void 0:i.dataAdapter)?n:new a.StatsigEvaluationsDataAdapter,s,i),this.getFeatureGate=this.wi(this.Ti.bind(this)),this.getDynamicConfig=this.wi(this.Ii.bind(this)),this.getExperiment=this.wi(this.ki.bind(this)),this.getLayer=this.wi(this.Di.bind(this)),this.getParameterStore=this.wi(this.Ri.bind(this)),this.We=new o.default(t),this.He=this.Ai(e,i),null!=(n=null==i?void 0:i.plugins)?n:[]);for(const r of s)r.bind(this)}initializeSync(t){"Uninitialized"===this.loadingStatus&&(this.pe.start(),this.updateUserSync(this.He,t))}initializeAsync(t){return s(this,void 0,void 0,function*(){return this.ve||(this.ve=this.Ye(t)),this.ve})}updateUserSync(t,e){this.Xe(t);t=this.dataAdapter.getDataSync(this.He),this.We.setValues(t,this.He),this.Qe(t),e=null==e?void 0:e.disableBackgroundCacheRefresh;!0===e||null==e&&"Bootstrap"===(null==t?void 0:t.source)||this.Ze(null!=t?t:null,this.He)}updateUserAsync(i,n){return s(this,void 0,void 0,function*(){this.Xe(i);var t=this.He,e=(l.Diagnostics.B(this.O),this.dataAdapter.getDataSync(t));if(this.We.setValues(e,this.He),this.me("Loading",e),e=yield this.dataAdapter.getDataAsync(e,t,n),t===this.He){let t=!1;null!=e&&(l.Diagnostics.W(this.O),t=this.We.setValues(e,this.He),l.Diagnostics.H(this.O,{success:t})),this.Qe(e),t||this.$emt({name:"initialization_failure"}),l.Diagnostics.V(this.O,t,this.We.getCurrentSourceDetails()),l.Diagnostics.tt(this.He,this.pe,this.O,this.m)}})}getContext(){return{sdkKey:this.O,options:this.m,values:this.We.getValues(),user:JSON.parse(JSON.stringify(this.He)),errorBoundary:this.$t,session:l.StatsigSession.get(this.O),stableID:l.StableID.get(this.O)}}checkGate(t,e){return this.getFeatureGate(t,e).value}logEvent(t,e,i){this.pe.enqueue($P($P({},"string"==typeof t?{eventName:t,value:e,metadata:i}:t),{user:this.He,time:Date.now()}))}be(){this.$on("error",()=>{"Loading"===this.loadingStatus&&this.Qe(null)})}Ye(t){return s(this,void 0,void 0,function*(){return l.Storage.isReady()||(yield l.Storage.isReadyResolver()),this.pe.start(),this.updateUserAsync(this.He,t)})}Qe(t){this.We.finalize(),this.me("Ready",t)}Ze(t,e){this.dataAdapter.getDataAsync(t,e,{priority:"low"}).catch(t=>{l.Log.error("An error occurred after update.",t)})}Xe(t){this.pe.reset(),this.We.reset(),this.He=this.Ai(t,this.m)}Ai(t,e){t=(0,l.T)(t,e),e=null==(e=t.customIDs)?void 0:e.stableID;return e&&l.StableID.setOverride(e,this.O),t}Ti(t,e){var{result:i,details:n}=this.We.getGate(t),n=(0,l.Ee)(t,n,i),s=null==(s=null==(i=this.overrideAdapter)?void 0:i.getGateOverride)?void 0:s.call(i,n,this.He,e),i=null!=s?s:n;return this.ye(t,(0,l.Se)(this.He,i),e),this.$emt({name:"gate_evaluation",gate:i}),i}Ii(t,e){var{result:i,details:n}=this.We.getConfig(t),n=(0,l.De)(t,n,i),s=null==(s=null==(i=this.overrideAdapter)?void 0:i.getDynamicConfigOverride)?void 0:s.call(i,n,this.He,e),i=null!=s?s:n;return this.ye(t,(0,l.je)(this.He,i),e),this.$emt({name:"dynamic_config_evaluation",dynamicConfig:i}),i}ki(t,e){var{result:i,details:n}=this.We.getConfig(t),n=(0,l.Ie)(t,n,i),s=null==(s=null==(i=this.overrideAdapter)?void 0:i.getExperimentOverride)?void 0:s.call(i,n,this.He,e),i=null!=s?s:n;return this.ye(t,(0,l.je)(this.He,i),e),this.$emt({name:"experiment_evaluation",experiment:i}),i}Di(e,i){var{result:t,details:n}=this.We.getLayer(e),n=(0,l.ke)(e,n,t),s=null==(s=null==(t=this.overrideAdapter)?void 0:t.getLayerOverride)?void 0:s.call(t,n,this.He,i);null!=i&&i.disableExposureLog&&this.pe.incrementNonExposureCount(e);const r=(0,l.Te)(n,s,null!=(t=null==s?void 0:s.__value)?t:n.__value,t=>{null!=i&&i.disableExposureLog||this.ye(e,(0,l.Oe)(this.He,r,t),i)});return this.$emt({name:"layer_evaluation",layer:r}),r}Ri(t,e){var{result:i,details:n}=this.We.getParamStore(t);return this.pe.incrementNonExposureCount(t),{name:t,details:n,__configuration:i,get:(0,r.$e)(this,i,e)}}}e.default=n},131:function(t,e,i){var r=this&&this.__awaiter||$A();$Q(e),e.StatsigEvaluationsDataAdapter=void 0;const n=i(914),s=i(448);class l extends n.DataAdapterCore{constructor(){super("EvaluationsDataAdapter","evaluations"),this.ht=null,this.m=null}attach(t,e){super.attach(t,e),this.ht=new s.default(null!=e?e:{})}getDataAsync(t,e,i){return this.D(t,(0,n.T)(e,this.m),i)}prefetchData(t,e){return this.A(t,e)}setData(t){var e=(0,n.P)(t,"has_updates","data");e&&"user"in e?super.setData(t,e.user):n.Log.error("StatsigUser not found. You may be using an older server SDK version. Please upgrade your SDK or use setDataLegacy.")}setDataLegacy(t,e){super.setData(t,e)}R(e,i,n){var s;return r(this,void 0,void 0,function*(){var t=yield null==(s=this.ht)?void 0:s.fetchEvaluations(this.C(),e,null==n?void 0:n.priority,i);return null!=t?t:null})}k(t){t=(0,n.o)(this.C(),t,null==(t=this.m)?void 0:t.customUserCacheKeyFunc);return`${n.DataAdapterCachePrefix}.${this.p}.`+t}N(t,e){return null!=t.fullUserHash&&t.fullUserHash===(0,n.v)(e)}}e.StatsigEvaluationsDataAdapter=l},18:function(t,e,i){var n=this&&this.__createBinding||(Object.create?function(t,e,i,n){void 0===n&&(n=i);var s=Object.getOwnPropertyDescriptor(e,i);s&&("get"in s?e.__esModule:!s.writable&&!s.configurable)||(s={enumerable:!0,get:function(){return e[i]}}),$Q2(t,n,s)}:function(t,e,i,n){t[n=void 0===n?i:n]=e[i]}),s=this&&this.__exportStar||function(t,e){for(var i in t)"default"===i||Object.prototype.hasOwnProperty.call(e,i)||n(e,t,i)},r=($Q(e),e.StatsigClient=void 0,i(198));e.StatsigClient=r.default,s(i(914),e),__STATSIG__=$P($P({},null!==__STATSIG__&&void 0!==__STATSIG__?__STATSIG__:{}),{StatsigClient:r.default}),e.default=__STATSIG__}},n={};function s(t){var e=n[t];return void 0!==e||(e=n[t]={exports:{}},i[t].call(e.exports,e,e.exports,s)),e.exports}return s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s(296).default})());
|
package/package.json
CHANGED
package/src/StatsigClient.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DataAdapterAsyncOptions, DataAdapterSyncOptions,
|
|
1
|
+
import { DataAdapterAsyncOptions, DataAdapterSyncOptions, EvaluationsDataAdapter, ExperimentEvaluationOptions, FeatureGateEvaluationOptions, PrecomputedEvaluationsContext, PrecomputedEvaluationsInterface, StatsigClientBase, StatsigEvent, StatsigUser } from '@statsig/client-core';
|
|
2
2
|
import type { StatsigOptions } from './StatsigOptions';
|
|
3
3
|
type AsyncUpdateOptions = DataAdapterAsyncOptions;
|
|
4
4
|
type SyncUpdateOptions = DataAdapterSyncOptions;
|
|
@@ -83,7 +83,13 @@ export default class StatsigClient extends StatsigClientBase<EvaluationsDataAdap
|
|
|
83
83
|
* @param {FeatureGateEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
84
84
|
* @returns {FeatureGate} - The {@link FeatureGate} object representing the gate's current evaluation results for the user.
|
|
85
85
|
*/
|
|
86
|
-
getFeatureGate(name: string, options?:
|
|
86
|
+
readonly getFeatureGate: (name: string, options?: import("@statsig/client-core").EvaluationOptionsCommon | undefined) => {
|
|
87
|
+
readonly name: string;
|
|
88
|
+
readonly ruleID: string;
|
|
89
|
+
readonly details: import("@statsig/client-core").EvaluationDetails;
|
|
90
|
+
readonly value: boolean;
|
|
91
|
+
readonly __evaluation: import("@statsig/client-core").GateEvaluation | null;
|
|
92
|
+
};
|
|
87
93
|
/**
|
|
88
94
|
* Retrieves the value of a dynamic config for the current user.
|
|
89
95
|
*
|
|
@@ -91,7 +97,27 @@ export default class StatsigClient extends StatsigClientBase<EvaluationsDataAdap
|
|
|
91
97
|
* @param {DynamicConfigEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
92
98
|
* @returns {DynamicConfig} - The {@link DynamicConfig} object representing the dynamic configs's current evaluation results for the user.
|
|
93
99
|
*/
|
|
94
|
-
getDynamicConfig(name: string, options?:
|
|
100
|
+
readonly getDynamicConfig: (name: string, options?: import("@statsig/client-core").EvaluationOptionsCommon | undefined) => {
|
|
101
|
+
readonly name: string;
|
|
102
|
+
readonly value: Record<string, unknown>;
|
|
103
|
+
readonly ruleID: string;
|
|
104
|
+
readonly details: import("@statsig/client-core").EvaluationDetails;
|
|
105
|
+
readonly __evaluation: {
|
|
106
|
+
id_type: string;
|
|
107
|
+
name: string;
|
|
108
|
+
rule_id: string;
|
|
109
|
+
secondary_exposures: import("@statsig/client-core").SecondaryExposure[];
|
|
110
|
+
value: Record<string, unknown>;
|
|
111
|
+
version?: string | undefined;
|
|
112
|
+
group_name?: string | undefined;
|
|
113
|
+
group: string;
|
|
114
|
+
is_device_based: boolean;
|
|
115
|
+
is_experiment_active?: boolean | undefined;
|
|
116
|
+
is_user_in_experiment?: boolean | undefined;
|
|
117
|
+
passed?: boolean | undefined;
|
|
118
|
+
} | null;
|
|
119
|
+
readonly get: import("@statsig/client-core").TypedGet;
|
|
120
|
+
};
|
|
95
121
|
/**
|
|
96
122
|
* Retrieves the value of a experiment for the current user.
|
|
97
123
|
*
|
|
@@ -99,7 +125,28 @@ export default class StatsigClient extends StatsigClientBase<EvaluationsDataAdap
|
|
|
99
125
|
* @param {ExperimentEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
100
126
|
* @returns {Experiment} - The {@link Experiment} object representing the experiments's current evaluation results for the user.
|
|
101
127
|
*/
|
|
102
|
-
getExperiment(name: string, options?: ExperimentEvaluationOptions)
|
|
128
|
+
readonly getExperiment: (name: string, options?: ExperimentEvaluationOptions | undefined) => {
|
|
129
|
+
readonly name: string;
|
|
130
|
+
readonly ruleID: string;
|
|
131
|
+
readonly details: import("@statsig/client-core").EvaluationDetails;
|
|
132
|
+
readonly value: Record<string, unknown>;
|
|
133
|
+
readonly groupName: string | null;
|
|
134
|
+
readonly __evaluation: {
|
|
135
|
+
id_type: string;
|
|
136
|
+
name: string;
|
|
137
|
+
rule_id: string;
|
|
138
|
+
secondary_exposures: import("@statsig/client-core").SecondaryExposure[];
|
|
139
|
+
value: Record<string, unknown>;
|
|
140
|
+
version?: string | undefined;
|
|
141
|
+
group_name?: string | undefined;
|
|
142
|
+
group: string;
|
|
143
|
+
is_device_based: boolean;
|
|
144
|
+
is_experiment_active?: boolean | undefined;
|
|
145
|
+
is_user_in_experiment?: boolean | undefined;
|
|
146
|
+
passed?: boolean | undefined;
|
|
147
|
+
} | null;
|
|
148
|
+
readonly get: import("@statsig/client-core").TypedGet;
|
|
149
|
+
};
|
|
103
150
|
/**
|
|
104
151
|
* Retrieves the value of a layer for the current user.
|
|
105
152
|
*
|
|
@@ -107,8 +154,43 @@ export default class StatsigClient extends StatsigClientBase<EvaluationsDataAdap
|
|
|
107
154
|
* @param {LayerEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
108
155
|
* @returns {Layer} - The {@link Layer} object representing the layers's current evaluation results for the user.
|
|
109
156
|
*/
|
|
110
|
-
getLayer(name: string, options?:
|
|
111
|
-
|
|
157
|
+
readonly getLayer: (name: string, options?: import("@statsig/client-core").EvaluationOptionsCommon | undefined) => {
|
|
158
|
+
readonly name: string;
|
|
159
|
+
readonly ruleID: string;
|
|
160
|
+
readonly details: import("@statsig/client-core").EvaluationDetails;
|
|
161
|
+
readonly groupName: string | null;
|
|
162
|
+
readonly __value: Record<string, unknown>;
|
|
163
|
+
readonly __evaluation: {
|
|
164
|
+
name: string;
|
|
165
|
+
rule_id: string;
|
|
166
|
+
secondary_exposures: import("@statsig/client-core").SecondaryExposure[];
|
|
167
|
+
value: Record<string, unknown>;
|
|
168
|
+
version?: string | undefined;
|
|
169
|
+
group_name?: string | undefined;
|
|
170
|
+
group: string;
|
|
171
|
+
is_device_based: boolean;
|
|
172
|
+
is_experiment_active?: boolean | undefined;
|
|
173
|
+
is_user_in_experiment?: boolean | undefined;
|
|
174
|
+
passed?: boolean | undefined;
|
|
175
|
+
allocated_experiment_name: string;
|
|
176
|
+
explicit_parameters: string[];
|
|
177
|
+
undelegated_secondary_exposures?: import("@statsig/client-core").SecondaryExposure[] | undefined;
|
|
178
|
+
} | null;
|
|
179
|
+
readonly get: import("@statsig/client-core").TypedGet;
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* Retrieves the value of a parameter store for the current user.
|
|
183
|
+
*
|
|
184
|
+
* @param {string} name The name of the parameter store to get.
|
|
185
|
+
* @param {ParameterStoreEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
186
|
+
* @returns {ParameterStore} - The {@link ParameterStore} object representing the parameter store's current mappings for the user.
|
|
187
|
+
*/
|
|
188
|
+
readonly getParameterStore: (name: string, options?: import("@statsig/client-core").EvaluationOptionsCommon | undefined) => {
|
|
189
|
+
readonly name: string;
|
|
190
|
+
readonly details: import("@statsig/client-core").EvaluationDetails;
|
|
191
|
+
readonly get: import("@statsig/client-core").TypedGet;
|
|
192
|
+
readonly __configuration: import("@statsig/client-core").ParamStoreConfig | null;
|
|
193
|
+
};
|
|
112
194
|
/**
|
|
113
195
|
* Logs an event to the internal logging system. This function allows logging by either passing a fully formed event object or by specifying the event name with optional value and metadata.
|
|
114
196
|
*
|
|
@@ -122,5 +204,11 @@ export default class StatsigClient extends StatsigClientBase<EvaluationsDataAdap
|
|
|
122
204
|
private _finalizeUpdate;
|
|
123
205
|
private _runPostUpdate;
|
|
124
206
|
private _resetForUser;
|
|
207
|
+
private _configureUser;
|
|
208
|
+
private _getFeatureGateImpl;
|
|
209
|
+
private _getDynamicConfigImpl;
|
|
210
|
+
private _getExperimentImpl;
|
|
211
|
+
private _getLayerImpl;
|
|
212
|
+
private _getParameterStoreImpl;
|
|
125
213
|
}
|
|
126
214
|
export {};
|
package/src/StatsigClient.js
CHANGED
|
@@ -47,8 +47,48 @@ class StatsigClient extends client_core_1.StatsigClientBase {
|
|
|
47
47
|
this.$emt(e);
|
|
48
48
|
});
|
|
49
49
|
super(sdkKey, (_a = options === null || options === void 0 ? void 0 : options.dataAdapter) !== null && _a !== void 0 ? _a : new StatsigEvaluationsDataAdapter_1.StatsigEvaluationsDataAdapter(), network, options);
|
|
50
|
+
/**
|
|
51
|
+
* Retrieves the value of a feature gate for the current user, represented as a {@link FeatureGate} object.
|
|
52
|
+
*
|
|
53
|
+
* @param {string} name - The name of the feature gate to retrieve.
|
|
54
|
+
* @param {FeatureGateEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
55
|
+
* @returns {FeatureGate} - The {@link FeatureGate} object representing the gate's current evaluation results for the user.
|
|
56
|
+
*/
|
|
57
|
+
this.getFeatureGate = this._memoize(this._getFeatureGateImpl.bind(this));
|
|
58
|
+
/**
|
|
59
|
+
* Retrieves the value of a dynamic config for the current user.
|
|
60
|
+
*
|
|
61
|
+
* @param {string} name The name of the dynamic config to get.
|
|
62
|
+
* @param {DynamicConfigEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
63
|
+
* @returns {DynamicConfig} - The {@link DynamicConfig} object representing the dynamic configs's current evaluation results for the user.
|
|
64
|
+
*/
|
|
65
|
+
this.getDynamicConfig = this._memoize(this._getDynamicConfigImpl.bind(this));
|
|
66
|
+
/**
|
|
67
|
+
* Retrieves the value of a experiment for the current user.
|
|
68
|
+
*
|
|
69
|
+
* @param {string} name The name of the experiment to get.
|
|
70
|
+
* @param {ExperimentEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
71
|
+
* @returns {Experiment} - The {@link Experiment} object representing the experiments's current evaluation results for the user.
|
|
72
|
+
*/
|
|
73
|
+
this.getExperiment = this._memoize(this._getExperimentImpl.bind(this));
|
|
74
|
+
/**
|
|
75
|
+
* Retrieves the value of a layer for the current user.
|
|
76
|
+
*
|
|
77
|
+
* @param {string} name The name of the layer to get.
|
|
78
|
+
* @param {LayerEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
79
|
+
* @returns {Layer} - The {@link Layer} object representing the layers's current evaluation results for the user.
|
|
80
|
+
*/
|
|
81
|
+
this.getLayer = this._memoize(this._getLayerImpl.bind(this));
|
|
82
|
+
/**
|
|
83
|
+
* Retrieves the value of a parameter store for the current user.
|
|
84
|
+
*
|
|
85
|
+
* @param {string} name The name of the parameter store to get.
|
|
86
|
+
* @param {ParameterStoreEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
87
|
+
* @returns {ParameterStore} - The {@link ParameterStore} object representing the parameter store's current mappings for the user.
|
|
88
|
+
*/
|
|
89
|
+
this.getParameterStore = this._memoize(this._getParameterStoreImpl.bind(this));
|
|
50
90
|
this._store = new EvaluationStore_1.default(sdkKey);
|
|
51
|
-
this._user =
|
|
91
|
+
this._user = this._configureUser(user, options);
|
|
52
92
|
const plugins = (_b = options === null || options === void 0 ? void 0 : options.plugins) !== null && _b !== void 0 ? _b : [];
|
|
53
93
|
for (const plugin of plugins) {
|
|
54
94
|
plugin.bind(this);
|
|
@@ -173,85 +213,6 @@ class StatsigClient extends client_core_1.StatsigClientBase {
|
|
|
173
213
|
checkGate(name, options) {
|
|
174
214
|
return this.getFeatureGate(name, options).value;
|
|
175
215
|
}
|
|
176
|
-
/**
|
|
177
|
-
* Retrieves the value of a feature gate for the current user, represented as a {@link FeatureGate} object.
|
|
178
|
-
*
|
|
179
|
-
* @param {string} name - The name of the feature gate to retrieve.
|
|
180
|
-
* @param {FeatureGateEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
181
|
-
* @returns {FeatureGate} - The {@link FeatureGate} object representing the gate's current evaluation results for the user.
|
|
182
|
-
*/
|
|
183
|
-
getFeatureGate(name, options) {
|
|
184
|
-
var _a, _b;
|
|
185
|
-
const { result: evaluation, details } = this._store.getGate(name);
|
|
186
|
-
const gate = (0, client_core_1._makeFeatureGate)(name, details, evaluation);
|
|
187
|
-
const overridden = (_b = (_a = this.overrideAdapter) === null || _a === void 0 ? void 0 : _a.getGateOverride) === null || _b === void 0 ? void 0 : _b.call(_a, gate, this._user, options);
|
|
188
|
-
const result = overridden !== null && overridden !== void 0 ? overridden : gate;
|
|
189
|
-
this._enqueueExposure(name, (0, client_core_1._createGateExposure)(this._user, result), options);
|
|
190
|
-
this.$emt({ name: 'gate_evaluation', gate: result });
|
|
191
|
-
return result;
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Retrieves the value of a dynamic config for the current user.
|
|
195
|
-
*
|
|
196
|
-
* @param {string} name The name of the dynamic config to get.
|
|
197
|
-
* @param {DynamicConfigEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
198
|
-
* @returns {DynamicConfig} - The {@link DynamicConfig} object representing the dynamic configs's current evaluation results for the user.
|
|
199
|
-
*/
|
|
200
|
-
getDynamicConfig(name, options) {
|
|
201
|
-
var _a, _b;
|
|
202
|
-
const { result: evaluation, details } = this._store.getConfig(name);
|
|
203
|
-
const config = (0, client_core_1._makeDynamicConfig)(name, details, evaluation);
|
|
204
|
-
const overridden = (_b = (_a = this.overrideAdapter) === null || _a === void 0 ? void 0 : _a.getDynamicConfigOverride) === null || _b === void 0 ? void 0 : _b.call(_a, config, this._user, options);
|
|
205
|
-
const result = overridden !== null && overridden !== void 0 ? overridden : config;
|
|
206
|
-
this._enqueueExposure(name, (0, client_core_1._createConfigExposure)(this._user, result), options);
|
|
207
|
-
this.$emt({ name: 'dynamic_config_evaluation', dynamicConfig: result });
|
|
208
|
-
return result;
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Retrieves the value of a experiment for the current user.
|
|
212
|
-
*
|
|
213
|
-
* @param {string} name The name of the experiment to get.
|
|
214
|
-
* @param {ExperimentEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
215
|
-
* @returns {Experiment} - The {@link Experiment} object representing the experiments's current evaluation results for the user.
|
|
216
|
-
*/
|
|
217
|
-
getExperiment(name, options) {
|
|
218
|
-
var _a, _b;
|
|
219
|
-
const { result: evaluation, details } = this._store.getConfig(name);
|
|
220
|
-
const experiment = (0, client_core_1._makeExperiment)(name, details, evaluation);
|
|
221
|
-
const overridden = (_b = (_a = this.overrideAdapter) === null || _a === void 0 ? void 0 : _a.getExperimentOverride) === null || _b === void 0 ? void 0 : _b.call(_a, experiment, this._user, options);
|
|
222
|
-
const result = overridden !== null && overridden !== void 0 ? overridden : experiment;
|
|
223
|
-
this._enqueueExposure(name, (0, client_core_1._createConfigExposure)(this._user, result), options);
|
|
224
|
-
this.$emt({ name: 'experiment_evaluation', experiment: result });
|
|
225
|
-
return result;
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Retrieves the value of a layer for the current user.
|
|
229
|
-
*
|
|
230
|
-
* @param {string} name The name of the layer to get.
|
|
231
|
-
* @param {LayerEvaluationOptions} [options] - Optional. Additional options to customize the method call.
|
|
232
|
-
* @returns {Layer} - The {@link Layer} object representing the layers's current evaluation results for the user.
|
|
233
|
-
*/
|
|
234
|
-
getLayer(name, options) {
|
|
235
|
-
var _a, _b, _c;
|
|
236
|
-
const { result: evaluation, details } = this._store.getLayer(name);
|
|
237
|
-
const layer = (0, client_core_1._makeLayer)(name, details, evaluation);
|
|
238
|
-
const overridden = (_b = (_a = this.overrideAdapter) === null || _a === void 0 ? void 0 : _a.getLayerOverride) === null || _b === void 0 ? void 0 : _b.call(_a, layer, this._user, options);
|
|
239
|
-
const result = (0, client_core_1._mergeOverride)(layer, overridden, (_c = overridden === null || overridden === void 0 ? void 0 : overridden.__value) !== null && _c !== void 0 ? _c : layer.__value, (param) => {
|
|
240
|
-
this._enqueueExposure(name, (0, client_core_1._createLayerParameterExposure)(this._user, result, param), options);
|
|
241
|
-
});
|
|
242
|
-
this.$emt({ name: 'layer_evaluation', layer: result });
|
|
243
|
-
return result;
|
|
244
|
-
}
|
|
245
|
-
getParameterStore(name, options) {
|
|
246
|
-
const { result: configuration, details } = this._store.getParamStore(name);
|
|
247
|
-
this._logger.incrementNonExposureCount(name);
|
|
248
|
-
return {
|
|
249
|
-
name,
|
|
250
|
-
details,
|
|
251
|
-
__configuration: configuration,
|
|
252
|
-
get: (0, ParamStoreGetterFactory_1._makeParamStoreGetter)(this, configuration, options),
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
216
|
/**
|
|
256
217
|
* Logs an event to the internal logging system. This function allows logging by either passing a fully formed event object or by specifying the event name with optional value and metadata.
|
|
257
218
|
*
|
|
@@ -295,14 +256,75 @@ class StatsigClient extends client_core_1.StatsigClientBase {
|
|
|
295
256
|
});
|
|
296
257
|
}
|
|
297
258
|
_resetForUser(user) {
|
|
298
|
-
var _a;
|
|
299
259
|
this._logger.reset();
|
|
300
260
|
this._store.reset();
|
|
301
|
-
this._user =
|
|
302
|
-
|
|
261
|
+
this._user = this._configureUser(user, this._options);
|
|
262
|
+
}
|
|
263
|
+
_configureUser(originalUser, options) {
|
|
264
|
+
var _a;
|
|
265
|
+
const user = (0, client_core_1._normalizeUser)(originalUser, options);
|
|
266
|
+
const stableIdOverride = (_a = user.customIDs) === null || _a === void 0 ? void 0 : _a.stableID;
|
|
303
267
|
if (stableIdOverride) {
|
|
304
268
|
client_core_1.StableID.setOverride(stableIdOverride, this._sdkKey);
|
|
305
269
|
}
|
|
270
|
+
return user;
|
|
271
|
+
}
|
|
272
|
+
_getFeatureGateImpl(name, options) {
|
|
273
|
+
var _a, _b;
|
|
274
|
+
const { result: evaluation, details } = this._store.getGate(name);
|
|
275
|
+
const gate = (0, client_core_1._makeFeatureGate)(name, details, evaluation);
|
|
276
|
+
const overridden = (_b = (_a = this.overrideAdapter) === null || _a === void 0 ? void 0 : _a.getGateOverride) === null || _b === void 0 ? void 0 : _b.call(_a, gate, this._user, options);
|
|
277
|
+
const result = overridden !== null && overridden !== void 0 ? overridden : gate;
|
|
278
|
+
this._enqueueExposure(name, (0, client_core_1._createGateExposure)(this._user, result), options);
|
|
279
|
+
this.$emt({ name: 'gate_evaluation', gate: result });
|
|
280
|
+
return result;
|
|
281
|
+
}
|
|
282
|
+
_getDynamicConfigImpl(name, options) {
|
|
283
|
+
var _a, _b;
|
|
284
|
+
const { result: evaluation, details } = this._store.getConfig(name);
|
|
285
|
+
const config = (0, client_core_1._makeDynamicConfig)(name, details, evaluation);
|
|
286
|
+
const overridden = (_b = (_a = this.overrideAdapter) === null || _a === void 0 ? void 0 : _a.getDynamicConfigOverride) === null || _b === void 0 ? void 0 : _b.call(_a, config, this._user, options);
|
|
287
|
+
const result = overridden !== null && overridden !== void 0 ? overridden : config;
|
|
288
|
+
this._enqueueExposure(name, (0, client_core_1._createConfigExposure)(this._user, result), options);
|
|
289
|
+
this.$emt({ name: 'dynamic_config_evaluation', dynamicConfig: result });
|
|
290
|
+
return result;
|
|
291
|
+
}
|
|
292
|
+
_getExperimentImpl(name, options) {
|
|
293
|
+
var _a, _b;
|
|
294
|
+
const { result: evaluation, details } = this._store.getConfig(name);
|
|
295
|
+
const experiment = (0, client_core_1._makeExperiment)(name, details, evaluation);
|
|
296
|
+
const overridden = (_b = (_a = this.overrideAdapter) === null || _a === void 0 ? void 0 : _a.getExperimentOverride) === null || _b === void 0 ? void 0 : _b.call(_a, experiment, this._user, options);
|
|
297
|
+
const result = overridden !== null && overridden !== void 0 ? overridden : experiment;
|
|
298
|
+
this._enqueueExposure(name, (0, client_core_1._createConfigExposure)(this._user, result), options);
|
|
299
|
+
this.$emt({ name: 'experiment_evaluation', experiment: result });
|
|
300
|
+
return result;
|
|
301
|
+
}
|
|
302
|
+
_getLayerImpl(name, options) {
|
|
303
|
+
var _a, _b, _c;
|
|
304
|
+
const { result: evaluation, details } = this._store.getLayer(name);
|
|
305
|
+
const layer = (0, client_core_1._makeLayer)(name, details, evaluation);
|
|
306
|
+
const overridden = (_b = (_a = this.overrideAdapter) === null || _a === void 0 ? void 0 : _a.getLayerOverride) === null || _b === void 0 ? void 0 : _b.call(_a, layer, this._user, options);
|
|
307
|
+
if (options === null || options === void 0 ? void 0 : options.disableExposureLog) {
|
|
308
|
+
this._logger.incrementNonExposureCount(name);
|
|
309
|
+
}
|
|
310
|
+
const result = (0, client_core_1._mergeOverride)(layer, overridden, (_c = overridden === null || overridden === void 0 ? void 0 : overridden.__value) !== null && _c !== void 0 ? _c : layer.__value, (param) => {
|
|
311
|
+
if (options === null || options === void 0 ? void 0 : options.disableExposureLog) {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
this._enqueueExposure(name, (0, client_core_1._createLayerParameterExposure)(this._user, result, param), options);
|
|
315
|
+
});
|
|
316
|
+
this.$emt({ name: 'layer_evaluation', layer: result });
|
|
317
|
+
return result;
|
|
318
|
+
}
|
|
319
|
+
_getParameterStoreImpl(name, options) {
|
|
320
|
+
const { result: configuration, details } = this._store.getParamStore(name);
|
|
321
|
+
this._logger.incrementNonExposureCount(name);
|
|
322
|
+
return {
|
|
323
|
+
name,
|
|
324
|
+
details,
|
|
325
|
+
__configuration: configuration,
|
|
326
|
+
get: (0, ParamStoreGetterFactory_1._makeParamStoreGetter)(this, configuration, options),
|
|
327
|
+
};
|
|
306
328
|
}
|
|
307
329
|
}
|
|
308
330
|
exports.default = StatsigClient;
|