@magic-sdk/provider 29.4.0-canary.909.16508960405.0 → 29.5.0-canary.912.16608102586.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/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/es/index.js +1 -1
- package/dist/es/index.js.map +2 -2
- package/dist/es/index.mjs +1 -1
- package/dist/es/index.mjs.map +2 -2
- package/package.json +3 -3
package/dist/es/index.js
CHANGED
|
@@ -2,5 +2,5 @@ var zt=Object.create;var Ne=Object.defineProperty;var Yt=Object.getOwnPropertyDe
|
|
|
2
2
|
- Extension \`${t.name}\` supports version(s) \`${s}\``:s||(e+=`
|
|
3
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
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};
|
|
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){if(!e&&!t)return`${r}_eth_mainnet`;if(t)return`${r}_${JSON.stringify(t)}`;if(e){if(typeof e=="string")return`${r}_eth_${e}`;if(typeof e=="object"&&"rpcUrl"in e)return`${r}_${e.rpcUrl}_${e.chainId}_${e.chainType}`}return`${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};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|