@magic-sdk/provider 29.4.0 → 29.4.1-canary.913.16658556087.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/es/index.mjs CHANGED
@@ -1,6 +1,2476 @@
1
- var zt=Object.create;var Ne=Object.defineProperty;var Yt=Object.getOwnPropertyDescriptor;var Qt=Object.getOwnPropertyNames;var Zt=Object.getPrototypeOf,er=Object.prototype.hasOwnProperty;var tr=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),rr=(r,e)=>{for(var t in e)Ne(r,t,{get:e[t],enumerable:!0})},nr=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Qt(e))!er.call(r,n)&&n!==t&&Ne(r,n,{get:()=>e[n],enumerable:!(s=Yt(e,n))||s.enumerable});return r};var sr=(r,e,t)=>(t=r!=null?zt(Zt(r)):{},nr(e||!r||!r.__esModule?Ne(t,"default",{value:r,enumerable:!0}):t,r));var Ct=tr((ls,ke)=>{"use strict";var pn=Object.prototype.hasOwnProperty,I="~";function se(){}Object.create&&(se.prototype=Object.create(null),new se().__proto__||(I=!1));function mn(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function Mt(r,e,t,s,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var o=new mn(t,s||r,n),i=I?I+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],o]:r._events[i].push(o):(r._events[i]=o,r._eventsCount++),r}function fe(r,e){--r._eventsCount===0?r._events=new se:delete r._events[e]}function v(){this._events=new se,this._eventsCount=0}v.prototype.eventNames=function(){var e=[],t,s;if(this._eventsCount===0)return e;for(s in t=this._events)pn.call(t,s)&&e.push(I?s.slice(1):s);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};v.prototype.listeners=function(e){var t=I?I+e:e,s=this._events[t];if(!s)return[];if(s.fn)return[s.fn];for(var n=0,o=s.length,i=new Array(o);n<o;n++)i[n]=s[n].fn;return i};v.prototype.listenerCount=function(e){var t=I?I+e:e,s=this._events[t];return s?s.fn?1:s.length:0};v.prototype.emit=function(e,t,s,n,o,i){var a=I?I+e:e;if(!this._events[a])return!1;var c=this._events[a],d=arguments.length,l,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),d){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,s),!0;case 4:return c.fn.call(c.context,t,s,n),!0;case 5:return c.fn.call(c.context,t,s,n,o),!0;case 6:return c.fn.call(c.context,t,s,n,o,i),!0}for(u=1,l=new Array(d-1);u<d;u++)l[u-1]=arguments[u];c.fn.apply(c.context,l)}else{var P=c.length,w;for(u=0;u<P;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),d){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,s);break;case 4:c[u].fn.call(c[u].context,t,s,n);break;default:if(!l)for(w=1,l=new Array(d-1);w<d;w++)l[w-1]=arguments[w];c[u].fn.apply(c[u].context,l)}}return!0};v.prototype.on=function(e,t,s){return Mt(this,e,t,s,!1)};v.prototype.once=function(e,t,s){return Mt(this,e,t,s,!0)};v.prototype.removeListener=function(e,t,s,n){var o=I?I+e:e;if(!this._events[o])return this;if(!t)return fe(this,o),this;var i=this._events[o];if(i.fn)i.fn===t&&(!n||i.once)&&(!s||i.context===s)&&fe(this,o);else{for(var a=0,c=[],d=i.length;a<d;a++)(i[a].fn!==t||n&&!i[a].once||s&&i[a].context!==s)&&c.push(i[a]);c.length?this._events[o]=c.length===1?c[0]:c:fe(this,o)}return this};v.prototype.removeAllListeners=function(e){var t;return e?(t=I?I+e:e,this._events[t]&&fe(this,t)):(this._events=new se,this._eventsCount=0),this};v.prototype.off=v.prototype.removeListener;v.prototype.addListener=v.prototype.on;v.prefixed=I;v.EventEmitter=v;typeof ke<"u"&&(ke.exports=v)});function or(r){let e={exports:{}};return r(e,e.exports),e.exports}var ir=Number.MAX_SAFE_INTEGER||9007199254740991;var $e={SEMVER_SPEC_VERSION:"2.0.0",MAX_LENGTH:256,MAX_SAFE_INTEGER:ir,MAX_SAFE_COMPONENT_LENGTH:16},ar=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{},h=ar,ee=or(function(r,e){let{MAX_SAFE_COMPONENT_LENGTH:t}=$e,s=(e=r.exports={}).re=[],n=e.src=[],o=e.t={},i=0,a=(c,d,l)=>{let u=i++;h(u,d),o[c]=u,n[u]=d,s[u]=new RegExp(d,l?"g":void 0)};a("NUMERICIDENTIFIER","0|[1-9]\\d*"),a("NUMERICIDENTIFIERLOOSE","[0-9]+"),a("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*"),a("MAINVERSION",`(${n[o.NUMERICIDENTIFIER]})\\.(${n[o.NUMERICIDENTIFIER]})\\.(${n[o.NUMERICIDENTIFIER]})`),a("MAINVERSIONLOOSE",`(${n[o.NUMERICIDENTIFIERLOOSE]})\\.(${n[o.NUMERICIDENTIFIERLOOSE]})\\.(${n[o.NUMERICIDENTIFIERLOOSE]})`),a("PRERELEASEIDENTIFIER",`(?:${n[o.NUMERICIDENTIFIER]}|${n[o.NONNUMERICIDENTIFIER]})`),a("PRERELEASEIDENTIFIERLOOSE",`(?:${n[o.NUMERICIDENTIFIERLOOSE]}|${n[o.NONNUMERICIDENTIFIER]})`),a("PRERELEASE",`(?:-(${n[o.PRERELEASEIDENTIFIER]}(?:\\.${n[o.PRERELEASEIDENTIFIER]})*))`),a("PRERELEASELOOSE",`(?:-?(${n[o.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${n[o.PRERELEASEIDENTIFIERLOOSE]})*))`),a("BUILDIDENTIFIER","[0-9A-Za-z-]+"),a("BUILD",`(?:\\+(${n[o.BUILDIDENTIFIER]}(?:\\.${n[o.BUILDIDENTIFIER]})*))`),a("FULLPLAIN",`v?${n[o.MAINVERSION]}${n[o.PRERELEASE]}?${n[o.BUILD]}?`),a("FULL",`^${n[o.FULLPLAIN]}$`),a("LOOSEPLAIN",`[v=\\s]*${n[o.MAINVERSIONLOOSE]}${n[o.PRERELEASELOOSE]}?${n[o.BUILD]}?`),a("LOOSE",`^${n[o.LOOSEPLAIN]}$`),a("GTLT","((?:<|>)?=?)"),a("XRANGEIDENTIFIERLOOSE",`${n[o.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),a("XRANGEIDENTIFIER",`${n[o.NUMERICIDENTIFIER]}|x|X|\\*`),a("XRANGEPLAIN",`[v=\\s]*(${n[o.XRANGEIDENTIFIER]})(?:\\.(${n[o.XRANGEIDENTIFIER]})(?:\\.(${n[o.XRANGEIDENTIFIER]})(?:${n[o.PRERELEASE]})?${n[o.BUILD]}?)?)?`),a("XRANGEPLAINLOOSE",`[v=\\s]*(${n[o.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[o.XRANGEIDENTIFIERLOOSE]})(?:\\.(${n[o.XRANGEIDENTIFIERLOOSE]})(?:${n[o.PRERELEASELOOSE]})?${n[o.BUILD]}?)?)?`),a("XRANGE",`^${n[o.GTLT]}\\s*${n[o.XRANGEPLAIN]}$`),a("XRANGELOOSE",`^${n[o.GTLT]}\\s*${n[o.XRANGEPLAINLOOSE]}$`),a("COERCE",`(^|[^\\d])(\\d{1,${t}})(?:\\.(\\d{1,${t}}))?(?:\\.(\\d{1,${t}}))?(?:$|[^\\d])`),a("COERCERTL",n[o.COERCE],!0),a("LONETILDE","(?:~>?)"),a("TILDETRIM",`(\\s*)${n[o.LONETILDE]}\\s+`,!0),e.tildeTrimReplace="$1~",a("TILDE",`^${n[o.LONETILDE]}${n[o.XRANGEPLAIN]}$`),a("TILDELOOSE",`^${n[o.LONETILDE]}${n[o.XRANGEPLAINLOOSE]}$`),a("LONECARET","(?:\\^)"),a("CARETTRIM",`(\\s*)${n[o.LONECARET]}\\s+`,!0),e.caretTrimReplace="$1^",a("CARET",`^${n[o.LONECARET]}${n[o.XRANGEPLAIN]}$`),a("CARETLOOSE",`^${n[o.LONECARET]}${n[o.XRANGEPLAINLOOSE]}$`),a("COMPARATORLOOSE",`^${n[o.GTLT]}\\s*(${n[o.LOOSEPLAIN]})$|^$`),a("COMPARATOR",`^${n[o.GTLT]}\\s*(${n[o.FULLPLAIN]})$|^$`),a("COMPARATORTRIM",`(\\s*)${n[o.GTLT]}\\s*(${n[o.LOOSEPLAIN]}|${n[o.XRANGEPLAIN]})`,!0),e.comparatorTrimReplace="$1$2$3",a("HYPHENRANGE",`^\\s*(${n[o.XRANGEPLAIN]})\\s+-\\s+(${n[o.XRANGEPLAIN]})\\s*$`),a("HYPHENRANGELOOSE",`^\\s*(${n[o.XRANGEPLAINLOOSE]})\\s+-\\s+(${n[o.XRANGEPLAINLOOSE]})\\s*$`),a("STAR","(<|>)?=?\\s*\\*"),a("GTE0","^\\s*>=\\s*0.0.0\\s*$"),a("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")}),Xe=/^[0-9]+$/,st=(r,e)=>{let t=Xe.test(r),s=Xe.test(e);return t&&s&&(r=+r,e=+e),r===e?0:t&&!s?-1:s&&!t?1:r<e?-1:1},cr=(r,e)=>st(e,r),lr={compareIdentifiers:st,rcompareIdentifiers:cr},{MAX_LENGTH:ze,MAX_SAFE_INTEGER:ie}=$e,{re:Ye,t:Qe}=ee,{compareIdentifiers:z}=lr,M=class r{constructor(e,t){if(t&&typeof t=="object"||(t={loose:!!t,includePrerelease:!1}),e instanceof r){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>ze)throw new TypeError(`version is longer than ${ze} characters`);h("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let s=e.trim().match(t.loose?Ye[Qe.LOOSE]:Ye[Qe.FULL]);if(!s)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+s[1],this.minor=+s[2],this.patch=+s[3],this.major>ie||this.major<0)throw new TypeError("Invalid major version");if(this.minor>ie||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>ie||this.patch<0)throw new TypeError("Invalid patch version");s[4]?this.prerelease=s[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let o=+n;if(o>=0&&o<ie)return o}return n}):this.prerelease=[],this.build=s[5]?s[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(e){if(h("SemVer.compare",this.version,this.options,e),!(e instanceof r)){if(typeof e=="string"&&e===this.version)return 0;e=new r(e,this.options)}return e.version===this.version?0:this.compareMain(e)||this.comparePre(e)}compareMain(e){return e instanceof r||(e=new r(e,this.options)),z(this.major,e.major)||z(this.minor,e.minor)||z(this.patch,e.patch)}comparePre(e){if(e instanceof r||(e=new r(e,this.options)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;let t=0;do{let s=this.prerelease[t],n=e.prerelease[t];if(h("prerelease compare",t,s,n),s===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(s===void 0)return-1;if(s!==n)return z(s,n)}while(++t)}compareBuild(e){e instanceof r||(e=new r(e,this.options));let t=0;do{let s=this.build[t],n=e.build[t];if(h("prerelease compare",t,s,n),s===void 0&&n===void 0)return 0;if(n===void 0)return 1;if(s===void 0)return-1;if(s!==n)return z(s,n)}while(++t)}inc(e,t){switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",t),this.inc("pre",t);break;case"major":this.minor===0&&this.patch===0&&this.prerelease.length!==0||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":this.patch===0&&this.prerelease.length!==0||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{let s=this.prerelease.length;for(;--s>=0;)typeof this.prerelease[s]=="number"&&(this.prerelease[s]++,s=-2);s===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}},dr=(r,e,t)=>new M(r,t).compare(new M(e,t)),J=dr,ur=(r,e,t)=>J(r,e,t)===0,pr=ur,mr=(r,e,t)=>J(r,e,t)!==0,hr=mr,Er=(r,e,t)=>J(r,e,t)>0,fr=Er,gr=(r,e,t)=>J(r,e,t)>=0,yr=gr,Rr=(r,e,t)=>J(r,e,t)<0,vr=Rr,Tr=(r,e,t)=>J(r,e,t)<=0,Ir=Tr,br=(r,e,t,s)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return pr(r,t,s);case"!=":return hr(r,t,s);case">":return fr(r,t,s);case">=":return yr(r,t,s);case"<":return vr(r,t,s);case"<=":return Ir(r,t,s);default:throw new TypeError(`Invalid operator: ${e}`)}},Ae=br,Y=Symbol("SemVer ANY"),Q=class r{static get ANY(){return Y}constructor(e,t){if(t&&typeof t=="object"||(t={loose:!!t,includePrerelease:!1}),e instanceof r){if(e.loose===!!t.loose)return e;e=e.value}h("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Y?this.value="":this.value=this.operator+this.semver.version,h("comp",this)}parse(e){let t=this.options.loose?Ze[et.COMPARATORLOOSE]:Ze[et.COMPARATOR],s=e.match(t);if(!s)throw new TypeError(`Invalid comparator: ${e}`);this.operator=s[1]!==void 0?s[1]:"",this.operator==="="&&(this.operator=""),s[2]?this.semver=new M(s[2],this.options.loose):this.semver=Y}toString(){return this.value}test(e){if(h("Comparator.test",e,this.options.loose),this.semver===Y||e===Y)return!0;if(typeof e=="string")try{e=new M(e,this.options)}catch{return!1}return Ae(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof r))throw new TypeError("a Comparator is required");if(t&&typeof t=="object"||(t={loose:!!t,includePrerelease:!1}),this.operator==="")return this.value===""||new Z(e.value,t).test(this.value);if(e.operator==="")return e.value===""||new Z(this.value,t).test(e.semver);let s=!(this.operator!==">="&&this.operator!==">"||e.operator!==">="&&e.operator!==">"),n=!(this.operator!=="<="&&this.operator!=="<"||e.operator!=="<="&&e.operator!=="<"),o=this.semver.version===e.semver.version,i=!(this.operator!==">="&&this.operator!=="<="||e.operator!==">="&&e.operator!=="<="),a=Ae(this.semver,"<",e.semver,t)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),c=Ae(this.semver,">",e.semver,t)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return s||n||o&&i||a||c}},{re:Ze,t:et}=ee,Z=class r{constructor(e,t){if(t&&typeof t=="object"||(t={loose:!!t,includePrerelease:!1}),e instanceof r)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new r(e.raw,t);if(e instanceof Q)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(s=>this.parseRange(s.trim())).filter(s=>s.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let{loose:t}=this.options;e=e.trim();let s=t?y[E.HYPHENRANGELOOSE]:y[E.HYPHENRANGE];e=e.replace(s,kr(this.options.includePrerelease)),h("hyphen replace",e),e=e.replace(y[E.COMPARATORTRIM],Pr),h("comparator trim",e,y[E.COMPARATORTRIM]),e=(e=(e=e.replace(y[E.TILDETRIM],wr)).replace(y[E.CARETTRIM],Sr)).split(/\s+/).join(" ");let n=t?y[E.COMPARATORLOOSE]:y[E.COMPARATOR];return e.split(" ").map(o=>xr(o,this.options)).join(" ").split(/\s+/).map(o=>_r(o,this.options)).filter(this.options.loose?o=>!!o.match(n):()=>!0).map(o=>new Q(o,this.options))}intersects(e,t){if(!(e instanceof r))throw new TypeError("a Range is required");return this.set.some(s=>tt(s,t)&&e.set.some(n=>tt(n,t)&&s.every(o=>n.every(i=>o.intersects(i,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new M(e,this.options)}catch{return!1}for(let t=0;t<this.set.length;t++)if(Dr(this.set[t],e,this.options))return!0;return!1}},{re:y,t:E,comparatorTrimReplace:Pr,tildeTrimReplace:wr,caretTrimReplace:Sr}=ee,tt=(r,e)=>{let t=!0,s=r.slice(),n=s.pop();for(;t&&s.length;)t=s.every(o=>n.intersects(o,e)),n=s.pop();return t},xr=(r,e)=>(h("comp",r,e),r=Nr(r,e),h("caret",r),r=Mr(r,e),h("tildes",r),r=$r(r,e),h("xrange",r),r=Or(r,e),h("stars",r),r),T=r=>!r||r.toLowerCase()==="x"||r==="*",Mr=(r,e)=>r.trim().split(/\s+/).map(t=>Cr(t,e)).join(" "),Cr=(r,e)=>{let t=e.loose?y[E.TILDELOOSE]:y[E.TILDE];return r.replace(t,(s,n,o,i,a)=>{let c;return h("tilde",r,s,n,o,i,a),T(n)?c="":T(o)?c=`>=${n}.0.0 <${+n+1}.0.0-0`:T(i)?c=`>=${n}.${o}.0 <${n}.${+o+1}.0-0`:a?(h("replaceTilde pr",a),c=`>=${n}.${o}.${i}-${a} <${n}.${+o+1}.0-0`):c=`>=${n}.${o}.${i} <${n}.${+o+1}.0-0`,h("tilde return",c),c})},Nr=(r,e)=>r.trim().split(/\s+/).map(t=>Ar(t,e)).join(" "),Ar=(r,e)=>{h("caret",r,e);let t=e.loose?y[E.CARETLOOSE]:y[E.CARET],s=e.includePrerelease?"-0":"";return r.replace(t,(n,o,i,a,c)=>{let d;return h("caret",r,n,o,i,a,c),T(o)?d="":T(i)?d=`>=${o}.0.0${s} <${+o+1}.0.0-0`:T(a)?d=o==="0"?`>=${o}.${i}.0${s} <${o}.${+i+1}.0-0`:`>=${o}.${i}.0${s} <${+o+1}.0.0-0`:c?(h("replaceCaret pr",c),d=o==="0"?i==="0"?`>=${o}.${i}.${a}-${c} <${o}.${i}.${+a+1}-0`:`>=${o}.${i}.${a}-${c} <${o}.${+i+1}.0-0`:`>=${o}.${i}.${a}-${c} <${+o+1}.0.0-0`):(h("no pr"),d=o==="0"?i==="0"?`>=${o}.${i}.${a}${s} <${o}.${i}.${+a+1}-0`:`>=${o}.${i}.${a}${s} <${o}.${+i+1}.0-0`:`>=${o}.${i}.${a} <${+o+1}.0.0-0`),h("caret return",d),d})},$r=(r,e)=>(h("replaceXRanges",r,e),r.split(/\s+/).map(t=>Lr(t,e)).join(" ")),Lr=(r,e)=>{r=r.trim();let t=e.loose?y[E.XRANGELOOSE]:y[E.XRANGE];return r.replace(t,(s,n,o,i,a,c)=>{h("xRange",r,s,n,o,i,a,c);let d=T(o),l=d||T(i),u=l||T(a),P=u;return n==="="&&P&&(n=""),c=e.includePrerelease?"-0":"",d?s=n===">"||n==="<"?"<0.0.0-0":"*":n&&P?(l&&(i=0),a=0,n===">"?(n=">=",l?(o=+o+1,i=0,a=0):(i=+i+1,a=0)):n==="<="&&(n="<",l?o=+o+1:i=+i+1),n==="<"&&(c="-0"),s=`${n+o}.${i}.${a}${c}`):l?s=`>=${o}.0.0${c} <${+o+1}.0.0-0`:u&&(s=`>=${o}.${i}.0${c} <${o}.${+i+1}.0-0`),h("xRange return",s),s})},Or=(r,e)=>(h("replaceStars",r,e),r.trim().replace(y[E.STAR],"")),_r=(r,e)=>(h("replaceGTE0",r,e),r.trim().replace(y[e.includePrerelease?E.GTE0PRE:E.GTE0],"")),kr=r=>(e,t,s,n,o,i,a,c,d,l,u,P,w)=>`${t=T(s)?"":T(n)?`>=${s}.0.0${r?"-0":""}`:T(o)?`>=${s}.${n}.0${r?"-0":""}`:i?`>=${t}`:`>=${t}${r?"-0":""}`} ${c=T(d)?"":T(l)?`<${+d+1}.0.0-0`:T(u)?`<${d}.${+l+1}.0-0`:P?`<=${d}.${l}.${u}-${P}`:r?`<${d}.${l}.${+u+1}-0`:`<=${c}`}`.trim(),Dr=(r,e,t)=>{for(let s=0;s<r.length;s++)if(!r[s].test(e))return!1;if(e.prerelease.length&&!t.includePrerelease){for(let s=0;s<r.length;s++)if(h(r[s].semver),r[s].semver!==Q.ANY&&r[s].semver.prerelease.length>0){let n=r[s].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0},ot=(r,e,t)=>{try{e=new Z(e,t)}catch{return!1}return e.test(r)};var{MAX_LENGTH:qr}=$e,{re:rt,t:nt}=ee,Ur=(r,e)=>{if(e&&typeof e=="object"||(e={loose:!!e,includePrerelease:!1}),r instanceof M)return r;if(typeof r!="string"||r.length>qr||!(e.loose?rt[nt.LOOSE]:rt[nt.FULL]).test(r))return null;try{return new M(r,e)}catch{return null}},Fr=Ur,{re:ae,t:ce}=ee,it=(r,e)=>{if(r instanceof M)return r;if(typeof r=="number"&&(r=String(r)),typeof r!="string")return null;let t=null;if((e=e||{}).rtl){let s;for(;(s=ae[ce.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)t&&s.index+s[0].length===t.index+t[0].length||(t=s),ae[ce.COERCERTL].lastIndex=s.index+s[1].length+s[2].length;ae[ce.COERCERTL].lastIndex=-1}else t=r.match(ae[ce.COERCE]);return t===null?null:Fr(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,e)};function Wr(r){return String.fromCharCode(parseInt(r.slice(1),16))}function Jr(r){return`%${`00${r.charCodeAt(0).toString(16)}`.slice(-2)}`}function Gr(r){return btoa(encodeURIComponent(r).replace(/%[0-9A-F]{2}/g,Wr))}function Kr(r){return decodeURIComponent(Array.from(atob(r),Jr).join(""))}function le(r){return Gr(JSON.stringify(r))}function at(r){return JSON.parse(Kr(r))}import{RPCErrorCode as Xr,SDKErrorCode as G,SDKWarningCode as pe}from"@magic-sdk/types";import{MagicPayloadMethod as jr,RPCErrorCode as Vr}from"@magic-sdk/types";function N(r){return typeof r>"u"}function Br(r){return r===null}function de(r){return Br(r)||N(r)}function Un(r){return de(r)?!1:!N(r.jsonrpc)&&!N(r.id)&&!N(r.method)&&!N(r.params)}function ct(r){return de(r)?!1:!N(r.jsonrpc)&&!N(r.id)&&(!N(r.result)||!N(r.error))}function Fn(r){return de(r)?!1:typeof r=="string"&&Object.values(jr).includes(r)}function lt(r){return de(r)?!1:typeof r=="number"&&Object.values(Vr).includes(r)}function te(r){if(!r)return!0;for(let e in r)if(Object.hasOwnProperty.call(r,e))return!1;return!0}var m={};function Hr(r,e){return Object.assign(m,e),r}var dt={"magic-sdk":"magic-sdk","@magic-sdk/react-native":"magic-sdk-rn","@magic-sdk/react-native-bare":"magic-sdk-rn-bare","@magic-sdk/react-native-expo":"magic-sdk-rn-expo"};var $=class r extends Error{constructor(t,s){super(`Magic SDK Error: [${t}] ${s}`);this.code=t;this.rawMessage=s;Object.setPrototypeOf(this,r.prototype)}__proto__=Error},U=class r extends Error{__proto__=Error;code;rawMessage;data;constructor(e){super();let t=Number(e?.code);this.rawMessage=e?.message||"Internal error",this.code=lt(t)?t:Xr.InternalError,this.message=`Magic RPC Error: [${this.code}] ${this.rawMessage}`,this.data=e?.data||void 0,Object.setPrototypeOf(this,r.prototype)}},L=class{constructor(e,t){this.code=e;this.rawMessage=t;this.message=`Magic SDK Warning: [${e}] ${t}`}message;log(){console.warn(this.message)}},ue=class r extends Error{constructor(t,s,n,o){super(`Magic Extension Error (${t.name}): [${s}] ${n}`);this.code=s;this.rawMessage=n;this.data=o;Object.setPrototypeOf(this,r.prototype)}__proto__=Error},re=class{constructor(e,t,s){this.code=t;this.rawMessage=s;this.message=`Magic Extension Warning (${e.name}): [${t}] ${s}`}message;log(){console.warn(this.message)}};function ut(){return new $(G.MissingApiKey,"Please provide an API key that you acquired from the Magic developer dashboard.")}function pt(){return new $(G.ModalNotReady,"Modal is not ready")}function mt(){return new $(G.MalformedResponse,"Response from the Magic iframe is malformed.")}function ht(r){return new $(G.ExtensionNotInitialized,`Extensions must be initialized with a Magic SDK instance before \`Extension.${r}\` can be accessed. Do not invoke \`Extension.${r}\` inside an extension constructor.`)}function Et(r){let e=`Some extensions are incompatible with \`${m.sdkName}@${m.version}\`:`;return r.filter(t=>typeof t.compat<"u"&&t.compat!==null).forEach(t=>{let s=t.compat[m.sdkName];typeof s=="string"?e+=`
2
- - Extension \`${t.name}\` supports version(s) \`${s}\``:s||(e+=`
3
- - Extension \`${t.name}\` does not support ${m.platform} environments.`)}),new $(G.IncompatibleExtensions,e)}function ft(r){let e=t=>{let s=t+1,n=s%10,o=s%100;return n===1&&o!==11?`${s}st`:n===2&&o!==12?`${s}nd`:n===3&&o!==13?`${s}rd`:`${s}th`};return new $(G.InvalidArgument,`Invalid ${e(r.argument)} argument given to \`${r.procedure}\`.
4
- Expected: \`${r.expected}\`
5
- Received: \`${r.received}\``)}function Bn(){return new L(pe.DuplicateIframe,"Duplicate iframes found.")}function gt(){return new L(pe.SyncWeb3Method,"Non-async web3 methods are deprecated in web3 > 1.0 and are not supported by the Magic web3 provider. Please use an async method instead.")}function yt(){return new L(pe.ReactNativeEndpointConfiguration,`CUSTOM DOMAINS ARE NOT SUPPORTED WHEN USING MAGIC SDK WITH REACT NATIVE! The \`endpoint\` parameter SHOULD NOT be provided. The Magic \`<iframe>\` is automatically wrapped by a WebView pointed at \`${m.defaultEndpoint}\`. Changing this default behavior will lead to unexpected results and potentially security-threatening bugs.`)}function Rt(r){let{method:e,removalVersions:t,useInstead:s}=r,n=t[m.sdkName],o=s?` Use \`${s}\` instead.`:"",i=`\`${e}\` will be removed from \`${m.sdkName}\` in version \`${n}\`.${o}`;return new L(pe.DeprecationNotice,i)}import{MagicPayloadMethod as x,DeviceVerificationEventEmit as Ot,LoginWithEmailOTPEventEmit as C,UpdateEmailEventEmit as j,RecencyCheckEventEmit as _,LoginWithSmsOTPEventEmit as ye}from"@magic-sdk/types";import{MagicOutgoingWindowMessage as fn,MagicIncomingWindowMessage as gn,MagicPayloadMethod as yn,routeToMagicMethods as Rn}from"@magic-sdk/types";import{RPCErrorCode as dn}from"@magic-sdk/types";function*zr(){let r=0;for(;;)r<Number.MAX_SAFE_INTEGER?yield++r:r=0}var Yr=zr();function Le(){return Yr.next().value}var he={};rr(he,{clear:()=>Qr,getItem:()=>R,iterate:()=>Oe,key:()=>en,keys:()=>tn,length:()=>Zr,removeItem:()=>A,setItem:()=>S});var me;function O(r){return async(...e)=>(me||(me=await m.configureStorage()),await me.ready(),me[r](...e))}var R=O("getItem"),S=O("setItem"),A=O("removeItem"),Qr=O("clear"),Zr=O("length"),en=O("key"),tn=O("keys"),Oe=O("iterate");function vt(){let r=window.crypto.getRandomValues(new Uint8Array(16));r[6]=r[6]&15|64,r[8]=r[8]&191|128;let e="";return e+=r[0].toString(16),e+=r[1].toString(16),e+=r[2].toString(16),e+=r[3].toString(16),e+="-",e+=r[4].toString(16),e+=r[5].toString(16),e+="-",e+=r[6].toString(16),e+=r[7].toString(16),e+="-",e+=r[8].toString(16),e+=r[9].toString(16),e+="-",e+=r[10].toString(16),e+=r[11].toString(16),e+=r[12].toString(16),e+=r[13].toString(16),e+=r[14].toString(16),e+=r[15].toString(16),e}var _e="STORE_KEY_PRIVATE_KEY",Ee="STORE_KEY_PUBLIC_JWK",It="ECDSA",rn="P-256",nn={name:It,namedCurve:rn};function ne(){let r=typeof window<"u"&&!!window.crypto,e=r&&!!window.crypto.subtle;return r&&e}function bt(){A(Ee),A(_e)}async function Pt(){let r=await sn();if(!r){console.info("unable to create public key or webcrypto is unsupported");return}let{subtle:e}=window.crypto,t=await R(_e);if(!t||!e){console.info("unable to find private key or webcrypto unsupported");return}let s={iat:Math.floor(new Date().getTime()/1e3),jti:vt()},o={protected:Tt(JSON.stringify({typ:"dpop+jwt",alg:"ES256",jwk:r})),claims:Tt(JSON.stringify(s))},i=an(`${o.protected}.${o.claims}`),a={name:It,hash:{name:"SHA-256"}},c=ln(new Uint8Array(await e.sign(a,t,i)));return`${o.protected}.${o.claims}.${c}`}async function sn(){if(!ne()){console.info("webcrypto is not supported");return}return await R(Ee)||await on(),R(Ee)}async function on(){let{subtle:r}=window.crypto,e=await r.generateKey(nn,!1,["sign"]),t=await r.exportKey("jwk",e.publicKey);await S(_e,e.privateKey),await S(Ee,t)}function Tt(r){return wt(cn(r))}function an(r){return new TextEncoder().encode(r)}function wt(r){return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+/g,"")}function cn(r){return encodeURIComponent(r).replace(/%([0-9A-F]{2})/g,(t,s)=>String.fromCharCode(parseInt(s,16)))}function ln(r){let e="";return r.forEach(t=>{e+=String.fromCharCode(t)}),wt(e)}var St=Symbol("Payload pre-processed by Magic SDK");function xt(r){return Object.defineProperty(r,St,{value:!0,enumerable:!1}),r}function un(r){return!!r[St]}function F(r){return un(r)||(r.jsonrpc=r.jsonrpc??"2.0",r.id=Le(),r.method=r.method??"noop",r.params=r.params??[],xt(r)),r}function p(r,e=[]){return xt({params:e,method:r,jsonrpc:"2.0",id:Le()})}var K=class r{_jsonrpc;_id;_result;_error;constructor(e){e instanceof r?(this._jsonrpc=e.payload.jsonrpc,this._id=e.payload.id,this._result=e.payload.result,this._error=e.payload.error):ct(e)?(this._jsonrpc=e.jsonrpc,this._id=e.id,this._result=e.result,this._error=e.error):(this._jsonrpc=e.jsonrpc,this._id=e.id,this._result=void 0,this._error=void 0)}applyError(e){return this._error=e,this}applyResult(e){return this._result=e,this}get hasError(){return this._error?.code===dn.DpopInvalidated&&bt(),typeof this._error<"u"&&this._error!==null}get hasResult(){return typeof this._result<"u"}get payload(){return{jsonrpc:this._jsonrpc,id:this._id,result:this._result,error:this._error}}};import{UserEventsEmit as hn,UserEventsOnReceived as En}from"@magic-sdk/types";var Nt=sr(Ct()),De=class extends Nt.default{};function ge(){let r=new De;return{emitter:r,createChainingEmitterMethod:(s,n)=>(...o)=>(r[s].apply(r,o),n),createBoundEmitterMethod:s=>(...n)=>r[s].apply(r,n)}}var At=Symbol("isPromiEvent");function $t(r){return!!r[At]}function b(r){let e=qe(r),{createBoundEmitterMethod:t,createChainingEmitterMethod:s}=ge(),n=Symbol("Promise.then"),o=Symbol("Promise.catch"),i=Symbol("Promise.finally"),a=(l,u)=>(...P)=>{let w=u[l].apply(u,P);return c(w)},c=l=>Object.assign(l,{[At]:!0,[n]:l[n]||l.then,[o]:l[o]||l.catch,[i]:l[i]||l.finally,then:a(n,l),catch:a(o,l),finally:a(i,l),on:s("on",l),once:s("once",l),addListener:s("addListener",l),off:s("off",l),removeListener:s("removeListener",l),removeAllListeners:s("removeAllListeners",l),emit:t("emit"),eventNames:t("eventNames"),listeners:t("listeners"),listenerCount:t("listenerCount")}),d=c(e.then(l=>(d.emit("done",l),d.emit("settled"),l),l=>{throw d.emit("error",l),d.emit("settled"),l}));return d.on(En.ClosedByUser,()=>{d.emit(hn.ClosedByUser)}),d}function qe(r){return new Promise((e,t)=>{let s=r(e,t);Promise.resolve(s).catch(t)})}var f=class{constructor(e){this.sdk=e}get overlay(){return this.sdk.overlay}request(e){if(this.sdk.thirdPartyWallets.isConnected&&!Rn.includes(e.method))return b((i,a)=>{this.sdk.thirdPartyWallets.requestOverride(e).then(i).catch(a)});let t=this.overlay.post(fn.MAGIC_HANDLE_REQUEST,F(e)),s=b((o,i)=>{t.then(a=>{if(n(),a.hasError)i(new U(a.payload.error));else if(a.hasResult)o(a.payload.result);else throw mt()}).catch(a=>{n(),i(a)})}),n=this.overlay.on(gn.MAGIC_HANDLE_EVENT,o=>{let{response:i}=o.data;if(i.id===e.id&&i.result?.event){let{event:a,params:c=[]}=i.result;s.emit(a,...c)}});return s}createIntermediaryEvent(e,t){return n=>{let o=p(yn.IntermediaryEvent,[{payloadId:t,eventType:e,args:n}]);this.request(o)}}};function Lt(r,e){let[t]=r.split(".").map(Number);return t>=e}var vn={"magic-sdk":"v18.0.0","@magic-sdk/react-native":"v14.0.0","@magic-sdk/react-native-bare":"v19.0.0","@magic-sdk/react-native-expo":"v19.0.0"},Re=class extends f{loginWithMagicLink(e){let t=m.sdkName==="@magic-sdk/react-native"||m.sdkName==="@magic-sdk/react-native-bare"||m.sdkName==="@magic-sdk/react-native-expo";if(t&&Lt(m.version,19))throw new Error("loginWithMagicLink() is deprecated for this package, please utilize a passcode method like loginWithSMS or loginWithEmailOTP instead.");t&&Rt({method:"auth.loginWithMagicLink()",removalVersions:vn,useInstead:"auth.loginWithEmailOTP()"}).log();let{email:s,showUI:n=!0,redirectURI:o,overrides:i,lifespan:a}=e,c=p(this.sdk.testMode?x.LoginWithMagicLinkTestMode:x.LoginWithMagicLink,[{email:s,showUI:n,redirectURI:o,overrides:i,lifespan:a}]);return this.request(c)}loginWithSMS(e){let{phoneNumber:t,showUI:s=!0,lifespan:n}=e,o=p(this.sdk.testMode?x.LoginWithSmsTestMode:x.LoginWithSms,[{phoneNumber:t,showUI:s,lifespan:n}]),i=this.request(o);return!s&&i&&(i.on(ye.VerifySmsOtp,a=>{this.createIntermediaryEvent(ye.VerifySmsOtp,o.id)(a)}),i.on(ye.Cancel,()=>{this.createIntermediaryEvent(ye.Cancel,o.id)()})),i}loginWithEmailOTP(e){let{email:t,showUI:s,deviceCheckUI:n,overrides:o,lifespan:i}=e,a=p(this.sdk.testMode?x.LoginWithEmailOTPTestMode:x.LoginWithEmailOTP,[{email:t,showUI:s,deviceCheckUI:n,overrides:o,lifespan:i}]),c=this.request(a);return!n&&c&&c.on(Ot.Retry,()=>{this.createIntermediaryEvent(Ot.Retry,a.id)()}),!s&&c&&(c.on(C.VerifyEmailOtp,d=>{this.createIntermediaryEvent(C.VerifyEmailOtp,a.id)(d)}),c.on(C.VerifyMFACode,d=>{this.createIntermediaryEvent(C.VerifyMFACode,a.id)(d)}),c.on(C.LostDevice,()=>{this.createIntermediaryEvent(C.LostDevice,a.id)()}),c.on(C.VerifyRecoveryCode,d=>{this.createIntermediaryEvent(C.VerifyRecoveryCode,a.id)(d)}),c.on(C.Cancel,()=>{this.createIntermediaryEvent(C.Cancel,a.id)()})),c}loginWithCredential(e){let{credentialOrQueryString:t,lifespan:s}=e||{},n=t??"";if(!t&&m.platform==="web"){n=window.location.search;let i=window.location.origin+window.location.pathname;window.history.replaceState(null,"",i)}let o=p(this.sdk.testMode?x.LoginWithCredentialTestMode:x.LoginWithCredential,[n,s]);return this.request(o)}setAuthorizationToken(e){let t=p(x.SetAuthorizationToken,[{jwt:e}]);return this.request(t)}updateEmailWithUI(e){let{email:t,showUI:s=!0}=e,n=p(this.sdk.testMode?x.UpdateEmailTestMode:x.UpdateEmail,[{email:t,showUI:s}]),o=this.request(n);return s||(o.on(_.Retry,()=>{this.createIntermediaryEvent(_.Retry,n.id)()}),o.on(_.Cancel,()=>{this.createIntermediaryEvent(_.Cancel,n.id)()}),o.on(_.VerifyEmailOtp,i=>{this.createIntermediaryEvent(_.VerifyEmailOtp,n.id)(i)}),o.on(_.VerifyMFACode,i=>{this.createIntermediaryEvent(_.VerifyMFACode,n.id)(i)}),o.on(j.RetryWithNewEmail,i=>{this.createIntermediaryEvent(j.RetryWithNewEmail,n.id)(i)}),o.on(j.Cancel,()=>{this.createIntermediaryEvent(j.Cancel,n.id)()}),o.on(j.VerifyEmailOtp,i=>{this.createIntermediaryEvent(j.VerifyEmailOtp,n.id)(i)})),o}};import{MagicPayloadMethod as g,EnableMFAEventEmit as Te,DisableMFAEventEmit as V,RecencyCheckEventEmit as Ut,RecoveryFactorEventEmit as k,RecoverAccountEventEmit as D,UpdateEmailEventEmit as B}from"@magic-sdk/types";var Ue="ds",Fe="ek",We="iv",Je="AES-GCM",Tn=256;async function ve(){let r=[];await Oe((e,t,s)=>{t.startsWith(`${Ue}_`)&&r.push(t)});for(let e of r)await A(e)}function _t(r){let e="",t=new Uint8Array(r),s=t.byteLength;for(let n=0;n<s;n++)e+=String.fromCharCode(t[n]);return window.btoa(e)}function kt(r){let e=window.atob(r),t=e.length,s=new Uint8Array(t);for(let n=0;n<t;n++)s[n]=e.charCodeAt(n);return s.buffer}async function In(){if(!ne()){console.info("webcrypto is not supported");return}let{crypto:r}=window,e=await R(We);return e||r.getRandomValues(new Uint8Array(12))}async function bn(){if(!ne()){console.info("webcrypto is not supported");return}let{subtle:r}=window.crypto,e=await R(Fe);return e||await r.generateKey({name:Je,length:Tn},!1,["encrypt","decrypt"])}async function Dt(r,e){let t=await In(),s=await bn();if(!t||!s||!r)return;let n=kt(r),{subtle:o}=window.crypto,i=await o.encrypt({name:Je,iv:t},s,n),a=_t(i);await S(`${Ue}_${e}`,a),await S(Fe,s),await S(We,t)}async function qt(r){let e=await R(`${Ue}_${r}`),t=await R(We),s=await R(Fe);if(!t||!e||!s||!ne())return;let{subtle:n}=window.crypto,o=await n.decrypt({name:Je,iv:t},s,kt(e));return _t(o)}function Ge(r,e){return e?new URL(r,e):new URL(r)}var Ie=class extends f{getIdToken(e){let t=p(this.sdk.testMode?g.GetIdTokenTestMode:g.GetIdToken,[e]);return this.request(t)}generateIdToken(e){let t=p(this.sdk.testMode?g.GenerateIdTokenTestMode:g.GenerateIdToken,[e]);return this.request(t)}getInfo(){let e=p(g.GetInfo,[]);return this.request(e)}isLoggedIn(){return b(async(e,t)=>{try{let s=!1;this.sdk.useStorageCache&&(s=await R(this.localForageIsLoggedInKey)==="true",s&&e(!0));let n=p(this.sdk.testMode?g.IsLoggedInTestMode:g.IsLoggedIn),o=await this.request(n);this.sdk.useStorageCache&&(o?S(this.localForageIsLoggedInKey,!0):A(this.localForageIsLoggedInKey),s&&!o&&this.emitUserLoggedOut(!0)),e(o)}catch(s){t(s)}})}logout(){return A(this.localForageIsLoggedInKey),ve(),b(async(e,t)=>{try{let s=p(this.sdk.testMode?g.LogoutTestMode:g.Logout),n=await this.request(s);this.sdk.useStorageCache&&this.emitUserLoggedOut(n),e(n)}catch(s){t(s)}})}requestInfoWithUI(e){let t=p(g.RequestUserInfoWithUI,e?[e]:[]);return this.request(t)}showSettings(e){let{showUI:t=!0}=e||{},s=p(this.sdk.testMode?g.UserSettingsTestMode:g.UserSettings,[e]),n=this.request(s);return!t&&n&&(n.on(k.SendNewPhoneNumber,o=>{this.createIntermediaryEvent(k.SendNewPhoneNumber,s.id)(o)}),n.on(k.SendOtpCode,o=>{this.createIntermediaryEvent(k.SendOtpCode,s.id)(o)}),n.on(k.StartEditPhoneNumber,()=>{this.createIntermediaryEvent(k.StartEditPhoneNumber,s.id)()}),n.on(k.Cancel,()=>{this.createIntermediaryEvent(k.Cancel,s.id)()}),n.on(Ut.VerifyEmailOtp,o=>{this.createIntermediaryEvent(Ut.VerifyEmailOtp,s.id)(o)})),n}recoverAccount(e){let{email:t,showUI:s}=e,n=p(this.sdk.testMode?g.RecoverAccountTestMode:g.RecoverAccount,[{email:t,showUI:s}]),o=this.request(n);return!s&&o&&(o.on(D.Cancel,()=>{this.createIntermediaryEvent(D.Cancel,n.id)()}),o.on(D.ResendSms,()=>{this.createIntermediaryEvent(D.ResendSms,n.id)()}),o.on(D.VerifyOtp,i=>{this.createIntermediaryEvent(D.VerifyOtp,n.id)(i)}),o.on(D.UpdateEmail,i=>{this.createIntermediaryEvent(D.UpdateEmail,n.id)(i)}),o.on(B.Cancel,()=>{this.createIntermediaryEvent(B.Cancel,n.id)()}),o.on(B.RetryWithNewEmail,i=>{this.createIntermediaryEvent(B.RetryWithNewEmail,n.id)(i)}),o.on(B.VerifyEmailOtp,i=>{this.createIntermediaryEvent(B.VerifyEmailOtp,n.id)(i)})),o}revealPrivateKey(){let e=p(g.RevealPK);return this.request(e)}onUserLoggedOut(e){this.userLoggedOutCallbacks.push(e)}enableMFA(e){let{showUI:t=!0}=e,s=p(g.EnableMFA,[{showUI:t}]),n=this.request(s);return!t&&n&&(n.on(Te.VerifyMFACode,o=>{this.createIntermediaryEvent(Te.VerifyMFACode,s.id)(o)}),n.on(Te.Cancel,()=>{this.createIntermediaryEvent(Te.Cancel,s.id)()})),n}disableMFA(e){let{showUI:t=!0}=e,s=p(g.DisableMFA,[{showUI:t}]),n=this.request(s);return!t&&n&&(n.on(V.VerifyMFACode,o=>{this.createIntermediaryEvent(V.VerifyMFACode,s.id)(o)}),n.on(V.LostDevice,o=>{this.createIntermediaryEvent(V.LostDevice,s.id)(o)}),n.on(V.Cancel,()=>{this.createIntermediaryEvent(V.Cancel,s.id)()})),n}emitUserLoggedOut(e){this.userLoggedOutCallbacks.forEach(t=>{t(e)})}localForageIsLoggedInKey="magic_auth_is_logged_in";userLoggedOutCallbacks=[]};import{MagicPayloadMethod as q}from"@magic-sdk/types";var be=class extends f{connectWithUI(e){let t=b(async(s,n)=>{try{let o=p(q.Login,[{enabledWallets:this.sdk.thirdPartyWallets.enabledWallets,...e}]),i=this.request(o);this.sdk.thirdPartyWallets.eventListeners.forEach(({event:c,callback:d})=>{i.on(c,()=>d(o.id))}),i.on("id-token-created",c=>{t.emit("id-token-created",c)});let a=await i;a.error&&n(a),s(a)}catch(o){n(o)}});return t}showUI(e){return this.request(p(q.ShowUI,[e]))}showAddress(){return this.request(p(q.ShowAddress))}showSendTokensUI(){return this.request(p(q.ShowSendTokensUI))}showOnRamp(){return this.request(p(q.ShowOnRamp))}showNFTs(){return this.request(p(q.ShowNFTs))}showBalances(){return this.request(p(q.ShowBalances))}sendGaslessTransaction(e,t){return this.request(p(q.SendGaslessTransaction,[e,t]))}};import{LocalStorageKeys as W,MagicPayloadMethod as Pe}from"@magic-sdk/types";var we=class extends f{eventListeners=[];enabledWallets={};isConnected=!1;resetThirdPartyWalletState(){localStorage.removeItem(W.PROVIDER),localStorage.removeItem(W.ADDRESS),localStorage.removeItem(W.CHAIN_ID),this.isConnected=!1}requestOverride(e){if(e.method===Pe.Login)return this.resetThirdPartyWalletState(),super.request(e);if(e.method===Pe.GetInfo)return this.getInfo(e);if(e.method===Pe.IsLoggedIn)return this.isLoggedIn(e);if(e.method===Pe.Logout)return this.logout(e);switch(localStorage.getItem(W.PROVIDER)){case"web3modal":return this.web3modalRequest(e);default:return this.resetThirdPartyWalletState(),super.request(e)}}isLoggedIn(e){switch(localStorage.getItem(W.PROVIDER)){case"web3modal":return this.web3modalIsLoggedIn();default:return this.resetThirdPartyWalletState(),super.request(e)}}getInfo(e){switch(localStorage.getItem(W.PROVIDER)){case"web3modal":return this.web3modalGetInfo();default:return this.resetThirdPartyWalletState(),super.request(e)}}logout(e){let t=localStorage.getItem(W.PROVIDER);switch(this.resetThirdPartyWalletState(),t){case"web3modal":return this.web3modalLogout();default:return super.request(e)}}web3modalRequest(e){return b((t,s)=>{this.sdk.web3modal.modal.getWalletProvider().request(e).then(t).catch(s)})}web3modalIsLoggedIn(){return b(e=>{let t=this.sdk.web3modal.modal.getStatus();if(t==="connected"&&e(!0),t==="disconnected"&&(this.resetThirdPartyWalletState(),e(!1)),t==="reconnecting"){let s=this.sdk.web3modal.modal.subscribeProvider(({status:n})=>{n==="connected"&&(s(),e(!0)),n==="disconnected"&&(s(),this.resetThirdPartyWalletState(),e(!1))})}})}formatWeb3modalGetInfoResponse(){let e=this.sdk.web3modal.modal.getWalletInfo()?.name,t=this.sdk.web3modal.modal.getAddress();return{publicAddress:t,email:null,issuer:`did:ethr:${t}`,phoneNumber:null,isMfaEnabled:!1,recoveryFactors:[],walletType:e||"web3modal",firstLoginAt:null}}web3modalGetInfo(){return b((e,t)=>{let s=this.sdk.web3modal.modal.getStatus();if(s==="connected"&&e(this.formatWeb3modalGetInfoResponse()),s==="disconnected"&&(this.resetThirdPartyWalletState(),t("Magic RPC Error: [-32603] Internal error: User denied account access.")),s==="reconnecting"){let n=this.sdk.web3modal.modal.subscribeProvider(({status:o})=>{o==="connected"&&(n(),e(this.formatWeb3modalGetInfoResponse())),o==="disconnected"&&(n(),this.resetThirdPartyWalletState(),t("Magic RPC Error: [-32603] Internal error: User denied account access."))})}})}web3modalLogout(){return b(async e=>{try{await this.sdk.web3modal.modal.disconnect()}catch(t){console.error(t)}e(!0)})}};import{MagicOutgoingWindowMessage as Ft,MagicPayloadMethod as Pn}from"@magic-sdk/types";var{createBoundEmitterMethod:Se,createChainingEmitterMethod:H}=ge(),xe=class extends f{isMagic=!0;sendAsync(e,t){if(!t)throw ft({procedure:"Magic.rpcProvider.sendAsync",argument:1,expected:"function",received:t===null?"null":typeof t});if(Array.isArray(e))this.overlay.post(Ft.MAGIC_HANDLE_REQUEST,e.map(s=>{let n=F(s);return this.prefixPayloadMethodForTestMode(n),n})).then(s=>{t(null,s.map(n=>({...n.payload,error:n.hasError?new U(n.payload.error):null})))});else{let s=F(e);this.prefixPayloadMethodForTestMode(s),this.overlay.post(Ft.MAGIC_HANDLE_REQUEST,s).then(n=>{t(n.hasError?new U(n.payload.error):null,n.payload)})}}send(e,t){if(typeof e=="string"){let n=p(e,Array.isArray(t)?t:[]);return this.request(n)}if(Array.isArray(e)||t){this.sendAsync(e,t);return}let s=gt();return s.log(),new K(e).applyError({code:-32603,message:s.rawMessage}).payload}enable(){let e=p(Pn.Login);return this.request(e)}request(e){return this.prefixPayloadMethodForTestMode(e),super.request(e)}prefixPayloadMethodForTestMode(e){let t="testMode/eth/";this.sdk.testMode&&(e.method=`${t}${e.method}`)}on=H("on",this);once=H("once",this);addListener=H("addListener",this);off=H("off",this);removeListener=H("removeListener",this);removeAllListeners=H("removeAllListeners",this);emit=Se("emit");eventNames=Se("eventNames");listeners=Se("listeners");listenerCount=Se("listenerCount")};var Wt=["request","overlay","sdk"];function wn(r){let e=Object.getPrototypeOf(r),t=[e];for(;e!==f.prototype;)e=Object.getPrototypeOf(e),t.push(e);return t}var Ke=class extends f{compat;__sdk_access_field_descriptors__=new Map;__is_initialized__=!1;utils={createPromiEvent:b,isPromiEvent:$t,encodeJSON:le,decodeJSON:at,createJsonRpcRequestPayload:p,standardizeJsonRpcRequestPayload:F,storage:he};constructor(){super(void 0);let e=[this,...wn(this)];Wt.forEach(t=>{let s=e.map(a=>Object.getOwnPropertyDescriptor(a,t)),n=s.findIndex(a=>!!a),o=n>0,i=s[n];i&&(this.__sdk_access_field_descriptors__.set(t,{descriptor:i,isPrototypeField:o}),Object.defineProperty(this,t,{configurable:!0,get:()=>{throw ht(t)}}))})}init(e){this.__is_initialized__||(Wt.forEach(t=>{if(this.__sdk_access_field_descriptors__.has(t)){let{descriptor:s,isPrototypeField:n}=this.__sdk_access_field_descriptors__.get(t);n?delete this[t]:Object.defineProperty(this,t,s)}}),this.sdk=e,this.__is_initialized__=!0)}createDeprecationWarning(e){let{method:t,removalVersion:s,useInstead:n}=e,o=n?` Use \`${n}\` instead.`:"",i=`\`${t}\` will be removed from this Extension in version \`${s}\`.${o}`;return new re(this,"DEPRECATION_NOTICE",i)}createWarning(e,t){return new re(this,e,t)}createError(e,t,s){return new ue(this,e,t,s)}},je=class extends Ke{},X=class{static Internal=je};import{MagicPayloadMethod as Ve,NftCheckoutIntermediaryEvents as Me}from"@magic-sdk/types";var Ce=class extends f{purchase(e){let t=p(Ve.NFTPurchase,[e]);return this.request(t)}checkout(e){let t=this.sdk.thirdPartyWallets.isConnected,s=p(Ve.NFTCheckout,[{...e,walletProvider:t?"web3modal":"magic"}]),n=this.request(s);return t&&(n.on(Me.Initiated,async o=>{try{let i=await this.request({method:"eth_sendTransaction",params:[o]});this.createIntermediaryEvent(Me.Success,s.id)(i)}catch{this.createIntermediaryEvent(Me.Failure,s.id)()}}),n.on(Me.Disconnect,()=>{this.sdk.thirdPartyWallets.resetThirdPartyWalletState(),n.emit("disconnect")})),n}transfer(e){let t=p(Ve.NFTTransfer,[e]);return this.request(t)}};function Jt(r){return r.compat&&r.compat[m.sdkName]!=null?typeof r.compat[m.sdkName]=="string"?ot(it(m.version),r.compat[m.sdkName]):!!r.compat[m.sdkName]:!0}function Sn(r,e,t){return!e&&!t?`${r}_eth_mainnet`:t?`${r}_${JSON.stringify(t)}`:e?typeof e=="string"?`${r}_eth_${e}`:`${r}_${e.rpcUrl}_${e.chainId}_${e.chainType}`:`${r}_unknown`}function xn(r){let e=r?.extensions??[],t={},s=[];if(Array.isArray(e)?e.forEach(n=>{Jt(n)?(n.init(this),n.name&&(this[n.name]=n),n instanceof X.Internal&&(te(n.config)||(t[n.name]=n.config))):s.push(n)}):Object.keys(e).forEach(n=>{if(Jt(e[n])){e[n].init(this);let o=e[n];this[n]=o,o instanceof X.Internal&&(te(o.config)||(t[e[n].name]=o.config))}else s.push(e[n])}),s.length)throw Et(s);return t}var Be=class r{constructor(e,t){this.apiKey=e;if(!e)throw ut();m.platform==="react-native"&&t?.endpoint&&yt().log();let{defaultEndpoint:s,version:n}=m;this.testMode=!!t?.testMode,this.useStorageCache=!!t?.useStorageCache,this.endpoint=Ge(t?.endpoint??s).origin,this.auth=new Re(this),this.user=new Ie(this),this.wallet=new be(this),this.nft=new Ce(this),this.thirdPartyWallets=new we(this),this.rpcProvider=new xe(this);let o=xn.call(this,t);this.parameters=le({API_KEY:this.apiKey,DOMAIN_ORIGIN:window.location?window.location.origin:"",ETH_NETWORK:t?.network,host:Ge(this.endpoint).host,sdk:dt[m.sdkName],version:n,ext:te(o)?void 0:o,locale:t?.locale||"en_US",authConfig:t?.authConfig?{...t.authConfig}:void 0,...m.bundleId?{bundleId:m.bundleId}:{},meta:t?.meta}),this.networkHash=Sn(this.apiKey,t?.network,te(o)?void 0:o),t?.deferPreload||this.preload()}static __overlays__=new Map;endpoint;parameters;networkHash;testMode;useStorageCache;auth;user;wallet;nft;thirdPartyWallets;rpcProvider;get overlay(){if(!r.__overlays__.has(this.parameters)){let e=new m.ViewController(this.endpoint,this.parameters,this.networkHash);e.init(),r.__overlays__.set(this.parameters,e)}return r.__overlays__.get(this.parameters)}async preload(){await this.overlay.waitForReady()}};import{MagicIncomingWindowMessage as oe,MagicOutgoingWindowMessage as Cn,SDKWarningCode as Nn}from"@magic-sdk/types";function Mn(r,e){return e&&Array.isArray(r)?r.find(t=>t.id===e):r}function Gt(r,e){let t=e.data.response?.id,s=Mn(r,t);if(t&&s){let n=new K(s).applyResult(e.data.response.result).applyError(e.data.response.error);return{id:t,response:n}}return{}}async function Kt(r,e,t){let s=await R("rt"),n;if(m.platform==="web")try{n=await R("jwt")??await Pt()}catch(a){console.error("webcrypto error",a)}let o={msgType:r,payload:e};n&&(o.jwt=n),n&&s&&(o.rt=s);let i=await qt(t);return i&&(o.deviceShare=i),o}async function jt(r){r.data.rt&&await S("rt",r.data.rt)}function Vt(r,e){let t=null;return function(...s){t&&clearTimeout(t),t=setTimeout(()=>{r(...s)},e)}}var An=1e3,Ht=60*An,Bt=5*Ht,$n=60*Ht,He=class{constructor(e,t,s){this.endpoint=e;this.parameters=t;this.networkHash=s;this.listen()}isReadyForRequest=!1;messageHandlers=new Set;isConnectedToInternet=!0;lastPongTime=null;heartbeatIntervalTimer=null;heartbeatDebounce=Vt(()=>{this.endpoint==="https://auth.magic.link/"&&this.heartBeatCheck()},$n);async post(e,t){return qe(async(s,n)=>{if(!this.isConnectedToInternet){let l=pt();n(l)}await this.checkRelayerExistsInDOM()||(this.isReadyForRequest=!1,await this.reloadRelayer()),this.isReadyForRequest||await this.waitForReady();let o=[],i=Array.isArray(t)?t.map(l=>l.id):[],a=await Kt(`${e}-${this.parameters}`,t,this.networkHash);await this._post(a);let c=l=>u=>{let{id:P,response:w}=Gt(t,u);if(jt(u),w?.payload.error?.message==="User denied account access.")ve();else if(u.data.deviceShare){let{deviceShare:Xt}=u.data;Dt(Xt,this.networkHash)}P&&w&&Array.isArray(t)&&i.includes(P)?(o.push(w),o.length===t.length&&(l(),s(o))):P&&w&&!Array.isArray(t)&&P===t.id&&(l(),s(w))},d=this.on(oe.MAGIC_HANDLE_RESPONSE,c(()=>d()))})}on(e,t){let s=t.bind(window),n=o=>{o.data.msgType===`${e}-${this.parameters}`&&s(o)};return this.messageHandlers.add(n),()=>this.messageHandlers.delete(n)}waitForReady(){return new Promise(e=>{let t=this.on(oe.MAGIC_OVERLAY_READY,()=>{this.isReadyForRequest=!0,e(),t()})})}listen(){this.on(oe.MAGIC_HIDE_OVERLAY,()=>{this.hideOverlay()}),this.on(oe.MAGIC_SHOW_OVERLAY,()=>{this.showOverlay()}),this.on(oe.MAGIC_SEND_PRODUCT_ANNOUNCEMENT,e=>{e.data.response.result.product_announcement&&new L(Nn.ProductAnnouncement,e.data.response.result.product_announcement).log()})}heartBeatCheck(){let e=!0,t=async()=>{let s={msgType:`${Cn.MAGIC_PING}-${this.parameters}`,payload:[]};await this._post(s)};this.heartbeatIntervalTimer=setInterval(async()=>{if(this.lastPongTime){if(Date.now()-this.lastPongTime>Bt*2){this.reloadRelayer(),e=!0;return}}else if(!e){this.reloadRelayer(),e=!0;return}await t(),e=!1},Bt)}stopHeartBeat(){this.heartbeatDebounce(),this.lastPongTime=null,this.heartbeatIntervalTimer&&(clearInterval(this.heartbeatIntervalTimer),this.heartbeatIntervalTimer=null)}};export{X as Extension,ue as MagicExtensionError,re as MagicExtensionWarning,U as MagicRPCError,$ as MagicSDKError,L as MagicSDKWarning,Be as SDKBase,_e as STORE_KEY_PRIVATE_KEY,Ee as STORE_KEY_PUBLIC_JWK,De as TypedEmitter,He as ViewController,bt as clearKeys,Rt as createDeprecationWarning,Bn as createDuplicateIframeWarning,ht as createExtensionNotInitializedError,Et as createIncompatibleExtensionsError,ft as createInvalidArgumentError,Pt as createJwt,mt as createMalformedResponseError,ut as createMissingApiKeyError,pt as createModalNotReadyError,b as createPromiEvent,qe as createPromise,yt as createReactNativeEndpointConfigurationWarning,Hr as createSDK,gt as createSynchronousWeb3MethodWarning,ge as createTypedEmitter,Ge as createURL,at as decodeJSON,le as encodeJSON,Le as getPayloadId,te as isEmpty,lt as isJsonRpcErrorCode,Un as isJsonRpcRequestPayload,ct as isJsonRpcResponsePayload,Fn as isMagicPayloadMethod,Lt as isMajorVersionAtLeast,$t as isPromiEvent,ne as isWebCryptoSupported,he as storage,vt as uuid};
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __commonJS = (cb, mod) => function __require() {
8
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9
+ };
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key2 of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key2) && key2 !== except)
18
+ __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
+ mod
29
+ ));
30
+
31
+ // node_modules/eventemitter3/index.js
32
+ var require_eventemitter3 = __commonJS({
33
+ "node_modules/eventemitter3/index.js"(exports, module) {
34
+ "use strict";
35
+ var has = Object.prototype.hasOwnProperty;
36
+ var prefix = "~";
37
+ function Events() {
38
+ }
39
+ if (Object.create) {
40
+ Events.prototype = /* @__PURE__ */ Object.create(null);
41
+ if (!new Events().__proto__) prefix = false;
42
+ }
43
+ function EE(fn, context, once) {
44
+ this.fn = fn;
45
+ this.context = context;
46
+ this.once = once || false;
47
+ }
48
+ function addListener(emitter, event, fn, context, once) {
49
+ if (typeof fn !== "function") {
50
+ throw new TypeError("The listener must be a function");
51
+ }
52
+ var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;
53
+ if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
54
+ else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
55
+ else emitter._events[evt] = [emitter._events[evt], listener];
56
+ return emitter;
57
+ }
58
+ function clearEvent(emitter, evt) {
59
+ if (--emitter._eventsCount === 0) emitter._events = new Events();
60
+ else delete emitter._events[evt];
61
+ }
62
+ function EventEmitter2() {
63
+ this._events = new Events();
64
+ this._eventsCount = 0;
65
+ }
66
+ EventEmitter2.prototype.eventNames = function eventNames() {
67
+ var names = [], events, name;
68
+ if (this._eventsCount === 0) return names;
69
+ for (name in events = this._events) {
70
+ if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
71
+ }
72
+ if (Object.getOwnPropertySymbols) {
73
+ return names.concat(Object.getOwnPropertySymbols(events));
74
+ }
75
+ return names;
76
+ };
77
+ EventEmitter2.prototype.listeners = function listeners(event) {
78
+ var evt = prefix ? prefix + event : event, handlers = this._events[evt];
79
+ if (!handlers) return [];
80
+ if (handlers.fn) return [handlers.fn];
81
+ for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
82
+ ee[i] = handlers[i].fn;
83
+ }
84
+ return ee;
85
+ };
86
+ EventEmitter2.prototype.listenerCount = function listenerCount(event) {
87
+ var evt = prefix ? prefix + event : event, listeners = this._events[evt];
88
+ if (!listeners) return 0;
89
+ if (listeners.fn) return 1;
90
+ return listeners.length;
91
+ };
92
+ EventEmitter2.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
93
+ var evt = prefix ? prefix + event : event;
94
+ if (!this._events[evt]) return false;
95
+ var listeners = this._events[evt], len = arguments.length, args, i;
96
+ if (listeners.fn) {
97
+ if (listeners.once) this.removeListener(event, listeners.fn, void 0, true);
98
+ switch (len) {
99
+ case 1:
100
+ return listeners.fn.call(listeners.context), true;
101
+ case 2:
102
+ return listeners.fn.call(listeners.context, a1), true;
103
+ case 3:
104
+ return listeners.fn.call(listeners.context, a1, a2), true;
105
+ case 4:
106
+ return listeners.fn.call(listeners.context, a1, a2, a3), true;
107
+ case 5:
108
+ return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
109
+ case 6:
110
+ return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
111
+ }
112
+ for (i = 1, args = new Array(len - 1); i < len; i++) {
113
+ args[i - 1] = arguments[i];
114
+ }
115
+ listeners.fn.apply(listeners.context, args);
116
+ } else {
117
+ var length2 = listeners.length, j;
118
+ for (i = 0; i < length2; i++) {
119
+ if (listeners[i].once) this.removeListener(event, listeners[i].fn, void 0, true);
120
+ switch (len) {
121
+ case 1:
122
+ listeners[i].fn.call(listeners[i].context);
123
+ break;
124
+ case 2:
125
+ listeners[i].fn.call(listeners[i].context, a1);
126
+ break;
127
+ case 3:
128
+ listeners[i].fn.call(listeners[i].context, a1, a2);
129
+ break;
130
+ case 4:
131
+ listeners[i].fn.call(listeners[i].context, a1, a2, a3);
132
+ break;
133
+ default:
134
+ if (!args) for (j = 1, args = new Array(len - 1); j < len; j++) {
135
+ args[j - 1] = arguments[j];
136
+ }
137
+ listeners[i].fn.apply(listeners[i].context, args);
138
+ }
139
+ }
140
+ }
141
+ return true;
142
+ };
143
+ EventEmitter2.prototype.on = function on(event, fn, context) {
144
+ return addListener(this, event, fn, context, false);
145
+ };
146
+ EventEmitter2.prototype.once = function once(event, fn, context) {
147
+ return addListener(this, event, fn, context, true);
148
+ };
149
+ EventEmitter2.prototype.removeListener = function removeListener(event, fn, context, once) {
150
+ var evt = prefix ? prefix + event : event;
151
+ if (!this._events[evt]) return this;
152
+ if (!fn) {
153
+ clearEvent(this, evt);
154
+ return this;
155
+ }
156
+ var listeners = this._events[evt];
157
+ if (listeners.fn) {
158
+ if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
159
+ clearEvent(this, evt);
160
+ }
161
+ } else {
162
+ for (var i = 0, events = [], length2 = listeners.length; i < length2; i++) {
163
+ if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {
164
+ events.push(listeners[i]);
165
+ }
166
+ }
167
+ if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
168
+ else clearEvent(this, evt);
169
+ }
170
+ return this;
171
+ };
172
+ EventEmitter2.prototype.removeAllListeners = function removeAllListeners(event) {
173
+ var evt;
174
+ if (event) {
175
+ evt = prefix ? prefix + event : event;
176
+ if (this._events[evt]) clearEvent(this, evt);
177
+ } else {
178
+ this._events = new Events();
179
+ this._eventsCount = 0;
180
+ }
181
+ return this;
182
+ };
183
+ EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;
184
+ EventEmitter2.prototype.addListener = EventEmitter2.prototype.on;
185
+ EventEmitter2.prefixed = prefix;
186
+ EventEmitter2.EventEmitter = EventEmitter2;
187
+ if ("undefined" !== typeof module) {
188
+ module.exports = EventEmitter2;
189
+ }
190
+ }
191
+ });
192
+
193
+ // src/util/semver.js
194
+ function createCommonjsModule(e) {
195
+ const r = { exports: {} };
196
+ return e(r, r.exports), r.exports;
197
+ }
198
+ var MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER || 9007199254740991;
199
+ var constants = { SEMVER_SPEC_VERSION: "2.0.0", MAX_LENGTH: 256, MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1, MAX_SAFE_COMPONENT_LENGTH: 16 };
200
+ var debug = "object" == typeof process && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...e) => console.error("SEMVER", ...e) : () => {
201
+ };
202
+ var debug_1 = debug;
203
+ var re_1 = createCommonjsModule(function(e, r) {
204
+ const { MAX_SAFE_COMPONENT_LENGTH: t2 } = constants, s = (r = e.exports = {}).re = [], i = r.src = [], o = r.t = {};
205
+ let a = 0;
206
+ const n = (e2, r2, t3) => {
207
+ const n2 = a++;
208
+ debug_1(n2, r2), o[e2] = n2, i[n2] = r2, s[n2] = new RegExp(r2, t3 ? "g" : void 0);
209
+ };
210
+ n("NUMERICIDENTIFIER", "0|[1-9]\\d*"), n("NUMERICIDENTIFIERLOOSE", "[0-9]+"), n("NONNUMERICIDENTIFIER", "\\d*[a-zA-Z-][a-zA-Z0-9-]*"), n("MAINVERSION", `(${i[o.NUMERICIDENTIFIER]})\\.(${i[o.NUMERICIDENTIFIER]})\\.(${i[o.NUMERICIDENTIFIER]})`), n("MAINVERSIONLOOSE", `(${i[o.NUMERICIDENTIFIERLOOSE]})\\.(${i[o.NUMERICIDENTIFIERLOOSE]})\\.(${i[o.NUMERICIDENTIFIERLOOSE]})`), n("PRERELEASEIDENTIFIER", `(?:${i[o.NUMERICIDENTIFIER]}|${i[o.NONNUMERICIDENTIFIER]})`), n("PRERELEASEIDENTIFIERLOOSE", `(?:${i[o.NUMERICIDENTIFIERLOOSE]}|${i[o.NONNUMERICIDENTIFIER]})`), n("PRERELEASE", `(?:-(${i[o.PRERELEASEIDENTIFIER]}(?:\\.${i[o.PRERELEASEIDENTIFIER]})*))`), n("PRERELEASELOOSE", `(?:-?(${i[o.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${i[o.PRERELEASEIDENTIFIERLOOSE]})*))`), n("BUILDIDENTIFIER", "[0-9A-Za-z-]+"), n("BUILD", `(?:\\+(${i[o.BUILDIDENTIFIER]}(?:\\.${i[o.BUILDIDENTIFIER]})*))`), n("FULLPLAIN", `v?${i[o.MAINVERSION]}${i[o.PRERELEASE]}?${i[o.BUILD]}?`), n("FULL", `^${i[o.FULLPLAIN]}$`), n("LOOSEPLAIN", `[v=\\s]*${i[o.MAINVERSIONLOOSE]}${i[o.PRERELEASELOOSE]}?${i[o.BUILD]}?`), n("LOOSE", `^${i[o.LOOSEPLAIN]}$`), n("GTLT", "((?:<|>)?=?)"), n("XRANGEIDENTIFIERLOOSE", `${i[o.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`), n("XRANGEIDENTIFIER", `${i[o.NUMERICIDENTIFIER]}|x|X|\\*`), n("XRANGEPLAIN", `[v=\\s]*(${i[o.XRANGEIDENTIFIER]})(?:\\.(${i[o.XRANGEIDENTIFIER]})(?:\\.(${i[o.XRANGEIDENTIFIER]})(?:${i[o.PRERELEASE]})?${i[o.BUILD]}?)?)?`), n("XRANGEPLAINLOOSE", `[v=\\s]*(${i[o.XRANGEIDENTIFIERLOOSE]})(?:\\.(${i[o.XRANGEIDENTIFIERLOOSE]})(?:\\.(${i[o.XRANGEIDENTIFIERLOOSE]})(?:${i[o.PRERELEASELOOSE]})?${i[o.BUILD]}?)?)?`), n("XRANGE", `^${i[o.GTLT]}\\s*${i[o.XRANGEPLAIN]}$`), n("XRANGELOOSE", `^${i[o.GTLT]}\\s*${i[o.XRANGEPLAINLOOSE]}$`), n("COERCE", `(^|[^\\d])(\\d{1,${t2}})(?:\\.(\\d{1,${t2}}))?(?:\\.(\\d{1,${t2}}))?(?:$|[^\\d])`), n("COERCERTL", i[o.COERCE], true), n("LONETILDE", "(?:~>?)"), n("TILDETRIM", `(\\s*)${i[o.LONETILDE]}\\s+`, true), r.tildeTrimReplace = "$1~", n("TILDE", `^${i[o.LONETILDE]}${i[o.XRANGEPLAIN]}$`), n("TILDELOOSE", `^${i[o.LONETILDE]}${i[o.XRANGEPLAINLOOSE]}$`), n("LONECARET", "(?:\\^)"), n("CARETTRIM", `(\\s*)${i[o.LONECARET]}\\s+`, true), r.caretTrimReplace = "$1^", n("CARET", `^${i[o.LONECARET]}${i[o.XRANGEPLAIN]}$`), n("CARETLOOSE", `^${i[o.LONECARET]}${i[o.XRANGEPLAINLOOSE]}$`), n("COMPARATORLOOSE", `^${i[o.GTLT]}\\s*(${i[o.LOOSEPLAIN]})$|^$`), n("COMPARATOR", `^${i[o.GTLT]}\\s*(${i[o.FULLPLAIN]})$|^$`), n("COMPARATORTRIM", `(\\s*)${i[o.GTLT]}\\s*(${i[o.LOOSEPLAIN]}|${i[o.XRANGEPLAIN]})`, true), r.comparatorTrimReplace = "$1$2$3", n("HYPHENRANGE", `^\\s*(${i[o.XRANGEPLAIN]})\\s+-\\s+(${i[o.XRANGEPLAIN]})\\s*$`), n("HYPHENRANGELOOSE", `^\\s*(${i[o.XRANGEPLAINLOOSE]})\\s+-\\s+(${i[o.XRANGEPLAINLOOSE]})\\s*$`), n("STAR", "(<|>)?=?\\s*\\*"), n("GTE0", "^\\s*>=\\s*0.0.0\\s*$"), n("GTE0PRE", "^\\s*>=\\s*0.0.0-0\\s*$");
211
+ });
212
+ var numeric = /^[0-9]+$/;
213
+ var compareIdentifiers$1 = (e, r) => {
214
+ const t2 = numeric.test(e), s = numeric.test(r);
215
+ return t2 && s && (e = +e, r = +r), e === r ? 0 : t2 && !s ? -1 : s && !t2 ? 1 : e < r ? -1 : 1;
216
+ };
217
+ var rcompareIdentifiers = (e, r) => compareIdentifiers$1(r, e);
218
+ var identifiers = { compareIdentifiers: compareIdentifiers$1, rcompareIdentifiers };
219
+ var { MAX_LENGTH: MAX_LENGTH$1, MAX_SAFE_INTEGER } = constants;
220
+ var { re: re$4, t: t$4 } = re_1;
221
+ var { compareIdentifiers } = identifiers;
222
+ var SemVer = class _SemVer {
223
+ constructor(e, r) {
224
+ if (r && "object" == typeof r || (r = { loose: !!r, includePrerelease: false }), e instanceof _SemVer) {
225
+ if (e.loose === !!r.loose && e.includePrerelease === !!r.includePrerelease) return e;
226
+ e = e.version;
227
+ } else if ("string" != typeof e) throw new TypeError(`Invalid Version: ${e}`);
228
+ if (e.length > MAX_LENGTH$1) throw new TypeError(`version is longer than ${MAX_LENGTH$1} characters`);
229
+ debug_1("SemVer", e, r), this.options = r, this.loose = !!r.loose, this.includePrerelease = !!r.includePrerelease;
230
+ const t2 = e.trim().match(r.loose ? re$4[t$4.LOOSE] : re$4[t$4.FULL]);
231
+ if (!t2) throw new TypeError(`Invalid Version: ${e}`);
232
+ if (this.raw = e, this.major = +t2[1], this.minor = +t2[2], this.patch = +t2[3], this.major > MAX_SAFE_INTEGER || this.major < 0) throw new TypeError("Invalid major version");
233
+ if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) throw new TypeError("Invalid minor version");
234
+ if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) throw new TypeError("Invalid patch version");
235
+ t2[4] ? this.prerelease = t2[4].split(".").map((e2) => {
236
+ if (/^[0-9]+$/.test(e2)) {
237
+ const r2 = +e2;
238
+ if (r2 >= 0 && r2 < MAX_SAFE_INTEGER) return r2;
239
+ }
240
+ return e2;
241
+ }) : this.prerelease = [], this.build = t2[5] ? t2[5].split(".") : [], this.format();
242
+ }
243
+ format() {
244
+ return this.version = `${this.major}.${this.minor}.${this.patch}`, this.prerelease.length && (this.version += `-${this.prerelease.join(".")}`), this.version;
245
+ }
246
+ toString() {
247
+ return this.version;
248
+ }
249
+ compare(e) {
250
+ if (debug_1("SemVer.compare", this.version, this.options, e), !(e instanceof _SemVer)) {
251
+ if ("string" == typeof e && e === this.version) return 0;
252
+ e = new _SemVer(e, this.options);
253
+ }
254
+ return e.version === this.version ? 0 : this.compareMain(e) || this.comparePre(e);
255
+ }
256
+ compareMain(e) {
257
+ return e instanceof _SemVer || (e = new _SemVer(e, this.options)), compareIdentifiers(this.major, e.major) || compareIdentifiers(this.minor, e.minor) || compareIdentifiers(this.patch, e.patch);
258
+ }
259
+ comparePre(e) {
260
+ if (e instanceof _SemVer || (e = new _SemVer(e, this.options)), this.prerelease.length && !e.prerelease.length) return -1;
261
+ if (!this.prerelease.length && e.prerelease.length) return 1;
262
+ if (!this.prerelease.length && !e.prerelease.length) return 0;
263
+ let r = 0;
264
+ do {
265
+ const t2 = this.prerelease[r], s = e.prerelease[r];
266
+ if (debug_1("prerelease compare", r, t2, s), void 0 === t2 && void 0 === s) return 0;
267
+ if (void 0 === s) return 1;
268
+ if (void 0 === t2) return -1;
269
+ if (t2 !== s) return compareIdentifiers(t2, s);
270
+ } while (++r);
271
+ }
272
+ compareBuild(e) {
273
+ e instanceof _SemVer || (e = new _SemVer(e, this.options));
274
+ let r = 0;
275
+ do {
276
+ const t2 = this.build[r], s = e.build[r];
277
+ if (debug_1("prerelease compare", r, t2, s), void 0 === t2 && void 0 === s) return 0;
278
+ if (void 0 === s) return 1;
279
+ if (void 0 === t2) return -1;
280
+ if (t2 !== s) return compareIdentifiers(t2, s);
281
+ } while (++r);
282
+ }
283
+ inc(e, r) {
284
+ switch (e) {
285
+ case "premajor":
286
+ this.prerelease.length = 0, this.patch = 0, this.minor = 0, this.major++, this.inc("pre", r);
287
+ break;
288
+ case "preminor":
289
+ this.prerelease.length = 0, this.patch = 0, this.minor++, this.inc("pre", r);
290
+ break;
291
+ case "prepatch":
292
+ this.prerelease.length = 0, this.inc("patch", r), this.inc("pre", r);
293
+ break;
294
+ case "prerelease":
295
+ 0 === this.prerelease.length && this.inc("patch", r), this.inc("pre", r);
296
+ break;
297
+ case "major":
298
+ 0 === this.minor && 0 === this.patch && 0 !== this.prerelease.length || this.major++, this.minor = 0, this.patch = 0, this.prerelease = [];
299
+ break;
300
+ case "minor":
301
+ 0 === this.patch && 0 !== this.prerelease.length || this.minor++, this.patch = 0, this.prerelease = [];
302
+ break;
303
+ case "patch":
304
+ 0 === this.prerelease.length && this.patch++, this.prerelease = [];
305
+ break;
306
+ case "pre":
307
+ if (0 === this.prerelease.length) this.prerelease = [0];
308
+ else {
309
+ let e2 = this.prerelease.length;
310
+ for (; --e2 >= 0; ) "number" == typeof this.prerelease[e2] && (this.prerelease[e2]++, e2 = -2);
311
+ -1 === e2 && this.prerelease.push(0);
312
+ }
313
+ r && (this.prerelease[0] === r ? isNaN(this.prerelease[1]) && (this.prerelease = [r, 0]) : this.prerelease = [r, 0]);
314
+ break;
315
+ default:
316
+ throw new Error(`invalid increment argument: ${e}`);
317
+ }
318
+ return this.format(), this.raw = this.version, this;
319
+ }
320
+ };
321
+ var compare = (e, r, t2) => new SemVer(e, t2).compare(new SemVer(r, t2));
322
+ var compare_1 = compare;
323
+ var eq = (e, r, t2) => 0 === compare_1(e, r, t2);
324
+ var eq_1 = eq;
325
+ var neq = (e, r, t2) => 0 !== compare_1(e, r, t2);
326
+ var neq_1 = neq;
327
+ var gt = (e, r, t2) => compare_1(e, r, t2) > 0;
328
+ var gt_1 = gt;
329
+ var gte = (e, r, t2) => compare_1(e, r, t2) >= 0;
330
+ var gte_1 = gte;
331
+ var lt = (e, r, t2) => compare_1(e, r, t2) < 0;
332
+ var lt_1 = lt;
333
+ var lte = (e, r, t2) => compare_1(e, r, t2) <= 0;
334
+ var lte_1 = lte;
335
+ var cmp = (e, r, t2, s) => {
336
+ switch (r) {
337
+ case "===":
338
+ return "object" == typeof e && (e = e.version), "object" == typeof t2 && (t2 = t2.version), e === t2;
339
+ case "!==":
340
+ return "object" == typeof e && (e = e.version), "object" == typeof t2 && (t2 = t2.version), e !== t2;
341
+ case "":
342
+ case "=":
343
+ case "==":
344
+ return eq_1(e, t2, s);
345
+ case "!=":
346
+ return neq_1(e, t2, s);
347
+ case ">":
348
+ return gt_1(e, t2, s);
349
+ case ">=":
350
+ return gte_1(e, t2, s);
351
+ case "<":
352
+ return lt_1(e, t2, s);
353
+ case "<=":
354
+ return lte_1(e, t2, s);
355
+ default:
356
+ throw new TypeError(`Invalid operator: ${r}`);
357
+ }
358
+ };
359
+ var cmp_1 = cmp;
360
+ var ANY = Symbol("SemVer ANY");
361
+ var Comparator = class _Comparator {
362
+ static get ANY() {
363
+ return ANY;
364
+ }
365
+ constructor(e, r) {
366
+ if (r && "object" == typeof r || (r = { loose: !!r, includePrerelease: false }), e instanceof _Comparator) {
367
+ if (e.loose === !!r.loose) return e;
368
+ e = e.value;
369
+ }
370
+ debug_1("comparator", e, r), this.options = r, this.loose = !!r.loose, this.parse(e), this.semver === ANY ? this.value = "" : this.value = this.operator + this.semver.version, debug_1("comp", this);
371
+ }
372
+ parse(e) {
373
+ const r = this.options.loose ? re$3[t$3.COMPARATORLOOSE] : re$3[t$3.COMPARATOR], t2 = e.match(r);
374
+ if (!t2) throw new TypeError(`Invalid comparator: ${e}`);
375
+ this.operator = void 0 !== t2[1] ? t2[1] : "", "=" === this.operator && (this.operator = ""), t2[2] ? this.semver = new SemVer(t2[2], this.options.loose) : this.semver = ANY;
376
+ }
377
+ toString() {
378
+ return this.value;
379
+ }
380
+ test(e) {
381
+ if (debug_1("Comparator.test", e, this.options.loose), this.semver === ANY || e === ANY) return true;
382
+ if ("string" == typeof e) try {
383
+ e = new SemVer(e, this.options);
384
+ } catch (e2) {
385
+ return false;
386
+ }
387
+ return cmp_1(e, this.operator, this.semver, this.options);
388
+ }
389
+ intersects(e, r) {
390
+ if (!(e instanceof _Comparator)) throw new TypeError("a Comparator is required");
391
+ if (r && "object" == typeof r || (r = { loose: !!r, includePrerelease: false }), "" === this.operator) return "" === this.value || new Range(e.value, r).test(this.value);
392
+ if ("" === e.operator) return "" === e.value || new Range(this.value, r).test(e.semver);
393
+ const t2 = !(">=" !== this.operator && ">" !== this.operator || ">=" !== e.operator && ">" !== e.operator), s = !("<=" !== this.operator && "<" !== this.operator || "<=" !== e.operator && "<" !== e.operator), i = this.semver.version === e.semver.version, o = !(">=" !== this.operator && "<=" !== this.operator || ">=" !== e.operator && "<=" !== e.operator), a = cmp_1(this.semver, "<", e.semver, r) && (">=" === this.operator || ">" === this.operator) && ("<=" === e.operator || "<" === e.operator), n = cmp_1(this.semver, ">", e.semver, r) && ("<=" === this.operator || "<" === this.operator) && (">=" === e.operator || ">" === e.operator);
394
+ return t2 || s || i && o || a || n;
395
+ }
396
+ };
397
+ var { re: re$3, t: t$3 } = re_1;
398
+ var Range = class _Range {
399
+ constructor(e, r) {
400
+ if (r && "object" == typeof r || (r = { loose: !!r, includePrerelease: false }), e instanceof _Range) return e.loose === !!r.loose && e.includePrerelease === !!r.includePrerelease ? e : new _Range(e.raw, r);
401
+ if (e instanceof Comparator) return this.raw = e.value, this.set = [[e]], this.format(), this;
402
+ if (this.options = r, this.loose = !!r.loose, this.includePrerelease = !!r.includePrerelease, this.raw = e, this.set = e.split(/\s*\|\|\s*/).map((e2) => this.parseRange(e2.trim())).filter((e2) => e2.length), !this.set.length) throw new TypeError(`Invalid SemVer Range: ${e}`);
403
+ this.format();
404
+ }
405
+ format() {
406
+ return this.range = this.set.map((e) => e.join(" ").trim()).join("||").trim(), this.range;
407
+ }
408
+ toString() {
409
+ return this.range;
410
+ }
411
+ parseRange(e) {
412
+ const { loose: r } = this.options;
413
+ e = e.trim();
414
+ const t2 = r ? re$2[t$2.HYPHENRANGELOOSE] : re$2[t$2.HYPHENRANGE];
415
+ e = e.replace(t2, hyphenReplace(this.options.includePrerelease)), debug_1("hyphen replace", e), e = e.replace(re$2[t$2.COMPARATORTRIM], comparatorTrimReplace), debug_1("comparator trim", e, re$2[t$2.COMPARATORTRIM]), e = (e = (e = e.replace(re$2[t$2.TILDETRIM], tildeTrimReplace)).replace(re$2[t$2.CARETTRIM], caretTrimReplace)).split(/\s+/).join(" ");
416
+ const s = r ? re$2[t$2.COMPARATORLOOSE] : re$2[t$2.COMPARATOR];
417
+ return e.split(" ").map((e2) => parseComparator(e2, this.options)).join(" ").split(/\s+/).map((e2) => replaceGTE0(e2, this.options)).filter(this.options.loose ? (e2) => !!e2.match(s) : () => true).map((e2) => new Comparator(e2, this.options));
418
+ }
419
+ intersects(e, r) {
420
+ if (!(e instanceof _Range)) throw new TypeError("a Range is required");
421
+ return this.set.some((t2) => isSatisfiable(t2, r) && e.set.some((e2) => isSatisfiable(e2, r) && t2.every((t3) => e2.every((e3) => t3.intersects(e3, r)))));
422
+ }
423
+ test(e) {
424
+ if (!e) return false;
425
+ if ("string" == typeof e) try {
426
+ e = new SemVer(e, this.options);
427
+ } catch (e2) {
428
+ return false;
429
+ }
430
+ for (let r = 0; r < this.set.length; r++) if (testSet(this.set[r], e, this.options)) return true;
431
+ return false;
432
+ }
433
+ };
434
+ var { re: re$2, t: t$2, comparatorTrimReplace, tildeTrimReplace, caretTrimReplace } = re_1;
435
+ var isSatisfiable = (e, r) => {
436
+ let t2 = true;
437
+ const s = e.slice();
438
+ let i = s.pop();
439
+ for (; t2 && s.length; ) t2 = s.every((e2) => i.intersects(e2, r)), i = s.pop();
440
+ return t2;
441
+ };
442
+ var parseComparator = (e, r) => (debug_1("comp", e, r), e = replaceCarets(e, r), debug_1("caret", e), e = replaceTildes(e, r), debug_1("tildes", e), e = replaceXRanges(e, r), debug_1("xrange", e), e = replaceStars(e, r), debug_1("stars", e), e);
443
+ var isX = (e) => !e || "x" === e.toLowerCase() || "*" === e;
444
+ var replaceTildes = (e, r) => e.trim().split(/\s+/).map((e2) => replaceTilde(e2, r)).join(" ");
445
+ var replaceTilde = (e, r) => {
446
+ const t2 = r.loose ? re$2[t$2.TILDELOOSE] : re$2[t$2.TILDE];
447
+ return e.replace(t2, (r2, t3, s, i, o) => {
448
+ let a;
449
+ return debug_1("tilde", e, r2, t3, s, i, o), isX(t3) ? a = "" : isX(s) ? a = `>=${t3}.0.0 <${+t3 + 1}.0.0-0` : isX(i) ? a = `>=${t3}.${s}.0 <${t3}.${+s + 1}.0-0` : o ? (debug_1("replaceTilde pr", o), a = `>=${t3}.${s}.${i}-${o} <${t3}.${+s + 1}.0-0`) : a = `>=${t3}.${s}.${i} <${t3}.${+s + 1}.0-0`, debug_1("tilde return", a), a;
450
+ });
451
+ };
452
+ var replaceCarets = (e, r) => e.trim().split(/\s+/).map((e2) => replaceCaret(e2, r)).join(" ");
453
+ var replaceCaret = (e, r) => {
454
+ debug_1("caret", e, r);
455
+ const t2 = r.loose ? re$2[t$2.CARETLOOSE] : re$2[t$2.CARET], s = r.includePrerelease ? "-0" : "";
456
+ return e.replace(t2, (r2, t3, i, o, a) => {
457
+ let n;
458
+ return debug_1("caret", e, r2, t3, i, o, a), isX(t3) ? n = "" : isX(i) ? n = `>=${t3}.0.0${s} <${+t3 + 1}.0.0-0` : isX(o) ? n = "0" === t3 ? `>=${t3}.${i}.0${s} <${t3}.${+i + 1}.0-0` : `>=${t3}.${i}.0${s} <${+t3 + 1}.0.0-0` : a ? (debug_1("replaceCaret pr", a), n = "0" === t3 ? "0" === i ? `>=${t3}.${i}.${o}-${a} <${t3}.${i}.${+o + 1}-0` : `>=${t3}.${i}.${o}-${a} <${t3}.${+i + 1}.0-0` : `>=${t3}.${i}.${o}-${a} <${+t3 + 1}.0.0-0`) : (debug_1("no pr"), n = "0" === t3 ? "0" === i ? `>=${t3}.${i}.${o}${s} <${t3}.${i}.${+o + 1}-0` : `>=${t3}.${i}.${o}${s} <${t3}.${+i + 1}.0-0` : `>=${t3}.${i}.${o} <${+t3 + 1}.0.0-0`), debug_1("caret return", n), n;
459
+ });
460
+ };
461
+ var replaceXRanges = (e, r) => (debug_1("replaceXRanges", e, r), e.split(/\s+/).map((e2) => replaceXRange(e2, r)).join(" "));
462
+ var replaceXRange = (e, r) => {
463
+ e = e.trim();
464
+ const t2 = r.loose ? re$2[t$2.XRANGELOOSE] : re$2[t$2.XRANGE];
465
+ return e.replace(t2, (t3, s, i, o, a, n) => {
466
+ debug_1("xRange", e, t3, s, i, o, a, n);
467
+ const E = isX(i), p = E || isX(o), l = p || isX(a), c = l;
468
+ return "=" === s && c && (s = ""), n = r.includePrerelease ? "-0" : "", E ? t3 = ">" === s || "<" === s ? "<0.0.0-0" : "*" : s && c ? (p && (o = 0), a = 0, ">" === s ? (s = ">=", p ? (i = +i + 1, o = 0, a = 0) : (o = +o + 1, a = 0)) : "<=" === s && (s = "<", p ? i = +i + 1 : o = +o + 1), "<" === s && (n = "-0"), t3 = `${s + i}.${o}.${a}${n}`) : p ? t3 = `>=${i}.0.0${n} <${+i + 1}.0.0-0` : l && (t3 = `>=${i}.${o}.0${n} <${i}.${+o + 1}.0-0`), debug_1("xRange return", t3), t3;
469
+ });
470
+ };
471
+ var replaceStars = (e, r) => (debug_1("replaceStars", e, r), e.trim().replace(re$2[t$2.STAR], ""));
472
+ var replaceGTE0 = (e, r) => (debug_1("replaceGTE0", e, r), e.trim().replace(re$2[r.includePrerelease ? t$2.GTE0PRE : t$2.GTE0], ""));
473
+ var hyphenReplace = (e) => (r, t2, s, i, o, a, n, E, p, l, c, $, h) => `${t2 = isX(s) ? "" : isX(i) ? `>=${s}.0.0${e ? "-0" : ""}` : isX(o) ? `>=${s}.${i}.0${e ? "-0" : ""}` : a ? `>=${t2}` : `>=${t2}${e ? "-0" : ""}`} ${E = isX(p) ? "" : isX(l) ? `<${+p + 1}.0.0-0` : isX(c) ? `<${p}.${+l + 1}.0-0` : $ ? `<=${p}.${l}.${c}-${$}` : e ? `<${p}.${l}.${+c + 1}-0` : `<=${E}`}`.trim();
474
+ var testSet = (e, r, t2) => {
475
+ for (let t3 = 0; t3 < e.length; t3++) if (!e[t3].test(r)) return false;
476
+ if (r.prerelease.length && !t2.includePrerelease) {
477
+ for (let t3 = 0; t3 < e.length; t3++) if (debug_1(e[t3].semver), e[t3].semver !== Comparator.ANY && e[t3].semver.prerelease.length > 0) {
478
+ const s = e[t3].semver;
479
+ if (s.major === r.major && s.minor === r.minor && s.patch === r.patch) return true;
480
+ }
481
+ return false;
482
+ }
483
+ return true;
484
+ };
485
+ var satisfies = (e, r, t2) => {
486
+ try {
487
+ r = new Range(r, t2);
488
+ } catch (e2) {
489
+ return false;
490
+ }
491
+ return r.test(e);
492
+ };
493
+ var { MAX_LENGTH } = constants;
494
+ var { re: re$1, t: t$1 } = re_1;
495
+ var parse = (e, r) => {
496
+ if (r && "object" == typeof r || (r = { loose: !!r, includePrerelease: false }), e instanceof SemVer) return e;
497
+ if ("string" != typeof e) return null;
498
+ if (e.length > MAX_LENGTH) return null;
499
+ if (!(r.loose ? re$1[t$1.LOOSE] : re$1[t$1.FULL]).test(e)) return null;
500
+ try {
501
+ return new SemVer(e, r);
502
+ } catch (e2) {
503
+ return null;
504
+ }
505
+ };
506
+ var parse_1 = parse;
507
+ var { re, t } = re_1;
508
+ var coerce = (e, r) => {
509
+ if (e instanceof SemVer) return e;
510
+ if ("number" == typeof e && (e = String(e)), "string" != typeof e) return null;
511
+ let s = null;
512
+ if ((r = r || {}).rtl) {
513
+ let r2;
514
+ for (; (r2 = re[t.COERCERTL].exec(e)) && (!s || s.index + s[0].length !== e.length); ) s && r2.index + r2[0].length === s.index + s[0].length || (s = r2), re[t.COERCERTL].lastIndex = r2.index + r2[1].length + r2[2].length;
515
+ re[t.COERCERTL].lastIndex = -1;
516
+ } else s = e.match(re[t.COERCE]);
517
+ return null === s ? null : parse_1(`${s[2]}.${s[3] || "0"}.${s[4] || "0"}`, r);
518
+ };
519
+
520
+ // src/util/base64-json.ts
521
+ function percentToByte(p) {
522
+ return String.fromCharCode(parseInt(p.slice(1), 16));
523
+ }
524
+ function byteToPercent(b) {
525
+ return `%${`00${b.charCodeAt(0).toString(16)}`.slice(-2)}`;
526
+ }
527
+ function btoaUTF8(str) {
528
+ return btoa(encodeURIComponent(str).replace(/%[0-9A-F]{2}/g, percentToByte));
529
+ }
530
+ function atobUTF8(str) {
531
+ return decodeURIComponent(Array.from(atob(str), byteToPercent).join(""));
532
+ }
533
+ function encodeJSON(options) {
534
+ return btoaUTF8(JSON.stringify(options));
535
+ }
536
+ function decodeJSON(queryString) {
537
+ return JSON.parse(atobUTF8(queryString));
538
+ }
539
+
540
+ // src/core/sdk-exceptions.ts
541
+ import { RPCErrorCode as RPCErrorCode2, SDKErrorCode, SDKWarningCode } from "@magic-sdk/types";
542
+
543
+ // src/util/type-guards.ts
544
+ import { MagicPayloadMethod, RPCErrorCode } from "@magic-sdk/types";
545
+ function isUndefined(value) {
546
+ return typeof value === "undefined";
547
+ }
548
+ function isNull(value) {
549
+ return value === null;
550
+ }
551
+ function isNil(value) {
552
+ return isNull(value) || isUndefined(value);
553
+ }
554
+ function isJsonRpcRequestPayload(value) {
555
+ if (isNil(value)) return false;
556
+ return !isUndefined(value.jsonrpc) && !isUndefined(value.id) && !isUndefined(value.method) && !isUndefined(value.params);
557
+ }
558
+ function isJsonRpcResponsePayload(value) {
559
+ if (isNil(value)) return false;
560
+ return !isUndefined(value.jsonrpc) && !isUndefined(value.id) && (!isUndefined(value.result) || !isUndefined(value.error));
561
+ }
562
+ function isMagicPayloadMethod(value) {
563
+ if (isNil(value)) return false;
564
+ return typeof value === "string" && Object.values(MagicPayloadMethod).includes(value);
565
+ }
566
+ function isJsonRpcErrorCode(value) {
567
+ if (isNil(value)) return false;
568
+ return typeof value === "number" && Object.values(RPCErrorCode).includes(value);
569
+ }
570
+ function isEmpty(value) {
571
+ if (!value) return true;
572
+ for (const key2 in value) {
573
+ if (Object.hasOwnProperty.call(value, key2)) {
574
+ return false;
575
+ }
576
+ }
577
+ return true;
578
+ }
579
+
580
+ // src/core/sdk-environment.ts
581
+ var SDKEnvironment = {};
582
+ function createSDK(SDKBaseCtor, environment) {
583
+ Object.assign(SDKEnvironment, environment);
584
+ return SDKBaseCtor;
585
+ }
586
+ var sdkNameToEnvName = {
587
+ "magic-sdk": "magic-sdk",
588
+ "@magic-sdk/react-native": "magic-sdk-rn",
589
+ "@magic-sdk/react-native-bare": "magic-sdk-rn-bare",
590
+ "@magic-sdk/react-native-expo": "magic-sdk-rn-expo"
591
+ };
592
+
593
+ // src/core/sdk-exceptions.ts
594
+ var MagicSDKError = class _MagicSDKError extends Error {
595
+ constructor(code, rawMessage) {
596
+ super(`Magic SDK Error: [${code}] ${rawMessage}`);
597
+ this.code = code;
598
+ this.rawMessage = rawMessage;
599
+ Object.setPrototypeOf(this, _MagicSDKError.prototype);
600
+ }
601
+ __proto__ = Error;
602
+ };
603
+ var MagicRPCError = class _MagicRPCError extends Error {
604
+ __proto__ = Error;
605
+ code;
606
+ rawMessage;
607
+ data;
608
+ constructor(sourceError) {
609
+ super();
610
+ const codeNormalized = Number(sourceError?.code);
611
+ this.rawMessage = sourceError?.message || "Internal error";
612
+ this.code = isJsonRpcErrorCode(codeNormalized) ? codeNormalized : RPCErrorCode2.InternalError;
613
+ this.message = `Magic RPC Error: [${this.code}] ${this.rawMessage}`;
614
+ this.data = sourceError?.data || void 0;
615
+ Object.setPrototypeOf(this, _MagicRPCError.prototype);
616
+ }
617
+ };
618
+ var MagicSDKWarning = class {
619
+ constructor(code, rawMessage) {
620
+ this.code = code;
621
+ this.rawMessage = rawMessage;
622
+ this.message = `Magic SDK Warning: [${code}] ${rawMessage}`;
623
+ }
624
+ message;
625
+ /**
626
+ * Logs this warning to the console.
627
+ */
628
+ log() {
629
+ console.warn(this.message);
630
+ }
631
+ };
632
+ var MagicExtensionError = class _MagicExtensionError extends Error {
633
+ constructor(ext, code, rawMessage, data) {
634
+ super(`Magic Extension Error (${ext.name}): [${code}] ${rawMessage}`);
635
+ this.code = code;
636
+ this.rawMessage = rawMessage;
637
+ this.data = data;
638
+ Object.setPrototypeOf(this, _MagicExtensionError.prototype);
639
+ }
640
+ __proto__ = Error;
641
+ };
642
+ var MagicExtensionWarning = class {
643
+ constructor(ext, code, rawMessage) {
644
+ this.code = code;
645
+ this.rawMessage = rawMessage;
646
+ this.message = `Magic Extension Warning (${ext.name}): [${code}] ${rawMessage}`;
647
+ }
648
+ message;
649
+ /**
650
+ * Logs this warning to the console.
651
+ */
652
+ log() {
653
+ console.warn(this.message);
654
+ }
655
+ };
656
+ function createMissingApiKeyError() {
657
+ return new MagicSDKError(
658
+ SDKErrorCode.MissingApiKey,
659
+ "Please provide an API key that you acquired from the Magic developer dashboard."
660
+ );
661
+ }
662
+ function createModalNotReadyError() {
663
+ return new MagicSDKError(SDKErrorCode.ModalNotReady, "Modal is not ready");
664
+ }
665
+ function createMalformedResponseError() {
666
+ return new MagicSDKError(SDKErrorCode.MalformedResponse, "Response from the Magic iframe is malformed.");
667
+ }
668
+ function createExtensionNotInitializedError(member) {
669
+ return new MagicSDKError(
670
+ SDKErrorCode.ExtensionNotInitialized,
671
+ `Extensions must be initialized with a Magic SDK instance before \`Extension.${member}\` can be accessed. Do not invoke \`Extension.${member}\` inside an extension constructor.`
672
+ );
673
+ }
674
+ function createIncompatibleExtensionsError(extensions) {
675
+ let msg = `Some extensions are incompatible with \`${SDKEnvironment.sdkName}@${SDKEnvironment.version}\`:`;
676
+ extensions.filter((ext) => typeof ext.compat !== "undefined" && ext.compat !== null).forEach((ext) => {
677
+ const compat = ext.compat[SDKEnvironment.sdkName];
678
+ if (typeof compat === "string") {
679
+ msg += `
680
+ - Extension \`${ext.name}\` supports version(s) \`${compat}\``;
681
+ } else if (!compat) {
682
+ msg += `
683
+ - Extension \`${ext.name}\` does not support ${SDKEnvironment.platform} environments.`;
684
+ }
685
+ });
686
+ return new MagicSDKError(SDKErrorCode.IncompatibleExtensions, msg);
687
+ }
688
+ function createInvalidArgumentError(options) {
689
+ const ordinalSuffix = (i) => {
690
+ const iAdjusted = i + 1;
691
+ const j = iAdjusted % 10;
692
+ const k = iAdjusted % 100;
693
+ if (j === 1 && k !== 11) return `${iAdjusted}st`;
694
+ if (j === 2 && k !== 12) return `${iAdjusted}nd`;
695
+ if (j === 3 && k !== 13) return `${iAdjusted}rd`;
696
+ return `${iAdjusted}th`;
697
+ };
698
+ return new MagicSDKError(
699
+ SDKErrorCode.InvalidArgument,
700
+ `Invalid ${ordinalSuffix(options.argument)} argument given to \`${options.procedure}\`.
701
+ Expected: \`${options.expected}\`
702
+ Received: \`${options.received}\``
703
+ );
704
+ }
705
+ function createDuplicateIframeWarning() {
706
+ return new MagicSDKWarning(SDKWarningCode.DuplicateIframe, "Duplicate iframes found.");
707
+ }
708
+ function createSynchronousWeb3MethodWarning() {
709
+ return new MagicSDKWarning(
710
+ SDKWarningCode.SyncWeb3Method,
711
+ "Non-async web3 methods are deprecated in web3 > 1.0 and are not supported by the Magic web3 provider. Please use an async method instead."
712
+ );
713
+ }
714
+ function createReactNativeEndpointConfigurationWarning() {
715
+ return new MagicSDKWarning(
716
+ SDKWarningCode.ReactNativeEndpointConfiguration,
717
+ `CUSTOM DOMAINS ARE NOT SUPPORTED WHEN USING MAGIC SDK WITH REACT NATIVE! The \`endpoint\` parameter SHOULD NOT be provided. The Magic \`<iframe>\` is automatically wrapped by a WebView pointed at \`${SDKEnvironment.defaultEndpoint}\`. Changing this default behavior will lead to unexpected results and potentially security-threatening bugs.`
718
+ );
719
+ }
720
+ function createDeprecationWarning(options) {
721
+ const { method, removalVersions, useInstead } = options;
722
+ const removalVersion = removalVersions[SDKEnvironment.sdkName];
723
+ const useInsteadSuffix = useInstead ? ` Use \`${useInstead}\` instead.` : "";
724
+ const message = `\`${method}\` will be removed from \`${SDKEnvironment.sdkName}\` in version \`${removalVersion}\`.${useInsteadSuffix}`;
725
+ return new MagicSDKWarning(SDKWarningCode.DeprecationNotice, message);
726
+ }
727
+
728
+ // src/modules/auth.ts
729
+ import {
730
+ MagicPayloadMethod as MagicPayloadMethod3,
731
+ DeviceVerificationEventEmit,
732
+ LoginWithEmailOTPEventEmit,
733
+ UpdateEmailEventEmit,
734
+ RecencyCheckEventEmit,
735
+ LoginWithSmsOTPEventEmit
736
+ } from "@magic-sdk/types";
737
+
738
+ // src/modules/base-module.ts
739
+ import {
740
+ MagicOutgoingWindowMessage,
741
+ MagicIncomingWindowMessage,
742
+ MagicPayloadMethod as MagicPayloadMethod2,
743
+ routeToMagicMethods
744
+ } from "@magic-sdk/types";
745
+
746
+ // src/core/json-rpc.ts
747
+ import { RPCErrorCode as RPCErrorCode3 } from "@magic-sdk/types";
748
+
749
+ // src/util/get-payload-id.ts
750
+ function* createIntGenerator() {
751
+ let index = 0;
752
+ while (true) {
753
+ if (index < Number.MAX_SAFE_INTEGER) yield ++index;
754
+ else index = 0;
755
+ }
756
+ }
757
+ var intGenerator = createIntGenerator();
758
+ function getPayloadId() {
759
+ return intGenerator.next().value;
760
+ }
761
+
762
+ // src/util/storage.ts
763
+ var storage_exports = {};
764
+ __export(storage_exports, {
765
+ clear: () => clear,
766
+ getItem: () => getItem,
767
+ iterate: () => iterate,
768
+ key: () => key,
769
+ keys: () => keys,
770
+ length: () => length,
771
+ removeItem: () => removeItem,
772
+ setItem: () => setItem
773
+ });
774
+ var lf;
775
+ function proxyLocalForageMethod(method) {
776
+ return async (...args) => {
777
+ if (!lf) lf = await SDKEnvironment.configureStorage();
778
+ await lf.ready();
779
+ return lf[method](...args);
780
+ };
781
+ }
782
+ var getItem = proxyLocalForageMethod("getItem");
783
+ var setItem = proxyLocalForageMethod("setItem");
784
+ var removeItem = proxyLocalForageMethod("removeItem");
785
+ var clear = proxyLocalForageMethod("clear");
786
+ var length = proxyLocalForageMethod("length");
787
+ var key = proxyLocalForageMethod("key");
788
+ var keys = proxyLocalForageMethod("keys");
789
+ var iterate = proxyLocalForageMethod("iterate");
790
+
791
+ // src/util/uuid.ts
792
+ function uuid() {
793
+ const u = window.crypto.getRandomValues(new Uint8Array(16));
794
+ u[6] = u[6] & 15 | 64;
795
+ u[8] = u[8] & 191 | 128;
796
+ let uid = "";
797
+ uid += u[0].toString(16);
798
+ uid += u[1].toString(16);
799
+ uid += u[2].toString(16);
800
+ uid += u[3].toString(16);
801
+ uid += "-";
802
+ uid += u[4].toString(16);
803
+ uid += u[5].toString(16);
804
+ uid += "-";
805
+ uid += u[6].toString(16);
806
+ uid += u[7].toString(16);
807
+ uid += "-";
808
+ uid += u[8].toString(16);
809
+ uid += u[9].toString(16);
810
+ uid += "-";
811
+ uid += u[10].toString(16);
812
+ uid += u[11].toString(16);
813
+ uid += u[12].toString(16);
814
+ uid += u[13].toString(16);
815
+ uid += u[14].toString(16);
816
+ uid += u[15].toString(16);
817
+ return uid;
818
+ }
819
+
820
+ // src/util/web-crypto.ts
821
+ var STORE_KEY_PRIVATE_KEY = "STORE_KEY_PRIVATE_KEY";
822
+ var STORE_KEY_PUBLIC_JWK = "STORE_KEY_PUBLIC_JWK";
823
+ var ALGO_NAME = "ECDSA";
824
+ var ALGO_CURVE = "P-256";
825
+ var EC_GEN_PARAMS = {
826
+ name: ALGO_NAME,
827
+ namedCurve: ALGO_CURVE
828
+ };
829
+ function isWebCryptoSupported() {
830
+ const hasCrypto = typeof window !== "undefined" && !!window.crypto;
831
+ const hasSubtleCrypto = hasCrypto && !!window.crypto.subtle;
832
+ return hasCrypto && hasSubtleCrypto;
833
+ }
834
+ function clearKeys() {
835
+ removeItem(STORE_KEY_PUBLIC_JWK);
836
+ removeItem(STORE_KEY_PRIVATE_KEY);
837
+ }
838
+ async function createJwt() {
839
+ const publicJwk = await getPublicKey();
840
+ if (!publicJwk) {
841
+ console.info("unable to create public key or webcrypto is unsupported");
842
+ return void 0;
843
+ }
844
+ const { subtle } = window.crypto;
845
+ const privateJwk = await getItem(STORE_KEY_PRIVATE_KEY);
846
+ if (!privateJwk || !subtle) {
847
+ console.info("unable to find private key or webcrypto unsupported");
848
+ return void 0;
849
+ }
850
+ const claims = {
851
+ iat: Math.floor((/* @__PURE__ */ new Date()).getTime() / 1e3),
852
+ jti: uuid()
853
+ };
854
+ const headers = {
855
+ typ: "dpop+jwt",
856
+ alg: "ES256",
857
+ jwk: publicJwk
858
+ };
859
+ const jws = {
860
+ protected: strToUrlBase64(JSON.stringify(headers)),
861
+ claims: strToUrlBase64(JSON.stringify(claims))
862
+ };
863
+ const data = strToUint8(`${jws.protected}.${jws.claims}`);
864
+ const sigType = { name: ALGO_NAME, hash: { name: "SHA-256" } };
865
+ const sig = uint8ToUrlBase64(new Uint8Array(await subtle.sign(sigType, privateJwk, data)));
866
+ return `${jws.protected}.${jws.claims}.${sig}`;
867
+ }
868
+ async function getPublicKey() {
869
+ if (!isWebCryptoSupported()) {
870
+ console.info("webcrypto is not supported");
871
+ return void 0;
872
+ }
873
+ if (!await getItem(STORE_KEY_PUBLIC_JWK)) {
874
+ await generateWCKP();
875
+ }
876
+ return getItem(STORE_KEY_PUBLIC_JWK);
877
+ }
878
+ async function generateWCKP() {
879
+ const { subtle } = window.crypto;
880
+ const kp = await subtle.generateKey(
881
+ EC_GEN_PARAMS,
882
+ false,
883
+ // need to export the public key, while keep private key non-extractable
884
+ ["sign"]
885
+ );
886
+ const jwkPublicKey = await subtle.exportKey("jwk", kp.publicKey);
887
+ await setItem(STORE_KEY_PRIVATE_KEY, kp.privateKey);
888
+ await setItem(STORE_KEY_PUBLIC_JWK, jwkPublicKey);
889
+ }
890
+ function strToUrlBase64(str) {
891
+ return binToUrlBase64(utf8ToBinaryString(str));
892
+ }
893
+ function strToUint8(str) {
894
+ return new TextEncoder().encode(str);
895
+ }
896
+ function binToUrlBase64(bin) {
897
+ return btoa(bin).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+/g, "");
898
+ }
899
+ function utf8ToBinaryString(str) {
900
+ const escstr = encodeURIComponent(str);
901
+ return escstr.replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode(parseInt(p1, 16)));
902
+ }
903
+ function uint8ToUrlBase64(uint8) {
904
+ let bin = "";
905
+ uint8.forEach((code) => {
906
+ bin += String.fromCharCode(code);
907
+ });
908
+ return binToUrlBase64(bin);
909
+ }
910
+
911
+ // src/core/json-rpc.ts
912
+ var payloadPreprocessedSymbol = Symbol("Payload pre-processed by Magic SDK");
913
+ function markPayloadAsPreprocessed(payload) {
914
+ Object.defineProperty(payload, payloadPreprocessedSymbol, {
915
+ value: true,
916
+ enumerable: false
917
+ });
918
+ return payload;
919
+ }
920
+ function isPayloadPreprocessed(payload) {
921
+ return !!payload[payloadPreprocessedSymbol];
922
+ }
923
+ function standardizeJsonRpcRequestPayload(payload) {
924
+ if (!isPayloadPreprocessed(payload)) {
925
+ payload.jsonrpc = payload.jsonrpc ?? "2.0";
926
+ payload.id = getPayloadId();
927
+ payload.method = payload.method ?? "noop";
928
+ payload.params = payload.params ?? [];
929
+ markPayloadAsPreprocessed(payload);
930
+ }
931
+ return payload;
932
+ }
933
+ function createJsonRpcRequestPayload(method, params = []) {
934
+ return markPayloadAsPreprocessed({
935
+ params,
936
+ method,
937
+ jsonrpc: "2.0",
938
+ id: getPayloadId()
939
+ });
940
+ }
941
+ var JsonRpcResponse = class _JsonRpcResponse {
942
+ _jsonrpc;
943
+ _id;
944
+ _result;
945
+ _error;
946
+ constructor(responseOrPayload) {
947
+ if (responseOrPayload instanceof _JsonRpcResponse) {
948
+ this._jsonrpc = responseOrPayload.payload.jsonrpc;
949
+ this._id = responseOrPayload.payload.id;
950
+ this._result = responseOrPayload.payload.result;
951
+ this._error = responseOrPayload.payload.error;
952
+ } else if (isJsonRpcResponsePayload(responseOrPayload)) {
953
+ this._jsonrpc = responseOrPayload.jsonrpc;
954
+ this._id = responseOrPayload.id;
955
+ this._result = responseOrPayload.result;
956
+ this._error = responseOrPayload.error;
957
+ } else {
958
+ this._jsonrpc = responseOrPayload.jsonrpc;
959
+ this._id = responseOrPayload.id;
960
+ this._result = void 0;
961
+ this._error = void 0;
962
+ }
963
+ }
964
+ applyError(error) {
965
+ this._error = error;
966
+ return this;
967
+ }
968
+ applyResult(result) {
969
+ this._result = result;
970
+ return this;
971
+ }
972
+ get hasError() {
973
+ if (this._error?.code === RPCErrorCode3.DpopInvalidated) {
974
+ clearKeys();
975
+ }
976
+ return typeof this._error !== "undefined" && this._error !== null;
977
+ }
978
+ get hasResult() {
979
+ return typeof this._result !== "undefined";
980
+ }
981
+ get payload() {
982
+ return {
983
+ jsonrpc: this._jsonrpc,
984
+ id: this._id,
985
+ result: this._result,
986
+ error: this._error
987
+ };
988
+ }
989
+ };
990
+
991
+ // src/util/promise-tools.ts
992
+ import { UserEventsEmit, UserEventsOnReceived } from "@magic-sdk/types";
993
+
994
+ // src/util/events.ts
995
+ var import_eventemitter3 = __toESM(require_eventemitter3());
996
+ var TypedEmitter = class extends import_eventemitter3.default {
997
+ };
998
+ function createTypedEmitter() {
999
+ const emitter = new TypedEmitter();
1000
+ const createChainingEmitterMethod2 = (method, source) => {
1001
+ return (...args) => {
1002
+ emitter[method].apply(emitter, args);
1003
+ return source;
1004
+ };
1005
+ };
1006
+ const createBoundEmitterMethod2 = (method) => {
1007
+ return (...args) => {
1008
+ return emitter[method].apply(emitter, args);
1009
+ };
1010
+ };
1011
+ return {
1012
+ emitter,
1013
+ createChainingEmitterMethod: createChainingEmitterMethod2,
1014
+ createBoundEmitterMethod: createBoundEmitterMethod2
1015
+ };
1016
+ }
1017
+
1018
+ // src/util/promise-tools.ts
1019
+ var promiEventBrand = Symbol("isPromiEvent");
1020
+ function isPromiEvent(value) {
1021
+ return !!value[promiEventBrand];
1022
+ }
1023
+ function createPromiEvent(executor) {
1024
+ const promise = createPromise(executor);
1025
+ const { createBoundEmitterMethod: createBoundEmitterMethod2, createChainingEmitterMethod: createChainingEmitterMethod2 } = createTypedEmitter();
1026
+ const thenSymbol = Symbol("Promise.then");
1027
+ const catchSymbol = Symbol("Promise.catch");
1028
+ const finallySymbol = Symbol("Promise.finally");
1029
+ const createChainingPromiseMethod = (method, source) => (...args) => {
1030
+ const nextPromise = source[method].apply(source, args);
1031
+ return promiEvent(nextPromise);
1032
+ };
1033
+ const promiEvent = (source) => {
1034
+ return Object.assign(source, {
1035
+ [promiEventBrand]: true,
1036
+ [thenSymbol]: source[thenSymbol] || source.then,
1037
+ [catchSymbol]: source[catchSymbol] || source.catch,
1038
+ [finallySymbol]: source[finallySymbol] || source.finally,
1039
+ then: createChainingPromiseMethod(thenSymbol, source),
1040
+ catch: createChainingPromiseMethod(catchSymbol, source),
1041
+ finally: createChainingPromiseMethod(finallySymbol, source),
1042
+ on: createChainingEmitterMethod2("on", source),
1043
+ once: createChainingEmitterMethod2("once", source),
1044
+ addListener: createChainingEmitterMethod2("addListener", source),
1045
+ off: createChainingEmitterMethod2("off", source),
1046
+ removeListener: createChainingEmitterMethod2("removeListener", source),
1047
+ removeAllListeners: createChainingEmitterMethod2("removeAllListeners", source),
1048
+ emit: createBoundEmitterMethod2("emit"),
1049
+ eventNames: createBoundEmitterMethod2("eventNames"),
1050
+ listeners: createBoundEmitterMethod2("listeners"),
1051
+ listenerCount: createBoundEmitterMethod2("listenerCount")
1052
+ });
1053
+ };
1054
+ const result = promiEvent(
1055
+ promise.then(
1056
+ (resolved) => {
1057
+ result.emit("done", resolved);
1058
+ result.emit("settled");
1059
+ return resolved;
1060
+ },
1061
+ (err) => {
1062
+ result.emit("error", err);
1063
+ result.emit("settled");
1064
+ throw err;
1065
+ }
1066
+ )
1067
+ );
1068
+ result.on(UserEventsOnReceived.ClosedByUser, () => {
1069
+ result.emit(UserEventsEmit.ClosedByUser);
1070
+ });
1071
+ return result;
1072
+ }
1073
+ function createPromise(executor) {
1074
+ return new Promise((resolve, reject) => {
1075
+ const result = executor(resolve, reject);
1076
+ Promise.resolve(result).catch(reject);
1077
+ });
1078
+ }
1079
+
1080
+ // src/modules/base-module.ts
1081
+ var BaseModule = class {
1082
+ constructor(sdk) {
1083
+ this.sdk = sdk;
1084
+ }
1085
+ /**
1086
+ * The `ViewController` for the SDK instance registered to this module.
1087
+ */
1088
+ get overlay() {
1089
+ return this.sdk.overlay;
1090
+ }
1091
+ /**
1092
+ * Emits promisified requests to the Magic `<iframe>` context.
1093
+ */
1094
+ request(payload) {
1095
+ if (this.sdk.thirdPartyWallets.isConnected && !routeToMagicMethods.includes(payload.method)) {
1096
+ const promiEvent2 = createPromiEvent((resolve, reject) => {
1097
+ this.sdk.thirdPartyWallets.requestOverride(payload).then(resolve).catch(reject);
1098
+ });
1099
+ return promiEvent2;
1100
+ }
1101
+ const responsePromise = this.overlay.post(
1102
+ MagicOutgoingWindowMessage.MAGIC_HANDLE_REQUEST,
1103
+ standardizeJsonRpcRequestPayload(payload)
1104
+ );
1105
+ const promiEvent = createPromiEvent((resolve, reject) => {
1106
+ responsePromise.then((res) => {
1107
+ cleanupEvents();
1108
+ if (res.hasError) reject(new MagicRPCError(res.payload.error));
1109
+ else if (res.hasResult) resolve(res.payload.result);
1110
+ else throw createMalformedResponseError();
1111
+ }).catch((err) => {
1112
+ cleanupEvents();
1113
+ reject(err);
1114
+ });
1115
+ });
1116
+ const cleanupEvents = this.overlay.on(MagicIncomingWindowMessage.MAGIC_HANDLE_EVENT, (evt) => {
1117
+ const { response } = evt.data;
1118
+ if (response.id === payload.id && response.result?.event) {
1119
+ const { event, params = [] } = response.result;
1120
+ promiEvent.emit(event, ...params);
1121
+ }
1122
+ });
1123
+ return promiEvent;
1124
+ }
1125
+ // Creates an intermediary event which takes a typed event and a payload ID
1126
+ createIntermediaryEvent(eventType, payloadId) {
1127
+ const e = (args) => {
1128
+ const res = createJsonRpcRequestPayload(MagicPayloadMethod2.IntermediaryEvent, [{ payloadId, eventType, args }]);
1129
+ this.request(res);
1130
+ };
1131
+ return e;
1132
+ }
1133
+ };
1134
+
1135
+ // src/util/version-check.ts
1136
+ function isMajorVersionAtLeast(version, majorVersion) {
1137
+ const [major] = version.split(".").map(Number);
1138
+ return major >= majorVersion;
1139
+ }
1140
+
1141
+ // src/modules/auth.ts
1142
+ var ProductConsolidationMethodRemovalVersions = {
1143
+ "magic-sdk": "v18.0.0",
1144
+ "@magic-sdk/react-native": "v14.0.0",
1145
+ "@magic-sdk/react-native-bare": "v19.0.0",
1146
+ "@magic-sdk/react-native-expo": "v19.0.0"
1147
+ };
1148
+ var AuthModule = class extends BaseModule {
1149
+ /**
1150
+ * Initiate the "magic link" login flow for a user. If the flow is successful,
1151
+ * this method will return a Decentralized ID token (with a default lifespan
1152
+ * of 15 minutes).
1153
+ */
1154
+ loginWithMagicLink(configuration) {
1155
+ const isRNMobilePackage = SDKEnvironment.sdkName === "@magic-sdk/react-native" || SDKEnvironment.sdkName === "@magic-sdk/react-native-bare" || SDKEnvironment.sdkName === "@magic-sdk/react-native-expo";
1156
+ if (isRNMobilePackage && isMajorVersionAtLeast(SDKEnvironment.version, 19)) {
1157
+ throw new Error(
1158
+ "loginWithMagicLink() is deprecated for this package, please utilize a passcode method like loginWithSMS or loginWithEmailOTP instead."
1159
+ );
1160
+ } else if (isRNMobilePackage) {
1161
+ createDeprecationWarning({
1162
+ method: "auth.loginWithMagicLink()",
1163
+ removalVersions: ProductConsolidationMethodRemovalVersions,
1164
+ useInstead: "auth.loginWithEmailOTP()"
1165
+ }).log();
1166
+ }
1167
+ const { email, showUI = true, redirectURI, overrides, lifespan } = configuration;
1168
+ const requestPayload = createJsonRpcRequestPayload(
1169
+ this.sdk.testMode ? MagicPayloadMethod3.LoginWithMagicLinkTestMode : MagicPayloadMethod3.LoginWithMagicLink,
1170
+ [{ email, showUI, redirectURI, overrides, lifespan }]
1171
+ );
1172
+ return this.request(requestPayload);
1173
+ }
1174
+ /**
1175
+ * Initiate an SMS login flow for a user. If successful,
1176
+ * this method will return a Decenteralized ID token (with a default lifespan
1177
+ * of 15 minutes)
1178
+ */
1179
+ loginWithSMS(configuration) {
1180
+ const { phoneNumber, showUI = true, lifespan } = configuration;
1181
+ const requestPayload = createJsonRpcRequestPayload(
1182
+ this.sdk.testMode ? MagicPayloadMethod3.LoginWithSmsTestMode : MagicPayloadMethod3.LoginWithSms,
1183
+ [{ phoneNumber, showUI, lifespan }]
1184
+ );
1185
+ const handle = this.request(requestPayload);
1186
+ if (!showUI && handle) {
1187
+ handle.on(LoginWithSmsOTPEventEmit.VerifySmsOtp, (otp) => {
1188
+ this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.VerifySmsOtp, requestPayload.id)(otp);
1189
+ });
1190
+ handle.on(LoginWithSmsOTPEventEmit.Cancel, () => {
1191
+ this.createIntermediaryEvent(LoginWithSmsOTPEventEmit.Cancel, requestPayload.id)();
1192
+ });
1193
+ }
1194
+ return handle;
1195
+ }
1196
+ /**
1197
+ * Initiate an Email with OTP login flow for a user. If successful,
1198
+ * this method will return a Decenteralized ID token (with a default lifespan
1199
+ * of 15 minutes)
1200
+ */
1201
+ loginWithEmailOTP(configuration) {
1202
+ const { email, showUI, deviceCheckUI, overrides, lifespan } = configuration;
1203
+ const requestPayload = createJsonRpcRequestPayload(
1204
+ this.sdk.testMode ? MagicPayloadMethod3.LoginWithEmailOTPTestMode : MagicPayloadMethod3.LoginWithEmailOTP,
1205
+ [{ email, showUI, deviceCheckUI, overrides, lifespan }]
1206
+ );
1207
+ const handle = this.request(requestPayload);
1208
+ if (!deviceCheckUI && handle) {
1209
+ handle.on(DeviceVerificationEventEmit.Retry, () => {
1210
+ this.createIntermediaryEvent(DeviceVerificationEventEmit.Retry, requestPayload.id)();
1211
+ });
1212
+ }
1213
+ if (!showUI && handle) {
1214
+ handle.on(LoginWithEmailOTPEventEmit.VerifyEmailOtp, (otp) => {
1215
+ this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyEmailOtp, requestPayload.id)(otp);
1216
+ });
1217
+ handle.on(LoginWithEmailOTPEventEmit.VerifyMFACode, (mfa) => {
1218
+ this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.VerifyMFACode, requestPayload.id)(mfa);
1219
+ });
1220
+ handle.on(LoginWithEmailOTPEventEmit.LostDevice, () => {
1221
+ this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.LostDevice, requestPayload.id)();
1222
+ });
1223
+ handle.on(LoginWithEmailOTPEventEmit.VerifyRecoveryCode, (recoveryCode) => {
1224
+ this.createIntermediaryEvent(
1225
+ LoginWithEmailOTPEventEmit.VerifyRecoveryCode,
1226
+ requestPayload.id
1227
+ )(recoveryCode);
1228
+ });
1229
+ handle.on(LoginWithEmailOTPEventEmit.Cancel, () => {
1230
+ this.createIntermediaryEvent(LoginWithEmailOTPEventEmit.Cancel, requestPayload.id)();
1231
+ });
1232
+ }
1233
+ return handle;
1234
+ }
1235
+ /**
1236
+ * Log a user in with a special one-time-use credential token. This is
1237
+ * currently used during magic link flows with a configured redirect to
1238
+ * hydrate the user session at the end of the flow. If the flow is successful,
1239
+ * this method will return a Decentralized ID token (with a default lifespan
1240
+ * of 15 minutes).
1241
+ *
1242
+ * If no argument is provided, a credential is automatically parsed from
1243
+ * `window.location.search`.
1244
+ */
1245
+ loginWithCredential(configuration) {
1246
+ const { credentialOrQueryString, lifespan } = configuration || {};
1247
+ let credentialResolved = credentialOrQueryString ?? "";
1248
+ if (!credentialOrQueryString && SDKEnvironment.platform === "web") {
1249
+ credentialResolved = window.location.search;
1250
+ const urlWithoutQuery = window.location.origin + window.location.pathname;
1251
+ window.history.replaceState(null, "", urlWithoutQuery);
1252
+ }
1253
+ const requestPayload = createJsonRpcRequestPayload(
1254
+ this.sdk.testMode ? MagicPayloadMethod3.LoginWithCredentialTestMode : MagicPayloadMethod3.LoginWithCredential,
1255
+ [credentialResolved, lifespan]
1256
+ );
1257
+ return this.request(requestPayload);
1258
+ }
1259
+ // Custom Auth
1260
+ setAuthorizationToken(jwt) {
1261
+ const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod3.SetAuthorizationToken, [{ jwt }]);
1262
+ return this.request(requestPayload);
1263
+ }
1264
+ updateEmailWithUI(configuration) {
1265
+ const { email, showUI = true } = configuration;
1266
+ const requestPayload = createJsonRpcRequestPayload(
1267
+ this.sdk.testMode ? MagicPayloadMethod3.UpdateEmailTestMode : MagicPayloadMethod3.UpdateEmail,
1268
+ [{ email, showUI }]
1269
+ );
1270
+ const handle = this.request(requestPayload);
1271
+ if (!showUI) {
1272
+ handle.on(RecencyCheckEventEmit.Retry, () => {
1273
+ this.createIntermediaryEvent(RecencyCheckEventEmit.Retry, requestPayload.id)();
1274
+ });
1275
+ handle.on(RecencyCheckEventEmit.Cancel, () => {
1276
+ this.createIntermediaryEvent(RecencyCheckEventEmit.Cancel, requestPayload.id)();
1277
+ });
1278
+ handle.on(RecencyCheckEventEmit.VerifyEmailOtp, (otp) => {
1279
+ this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyEmailOtp, requestPayload.id)(otp);
1280
+ });
1281
+ handle.on(RecencyCheckEventEmit.VerifyMFACode, (mfa) => {
1282
+ this.createIntermediaryEvent(RecencyCheckEventEmit.VerifyMFACode, requestPayload.id)(mfa);
1283
+ });
1284
+ handle.on(UpdateEmailEventEmit.RetryWithNewEmail, (newEmail) => {
1285
+ this.createIntermediaryEvent(UpdateEmailEventEmit.RetryWithNewEmail, requestPayload.id)(newEmail);
1286
+ });
1287
+ handle.on(UpdateEmailEventEmit.Cancel, () => {
1288
+ this.createIntermediaryEvent(UpdateEmailEventEmit.Cancel, requestPayload.id)();
1289
+ });
1290
+ handle.on(UpdateEmailEventEmit.VerifyEmailOtp, (otp) => {
1291
+ this.createIntermediaryEvent(UpdateEmailEventEmit.VerifyEmailOtp, requestPayload.id)(otp);
1292
+ });
1293
+ }
1294
+ return handle;
1295
+ }
1296
+ };
1297
+
1298
+ // src/modules/user.ts
1299
+ import {
1300
+ MagicPayloadMethod as MagicPayloadMethod4,
1301
+ EnableMFAEventEmit,
1302
+ DisableMFAEventEmit,
1303
+ RecencyCheckEventEmit as RecencyCheckEventEmit2,
1304
+ RecoveryFactorEventEmit,
1305
+ RecoverAccountEventEmit,
1306
+ UpdateEmailEventEmit as UpdateEmailEventEmit2
1307
+ } from "@magic-sdk/types";
1308
+
1309
+ // src/util/device-share-web-crypto.ts
1310
+ var DEVICE_SHARE_KEY = "ds";
1311
+ var ENCRYPTION_KEY_KEY = "ek";
1312
+ var INITIALIZATION_VECTOR_KEY = "iv";
1313
+ var ALGO_NAME2 = "AES-GCM";
1314
+ var ALGO_LENGTH = 256;
1315
+ async function clearDeviceShares() {
1316
+ const keysToRemove = [];
1317
+ await iterate((value, key2, iterationNumber) => {
1318
+ if (key2.startsWith(`${DEVICE_SHARE_KEY}_`)) {
1319
+ keysToRemove.push(key2);
1320
+ }
1321
+ });
1322
+ for (const key2 of keysToRemove) {
1323
+ await removeItem(key2);
1324
+ }
1325
+ }
1326
+ function arrayBufferToBase64(buffer) {
1327
+ let binary = "";
1328
+ const bytes = new Uint8Array(buffer);
1329
+ const len = bytes.byteLength;
1330
+ for (let i = 0; i < len; i++) {
1331
+ binary += String.fromCharCode(bytes[i]);
1332
+ }
1333
+ return window.btoa(binary);
1334
+ }
1335
+ function base64ToArrayBuffer(base64) {
1336
+ const binaryString = window.atob(base64);
1337
+ const len = binaryString.length;
1338
+ const bytes = new Uint8Array(len);
1339
+ for (let i = 0; i < len; i++) {
1340
+ bytes[i] = binaryString.charCodeAt(i);
1341
+ }
1342
+ return bytes.buffer;
1343
+ }
1344
+ async function getOrCreateInitVector() {
1345
+ if (!isWebCryptoSupported()) {
1346
+ console.info("webcrypto is not supported");
1347
+ return void 0;
1348
+ }
1349
+ const { crypto } = window;
1350
+ const existingIv = await getItem(INITIALIZATION_VECTOR_KEY);
1351
+ if (existingIv) {
1352
+ return existingIv;
1353
+ }
1354
+ const iv = crypto.getRandomValues(new Uint8Array(12));
1355
+ return iv;
1356
+ }
1357
+ async function getOrCreateEncryptionKey() {
1358
+ if (!isWebCryptoSupported()) {
1359
+ console.info("webcrypto is not supported");
1360
+ return void 0;
1361
+ }
1362
+ const { subtle } = window.crypto;
1363
+ const existingKey = await getItem(ENCRYPTION_KEY_KEY);
1364
+ if (existingKey) {
1365
+ return existingKey;
1366
+ }
1367
+ const key2 = await subtle.generateKey(
1368
+ { name: ALGO_NAME2, length: ALGO_LENGTH },
1369
+ false,
1370
+ // non-extractable
1371
+ ["encrypt", "decrypt"]
1372
+ );
1373
+ return key2;
1374
+ }
1375
+ async function encryptAndPersistDeviceShare(deviceShareBase64, networkHash) {
1376
+ const iv = await getOrCreateInitVector();
1377
+ const encryptionKey = await getOrCreateEncryptionKey();
1378
+ if (!iv || !encryptionKey || !deviceShareBase64) {
1379
+ return;
1380
+ }
1381
+ const decodedDeviceShare = base64ToArrayBuffer(deviceShareBase64);
1382
+ const { subtle } = window.crypto;
1383
+ const encryptedData = await subtle.encrypt(
1384
+ {
1385
+ name: ALGO_NAME2,
1386
+ iv
1387
+ },
1388
+ encryptionKey,
1389
+ decodedDeviceShare
1390
+ );
1391
+ const encryptedDeviceShare = arrayBufferToBase64(encryptedData);
1392
+ await setItem(`${DEVICE_SHARE_KEY}_${networkHash}`, encryptedDeviceShare);
1393
+ await setItem(ENCRYPTION_KEY_KEY, encryptionKey);
1394
+ await setItem(INITIALIZATION_VECTOR_KEY, iv);
1395
+ }
1396
+ async function getDecryptedDeviceShare(networkHash) {
1397
+ const encryptedDeviceShare = await getItem(`${DEVICE_SHARE_KEY}_${networkHash}`);
1398
+ const iv = await getItem(INITIALIZATION_VECTOR_KEY);
1399
+ const encryptionKey = await getItem(ENCRYPTION_KEY_KEY);
1400
+ if (!iv || !encryptedDeviceShare || !encryptionKey || !isWebCryptoSupported()) {
1401
+ return void 0;
1402
+ }
1403
+ const { subtle } = window.crypto;
1404
+ const ab = await subtle.decrypt({ name: ALGO_NAME2, iv }, encryptionKey, base64ToArrayBuffer(encryptedDeviceShare));
1405
+ return arrayBufferToBase64(ab);
1406
+ }
1407
+
1408
+ // src/util/url.ts
1409
+ function createURL(url, base) {
1410
+ return base ? new URL(url, base) : new URL(url);
1411
+ }
1412
+
1413
+ // src/modules/user.ts
1414
+ var UserModule = class extends BaseModule {
1415
+ getIdToken(configuration) {
1416
+ const requestPayload = createJsonRpcRequestPayload(
1417
+ this.sdk.testMode ? MagicPayloadMethod4.GetIdTokenTestMode : MagicPayloadMethod4.GetIdToken,
1418
+ [configuration]
1419
+ );
1420
+ return this.request(requestPayload);
1421
+ }
1422
+ generateIdToken(configuration) {
1423
+ const requestPayload = createJsonRpcRequestPayload(
1424
+ this.sdk.testMode ? MagicPayloadMethod4.GenerateIdTokenTestMode : MagicPayloadMethod4.GenerateIdToken,
1425
+ [configuration]
1426
+ );
1427
+ return this.request(requestPayload);
1428
+ }
1429
+ getInfo() {
1430
+ const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod4.GetInfo, []);
1431
+ return this.request(requestPayload);
1432
+ }
1433
+ isLoggedIn() {
1434
+ return createPromiEvent(async (resolve, reject) => {
1435
+ try {
1436
+ let cachedIsLoggedIn = false;
1437
+ if (this.sdk.useStorageCache) {
1438
+ cachedIsLoggedIn = await getItem(this.localForageIsLoggedInKey) === "true";
1439
+ if (cachedIsLoggedIn) {
1440
+ resolve(true);
1441
+ }
1442
+ }
1443
+ const requestPayload = createJsonRpcRequestPayload(
1444
+ this.sdk.testMode ? MagicPayloadMethod4.IsLoggedInTestMode : MagicPayloadMethod4.IsLoggedIn
1445
+ );
1446
+ const isLoggedInResponse = await this.request(requestPayload);
1447
+ if (this.sdk.useStorageCache) {
1448
+ if (isLoggedInResponse) {
1449
+ setItem(this.localForageIsLoggedInKey, true);
1450
+ } else {
1451
+ removeItem(this.localForageIsLoggedInKey);
1452
+ }
1453
+ if (cachedIsLoggedIn && !isLoggedInResponse) {
1454
+ this.emitUserLoggedOut(true);
1455
+ }
1456
+ }
1457
+ resolve(isLoggedInResponse);
1458
+ } catch (err) {
1459
+ reject(err);
1460
+ }
1461
+ });
1462
+ }
1463
+ logout() {
1464
+ removeItem(this.localForageIsLoggedInKey);
1465
+ clearDeviceShares();
1466
+ return createPromiEvent(async (resolve, reject) => {
1467
+ try {
1468
+ const requestPayload = createJsonRpcRequestPayload(
1469
+ this.sdk.testMode ? MagicPayloadMethod4.LogoutTestMode : MagicPayloadMethod4.Logout
1470
+ );
1471
+ const response = await this.request(requestPayload);
1472
+ if (this.sdk.useStorageCache) {
1473
+ this.emitUserLoggedOut(response);
1474
+ }
1475
+ resolve(response);
1476
+ } catch (err) {
1477
+ reject(err);
1478
+ }
1479
+ });
1480
+ }
1481
+ /* Request email address from logged in user */
1482
+ requestInfoWithUI(scope) {
1483
+ const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod4.RequestUserInfoWithUI, scope ? [scope] : []);
1484
+ return this.request(requestPayload);
1485
+ }
1486
+ showSettings(configuration) {
1487
+ const { showUI = true } = configuration || {};
1488
+ const requestPayload = createJsonRpcRequestPayload(
1489
+ this.sdk.testMode ? MagicPayloadMethod4.UserSettingsTestMode : MagicPayloadMethod4.UserSettings,
1490
+ [configuration]
1491
+ );
1492
+ const handle = this.request(requestPayload);
1493
+ if (!showUI && handle) {
1494
+ handle.on(RecoveryFactorEventEmit.SendNewPhoneNumber, (phone_number) => {
1495
+ this.createIntermediaryEvent(
1496
+ RecoveryFactorEventEmit.SendNewPhoneNumber,
1497
+ requestPayload.id
1498
+ )(phone_number);
1499
+ });
1500
+ handle.on(RecoveryFactorEventEmit.SendOtpCode, (otp) => {
1501
+ this.createIntermediaryEvent(RecoveryFactorEventEmit.SendOtpCode, requestPayload.id)(otp);
1502
+ });
1503
+ handle.on(RecoveryFactorEventEmit.StartEditPhoneNumber, () => {
1504
+ this.createIntermediaryEvent(RecoveryFactorEventEmit.StartEditPhoneNumber, requestPayload.id)();
1505
+ });
1506
+ handle.on(RecoveryFactorEventEmit.Cancel, () => {
1507
+ this.createIntermediaryEvent(RecoveryFactorEventEmit.Cancel, requestPayload.id)();
1508
+ });
1509
+ handle.on(RecencyCheckEventEmit2.VerifyEmailOtp, (otp) => {
1510
+ this.createIntermediaryEvent(RecencyCheckEventEmit2.VerifyEmailOtp, requestPayload.id)(otp);
1511
+ });
1512
+ }
1513
+ return handle;
1514
+ }
1515
+ recoverAccount(configuration) {
1516
+ const { email, showUI } = configuration;
1517
+ const requestPayload = createJsonRpcRequestPayload(
1518
+ this.sdk.testMode ? MagicPayloadMethod4.RecoverAccountTestMode : MagicPayloadMethod4.RecoverAccount,
1519
+ [{ email, showUI }]
1520
+ );
1521
+ const handle = this.request(
1522
+ requestPayload
1523
+ );
1524
+ if (!showUI && handle) {
1525
+ handle.on(RecoverAccountEventEmit.Cancel, () => {
1526
+ this.createIntermediaryEvent(RecoverAccountEventEmit.Cancel, requestPayload.id)();
1527
+ });
1528
+ handle.on(RecoverAccountEventEmit.ResendSms, () => {
1529
+ this.createIntermediaryEvent(RecoverAccountEventEmit.ResendSms, requestPayload.id)();
1530
+ });
1531
+ handle.on(RecoverAccountEventEmit.VerifyOtp, (otp) => {
1532
+ this.createIntermediaryEvent(RecoverAccountEventEmit.VerifyOtp, requestPayload.id)(otp);
1533
+ });
1534
+ handle.on(RecoverAccountEventEmit.UpdateEmail, (newEmail) => {
1535
+ this.createIntermediaryEvent(RecoverAccountEventEmit.UpdateEmail, requestPayload.id)(newEmail);
1536
+ });
1537
+ handle.on(UpdateEmailEventEmit2.Cancel, () => {
1538
+ this.createIntermediaryEvent(UpdateEmailEventEmit2.Cancel, requestPayload.id)();
1539
+ });
1540
+ handle.on(UpdateEmailEventEmit2.RetryWithNewEmail, (newEmail) => {
1541
+ this.createIntermediaryEvent(UpdateEmailEventEmit2.RetryWithNewEmail, requestPayload.id)(newEmail);
1542
+ });
1543
+ handle.on(UpdateEmailEventEmit2.VerifyEmailOtp, (otp) => {
1544
+ this.createIntermediaryEvent(UpdateEmailEventEmit2.VerifyEmailOtp, requestPayload.id)(otp);
1545
+ });
1546
+ }
1547
+ return handle;
1548
+ }
1549
+ revealPrivateKey() {
1550
+ const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod4.RevealPK);
1551
+ return this.request(requestPayload);
1552
+ }
1553
+ onUserLoggedOut(callback) {
1554
+ this.userLoggedOutCallbacks.push(callback);
1555
+ }
1556
+ enableMFA(configuration) {
1557
+ const { showUI = true } = configuration;
1558
+ const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod4.EnableMFA, [{ showUI }]);
1559
+ const handle = this.request(requestPayload);
1560
+ if (!showUI && handle) {
1561
+ handle.on(EnableMFAEventEmit.VerifyMFACode, (totp) => {
1562
+ this.createIntermediaryEvent(EnableMFAEventEmit.VerifyMFACode, requestPayload.id)(totp);
1563
+ });
1564
+ handle.on(EnableMFAEventEmit.Cancel, () => {
1565
+ this.createIntermediaryEvent(EnableMFAEventEmit.Cancel, requestPayload.id)();
1566
+ });
1567
+ }
1568
+ return handle;
1569
+ }
1570
+ disableMFA(configuration) {
1571
+ const { showUI = true } = configuration;
1572
+ const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod4.DisableMFA, [{ showUI }]);
1573
+ const handle = this.request(requestPayload);
1574
+ if (!showUI && handle) {
1575
+ handle.on(DisableMFAEventEmit.VerifyMFACode, (totp) => {
1576
+ this.createIntermediaryEvent(DisableMFAEventEmit.VerifyMFACode, requestPayload.id)(totp);
1577
+ });
1578
+ handle.on(DisableMFAEventEmit.LostDevice, (recoveryCode) => {
1579
+ this.createIntermediaryEvent(DisableMFAEventEmit.LostDevice, requestPayload.id)(recoveryCode);
1580
+ });
1581
+ handle.on(DisableMFAEventEmit.Cancel, () => {
1582
+ this.createIntermediaryEvent(DisableMFAEventEmit.Cancel, requestPayload.id)();
1583
+ });
1584
+ }
1585
+ return handle;
1586
+ }
1587
+ // Private members
1588
+ emitUserLoggedOut(loggedOut) {
1589
+ this.userLoggedOutCallbacks.forEach((callback) => {
1590
+ callback(loggedOut);
1591
+ });
1592
+ }
1593
+ localForageIsLoggedInKey = "magic_auth_is_logged_in";
1594
+ userLoggedOutCallbacks = [];
1595
+ };
1596
+
1597
+ // src/modules/wallet.ts
1598
+ import {
1599
+ MagicPayloadMethod as MagicPayloadMethod5
1600
+ } from "@magic-sdk/types";
1601
+ var WalletModule = class extends BaseModule {
1602
+ /* Prompt Magic's Login Form */
1603
+ connectWithUI(options) {
1604
+ const promiEvent = createPromiEvent(async (resolve, reject) => {
1605
+ try {
1606
+ const loginRequestPayload = createJsonRpcRequestPayload(MagicPayloadMethod5.Login, [
1607
+ {
1608
+ enabledWallets: this.sdk.thirdPartyWallets.enabledWallets,
1609
+ ...options
1610
+ }
1611
+ ]);
1612
+ const loginRequest = this.request(loginRequestPayload);
1613
+ this.sdk.thirdPartyWallets.eventListeners.forEach(({ event, callback }) => {
1614
+ loginRequest.on(event, () => callback(loginRequestPayload.id));
1615
+ });
1616
+ loginRequest.on("id-token-created", (params) => {
1617
+ promiEvent.emit("id-token-created", params);
1618
+ });
1619
+ const result = await loginRequest;
1620
+ if (result.error) reject(result);
1621
+ resolve(result);
1622
+ } catch (error) {
1623
+ reject(error);
1624
+ }
1625
+ });
1626
+ return promiEvent;
1627
+ }
1628
+ /* Prompt Magic's Wallet UI (not available for users logged in with third party wallets) */
1629
+ showUI(config) {
1630
+ return this.request(createJsonRpcRequestPayload(MagicPayloadMethod5.ShowUI, [config]));
1631
+ }
1632
+ showAddress() {
1633
+ return this.request(createJsonRpcRequestPayload(MagicPayloadMethod5.ShowAddress));
1634
+ }
1635
+ showSendTokensUI() {
1636
+ return this.request(createJsonRpcRequestPayload(MagicPayloadMethod5.ShowSendTokensUI));
1637
+ }
1638
+ showOnRamp() {
1639
+ return this.request(createJsonRpcRequestPayload(MagicPayloadMethod5.ShowOnRamp));
1640
+ }
1641
+ showNFTs() {
1642
+ return this.request(createJsonRpcRequestPayload(MagicPayloadMethod5.ShowNFTs));
1643
+ }
1644
+ showBalances() {
1645
+ return this.request(createJsonRpcRequestPayload(MagicPayloadMethod5.ShowBalances));
1646
+ }
1647
+ sendGaslessTransaction(address, transaction) {
1648
+ return this.request(
1649
+ createJsonRpcRequestPayload(MagicPayloadMethod5.SendGaslessTransaction, [address, transaction])
1650
+ );
1651
+ }
1652
+ };
1653
+
1654
+ // src/modules/third-party-wallets.ts
1655
+ import {
1656
+ LocalStorageKeys,
1657
+ MagicPayloadMethod as MagicPayloadMethod6
1658
+ } from "@magic-sdk/types";
1659
+ var ThirdPartyWalletsModule = class extends BaseModule {
1660
+ eventListeners = [];
1661
+ enabledWallets = {};
1662
+ isConnected = false;
1663
+ resetThirdPartyWalletState() {
1664
+ localStorage.removeItem(LocalStorageKeys.PROVIDER);
1665
+ localStorage.removeItem(LocalStorageKeys.ADDRESS);
1666
+ localStorage.removeItem(LocalStorageKeys.CHAIN_ID);
1667
+ this.isConnected = false;
1668
+ }
1669
+ requestOverride(payload) {
1670
+ if (payload.method === MagicPayloadMethod6.Login) {
1671
+ this.resetThirdPartyWalletState();
1672
+ return super.request(payload);
1673
+ }
1674
+ if (payload.method === MagicPayloadMethod6.GetInfo) {
1675
+ return this.getInfo(payload);
1676
+ }
1677
+ if (payload.method === MagicPayloadMethod6.IsLoggedIn) {
1678
+ return this.isLoggedIn(payload);
1679
+ }
1680
+ if (payload.method === MagicPayloadMethod6.Logout) {
1681
+ return this.logout(payload);
1682
+ }
1683
+ switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {
1684
+ case "web3modal":
1685
+ return this.web3modalRequest(payload);
1686
+ // Fallback to default request
1687
+ default:
1688
+ this.resetThirdPartyWalletState();
1689
+ return super.request(payload);
1690
+ }
1691
+ }
1692
+ /* Core Method Overrides */
1693
+ isLoggedIn(payload) {
1694
+ switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {
1695
+ case "web3modal":
1696
+ return this.web3modalIsLoggedIn();
1697
+ default:
1698
+ this.resetThirdPartyWalletState();
1699
+ return super.request(payload);
1700
+ }
1701
+ }
1702
+ getInfo(payload) {
1703
+ switch (localStorage.getItem(LocalStorageKeys.PROVIDER)) {
1704
+ case "web3modal":
1705
+ return this.web3modalGetInfo();
1706
+ default:
1707
+ this.resetThirdPartyWalletState();
1708
+ return super.request(payload);
1709
+ }
1710
+ }
1711
+ logout(payload) {
1712
+ const provider = localStorage.getItem(LocalStorageKeys.PROVIDER);
1713
+ this.resetThirdPartyWalletState();
1714
+ switch (provider) {
1715
+ case "web3modal": {
1716
+ return this.web3modalLogout();
1717
+ }
1718
+ default:
1719
+ return super.request(payload);
1720
+ }
1721
+ }
1722
+ /* Web3Modal Methods */
1723
+ web3modalRequest(payload) {
1724
+ return createPromiEvent((resolve, reject) => {
1725
+ this.sdk.web3modal.modal.getWalletProvider().request(payload).then(resolve).catch(reject);
1726
+ });
1727
+ }
1728
+ web3modalIsLoggedIn() {
1729
+ return createPromiEvent((resolve) => {
1730
+ const walletStatus = this.sdk.web3modal.modal.getStatus();
1731
+ if (walletStatus === "connected") {
1732
+ resolve(true);
1733
+ }
1734
+ if (walletStatus === "disconnected") {
1735
+ this.resetThirdPartyWalletState();
1736
+ resolve(false);
1737
+ }
1738
+ if (walletStatus === "reconnecting") {
1739
+ const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {
1740
+ if (status === "connected") {
1741
+ unsubscribeFromProviderEvents();
1742
+ resolve(true);
1743
+ }
1744
+ if (status === "disconnected") {
1745
+ unsubscribeFromProviderEvents();
1746
+ this.resetThirdPartyWalletState();
1747
+ resolve(false);
1748
+ }
1749
+ });
1750
+ }
1751
+ });
1752
+ }
1753
+ formatWeb3modalGetInfoResponse() {
1754
+ const walletType = this.sdk.web3modal.modal.getWalletInfo()?.name;
1755
+ const userAddress = this.sdk.web3modal.modal.getAddress();
1756
+ return {
1757
+ publicAddress: userAddress,
1758
+ email: null,
1759
+ issuer: `did:ethr:${userAddress}`,
1760
+ phoneNumber: null,
1761
+ isMfaEnabled: false,
1762
+ recoveryFactors: [],
1763
+ walletType: walletType || "web3modal",
1764
+ firstLoginAt: null
1765
+ };
1766
+ }
1767
+ web3modalGetInfo() {
1768
+ return createPromiEvent((resolve, reject) => {
1769
+ const walletStatus = this.sdk.web3modal.modal.getStatus();
1770
+ if (walletStatus === "connected") {
1771
+ resolve(this.formatWeb3modalGetInfoResponse());
1772
+ }
1773
+ if (walletStatus === "disconnected") {
1774
+ this.resetThirdPartyWalletState();
1775
+ reject("Magic RPC Error: [-32603] Internal error: User denied account access.");
1776
+ }
1777
+ if (walletStatus === "reconnecting") {
1778
+ const unsubscribeFromProviderEvents = this.sdk.web3modal.modal.subscribeProvider(({ status }) => {
1779
+ if (status === "connected") {
1780
+ unsubscribeFromProviderEvents();
1781
+ resolve(this.formatWeb3modalGetInfoResponse());
1782
+ }
1783
+ if (status === "disconnected") {
1784
+ unsubscribeFromProviderEvents();
1785
+ this.resetThirdPartyWalletState();
1786
+ reject("Magic RPC Error: [-32603] Internal error: User denied account access.");
1787
+ }
1788
+ });
1789
+ }
1790
+ });
1791
+ }
1792
+ web3modalLogout() {
1793
+ return createPromiEvent(async (resolve) => {
1794
+ try {
1795
+ await this.sdk.web3modal.modal.disconnect();
1796
+ } catch (error) {
1797
+ console.error(error);
1798
+ }
1799
+ resolve(true);
1800
+ });
1801
+ }
1802
+ };
1803
+
1804
+ // src/modules/rpc-provider.ts
1805
+ import {
1806
+ MagicOutgoingWindowMessage as MagicOutgoingWindowMessage2,
1807
+ MagicPayloadMethod as MagicPayloadMethod7
1808
+ } from "@magic-sdk/types";
1809
+ var { createBoundEmitterMethod, createChainingEmitterMethod } = createTypedEmitter();
1810
+ var RPCProviderModule = class extends BaseModule {
1811
+ // Implements EIP 1193:
1812
+ // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md
1813
+ isMagic = true;
1814
+ sendAsync(payload, onRequestComplete) {
1815
+ if (!onRequestComplete) {
1816
+ throw createInvalidArgumentError({
1817
+ procedure: "Magic.rpcProvider.sendAsync",
1818
+ argument: 1,
1819
+ expected: "function",
1820
+ received: onRequestComplete === null ? "null" : typeof onRequestComplete
1821
+ });
1822
+ }
1823
+ if (Array.isArray(payload)) {
1824
+ this.overlay.post(
1825
+ MagicOutgoingWindowMessage2.MAGIC_HANDLE_REQUEST,
1826
+ payload.map((p) => {
1827
+ const standardizedPayload = standardizeJsonRpcRequestPayload(p);
1828
+ this.prefixPayloadMethodForTestMode(standardizedPayload);
1829
+ return standardizedPayload;
1830
+ })
1831
+ ).then((batchResponse) => {
1832
+ onRequestComplete(
1833
+ null,
1834
+ batchResponse.map((response) => ({
1835
+ ...response.payload,
1836
+ error: response.hasError ? new MagicRPCError(response.payload.error) : null
1837
+ }))
1838
+ );
1839
+ });
1840
+ } else {
1841
+ const finalPayload = standardizeJsonRpcRequestPayload(payload);
1842
+ this.prefixPayloadMethodForTestMode(finalPayload);
1843
+ this.overlay.post(MagicOutgoingWindowMessage2.MAGIC_HANDLE_REQUEST, finalPayload).then((response) => {
1844
+ onRequestComplete(
1845
+ response.hasError ? new MagicRPCError(response.payload.error) : null,
1846
+ response.payload
1847
+ );
1848
+ });
1849
+ }
1850
+ }
1851
+ send(payloadOrMethod, onRequestCompleteOrParams) {
1852
+ if (typeof payloadOrMethod === "string") {
1853
+ const payload = createJsonRpcRequestPayload(
1854
+ payloadOrMethod,
1855
+ Array.isArray(onRequestCompleteOrParams) ? onRequestCompleteOrParams : []
1856
+ );
1857
+ return this.request(payload);
1858
+ }
1859
+ if (Array.isArray(payloadOrMethod) || !!onRequestCompleteOrParams) {
1860
+ this.sendAsync(payloadOrMethod, onRequestCompleteOrParams);
1861
+ return;
1862
+ }
1863
+ const warning = createSynchronousWeb3MethodWarning();
1864
+ warning.log();
1865
+ return new JsonRpcResponse(payloadOrMethod).applyError({
1866
+ code: -32603,
1867
+ message: warning.rawMessage
1868
+ }).payload;
1869
+ }
1870
+ enable() {
1871
+ const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod7.Login);
1872
+ return this.request(requestPayload);
1873
+ }
1874
+ /**
1875
+ * Here, we wrap `BaseModule.request` with an additional check
1876
+ * to determine if the RPC method requires a test-mode prefix.
1877
+ */
1878
+ request(payload) {
1879
+ this.prefixPayloadMethodForTestMode(payload);
1880
+ return super.request(payload);
1881
+ }
1882
+ /**
1883
+ * Prefixes Ethereum RPC methods with a `testMode` identifier. This is done so
1884
+ * that Magic's <iframe> can handle signing methods using test-specific keys.
1885
+ */
1886
+ prefixPayloadMethodForTestMode(payload) {
1887
+ const testModePrefix = "testMode/eth/";
1888
+ if (this.sdk.testMode) {
1889
+ payload.method = `${testModePrefix}${payload.method}`;
1890
+ }
1891
+ }
1892
+ on = createChainingEmitterMethod("on", this);
1893
+ once = createChainingEmitterMethod("once", this);
1894
+ addListener = createChainingEmitterMethod("addListener", this);
1895
+ off = createChainingEmitterMethod("off", this);
1896
+ removeListener = createChainingEmitterMethod("removeListener", this);
1897
+ removeAllListeners = createChainingEmitterMethod("removeAllListeners", this);
1898
+ emit = createBoundEmitterMethod("emit");
1899
+ eventNames = createBoundEmitterMethod("eventNames");
1900
+ listeners = createBoundEmitterMethod("listeners");
1901
+ listenerCount = createBoundEmitterMethod("listenerCount");
1902
+ };
1903
+
1904
+ // src/modules/base-extension.ts
1905
+ var sdkAccessFields = ["request", "overlay", "sdk"];
1906
+ function getPrototypeChain(instance) {
1907
+ let currentProto = Object.getPrototypeOf(instance);
1908
+ const protos = [currentProto];
1909
+ while (currentProto !== BaseModule.prototype) {
1910
+ currentProto = Object.getPrototypeOf(currentProto);
1911
+ protos.push(currentProto);
1912
+ }
1913
+ return protos;
1914
+ }
1915
+ var BaseExtension = class extends BaseModule {
1916
+ /**
1917
+ * A structure describing the platform and version compatibility of this
1918
+ * extension.
1919
+ */
1920
+ compat;
1921
+ __sdk_access_field_descriptors__ = /* @__PURE__ */ new Map();
1922
+ __is_initialized__ = false;
1923
+ utils = {
1924
+ createPromiEvent,
1925
+ isPromiEvent,
1926
+ encodeJSON,
1927
+ decodeJSON,
1928
+ createJsonRpcRequestPayload,
1929
+ standardizeJsonRpcRequestPayload,
1930
+ storage: storage_exports
1931
+ };
1932
+ constructor() {
1933
+ super(void 0);
1934
+ const allSources = [this, ...getPrototypeChain(this)];
1935
+ sdkAccessFields.forEach((prop) => {
1936
+ const allDescriptors = allSources.map((source) => Object.getOwnPropertyDescriptor(source, prop));
1937
+ const sourceIndex = allDescriptors.findIndex((x) => Boolean(x));
1938
+ const isPrototypeField = sourceIndex > 0;
1939
+ const descriptor = allDescriptors[sourceIndex];
1940
+ if (descriptor) {
1941
+ this.__sdk_access_field_descriptors__.set(prop, { descriptor, isPrototypeField });
1942
+ Object.defineProperty(this, prop, {
1943
+ configurable: true,
1944
+ get: () => {
1945
+ throw createExtensionNotInitializedError(prop);
1946
+ }
1947
+ });
1948
+ }
1949
+ });
1950
+ }
1951
+ /**
1952
+ * Registers a Magic SDK instance with this Extension.
1953
+ *
1954
+ * @internal
1955
+ */
1956
+ init(sdk) {
1957
+ if (this.__is_initialized__) return;
1958
+ sdkAccessFields.forEach((prop) => {
1959
+ if (this.__sdk_access_field_descriptors__.has(prop)) {
1960
+ const { descriptor, isPrototypeField } = this.__sdk_access_field_descriptors__.get(prop);
1961
+ if (isPrototypeField) {
1962
+ delete this[prop];
1963
+ } else {
1964
+ Object.defineProperty(this, prop, descriptor);
1965
+ }
1966
+ }
1967
+ });
1968
+ this.sdk = sdk;
1969
+ this.__is_initialized__ = true;
1970
+ }
1971
+ /**
1972
+ * Creates a deprecation warning wrapped with a native Magic SDK warning type.
1973
+ * Best practice is to warn users of upcoming deprecations at least one major
1974
+ * version before the change is implemented. You can use this method to
1975
+ * communicate deprecations in a manner consistent with Magic SDK core code.
1976
+ */
1977
+ createDeprecationWarning(options) {
1978
+ const { method, removalVersion, useInstead } = options;
1979
+ const useInsteadSuffix = useInstead ? ` Use \`${useInstead}\` instead.` : "";
1980
+ const message = `\`${method}\` will be removed from this Extension in version \`${removalVersion}\`.${useInsteadSuffix}`;
1981
+ return new MagicExtensionWarning(this, "DEPRECATION_NOTICE", message);
1982
+ }
1983
+ /**
1984
+ * Creates a warning wrapped with a native Magic SDK warning type. This
1985
+ * maintains consistency in warning messaging for consumers of Magic SDK and
1986
+ * this Extension.
1987
+ */
1988
+ createWarning(code, message) {
1989
+ return new MagicExtensionWarning(this, code, message);
1990
+ }
1991
+ /**
1992
+ * Creates an error wrapped with a native Magic SDK error type. This maintains
1993
+ * consistency in error handling for consumers of Magic SDK and this
1994
+ * Extension.
1995
+ */
1996
+ createError(code, message, data) {
1997
+ return new MagicExtensionError(this, code, message, data);
1998
+ }
1999
+ };
2000
+ var InternalExtension = class extends BaseExtension {
2001
+ };
2002
+ var Extension = class {
2003
+ /**
2004
+ * This is a special constructor used to mark "official" extensions. These
2005
+ * extensions are designed for special interaction with the Magic iframe using
2006
+ * custom JSON RPC methods, business logic, and global configurations. This is
2007
+ * intended for internal-use only (and provides no useful advantage to
2008
+ * open-source extension developers over the regular `Extension` class).
2009
+ *
2010
+ * @internal
2011
+ */
2012
+ static Internal = InternalExtension;
2013
+ };
2014
+
2015
+ // src/modules/nft.ts
2016
+ import {
2017
+ MagicPayloadMethod as MagicPayloadMethod8,
2018
+ NftCheckoutIntermediaryEvents
2019
+ } from "@magic-sdk/types";
2020
+ var NFTModule = class extends BaseModule {
2021
+ /* Start an NFT Purchase flow with Sardine */
2022
+ purchase(options) {
2023
+ const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod8.NFTPurchase, [options]);
2024
+ return this.request(requestPayload);
2025
+ }
2026
+ /* Start an NFT Checkout flow with Paypal */
2027
+ checkout(options) {
2028
+ const isThirdPartyWalletConnected = this.sdk.thirdPartyWallets.isConnected;
2029
+ const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod8.NFTCheckout, [
2030
+ {
2031
+ ...options,
2032
+ walletProvider: isThirdPartyWalletConnected ? "web3modal" : "magic"
2033
+ }
2034
+ ]);
2035
+ const promiEvent = this.request(requestPayload);
2036
+ if (isThirdPartyWalletConnected) {
2037
+ promiEvent.on(NftCheckoutIntermediaryEvents.Initiated, async (rawTransaction) => {
2038
+ try {
2039
+ const hash = await this.request({
2040
+ method: "eth_sendTransaction",
2041
+ params: [rawTransaction]
2042
+ });
2043
+ this.createIntermediaryEvent(NftCheckoutIntermediaryEvents.Success, requestPayload.id)(hash);
2044
+ } catch (error) {
2045
+ this.createIntermediaryEvent(NftCheckoutIntermediaryEvents.Failure, requestPayload.id)();
2046
+ }
2047
+ });
2048
+ promiEvent.on(NftCheckoutIntermediaryEvents.Disconnect, () => {
2049
+ this.sdk.thirdPartyWallets.resetThirdPartyWalletState();
2050
+ promiEvent.emit("disconnect");
2051
+ });
2052
+ }
2053
+ return promiEvent;
2054
+ }
2055
+ /* Start an NFT Transfer flow */
2056
+ transfer(options) {
2057
+ const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod8.NFTTransfer, [options]);
2058
+ return this.request(requestPayload);
2059
+ }
2060
+ };
2061
+
2062
+ // src/core/sdk.ts
2063
+ function checkExtensionCompat(ext) {
2064
+ if (ext.compat && ext.compat[SDKEnvironment.sdkName] != null) {
2065
+ return typeof ext.compat[SDKEnvironment.sdkName] === "string" ? satisfies(coerce(SDKEnvironment.version), ext.compat[SDKEnvironment.sdkName]) : !!ext.compat[SDKEnvironment.sdkName];
2066
+ }
2067
+ return true;
2068
+ }
2069
+ function getNetworkHash(apiKey, network, extConfig) {
2070
+ if (!network && !extConfig) {
2071
+ return `${apiKey}_eth_mainnet`;
2072
+ }
2073
+ if (extConfig) {
2074
+ return `${apiKey}_${JSON.stringify(extConfig)}`;
2075
+ }
2076
+ if (network) {
2077
+ if (typeof network === "string") {
2078
+ return `${apiKey}_eth_${network}`;
2079
+ }
2080
+ return `${apiKey}_${network.rpcUrl}_${network.chainId}_${network.chainType}`;
2081
+ }
2082
+ return `${apiKey}_unknown`;
2083
+ }
2084
+ function prepareExtensions(options) {
2085
+ const extensions = options?.extensions ?? [];
2086
+ const extConfig = {};
2087
+ const incompatibleExtensions = [];
2088
+ if (Array.isArray(extensions)) {
2089
+ extensions.forEach((ext) => {
2090
+ if (checkExtensionCompat(ext)) {
2091
+ ext.init(this);
2092
+ if (ext.name) {
2093
+ this[ext.name] = ext;
2094
+ }
2095
+ if (ext instanceof Extension.Internal) {
2096
+ if (!isEmpty(ext.config)) extConfig[ext.name] = ext.config;
2097
+ }
2098
+ } else {
2099
+ incompatibleExtensions.push(ext);
2100
+ }
2101
+ });
2102
+ } else {
2103
+ Object.keys(extensions).forEach((name) => {
2104
+ if (checkExtensionCompat(extensions[name])) {
2105
+ extensions[name].init(this);
2106
+ const ext = extensions[name];
2107
+ this[name] = ext;
2108
+ if (ext instanceof Extension.Internal) {
2109
+ if (!isEmpty(ext.config)) extConfig[extensions[name].name] = ext.config;
2110
+ }
2111
+ } else {
2112
+ incompatibleExtensions.push(extensions[name]);
2113
+ }
2114
+ });
2115
+ }
2116
+ if (incompatibleExtensions.length) {
2117
+ throw createIncompatibleExtensionsError(incompatibleExtensions);
2118
+ }
2119
+ return extConfig;
2120
+ }
2121
+ var SDKBase = class _SDKBase {
2122
+ /**
2123
+ * Creates an instance of Magic SDK.
2124
+ */
2125
+ constructor(apiKey, options) {
2126
+ this.apiKey = apiKey;
2127
+ if (!apiKey) throw createMissingApiKeyError();
2128
+ if (SDKEnvironment.platform === "react-native" && options?.endpoint) {
2129
+ createReactNativeEndpointConfigurationWarning().log();
2130
+ }
2131
+ const { defaultEndpoint, version } = SDKEnvironment;
2132
+ this.testMode = !!options?.testMode;
2133
+ this.useStorageCache = !!options?.useStorageCache;
2134
+ this.endpoint = createURL(options?.endpoint ?? defaultEndpoint).origin;
2135
+ this.auth = new AuthModule(this);
2136
+ this.user = new UserModule(this);
2137
+ this.wallet = new WalletModule(this);
2138
+ this.nft = new NFTModule(this);
2139
+ this.thirdPartyWallets = new ThirdPartyWalletsModule(this);
2140
+ this.rpcProvider = new RPCProviderModule(this);
2141
+ const extConfig = prepareExtensions.call(this, options);
2142
+ this.parameters = encodeJSON({
2143
+ API_KEY: this.apiKey,
2144
+ DOMAIN_ORIGIN: window.location ? window.location.origin : "",
2145
+ ETH_NETWORK: options?.network,
2146
+ host: createURL(this.endpoint).host,
2147
+ sdk: sdkNameToEnvName[SDKEnvironment.sdkName],
2148
+ version,
2149
+ ext: isEmpty(extConfig) ? void 0 : extConfig,
2150
+ locale: options?.locale || "en_US",
2151
+ authConfig: options?.authConfig ? { ...options.authConfig } : void 0,
2152
+ ...SDKEnvironment.bundleId ? { bundleId: SDKEnvironment.bundleId } : {},
2153
+ meta: options?.meta
2154
+ });
2155
+ this.networkHash = getNetworkHash(this.apiKey, options?.network, isEmpty(extConfig) ? void 0 : extConfig);
2156
+ if (!options?.deferPreload) this.preload();
2157
+ }
2158
+ static __overlays__ = /* @__PURE__ */ new Map();
2159
+ endpoint;
2160
+ parameters;
2161
+ networkHash;
2162
+ testMode;
2163
+ useStorageCache;
2164
+ /**
2165
+ * Contains methods for starting a Magic SDK authentication flow.
2166
+ */
2167
+ auth;
2168
+ /**
2169
+ * Contains methods for interacting with user data, checking login
2170
+ * status, generating cryptographically-secure ID tokens, and more.
2171
+ */
2172
+ user;
2173
+ /**
2174
+ * Contains methods previously under the `ConnectExtension`, including
2175
+ * login, show wallet UI, request user info, and more.
2176
+ */
2177
+ wallet;
2178
+ /**
2179
+ * Contains methods for interacting with NFTs, including purchase.
2180
+ */
2181
+ nft;
2182
+ /**
2183
+ * Contains internal methods for third-party wallets.
2184
+ */
2185
+ thirdPartyWallets;
2186
+ /**
2187
+ * Contains a Web3-compliant provider. Pass this module to your Web3/Ethers
2188
+ * instance for automatic compatibility with Ethereum methods.
2189
+ */
2190
+ rpcProvider;
2191
+ /**
2192
+ * Represents the view controller associated with this `MagicSDK` instance.
2193
+ */
2194
+ get overlay() {
2195
+ if (!_SDKBase.__overlays__.has(this.parameters)) {
2196
+ const controller = new SDKEnvironment.ViewController(this.endpoint, this.parameters, this.networkHash);
2197
+ controller.init();
2198
+ _SDKBase.__overlays__.set(this.parameters, controller);
2199
+ }
2200
+ return _SDKBase.__overlays__.get(this.parameters);
2201
+ }
2202
+ /**
2203
+ * Preloads the Magic view, allowing for faster initial requests in browser
2204
+ * environments. Awaiting the returned promise will signal when the Magic view
2205
+ * has completed loading and is ready for requests.
2206
+ */
2207
+ async preload() {
2208
+ await this.overlay.waitForReady();
2209
+ }
2210
+ };
2211
+
2212
+ // src/core/view-controller.ts
2213
+ import {
2214
+ MagicIncomingWindowMessage as MagicIncomingWindowMessage2,
2215
+ MagicOutgoingWindowMessage as MagicOutgoingWindowMessage3,
2216
+ SDKWarningCode as SDKWarningCode2
2217
+ } from "@magic-sdk/types";
2218
+
2219
+ // src/util/view-controller-utils.ts
2220
+ function getRequestPayloadFromBatch(requestPayload, id) {
2221
+ return id && Array.isArray(requestPayload) ? requestPayload.find((p) => p.id === id) : requestPayload;
2222
+ }
2223
+ function standardizeResponse(requestPayload, event) {
2224
+ const id = event.data.response?.id;
2225
+ const requestPayloadResolved = getRequestPayloadFromBatch(requestPayload, id);
2226
+ if (id && requestPayloadResolved) {
2227
+ const response = new JsonRpcResponse(requestPayloadResolved).applyResult(event.data.response.result).applyError(event.data.response.error);
2228
+ return { id, response };
2229
+ }
2230
+ return {};
2231
+ }
2232
+ async function createMagicRequest(msgType, payload, networkHash) {
2233
+ const rt = await getItem("rt");
2234
+ let jwt;
2235
+ if (SDKEnvironment.platform === "web") {
2236
+ try {
2237
+ jwt = await getItem("jwt") ?? await createJwt();
2238
+ } catch (e) {
2239
+ console.error("webcrypto error", e);
2240
+ }
2241
+ }
2242
+ const request = { msgType, payload };
2243
+ if (jwt) {
2244
+ request.jwt = jwt;
2245
+ }
2246
+ if (jwt && rt) {
2247
+ request.rt = rt;
2248
+ }
2249
+ const decryptedDeviceShare = await getDecryptedDeviceShare(networkHash);
2250
+ if (decryptedDeviceShare) {
2251
+ request.deviceShare = decryptedDeviceShare;
2252
+ }
2253
+ return request;
2254
+ }
2255
+ async function persistMagicEventRefreshToken(event) {
2256
+ if (!event.data.rt) {
2257
+ return;
2258
+ }
2259
+ await setItem("rt", event.data.rt);
2260
+ }
2261
+ function debounce(func, delay) {
2262
+ let timeoutId = null;
2263
+ return function(...args) {
2264
+ if (timeoutId) {
2265
+ clearTimeout(timeoutId);
2266
+ }
2267
+ timeoutId = setTimeout(() => {
2268
+ func(...args);
2269
+ }, delay);
2270
+ };
2271
+ }
2272
+
2273
+ // src/core/view-controller.ts
2274
+ var SECOND = 1e3;
2275
+ var MINUTE = 60 * SECOND;
2276
+ var PING_INTERVAL = 5 * MINUTE;
2277
+ var INITIAL_HEARTBEAT_DELAY = 60 * MINUTE;
2278
+ var ViewController = class {
2279
+ /**
2280
+ * Create an instance of `ViewController`
2281
+ *
2282
+ * @param endpoint - The URL for the relevant iframe context.
2283
+ * @param parameters - The unique, encoded query parameters for the
2284
+ * relevant iframe context.
2285
+ * @param networkHash - The hash of the network that this sdk instance is connected to
2286
+ * for multi-chain scenarios
2287
+ */
2288
+ constructor(endpoint, parameters, networkHash) {
2289
+ this.endpoint = endpoint;
2290
+ this.parameters = parameters;
2291
+ this.networkHash = networkHash;
2292
+ this.listen();
2293
+ }
2294
+ isReadyForRequest = false;
2295
+ messageHandlers = /* @__PURE__ */ new Set();
2296
+ isConnectedToInternet = true;
2297
+ lastPongTime = null;
2298
+ heartbeatIntervalTimer = null;
2299
+ /* istanbul ignore next */
2300
+ heartbeatDebounce = debounce(() => {
2301
+ if (this.endpoint === "https://auth.magic.link/") {
2302
+ this.heartBeatCheck();
2303
+ }
2304
+ }, INITIAL_HEARTBEAT_DELAY);
2305
+ async post(msgType, payload) {
2306
+ return createPromise(async (resolve, reject) => {
2307
+ if (!this.isConnectedToInternet) {
2308
+ const error = createModalNotReadyError();
2309
+ reject(error);
2310
+ }
2311
+ if (!await this.checkRelayerExistsInDOM()) {
2312
+ this.isReadyForRequest = false;
2313
+ await this.reloadRelayer();
2314
+ }
2315
+ if (!this.isReadyForRequest) {
2316
+ await this.waitForReady();
2317
+ }
2318
+ const batchData = [];
2319
+ const batchIds = Array.isArray(payload) ? payload.map((p) => p.id) : [];
2320
+ const msg = await createMagicRequest(`${msgType}-${this.parameters}`, payload, this.networkHash);
2321
+ await this._post(msg);
2322
+ const acknowledgeResponse = (removeEventListener) => (event) => {
2323
+ const { id, response } = standardizeResponse(payload, event);
2324
+ persistMagicEventRefreshToken(event);
2325
+ if (response?.payload.error?.message === "User denied account access.") {
2326
+ clearDeviceShares();
2327
+ } else if (event.data.deviceShare) {
2328
+ const { deviceShare } = event.data;
2329
+ encryptAndPersistDeviceShare(deviceShare, this.networkHash);
2330
+ }
2331
+ if (id && response && Array.isArray(payload) && batchIds.includes(id)) {
2332
+ batchData.push(response);
2333
+ if (batchData.length === payload.length) {
2334
+ removeEventListener();
2335
+ resolve(batchData);
2336
+ }
2337
+ } else if (id && response && !Array.isArray(payload) && id === payload.id) {
2338
+ removeEventListener();
2339
+ resolve(response);
2340
+ }
2341
+ };
2342
+ const removeResponseListener = this.on(
2343
+ MagicIncomingWindowMessage2.MAGIC_HANDLE_RESPONSE,
2344
+ acknowledgeResponse(() => removeResponseListener())
2345
+ );
2346
+ });
2347
+ }
2348
+ /**
2349
+ * Listen for events received with the given `msgType`.
2350
+ *
2351
+ * @param msgType - The `msgType` encoded with the event data.
2352
+ * @param handler - A handler function to execute on each event received.
2353
+ * @return A `void` function to remove the attached event.
2354
+ */
2355
+ on(msgType, handler) {
2356
+ const boundHandler = handler.bind(window);
2357
+ const listener = (event) => {
2358
+ if (event.data.msgType === `${msgType}-${this.parameters}`) boundHandler(event);
2359
+ };
2360
+ this.messageHandlers.add(listener);
2361
+ return () => this.messageHandlers.delete(listener);
2362
+ }
2363
+ waitForReady() {
2364
+ return new Promise((resolve) => {
2365
+ const unsubscribe = this.on(MagicIncomingWindowMessage2.MAGIC_OVERLAY_READY, () => {
2366
+ this.isReadyForRequest = true;
2367
+ resolve();
2368
+ unsubscribe();
2369
+ });
2370
+ });
2371
+ }
2372
+ /**
2373
+ * Listen for messages sent from the underlying Magic `<WebView>`.
2374
+ */
2375
+ listen() {
2376
+ this.on(MagicIncomingWindowMessage2.MAGIC_HIDE_OVERLAY, () => {
2377
+ this.hideOverlay();
2378
+ });
2379
+ this.on(MagicIncomingWindowMessage2.MAGIC_SHOW_OVERLAY, () => {
2380
+ this.showOverlay();
2381
+ });
2382
+ this.on(MagicIncomingWindowMessage2.MAGIC_SEND_PRODUCT_ANNOUNCEMENT, (event) => {
2383
+ if (event.data.response.result.product_announcement) {
2384
+ new MagicSDKWarning(SDKWarningCode2.ProductAnnouncement, event.data.response.result.product_announcement).log();
2385
+ }
2386
+ });
2387
+ }
2388
+ /**
2389
+ * Sends periodic pings to check the connection.
2390
+ * If no pong is received or it’s stale, the iframe is reloaded.
2391
+ */
2392
+ /* istanbul ignore next */
2393
+ heartBeatCheck() {
2394
+ let firstPing = true;
2395
+ const sendPing = async () => {
2396
+ const message = {
2397
+ msgType: `${MagicOutgoingWindowMessage3.MAGIC_PING}-${this.parameters}`,
2398
+ payload: []
2399
+ };
2400
+ await this._post(message);
2401
+ };
2402
+ this.heartbeatIntervalTimer = setInterval(async () => {
2403
+ if (!this.lastPongTime) {
2404
+ if (!firstPing) {
2405
+ this.reloadRelayer();
2406
+ firstPing = true;
2407
+ return;
2408
+ }
2409
+ } else {
2410
+ const timeSinceLastPong = Date.now() - this.lastPongTime;
2411
+ if (timeSinceLastPong > PING_INTERVAL * 2) {
2412
+ this.reloadRelayer();
2413
+ firstPing = true;
2414
+ return;
2415
+ }
2416
+ }
2417
+ await sendPing();
2418
+ firstPing = false;
2419
+ }, PING_INTERVAL);
2420
+ }
2421
+ // Debounce revival mechanism
2422
+ // Kill any existing PingPong interval
2423
+ /* istanbul ignore next */
2424
+ stopHeartBeat() {
2425
+ this.heartbeatDebounce();
2426
+ this.lastPongTime = null;
2427
+ if (this.heartbeatIntervalTimer) {
2428
+ clearInterval(this.heartbeatIntervalTimer);
2429
+ this.heartbeatIntervalTimer = null;
2430
+ }
2431
+ }
2432
+ };
2433
+ export {
2434
+ Extension,
2435
+ MagicExtensionError,
2436
+ MagicExtensionWarning,
2437
+ MagicRPCError,
2438
+ MagicSDKError,
2439
+ MagicSDKWarning,
2440
+ SDKBase,
2441
+ STORE_KEY_PRIVATE_KEY,
2442
+ STORE_KEY_PUBLIC_JWK,
2443
+ TypedEmitter,
2444
+ ViewController,
2445
+ clearKeys,
2446
+ createDeprecationWarning,
2447
+ createDuplicateIframeWarning,
2448
+ createExtensionNotInitializedError,
2449
+ createIncompatibleExtensionsError,
2450
+ createInvalidArgumentError,
2451
+ createJwt,
2452
+ createMalformedResponseError,
2453
+ createMissingApiKeyError,
2454
+ createModalNotReadyError,
2455
+ createPromiEvent,
2456
+ createPromise,
2457
+ createReactNativeEndpointConfigurationWarning,
2458
+ createSDK,
2459
+ createSynchronousWeb3MethodWarning,
2460
+ createTypedEmitter,
2461
+ createURL,
2462
+ decodeJSON,
2463
+ encodeJSON,
2464
+ getPayloadId,
2465
+ isEmpty,
2466
+ isJsonRpcErrorCode,
2467
+ isJsonRpcRequestPayload,
2468
+ isJsonRpcResponsePayload,
2469
+ isMagicPayloadMethod,
2470
+ isMajorVersionAtLeast,
2471
+ isPromiEvent,
2472
+ isWebCryptoSupported,
2473
+ storage_exports as storage,
2474
+ uuid
2475
+ };
6
2476
  //# sourceMappingURL=index.mjs.map