@privy-io/react-auth 1.52.1 → 1.52.2-beta-20231221232708
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/esm/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/esm/index.js
CHANGED
|
@@ -2503,4 +2503,4 @@ You will need this password to access your ${e} wallet on a new device. Please k
|
|
|
2503
2503
|
opacity: 1;
|
|
2504
2504
|
}
|
|
2505
2505
|
}
|
|
2506
|
-
`;import{jsx as Ge,jsxs as Bm}from"react/jsx-runtime";var S0={["LANDING"]:tu,["AWAITING_PASSWORDLESS_CODE"]:fd,["AWAITING_CONNECTION"]:_d,["AWAITING_CONNECT_ONLY_CONNECTION"]:Id,["PHANTOM_INTERSTITIAL_SCREEN"]:_m,["LOGIN_FAILED_SCREEN"]:lu,["AWAITING_OAUTH_SCREEN"]:Pm,["ALLOWLIST_REJECTION_SCREEN"]:td,["INSTALL_PHANTOM_SCREEN"]:Mp,["LINK_EMAIL_SCREEN"]:ou,["LINK_PHONE_SCREEN"]:ru,["LINK_WALLET_SCREEN"]:nu,["CONNECT_ONLY_LANDING_SCREEN"]:xd,["CONNECT_ONLY_AUTHENTICATED_SCREEN"]:bd,["EMBEDDED_WALLET_ON_ACCOUNT_CREATE_SCREEN"]:gp,["EMBEDDED_WALLET_CREATED_SCREEN"]:Fd,["EMBEDDED_WALLET_CONNECTING_SCREEN"]:Dd,["EMBEDDED_WALLET_RECOVERY_SCREEN"]:Cp,["EMBEDDED_WALLET_KEY_EXPORT_SCREEN"]:zd,["EMBEDDED_WALLET_SIGN_REQUEST_SCREEN"]:Nm,["EMBEDDED_WALLET_SEND_TRANSACTION_SCREEN"]:Mm,["FIAT_ON_RAMP_PROMPT_SCREEN"]:Sp,["FIAT_ON_RAMP_STATUS_SCREEN"]:kp,["EMBEDDED_WALLET_PASSWORD_UPDATE_SPLASH_SCREEN"]:wp,["EMBEDDED_WALLET_PASSWORD_UPDATE_SCREEN"]:vp,["MFA_ENROLLMENT_FLOW_SCREEN"]:Ou},_0=({isMfaVerifying:e,onMfaVerificationComplete:t})=>{let{ready:o}=z(),{ready:r,currentScreen:n}=S(),i=P0(null),a=$c(i);if((!o||!r)&&n!=="AWAITING_OAUTH_SCREEN")return Bm(Or,{children:[Ge(T,{}),Ge(j,{}),Ge(gu,{children:Ge(Lt,{})}),Ge(K,{}),Ge(Y,{})]});if(!n)return null;let s=S0[n];return s?Ge(Or,{style:{height:a},children:Bm("div",{ref:i,children:[Ge(Jt,{if:!!e,children:Ge(s,{})}),Ge(Jt,{if:!e,children:Ge(vm,{open:e,onClose:t})})]})}):null},Hm=({open:e})=>{let{app:t}=S(),[o,r]=Fm(!1),{gracefulClosePrivyModal:n,onEscape:i}=hu(),[a,s]=Fm(!1);os({onMfaRequired:()=>{t?.mfa.noPromptOnMfaRequired||s(!0)}}),x0(()=>{r(!0)},[]);let l=Ge(Um,{children:Ge(_0,{isMfaVerifying:a,onMfaVerificationComplete:()=>s(!1)})}),c=e||a,u=t?.render.inDialog?Ge("div",{onKeyDown:i,children:Ge(yu,{open:c,id:"privy-dialog",onClick:()=>n(),children:l})}):l;if(o){let y=t?.render.inParentNodeId&&document.getElementById(t.render.inParentNodeId)||document.body;return T0.createPortal(u,y)}return null};var yt={appearance:{theme:"light",accentColor:"#676FFF",walletList:["detected_wallets","metamask","coinbase_wallet","rainbow","wallet_connect"]},walletConnectCloudProjectId:tc,rpcConfig:{rpcUrls:{},rpcTimeouts:{}},captchaEnabled:!1,_render:{inDialog:!0,inParentNodeId:null},fiatOnRamp:{useSandbox:!1}};var k0=new Set(["metamask","coinbase_wallet","rainbow","zerion","phantom","wallet_connect","detected_wallets"]),A0=e=>k0.has(e),R0=(e,t,o)=>o.indexOf(e)===t,Gm=({input:e})=>e?e.filter(A0).filter(R0):yt.appearance.walletList;var zm={id:43114,name:"Avalanche",network:"avalanche",nativeCurrency:{decimals:18,name:"Avalanche",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax.network/ext/bc/C/rpc"]},public:{http:["https://api.avax.network/ext/bc/C/rpc"]}},blockExplorers:{etherscan:{name:"SnowTrace",url:"https://snowtrace.io"},default:{name:"SnowTrace",url:"https://snowtrace.io"}}};var Vm={id:43113,name:"Avalanche Fuji",network:"avalanche-fuji",nativeCurrency:{decimals:18,name:"Avalanche Fuji",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax-test.network/ext/bc/C/rpc"]},public:{http:["https://api.avax-test.network/ext/bc/C/rpc"]}},blockExplorers:{etherscan:{name:"SnowTrace",url:"https://testnet.snowtrace.io"},default:{name:"SnowTrace",url:"https://testnet.snowtrace.io"}},testnet:!0};var $m={id:42220,name:"Celo Mainnet",network:"celo",nativeCurrency:{decimals:18,name:"CELO",symbol:"CELO"},rpcUrls:{default:{http:["https://forno.celo.org"]},infura:{http:["https://celo-mainnet.infura.io/v3"]},public:{http:["https://forno.celo.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/mainnet"},etherscan:{name:"CeloScan",url:"https://celoscan.io"}},testnet:!1};var jm={id:44787,name:"Celo Alfajores Testnet",network:"celo-alfajores",nativeCurrency:{decimals:18,name:"CELO",symbol:"CELO"},rpcUrls:{default:{http:["https://alfajores-forno.celo-testnet.org"]},infura:{http:["https://celo-alfajores.infura.io/v3"]},public:{http:["https://alfajores-forno.celo-testnet.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/alfajores"},etherscan:{name:"CeloScan",url:"https://alfajores.celoscan.io/"}},testnet:!0};var qm={id:314,name:"Filecoin - Mainnet",network:"filecoin-mainnet",nativeCurrency:{decimals:18,name:"filecoin",symbol:"FIL"},rpcUrls:{default:{http:["https://api.node.glif.io/rpc/v1"]},public:{http:["https://api.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filfox",url:"https://filfox.info/en"},filscan:{name:"Filscan",url:"https://filscan.io"},filscout:{name:"Filscout",url:"https://filscout.io/en"},glif:{name:"Glif",url:"https://explorer.glif.io"}}};var Km={id:314159,name:"Filecoin - Calibration testnet",network:"filecoin-calibration",nativeCurrency:{decimals:18,name:"testnet filecoin",symbol:"tFIL"},rpcUrls:{default:{http:["https://api.calibration.node.glif.io/rpc/v1"]},public:{http:["https://api.calibration.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filscan",url:"https://calibration.filscan.io"}}};var Ym={id:5,network:"goerli",name:"Goerli",nativeCurrency:{name:"Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{alchemy:{http:["https://eth-goerli.g.alchemy.com/v2"],webSocket:["wss://eth-goerli.g.alchemy.com/v2"]},infura:{http:["https://goerli.infura.io/v3"],webSocket:["wss://goerli.infura.io/ws/v3"]},default:{http:["https://rpc.ankr.com/eth_goerli"]},public:{http:["https://rpc.ankr.com/eth_goerli"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://goerli.etherscan.io"},default:{name:"Etherscan",url:"https://goerli.etherscan.io"}},testnet:!0};var Jm={id:17e3,name:"Holesky",network:"holesky",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://ethereum-holesky.publicnode.com"]},public:{http:["https://ethereum-holesky.publicnode.com"]}},blockExplorers:{etherscan:{name:"EtherScan",url:"https://holesky.etherscan.io"},default:{name:"EtherScan",url:"https://holesky.etherscan.io"}}};var Qm={id:59144,network:"linea-mainnet",name:"Linea Mainnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{infura:{http:["https://linea-mainnet.infura.io/v3"],webSocket:["wss://linea-mainnet.infura.io/ws/v3"]},default:{http:["https://rpc.linea.build"],webSocket:["wss://rpc.linea.build"]},public:{http:["https://rpc.linea.build"],webSocket:["wss://rpc.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://lineascan.build"},etherscan:{name:"Etherscan",url:"https://lineascan.build"}},testnet:!1};var Zm={id:59140,network:"linea-testnet",name:"Linea Goerli Testnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{infura:{http:["https://linea-goerli.infura.io/v3"],webSocket:["wss://linea-goerli.infura.io/ws/v3"]},default:{http:["https://rpc.goerli.linea.build"],webSocket:["wss://rpc.goerli.linea.build"]},public:{http:["https://rpc.goerli.linea.build"],webSocket:["wss://rpc.goerli.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://goerli.lineascan.build"},etherscan:{name:"Etherscan",url:"https://goerli.lineascan.build"}},testnet:!0};var La={id:1,network:"homestead",name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{alchemy:{http:["https://eth-mainnet.g.alchemy.com/v2"],webSocket:["wss://eth-mainnet.g.alchemy.com/v2"]},infura:{http:["https://mainnet.infura.io/v3"],webSocket:["wss://mainnet.infura.io/ws/v3"]},default:{http:["https://cloudflare-eth.com"]},public:{http:["https://cloudflare-eth.com"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://etherscan.io"},default:{name:"Etherscan",url:"https://etherscan.io"}}};var Xm={id:17001,name:"Redstone Holesky",network:"redstone-holesky",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.holesky.redstone.xyz"]},public:{http:["https://rpc.holesky.redstone.xyz"]}},blockExplorers:{etherscan:{name:"EtherScan",url:"https://explorer.holesky.redstone.xyz"},default:{name:"EtherScan",url:"https://explorer.holesky.redstone.xyz"}}};var ef={id:11155111,network:"sepolia",name:"Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"SEP",decimals:18},rpcUrls:{alchemy:{http:["https://eth-sepolia.g.alchemy.com/v2"],webSocket:["wss://eth-sepolia.g.alchemy.com/v2"]},infura:{http:["https://sepolia.infura.io/v3"],webSocket:["wss://sepolia.infura.io/ws/v3"]},default:{http:["https://rpc.sepolia.org"]},public:{http:["https://rpc.sepolia.org"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://sepolia.etherscan.io"},default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}},testnet:!0};var $n=[va,wa,Ca,Ym,ef,La,Pa,xa,Hn,Gn,$m,jm,qm,Km,ba,Ea,Qm,Zm,zm,Vm,Ta,Sa,Jm,Xm],fL=new Set($n.map(e=>e.id));import er from"tinycolor2";var tf="#FFFFFF",I0="#000000",W0=tf,M0="#1E1E1D";function L0(e){return e<.8&&e>.2&&console.warn("Background color is not light or dark enough, which could lead to accessibility issues."),e>.5?"light":"dark"}function Wo(e,t){let o=Math.max(0,Math.min(1,e.toHsl().l+t));return er({...e.toHsl(),l:o})}function of({backgroundTheme:e,accentHex:t,successHex:o="#51BA81",warnHex:r="#FFB74D",errorHex:n="#EC6351",whiteHex:i=tf,blackHex:a=I0}){let s;switch(e){case"light":s=W0;break;case"dark":s=M0;break;default:s=e;break}let l=er(s),c=er(t),u=er(o),y=er(r),C=er(n),m=L0(l.getLuminance()),E=Wo(l,m==="light"?-.04:.11),b=Wo(l,m==="light"?-.88:.87),x=Wo(l,m==="light"?-.77:.75),v=Wo(l,m==="light"?-.43:.45).desaturate(m==="light"?60:20),W=Wo(l,m==="light"?-.08:.25).desaturate(m==="light"?60:20),M=Wo(c,.15),R=Wo(c,-.06),k=er(c.getLuminance()>.5?a:i),A=Wo(u,-.16);return{colorScheme:m,background:l.toHslString(),background2:E.toHslString(),foreground:b.toHslString(),foreground2:x.toHslString(),foreground3:v.toHslString(),foreground4:W.toHslString(),accent:c.toHslString(),accentLight:M.toHslString(),accentDark:R.toHslString(),foregroundAccent:k.toHslString(),success:u.toHslString(),successDark:A.toHslString(),error:C.toHslString(),warn:y.toHslString()}}function Na(e,t){let o=["google","twitter","discord","tiktok","linkedin","github","apple"],r=t?.loginMethods?.filter(H=>o.includes(H)),n,i,a,s,l,c,u,y,C,m;t?.loginMethods?(n=t.loginMethods.includes("email"),i=t.loginMethods.includes("sms"),a=t.loginMethods.includes("wallet"),s=r?.includes("google"),l=r?.includes("twitter"),c=r?.includes("discord"),u=r?.includes("tiktok"),C=r?.includes("github"),y=r?.includes("linkedin"),m=r?.includes("apple")):(n=e.emailAuth,i=e.smsAuth,a=e.walletAuth,s=e.googleOAuth,l=e.twitterOAuth,c=e.discordOAuth,C=e.githubOAuth,u=e.tiktokOAuth,y=e.linkedinOAuth,m=e.appleOAuth);let E=[n,i].filter(Boolean),b=[s,l,c,C,u,y,m].filter(Boolean),x=[a].filter(Boolean);if(E.length+b.length+x.length===0)throw new Error("You must enable at least one login method");let v=t?.appearance?.showWalletLoginFirst!==void 0?t?.appearance?.showWalletLoginFirst:e.showWalletLoginFirst;v&&x.length===0?(console.warn("You should only enable `showWalletLoginFirst` when `wallet` logins are also enabled. `showWalletLoginFirst` has been set to false"),v=!1):!v&&b.length+E.length===0&&(console.warn("You should only disable `showWalletLoginFirst` when `email`, `sms`, or social logins are also enabled. `showWalletLoginFirst` has been set to true"),v=!0);let W=Gm({isWalletLoginEnabled:a,input:t?.appearance?.walletList});if(t?.embeddedWallets?.waitForTransactionConfirmation===!1&&t.embeddedWallets.noPromptOnSignature!==!0)throw new Error("Overriding `config.embeddedWallets.waitForTransactionConfirmation` requires that you also enable `config.embeddedWallets.noPromptOnSignature`");let M=t?.intl?.defaultCountry??"US",{chains:R,defaultChain:k}=N0(t?.additionalChains,t?.supportedChains,t?.defaultChain),A=!!t?.defaultChain||!!t?.supportedChains,L=t?.customAuth?.getCustomAccessToken&&t?.customAuth?.enabled!==!1;return{id:e.id,name:e.name,allowlistConfig:e.allowlistConfig,appearance:{logo:t?.appearance?.logo??e.logoUrl,palette:of({backgroundTheme:t?.appearance?.theme??yt.appearance.theme,accentHex:t?.appearance?.accentColor??e.accentColor??yt.appearance.accentColor}),loginGroupPriority:v?"web3-first":"web2-first",hideDirectWeb2Inputs:!!t?.appearance?.hideDirectWeb2Inputs,walletList:W},loginMethods:{wallet:a,email:n,sms:i,google:s,twitter:l,discord:c,github:C,tiktok:u,linkedin:y,apple:m},legal:{termsAndConditionsUrl:t?.legal?.termsAndConditionsUrl??e.termsAndConditionsUrl,privacyPolicyUrl:t?.legal?.privacyPolicyUrl??e.privacyPolicyUrl},walletConnectCloudProjectId:t?.walletConnectCloudProjectId??e.walletConnectCloudProjectId??yt.walletConnectCloudProjectId,rpcConfig:{rpcUrls:t?.rpcConfig?.rpcUrls??yt.rpcConfig.rpcUrls,rpcTimeouts:t?.rpcConfig?.rpcTimeouts??yt.rpcConfig.rpcTimeouts},chains:R,defaultChain:k,intl:{defaultCountry:M},shouldSwitchChainOnConnect:A,captchaEnabled:e.captchaEnabled??yt.captchaEnabled,captchaSiteKey:e.captchaSiteKey,embeddedWallets:{...e.embeddedWalletConfig,...L?{createOnLogin:"all-users",requireUserPasswordOnCreate:!1,noPromptOnSignature:!0}:{},waitForTransactionConfirmation:!0,priceDisplay:{primary:"fiat-currency",secondary:"native-token"},...t?.embeddedWallets},mfa:{methods:e.mfaMethods??[],noPromptOnMfaRequired:t?.mfa?.noPromptOnMfaRequired??!1},customAuth:L?{enabled:!0,...t.customAuth}:void 0,fiatOnRamp:{enabled:e.fiatOnRampEnabled,useSandbox:t?.fiatOnRamp?.useSandbox??yt.fiatOnRamp.useSandbox},loginConfig:{twitterOAuthOnMobileEnabled:e.twitterOAuthOnMobileEnabled??!1},render:{inDialog:t?._render?.inDialog??yt._render.inDialog,inParentNodeId:t?._render?.inParentNodeId??yt._render.inParentNodeId}}}function rf(e,t){if(!e)return{legacyCreateEmbeddedWalletFlag:t};let{appearance:o,additionalChains:r,supportedChains:n,defaultChain:i,...a}=e;return{...a,...r?{additionalChains:r.map(l=>l.id)}:void 0,...n?{supportedChains:n.map(l=>l.id)}:void 0,...i?{defaultChain:i.id}:void 0,...o?{...o,...o.logo&&typeof o.logo?{logo:"component"}:void 0}:void 0,legacyCreateEmbeddedWalletFlag:t}}function N0(e,t,o){let r;if(e&&t&&console.warn("You should only specify one of `additionalChains` or `supportedChains`. Using `supportedChains`."),t){if(t.length===0)throw new Error("`supportedChains` must contain at least one chain");r=t.map(a=>$n.find(l=>l.id===a.id)??a)}else r=$n.concat(e??[]);let n=t?r[0]:La,i=o??n;if(!r.find(a=>a.id===i.id))throw new Error("`defaultChain` must be included in `supportedChains`");return{chains:r,defaultChain:i}}import{useRef as O0,useEffect as D0}from"react";var Oa=class{constructor(){this.callbacks={}}enqueue(t,o){this.callbacks[t]=o}dequeue(t,o){let r=this.callbacks[o];if(!r)throw new Error(`cannot dequeue ${t} event: no event found for id ${o}`);switch(delete this.callbacks[o],t){case"privy:iframe:ready":return r;case"privy:wallet:create":return r;case"privy:wallet:connect":return r;case"privy:wallet:recover":return r;case"privy:wallet:rpc":return r;case"privy:wallet:set-recovery-password":return r;case"privy:mfa:verify":return r;case"privy:mfa:init-enrollment":return r;case"privy:mfa:submit-enrollment":return r;case"privy:mfa:unenroll":return r;default:throw new Error(`invalid wallet event type ${t}`)}}};async function tr(e,t,o,r,n,i=!1){let a=i,s=async u=>{if(a&&t&&t.length>0){u===(i?0:1)?n("configureMfa","onMfaRequired",t):r.current?.reject(new Ee("missing_or_invalid_mfa","MFA verification failed, retry."));let y=await new Promise((C,m)=>{o.current={resolve:C,reject:m};let E=1e3*60*5;setTimeout(()=>{let b=new Ee("mfa_timeout","Timed out waiting for MFA code");r.current?.reject(b),m(b)},E)});return await e(y)}return await e()},l=4,c=null;for(let u=0;u<l;u++)try{c=await s(u),r.current?.resolve(void 0);break}catch(y){if(y.type==="missing_or_invalid_mfa")a=!0;else throw r.current?.resolve(void 0),y}if(c===null){let u=new Ee("mfa_verification_max_attempts_reached","Max MFA verification attempts reached");throw r.current?.reject(u),u}return c}import{jsx as z0}from"react/jsx-runtime";var U0=function(e){return()=>`id-${e++}`}(0);function F0(e){return typeof e.event=="string"&&/^privy:.+/.test(e.event)}function Gt(e){return e.error!==void 0}var Tt=new Oa,El=new Map,B0=(e,t)=>typeof t=="bigint"?t.toString():t,H0=(e,t)=>`${e}${JSON.stringify(t,B0)}`;function zt(e,t,o){let r=o.contentWindow;if(!r)throw new Error("iframe not initialized");let n=H0(e,t);if(e==="privy:wallet:create"){let a=El.get(n);if(a)return a}let i=new Promise((a,s)=>{let l=U0();Tt.enqueue(l,{resolve:a,reject:s}),r.postMessage({id:l,event:e,data:t},"*")}).finally(()=>{El.delete(n)});return El.set(n,i),i}function G0(e){switch(e.event){case"privy:iframe:ready":let t=Tt.dequeue(e.event,e.id);return Gt(e)?t.reject(new Ee(e.error.type,e.error.message)):t.resolve(e.data);case"privy:wallet:create":let o=Tt.dequeue(e.event,e.id);return Gt(e)?o.reject(new Ee(e.error.type,e.error.message)):o.resolve(e.data);case"privy:wallet:connect":let r=Tt.dequeue(e.event,e.id);return Gt(e)?r.reject(new Ee(e.error.type,e.error.message)):r.resolve(e.data);case"privy:wallet:recover":let n=Tt.dequeue(e.event,e.id);return Gt(e)?n.reject(new Ee(e.error.type,e.error.message)):n.resolve(e.data);case"privy:wallet:rpc":let i=Tt.dequeue(e.event,e.id);return Gt(e)?i.reject(new Ee(e.error.type,e.error.message)):i.resolve(e.data);case"privy:wallet:set-recovery-password":let a=Tt.dequeue(e.event,e.id);return Gt(e)?a.reject(new Ee(e.error.type,e.error.message)):a.resolve(e.data);case"privy:mfa:verify":let s=Tt.dequeue(e.event,e.id);return Gt(e)?s.reject(new Ee(e.error.type,e.error.message)):s.resolve(e.data);case"privy:mfa:init-enrollment":{let l=Tt.dequeue(e.event,e.id);return Gt(e)?l.reject(new Ee(e.error.type,e.error.message)):l.resolve(e.data)}case"privy:mfa:submit-enrollment":{let l=Tt.dequeue(e.event,e.id);return Gt(e)?l.reject(new Ee(e.error.type,e.error.message)):l.resolve(e.data)}case"privy:mfa:unenroll":{let l=Tt.dequeue(e.event,e.id);return Gt(e)?l.reject(new Ee(e.error.type,e.error.message)):l.resolve(e.data)}default:console.warn("Unsupported wallet proxy method:",e)}}function nf(e){let t=O0(null),o=Kc();return D0(()=>{let r=t.current;if(!r)return;function n(c){c&&c.origin===e.origin&&F0(c.data)&&G0(c.data)}let i={create(c){return zt("privy:wallet:create",c,r)},connect(c){return zt("privy:wallet:connect",c,r)},recover(c){return tr(u=>zt("privy:wallet:recover",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)},rpc(c){return tr(u=>zt("privy:wallet:rpc",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},setRecoveryPassword(c){return tr(u=>zt("privy:wallet:set-recovery-password",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},verifyMfa(c){return tr(u=>zt("privy:mfa:verify",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)},initEnrollMfa(c){return tr(u=>zt("privy:mfa:init-enrollment",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},submitEnrollMfa(c){return zt("privy:mfa:submit-enrollment",c,r)},unenrollMfa(c){return tr(u=>zt("privy:mfa:unenroll",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)}};window.addEventListener("message",n);let a=()=>e.onLoad(i),s=(...c)=>{console.warn("Privy iframe failed to load: ",...c),e.onLoadFailed()},l=new AbortController;return yc(()=>zt("privy:iframe:ready",{},r),{abortSignal:l.signal}).then(a,s),()=>{window.removeEventListener("message",n),l.abort()}},[t.current,e.mfaMethods]),z0("iframe",{ref:t,width:"0",height:"0",style:{display:"none",height:"0px",width:"0px"},src:si(e.origin,`/apps/${e.appId}/embedded-wallets`,{caid:e.clientAnalyticsId})})}var Da=class{constructor(t,o){this.meta={action:t,phoneNumber:o}}async init(){if(!this.meta.action)throw new w("action required");if(!this.api)throw new w("Auth flow has no API instance");if(this.meta.action==="enroll"&&!this.meta.phoneNumber)throw new w("phone number must be set when initialzing authentication.");try{let t=Ql();await this.api.post(t,{action:this.meta.action,phoneNumber:this.meta.phoneNumber})}catch(t){throw te(t)}}async authenticate(){if(!this.meta.action)throw new w("action required");if(!this.api)throw new w("Mfa flow has no API instance");if(!this.meta.smsCode)throw new w("sms code must be set prior to calling authenticate.");if(this.meta.action==="enroll"&&!this.meta.phoneNumber)throw new w("phone number must be set prior to calling authenticate.");try{let t=Zl(),o=await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode});return gt(o)}catch(t){throw te(t)}}};import{jsx as Mo,jsxs as af}from"react/jsx-runtime";var qn;function q0(e){return typeof e=="string"&&e.length===25}function ke(){if(!qn){let e=Z.get(ar);return Promise.resolve(e||null)}return qn.getAccessToken()}var sf,Ec=(e,t)=>sf(e,t),lf,Pc=(e,t)=>lf(e,t),cf,xc=()=>cf(),K0=()=>{let t=new URLSearchParams(window.location.search).get("privy_token");if(!t)return;Z.put(Qr,t);let o=new URL(window.location.href);o.searchParams.delete("privy_token"),window.history.pushState({},"",o)},Y0=({config:e,...t})=>{if(!q0(t.appId))throw new w("Cannot initialize the Privy provider with an invalid Privy app ID");qn||(qn=new sn({appId:t.appId,apiUrl:t.apiUrl||ri}));let o=Object.assign({},e);return t.createPrivyWalletOnLogin!==void 0&&o.embeddedWallets?.createOnLogin===void 0&&(o.embeddedWallets||(o.embeddedWallets={}),o.embeddedWallets.createOnLogin=t.createPrivyWalletOnLogin?"users-without-wallets":"off"),t.createPrivyWalletOnLogin!==void 0&&e?.embeddedWallets?.createOnLogin&&console.warn("Both `createPrivyWalletOnLogin` and `config.embeddedWallets.createOnLogin` are set. `createPrivyWalletOnLogin` is deprecated and should be removed."),Mo(J0,{...t,config:o,client:qn})},J0=e=>{let t=e.client,[o,r]=de(!1),[n,i]=de(!1),[a,s]=de(!1),[l,c]=de(null),[u,y]=de(!1),[C,m]=de([]),E=jn(C),[b,x]=de(!1),[v,W]=de(null),[M,R]=de(!1),[k,A]=de({status:"disconnected",connectError:null,connector:null,connectRetry:P}),[L,F]=de(null),[H,N]=de(null),[_,Q]=de(null),[re,pe]=de({showWalletLoginFirst:!0,allowlistConfig:{errorTitle:null,errorDetail:null,errorCtaText:null,errorCtaLink:null},walletAuth:!0,emailAuth:!0,smsAuth:!1,googleOAuth:!1,twitterOAuth:!1,discordOAuth:!1,githubOAuth:!1,linkedinOAuth:!1,appleOAuth:!1,termsAndConditionsUrl:null,privacyPolicyUrl:null,embeddedWalletConfig:{createOnLogin:"off",requireUserPasswordOnCreate:!1},fiatOnRampEnabled:!1,captchaEnabled:!1,captchaSiteKey:""}),[O,Le]=de(()=>{let p=rf(e.config,e.createPrivyWalletOnLogin);return t.createAnalyticsEvent("sdk_initialize",p),Na(re,e.config)}),[st,ge]=de(!0),[Se,ee]=de({}),[se,or]=de(null),[J,no]=de(null),[$t,Lo]=de(!1),No=jn(null),Kn=jn(null),ie=jn(jc),Oo=jn(),ve=p=>{W(p),r(!0),t.createAnalyticsEvent("modal_open",{initialScreen:p})},Ne=p=>{O.embeddedWallets.createOnLogin!=="off"&&ge(!0),ve(p)};Vt(()=>{if(!_||!l){t.connectors?.removeEmbeddedWalletConnector();return}let p=l?.linkedAccounts.filter(d=>d.type==="wallet"&&d.walletClient==="privy");if(p&&p.length>0){let d=p[0].address;t.connectors?.addEmbeddedWalletConnector(_,d,O.defaultChain)}},[_,l]),Vt(()=>{_&&J?.(_)},[_]),Vt(()=>{(async()=>{if(!O.customAuth?.enabled)return;ge(!0);let{getCustomAccessToken:d,isLoading:h}=O.customAuth;if(!(!n||h))try{let g=await d();if(!g){await Kr.logout();return}if(a)return;t.startAuthFlow(new ir(g));let{user:D,isNewUser:X}=await t.authenticate();D||await Kr.logout(),c(D||null),x(X||!1),s(!0),Lo(!0)}catch(g){console.warn(g),a&&await Kr.logout()}})()},[O.customAuth?.enabled,O.customAuth?.getCustomAccessToken,O.customAuth?.isLoading,n,a]),Vt(()=>{$t&&_&&l&&lo(l,e.config?.embeddedWallets?.createOnLogin)&&(Lo(!1),xl(l,sr).catch(console.error))},[$t&&_&&l]),Vt(()=>{async function p(){let d=await t.getServerConfig();pe(d);let h=Na(d,e.config);Le(h),d.customApiUrl&&t.updateApiUrl(d.customApiUrl);let g=$0();F(g),t.initializeConnectorManager(h.walletConnectCloudProjectId,h.rpcConfig,h.chains,h.defaultChain,g),t.connectors?.initialize();let D=Fa();K0();let X=await t.getAuthenticatedUser();e.config?.customAuth?.enabled||(s(!!X),X&&le(ie,"login","onComplete",X,!1,!0,null),c(X)),D||we.setReadyToTrue(),D&&X&&y(!0),jr()}n||p()},[t,se,n]),Vt(()=>{let p=Na(re,e.config);Le(p)},[e.config,re]);let Fa=()=>{let p=new URLSearchParams(window.location.search),d=p.get("privy_oauth_code"),h=p.get("privy_oauth_state"),g=p.get("privy_oauth_provider");return d&&h&&g?(t.startAuthFlow(new ao(g,d,h)),Ne("AWAITING_OAUTH_SCREEN"),!0):!1},Do=async(p,d,h)=>{let g=await t.connectors?.createWalletConnector(p,d)||null;Uo(g,d,h)};async function Uo(p,d,h){if(!p)return A({status:"disconnected",connectError:new G("Unable to connect to wallet."),connector:null,connectRetry:P}),h?.(null);p instanceof It&&d&&p.resetConnection(d),A({connector:p,status:"connecting",connectError:null,connectRetry:()=>Uo(p,d,h)});try{let g=await p.connect({showPrompt:!0});if(O.shouldSwitchChainOnConnect&&!O.chains.find(D=>D.id===Number(g?.chainId))&&!(g?.connectorType==="wallet_connect_v2"&&g?.walletClientType==="metamask")){A(D=>({...D,connector:p,status:"switching_to_supported_chain",connectError:null,connectRetry:P}));try{await g?.switchChain(O.defaultChain.id),g&&(g.chainId=lr(zo(O.defaultChain.id)))}catch{console.warn(`Unable to switch to default chain: ${O.defaultChain.id}`)}}return A(D=>({...D,status:"connected",connectError:null,connectRetry:P})),g&&!M&&le(ie,"connectWallet","onSuccess",g),h?.(g)}catch(g){return g instanceof Ye?(console.warn(g.cause?g.cause:g.message),M||le(ie,"connectWallet","onError",g.privyErrorCode||"generic_connect_wallet_error")):(console.warn(g),M||le(ie,"connectWallet","onError","unknown_connect_wallet_error")),A(D=>({...D,status:"disconnected",connectError:g})),h?.(null)}}let $r=p=>{p!==null&&t.startAuthFlow(new Ho(p))},jr=()=>{let p=new URLSearchParams(window.location.search),d=p.get("privy_connector"),h=p.get("privy_wallet_client");if(!d||!h)return;if(h==="phantom"&&!_t()&&Ne("LOGIN_FAILED_SCREEN"),!t.connectors)throw new w("Connector not initialized");ve("AWAITING_CONNECTION");let g=new URL(window.location.href);g.searchParams.delete("privy_connector"),g.searchParams.delete("privy_wallet_client"),window.history.pushState({},"",g),Do(d,h,$r)};Vt(()=>{n&&a&&l===null&&t.getAuthenticatedUser().then(c)},[n,a,l,t]);let Fo=()=>{if(!a)throw new w("User must be authenticated before linking a wallet.");y(!0),ve("LINK_WALLET_SCREEN")},ze=p=>{if(!a||!l)return!1;for(let d of l.linkedAccounts)if(d.type==="wallet"&&d.address===p.address)return!0;return!1},Ke=async p=>{if(!t.connectors)throw new w("Connector not initialized");let d=t.connectors.findWalletConnector(p.connectorType,p.walletClientType)||null;A(h=>({...h,connector:d,status:"connected",connectError:null,connectRetry:P})),$r(p),Ne("AWAITING_CONNECTION")},lt=async(p,d)=>{Oo.current="siwe",await Uo(p,d,$r)},Ba=async(p,d)=>{if(!O.fiatOnRamp.enabled)throw new w("Fiat on-ramp is not enabled");if(!d||!d.provider||d.provider==="moonpay"){let{signedUrl:h,externalTransactionId:g}=await xp(t,p,d?.config??{},O.appearance.palette,O.fiatOnRamp.useSandbox);return{signedUrl:h,externalTransactionId:g}}else throw new w("Unsupported fund provider. Currently supported option is `moonpay`.")},Ve=()=>{m(p=>{let d=t.connectors?.wallets.map(h=>({...h,linked:ze(h),loginOrLink:async()=>{if(!await h.isConnected())throw new w("Wallet is not connected");if(h.connectorType==="embedded"&&h.walletClientType==="privy")throw new w("Cannot link or login with embedded wallet");Ke(h)},fund:async g=>{let{signedUrl:D,externalTransactionId:X}=await Ba(h.address,g);ee({fiatOnRampPrompt:{signedUrl:D},fiatOnRampStatus:{externalTransactionId:X}}),ve("FIAT_ON_RAMP_PROMPT_SCREEN")},unlink:async()=>{if(!a)throw new w("User is not authenticated.");if(h.connectorType==="embedded"&&h.walletClientType==="privy")throw new w("Cannot unlink an embedded wallet");let g=await t.unlinkWallet(h.address);c(g)}}))||[];return ci(p,d)?p:d})};Vt(()=>{Ve()},[l?.linkedAccounts,a,n]),Vt(()=>{if(n){if(!t.connectors)throw new w("Connector not initialized");Ve(),t.connectors.on("walletsUpdated",Ve)}},[n]);let qr=()=>{ve(a?"CONNECT_ONLY_AUTHENTICATED_SCREEN":"CONNECT_ONLY_LANDING_SCREEN")};Vt(()=>{if(!C[0])return;let p=C[0],d=E.current.find(g=>g.address===p.address),h=l?.linkedAccounts.find(g=>g.type==="wallet"&&g.address===p.address);if(!d&&h){let g=Object.assign({},l);g.wallet=h&&{address:h.address,chainType:h.chainType,chainId:h.chainId,walletClient:h.walletClient,walletClientType:h.walletClientType,connectorType:h.connectorType},c(g)}E.current=C},[C]);let xl=async(p,d)=>{if(ne(p))throw le(ie,"createWallet","onError","embedded_wallet_already_exists"),new Error("Only one Privy wallet per user is currently allowed");let[g,D]=await Promise.all([we.initializeWalletProxy(d),ke()]);if(!g&&e.config?.customAuth?.enabled)throw le(ie,"createWallet","onError","unknown_embedded_wallet_error"),new Error("Failed to connect to wallet proxy");if(!g||!D||e.config?.embeddedWallets?.requireUserPasswordOnCreate)return new Promise((X,_e)=>{ge(!0),ee({createWallet:{onSuccess:ct=>{le(ie,"createWallet","onSuccess",ct),X(ct)},onFailure:ct=>{le(ie,"createWallet","onError","unknown_embedded_wallet_error"),_e(ct)},callAuthOnSuccessOnClose:!1}}),ve("EMBEDDED_WALLET_ON_ACCOUNT_CREATE_SCREEN")});{await g.create({accessToken:D});let X=await we.refreshUser(),_e=ne(X);if(!_e)throw le(ie,"createWallet","onError","unknown_embedded_wallet_error"),new Error("Failed to create wallet");return le(ie,"createWallet","onSuccess",_e),_e}},pf=p=>{if(!O.chains.map(d=>d.id).includes(p))throw new G(`Chain ID ${p} is not supported. It must be added to the config.supportedChains property of the PrivyProvider.`,"unsupported_chain_id")},Tl=(p,d,h)=>new Promise(async(g,D)=>{if(!a||!l){D(new Error("User must be authenticated before signing with a Privy wallet"));return}let X=ne(l);if(!X){D(new Error("Must have a Privy wallet before signing"));return}ge(!0);let _e=t.connectors?.findWalletConnector("embedded","privy")?.proxyProvider,rr=p.chainId?Number(p.chainId):_e.chainId;pf(rr);let ct=Object.assign({},p,{chainId:rr}),Yr=async()=>{let io=await ke();if(!io||!_){D(new Error("Must have valid access token and Privy wallet to send transaction"));return}try{if(!await we.recoverEmbeddedWallet()){D(new Error("Unable to connect to wallet"));return}let _l=new V0(vt(ct.chainId,O.chains,O.rpcConfig)),mf=await Gr(X.address,ct,_l),ff=await _a(io,X.address,_,mf,_l);g(ff)}catch(Yn){D(Yn)}};if(O.embeddedWallets.noPromptOnSignature)d&&console.warn("uiOptions defined with `noPromptOnSignature` set to true in app config"),Yr();else{let io={transactionRequest:ct,onSuccess:g,onFailure:D,uiOptions:d||{},fundWalletConfig:h},Yn={onCompleteNavigateTo:"EMBEDDED_WALLET_SEND_TRANSACTION_SCREEN",onFailure:D};ee({connectWallet:Yn,sendTransaction:io}),ve("EMBEDDED_WALLET_CONNECTING_SCREEN")}});function Sl(){return new Promise(async(p,d)=>{let h=await ke();if(!h||!_)throw new Error("Must have valid access token to enroll in MFA");try{await _.verifyMfa({accessToken:h}),p()}catch(g){d(g)}})}let Kr={ready:n,authenticated:a,user:l,walletConnectors:t.connectors||null,connectWallet:qr,linkWallet:Fo,linkEmail:()=>{if(!a)throw new w("User must be authenticated before linking an email address.");if(l?.email)throw new w("User already has an email linked to their account.");y(!0),ve("LINK_EMAIL_SCREEN")},linkPhone:()=>{if(!a)throw new w("User must be authenticated before linking a phone number.");if(l?.phone)throw new w("User already has a phone number linked to their account.");y(!0),ve("LINK_PHONE_SCREEN")},linkGoogle:async()=>{if(!a)throw new w("User must be authenticated before linking a Google account.");if(l?.google)throw new w("User already has a Google account linked to their account.");await we.initLoginWithOAuth("google")},linkTwitter:async()=>{if(!a)throw new w("User must be authenticated before linking a Twitter account.");if(l?.twitter)throw new w("User already has a Twitter account linked to their account.");await we.initLoginWithOAuth("twitter")},linkDiscord:async()=>{if(!a)throw new w("User must be authenticated before linking a Discord account.");if(l?.discord)throw new w("User already has a Discord account linked to their account.");await we.initLoginWithOAuth("discord")},linkGithub:async()=>{if(!a)throw new w("User must be authenticated before linking a GitHub account.");if(l?.github)throw new w("User already has a Github account linked to their account.");await we.initLoginWithOAuth("github")},linkTiktok:async()=>{if(!a)throw new w("User must be authenticated before linking a TikTok account.");if(l?.tiktok)throw new w("User already has a Tiktok account linked to their account.");await we.initLoginWithOAuth("tiktok")},linkLinkedIn:async()=>{if(!a)throw new w("User must be authenticated before linking a LinkedIn account.");if(l?.linkedin)throw new w("User already has a LinkedIn account linked to their account.");await we.initLoginWithOAuth("linkedin")},linkApple:async()=>{if(!a)throw new w("User must be authenticated before linking an Apple account.");await we.initLoginWithOAuth("apple")},login:async()=>{if(n||(await new Promise(p=>{or(()=>p)}),or(null)),a){console.warn("Attempted to log in, but user is already logged in. Use a `link` helper instead.");return}R(!0),Ne("LANDING")},logout:async()=>{await t.logout(),c(null),s(!1),W(null),le(ie,"logout","onSuccess"),y(!1),r(!1),Z.del(Zr)},getAccessToken:()=>t.getAccessToken(),getEthereumProvider:()=>{if(!l||!l.wallet)return new oe;let p=C.find(h=>l.wallet&&h.address===l.wallet.address),d=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===p?.address));return!p||!d?new oe:d.proxyProvider},getEthersProvider:()=>{if(!l||!l.wallet)return new Pl(new At(new oe));let p=C.find(h=>l.wallet&&h.address===l.wallet.address),d=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===p?.address));return!p||!d?new Pl(new At(new oe)):new Pl(new At(d.proxyProvider))},getWeb3jsProvider:()=>{if(!l||!l.wallet)return new uo(new oe);let p=C.find(h=>l.wallet&&h.address===l.wallet.address),d=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===p?.address));return!p||!d?new uo(new oe):new uo(d.proxyProvider)},unlinkWallet:async p=>{let d=await t.unlinkWallet(p);return c(d),d},unlinkEmail:async p=>{let d=await t.unlinkEmail(p);return c(d),d},unlinkPhone:async p=>{let d=await t.unlinkPhone(p);return c(d),d},unlinkGoogle:async p=>{let d=await t.unlinkOAuth("google",p);return c(d),d},unlinkTwitter:async p=>{let d=await t.unlinkOAuth("twitter",p);return c(d),d},unlinkDiscord:async p=>{let d=await t.unlinkOAuth("discord",p);return c(d),d},unlinkGithub:async p=>{let d=await t.unlinkOAuth("github",p);return c(d),d},unlinkTiktok:async p=>{let d=await t.unlinkOAuth("tiktok",p);return c(d),d},unlinkLinkedIn:async p=>{let d=await t.unlinkOAuth("linkedin",p);return c(d),d},unlinkApple:async p=>{let d=await t.unlinkOAuth("apple",p);return c(d),d},setActiveWallet:async p=>{let d=C.find(g=>Ua(g.address)===Ua(p)),h=l?.linkedAccounts.find(g=>g.type==="wallet"&&Ua(g.address)===Ua(p));if(!d||!await d.isConnected())N(p),Fo();else if(!d.linked)d.loginOrLink();else{let g=Object.assign({},l);g.wallet=h&&{address:h.address,chainType:h.chainType,chainId:h.chainId,walletClient:h.walletClient,walletClientType:h.walletClientType,connectorType:h.connectorType},c(g)}},forkSession:()=>t.forkSession(),createWallet:async()=>{if(!a||!l)throw le(ie,"createWallet","onError","must_be_authenticated"),new Error("User must be authenticated before creating a Privy wallet");return xl(l,15e3)},setWalletPassword:()=>new Promise(async(p,d)=>{if(!a||!l){d(new Error("User must be authenticated before adding password to Privy wallet"));return}let h=ne(l);if(!h||!_){d(new Error("Must have a Privy wallet to add a password"));return}if(h.recoveryMethod==="user-passcode"){d(new Error("Cannot set password. Embedded wallet already has a password."));return}await Sl(),ge(!0);let g={onSuccess:p,onFailure:d,callAuthOnSuccessOnClose:!1},D={onCompleteNavigateTo:"EMBEDDED_WALLET_PASSWORD_UPDATE_SPLASH_SCREEN",onFailure:d};ee({setWalletPassword:g,connectWallet:D}),ve("EMBEDDED_WALLET_CONNECTING_SCREEN")}),signMessage:(p,d)=>new Promise(async(h,g)=>{if(!a||!l){g(new Error("User must be authenticated before signing with a Privy wallet"));return}let D=ne(l);if(!D){g(new Error("Must have a Privy wallet before signing"));return}if(typeof p!="string"||p.length<1){g(new Error("Message must be a non-empty string"));return}ge(!0);let X=async()=>{if(!a)throw new Error("User must be authenticated before signing with a Privy wallet");let _e=await ke();if(!_||!_e)throw new Error("Unable to connect to wallet");if(!await we.recoverEmbeddedWallet())throw new Error("Unable to connect to wallet");t.createAnalyticsEvent("embedded_wallet_sign_message_started",{walletAddress:D.address});let{response:ct}=await _.rpc({accessToken:_e,address:D.address,request:{method:"personal_sign",params:[p,D.address]}}),Yr=ct.data;return t.createAnalyticsEvent("embedded_wallet_sign_message_completed",{walletAddress:D.address}),Yr};if(O.embeddedWallets.noPromptOnSignature){d&&console.warn("uiOptions defined with `noPromptOnSignature` set to true in app config");try{let _e=await X();h(_e)}catch(_e){g(_e??new Oe("Unable to sign message"))}}else{let ct={message:p,confirmAndSignMessage:X,onSuccess:io=>{h(io)},onFailure:io=>{g(io)},uiOptions:d||{}},Yr={onCompleteNavigateTo:"EMBEDDED_WALLET_SIGN_REQUEST_SCREEN",onFailure:g};ee({signMessage:ct,connectWallet:Yr}),ve("EMBEDDED_WALLET_CONNECTING_SCREEN")}}),sendTransaction:async(p,d,h)=>{let D=await(await Tl(p,d,h)).wait();return Aa(D)},exportWallet:()=>new Promise(async(p,d)=>{if(!a||!l){d(new Error("User must be authenticated before exporting their Privy wallet"));return}if(!ne(l)){d(new Error("Must have a Privy wallet before exporting"));return}ge(!0);let g={onCompleteNavigateTo:"EMBEDDED_WALLET_KEY_EXPORT_SCREEN",onFailure:d},D=await ke();if(!D||!_)throw new Error("Must have valid access token to enroll in MFA");if(!_){d(new Error("Must have a Privy wallet before exporting"));return}await _.verifyMfa({accessToken:D});let X={appId:e.appId,origin:t.apiUrl,onSuccess:p,onFailure:d};ee({keyExport:X,connectWallet:g}),ve("EMBEDDED_WALLET_CONNECTING_SCREEN")}),promptMfa:Sl,async init(p){let d;switch(p){case"sms":d=new Da("verify");break;case"totp":return;default:throw new Error(`Unsupported MFA method: ${p}`)}t.startMfaFlow(d),await d.init()},async submit(p,d){switch(p){case"totp":case"sms":No.current?.resolve({mfaMethod:p,mfaCode:d}),await new Promise((h,g)=>{Kn.current={resolve:h,reject:g}});break;default:throw No.current?.reject(new w("Unsupported MFA method")),new w(`Unsupported MFA method: ${p}`)}},cancel(){No.current?.reject(new w("MFA canceled"))},async initEnrollmentWithSms(p){let d=await ke();if(!d||!_)throw new Error("Must have valid access token to enroll in MFA");await _.initEnrollMfa({method:"sms",accessToken:d,phoneNumber:p.phoneNumber})},enrollInMfa(p){return new Promise((d,h)=>{if(!p){we.closePrivyModal(),d();return}ee({mfaEnrollmentFlow:{mfaMethods:O.mfa.methods,onSuccess:d,onFailure:h}}),ve("MFA_ENROLLMENT_FLOW_SCREEN")})},async initEnrollmentWithTotp(){let p=await ke();if(!p||!_)throw new Error("Must have valid access token to enroll in MFA");let d=await _.initEnrollMfa({method:"totp",accessToken:p});return{secret:d.secret,authUrl:d.authUrl}},async submitEnrollmentWithSms(p){let d=await ke();if(!d||!_)throw new Error("Must have valid access token to enroll in MFA");await _.submitEnrollMfa({method:"sms",accessToken:d,phoneNumber:p.phoneNumber,code:p.mfaCode});let h=await t.getAuthenticatedUser();c(h)},async submitEnrollmentWithTotp(p){let d=await ke();if(!d||!_)throw new Error("Must have valid access token to enroll in MFA");await _.submitEnrollMfa({method:"totp",accessToken:d,code:p.mfaCode});let h=await t.getAuthenticatedUser();c(h)},async unenroll(p){let d=await ke();if(!d||!_)throw new Error("Must have valid access token to remove MFA");await _.unenrollMfa({method:p,accessToken:d});let h=await t.getAuthenticatedUser();c(h)},loginWithCode(p){return we.loginWithCode(p)},initLoginWithEmail(p,d){return we.initLoginWithEmail(p,d)},isModalOpen:o};sf=Kr.signMessage,lf=async(...p)=>{let d=await Tl(...p);return O.embeddedWallets.waitForTransactionConfirmation&&await d.wait(),d};let we=(()=>({isNewUserThisSession:b,isLinking:u,linkingHint:H,pendingTransaction:null,walletConnectionStatus:k,mipdStore:L,connectors:t.connectors?.walletConnectors??[],rpcConfig:O.rpcConfig,chains:O.chains,showFiatPrices:O.embeddedWallets.priceDisplay.primary!=="native-token",clientAnalyticsId:t.clientAnalyticsId,nativeTokenSymbolForChainId:p=>O.chains.find(d=>d.id===Number(p))?.nativeCurrency.symbol,initializeWalletProxy:async p=>{if(_)return _;let d=new Promise(D=>{no(()=>X=>D(X))}),h=new Promise(D=>setTimeout(()=>D(null),p)),g=await Promise.race([d,h]);return no(null),g},getAuthFlow:()=>t.authFlow,getAuthMeta:()=>t.authFlow?.meta,closePrivyModal:(p={shouldCallAuthOnSuccess:!0})=>{let d=n&&a&&l;p.shouldCallAuthOnSuccess&&d?(le(ie,"login","onComplete",l,b,!1,Oo.current??null),e.onSuccess?.(l,b)):M&&le(ie,"login","onError","exited_auth_flow"),N(null),R(!1),y(!1),x(!1),r(!1),setTimeout(()=>{t.authFlow=void 0},200),t.createAnalyticsEvent("modal_closed")},connectWallet:Uo,initLoginWithWallet:lt,loginWithWallet:async()=>{if(!n)throw new Jr;if(!(t.authFlow instanceof Ho))throw new w("Must initialize SIWE flow first.");let p,d;if(a)p=await t.link();else try{({user:p,isNewUser:d}=await t.authenticate())}catch(h){throw le(ie,"login","onError",h.privyErrorCode||"generic_connect_wallet_error"),h}c(p||l||null),x(d||!1),s(!0)},initLoginWithOAuth:async p=>{t.startAuthFlow(new ao(p));let d=await t.authFlow.getAuthorizationUrl();d&&d.url&&window.location.assign(d.url)},loginWithOAuth:async p=>{if(!(t.authFlow instanceof ao))throw new w("Must initialize OAuth flow before calling loginWithOAuth");let d,h;if(a)d=await t.link();else try{({user:d,isNewUser:h}=await t.authenticate()),Oo.current=p}catch(g){throw le(ie,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}c(d),x(h||!1),s(!0)},initLoginWithEmail:async(p,d)=>{let h=new Bo(p,d);t.startAuthFlow(h);try{Oo.current="email",await h.sendCodeEmail()}catch(g){throw le(ie,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}},initLoginWithSms:async(p,d)=>{let h=new Go(p,d);t.startAuthFlow(h);try{Oo.current="sms",await h.sendSmsCode()}catch(g){throw le(ie,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}},resendEmailCode:async()=>{await t.authFlow?.sendCodeEmail()},resendSmsCode:async()=>{await t.authFlow?.sendSmsCode()},loginWithCode:async p=>{if(!n)throw new Jr;if(t.authFlow instanceof Bo)t.authFlow.meta.emailCode=p.trim();else if(t.authFlow instanceof Go)t.authFlow.meta.smsCode=p.trim();else throw new w("Must initialize a passwordless code flow first");let d,h;a?d=await t.link():{user:d,isNewUser:h}=await t.authenticate(),c(d||l||null),x(h||!1),s(!0)},refreshUser:async()=>{let p=await t.getAuthenticatedUser();return c(p),p},walletProxy:_,createAnalyticsEvent:(p,d,h)=>t.createAnalyticsEvent(p,d,h),getUsdTokenPrice:p=>t.getUsdTokenPrice(p),recoverEmbeddedWallet:async()=>new Promise(async(p,d)=>{let h=l?.linkedAccounts.find(D=>D.type==="wallet"&&D.walletClientType==="privy"),g=await ke();if(!g||!_||!h){d(new Error("Must have valid access token and Privy wallet to recover wallet"));return}ge(!0);try{await _.connect({accessToken:g,address:h.address}),p(!0)}catch(D){Pr(D)&&h.recoveryMethod==="privy"?(t.createAnalyticsEvent("embedded_wallet_pinless_recovery_started",{walletAddress:h.address}),(await _.recover({address:h.address,accessToken:g})).address||d(new Error("Unable to recover wallet")),t.createAnalyticsEvent("embedded_wallet_recovery_completed",{walletAddress:h.address}),p(!0)):Pr(D)?(ee({recoverWallet:{privyWallet:h,onFailure:d,onSuccess:()=>p(!0)}}),ve("EMBEDDED_WALLET_RECOVERY_SCREEN")):d(D)}}),getFiatOnRampConfig:Ba,setReadyToTrue:()=>{i(!0),se?.()},updateWallets:()=>Ve()}))();cf=we.recoverEmbeddedWallet;let uf=j0(()=>({wallets:C}),[C]);return Mo(Ce.Provider,{value:Kr,children:Mo(ts.Provider,{value:ie,children:Mo(fl.Provider,{value:uf,children:af(Up,{...O,children:[e.children,af(ss.Provider,{value:we,children:[Mo(Dm,{theme:{...O.appearance.palette||{}}}),Mo(Rc,{appConfig:O,data:Se,setModalData:ee,setInitialScreen:W,initialScreen:v,visible:o,authenticated:a,children:Mo(Hm,{open:o})}),st&&re.id?Mo(nf,{appId:e.appId,clientAnalyticsId:t.clientAnalyticsId,origin:t.apiUrl,mfaMethods:l?.mfaMethods,mfaPromise:No,mfaSubmitPromise:Kn,onLoad:Q,onLoadFailed:()=>null}):null]})]})})})})};import{useContext as Q0}from"react";function Z0(e){let{login:t}=Q0(Ce);return Mt("login",e),{login:t}}import{useContext as X0}from"react";function eb(e){let{logout:t}=X0(Ce);return Mt("logout",e),{logout:t}}import{useCallback as df}from"react";var tb=()=>{let e=Ut(),{initLoginWithEmail:t,loginWithCode:o}=z(),r=df(async({email:i})=>{if(!i)throw new Error("Email required to send OTP code");if(e.status==="disabled")return t(i);let a=await e.waitForResult();return t(i,a)},[t,e]),n=df(async({code:i})=>{if(e.enabled&&e.status!=="success")throw new Sn(e.error,null,"captcha_failure");return o(i)},[o,e.status]);return{sendCode:r,loginWithCode:n}};import{useContext as ob}from"react";function rb(e){let{connectWallet:t}=ob(Ce);return Mt("connectWallet",e),{connectWallet:t}}import{useContext as nb}from"react";function ib(e){let{createWallet:t}=nb(Ce);return Mt("createWallet",e),{createWallet:t}}import{useContext as ab}from"react";var sb=()=>{let{isModalOpen:e}=ab(Ce);return{isOpen:e}};export{At as AsExternalProvider,_n as Captcha,nn as ConnectorManager,sn as PrivyClient,Y0 as PrivyProvider,oe as PrivyProxyProvider,$n as SUPPORTED_CHAINS,Ga as VERSION,je as WalletConnector,Es as errorIndicatesMaxMfaRetries,xr as errorIndicatesMfaTimeout,Tr as errorIndicatesMfaVerificationFailed,ke as getAccessToken,rb as useConnectWallet,ib as useCreateWallet,Z0 as useLogin,tb as useLoginWithEmail,eb as useLogout,Ur as useMfa,Ln as useMfaEnrollment,sb as useModalStatus,z as usePrivy,os as useRegisterMfaListener,zn as useWallets};
|
|
2506
|
+
`;import{jsx as Ge,jsxs as Bm}from"react/jsx-runtime";var S0={["LANDING"]:tu,["AWAITING_PASSWORDLESS_CODE"]:fd,["AWAITING_CONNECTION"]:_d,["AWAITING_CONNECT_ONLY_CONNECTION"]:Id,["PHANTOM_INTERSTITIAL_SCREEN"]:_m,["LOGIN_FAILED_SCREEN"]:lu,["AWAITING_OAUTH_SCREEN"]:Pm,["ALLOWLIST_REJECTION_SCREEN"]:td,["INSTALL_PHANTOM_SCREEN"]:Mp,["LINK_EMAIL_SCREEN"]:ou,["LINK_PHONE_SCREEN"]:ru,["LINK_WALLET_SCREEN"]:nu,["CONNECT_ONLY_LANDING_SCREEN"]:xd,["CONNECT_ONLY_AUTHENTICATED_SCREEN"]:bd,["EMBEDDED_WALLET_ON_ACCOUNT_CREATE_SCREEN"]:gp,["EMBEDDED_WALLET_CREATED_SCREEN"]:Fd,["EMBEDDED_WALLET_CONNECTING_SCREEN"]:Dd,["EMBEDDED_WALLET_RECOVERY_SCREEN"]:Cp,["EMBEDDED_WALLET_KEY_EXPORT_SCREEN"]:zd,["EMBEDDED_WALLET_SIGN_REQUEST_SCREEN"]:Nm,["EMBEDDED_WALLET_SEND_TRANSACTION_SCREEN"]:Mm,["FIAT_ON_RAMP_PROMPT_SCREEN"]:Sp,["FIAT_ON_RAMP_STATUS_SCREEN"]:kp,["EMBEDDED_WALLET_PASSWORD_UPDATE_SPLASH_SCREEN"]:wp,["EMBEDDED_WALLET_PASSWORD_UPDATE_SCREEN"]:vp,["MFA_ENROLLMENT_FLOW_SCREEN"]:Ou},_0=({isMfaVerifying:e,onMfaVerificationComplete:t})=>{let{ready:o}=z(),{ready:r,currentScreen:n}=S(),i=P0(null),a=$c(i);if((!o||!r)&&n!=="AWAITING_OAUTH_SCREEN")return Bm(Or,{children:[Ge(T,{}),Ge(j,{}),Ge(gu,{children:Ge(Lt,{})}),Ge(K,{}),Ge(Y,{})]});if(!n)return null;let s=S0[n];return s?Ge(Or,{style:{height:a},children:Bm("div",{ref:i,children:[Ge(Jt,{if:!!e,children:Ge(s,{})}),Ge(Jt,{if:!e,children:Ge(vm,{open:e,onClose:t})})]})}):null},Hm=({open:e})=>{let{app:t}=S(),[o,r]=Fm(!1),{gracefulClosePrivyModal:n,onEscape:i}=hu(),[a,s]=Fm(!1);os({onMfaRequired:()=>{t?.mfa.noPromptOnMfaRequired||s(!0)}}),x0(()=>{r(!0)},[]);let l=Ge(Um,{children:Ge(_0,{isMfaVerifying:a,onMfaVerificationComplete:()=>s(!1)})}),c=e||a,u=t?.render.inDialog?Ge("div",{onKeyDown:i,children:Ge(yu,{open:c,id:"privy-dialog",onClick:()=>n(),children:l})}):l;if(o){let y=t?.render.inParentNodeId&&document.getElementById(t.render.inParentNodeId)||document.body;return T0.createPortal(u,y)}return null};var yt={appearance:{theme:"light",accentColor:"#676FFF",walletList:["detected_wallets","metamask","coinbase_wallet","rainbow","wallet_connect"]},walletConnectCloudProjectId:tc,rpcConfig:{rpcUrls:{},rpcTimeouts:{}},captchaEnabled:!1,_render:{inDialog:!0,inParentNodeId:null},fiatOnRamp:{useSandbox:!1}};var k0=new Set(["metamask","coinbase_wallet","rainbow","zerion","phantom","wallet_connect","detected_wallets"]),A0=e=>k0.has(e),R0=(e,t,o)=>o.indexOf(e)===t,Gm=({input:e})=>e?e.filter(A0).filter(R0):yt.appearance.walletList;var zm={id:43114,name:"Avalanche",network:"avalanche",nativeCurrency:{decimals:18,name:"Avalanche",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax.network/ext/bc/C/rpc"]},public:{http:["https://api.avax.network/ext/bc/C/rpc"]}},blockExplorers:{etherscan:{name:"SnowTrace",url:"https://snowtrace.io"},default:{name:"SnowTrace",url:"https://snowtrace.io"}}};var Vm={id:43113,name:"Avalanche Fuji",network:"avalanche-fuji",nativeCurrency:{decimals:18,name:"Avalanche Fuji",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax-test.network/ext/bc/C/rpc"]},public:{http:["https://api.avax-test.network/ext/bc/C/rpc"]}},blockExplorers:{etherscan:{name:"SnowTrace",url:"https://testnet.snowtrace.io"},default:{name:"SnowTrace",url:"https://testnet.snowtrace.io"}},testnet:!0};var $m={id:42220,name:"Celo Mainnet",network:"celo",nativeCurrency:{decimals:18,name:"CELO",symbol:"CELO"},rpcUrls:{default:{http:["https://forno.celo.org"]},infura:{http:["https://celo-mainnet.infura.io/v3"]},public:{http:["https://forno.celo.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/mainnet"},etherscan:{name:"CeloScan",url:"https://celoscan.io"}},testnet:!1};var jm={id:44787,name:"Celo Alfajores Testnet",network:"celo-alfajores",nativeCurrency:{decimals:18,name:"CELO",symbol:"CELO"},rpcUrls:{default:{http:["https://alfajores-forno.celo-testnet.org"]},infura:{http:["https://celo-alfajores.infura.io/v3"]},public:{http:["https://alfajores-forno.celo-testnet.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/alfajores"},etherscan:{name:"CeloScan",url:"https://alfajores.celoscan.io/"}},testnet:!0};var qm={id:314,name:"Filecoin - Mainnet",network:"filecoin-mainnet",nativeCurrency:{decimals:18,name:"filecoin",symbol:"FIL"},rpcUrls:{default:{http:["https://api.node.glif.io/rpc/v1"]},public:{http:["https://api.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filfox",url:"https://filfox.info/en"},filscan:{name:"Filscan",url:"https://filscan.io"},filscout:{name:"Filscout",url:"https://filscout.io/en"},glif:{name:"Glif",url:"https://explorer.glif.io"}}};var Km={id:314159,name:"Filecoin - Calibration testnet",network:"filecoin-calibration",nativeCurrency:{decimals:18,name:"testnet filecoin",symbol:"tFIL"},rpcUrls:{default:{http:["https://api.calibration.node.glif.io/rpc/v1"]},public:{http:["https://api.calibration.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filscan",url:"https://calibration.filscan.io"}}};var Ym={id:5,network:"goerli",name:"Goerli",nativeCurrency:{name:"Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{alchemy:{http:["https://eth-goerli.g.alchemy.com/v2"],webSocket:["wss://eth-goerli.g.alchemy.com/v2"]},infura:{http:["https://goerli.infura.io/v3"],webSocket:["wss://goerli.infura.io/ws/v3"]},default:{http:["https://rpc.ankr.com/eth_goerli"]},public:{http:["https://rpc.ankr.com/eth_goerli"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://goerli.etherscan.io"},default:{name:"Etherscan",url:"https://goerli.etherscan.io"}},testnet:!0};var Jm={id:17e3,name:"Holesky",network:"holesky",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://ethereum-holesky.publicnode.com"]},public:{http:["https://ethereum-holesky.publicnode.com"]}},blockExplorers:{etherscan:{name:"EtherScan",url:"https://holesky.etherscan.io"},default:{name:"EtherScan",url:"https://holesky.etherscan.io"}}};var Qm={id:59144,network:"linea-mainnet",name:"Linea Mainnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{infura:{http:["https://linea-mainnet.infura.io/v3"],webSocket:["wss://linea-mainnet.infura.io/ws/v3"]},default:{http:["https://rpc.linea.build"],webSocket:["wss://rpc.linea.build"]},public:{http:["https://rpc.linea.build"],webSocket:["wss://rpc.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://lineascan.build"},etherscan:{name:"Etherscan",url:"https://lineascan.build"}},testnet:!1};var Zm={id:59140,network:"linea-testnet",name:"Linea Goerli Testnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{infura:{http:["https://linea-goerli.infura.io/v3"],webSocket:["wss://linea-goerli.infura.io/ws/v3"]},default:{http:["https://rpc.goerli.linea.build"],webSocket:["wss://rpc.goerli.linea.build"]},public:{http:["https://rpc.goerli.linea.build"],webSocket:["wss://rpc.goerli.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://goerli.lineascan.build"},etherscan:{name:"Etherscan",url:"https://goerli.lineascan.build"}},testnet:!0};var La={id:1,network:"homestead",name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{alchemy:{http:["https://eth-mainnet.g.alchemy.com/v2"],webSocket:["wss://eth-mainnet.g.alchemy.com/v2"]},infura:{http:["https://mainnet.infura.io/v3"],webSocket:["wss://mainnet.infura.io/ws/v3"]},default:{http:["https://cloudflare-eth.com"]},public:{http:["https://cloudflare-eth.com"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://etherscan.io"},default:{name:"Etherscan",url:"https://etherscan.io"}}};var Xm={id:17001,name:"Redstone Holesky",network:"redstone-holesky",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.holesky.redstone.xyz"]},public:{http:["https://rpc.holesky.redstone.xyz"]}},blockExplorers:{etherscan:{name:"EtherScan",url:"https://explorer.holesky.redstone.xyz"},default:{name:"EtherScan",url:"https://explorer.holesky.redstone.xyz"}}};var ef={id:11155111,network:"sepolia",name:"Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"SEP",decimals:18},rpcUrls:{alchemy:{http:["https://eth-sepolia.g.alchemy.com/v2"],webSocket:["wss://eth-sepolia.g.alchemy.com/v2"]},infura:{http:["https://sepolia.infura.io/v3"],webSocket:["wss://sepolia.infura.io/ws/v3"]},default:{http:["https://rpc.sepolia.org"]},public:{http:["https://rpc.sepolia.org"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://sepolia.etherscan.io"},default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}},testnet:!0};var $n=[va,wa,Ca,Ym,ef,La,Pa,xa,Hn,Gn,$m,jm,qm,Km,ba,Ea,Qm,Zm,zm,Vm,Ta,Sa,Jm,Xm],fL=new Set($n.map(e=>e.id));import er from"tinycolor2";var tf="#FFFFFF",I0="#000000",W0=tf,M0="#1E1E1D";function L0(e){return e<.8&&e>.2&&console.warn("Background color is not light or dark enough, which could lead to accessibility issues."),e>.5?"light":"dark"}function Wo(e,t){let o=Math.max(0,Math.min(1,e.toHsl().l+t));return er({...e.toHsl(),l:o})}function of({backgroundTheme:e,accentHex:t,successHex:o="#51BA81",warnHex:r="#FFB74D",errorHex:n="#EC6351",whiteHex:i=tf,blackHex:a=I0}){let s;switch(e){case"light":s=W0;break;case"dark":s=M0;break;default:s=e;break}let l=er(s),c=er(t),u=er(o),y=er(r),C=er(n),m=L0(l.getLuminance()),E=Wo(l,m==="light"?-.04:.11),b=Wo(l,m==="light"?-.88:.87),x=Wo(l,m==="light"?-.77:.75),v=Wo(l,m==="light"?-.43:.45).desaturate(m==="light"?60:20),W=Wo(l,m==="light"?-.08:.25).desaturate(m==="light"?60:20),M=Wo(c,.15),R=Wo(c,-.06),k=er(c.getLuminance()>.5?a:i),A=Wo(u,-.16);return{colorScheme:m,background:l.toHslString(),background2:E.toHslString(),foreground:b.toHslString(),foreground2:x.toHslString(),foreground3:v.toHslString(),foreground4:W.toHslString(),accent:c.toHslString(),accentLight:M.toHslString(),accentDark:R.toHslString(),foregroundAccent:k.toHslString(),success:u.toHslString(),successDark:A.toHslString(),error:C.toHslString(),warn:y.toHslString()}}function Na(e,t){let o=["google","twitter","discord","tiktok","linkedin","github","apple"],r=t?.loginMethods?.filter(H=>o.includes(H)),n,i,a,s,l,c,u,y,C,m;t?.loginMethods?(n=t.loginMethods.includes("email"),i=t.loginMethods.includes("sms"),a=t.loginMethods.includes("wallet"),s=r?.includes("google"),l=r?.includes("twitter"),c=r?.includes("discord"),u=r?.includes("tiktok"),C=r?.includes("github"),y=r?.includes("linkedin"),m=r?.includes("apple")):(n=e.emailAuth,i=e.smsAuth,a=e.walletAuth,s=e.googleOAuth,l=e.twitterOAuth,c=e.discordOAuth,C=e.githubOAuth,u=e.tiktokOAuth,y=e.linkedinOAuth,m=e.appleOAuth);let E=[n,i].filter(Boolean),b=[s,l,c,C,u,y,m].filter(Boolean),x=[a].filter(Boolean);if(E.length+b.length+x.length===0)throw new Error("You must enable at least one login method");let v=t?.appearance?.showWalletLoginFirst!==void 0?t?.appearance?.showWalletLoginFirst:e.showWalletLoginFirst;v&&x.length===0?(console.warn("You should only enable `showWalletLoginFirst` when `wallet` logins are also enabled. `showWalletLoginFirst` has been set to false"),v=!1):!v&&b.length+E.length===0&&(console.warn("You should only disable `showWalletLoginFirst` when `email`, `sms`, or social logins are also enabled. `showWalletLoginFirst` has been set to true"),v=!0);let W=Gm({isWalletLoginEnabled:a,input:t?.appearance?.walletList});if(t?.embeddedWallets?.waitForTransactionConfirmation===!1&&t.embeddedWallets.noPromptOnSignature!==!0)throw new Error("Overriding `config.embeddedWallets.waitForTransactionConfirmation` requires that you also enable `config.embeddedWallets.noPromptOnSignature`");let M=t?.intl?.defaultCountry??"US",{chains:R,defaultChain:k}=N0(t?.additionalChains,t?.supportedChains,t?.defaultChain),A=!!t?.defaultChain||!!t?.supportedChains,L=t?.customAuth?.getCustomAccessToken&&t?.customAuth?.enabled!==!1;return{id:e.id,name:e.name,allowlistConfig:e.allowlistConfig,appearance:{logo:t?.appearance?.logo??e.logoUrl,palette:of({backgroundTheme:t?.appearance?.theme??yt.appearance.theme,accentHex:t?.appearance?.accentColor??e.accentColor??yt.appearance.accentColor}),loginGroupPriority:v?"web3-first":"web2-first",hideDirectWeb2Inputs:!!t?.appearance?.hideDirectWeb2Inputs,walletList:W},loginMethods:{wallet:a,email:n,sms:i,google:s,twitter:l,discord:c,github:C,tiktok:u,linkedin:y,apple:m},legal:{termsAndConditionsUrl:t?.legal?.termsAndConditionsUrl??e.termsAndConditionsUrl,privacyPolicyUrl:t?.legal?.privacyPolicyUrl??e.privacyPolicyUrl},walletConnectCloudProjectId:t?.walletConnectCloudProjectId??e.walletConnectCloudProjectId??yt.walletConnectCloudProjectId,rpcConfig:{rpcUrls:t?.rpcConfig?.rpcUrls??yt.rpcConfig.rpcUrls,rpcTimeouts:t?.rpcConfig?.rpcTimeouts??yt.rpcConfig.rpcTimeouts},chains:R,defaultChain:k,intl:{defaultCountry:M},shouldSwitchChainOnConnect:A,captchaEnabled:e.captchaEnabled??yt.captchaEnabled,captchaSiteKey:e.captchaSiteKey,embeddedWallets:{...e.embeddedWalletConfig,...L?{createOnLogin:"all-users",requireUserPasswordOnCreate:!1,noPromptOnSignature:!0}:{},waitForTransactionConfirmation:!0,priceDisplay:{primary:"fiat-currency",secondary:"native-token"},...t?.embeddedWallets},mfa:{methods:e.mfaMethods??[],noPromptOnMfaRequired:t?.mfa?.noPromptOnMfaRequired??!1},customAuth:L?{enabled:!0,...t.customAuth}:void 0,fiatOnRamp:{enabled:e.fiatOnRampEnabled,useSandbox:t?.fiatOnRamp?.useSandbox??yt.fiatOnRamp.useSandbox},loginConfig:{twitterOAuthOnMobileEnabled:e.twitterOAuthOnMobileEnabled??!1},render:{inDialog:t?._render?.inDialog??yt._render.inDialog,inParentNodeId:t?._render?.inParentNodeId??yt._render.inParentNodeId}}}function rf(e,t){if(!e)return{legacyCreateEmbeddedWalletFlag:t};let{appearance:o,additionalChains:r,supportedChains:n,defaultChain:i,...a}=e;return{...a,...r?{additionalChains:r.map(l=>l.id)}:void 0,...n?{supportedChains:n.map(l=>l.id)}:void 0,...i?{defaultChain:i.id}:void 0,...o?{...o,...o.logo&&typeof o.logo?{logo:"component"}:void 0}:void 0,legacyCreateEmbeddedWalletFlag:t}}function N0(e,t,o){let r;if(e&&t&&console.warn("You should only specify one of `additionalChains` or `supportedChains`. Using `supportedChains`."),t){if(t.length===0)throw new Error("`supportedChains` must contain at least one chain");r=t.map(a=>$n.find(l=>l.id===a.id)??a)}else r=$n.concat(e??[]);let n=t?r[0]:La,i=o??n;if(!r.find(a=>a.id===i.id))throw new Error("`defaultChain` must be included in `supportedChains`");return{chains:r,defaultChain:i}}import{useRef as O0,useEffect as D0}from"react";var Oa=class{constructor(){this.callbacks={}}enqueue(t,o){this.callbacks[t]=o}dequeue(t,o){let r=this.callbacks[o];if(!r)throw new Error(`cannot dequeue ${t} event: no event found for id ${o}`);switch(delete this.callbacks[o],t){case"privy:iframe:ready":return r;case"privy:wallet:create":return r;case"privy:wallet:connect":return r;case"privy:wallet:recover":return r;case"privy:wallet:rpc":return r;case"privy:wallet:set-recovery-password":return r;case"privy:mfa:verify":return r;case"privy:mfa:init-enrollment":return r;case"privy:mfa:submit-enrollment":return r;case"privy:mfa:unenroll":return r;default:throw new Error(`invalid wallet event type ${t}`)}}};async function tr(e,t,o,r,n,i=!1){let a=i,s=async u=>{if(a&&t&&t.length>0){u===(i?0:1)?n("configureMfa","onMfaRequired",t):r.current?.reject(new Ee("missing_or_invalid_mfa","MFA verification failed, retry."));let y=await new Promise((C,m)=>{o.current={resolve:C,reject:m};let E=1e3*60*5;setTimeout(()=>{let b=new Ee("mfa_timeout","Timed out waiting for MFA code");r.current?.reject(b),m(b)},E)});return await e(y)}return await e()},l=4,c=null;for(let u=0;u<l;u++)try{c=await s(u),r.current?.resolve(void 0);break}catch(y){if(y.type==="missing_or_invalid_mfa")a=!0;else throw r.current?.resolve(void 0),y}if(c===null){let u=new Ee("mfa_verification_max_attempts_reached","Max MFA verification attempts reached");throw r.current?.reject(u),u}return c}import{jsx as z0}from"react/jsx-runtime";var U0=function(e){return()=>`id-${e++}`}(0);function F0(e){return typeof e.event=="string"&&/^privy:.+/.test(e.event)}function Gt(e){return e.error!==void 0}var Tt=new Oa,El=new Map,B0=(e,t)=>typeof t=="bigint"?t.toString():t,H0=(e,t)=>`${e}${JSON.stringify(t,B0)}`;function zt(e,t,o){let r=o.contentWindow;if(!r)throw new Error("iframe not initialized");let n=H0(e,t);if(e==="privy:wallet:create"){let a=El.get(n);if(a)return a}let i=new Promise((a,s)=>{let l=U0();Tt.enqueue(l,{resolve:a,reject:s}),r.postMessage({id:l,event:e,data:t},"*")}).finally(()=>{El.delete(n)});return El.set(n,i),i}function G0(e){switch(e.event){case"privy:iframe:ready":let t=Tt.dequeue(e.event,e.id);return Gt(e)?t.reject(new Ee(e.error.type,e.error.message)):t.resolve(e.data);case"privy:wallet:create":let o=Tt.dequeue(e.event,e.id);return Gt(e)?o.reject(new Ee(e.error.type,e.error.message)):o.resolve(e.data);case"privy:wallet:connect":let r=Tt.dequeue(e.event,e.id);return Gt(e)?r.reject(new Ee(e.error.type,e.error.message)):r.resolve(e.data);case"privy:wallet:recover":let n=Tt.dequeue(e.event,e.id);return Gt(e)?n.reject(new Ee(e.error.type,e.error.message)):n.resolve(e.data);case"privy:wallet:rpc":let i=Tt.dequeue(e.event,e.id);return Gt(e)?i.reject(new Ee(e.error.type,e.error.message)):i.resolve(e.data);case"privy:wallet:set-recovery-password":let a=Tt.dequeue(e.event,e.id);return Gt(e)?a.reject(new Ee(e.error.type,e.error.message)):a.resolve(e.data);case"privy:mfa:verify":let s=Tt.dequeue(e.event,e.id);return Gt(e)?s.reject(new Ee(e.error.type,e.error.message)):s.resolve(e.data);case"privy:mfa:init-enrollment":{let l=Tt.dequeue(e.event,e.id);return Gt(e)?l.reject(new Ee(e.error.type,e.error.message)):l.resolve(e.data)}case"privy:mfa:submit-enrollment":{let l=Tt.dequeue(e.event,e.id);return Gt(e)?l.reject(new Ee(e.error.type,e.error.message)):l.resolve(e.data)}case"privy:mfa:unenroll":{let l=Tt.dequeue(e.event,e.id);return Gt(e)?l.reject(new Ee(e.error.type,e.error.message)):l.resolve(e.data)}default:console.warn("Unsupported wallet proxy method:",e)}}function nf(e){let t=O0(null),o=Kc();return D0(()=>{let r=t.current;if(!r)return;function n(c){c&&c.origin===e.origin&&F0(c.data)&&G0(c.data)}let i={create(c){return zt("privy:wallet:create",c,r)},connect(c){return zt("privy:wallet:connect",c,r)},recover(c){return tr(u=>zt("privy:wallet:recover",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)},rpc(c){return tr(u=>zt("privy:wallet:rpc",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},setRecoveryPassword(c){return tr(u=>zt("privy:wallet:set-recovery-password",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},verifyMfa(c){return tr(u=>zt("privy:mfa:verify",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)},initEnrollMfa(c){return tr(u=>zt("privy:mfa:init-enrollment",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},submitEnrollMfa(c){return zt("privy:mfa:submit-enrollment",c,r)},unenrollMfa(c){return tr(u=>zt("privy:mfa:unenroll",{...c,...u},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)}};window.addEventListener("message",n);let a=()=>e.onLoad(i),s=(...c)=>{console.warn("Privy iframe failed to load: ",...c),e.onLoadFailed()},l=new AbortController;return yc(()=>zt("privy:iframe:ready",{},r),{abortSignal:l.signal}).then(a,s),()=>{window.removeEventListener("message",n),l.abort()}},[t.current,e.mfaMethods]),z0("iframe",{ref:t,width:"0",height:"0",style:{display:"none",height:"0px",width:"0px"},src:si(e.origin,`/apps/${e.appId}/embedded-wallets`,{caid:e.clientAnalyticsId})})}var Da=class{constructor(t,o){this.meta={action:t,phoneNumber:o}}async init(){if(!this.meta.action)throw new w("action required");if(!this.api)throw new w("Auth flow has no API instance");if(this.meta.action==="enroll"&&!this.meta.phoneNumber)throw new w("phone number must be set when initialzing authentication.");try{let t=Ql();await this.api.post(t,{action:this.meta.action,phoneNumber:this.meta.phoneNumber})}catch(t){throw te(t)}}async authenticate(){if(!this.meta.action)throw new w("action required");if(!this.api)throw new w("Mfa flow has no API instance");if(!this.meta.smsCode)throw new w("sms code must be set prior to calling authenticate.");if(this.meta.action==="enroll"&&!this.meta.phoneNumber)throw new w("phone number must be set prior to calling authenticate.");try{let t=Zl(),o=await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode});return gt(o)}catch(t){throw te(t)}}};import{jsx as Mo,jsxs as af}from"react/jsx-runtime";var qn;function q0(e){return typeof e=="string"&&e.length===25}function ke(){if(!qn){let e=Z.get(ar);return Promise.resolve(e||null)}return qn.getAccessToken()}var sf,Ec=(e,t)=>sf(e,t),lf,Pc=(e,t)=>lf(e,t),cf,xc=()=>cf(),K0=()=>{let t=new URLSearchParams(window.location.search).get("privy_token");if(!t)return;Z.put(Qr,t);let o=new URL(window.location.href);o.searchParams.delete("privy_token"),window.history.pushState({},"",o)},Y0=({config:e,...t})=>{if(!q0(t.appId))throw new w("Cannot initialize the Privy provider with an invalid Privy app ID");qn||(qn=new sn({appId:t.appId,apiUrl:t.apiUrl||ri}));let o=Object.assign({},e);return t.createPrivyWalletOnLogin!==void 0&&o.embeddedWallets?.createOnLogin===void 0&&(o.embeddedWallets||(o.embeddedWallets={}),o.embeddedWallets.createOnLogin=t.createPrivyWalletOnLogin?"users-without-wallets":"off"),t.createPrivyWalletOnLogin!==void 0&&e?.embeddedWallets?.createOnLogin&&console.warn("Both `createPrivyWalletOnLogin` and `config.embeddedWallets.createOnLogin` are set. `createPrivyWalletOnLogin` is deprecated and should be removed."),Mo(J0,{...t,config:o,client:qn})},J0=e=>{let t=e.client,[o,r]=de(!1),[n,i]=de(!1),[a,s]=de(!1),[l,c]=de(null),[u,y]=de(!1),[C,m]=de([]),E=jn(C),[b,x]=de(!1),[v,W]=de(null),[M,R]=de(!1),[k,A]=de({status:"disconnected",connectError:null,connector:null,connectRetry:P}),[L,F]=de(null),[H,N]=de(null),[_,Q]=de(null),[re,pe]=de({showWalletLoginFirst:!0,allowlistConfig:{errorTitle:null,errorDetail:null,errorCtaText:null,errorCtaLink:null},walletAuth:!0,emailAuth:!0,smsAuth:!1,googleOAuth:!1,twitterOAuth:!1,discordOAuth:!1,githubOAuth:!1,linkedinOAuth:!1,appleOAuth:!1,termsAndConditionsUrl:null,privacyPolicyUrl:null,embeddedWalletConfig:{createOnLogin:"off",requireUserPasswordOnCreate:!1},fiatOnRampEnabled:!1,captchaEnabled:!1,captchaSiteKey:""}),[O,Le]=de(()=>{let p=rf(e.config,e.createPrivyWalletOnLogin);return t.createAnalyticsEvent("sdk_initialize",p),Na(re,e.config)}),[st,ge]=de(!0),[Se,ee]=de({}),[se,or]=de(null),[J,no]=de(null),[$t,Lo]=de(!1),No=jn(null),Kn=jn(null),ie=jn(jc),Oo=jn(),ve=p=>{W(p),r(!0),t.createAnalyticsEvent("modal_open",{initialScreen:p})},Ne=p=>{O.embeddedWallets.createOnLogin!=="off"&&ge(!0),ve(p)};Vt(()=>{if(!_||!l){t.connectors?.removeEmbeddedWalletConnector();return}let p=l?.linkedAccounts.filter(d=>d.type==="wallet"&&d.walletClient==="privy");if(p&&p.length>0){let d=p[0].address;t.connectors?.addEmbeddedWalletConnector(_,d,O.defaultChain)}},[_,l]),Vt(()=>{_&&J?.(_)},[_]),Vt(()=>{(async()=>{if(!O.customAuth?.enabled)return;ge(!0);let{getCustomAccessToken:d,isLoading:h}=O.customAuth;if(!(!n||h))try{let g=await d();if(!g){await Kr.logout();return}if(a)return;t.startAuthFlow(new ir(g));let{user:D,isNewUser:X}=await t.authenticate();D||await Kr.logout(),c(D||null),x(X||!1),s(!0),Lo(!0)}catch(g){console.warn(g),a&&await Kr.logout()}})()},[O.customAuth?.enabled,O.customAuth?.getCustomAccessToken,O.customAuth?.isLoading,n,a]),Vt(()=>{$t&&_&&l&&lo(l,e.config?.embeddedWallets?.createOnLogin)&&(Lo(!1),xl(l,sr).catch(console.error))},[$t&&_&&l]),Vt(()=>{async function p(){let d=await t.getServerConfig();pe(d);let h=Na(d,e.config);Le(h),d.customApiUrl&&t.updateApiUrl(d.customApiUrl);let g=$0();F(g),t.initializeConnectorManager(h.walletConnectCloudProjectId,h.rpcConfig,h.chains,h.defaultChain,g),t.connectors?.initialize();let D=Fa();K0();let X=await t.getAuthenticatedUser();e.config?.customAuth?.enabled||(s(!!X),X&&le(ie,"login","onComplete",X,!1,!0,null),c(X)),D||we.setReadyToTrue(),D&&X&&y(!0),jr()}n||p()},[t,se,n]),Vt(()=>{let p=Na(re,e.config);Le(p)},[e.config,re]);let Fa=()=>{let p=new URLSearchParams(window.location.search),d=p.get("privy_oauth_code"),h=p.get("privy_oauth_state"),g=p.get("privy_oauth_provider");return d&&h&&g?(t.startAuthFlow(new ao(g,d,h)),Ne("AWAITING_OAUTH_SCREEN"),!0):!1},Do=async(p,d,h)=>{let g=await t.connectors?.createWalletConnector(p,d)||null;Uo(g,d,h)};async function Uo(p,d,h){if(!p)return A({status:"disconnected",connectError:new G("Unable to connect to wallet."),connector:null,connectRetry:P}),h?.(null);p instanceof It&&d&&p.resetConnection(d),A({connector:p,status:"connecting",connectError:null,connectRetry:()=>Uo(p,d,h)});try{let g=await p.connect({showPrompt:!0});if(O.shouldSwitchChainOnConnect&&!O.chains.find(D=>D.id===Number(g?.chainId))&&!(g?.connectorType==="wallet_connect_v2"&&g?.walletClientType==="metamask")){A(D=>({...D,connector:p,status:"switching_to_supported_chain",connectError:null,connectRetry:P}));try{await g?.switchChain(O.defaultChain.id),g&&(g.chainId=lr(zo(O.defaultChain.id)))}catch{console.warn(`Unable to switch to default chain: ${O.defaultChain.id}`)}}return A(D=>({...D,status:"connected",connectError:null,connectRetry:P})),g&&!M&&le(ie,"connectWallet","onSuccess",g),h?.(g)}catch(g){return g instanceof Ye?(console.warn(g.cause?g.cause:g.message),M||le(ie,"connectWallet","onError",g.privyErrorCode||"generic_connect_wallet_error")):(console.warn(g),M||le(ie,"connectWallet","onError","unknown_connect_wallet_error")),A(D=>({...D,status:"disconnected",connectError:g})),h?.(null)}}let $r=p=>{p!==null&&t.startAuthFlow(new Ho(p))},jr=()=>{let p=new URLSearchParams(window.location.search),d=p.get("privy_connector"),h=p.get("privy_wallet_client");if(!d||!h)return;if(h==="phantom"&&!_t()&&Ne("LOGIN_FAILED_SCREEN"),!t.connectors)throw new w("Connector not initialized");ve("AWAITING_CONNECTION");let g=new URL(window.location.href);g.searchParams.delete("privy_connector"),g.searchParams.delete("privy_wallet_client"),window.history.pushState({},"",g),Do(d,h,$r)};Vt(()=>{n&&a&&l===null&&t.getAuthenticatedUser().then(c)},[n,a,l,t]);let Fo=()=>{if(!a)throw new w("User must be authenticated before linking a wallet.");y(!0),ve("LINK_WALLET_SCREEN")},ze=p=>{if(!a||!l)return!1;for(let d of l.linkedAccounts)if(d.type==="wallet"&&d.address===p.address)return!0;return!1},Ke=async p=>{if(!t.connectors)throw new w("Connector not initialized");let d=t.connectors.findWalletConnector(p.connectorType,p.walletClientType)||null;A(h=>({...h,connector:d,status:"connected",connectError:null,connectRetry:P})),$r(p),Ne("AWAITING_CONNECTION")},lt=async(p,d)=>{Oo.current="siwe",await Uo(p,d,$r)},Ba=async(p,d)=>{if(!O.fiatOnRamp.enabled)throw new w("Fiat on-ramp is not enabled");if(!d||!d.provider||d.provider==="moonpay"){let{signedUrl:h,externalTransactionId:g}=await xp(t,p,d?.config??{},O.appearance.palette,O.fiatOnRamp.useSandbox);return{signedUrl:h,externalTransactionId:g}}else throw new w("Unsupported fund provider. Currently supported option is `moonpay`.")},Ve=()=>{m(p=>{let d=t.connectors?.wallets.map(h=>({...h,linked:ze(h),loginOrLink:async()=>{if(!await h.isConnected())throw new w("Wallet is not connected");if(h.connectorType==="embedded"&&h.walletClientType==="privy")throw new w("Cannot link or login with embedded wallet");Ke(h)},fund:async g=>{let{signedUrl:D,externalTransactionId:X}=await Ba(h.address,g);ee({fiatOnRampPrompt:{signedUrl:D},fiatOnRampStatus:{externalTransactionId:X}}),ve("FIAT_ON_RAMP_PROMPT_SCREEN")},unlink:async()=>{if(!a)throw new w("User is not authenticated.");if(h.connectorType==="embedded"&&h.walletClientType==="privy")throw new w("Cannot unlink an embedded wallet");let g=await t.unlinkWallet(h.address);c(g)}}))||[];return ci(p,d)?p:d})};Vt(()=>{Ve()},[l?.linkedAccounts,a,n]),Vt(()=>{if(n){if(!t.connectors)throw new w("Connector not initialized");Ve(),t.connectors.on("walletsUpdated",Ve)}},[n]);let qr=()=>{ve(a?"CONNECT_ONLY_AUTHENTICATED_SCREEN":"CONNECT_ONLY_LANDING_SCREEN")};Vt(()=>{if(!C[0])return;let p=C[0],d=E.current.find(g=>g.address===p.address),h=l?.linkedAccounts.find(g=>g.type==="wallet"&&g.address===p.address);if(!d&&h){let g=Object.assign({},l);g.wallet=h&&{address:h.address,chainType:h.chainType,chainId:h.chainId,walletClient:h.walletClient,walletClientType:h.walletClientType,connectorType:h.connectorType},c(g)}E.current=C},[C]);let xl=async(p,d)=>{if(ne(p))throw le(ie,"createWallet","onError","embedded_wallet_already_exists"),new Error("Only one Privy wallet per user is currently allowed");let[g,D]=await Promise.all([we.initializeWalletProxy(d),ke()]);if(!g&&e.config?.customAuth?.enabled)throw le(ie,"createWallet","onError","unknown_embedded_wallet_error"),new Error("Failed to connect to wallet proxy");if(!g||!D||e.config?.embeddedWallets?.requireUserPasswordOnCreate)return new Promise((X,_e)=>{ge(!0),ee({createWallet:{onSuccess:ct=>{le(ie,"createWallet","onSuccess",ct),X(ct)},onFailure:ct=>{le(ie,"createWallet","onError","unknown_embedded_wallet_error"),_e(ct)},callAuthOnSuccessOnClose:!1}}),ve("EMBEDDED_WALLET_ON_ACCOUNT_CREATE_SCREEN")});{await g.create({accessToken:D});let X=await we.refreshUser(),_e=ne(X);if(!_e)throw le(ie,"createWallet","onError","unknown_embedded_wallet_error"),new Error("Failed to create wallet");return le(ie,"createWallet","onSuccess",_e),_e}},pf=p=>{if(!O.chains.map(d=>d.id).includes(p))throw new G(`Chain ID ${p} is not supported. It must be added to the config.supportedChains property of the PrivyProvider.`,"unsupported_chain_id")},Tl=(p,d,h)=>new Promise(async(g,D)=>{if(!a||!l){D(new Error("User must be authenticated before signing with a Privy wallet"));return}let X=ne(l);if(!X){D(new Error("Must have a Privy wallet before signing"));return}ge(!0);let _e=t.connectors?.findWalletConnector("embedded","privy")?.proxyProvider,rr=p.chainId?Number(p.chainId):_e.chainId;pf(rr);let ct=Object.assign({},p,{chainId:rr}),Yr=async()=>{let io=await ke();if(!io||!_){D(new Error("Must have valid access token and Privy wallet to send transaction"));return}try{if(!await we.recoverEmbeddedWallet()){D(new Error("Unable to connect to wallet"));return}let _l=new V0(vt(ct.chainId,O.chains,O.rpcConfig)),mf=await Gr(X.address,ct,_l),ff=await _a(io,X.address,_,mf,_l);g(ff)}catch(Yn){D(Yn)}};if(O.embeddedWallets.noPromptOnSignature)d&&console.warn("uiOptions defined with `noPromptOnSignature` set to true in app config"),Yr();else{let io={transactionRequest:ct,onSuccess:g,onFailure:D,uiOptions:d||{},fundWalletConfig:h},Yn={onCompleteNavigateTo:"EMBEDDED_WALLET_SEND_TRANSACTION_SCREEN",onFailure:D};ee({connectWallet:Yn,sendTransaction:io}),ve("EMBEDDED_WALLET_CONNECTING_SCREEN")}});function Sl(){return new Promise(async(p,d)=>{let h=await ke();if(!h||!_)throw new Error("Must have valid access token to enroll in MFA");try{await _.verifyMfa({accessToken:h}),p()}catch(g){d(g)}})}let Kr={ready:n,authenticated:a,user:l,walletConnectors:t.connectors||null,connectWallet:qr,linkWallet:Fo,linkEmail:()=>{if(!a)throw new w("User must be authenticated before linking an email address.");if(l?.email)throw new w("User already has an email linked to their account.");y(!0),ve("LINK_EMAIL_SCREEN")},linkPhone:()=>{if(!a)throw new w("User must be authenticated before linking a phone number.");if(l?.phone)throw new w("User already has a phone number linked to their account.");y(!0),ve("LINK_PHONE_SCREEN")},linkGoogle:async()=>{if(!a)throw new w("User must be authenticated before linking a Google account.");if(l?.google)throw new w("User already has a Google account linked to their account.");await we.initLoginWithOAuth("google")},linkTwitter:async()=>{if(!a)throw new w("User must be authenticated before linking a Twitter account.");if(l?.twitter)throw new w("User already has a Twitter account linked to their account.");await we.initLoginWithOAuth("twitter")},linkDiscord:async()=>{if(!a)throw new w("User must be authenticated before linking a Discord account.");if(l?.discord)throw new w("User already has a Discord account linked to their account.");await we.initLoginWithOAuth("discord")},linkGithub:async()=>{if(!a)throw new w("User must be authenticated before linking a GitHub account.");if(l?.github)throw new w("User already has a Github account linked to their account.");await we.initLoginWithOAuth("github")},linkTiktok:async()=>{if(!a)throw new w("User must be authenticated before linking a TikTok account.");if(l?.tiktok)throw new w("User already has a Tiktok account linked to their account.");await we.initLoginWithOAuth("tiktok")},linkLinkedIn:async()=>{if(!a)throw new w("User must be authenticated before linking a LinkedIn account.");if(l?.linkedin)throw new w("User already has a LinkedIn account linked to their account.");await we.initLoginWithOAuth("linkedin")},linkApple:async()=>{if(!a)throw new w("User must be authenticated before linking an Apple account.");await we.initLoginWithOAuth("apple")},login:async()=>{if(n||(await new Promise(p=>{or(()=>p)}),or(null)),a){console.warn("Attempted to log in, but user is already logged in. Use a `link` helper instead.");return}R(!0),Ne("LANDING")},logout:async()=>{await t.logout(),c(null),s(!1),W(null),le(ie,"logout","onSuccess"),y(!1),r(!1),Z.del(Zr)},getAccessToken:()=>t.getAccessToken(),getEthereumProvider:()=>{if(!l||!l.wallet)return new oe;let p=C.find(h=>l.wallet&&h.address===l.wallet.address),d=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===p?.address));return!p||!d?new oe:d.proxyProvider},getEthersProvider:()=>{if(!l||!l.wallet)return new Pl(new At(new oe));let p=C.find(h=>l.wallet&&h.address===l.wallet.address),d=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===p?.address));return!p||!d?new Pl(new At(new oe)):new Pl(new At(d.proxyProvider))},getWeb3jsProvider:()=>{if(!l||!l.wallet)return new uo(new oe);let p=C.find(h=>l.wallet&&h.address===l.wallet.address),d=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===p?.address));return!p||!d?new uo(new oe):new uo(d.proxyProvider)},unlinkWallet:async p=>{let d=await t.unlinkWallet(p);return c(d),d},unlinkEmail:async p=>{let d=await t.unlinkEmail(p);return c(d),d},unlinkPhone:async p=>{let d=await t.unlinkPhone(p);return c(d),d},unlinkGoogle:async p=>{let d=await t.unlinkOAuth("google",p);return c(d),d},unlinkTwitter:async p=>{let d=await t.unlinkOAuth("twitter",p);return c(d),d},unlinkDiscord:async p=>{let d=await t.unlinkOAuth("discord",p);return c(d),d},unlinkGithub:async p=>{let d=await t.unlinkOAuth("github",p);return c(d),d},unlinkTiktok:async p=>{let d=await t.unlinkOAuth("tiktok",p);return c(d),d},unlinkLinkedIn:async p=>{let d=await t.unlinkOAuth("linkedin",p);return c(d),d},unlinkApple:async p=>{let d=await t.unlinkOAuth("apple",p);return c(d),d},setActiveWallet:async p=>{let d=C.find(g=>Ua(g.address)===Ua(p)),h=l?.linkedAccounts.find(g=>g.type==="wallet"&&Ua(g.address)===Ua(p));if(!d||!await d.isConnected())N(p),Fo();else if(!d.linked)d.loginOrLink();else{let g=Object.assign({},l);g.wallet=h&&{address:h.address,chainType:h.chainType,chainId:h.chainId,walletClient:h.walletClient,walletClientType:h.walletClientType,connectorType:h.connectorType},c(g)}},forkSession:()=>t.forkSession(),createWallet:async()=>{if(!a||!l)throw le(ie,"createWallet","onError","must_be_authenticated"),new Error("User must be authenticated before creating a Privy wallet");return xl(l,15e3)},setWalletPassword:()=>new Promise(async(p,d)=>{if(!a||!l){d(new Error("User must be authenticated before adding password to Privy wallet"));return}let h=ne(l);if(!h||!_){d(new Error("Must have a Privy wallet to add a password"));return}if(h.recoveryMethod==="user-passcode"){d(new Error("Cannot set password. Embedded wallet already has a password."));return}await Sl(),ge(!0);let g={onSuccess:p,onFailure:d,callAuthOnSuccessOnClose:!1},D={onCompleteNavigateTo:"EMBEDDED_WALLET_PASSWORD_UPDATE_SPLASH_SCREEN",onFailure:d};ee({setWalletPassword:g,connectWallet:D}),ve("EMBEDDED_WALLET_CONNECTING_SCREEN")}),signMessage:(p,d)=>new Promise(async(h,g)=>{if(!a||!l){g(new Error("User must be authenticated before signing with a Privy wallet"));return}let D=ne(l);if(!D){g(new Error("Must have a Privy wallet before signing"));return}if(typeof p!="string"||p.length<1){g(new Error("Message must be a non-empty string"));return}ge(!0);let X=async()=>{if(!a)throw new Error("User must be authenticated before signing with a Privy wallet");let _e=await ke();if(!_||!_e)throw new Error("Unable to connect to wallet");if(!await we.recoverEmbeddedWallet())throw new Error("Unable to connect to wallet");t.createAnalyticsEvent("embedded_wallet_sign_message_started",{walletAddress:D.address});let{response:ct}=await _.rpc({accessToken:_e,address:D.address,request:{method:"personal_sign",params:[p,D.address]}}),Yr=ct.data;return t.createAnalyticsEvent("embedded_wallet_sign_message_completed",{walletAddress:D.address}),Yr};if(O.embeddedWallets.noPromptOnSignature){d&&console.warn("uiOptions defined with `noPromptOnSignature` set to true in app config");try{let _e=await X();h(_e)}catch(_e){g(_e??new Oe("Unable to sign message"))}}else{let ct={message:p,confirmAndSignMessage:X,onSuccess:io=>{h(io)},onFailure:io=>{g(io)},uiOptions:d||{}},Yr={onCompleteNavigateTo:"EMBEDDED_WALLET_SIGN_REQUEST_SCREEN",onFailure:g};ee({signMessage:ct,connectWallet:Yr}),ve("EMBEDDED_WALLET_CONNECTING_SCREEN")}}),sendTransaction:async(p,d,h)=>{let D=await(await Tl(p,d,h)).wait();return Aa(D)},exportWallet:()=>new Promise(async(p,d)=>{if(!a||!l){d(new Error("User must be authenticated before exporting their Privy wallet"));return}if(!ne(l)){d(new Error("Must have a Privy wallet before exporting"));return}ge(!0);let g={onCompleteNavigateTo:"EMBEDDED_WALLET_KEY_EXPORT_SCREEN",onFailure:d},D=await ke();if(!D||!_)throw new Error("Must have valid access token to enroll in MFA");if(!_){d(new Error("Must have a Privy wallet before exporting"));return}await _.verifyMfa({accessToken:D});let X={appId:e.appId,origin:t.apiUrl,onSuccess:p,onFailure:d};ee({keyExport:X,connectWallet:g}),ve("EMBEDDED_WALLET_CONNECTING_SCREEN")}),promptMfa:Sl,async init(p){let d;switch(p){case"sms":d=new Da("verify");break;case"totp":return;default:throw new Error(`Unsupported MFA method: ${p}`)}t.startMfaFlow(d),await d.init()},async submit(p,d){switch(p){case"totp":case"sms":No.current?.resolve({mfaMethod:p,mfaCode:d}),await new Promise((h,g)=>{Kn.current={resolve:h,reject:g}});break;default:throw No.current?.reject(new w("Unsupported MFA method")),new w(`Unsupported MFA method: ${p}`)}},cancel(){No.current?.reject(new w("MFA canceled"))},async initEnrollmentWithSms(p){let d=await ke();if(!d||!_)throw new Error("Must have valid access token to enroll in MFA");await _.initEnrollMfa({method:"sms",accessToken:d,phoneNumber:p.phoneNumber})},enrollInMfa(p){return new Promise((d,h)=>{if(!p){we.closePrivyModal(),d();return}O.mfa.noPromptOnMfaRequired&&console.warn("[Privy Warning] Triggering the 'showMfaEnrollmentModal' function when 'noPromptOnMfaRequired' is set to true is unexpected. If this is intentional, ensure that you are building custom UIs for MFA verification."),ee({mfaEnrollmentFlow:{mfaMethods:O.mfa.methods,onSuccess:d,onFailure:h}}),ve("MFA_ENROLLMENT_FLOW_SCREEN")})},async initEnrollmentWithTotp(){let p=await ke();if(!p||!_)throw new Error("Must have valid access token to enroll in MFA");let d=await _.initEnrollMfa({method:"totp",accessToken:p});return{secret:d.secret,authUrl:d.authUrl}},async submitEnrollmentWithSms(p){let d=await ke();if(!d||!_)throw new Error("Must have valid access token to enroll in MFA");await _.submitEnrollMfa({method:"sms",accessToken:d,phoneNumber:p.phoneNumber,code:p.mfaCode});let h=await t.getAuthenticatedUser();c(h)},async submitEnrollmentWithTotp(p){let d=await ke();if(!d||!_)throw new Error("Must have valid access token to enroll in MFA");await _.submitEnrollMfa({method:"totp",accessToken:d,code:p.mfaCode});let h=await t.getAuthenticatedUser();c(h)},async unenroll(p){let d=await ke();if(!d||!_)throw new Error("Must have valid access token to remove MFA");await _.unenrollMfa({method:p,accessToken:d});let h=await t.getAuthenticatedUser();c(h)},loginWithCode(p){return we.loginWithCode(p)},initLoginWithEmail(p,d){return we.initLoginWithEmail(p,d)},isModalOpen:o};sf=Kr.signMessage,lf=async(...p)=>{let d=await Tl(...p);return O.embeddedWallets.waitForTransactionConfirmation&&await d.wait(),d};let we=(()=>({isNewUserThisSession:b,isLinking:u,linkingHint:H,pendingTransaction:null,walletConnectionStatus:k,mipdStore:L,connectors:t.connectors?.walletConnectors??[],rpcConfig:O.rpcConfig,chains:O.chains,showFiatPrices:O.embeddedWallets.priceDisplay.primary!=="native-token",clientAnalyticsId:t.clientAnalyticsId,nativeTokenSymbolForChainId:p=>O.chains.find(d=>d.id===Number(p))?.nativeCurrency.symbol,initializeWalletProxy:async p=>{if(_)return _;let d=new Promise(D=>{no(()=>X=>D(X))}),h=new Promise(D=>setTimeout(()=>D(null),p)),g=await Promise.race([d,h]);return no(null),g},getAuthFlow:()=>t.authFlow,getAuthMeta:()=>t.authFlow?.meta,closePrivyModal:(p={shouldCallAuthOnSuccess:!0})=>{let d=n&&a&&l;p.shouldCallAuthOnSuccess&&d?(le(ie,"login","onComplete",l,b,!1,Oo.current??null),e.onSuccess?.(l,b)):M&&le(ie,"login","onError","exited_auth_flow"),N(null),R(!1),y(!1),x(!1),r(!1),setTimeout(()=>{t.authFlow=void 0},200),t.createAnalyticsEvent("modal_closed")},connectWallet:Uo,initLoginWithWallet:lt,loginWithWallet:async()=>{if(!n)throw new Jr;if(!(t.authFlow instanceof Ho))throw new w("Must initialize SIWE flow first.");let p,d;if(a)p=await t.link();else try{({user:p,isNewUser:d}=await t.authenticate())}catch(h){throw le(ie,"login","onError",h.privyErrorCode||"generic_connect_wallet_error"),h}c(p||l||null),x(d||!1),s(!0)},initLoginWithOAuth:async p=>{t.startAuthFlow(new ao(p));let d=await t.authFlow.getAuthorizationUrl();d&&d.url&&window.location.assign(d.url)},loginWithOAuth:async p=>{if(!(t.authFlow instanceof ao))throw new w("Must initialize OAuth flow before calling loginWithOAuth");let d,h;if(a)d=await t.link();else try{({user:d,isNewUser:h}=await t.authenticate()),Oo.current=p}catch(g){throw le(ie,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}c(d),x(h||!1),s(!0)},initLoginWithEmail:async(p,d)=>{let h=new Bo(p,d);t.startAuthFlow(h);try{Oo.current="email",await h.sendCodeEmail()}catch(g){throw le(ie,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}},initLoginWithSms:async(p,d)=>{let h=new Go(p,d);t.startAuthFlow(h);try{Oo.current="sms",await h.sendSmsCode()}catch(g){throw le(ie,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}},resendEmailCode:async()=>{await t.authFlow?.sendCodeEmail()},resendSmsCode:async()=>{await t.authFlow?.sendSmsCode()},loginWithCode:async p=>{if(!n)throw new Jr;if(t.authFlow instanceof Bo)t.authFlow.meta.emailCode=p.trim();else if(t.authFlow instanceof Go)t.authFlow.meta.smsCode=p.trim();else throw new w("Must initialize a passwordless code flow first");let d,h;a?d=await t.link():{user:d,isNewUser:h}=await t.authenticate(),c(d||l||null),x(h||!1),s(!0)},refreshUser:async()=>{let p=await t.getAuthenticatedUser();return c(p),p},walletProxy:_,createAnalyticsEvent:(p,d,h)=>t.createAnalyticsEvent(p,d,h),getUsdTokenPrice:p=>t.getUsdTokenPrice(p),recoverEmbeddedWallet:async()=>new Promise(async(p,d)=>{let h=l?.linkedAccounts.find(D=>D.type==="wallet"&&D.walletClientType==="privy"),g=await ke();if(!g||!_||!h){d(new Error("Must have valid access token and Privy wallet to recover wallet"));return}ge(!0);try{await _.connect({accessToken:g,address:h.address}),p(!0)}catch(D){Pr(D)&&h.recoveryMethod==="privy"?(t.createAnalyticsEvent("embedded_wallet_pinless_recovery_started",{walletAddress:h.address}),(await _.recover({address:h.address,accessToken:g})).address||d(new Error("Unable to recover wallet")),t.createAnalyticsEvent("embedded_wallet_recovery_completed",{walletAddress:h.address}),p(!0)):Pr(D)?(ee({recoverWallet:{privyWallet:h,onFailure:d,onSuccess:()=>p(!0)}}),ve("EMBEDDED_WALLET_RECOVERY_SCREEN")):d(D)}}),getFiatOnRampConfig:Ba,setReadyToTrue:()=>{i(!0),se?.()},updateWallets:()=>Ve()}))();cf=we.recoverEmbeddedWallet;let uf=j0(()=>({wallets:C}),[C]);return Mo(Ce.Provider,{value:Kr,children:Mo(ts.Provider,{value:ie,children:Mo(fl.Provider,{value:uf,children:af(Up,{...O,children:[e.children,af(ss.Provider,{value:we,children:[Mo(Dm,{theme:{...O.appearance.palette||{}}}),Mo(Rc,{appConfig:O,data:Se,setModalData:ee,setInitialScreen:W,initialScreen:v,visible:o,authenticated:a,children:Mo(Hm,{open:o})}),st&&re.id?Mo(nf,{appId:e.appId,clientAnalyticsId:t.clientAnalyticsId,origin:t.apiUrl,mfaMethods:l?.mfaMethods,mfaPromise:No,mfaSubmitPromise:Kn,onLoad:Q,onLoadFailed:()=>null}):null]})]})})})})};import{useContext as Q0}from"react";function Z0(e){let{login:t}=Q0(Ce);return Mt("login",e),{login:t}}import{useContext as X0}from"react";function eb(e){let{logout:t}=X0(Ce);return Mt("logout",e),{logout:t}}import{useCallback as df}from"react";var tb=()=>{let e=Ut(),{initLoginWithEmail:t,loginWithCode:o}=z(),r=df(async({email:i})=>{if(!i)throw new Error("Email required to send OTP code");if(e.status==="disabled")return t(i);let a=await e.waitForResult();return t(i,a)},[t,e]),n=df(async({code:i})=>{if(e.enabled&&e.status!=="success")throw new Sn(e.error,null,"captcha_failure");return o(i)},[o,e.status]);return{sendCode:r,loginWithCode:n}};import{useContext as ob}from"react";function rb(e){let{connectWallet:t}=ob(Ce);return Mt("connectWallet",e),{connectWallet:t}}import{useContext as nb}from"react";function ib(e){let{createWallet:t}=nb(Ce);return Mt("createWallet",e),{createWallet:t}}import{useContext as ab}from"react";var sb=()=>{let{isModalOpen:e}=ab(Ce);return{isOpen:e}};export{At as AsExternalProvider,_n as Captcha,nn as ConnectorManager,sn as PrivyClient,Y0 as PrivyProvider,oe as PrivyProxyProvider,$n as SUPPORTED_CHAINS,Ga as VERSION,je as WalletConnector,Es as errorIndicatesMaxMfaRetries,xr as errorIndicatesMfaTimeout,Tr as errorIndicatesMfaVerificationFailed,ke as getAccessToken,rb as useConnectWallet,ib as useCreateWallet,Z0 as useLogin,tb as useLoginWithEmail,eb as useLogout,Ur as useMfa,Ln as useMfaEnrollment,sb as useModalStatus,z as usePrivy,os as useRegisterMfaListener,zn as useWallets};
|
package/dist/index.js
CHANGED
|
@@ -2503,4 +2503,4 @@ You will need this password to access your ${e} wallet on a new device. Please k
|
|
|
2503
2503
|
opacity: 1;
|
|
2504
2504
|
}
|
|
2505
2505
|
}
|
|
2506
|
-
`;var Ie=require("react/jsx-runtime"),lv={["LANDING"]:im,["AWAITING_PASSWORDLESS_CODE"]:Qd,["AWAITING_CONNECTION"]:fp,["AWAITING_CONNECT_ONLY_CONNECTION"]:gp,["PHANTOM_INTERSTITIAL_SCREEN"]:Tf,["LOGIN_FAILED_SCREEN"]:um,["AWAITING_OAUTH_SCREEN"]:bf,["ALLOWLIST_REJECTION_SCREEN"]:Hd,["INSTALL_PHANTOM_SCREEN"]:_u,["LINK_EMAIL_SCREEN"]:sm,["LINK_PHONE_SCREEN"]:cm,["LINK_WALLET_SCREEN"]:dm,["CONNECT_ONLY_LANDING_SCREEN"]:pp,["CONNECT_ONLY_AUTHENTICATED_SCREEN"]:ip,["EMBEDDED_WALLET_ON_ACCOUNT_CREATE_SCREEN"]:su,["EMBEDDED_WALLET_CREATED_SCREEN"]:_p,["EMBEDDED_WALLET_CONNECTING_SCREEN"]:xp,["EMBEDDED_WALLET_RECOVERY_SCREEN"]:fu,["EMBEDDED_WALLET_KEY_EXPORT_SCREEN"]:Wp,["EMBEDDED_WALLET_SIGN_REQUEST_SCREEN"]:Lf,["EMBEDDED_WALLET_SEND_TRANSACTION_SCREEN"]:If,["FIAT_ON_RAMP_PROMPT_SCREEN"]:Cu,["FIAT_ON_RAMP_STATUS_SCREEN"]:Eu,["EMBEDDED_WALLET_PASSWORD_UPDATE_SPLASH_SCREEN"]:uu,["EMBEDDED_WALLET_PASSWORD_UPDATE_SCREEN"]:lu,["MFA_ENROLLMENT_FLOW_SCREEN"]:Fm},cv=({isMfaVerifying:e,onMfaVerificationComplete:t})=>{let{ready:o}=q(),{ready:r,currentScreen:n}=_(),i=(0,Ni.useRef)(null),a=Id(i);if((!o||!r)&&n!=="AWAITING_OAUTH_SCREEN")return(0,Ie.jsxs)(In,{children:[(0,Ie.jsx)(T,{}),(0,Ie.jsx)(J,{}),(0,Ie.jsx)(Cm,{children:(0,Ie.jsx)(no,{})}),(0,Ie.jsx)(Q,{}),(0,Ie.jsx)(Z,{})]});if(!n)return null;let s=lv[n];return s?(0,Ie.jsx)(In,{style:{height:a},children:(0,Ie.jsxs)("div",{ref:i,children:[(0,Ie.jsx)(Ao,{if:!!e,children:(0,Ie.jsx)(s,{})}),(0,Ie.jsx)(Ao,{if:!e,children:(0,Ie.jsx)(wf,{open:e,onClose:t})})]})}):null},Bf=({open:e})=>{let{app:t}=_(),[o,r]=(0,Ni.useState)(!1),{gracefulClosePrivyModal:n,onEscape:i}=vm(),[a,s]=(0,Ni.useState)(!1);ya({onMfaRequired:()=>{t?.mfa.noPromptOnMfaRequired||s(!0)}}),(0,Uf.useEffect)(()=>{r(!0)},[]);let l=(0,Ie.jsx)(Df,{children:(0,Ie.jsx)(cv,{isMfaVerifying:a,onMfaVerificationComplete:()=>s(!1)})}),c=e||a,m=t?.render.inDialog?(0,Ie.jsx)("div",{onKeyDown:i,children:(0,Ie.jsx)(wm,{open:c,id:"privy-dialog",onClick:()=>n(),children:l})}):l;if(o){let y=t?.render.inParentNodeId&&document.getElementById(t.render.inParentNodeId)||document.body;return Ff.default.createPortal(m,y)}return null};var Ut={appearance:{theme:"light",accentColor:"#676FFF",walletList:["detected_wallets","metamask","coinbase_wallet","rainbow","wallet_connect"]},walletConnectCloudProjectId:Uc,rpcConfig:{rpcUrls:{},rpcTimeouts:{}},captchaEnabled:!1,_render:{inDialog:!0,inParentNodeId:null},fiatOnRamp:{useSandbox:!1}};var dv=new Set(["metamask","coinbase_wallet","rainbow","zerion","phantom","wallet_connect","detected_wallets"]),pv=e=>dv.has(e),uv=(e,t,o)=>o.indexOf(e)===t,Hf=({input:e})=>e?e.filter(pv).filter(uv):Ut.appearance.walletList;var Gf={id:43114,name:"Avalanche",network:"avalanche",nativeCurrency:{decimals:18,name:"Avalanche",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax.network/ext/bc/C/rpc"]},public:{http:["https://api.avax.network/ext/bc/C/rpc"]}},blockExplorers:{etherscan:{name:"SnowTrace",url:"https://snowtrace.io"},default:{name:"SnowTrace",url:"https://snowtrace.io"}}};var zf={id:43113,name:"Avalanche Fuji",network:"avalanche-fuji",nativeCurrency:{decimals:18,name:"Avalanche Fuji",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax-test.network/ext/bc/C/rpc"]},public:{http:["https://api.avax-test.network/ext/bc/C/rpc"]}},blockExplorers:{etherscan:{name:"SnowTrace",url:"https://testnet.snowtrace.io"},default:{name:"SnowTrace",url:"https://testnet.snowtrace.io"}},testnet:!0};var Vf={id:42220,name:"Celo Mainnet",network:"celo",nativeCurrency:{decimals:18,name:"CELO",symbol:"CELO"},rpcUrls:{default:{http:["https://forno.celo.org"]},infura:{http:["https://celo-mainnet.infura.io/v3"]},public:{http:["https://forno.celo.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/mainnet"},etherscan:{name:"CeloScan",url:"https://celoscan.io"}},testnet:!1};var $f={id:44787,name:"Celo Alfajores Testnet",network:"celo-alfajores",nativeCurrency:{decimals:18,name:"CELO",symbol:"CELO"},rpcUrls:{default:{http:["https://alfajores-forno.celo-testnet.org"]},infura:{http:["https://celo-alfajores.infura.io/v3"]},public:{http:["https://alfajores-forno.celo-testnet.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/alfajores"},etherscan:{name:"CeloScan",url:"https://alfajores.celoscan.io/"}},testnet:!0};var jf={id:314,name:"Filecoin - Mainnet",network:"filecoin-mainnet",nativeCurrency:{decimals:18,name:"filecoin",symbol:"FIL"},rpcUrls:{default:{http:["https://api.node.glif.io/rpc/v1"]},public:{http:["https://api.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filfox",url:"https://filfox.info/en"},filscan:{name:"Filscan",url:"https://filscan.io"},filscout:{name:"Filscout",url:"https://filscout.io/en"},glif:{name:"Glif",url:"https://explorer.glif.io"}}};var qf={id:314159,name:"Filecoin - Calibration testnet",network:"filecoin-calibration",nativeCurrency:{decimals:18,name:"testnet filecoin",symbol:"tFIL"},rpcUrls:{default:{http:["https://api.calibration.node.glif.io/rpc/v1"]},public:{http:["https://api.calibration.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filscan",url:"https://calibration.filscan.io"}}};var Kf={id:5,network:"goerli",name:"Goerli",nativeCurrency:{name:"Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{alchemy:{http:["https://eth-goerli.g.alchemy.com/v2"],webSocket:["wss://eth-goerli.g.alchemy.com/v2"]},infura:{http:["https://goerli.infura.io/v3"],webSocket:["wss://goerli.infura.io/ws/v3"]},default:{http:["https://rpc.ankr.com/eth_goerli"]},public:{http:["https://rpc.ankr.com/eth_goerli"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://goerli.etherscan.io"},default:{name:"Etherscan",url:"https://goerli.etherscan.io"}},testnet:!0};var Yf={id:17e3,name:"Holesky",network:"holesky",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://ethereum-holesky.publicnode.com"]},public:{http:["https://ethereum-holesky.publicnode.com"]}},blockExplorers:{etherscan:{name:"EtherScan",url:"https://holesky.etherscan.io"},default:{name:"EtherScan",url:"https://holesky.etherscan.io"}}};var Jf={id:59144,network:"linea-mainnet",name:"Linea Mainnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{infura:{http:["https://linea-mainnet.infura.io/v3"],webSocket:["wss://linea-mainnet.infura.io/ws/v3"]},default:{http:["https://rpc.linea.build"],webSocket:["wss://rpc.linea.build"]},public:{http:["https://rpc.linea.build"],webSocket:["wss://rpc.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://lineascan.build"},etherscan:{name:"Etherscan",url:"https://lineascan.build"}},testnet:!1};var Qf={id:59140,network:"linea-testnet",name:"Linea Goerli Testnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{infura:{http:["https://linea-goerli.infura.io/v3"],webSocket:["wss://linea-goerli.infura.io/ws/v3"]},default:{http:["https://rpc.goerli.linea.build"],webSocket:["wss://rpc.goerli.linea.build"]},public:{http:["https://rpc.goerli.linea.build"],webSocket:["wss://rpc.goerli.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://goerli.lineascan.build"},etherscan:{name:"Etherscan",url:"https://goerli.lineascan.build"}},testnet:!0};var Ms={id:1,network:"homestead",name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{alchemy:{http:["https://eth-mainnet.g.alchemy.com/v2"],webSocket:["wss://eth-mainnet.g.alchemy.com/v2"]},infura:{http:["https://mainnet.infura.io/v3"],webSocket:["wss://mainnet.infura.io/ws/v3"]},default:{http:["https://cloudflare-eth.com"]},public:{http:["https://cloudflare-eth.com"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://etherscan.io"},default:{name:"Etherscan",url:"https://etherscan.io"}}};var Zf={id:17001,name:"Redstone Holesky",network:"redstone-holesky",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.holesky.redstone.xyz"]},public:{http:["https://rpc.holesky.redstone.xyz"]}},blockExplorers:{etherscan:{name:"EtherScan",url:"https://explorer.holesky.redstone.xyz"},default:{name:"EtherScan",url:"https://explorer.holesky.redstone.xyz"}}};var Xf={id:11155111,network:"sepolia",name:"Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"SEP",decimals:18},rpcUrls:{alchemy:{http:["https://eth-sepolia.g.alchemy.com/v2"],webSocket:["wss://eth-sepolia.g.alchemy.com/v2"]},infura:{http:["https://sepolia.infura.io/v3"],webSocket:["wss://sepolia.infura.io/ws/v3"]},default:{http:["https://rpc.sepolia.org"]},public:{http:["https://rpc.sepolia.org"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://sepolia.etherscan.io"},default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}},testnet:!0};var zn=[fs,hs,ys,Kf,Xf,Ms,ws,Cs,Wi,Mi,Vf,$f,jf,qf,gs,vs,Jf,Qf,Gf,zf,bs,Es,Yf,Zf],o8=new Set(zn.map(e=>e.id));var fr=S(require("tinycolor2")),eh="#FFFFFF",mv="#000000",fv=eh,hv="#1E1E1D";function yv(e){return e<.8&&e>.2&&console.warn("Background color is not light or dark enough, which could lead to accessibility issues."),e>.5?"light":"dark"}function mr(e,t){let o=Math.max(0,Math.min(1,e.toHsl().l+t));return(0,fr.default)({...e.toHsl(),l:o})}function th({backgroundTheme:e,accentHex:t,successHex:o="#51BA81",warnHex:r="#FFB74D",errorHex:n="#EC6351",whiteHex:i=eh,blackHex:a=mv}){let s;switch(e){case"light":s=fv;break;case"dark":s=hv;break;default:s=e;break}let l=(0,fr.default)(s),c=(0,fr.default)(t),m=(0,fr.default)(o),y=(0,fr.default)(r),C=(0,fr.default)(n),f=yv(l.getLuminance()),E=mr(l,f==="light"?-.04:.11),b=mr(l,f==="light"?-.88:.87),x=mr(l,f==="light"?-.77:.75),v=mr(l,f==="light"?-.43:.45).desaturate(f==="light"?60:20),M=mr(l,f==="light"?-.08:.25).desaturate(f==="light"?60:20),L=mr(c,.15),I=mr(c,-.06),A=(0,fr.default)(c.getLuminance()>.5?a:i),R=mr(m,-.16);return{colorScheme:f,background:l.toHslString(),background2:E.toHslString(),foreground:b.toHslString(),foreground2:x.toHslString(),foreground3:v.toHslString(),foreground4:M.toHslString(),accent:c.toHslString(),accentLight:L.toHslString(),accentDark:I.toHslString(),foregroundAccent:A.toHslString(),success:m.toHslString(),successDark:R.toHslString(),error:C.toHslString(),warn:y.toHslString()}}function Ls(e,t){let o=["google","twitter","discord","tiktok","linkedin","github","apple"],r=t?.loginMethods?.filter(V=>o.includes(V)),n,i,a,s,l,c,m,y,C,f;t?.loginMethods?(n=t.loginMethods.includes("email"),i=t.loginMethods.includes("sms"),a=t.loginMethods.includes("wallet"),s=r?.includes("google"),l=r?.includes("twitter"),c=r?.includes("discord"),m=r?.includes("tiktok"),C=r?.includes("github"),y=r?.includes("linkedin"),f=r?.includes("apple")):(n=e.emailAuth,i=e.smsAuth,a=e.walletAuth,s=e.googleOAuth,l=e.twitterOAuth,c=e.discordOAuth,C=e.githubOAuth,m=e.tiktokOAuth,y=e.linkedinOAuth,f=e.appleOAuth);let E=[n,i].filter(Boolean),b=[s,l,c,C,m,y,f].filter(Boolean),x=[a].filter(Boolean);if(E.length+b.length+x.length===0)throw new Error("You must enable at least one login method");let v=t?.appearance?.showWalletLoginFirst!==void 0?t?.appearance?.showWalletLoginFirst:e.showWalletLoginFirst;v&&x.length===0?(console.warn("You should only enable `showWalletLoginFirst` when `wallet` logins are also enabled. `showWalletLoginFirst` has been set to false"),v=!1):!v&&b.length+E.length===0&&(console.warn("You should only disable `showWalletLoginFirst` when `email`, `sms`, or social logins are also enabled. `showWalletLoginFirst` has been set to true"),v=!0);let M=Hf({isWalletLoginEnabled:a,input:t?.appearance?.walletList});if(t?.embeddedWallets?.waitForTransactionConfirmation===!1&&t.embeddedWallets.noPromptOnSignature!==!0)throw new Error("Overriding `config.embeddedWallets.waitForTransactionConfirmation` requires that you also enable `config.embeddedWallets.noPromptOnSignature`");let L=t?.intl?.defaultCountry??"US",{chains:I,defaultChain:A}=gv(t?.additionalChains,t?.supportedChains,t?.defaultChain),R=!!t?.defaultChain||!!t?.supportedChains,N=t?.customAuth?.getCustomAccessToken&&t?.customAuth?.enabled!==!1;return{id:e.id,name:e.name,allowlistConfig:e.allowlistConfig,appearance:{logo:t?.appearance?.logo??e.logoUrl,palette:th({backgroundTheme:t?.appearance?.theme??Ut.appearance.theme,accentHex:t?.appearance?.accentColor??e.accentColor??Ut.appearance.accentColor}),loginGroupPriority:v?"web3-first":"web2-first",hideDirectWeb2Inputs:!!t?.appearance?.hideDirectWeb2Inputs,walletList:M},loginMethods:{wallet:a,email:n,sms:i,google:s,twitter:l,discord:c,github:C,tiktok:m,linkedin:y,apple:f},legal:{termsAndConditionsUrl:t?.legal?.termsAndConditionsUrl??e.termsAndConditionsUrl,privacyPolicyUrl:t?.legal?.privacyPolicyUrl??e.privacyPolicyUrl},walletConnectCloudProjectId:t?.walletConnectCloudProjectId??e.walletConnectCloudProjectId??Ut.walletConnectCloudProjectId,rpcConfig:{rpcUrls:t?.rpcConfig?.rpcUrls??Ut.rpcConfig.rpcUrls,rpcTimeouts:t?.rpcConfig?.rpcTimeouts??Ut.rpcConfig.rpcTimeouts},chains:I,defaultChain:A,intl:{defaultCountry:L},shouldSwitchChainOnConnect:R,captchaEnabled:e.captchaEnabled??Ut.captchaEnabled,captchaSiteKey:e.captchaSiteKey,embeddedWallets:{...e.embeddedWalletConfig,...N?{createOnLogin:"all-users",requireUserPasswordOnCreate:!1,noPromptOnSignature:!0}:{},waitForTransactionConfirmation:!0,priceDisplay:{primary:"fiat-currency",secondary:"native-token"},...t?.embeddedWallets},mfa:{methods:e.mfaMethods??[],noPromptOnMfaRequired:t?.mfa?.noPromptOnMfaRequired??!1},customAuth:N?{enabled:!0,...t.customAuth}:void 0,fiatOnRamp:{enabled:e.fiatOnRampEnabled,useSandbox:t?.fiatOnRamp?.useSandbox??Ut.fiatOnRamp.useSandbox},loginConfig:{twitterOAuthOnMobileEnabled:e.twitterOAuthOnMobileEnabled??!1},render:{inDialog:t?._render?.inDialog??Ut._render.inDialog,inParentNodeId:t?._render?.inParentNodeId??Ut._render.inParentNodeId}}}function oh(e,t){if(!e)return{legacyCreateEmbeddedWalletFlag:t};let{appearance:o,additionalChains:r,supportedChains:n,defaultChain:i,...a}=e;return{...a,...r?{additionalChains:r.map(l=>l.id)}:void 0,...n?{supportedChains:n.map(l=>l.id)}:void 0,...i?{defaultChain:i.id}:void 0,...o?{...o,...o.logo&&typeof o.logo?{logo:"component"}:void 0}:void 0,legacyCreateEmbeddedWalletFlag:t}}function gv(e,t,o){let r;if(e&&t&&console.warn("You should only specify one of `additionalChains` or `supportedChains`. Using `supportedChains`."),t){if(t.length===0)throw new Error("`supportedChains` must contain at least one chain");r=t.map(a=>zn.find(l=>l.id===a.id)??a)}else r=zn.concat(e??[]);let n=t?r[0]:Ms,i=o??n;if(!r.find(a=>a.id===i.id))throw new Error("`defaultChain` must be included in `supportedChains`");return{chains:r,defaultChain:i}}var Os=require("react");var Ns=class{constructor(){this.callbacks={}}enqueue(t,o){this.callbacks[t]=o}dequeue(t,o){let r=this.callbacks[o];if(!r)throw new Error(`cannot dequeue ${t} event: no event found for id ${o}`);switch(delete this.callbacks[o],t){case"privy:iframe:ready":return r;case"privy:wallet:create":return r;case"privy:wallet:connect":return r;case"privy:wallet:recover":return r;case"privy:wallet:rpc":return r;case"privy:wallet:set-recovery-password":return r;case"privy:mfa:verify":return r;case"privy:mfa:init-enrollment":return r;case"privy:mfa:submit-enrollment":return r;case"privy:mfa:unenroll":return r;default:throw new Error(`invalid wallet event type ${t}`)}}};async function Fr(e,t,o,r,n,i=!1){let a=i,s=async m=>{if(a&&t&&t.length>0){m===(i?0:1)?n("configureMfa","onMfaRequired",t):r.current?.reject(new He("missing_or_invalid_mfa","MFA verification failed, retry."));let y=await new Promise((C,f)=>{o.current={resolve:C,reject:f};let E=1e3*60*5;setTimeout(()=>{let b=new He("mfa_timeout","Timed out waiting for MFA code");r.current?.reject(b),f(b)},E)});return await e(y)}return await e()},l=4,c=null;for(let m=0;m<l;m++)try{c=await s(m),r.current?.resolve(void 0);break}catch(y){if(y.type==="missing_or_invalid_mfa")a=!0;else throw r.current?.resolve(void 0),y}if(c===null){let m=new He("mfa_verification_max_attempts_reached","Max MFA verification attempts reached");throw r.current?.reject(m),m}return c}var nh=require("react/jsx-runtime"),vv=function(e){return()=>`id-${e++}`}(0);function wv(e){return typeof e.event=="string"&&/^privy:.+/.test(e.event)}function Co(e){return e.error!==void 0}var Jt=new Ns,rc=new Map,Cv=(e,t)=>typeof t=="bigint"?t.toString():t,bv=(e,t)=>`${e}${JSON.stringify(t,Cv)}`;function bo(e,t,o){let r=o.contentWindow;if(!r)throw new Error("iframe not initialized");let n=bv(e,t);if(e==="privy:wallet:create"){let a=rc.get(n);if(a)return a}let i=new Promise((a,s)=>{let l=vv();Jt.enqueue(l,{resolve:a,reject:s}),r.postMessage({id:l,event:e,data:t},"*")}).finally(()=>{rc.delete(n)});return rc.set(n,i),i}function Ev(e){switch(e.event){case"privy:iframe:ready":let t=Jt.dequeue(e.event,e.id);return Co(e)?t.reject(new He(e.error.type,e.error.message)):t.resolve(e.data);case"privy:wallet:create":let o=Jt.dequeue(e.event,e.id);return Co(e)?o.reject(new He(e.error.type,e.error.message)):o.resolve(e.data);case"privy:wallet:connect":let r=Jt.dequeue(e.event,e.id);return Co(e)?r.reject(new He(e.error.type,e.error.message)):r.resolve(e.data);case"privy:wallet:recover":let n=Jt.dequeue(e.event,e.id);return Co(e)?n.reject(new He(e.error.type,e.error.message)):n.resolve(e.data);case"privy:wallet:rpc":let i=Jt.dequeue(e.event,e.id);return Co(e)?i.reject(new He(e.error.type,e.error.message)):i.resolve(e.data);case"privy:wallet:set-recovery-password":let a=Jt.dequeue(e.event,e.id);return Co(e)?a.reject(new He(e.error.type,e.error.message)):a.resolve(e.data);case"privy:mfa:verify":let s=Jt.dequeue(e.event,e.id);return Co(e)?s.reject(new He(e.error.type,e.error.message)):s.resolve(e.data);case"privy:mfa:init-enrollment":{let l=Jt.dequeue(e.event,e.id);return Co(e)?l.reject(new He(e.error.type,e.error.message)):l.resolve(e.data)}case"privy:mfa:submit-enrollment":{let l=Jt.dequeue(e.event,e.id);return Co(e)?l.reject(new He(e.error.type,e.error.message)):l.resolve(e.data)}case"privy:mfa:unenroll":{let l=Jt.dequeue(e.event,e.id);return Co(e)?l.reject(new He(e.error.type,e.error.message)):l.resolve(e.data)}default:console.warn("Unsupported wallet proxy method:",e)}}function rh(e){let t=(0,Os.useRef)(null),o=Ld();return(0,Os.useEffect)(()=>{let r=t.current;if(!r)return;function n(c){c&&c.origin===e.origin&&wv(c.data)&&Ev(c.data)}let i={create(c){return bo("privy:wallet:create",c,r)},connect(c){return bo("privy:wallet:connect",c,r)},recover(c){return Fr(m=>bo("privy:wallet:recover",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)},rpc(c){return Fr(m=>bo("privy:wallet:rpc",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},setRecoveryPassword(c){return Fr(m=>bo("privy:wallet:set-recovery-password",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},verifyMfa(c){return Fr(m=>bo("privy:mfa:verify",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)},initEnrollMfa(c){return Fr(m=>bo("privy:mfa:init-enrollment",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},submitEnrollMfa(c){return bo("privy:mfa:submit-enrollment",c,r)},unenrollMfa(c){return Fr(m=>bo("privy:mfa:unenroll",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)}};window.addEventListener("message",n);let a=()=>e.onLoad(i),s=(...c)=>{console.warn("Privy iframe failed to load: ",...c),e.onLoadFailed()},l=new AbortController;return Xc(()=>bo("privy:iframe:ready",{},r),{abortSignal:l.signal}).then(a,s),()=>{window.removeEventListener("message",n),l.abort()}},[t.current,e.mfaMethods]),(0,nh.jsx)("iframe",{ref:t,width:"0",height:"0",style:{display:"none",height:"0px",width:"0px"},src:Xi(e.origin,`/apps/${e.appId}/embedded-wallets`,{caid:e.clientAnalyticsId})})}var Ds=class{constructor(t,o){this.meta={action:t,phoneNumber:o}}async init(){if(!this.meta.action)throw new w("action required");if(!this.api)throw new w("Auth flow has no API instance");if(this.meta.action==="enroll"&&!this.meta.phoneNumber)throw new w("phone number must be set when initialzing authentication.");try{let t=Lc();await this.api.post(t,{action:this.meta.action,phoneNumber:this.meta.phoneNumber})}catch(t){throw fe(t)}}async authenticate(){if(!this.meta.action)throw new w("action required");if(!this.api)throw new w("Mfa flow has no API instance");if(!this.meta.smsCode)throw new w("sms code must be set prior to calling authenticate.");if(this.meta.action==="enroll"&&!this.meta.phoneNumber)throw new w("phone number must be set prior to calling authenticate.");try{let t=Nc(),o=await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode});return Bt(o)}catch(t){throw fe(t)}}};var Ft=require("react/jsx-runtime"),Di;function Pv(e){return typeof e=="string"&&e.length===25}function Fe(){if(!Di){let e=re.get(Vr);return Promise.resolve(e||null)}return Di.getAccessToken()}var ah,id=(e,t)=>ah(e,t),sh,ad=(e,t)=>sh(e,t),lh,sd=()=>lh(),xv=()=>{let t=new URLSearchParams(window.location.search).get("privy_token");if(!t)return;re.put(Qn,t);let o=new URL(window.location.href);o.searchParams.delete("privy_token"),window.history.pushState({},"",o)},ch=({config:e,...t})=>{if(!Pv(t.appId))throw new w("Cannot initialize the Privy provider with an invalid Privy app ID");Di||(Di=new rn({appId:t.appId,apiUrl:t.apiUrl||Ki}));let o=Object.assign({},e);return t.createPrivyWalletOnLogin!==void 0&&o.embeddedWallets?.createOnLogin===void 0&&(o.embeddedWallets||(o.embeddedWallets={}),o.embeddedWallets.createOnLogin=t.createPrivyWalletOnLogin?"users-without-wallets":"off"),t.createPrivyWalletOnLogin!==void 0&&e?.embeddedWallets?.createOnLogin&&console.warn("Both `createPrivyWalletOnLogin` and `config.embeddedWallets.createOnLogin` are set. `createPrivyWalletOnLogin` is deprecated and should be removed."),(0,Ft.jsx)(Tv,{...t,config:o,client:Di})},Tv=e=>{let t=e.client,[o,r]=(0,$.useState)(!1),[n,i]=(0,$.useState)(!1),[a,s]=(0,$.useState)(!1),[l,c]=(0,$.useState)(null),[m,y]=(0,$.useState)(!1),[C,f]=(0,$.useState)([]),E=(0,$.useRef)(C),[b,x]=(0,$.useState)(!1),[v,M]=(0,$.useState)(null),[L,I]=(0,$.useState)(!1),[A,R]=(0,$.useState)({status:"disconnected",connectError:null,connector:null,connectRetry:P}),[N,H]=(0,$.useState)(null),[V,D]=(0,$.useState)(null),[k,oe]=(0,$.useState)(null),[ye,Se]=(0,$.useState)({showWalletLoginFirst:!0,allowlistConfig:{errorTitle:null,errorDetail:null,errorCtaText:null,errorCtaLink:null},walletAuth:!0,emailAuth:!0,smsAuth:!1,googleOAuth:!1,twitterOAuth:!1,discordOAuth:!1,githubOAuth:!1,linkedinOAuth:!1,appleOAuth:!1,termsAndConditionsUrl:null,privacyPolicyUrl:null,embeddedWalletConfig:{createOnLogin:"off",requireUserPasswordOnCreate:!1},fiatOnRampEnabled:!1,captchaEnabled:!1,captchaSiteKey:""}),[U,Xe]=(0,$.useState)(()=>{let u=oh(e.config,e.createPrivyWalletOnLogin);return t.createAnalyticsEvent("sdk_initialize",u),Ls(ye,e.config)}),[kt,Oe]=(0,$.useState)(!0),[je,me]=(0,$.useState)({}),[Pe,Br]=(0,$.useState)(null),[te,Fo]=(0,$.useState)(null),[Eo,hr]=(0,$.useState)(!1),yr=(0,$.useRef)(null),Ui=(0,$.useRef)(null),we=(0,$.useRef)(Wd),gr=(0,$.useRef)(),De=u=>{M(u),r(!0),t.createAnalyticsEvent("modal_open",{initialScreen:u})},et=u=>{U.embeddedWallets.createOnLogin!=="off"&&Oe(!0),De(u)};(0,$.useEffect)(()=>{if(!k||!l){t.connectors?.removeEmbeddedWalletConnector();return}let u=l?.linkedAccounts.filter(p=>p.type==="wallet"&&p.walletClient==="privy");if(u&&u.length>0){let p=u[0].address;t.connectors?.addEmbeddedWalletConnector(k,p,U.defaultChain)}},[k,l]),(0,$.useEffect)(()=>{k&&te?.(k)},[k]),(0,$.useEffect)(()=>{(async()=>{if(!U.customAuth?.enabled)return;Oe(!0);let{getCustomAccessToken:p,isLoading:h}=U.customAuth;if(!(!n||h))try{let g=await p();if(!g){await Kn.logout();return}if(a)return;t.startAuthFlow(new zr(g));let{user:F,isNewUser:pe}=await t.authenticate();F||await Kn.logout(),c(F||null),x(pe||!1),s(!0),hr(!0)}catch(g){console.warn(g),a&&await Kn.logout()}})()},[U.customAuth?.enabled,U.customAuth?.getCustomAccessToken,U.customAuth?.isLoading,n,a]),(0,$.useEffect)(()=>{Eo&&k&&l&&zo(l,e.config?.embeddedWallets?.createOnLogin)&&(hr(!1),ic(l,$r).catch(console.error))},[Eo&&k&&l]),(0,$.useEffect)(()=>{async function u(){let p=await t.getServerConfig();Se(p);let h=Ls(p,e.config);Xe(h),p.customApiUrl&&t.updateApiUrl(p.customApiUrl);let g=(0,ih.createStore)();H(g),t.initializeConnectorManager(h.walletConnectCloudProjectId,h.rpcConfig,h.chains,h.defaultChain,g),t.connectors?.initialize();let F=Us();xv();let pe=await t.getAuthenticatedUser();e.config?.customAuth?.enabled||(s(!!pe),pe&&xe(we,"login","onComplete",pe,!1,!0,null),c(pe)),F||Ue.setReadyToTrue(),F&&pe&&y(!0),jn()}n||u()},[t,Pe,n]),(0,$.useEffect)(()=>{let u=Ls(ye,e.config);Xe(u)},[e.config,ye]);let Us=()=>{let u=new URLSearchParams(window.location.search),p=u.get("privy_oauth_code"),h=u.get("privy_oauth_state"),g=u.get("privy_oauth_provider");return p&&h&&g?(t.startAuthFlow(new Ho(g,p,h)),et("AWAITING_OAUTH_SCREEN"),!0):!1},vr=async(u,p,h)=>{let g=await t.connectors?.createWalletConnector(u,p)||null;wr(g,p,h)};async function wr(u,p,h){if(!u)return R({status:"disconnected",connectError:new j("Unable to connect to wallet."),connector:null,connectRetry:P}),h?.(null);u instanceof to&&p&&u.resetConnection(p),R({connector:u,status:"connecting",connectError:null,connectRetry:()=>wr(u,p,h)});try{let g=await u.connect({showPrompt:!0});if(U.shouldSwitchChainOnConnect&&!U.chains.find(F=>F.id===Number(g?.chainId))&&!(g?.connectorType==="wallet_connect_v2"&&g?.walletClientType==="metamask")){R(F=>({...F,connector:u,status:"switching_to_supported_chain",connectError:null,connectRetry:P}));try{await g?.switchChain(U.defaultChain.id),g&&(g.chainId=jr(xr(U.defaultChain.id)))}catch{console.warn(`Unable to switch to default chain: ${U.defaultChain.id}`)}}return R(F=>({...F,status:"connected",connectError:null,connectRetry:P})),g&&!L&&xe(we,"connectWallet","onSuccess",g),h?.(g)}catch(g){return g instanceof yt?(console.warn(g.cause?g.cause:g.message),L||xe(we,"connectWallet","onError",g.privyErrorCode||"generic_connect_wallet_error")):(console.warn(g),L||xe(we,"connectWallet","onError","unknown_connect_wallet_error")),R(F=>({...F,status:"disconnected",connectError:g})),h?.(null)}}let $n=u=>{u!==null&&t.startAuthFlow(new Er(u))},jn=()=>{let u=new URLSearchParams(window.location.search),p=u.get("privy_connector"),h=u.get("privy_wallet_client");if(!p||!h)return;if(h==="phantom"&&!Zt()&&et("LOGIN_FAILED_SCREEN"),!t.connectors)throw new w("Connector not initialized");De("AWAITING_CONNECTION");let g=new URL(window.location.href);g.searchParams.delete("privy_connector"),g.searchParams.delete("privy_wallet_client"),window.history.pushState({},"",g),vr(p,h,$n)};(0,$.useEffect)(()=>{n&&a&&l===null&&t.getAuthenticatedUser().then(c)},[n,a,l,t]);let Cr=()=>{if(!a)throw new w("User must be authenticated before linking a wallet.");y(!0),De("LINK_WALLET_SCREEN")},st=u=>{if(!a||!l)return!1;for(let p of l.linkedAccounts)if(p.type==="wallet"&&p.address===u.address)return!0;return!1},ht=async u=>{if(!t.connectors)throw new w("Connector not initialized");let p=t.connectors.findWalletConnector(u.connectorType,u.walletClientType)||null;R(h=>({...h,connector:p,status:"connected",connectError:null,connectRetry:P})),$n(u),et("AWAITING_CONNECTION")},At=async(u,p)=>{gr.current="siwe",await wr(u,p,$n)},Fs=async(u,p)=>{if(!U.fiatOnRamp.enabled)throw new w("Fiat on-ramp is not enabled");if(!p||!p.provider||p.provider==="moonpay"){let{signedUrl:h,externalTransactionId:g}=await vu(t,u,p?.config??{},U.appearance.palette,U.fiatOnRamp.useSandbox);return{signedUrl:h,externalTransactionId:g}}else throw new w("Unsupported fund provider. Currently supported option is `moonpay`.")},lt=()=>{f(u=>{let p=t.connectors?.wallets.map(h=>({...h,linked:st(h),loginOrLink:async()=>{if(!await h.isConnected())throw new w("Wallet is not connected");if(h.connectorType==="embedded"&&h.walletClientType==="privy")throw new w("Cannot link or login with embedded wallet");ht(h)},fund:async g=>{let{signedUrl:F,externalTransactionId:pe}=await Fs(h.address,g);me({fiatOnRampPrompt:{signedUrl:F},fiatOnRampStatus:{externalTransactionId:pe}}),De("FIAT_ON_RAMP_PROMPT_SCREEN")},unlink:async()=>{if(!a)throw new w("User is not authenticated.");if(h.connectorType==="embedded"&&h.walletClientType==="privy")throw new w("Cannot unlink an embedded wallet");let g=await t.unlinkWallet(h.address);c(g)}}))||[];return ta(u,p)?u:p})};(0,$.useEffect)(()=>{lt()},[l?.linkedAccounts,a,n]),(0,$.useEffect)(()=>{if(n){if(!t.connectors)throw new w("Connector not initialized");lt(),t.connectors.on("walletsUpdated",lt)}},[n]);let qn=()=>{De(a?"CONNECT_ONLY_AUTHENTICATED_SCREEN":"CONNECT_ONLY_LANDING_SCREEN")};(0,$.useEffect)(()=>{if(!C[0])return;let u=C[0],p=E.current.find(g=>g.address===u.address),h=l?.linkedAccounts.find(g=>g.type==="wallet"&&g.address===u.address);if(!p&&h){let g=Object.assign({},l);g.wallet=h&&{address:h.address,chainType:h.chainType,chainId:h.chainId,walletClient:h.walletClient,walletClientType:h.walletClientType,connectorType:h.connectorType},c(g)}E.current=C},[C]);let ic=async(u,p)=>{if(ge(u))throw xe(we,"createWallet","onError","embedded_wallet_already_exists"),new Error("Only one Privy wallet per user is currently allowed");let[g,F]=await Promise.all([Ue.initializeWalletProxy(p),Fe()]);if(!g&&e.config?.customAuth?.enabled)throw xe(we,"createWallet","onError","unknown_embedded_wallet_error"),new Error("Failed to connect to wallet proxy");if(!g||!F||e.config?.embeddedWallets?.requireUserPasswordOnCreate)return new Promise((pe,qe)=>{Oe(!0),me({createWallet:{onSuccess:Rt=>{xe(we,"createWallet","onSuccess",Rt),pe(Rt)},onFailure:Rt=>{xe(we,"createWallet","onError","unknown_embedded_wallet_error"),qe(Rt)},callAuthOnSuccessOnClose:!1}}),De("EMBEDDED_WALLET_ON_ACCOUNT_CREATE_SCREEN")});{await g.create({accessToken:F});let pe=await Ue.refreshUser(),qe=ge(pe);if(!qe)throw xe(we,"createWallet","onError","unknown_embedded_wallet_error"),new Error("Failed to create wallet");return xe(we,"createWallet","onSuccess",qe),qe}},bh=u=>{if(!U.chains.map(p=>p.id).includes(u))throw new j(`Chain ID ${u} is not supported. It must be added to the config.supportedChains property of the PrivyProvider.`,"unsupported_chain_id")},ac=(u,p,h)=>new Promise(async(g,F)=>{if(!a||!l){F(new Error("User must be authenticated before signing with a Privy wallet"));return}let pe=ge(l);if(!pe){F(new Error("Must have a Privy wallet before signing"));return}Oe(!0);let qe=t.connectors?.findWalletConnector("embedded","privy")?.proxyProvider,Hr=u.chainId?Number(u.chainId):qe.chainId;bh(Hr);let Rt=Object.assign({},u,{chainId:Hr}),Yn=async()=>{let Bo=await Fe();if(!Bo||!k){F(new Error("Must have valid access token and Privy wallet to send transaction"));return}try{if(!await Ue.recoverEmbeddedWallet()){F(new Error("Unable to connect to wallet"));return}let lc=new Vn.StaticJsonRpcProvider(Ht(Rt.chainId,U.chains,U.rpcConfig)),Ph=await Un(pe.address,Rt,lc),xh=await Ps(Bo,pe.address,k,Ph,lc);g(xh)}catch(Fi){F(Fi)}};if(U.embeddedWallets.noPromptOnSignature)p&&console.warn("uiOptions defined with `noPromptOnSignature` set to true in app config"),Yn();else{let Bo={transactionRequest:Rt,onSuccess:g,onFailure:F,uiOptions:p||{},fundWalletConfig:h},Fi={onCompleteNavigateTo:"EMBEDDED_WALLET_SEND_TRANSACTION_SCREEN",onFailure:F};me({connectWallet:Fi,sendTransaction:Bo}),De("EMBEDDED_WALLET_CONNECTING_SCREEN")}});function sc(){return new Promise(async(u,p)=>{let h=await Fe();if(!h||!k)throw new Error("Must have valid access token to enroll in MFA");try{await k.verifyMfa({accessToken:h}),u()}catch(g){p(g)}})}let Kn={ready:n,authenticated:a,user:l,walletConnectors:t.connectors||null,connectWallet:qn,linkWallet:Cr,linkEmail:()=>{if(!a)throw new w("User must be authenticated before linking an email address.");if(l?.email)throw new w("User already has an email linked to their account.");y(!0),De("LINK_EMAIL_SCREEN")},linkPhone:()=>{if(!a)throw new w("User must be authenticated before linking a phone number.");if(l?.phone)throw new w("User already has a phone number linked to their account.");y(!0),De("LINK_PHONE_SCREEN")},linkGoogle:async()=>{if(!a)throw new w("User must be authenticated before linking a Google account.");if(l?.google)throw new w("User already has a Google account linked to their account.");await Ue.initLoginWithOAuth("google")},linkTwitter:async()=>{if(!a)throw new w("User must be authenticated before linking a Twitter account.");if(l?.twitter)throw new w("User already has a Twitter account linked to their account.");await Ue.initLoginWithOAuth("twitter")},linkDiscord:async()=>{if(!a)throw new w("User must be authenticated before linking a Discord account.");if(l?.discord)throw new w("User already has a Discord account linked to their account.");await Ue.initLoginWithOAuth("discord")},linkGithub:async()=>{if(!a)throw new w("User must be authenticated before linking a GitHub account.");if(l?.github)throw new w("User already has a Github account linked to their account.");await Ue.initLoginWithOAuth("github")},linkTiktok:async()=>{if(!a)throw new w("User must be authenticated before linking a TikTok account.");if(l?.tiktok)throw new w("User already has a Tiktok account linked to their account.");await Ue.initLoginWithOAuth("tiktok")},linkLinkedIn:async()=>{if(!a)throw new w("User must be authenticated before linking a LinkedIn account.");if(l?.linkedin)throw new w("User already has a LinkedIn account linked to their account.");await Ue.initLoginWithOAuth("linkedin")},linkApple:async()=>{if(!a)throw new w("User must be authenticated before linking an Apple account.");await Ue.initLoginWithOAuth("apple")},login:async()=>{if(n||(await new Promise(u=>{Br(()=>u)}),Br(null)),a){console.warn("Attempted to log in, but user is already logged in. Use a `link` helper instead.");return}I(!0),et("LANDING")},logout:async()=>{await t.logout(),c(null),s(!1),M(null),xe(we,"logout","onSuccess"),y(!1),r(!1),re.del(Zn)},getAccessToken:()=>t.getAccessToken(),getEthereumProvider:()=>{if(!l||!l.wallet)return new he;let u=C.find(h=>l.wallet&&h.address===l.wallet.address),p=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===u?.address));return!u||!p?new he:p.proxyProvider},getEthersProvider:()=>{if(!l||!l.wallet)return new Vn.Web3Provider(new Gt(new he));let u=C.find(h=>l.wallet&&h.address===l.wallet.address),p=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===u?.address));return!u||!p?new Vn.Web3Provider(new Gt(new he)):new Vn.Web3Provider(new Gt(p.proxyProvider))},getWeb3jsProvider:()=>{if(!l||!l.wallet)return new jo(new he);let u=C.find(h=>l.wallet&&h.address===l.wallet.address),p=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===u?.address));return!u||!p?new jo(new he):new jo(p.proxyProvider)},unlinkWallet:async u=>{let p=await t.unlinkWallet(u);return c(p),p},unlinkEmail:async u=>{let p=await t.unlinkEmail(u);return c(p),p},unlinkPhone:async u=>{let p=await t.unlinkPhone(u);return c(p),p},unlinkGoogle:async u=>{let p=await t.unlinkOAuth("google",u);return c(p),p},unlinkTwitter:async u=>{let p=await t.unlinkOAuth("twitter",u);return c(p),p},unlinkDiscord:async u=>{let p=await t.unlinkOAuth("discord",u);return c(p),p},unlinkGithub:async u=>{let p=await t.unlinkOAuth("github",u);return c(p),p},unlinkTiktok:async u=>{let p=await t.unlinkOAuth("tiktok",u);return c(p),p},unlinkLinkedIn:async u=>{let p=await t.unlinkOAuth("linkedin",u);return c(p),p},unlinkApple:async u=>{let p=await t.unlinkOAuth("apple",u);return c(p),p},setActiveWallet:async u=>{let p=C.find(g=>(0,Oi.getAddress)(g.address)===(0,Oi.getAddress)(u)),h=l?.linkedAccounts.find(g=>g.type==="wallet"&&(0,Oi.getAddress)(g.address)===(0,Oi.getAddress)(u));if(!p||!await p.isConnected())D(u),Cr();else if(!p.linked)p.loginOrLink();else{let g=Object.assign({},l);g.wallet=h&&{address:h.address,chainType:h.chainType,chainId:h.chainId,walletClient:h.walletClient,walletClientType:h.walletClientType,connectorType:h.connectorType},c(g)}},forkSession:()=>t.forkSession(),createWallet:async()=>{if(!a||!l)throw xe(we,"createWallet","onError","must_be_authenticated"),new Error("User must be authenticated before creating a Privy wallet");return ic(l,15e3)},setWalletPassword:()=>new Promise(async(u,p)=>{if(!a||!l){p(new Error("User must be authenticated before adding password to Privy wallet"));return}let h=ge(l);if(!h||!k){p(new Error("Must have a Privy wallet to add a password"));return}if(h.recoveryMethod==="user-passcode"){p(new Error("Cannot set password. Embedded wallet already has a password."));return}await sc(),Oe(!0);let g={onSuccess:u,onFailure:p,callAuthOnSuccessOnClose:!1},F={onCompleteNavigateTo:"EMBEDDED_WALLET_PASSWORD_UPDATE_SPLASH_SCREEN",onFailure:p};me({setWalletPassword:g,connectWallet:F}),De("EMBEDDED_WALLET_CONNECTING_SCREEN")}),signMessage:(u,p)=>new Promise(async(h,g)=>{if(!a||!l){g(new Error("User must be authenticated before signing with a Privy wallet"));return}let F=ge(l);if(!F){g(new Error("Must have a Privy wallet before signing"));return}if(typeof u!="string"||u.length<1){g(new Error("Message must be a non-empty string"));return}Oe(!0);let pe=async()=>{if(!a)throw new Error("User must be authenticated before signing with a Privy wallet");let qe=await Fe();if(!k||!qe)throw new Error("Unable to connect to wallet");if(!await Ue.recoverEmbeddedWallet())throw new Error("Unable to connect to wallet");t.createAnalyticsEvent("embedded_wallet_sign_message_started",{walletAddress:F.address});let{response:Rt}=await k.rpc({accessToken:qe,address:F.address,request:{method:"personal_sign",params:[u,F.address]}}),Yn=Rt.data;return t.createAnalyticsEvent("embedded_wallet_sign_message_completed",{walletAddress:F.address}),Yn};if(U.embeddedWallets.noPromptOnSignature){p&&console.warn("uiOptions defined with `noPromptOnSignature` set to true in app config");try{let qe=await pe();h(qe)}catch(qe){g(qe??new tt("Unable to sign message"))}}else{let Rt={message:u,confirmAndSignMessage:pe,onSuccess:Bo=>{h(Bo)},onFailure:Bo=>{g(Bo)},uiOptions:p||{}},Yn={onCompleteNavigateTo:"EMBEDDED_WALLET_SIGN_REQUEST_SCREEN",onFailure:g};me({signMessage:Rt,connectWallet:Yn}),De("EMBEDDED_WALLET_CONNECTING_SCREEN")}}),sendTransaction:async(u,p,h)=>{let F=await(await ac(u,p,h)).wait();return Ts(F)},exportWallet:()=>new Promise(async(u,p)=>{if(!a||!l){p(new Error("User must be authenticated before exporting their Privy wallet"));return}if(!ge(l)){p(new Error("Must have a Privy wallet before exporting"));return}Oe(!0);let g={onCompleteNavigateTo:"EMBEDDED_WALLET_KEY_EXPORT_SCREEN",onFailure:p},F=await Fe();if(!F||!k)throw new Error("Must have valid access token to enroll in MFA");if(!k){p(new Error("Must have a Privy wallet before exporting"));return}await k.verifyMfa({accessToken:F});let pe={appId:e.appId,origin:t.apiUrl,onSuccess:u,onFailure:p};me({keyExport:pe,connectWallet:g}),De("EMBEDDED_WALLET_CONNECTING_SCREEN")}),promptMfa:sc,async init(u){let p;switch(u){case"sms":p=new Ds("verify");break;case"totp":return;default:throw new Error(`Unsupported MFA method: ${u}`)}t.startMfaFlow(p),await p.init()},async submit(u,p){switch(u){case"totp":case"sms":yr.current?.resolve({mfaMethod:u,mfaCode:p}),await new Promise((h,g)=>{Ui.current={resolve:h,reject:g}});break;default:throw yr.current?.reject(new w("Unsupported MFA method")),new w(`Unsupported MFA method: ${u}`)}},cancel(){yr.current?.reject(new w("MFA canceled"))},async initEnrollmentWithSms(u){let p=await Fe();if(!p||!k)throw new Error("Must have valid access token to enroll in MFA");await k.initEnrollMfa({method:"sms",accessToken:p,phoneNumber:u.phoneNumber})},enrollInMfa(u){return new Promise((p,h)=>{if(!u){Ue.closePrivyModal(),p();return}me({mfaEnrollmentFlow:{mfaMethods:U.mfa.methods,onSuccess:p,onFailure:h}}),De("MFA_ENROLLMENT_FLOW_SCREEN")})},async initEnrollmentWithTotp(){let u=await Fe();if(!u||!k)throw new Error("Must have valid access token to enroll in MFA");let p=await k.initEnrollMfa({method:"totp",accessToken:u});return{secret:p.secret,authUrl:p.authUrl}},async submitEnrollmentWithSms(u){let p=await Fe();if(!p||!k)throw new Error("Must have valid access token to enroll in MFA");await k.submitEnrollMfa({method:"sms",accessToken:p,phoneNumber:u.phoneNumber,code:u.mfaCode});let h=await t.getAuthenticatedUser();c(h)},async submitEnrollmentWithTotp(u){let p=await Fe();if(!p||!k)throw new Error("Must have valid access token to enroll in MFA");await k.submitEnrollMfa({method:"totp",accessToken:p,code:u.mfaCode});let h=await t.getAuthenticatedUser();c(h)},async unenroll(u){let p=await Fe();if(!p||!k)throw new Error("Must have valid access token to remove MFA");await k.unenrollMfa({method:u,accessToken:p});let h=await t.getAuthenticatedUser();c(h)},loginWithCode(u){return Ue.loginWithCode(u)},initLoginWithEmail(u,p){return Ue.initLoginWithEmail(u,p)},isModalOpen:o};ah=Kn.signMessage,sh=async(...u)=>{let p=await ac(...u);return U.embeddedWallets.waitForTransactionConfirmation&&await p.wait(),p};let Ue=(()=>({isNewUserThisSession:b,isLinking:m,linkingHint:V,pendingTransaction:null,walletConnectionStatus:A,mipdStore:N,connectors:t.connectors?.walletConnectors??[],rpcConfig:U.rpcConfig,chains:U.chains,showFiatPrices:U.embeddedWallets.priceDisplay.primary!=="native-token",clientAnalyticsId:t.clientAnalyticsId,nativeTokenSymbolForChainId:u=>U.chains.find(p=>p.id===Number(u))?.nativeCurrency.symbol,initializeWalletProxy:async u=>{if(k)return k;let p=new Promise(F=>{Fo(()=>pe=>F(pe))}),h=new Promise(F=>setTimeout(()=>F(null),u)),g=await Promise.race([p,h]);return Fo(null),g},getAuthFlow:()=>t.authFlow,getAuthMeta:()=>t.authFlow?.meta,closePrivyModal:(u={shouldCallAuthOnSuccess:!0})=>{let p=n&&a&&l;u.shouldCallAuthOnSuccess&&p?(xe(we,"login","onComplete",l,b,!1,gr.current??null),e.onSuccess?.(l,b)):L&&xe(we,"login","onError","exited_auth_flow"),D(null),I(!1),y(!1),x(!1),r(!1),setTimeout(()=>{t.authFlow=void 0},200),t.createAnalyticsEvent("modal_closed")},connectWallet:wr,initLoginWithWallet:At,loginWithWallet:async()=>{if(!n)throw new Jn;if(!(t.authFlow instanceof Er))throw new w("Must initialize SIWE flow first.");let u,p;if(a)u=await t.link();else try{({user:u,isNewUser:p}=await t.authenticate())}catch(h){throw xe(we,"login","onError",h.privyErrorCode||"generic_connect_wallet_error"),h}c(u||l||null),x(p||!1),s(!0)},initLoginWithOAuth:async u=>{t.startAuthFlow(new Ho(u));let p=await t.authFlow.getAuthorizationUrl();p&&p.url&&window.location.assign(p.url)},loginWithOAuth:async u=>{if(!(t.authFlow instanceof Ho))throw new w("Must initialize OAuth flow before calling loginWithOAuth");let p,h;if(a)p=await t.link();else try{({user:p,isNewUser:h}=await t.authenticate()),gr.current=u}catch(g){throw xe(we,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}c(p),x(h||!1),s(!0)},initLoginWithEmail:async(u,p)=>{let h=new br(u,p);t.startAuthFlow(h);try{gr.current="email",await h.sendCodeEmail()}catch(g){throw xe(we,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}},initLoginWithSms:async(u,p)=>{let h=new Pr(u,p);t.startAuthFlow(h);try{gr.current="sms",await h.sendSmsCode()}catch(g){throw xe(we,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}},resendEmailCode:async()=>{await t.authFlow?.sendCodeEmail()},resendSmsCode:async()=>{await t.authFlow?.sendSmsCode()},loginWithCode:async u=>{if(!n)throw new Jn;if(t.authFlow instanceof br)t.authFlow.meta.emailCode=u.trim();else if(t.authFlow instanceof Pr)t.authFlow.meta.smsCode=u.trim();else throw new w("Must initialize a passwordless code flow first");let p,h;a?p=await t.link():{user:p,isNewUser:h}=await t.authenticate(),c(p||l||null),x(h||!1),s(!0)},refreshUser:async()=>{let u=await t.getAuthenticatedUser();return c(u),u},walletProxy:k,createAnalyticsEvent:(u,p,h)=>t.createAnalyticsEvent(u,p,h),getUsdTokenPrice:u=>t.getUsdTokenPrice(u),recoverEmbeddedWallet:async()=>new Promise(async(u,p)=>{let h=l?.linkedAccounts.find(F=>F.type==="wallet"&&F.walletClientType==="privy"),g=await Fe();if(!g||!k||!h){p(new Error("Must have valid access token and Privy wallet to recover wallet"));return}Oe(!0);try{await k.connect({accessToken:g,address:h.address}),u(!0)}catch(F){fn(F)&&h.recoveryMethod==="privy"?(t.createAnalyticsEvent("embedded_wallet_pinless_recovery_started",{walletAddress:h.address}),(await k.recover({address:h.address,accessToken:g})).address||p(new Error("Unable to recover wallet")),t.createAnalyticsEvent("embedded_wallet_recovery_completed",{walletAddress:h.address}),u(!0)):fn(F)?(me({recoverWallet:{privyWallet:h,onFailure:p,onSuccess:()=>u(!0)}}),De("EMBEDDED_WALLET_RECOVERY_SCREEN")):p(F)}}),getFiatOnRampConfig:Fs,setReadyToTrue:()=>{i(!0),Pe?.()},updateWallets:()=>lt()}))();lh=Ue.recoverEmbeddedWallet;let Eh=(0,$.useMemo)(()=>({wallets:C}),[C]);return(0,Ft.jsx)(Be.Provider,{value:Kn,children:(0,Ft.jsx)(nl.Provider,{value:we,children:(0,Ft.jsx)(Zl.Provider,{value:Eh,children:(0,Ft.jsxs)(Lu,{...U,children:[e.children,(0,Ft.jsxs)(al.Provider,{value:Ue,children:[(0,Ft.jsx)(Of,{theme:{...U.appearance.palette||{}}}),(0,Ft.jsx)(md,{appConfig:U,data:je,setModalData:me,setInitialScreen:M,initialScreen:v,visible:o,authenticated:a,children:(0,Ft.jsx)(Bf,{open:o})}),kt&&ye.id?(0,Ft.jsx)(rh,{appId:e.appId,clientAnalyticsId:t.clientAnalyticsId,origin:t.apiUrl,mfaMethods:l?.mfaMethods,mfaPromise:yr,mfaSubmitPromise:Ui,onLoad:oe,onLoadFailed:()=>null}):null]})]})})})})};var dh=require("react");function ph(e){let{login:t}=(0,dh.useContext)(Be);return ro("login",e),{login:t}}var uh=require("react");function mh(e){let{logout:t}=(0,uh.useContext)(Be);return ro("logout",e),{logout:t}}var nc=require("react");var fh=()=>{let e=so(),{initLoginWithEmail:t,loginWithCode:o}=q(),r=(0,nc.useCallback)(async({email:i})=>{if(!i)throw new Error("Email required to send OTP code");if(e.status==="disabled")return t(i);let a=await e.waitForResult();return t(i,a)},[t,e]),n=(0,nc.useCallback)(async({code:i})=>{if(e.enabled&&e.status!=="success")throw new hi(e.error,null,"captcha_failure");return o(i)},[o,e.status]);return{sendCode:r,loginWithCode:n}};var hh=require("react");function yh(e){let{connectWallet:t}=(0,hh.useContext)(Be);return ro("connectWallet",e),{connectWallet:t}}var gh=require("react");function vh(e){let{createWallet:t}=(0,gh.useContext)(Be);return ro("createWallet",e),{createWallet:t}}var wh=require("react");var Ch=()=>{let{isModalOpen:e}=(0,wh.useContext)(Be);return{isOpen:e}};0&&(module.exports={AsExternalProvider,Captcha,ConnectorManager,PrivyClient,PrivyProvider,PrivyProxyProvider,SUPPORTED_CHAINS,VERSION,WalletConnector,errorIndicatesMaxMfaRetries,errorIndicatesMfaTimeout,errorIndicatesMfaVerificationFailed,getAccessToken,useConnectWallet,useCreateWallet,useLogin,useLoginWithEmail,useLogout,useMfa,useMfaEnrollment,useModalStatus,usePrivy,useRegisterMfaListener,useWallets});
|
|
2506
|
+
`;var Ie=require("react/jsx-runtime"),lv={["LANDING"]:im,["AWAITING_PASSWORDLESS_CODE"]:Qd,["AWAITING_CONNECTION"]:fp,["AWAITING_CONNECT_ONLY_CONNECTION"]:gp,["PHANTOM_INTERSTITIAL_SCREEN"]:Tf,["LOGIN_FAILED_SCREEN"]:um,["AWAITING_OAUTH_SCREEN"]:bf,["ALLOWLIST_REJECTION_SCREEN"]:Hd,["INSTALL_PHANTOM_SCREEN"]:_u,["LINK_EMAIL_SCREEN"]:sm,["LINK_PHONE_SCREEN"]:cm,["LINK_WALLET_SCREEN"]:dm,["CONNECT_ONLY_LANDING_SCREEN"]:pp,["CONNECT_ONLY_AUTHENTICATED_SCREEN"]:ip,["EMBEDDED_WALLET_ON_ACCOUNT_CREATE_SCREEN"]:su,["EMBEDDED_WALLET_CREATED_SCREEN"]:_p,["EMBEDDED_WALLET_CONNECTING_SCREEN"]:xp,["EMBEDDED_WALLET_RECOVERY_SCREEN"]:fu,["EMBEDDED_WALLET_KEY_EXPORT_SCREEN"]:Wp,["EMBEDDED_WALLET_SIGN_REQUEST_SCREEN"]:Lf,["EMBEDDED_WALLET_SEND_TRANSACTION_SCREEN"]:If,["FIAT_ON_RAMP_PROMPT_SCREEN"]:Cu,["FIAT_ON_RAMP_STATUS_SCREEN"]:Eu,["EMBEDDED_WALLET_PASSWORD_UPDATE_SPLASH_SCREEN"]:uu,["EMBEDDED_WALLET_PASSWORD_UPDATE_SCREEN"]:lu,["MFA_ENROLLMENT_FLOW_SCREEN"]:Fm},cv=({isMfaVerifying:e,onMfaVerificationComplete:t})=>{let{ready:o}=q(),{ready:r,currentScreen:n}=_(),i=(0,Ni.useRef)(null),a=Id(i);if((!o||!r)&&n!=="AWAITING_OAUTH_SCREEN")return(0,Ie.jsxs)(In,{children:[(0,Ie.jsx)(T,{}),(0,Ie.jsx)(J,{}),(0,Ie.jsx)(Cm,{children:(0,Ie.jsx)(no,{})}),(0,Ie.jsx)(Q,{}),(0,Ie.jsx)(Z,{})]});if(!n)return null;let s=lv[n];return s?(0,Ie.jsx)(In,{style:{height:a},children:(0,Ie.jsxs)("div",{ref:i,children:[(0,Ie.jsx)(Ao,{if:!!e,children:(0,Ie.jsx)(s,{})}),(0,Ie.jsx)(Ao,{if:!e,children:(0,Ie.jsx)(wf,{open:e,onClose:t})})]})}):null},Bf=({open:e})=>{let{app:t}=_(),[o,r]=(0,Ni.useState)(!1),{gracefulClosePrivyModal:n,onEscape:i}=vm(),[a,s]=(0,Ni.useState)(!1);ya({onMfaRequired:()=>{t?.mfa.noPromptOnMfaRequired||s(!0)}}),(0,Uf.useEffect)(()=>{r(!0)},[]);let l=(0,Ie.jsx)(Df,{children:(0,Ie.jsx)(cv,{isMfaVerifying:a,onMfaVerificationComplete:()=>s(!1)})}),c=e||a,m=t?.render.inDialog?(0,Ie.jsx)("div",{onKeyDown:i,children:(0,Ie.jsx)(wm,{open:c,id:"privy-dialog",onClick:()=>n(),children:l})}):l;if(o){let y=t?.render.inParentNodeId&&document.getElementById(t.render.inParentNodeId)||document.body;return Ff.default.createPortal(m,y)}return null};var Ut={appearance:{theme:"light",accentColor:"#676FFF",walletList:["detected_wallets","metamask","coinbase_wallet","rainbow","wallet_connect"]},walletConnectCloudProjectId:Uc,rpcConfig:{rpcUrls:{},rpcTimeouts:{}},captchaEnabled:!1,_render:{inDialog:!0,inParentNodeId:null},fiatOnRamp:{useSandbox:!1}};var dv=new Set(["metamask","coinbase_wallet","rainbow","zerion","phantom","wallet_connect","detected_wallets"]),pv=e=>dv.has(e),uv=(e,t,o)=>o.indexOf(e)===t,Hf=({input:e})=>e?e.filter(pv).filter(uv):Ut.appearance.walletList;var Gf={id:43114,name:"Avalanche",network:"avalanche",nativeCurrency:{decimals:18,name:"Avalanche",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax.network/ext/bc/C/rpc"]},public:{http:["https://api.avax.network/ext/bc/C/rpc"]}},blockExplorers:{etherscan:{name:"SnowTrace",url:"https://snowtrace.io"},default:{name:"SnowTrace",url:"https://snowtrace.io"}}};var zf={id:43113,name:"Avalanche Fuji",network:"avalanche-fuji",nativeCurrency:{decimals:18,name:"Avalanche Fuji",symbol:"AVAX"},rpcUrls:{default:{http:["https://api.avax-test.network/ext/bc/C/rpc"]},public:{http:["https://api.avax-test.network/ext/bc/C/rpc"]}},blockExplorers:{etherscan:{name:"SnowTrace",url:"https://testnet.snowtrace.io"},default:{name:"SnowTrace",url:"https://testnet.snowtrace.io"}},testnet:!0};var Vf={id:42220,name:"Celo Mainnet",network:"celo",nativeCurrency:{decimals:18,name:"CELO",symbol:"CELO"},rpcUrls:{default:{http:["https://forno.celo.org"]},infura:{http:["https://celo-mainnet.infura.io/v3"]},public:{http:["https://forno.celo.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/mainnet"},etherscan:{name:"CeloScan",url:"https://celoscan.io"}},testnet:!1};var $f={id:44787,name:"Celo Alfajores Testnet",network:"celo-alfajores",nativeCurrency:{decimals:18,name:"CELO",symbol:"CELO"},rpcUrls:{default:{http:["https://alfajores-forno.celo-testnet.org"]},infura:{http:["https://celo-alfajores.infura.io/v3"]},public:{http:["https://alfajores-forno.celo-testnet.org"]}},blockExplorers:{default:{name:"Celo Explorer",url:"https://explorer.celo.org/alfajores"},etherscan:{name:"CeloScan",url:"https://alfajores.celoscan.io/"}},testnet:!0};var jf={id:314,name:"Filecoin - Mainnet",network:"filecoin-mainnet",nativeCurrency:{decimals:18,name:"filecoin",symbol:"FIL"},rpcUrls:{default:{http:["https://api.node.glif.io/rpc/v1"]},public:{http:["https://api.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filfox",url:"https://filfox.info/en"},filscan:{name:"Filscan",url:"https://filscan.io"},filscout:{name:"Filscout",url:"https://filscout.io/en"},glif:{name:"Glif",url:"https://explorer.glif.io"}}};var qf={id:314159,name:"Filecoin - Calibration testnet",network:"filecoin-calibration",nativeCurrency:{decimals:18,name:"testnet filecoin",symbol:"tFIL"},rpcUrls:{default:{http:["https://api.calibration.node.glif.io/rpc/v1"]},public:{http:["https://api.calibration.node.glif.io/rpc/v1"]}},blockExplorers:{default:{name:"Filscan",url:"https://calibration.filscan.io"}}};var Kf={id:5,network:"goerli",name:"Goerli",nativeCurrency:{name:"Goerli Ether",symbol:"ETH",decimals:18},rpcUrls:{alchemy:{http:["https://eth-goerli.g.alchemy.com/v2"],webSocket:["wss://eth-goerli.g.alchemy.com/v2"]},infura:{http:["https://goerli.infura.io/v3"],webSocket:["wss://goerli.infura.io/ws/v3"]},default:{http:["https://rpc.ankr.com/eth_goerli"]},public:{http:["https://rpc.ankr.com/eth_goerli"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://goerli.etherscan.io"},default:{name:"Etherscan",url:"https://goerli.etherscan.io"}},testnet:!0};var Yf={id:17e3,name:"Holesky",network:"holesky",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://ethereum-holesky.publicnode.com"]},public:{http:["https://ethereum-holesky.publicnode.com"]}},blockExplorers:{etherscan:{name:"EtherScan",url:"https://holesky.etherscan.io"},default:{name:"EtherScan",url:"https://holesky.etherscan.io"}}};var Jf={id:59144,network:"linea-mainnet",name:"Linea Mainnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{infura:{http:["https://linea-mainnet.infura.io/v3"],webSocket:["wss://linea-mainnet.infura.io/ws/v3"]},default:{http:["https://rpc.linea.build"],webSocket:["wss://rpc.linea.build"]},public:{http:["https://rpc.linea.build"],webSocket:["wss://rpc.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://lineascan.build"},etherscan:{name:"Etherscan",url:"https://lineascan.build"}},testnet:!1};var Qf={id:59140,network:"linea-testnet",name:"Linea Goerli Testnet",nativeCurrency:{name:"Linea Ether",symbol:"ETH",decimals:18},rpcUrls:{infura:{http:["https://linea-goerli.infura.io/v3"],webSocket:["wss://linea-goerli.infura.io/ws/v3"]},default:{http:["https://rpc.goerli.linea.build"],webSocket:["wss://rpc.goerli.linea.build"]},public:{http:["https://rpc.goerli.linea.build"],webSocket:["wss://rpc.goerli.linea.build"]}},blockExplorers:{default:{name:"Etherscan",url:"https://goerli.lineascan.build"},etherscan:{name:"Etherscan",url:"https://goerli.lineascan.build"}},testnet:!0};var Ms={id:1,network:"homestead",name:"Ethereum",nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18},rpcUrls:{alchemy:{http:["https://eth-mainnet.g.alchemy.com/v2"],webSocket:["wss://eth-mainnet.g.alchemy.com/v2"]},infura:{http:["https://mainnet.infura.io/v3"],webSocket:["wss://mainnet.infura.io/ws/v3"]},default:{http:["https://cloudflare-eth.com"]},public:{http:["https://cloudflare-eth.com"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://etherscan.io"},default:{name:"Etherscan",url:"https://etherscan.io"}}};var Zf={id:17001,name:"Redstone Holesky",network:"redstone-holesky",nativeCurrency:{name:"ETH",symbol:"ETH",decimals:18},rpcUrls:{default:{http:["https://rpc.holesky.redstone.xyz"]},public:{http:["https://rpc.holesky.redstone.xyz"]}},blockExplorers:{etherscan:{name:"EtherScan",url:"https://explorer.holesky.redstone.xyz"},default:{name:"EtherScan",url:"https://explorer.holesky.redstone.xyz"}}};var Xf={id:11155111,network:"sepolia",name:"Sepolia",nativeCurrency:{name:"Sepolia Ether",symbol:"SEP",decimals:18},rpcUrls:{alchemy:{http:["https://eth-sepolia.g.alchemy.com/v2"],webSocket:["wss://eth-sepolia.g.alchemy.com/v2"]},infura:{http:["https://sepolia.infura.io/v3"],webSocket:["wss://sepolia.infura.io/ws/v3"]},default:{http:["https://rpc.sepolia.org"]},public:{http:["https://rpc.sepolia.org"]}},blockExplorers:{etherscan:{name:"Etherscan",url:"https://sepolia.etherscan.io"},default:{name:"Etherscan",url:"https://sepolia.etherscan.io"}},testnet:!0};var zn=[fs,hs,ys,Kf,Xf,Ms,ws,Cs,Wi,Mi,Vf,$f,jf,qf,gs,vs,Jf,Qf,Gf,zf,bs,Es,Yf,Zf],o8=new Set(zn.map(e=>e.id));var fr=S(require("tinycolor2")),eh="#FFFFFF",mv="#000000",fv=eh,hv="#1E1E1D";function yv(e){return e<.8&&e>.2&&console.warn("Background color is not light or dark enough, which could lead to accessibility issues."),e>.5?"light":"dark"}function mr(e,t){let o=Math.max(0,Math.min(1,e.toHsl().l+t));return(0,fr.default)({...e.toHsl(),l:o})}function th({backgroundTheme:e,accentHex:t,successHex:o="#51BA81",warnHex:r="#FFB74D",errorHex:n="#EC6351",whiteHex:i=eh,blackHex:a=mv}){let s;switch(e){case"light":s=fv;break;case"dark":s=hv;break;default:s=e;break}let l=(0,fr.default)(s),c=(0,fr.default)(t),m=(0,fr.default)(o),y=(0,fr.default)(r),C=(0,fr.default)(n),f=yv(l.getLuminance()),E=mr(l,f==="light"?-.04:.11),b=mr(l,f==="light"?-.88:.87),x=mr(l,f==="light"?-.77:.75),v=mr(l,f==="light"?-.43:.45).desaturate(f==="light"?60:20),M=mr(l,f==="light"?-.08:.25).desaturate(f==="light"?60:20),L=mr(c,.15),I=mr(c,-.06),A=(0,fr.default)(c.getLuminance()>.5?a:i),R=mr(m,-.16);return{colorScheme:f,background:l.toHslString(),background2:E.toHslString(),foreground:b.toHslString(),foreground2:x.toHslString(),foreground3:v.toHslString(),foreground4:M.toHslString(),accent:c.toHslString(),accentLight:L.toHslString(),accentDark:I.toHslString(),foregroundAccent:A.toHslString(),success:m.toHslString(),successDark:R.toHslString(),error:C.toHslString(),warn:y.toHslString()}}function Ls(e,t){let o=["google","twitter","discord","tiktok","linkedin","github","apple"],r=t?.loginMethods?.filter(V=>o.includes(V)),n,i,a,s,l,c,m,y,C,f;t?.loginMethods?(n=t.loginMethods.includes("email"),i=t.loginMethods.includes("sms"),a=t.loginMethods.includes("wallet"),s=r?.includes("google"),l=r?.includes("twitter"),c=r?.includes("discord"),m=r?.includes("tiktok"),C=r?.includes("github"),y=r?.includes("linkedin"),f=r?.includes("apple")):(n=e.emailAuth,i=e.smsAuth,a=e.walletAuth,s=e.googleOAuth,l=e.twitterOAuth,c=e.discordOAuth,C=e.githubOAuth,m=e.tiktokOAuth,y=e.linkedinOAuth,f=e.appleOAuth);let E=[n,i].filter(Boolean),b=[s,l,c,C,m,y,f].filter(Boolean),x=[a].filter(Boolean);if(E.length+b.length+x.length===0)throw new Error("You must enable at least one login method");let v=t?.appearance?.showWalletLoginFirst!==void 0?t?.appearance?.showWalletLoginFirst:e.showWalletLoginFirst;v&&x.length===0?(console.warn("You should only enable `showWalletLoginFirst` when `wallet` logins are also enabled. `showWalletLoginFirst` has been set to false"),v=!1):!v&&b.length+E.length===0&&(console.warn("You should only disable `showWalletLoginFirst` when `email`, `sms`, or social logins are also enabled. `showWalletLoginFirst` has been set to true"),v=!0);let M=Hf({isWalletLoginEnabled:a,input:t?.appearance?.walletList});if(t?.embeddedWallets?.waitForTransactionConfirmation===!1&&t.embeddedWallets.noPromptOnSignature!==!0)throw new Error("Overriding `config.embeddedWallets.waitForTransactionConfirmation` requires that you also enable `config.embeddedWallets.noPromptOnSignature`");let L=t?.intl?.defaultCountry??"US",{chains:I,defaultChain:A}=gv(t?.additionalChains,t?.supportedChains,t?.defaultChain),R=!!t?.defaultChain||!!t?.supportedChains,N=t?.customAuth?.getCustomAccessToken&&t?.customAuth?.enabled!==!1;return{id:e.id,name:e.name,allowlistConfig:e.allowlistConfig,appearance:{logo:t?.appearance?.logo??e.logoUrl,palette:th({backgroundTheme:t?.appearance?.theme??Ut.appearance.theme,accentHex:t?.appearance?.accentColor??e.accentColor??Ut.appearance.accentColor}),loginGroupPriority:v?"web3-first":"web2-first",hideDirectWeb2Inputs:!!t?.appearance?.hideDirectWeb2Inputs,walletList:M},loginMethods:{wallet:a,email:n,sms:i,google:s,twitter:l,discord:c,github:C,tiktok:m,linkedin:y,apple:f},legal:{termsAndConditionsUrl:t?.legal?.termsAndConditionsUrl??e.termsAndConditionsUrl,privacyPolicyUrl:t?.legal?.privacyPolicyUrl??e.privacyPolicyUrl},walletConnectCloudProjectId:t?.walletConnectCloudProjectId??e.walletConnectCloudProjectId??Ut.walletConnectCloudProjectId,rpcConfig:{rpcUrls:t?.rpcConfig?.rpcUrls??Ut.rpcConfig.rpcUrls,rpcTimeouts:t?.rpcConfig?.rpcTimeouts??Ut.rpcConfig.rpcTimeouts},chains:I,defaultChain:A,intl:{defaultCountry:L},shouldSwitchChainOnConnect:R,captchaEnabled:e.captchaEnabled??Ut.captchaEnabled,captchaSiteKey:e.captchaSiteKey,embeddedWallets:{...e.embeddedWalletConfig,...N?{createOnLogin:"all-users",requireUserPasswordOnCreate:!1,noPromptOnSignature:!0}:{},waitForTransactionConfirmation:!0,priceDisplay:{primary:"fiat-currency",secondary:"native-token"},...t?.embeddedWallets},mfa:{methods:e.mfaMethods??[],noPromptOnMfaRequired:t?.mfa?.noPromptOnMfaRequired??!1},customAuth:N?{enabled:!0,...t.customAuth}:void 0,fiatOnRamp:{enabled:e.fiatOnRampEnabled,useSandbox:t?.fiatOnRamp?.useSandbox??Ut.fiatOnRamp.useSandbox},loginConfig:{twitterOAuthOnMobileEnabled:e.twitterOAuthOnMobileEnabled??!1},render:{inDialog:t?._render?.inDialog??Ut._render.inDialog,inParentNodeId:t?._render?.inParentNodeId??Ut._render.inParentNodeId}}}function oh(e,t){if(!e)return{legacyCreateEmbeddedWalletFlag:t};let{appearance:o,additionalChains:r,supportedChains:n,defaultChain:i,...a}=e;return{...a,...r?{additionalChains:r.map(l=>l.id)}:void 0,...n?{supportedChains:n.map(l=>l.id)}:void 0,...i?{defaultChain:i.id}:void 0,...o?{...o,...o.logo&&typeof o.logo?{logo:"component"}:void 0}:void 0,legacyCreateEmbeddedWalletFlag:t}}function gv(e,t,o){let r;if(e&&t&&console.warn("You should only specify one of `additionalChains` or `supportedChains`. Using `supportedChains`."),t){if(t.length===0)throw new Error("`supportedChains` must contain at least one chain");r=t.map(a=>zn.find(l=>l.id===a.id)??a)}else r=zn.concat(e??[]);let n=t?r[0]:Ms,i=o??n;if(!r.find(a=>a.id===i.id))throw new Error("`defaultChain` must be included in `supportedChains`");return{chains:r,defaultChain:i}}var Os=require("react");var Ns=class{constructor(){this.callbacks={}}enqueue(t,o){this.callbacks[t]=o}dequeue(t,o){let r=this.callbacks[o];if(!r)throw new Error(`cannot dequeue ${t} event: no event found for id ${o}`);switch(delete this.callbacks[o],t){case"privy:iframe:ready":return r;case"privy:wallet:create":return r;case"privy:wallet:connect":return r;case"privy:wallet:recover":return r;case"privy:wallet:rpc":return r;case"privy:wallet:set-recovery-password":return r;case"privy:mfa:verify":return r;case"privy:mfa:init-enrollment":return r;case"privy:mfa:submit-enrollment":return r;case"privy:mfa:unenroll":return r;default:throw new Error(`invalid wallet event type ${t}`)}}};async function Fr(e,t,o,r,n,i=!1){let a=i,s=async m=>{if(a&&t&&t.length>0){m===(i?0:1)?n("configureMfa","onMfaRequired",t):r.current?.reject(new He("missing_or_invalid_mfa","MFA verification failed, retry."));let y=await new Promise((C,f)=>{o.current={resolve:C,reject:f};let E=1e3*60*5;setTimeout(()=>{let b=new He("mfa_timeout","Timed out waiting for MFA code");r.current?.reject(b),f(b)},E)});return await e(y)}return await e()},l=4,c=null;for(let m=0;m<l;m++)try{c=await s(m),r.current?.resolve(void 0);break}catch(y){if(y.type==="missing_or_invalid_mfa")a=!0;else throw r.current?.resolve(void 0),y}if(c===null){let m=new He("mfa_verification_max_attempts_reached","Max MFA verification attempts reached");throw r.current?.reject(m),m}return c}var nh=require("react/jsx-runtime"),vv=function(e){return()=>`id-${e++}`}(0);function wv(e){return typeof e.event=="string"&&/^privy:.+/.test(e.event)}function Co(e){return e.error!==void 0}var Jt=new Ns,rc=new Map,Cv=(e,t)=>typeof t=="bigint"?t.toString():t,bv=(e,t)=>`${e}${JSON.stringify(t,Cv)}`;function bo(e,t,o){let r=o.contentWindow;if(!r)throw new Error("iframe not initialized");let n=bv(e,t);if(e==="privy:wallet:create"){let a=rc.get(n);if(a)return a}let i=new Promise((a,s)=>{let l=vv();Jt.enqueue(l,{resolve:a,reject:s}),r.postMessage({id:l,event:e,data:t},"*")}).finally(()=>{rc.delete(n)});return rc.set(n,i),i}function Ev(e){switch(e.event){case"privy:iframe:ready":let t=Jt.dequeue(e.event,e.id);return Co(e)?t.reject(new He(e.error.type,e.error.message)):t.resolve(e.data);case"privy:wallet:create":let o=Jt.dequeue(e.event,e.id);return Co(e)?o.reject(new He(e.error.type,e.error.message)):o.resolve(e.data);case"privy:wallet:connect":let r=Jt.dequeue(e.event,e.id);return Co(e)?r.reject(new He(e.error.type,e.error.message)):r.resolve(e.data);case"privy:wallet:recover":let n=Jt.dequeue(e.event,e.id);return Co(e)?n.reject(new He(e.error.type,e.error.message)):n.resolve(e.data);case"privy:wallet:rpc":let i=Jt.dequeue(e.event,e.id);return Co(e)?i.reject(new He(e.error.type,e.error.message)):i.resolve(e.data);case"privy:wallet:set-recovery-password":let a=Jt.dequeue(e.event,e.id);return Co(e)?a.reject(new He(e.error.type,e.error.message)):a.resolve(e.data);case"privy:mfa:verify":let s=Jt.dequeue(e.event,e.id);return Co(e)?s.reject(new He(e.error.type,e.error.message)):s.resolve(e.data);case"privy:mfa:init-enrollment":{let l=Jt.dequeue(e.event,e.id);return Co(e)?l.reject(new He(e.error.type,e.error.message)):l.resolve(e.data)}case"privy:mfa:submit-enrollment":{let l=Jt.dequeue(e.event,e.id);return Co(e)?l.reject(new He(e.error.type,e.error.message)):l.resolve(e.data)}case"privy:mfa:unenroll":{let l=Jt.dequeue(e.event,e.id);return Co(e)?l.reject(new He(e.error.type,e.error.message)):l.resolve(e.data)}default:console.warn("Unsupported wallet proxy method:",e)}}function rh(e){let t=(0,Os.useRef)(null),o=Ld();return(0,Os.useEffect)(()=>{let r=t.current;if(!r)return;function n(c){c&&c.origin===e.origin&&wv(c.data)&&Ev(c.data)}let i={create(c){return bo("privy:wallet:create",c,r)},connect(c){return bo("privy:wallet:connect",c,r)},recover(c){return Fr(m=>bo("privy:wallet:recover",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)},rpc(c){return Fr(m=>bo("privy:wallet:rpc",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},setRecoveryPassword(c){return Fr(m=>bo("privy:wallet:set-recovery-password",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},verifyMfa(c){return Fr(m=>bo("privy:mfa:verify",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)},initEnrollMfa(c){return Fr(m=>bo("privy:mfa:init-enrollment",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o)},submitEnrollMfa(c){return bo("privy:mfa:submit-enrollment",c,r)},unenrollMfa(c){return Fr(m=>bo("privy:mfa:unenroll",{...c,...m},r),e.mfaMethods,e.mfaPromise,e.mfaSubmitPromise,o,!0)}};window.addEventListener("message",n);let a=()=>e.onLoad(i),s=(...c)=>{console.warn("Privy iframe failed to load: ",...c),e.onLoadFailed()},l=new AbortController;return Xc(()=>bo("privy:iframe:ready",{},r),{abortSignal:l.signal}).then(a,s),()=>{window.removeEventListener("message",n),l.abort()}},[t.current,e.mfaMethods]),(0,nh.jsx)("iframe",{ref:t,width:"0",height:"0",style:{display:"none",height:"0px",width:"0px"},src:Xi(e.origin,`/apps/${e.appId}/embedded-wallets`,{caid:e.clientAnalyticsId})})}var Ds=class{constructor(t,o){this.meta={action:t,phoneNumber:o}}async init(){if(!this.meta.action)throw new w("action required");if(!this.api)throw new w("Auth flow has no API instance");if(this.meta.action==="enroll"&&!this.meta.phoneNumber)throw new w("phone number must be set when initialzing authentication.");try{let t=Lc();await this.api.post(t,{action:this.meta.action,phoneNumber:this.meta.phoneNumber})}catch(t){throw fe(t)}}async authenticate(){if(!this.meta.action)throw new w("action required");if(!this.api)throw new w("Mfa flow has no API instance");if(!this.meta.smsCode)throw new w("sms code must be set prior to calling authenticate.");if(this.meta.action==="enroll"&&!this.meta.phoneNumber)throw new w("phone number must be set prior to calling authenticate.");try{let t=Nc(),o=await this.api.post(t,{phoneNumber:this.meta.phoneNumber,code:this.meta.smsCode});return Bt(o)}catch(t){throw fe(t)}}};var Ft=require("react/jsx-runtime"),Di;function Pv(e){return typeof e=="string"&&e.length===25}function Fe(){if(!Di){let e=re.get(Vr);return Promise.resolve(e||null)}return Di.getAccessToken()}var ah,id=(e,t)=>ah(e,t),sh,ad=(e,t)=>sh(e,t),lh,sd=()=>lh(),xv=()=>{let t=new URLSearchParams(window.location.search).get("privy_token");if(!t)return;re.put(Qn,t);let o=new URL(window.location.href);o.searchParams.delete("privy_token"),window.history.pushState({},"",o)},ch=({config:e,...t})=>{if(!Pv(t.appId))throw new w("Cannot initialize the Privy provider with an invalid Privy app ID");Di||(Di=new rn({appId:t.appId,apiUrl:t.apiUrl||Ki}));let o=Object.assign({},e);return t.createPrivyWalletOnLogin!==void 0&&o.embeddedWallets?.createOnLogin===void 0&&(o.embeddedWallets||(o.embeddedWallets={}),o.embeddedWallets.createOnLogin=t.createPrivyWalletOnLogin?"users-without-wallets":"off"),t.createPrivyWalletOnLogin!==void 0&&e?.embeddedWallets?.createOnLogin&&console.warn("Both `createPrivyWalletOnLogin` and `config.embeddedWallets.createOnLogin` are set. `createPrivyWalletOnLogin` is deprecated and should be removed."),(0,Ft.jsx)(Tv,{...t,config:o,client:Di})},Tv=e=>{let t=e.client,[o,r]=(0,$.useState)(!1),[n,i]=(0,$.useState)(!1),[a,s]=(0,$.useState)(!1),[l,c]=(0,$.useState)(null),[m,y]=(0,$.useState)(!1),[C,f]=(0,$.useState)([]),E=(0,$.useRef)(C),[b,x]=(0,$.useState)(!1),[v,M]=(0,$.useState)(null),[L,I]=(0,$.useState)(!1),[A,R]=(0,$.useState)({status:"disconnected",connectError:null,connector:null,connectRetry:P}),[N,H]=(0,$.useState)(null),[V,D]=(0,$.useState)(null),[k,oe]=(0,$.useState)(null),[ye,Se]=(0,$.useState)({showWalletLoginFirst:!0,allowlistConfig:{errorTitle:null,errorDetail:null,errorCtaText:null,errorCtaLink:null},walletAuth:!0,emailAuth:!0,smsAuth:!1,googleOAuth:!1,twitterOAuth:!1,discordOAuth:!1,githubOAuth:!1,linkedinOAuth:!1,appleOAuth:!1,termsAndConditionsUrl:null,privacyPolicyUrl:null,embeddedWalletConfig:{createOnLogin:"off",requireUserPasswordOnCreate:!1},fiatOnRampEnabled:!1,captchaEnabled:!1,captchaSiteKey:""}),[U,Xe]=(0,$.useState)(()=>{let u=oh(e.config,e.createPrivyWalletOnLogin);return t.createAnalyticsEvent("sdk_initialize",u),Ls(ye,e.config)}),[kt,Oe]=(0,$.useState)(!0),[je,me]=(0,$.useState)({}),[Pe,Br]=(0,$.useState)(null),[te,Fo]=(0,$.useState)(null),[Eo,hr]=(0,$.useState)(!1),yr=(0,$.useRef)(null),Ui=(0,$.useRef)(null),we=(0,$.useRef)(Wd),gr=(0,$.useRef)(),De=u=>{M(u),r(!0),t.createAnalyticsEvent("modal_open",{initialScreen:u})},et=u=>{U.embeddedWallets.createOnLogin!=="off"&&Oe(!0),De(u)};(0,$.useEffect)(()=>{if(!k||!l){t.connectors?.removeEmbeddedWalletConnector();return}let u=l?.linkedAccounts.filter(p=>p.type==="wallet"&&p.walletClient==="privy");if(u&&u.length>0){let p=u[0].address;t.connectors?.addEmbeddedWalletConnector(k,p,U.defaultChain)}},[k,l]),(0,$.useEffect)(()=>{k&&te?.(k)},[k]),(0,$.useEffect)(()=>{(async()=>{if(!U.customAuth?.enabled)return;Oe(!0);let{getCustomAccessToken:p,isLoading:h}=U.customAuth;if(!(!n||h))try{let g=await p();if(!g){await Kn.logout();return}if(a)return;t.startAuthFlow(new zr(g));let{user:F,isNewUser:pe}=await t.authenticate();F||await Kn.logout(),c(F||null),x(pe||!1),s(!0),hr(!0)}catch(g){console.warn(g),a&&await Kn.logout()}})()},[U.customAuth?.enabled,U.customAuth?.getCustomAccessToken,U.customAuth?.isLoading,n,a]),(0,$.useEffect)(()=>{Eo&&k&&l&&zo(l,e.config?.embeddedWallets?.createOnLogin)&&(hr(!1),ic(l,$r).catch(console.error))},[Eo&&k&&l]),(0,$.useEffect)(()=>{async function u(){let p=await t.getServerConfig();Se(p);let h=Ls(p,e.config);Xe(h),p.customApiUrl&&t.updateApiUrl(p.customApiUrl);let g=(0,ih.createStore)();H(g),t.initializeConnectorManager(h.walletConnectCloudProjectId,h.rpcConfig,h.chains,h.defaultChain,g),t.connectors?.initialize();let F=Us();xv();let pe=await t.getAuthenticatedUser();e.config?.customAuth?.enabled||(s(!!pe),pe&&xe(we,"login","onComplete",pe,!1,!0,null),c(pe)),F||Ue.setReadyToTrue(),F&&pe&&y(!0),jn()}n||u()},[t,Pe,n]),(0,$.useEffect)(()=>{let u=Ls(ye,e.config);Xe(u)},[e.config,ye]);let Us=()=>{let u=new URLSearchParams(window.location.search),p=u.get("privy_oauth_code"),h=u.get("privy_oauth_state"),g=u.get("privy_oauth_provider");return p&&h&&g?(t.startAuthFlow(new Ho(g,p,h)),et("AWAITING_OAUTH_SCREEN"),!0):!1},vr=async(u,p,h)=>{let g=await t.connectors?.createWalletConnector(u,p)||null;wr(g,p,h)};async function wr(u,p,h){if(!u)return R({status:"disconnected",connectError:new j("Unable to connect to wallet."),connector:null,connectRetry:P}),h?.(null);u instanceof to&&p&&u.resetConnection(p),R({connector:u,status:"connecting",connectError:null,connectRetry:()=>wr(u,p,h)});try{let g=await u.connect({showPrompt:!0});if(U.shouldSwitchChainOnConnect&&!U.chains.find(F=>F.id===Number(g?.chainId))&&!(g?.connectorType==="wallet_connect_v2"&&g?.walletClientType==="metamask")){R(F=>({...F,connector:u,status:"switching_to_supported_chain",connectError:null,connectRetry:P}));try{await g?.switchChain(U.defaultChain.id),g&&(g.chainId=jr(xr(U.defaultChain.id)))}catch{console.warn(`Unable to switch to default chain: ${U.defaultChain.id}`)}}return R(F=>({...F,status:"connected",connectError:null,connectRetry:P})),g&&!L&&xe(we,"connectWallet","onSuccess",g),h?.(g)}catch(g){return g instanceof yt?(console.warn(g.cause?g.cause:g.message),L||xe(we,"connectWallet","onError",g.privyErrorCode||"generic_connect_wallet_error")):(console.warn(g),L||xe(we,"connectWallet","onError","unknown_connect_wallet_error")),R(F=>({...F,status:"disconnected",connectError:g})),h?.(null)}}let $n=u=>{u!==null&&t.startAuthFlow(new Er(u))},jn=()=>{let u=new URLSearchParams(window.location.search),p=u.get("privy_connector"),h=u.get("privy_wallet_client");if(!p||!h)return;if(h==="phantom"&&!Zt()&&et("LOGIN_FAILED_SCREEN"),!t.connectors)throw new w("Connector not initialized");De("AWAITING_CONNECTION");let g=new URL(window.location.href);g.searchParams.delete("privy_connector"),g.searchParams.delete("privy_wallet_client"),window.history.pushState({},"",g),vr(p,h,$n)};(0,$.useEffect)(()=>{n&&a&&l===null&&t.getAuthenticatedUser().then(c)},[n,a,l,t]);let Cr=()=>{if(!a)throw new w("User must be authenticated before linking a wallet.");y(!0),De("LINK_WALLET_SCREEN")},st=u=>{if(!a||!l)return!1;for(let p of l.linkedAccounts)if(p.type==="wallet"&&p.address===u.address)return!0;return!1},ht=async u=>{if(!t.connectors)throw new w("Connector not initialized");let p=t.connectors.findWalletConnector(u.connectorType,u.walletClientType)||null;R(h=>({...h,connector:p,status:"connected",connectError:null,connectRetry:P})),$n(u),et("AWAITING_CONNECTION")},At=async(u,p)=>{gr.current="siwe",await wr(u,p,$n)},Fs=async(u,p)=>{if(!U.fiatOnRamp.enabled)throw new w("Fiat on-ramp is not enabled");if(!p||!p.provider||p.provider==="moonpay"){let{signedUrl:h,externalTransactionId:g}=await vu(t,u,p?.config??{},U.appearance.palette,U.fiatOnRamp.useSandbox);return{signedUrl:h,externalTransactionId:g}}else throw new w("Unsupported fund provider. Currently supported option is `moonpay`.")},lt=()=>{f(u=>{let p=t.connectors?.wallets.map(h=>({...h,linked:st(h),loginOrLink:async()=>{if(!await h.isConnected())throw new w("Wallet is not connected");if(h.connectorType==="embedded"&&h.walletClientType==="privy")throw new w("Cannot link or login with embedded wallet");ht(h)},fund:async g=>{let{signedUrl:F,externalTransactionId:pe}=await Fs(h.address,g);me({fiatOnRampPrompt:{signedUrl:F},fiatOnRampStatus:{externalTransactionId:pe}}),De("FIAT_ON_RAMP_PROMPT_SCREEN")},unlink:async()=>{if(!a)throw new w("User is not authenticated.");if(h.connectorType==="embedded"&&h.walletClientType==="privy")throw new w("Cannot unlink an embedded wallet");let g=await t.unlinkWallet(h.address);c(g)}}))||[];return ta(u,p)?u:p})};(0,$.useEffect)(()=>{lt()},[l?.linkedAccounts,a,n]),(0,$.useEffect)(()=>{if(n){if(!t.connectors)throw new w("Connector not initialized");lt(),t.connectors.on("walletsUpdated",lt)}},[n]);let qn=()=>{De(a?"CONNECT_ONLY_AUTHENTICATED_SCREEN":"CONNECT_ONLY_LANDING_SCREEN")};(0,$.useEffect)(()=>{if(!C[0])return;let u=C[0],p=E.current.find(g=>g.address===u.address),h=l?.linkedAccounts.find(g=>g.type==="wallet"&&g.address===u.address);if(!p&&h){let g=Object.assign({},l);g.wallet=h&&{address:h.address,chainType:h.chainType,chainId:h.chainId,walletClient:h.walletClient,walletClientType:h.walletClientType,connectorType:h.connectorType},c(g)}E.current=C},[C]);let ic=async(u,p)=>{if(ge(u))throw xe(we,"createWallet","onError","embedded_wallet_already_exists"),new Error("Only one Privy wallet per user is currently allowed");let[g,F]=await Promise.all([Ue.initializeWalletProxy(p),Fe()]);if(!g&&e.config?.customAuth?.enabled)throw xe(we,"createWallet","onError","unknown_embedded_wallet_error"),new Error("Failed to connect to wallet proxy");if(!g||!F||e.config?.embeddedWallets?.requireUserPasswordOnCreate)return new Promise((pe,qe)=>{Oe(!0),me({createWallet:{onSuccess:Rt=>{xe(we,"createWallet","onSuccess",Rt),pe(Rt)},onFailure:Rt=>{xe(we,"createWallet","onError","unknown_embedded_wallet_error"),qe(Rt)},callAuthOnSuccessOnClose:!1}}),De("EMBEDDED_WALLET_ON_ACCOUNT_CREATE_SCREEN")});{await g.create({accessToken:F});let pe=await Ue.refreshUser(),qe=ge(pe);if(!qe)throw xe(we,"createWallet","onError","unknown_embedded_wallet_error"),new Error("Failed to create wallet");return xe(we,"createWallet","onSuccess",qe),qe}},bh=u=>{if(!U.chains.map(p=>p.id).includes(u))throw new j(`Chain ID ${u} is not supported. It must be added to the config.supportedChains property of the PrivyProvider.`,"unsupported_chain_id")},ac=(u,p,h)=>new Promise(async(g,F)=>{if(!a||!l){F(new Error("User must be authenticated before signing with a Privy wallet"));return}let pe=ge(l);if(!pe){F(new Error("Must have a Privy wallet before signing"));return}Oe(!0);let qe=t.connectors?.findWalletConnector("embedded","privy")?.proxyProvider,Hr=u.chainId?Number(u.chainId):qe.chainId;bh(Hr);let Rt=Object.assign({},u,{chainId:Hr}),Yn=async()=>{let Bo=await Fe();if(!Bo||!k){F(new Error("Must have valid access token and Privy wallet to send transaction"));return}try{if(!await Ue.recoverEmbeddedWallet()){F(new Error("Unable to connect to wallet"));return}let lc=new Vn.StaticJsonRpcProvider(Ht(Rt.chainId,U.chains,U.rpcConfig)),Ph=await Un(pe.address,Rt,lc),xh=await Ps(Bo,pe.address,k,Ph,lc);g(xh)}catch(Fi){F(Fi)}};if(U.embeddedWallets.noPromptOnSignature)p&&console.warn("uiOptions defined with `noPromptOnSignature` set to true in app config"),Yn();else{let Bo={transactionRequest:Rt,onSuccess:g,onFailure:F,uiOptions:p||{},fundWalletConfig:h},Fi={onCompleteNavigateTo:"EMBEDDED_WALLET_SEND_TRANSACTION_SCREEN",onFailure:F};me({connectWallet:Fi,sendTransaction:Bo}),De("EMBEDDED_WALLET_CONNECTING_SCREEN")}});function sc(){return new Promise(async(u,p)=>{let h=await Fe();if(!h||!k)throw new Error("Must have valid access token to enroll in MFA");try{await k.verifyMfa({accessToken:h}),u()}catch(g){p(g)}})}let Kn={ready:n,authenticated:a,user:l,walletConnectors:t.connectors||null,connectWallet:qn,linkWallet:Cr,linkEmail:()=>{if(!a)throw new w("User must be authenticated before linking an email address.");if(l?.email)throw new w("User already has an email linked to their account.");y(!0),De("LINK_EMAIL_SCREEN")},linkPhone:()=>{if(!a)throw new w("User must be authenticated before linking a phone number.");if(l?.phone)throw new w("User already has a phone number linked to their account.");y(!0),De("LINK_PHONE_SCREEN")},linkGoogle:async()=>{if(!a)throw new w("User must be authenticated before linking a Google account.");if(l?.google)throw new w("User already has a Google account linked to their account.");await Ue.initLoginWithOAuth("google")},linkTwitter:async()=>{if(!a)throw new w("User must be authenticated before linking a Twitter account.");if(l?.twitter)throw new w("User already has a Twitter account linked to their account.");await Ue.initLoginWithOAuth("twitter")},linkDiscord:async()=>{if(!a)throw new w("User must be authenticated before linking a Discord account.");if(l?.discord)throw new w("User already has a Discord account linked to their account.");await Ue.initLoginWithOAuth("discord")},linkGithub:async()=>{if(!a)throw new w("User must be authenticated before linking a GitHub account.");if(l?.github)throw new w("User already has a Github account linked to their account.");await Ue.initLoginWithOAuth("github")},linkTiktok:async()=>{if(!a)throw new w("User must be authenticated before linking a TikTok account.");if(l?.tiktok)throw new w("User already has a Tiktok account linked to their account.");await Ue.initLoginWithOAuth("tiktok")},linkLinkedIn:async()=>{if(!a)throw new w("User must be authenticated before linking a LinkedIn account.");if(l?.linkedin)throw new w("User already has a LinkedIn account linked to their account.");await Ue.initLoginWithOAuth("linkedin")},linkApple:async()=>{if(!a)throw new w("User must be authenticated before linking an Apple account.");await Ue.initLoginWithOAuth("apple")},login:async()=>{if(n||(await new Promise(u=>{Br(()=>u)}),Br(null)),a){console.warn("Attempted to log in, but user is already logged in. Use a `link` helper instead.");return}I(!0),et("LANDING")},logout:async()=>{await t.logout(),c(null),s(!1),M(null),xe(we,"logout","onSuccess"),y(!1),r(!1),re.del(Zn)},getAccessToken:()=>t.getAccessToken(),getEthereumProvider:()=>{if(!l||!l.wallet)return new he;let u=C.find(h=>l.wallet&&h.address===l.wallet.address),p=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===u?.address));return!u||!p?new he:p.proxyProvider},getEthersProvider:()=>{if(!l||!l.wallet)return new Vn.Web3Provider(new Gt(new he));let u=C.find(h=>l.wallet&&h.address===l.wallet.address),p=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===u?.address));return!u||!p?new Vn.Web3Provider(new Gt(new he)):new Vn.Web3Provider(new Gt(p.proxyProvider))},getWeb3jsProvider:()=>{if(!l||!l.wallet)return new jo(new he);let u=C.find(h=>l.wallet&&h.address===l.wallet.address),p=t.connectors?.walletConnectors.find(h=>h.wallets.find(g=>g.address===u?.address));return!u||!p?new jo(new he):new jo(p.proxyProvider)},unlinkWallet:async u=>{let p=await t.unlinkWallet(u);return c(p),p},unlinkEmail:async u=>{let p=await t.unlinkEmail(u);return c(p),p},unlinkPhone:async u=>{let p=await t.unlinkPhone(u);return c(p),p},unlinkGoogle:async u=>{let p=await t.unlinkOAuth("google",u);return c(p),p},unlinkTwitter:async u=>{let p=await t.unlinkOAuth("twitter",u);return c(p),p},unlinkDiscord:async u=>{let p=await t.unlinkOAuth("discord",u);return c(p),p},unlinkGithub:async u=>{let p=await t.unlinkOAuth("github",u);return c(p),p},unlinkTiktok:async u=>{let p=await t.unlinkOAuth("tiktok",u);return c(p),p},unlinkLinkedIn:async u=>{let p=await t.unlinkOAuth("linkedin",u);return c(p),p},unlinkApple:async u=>{let p=await t.unlinkOAuth("apple",u);return c(p),p},setActiveWallet:async u=>{let p=C.find(g=>(0,Oi.getAddress)(g.address)===(0,Oi.getAddress)(u)),h=l?.linkedAccounts.find(g=>g.type==="wallet"&&(0,Oi.getAddress)(g.address)===(0,Oi.getAddress)(u));if(!p||!await p.isConnected())D(u),Cr();else if(!p.linked)p.loginOrLink();else{let g=Object.assign({},l);g.wallet=h&&{address:h.address,chainType:h.chainType,chainId:h.chainId,walletClient:h.walletClient,walletClientType:h.walletClientType,connectorType:h.connectorType},c(g)}},forkSession:()=>t.forkSession(),createWallet:async()=>{if(!a||!l)throw xe(we,"createWallet","onError","must_be_authenticated"),new Error("User must be authenticated before creating a Privy wallet");return ic(l,15e3)},setWalletPassword:()=>new Promise(async(u,p)=>{if(!a||!l){p(new Error("User must be authenticated before adding password to Privy wallet"));return}let h=ge(l);if(!h||!k){p(new Error("Must have a Privy wallet to add a password"));return}if(h.recoveryMethod==="user-passcode"){p(new Error("Cannot set password. Embedded wallet already has a password."));return}await sc(),Oe(!0);let g={onSuccess:u,onFailure:p,callAuthOnSuccessOnClose:!1},F={onCompleteNavigateTo:"EMBEDDED_WALLET_PASSWORD_UPDATE_SPLASH_SCREEN",onFailure:p};me({setWalletPassword:g,connectWallet:F}),De("EMBEDDED_WALLET_CONNECTING_SCREEN")}),signMessage:(u,p)=>new Promise(async(h,g)=>{if(!a||!l){g(new Error("User must be authenticated before signing with a Privy wallet"));return}let F=ge(l);if(!F){g(new Error("Must have a Privy wallet before signing"));return}if(typeof u!="string"||u.length<1){g(new Error("Message must be a non-empty string"));return}Oe(!0);let pe=async()=>{if(!a)throw new Error("User must be authenticated before signing with a Privy wallet");let qe=await Fe();if(!k||!qe)throw new Error("Unable to connect to wallet");if(!await Ue.recoverEmbeddedWallet())throw new Error("Unable to connect to wallet");t.createAnalyticsEvent("embedded_wallet_sign_message_started",{walletAddress:F.address});let{response:Rt}=await k.rpc({accessToken:qe,address:F.address,request:{method:"personal_sign",params:[u,F.address]}}),Yn=Rt.data;return t.createAnalyticsEvent("embedded_wallet_sign_message_completed",{walletAddress:F.address}),Yn};if(U.embeddedWallets.noPromptOnSignature){p&&console.warn("uiOptions defined with `noPromptOnSignature` set to true in app config");try{let qe=await pe();h(qe)}catch(qe){g(qe??new tt("Unable to sign message"))}}else{let Rt={message:u,confirmAndSignMessage:pe,onSuccess:Bo=>{h(Bo)},onFailure:Bo=>{g(Bo)},uiOptions:p||{}},Yn={onCompleteNavigateTo:"EMBEDDED_WALLET_SIGN_REQUEST_SCREEN",onFailure:g};me({signMessage:Rt,connectWallet:Yn}),De("EMBEDDED_WALLET_CONNECTING_SCREEN")}}),sendTransaction:async(u,p,h)=>{let F=await(await ac(u,p,h)).wait();return Ts(F)},exportWallet:()=>new Promise(async(u,p)=>{if(!a||!l){p(new Error("User must be authenticated before exporting their Privy wallet"));return}if(!ge(l)){p(new Error("Must have a Privy wallet before exporting"));return}Oe(!0);let g={onCompleteNavigateTo:"EMBEDDED_WALLET_KEY_EXPORT_SCREEN",onFailure:p},F=await Fe();if(!F||!k)throw new Error("Must have valid access token to enroll in MFA");if(!k){p(new Error("Must have a Privy wallet before exporting"));return}await k.verifyMfa({accessToken:F});let pe={appId:e.appId,origin:t.apiUrl,onSuccess:u,onFailure:p};me({keyExport:pe,connectWallet:g}),De("EMBEDDED_WALLET_CONNECTING_SCREEN")}),promptMfa:sc,async init(u){let p;switch(u){case"sms":p=new Ds("verify");break;case"totp":return;default:throw new Error(`Unsupported MFA method: ${u}`)}t.startMfaFlow(p),await p.init()},async submit(u,p){switch(u){case"totp":case"sms":yr.current?.resolve({mfaMethod:u,mfaCode:p}),await new Promise((h,g)=>{Ui.current={resolve:h,reject:g}});break;default:throw yr.current?.reject(new w("Unsupported MFA method")),new w(`Unsupported MFA method: ${u}`)}},cancel(){yr.current?.reject(new w("MFA canceled"))},async initEnrollmentWithSms(u){let p=await Fe();if(!p||!k)throw new Error("Must have valid access token to enroll in MFA");await k.initEnrollMfa({method:"sms",accessToken:p,phoneNumber:u.phoneNumber})},enrollInMfa(u){return new Promise((p,h)=>{if(!u){Ue.closePrivyModal(),p();return}U.mfa.noPromptOnMfaRequired&&console.warn("[Privy Warning] Triggering the 'showMfaEnrollmentModal' function when 'noPromptOnMfaRequired' is set to true is unexpected. If this is intentional, ensure that you are building custom UIs for MFA verification."),me({mfaEnrollmentFlow:{mfaMethods:U.mfa.methods,onSuccess:p,onFailure:h}}),De("MFA_ENROLLMENT_FLOW_SCREEN")})},async initEnrollmentWithTotp(){let u=await Fe();if(!u||!k)throw new Error("Must have valid access token to enroll in MFA");let p=await k.initEnrollMfa({method:"totp",accessToken:u});return{secret:p.secret,authUrl:p.authUrl}},async submitEnrollmentWithSms(u){let p=await Fe();if(!p||!k)throw new Error("Must have valid access token to enroll in MFA");await k.submitEnrollMfa({method:"sms",accessToken:p,phoneNumber:u.phoneNumber,code:u.mfaCode});let h=await t.getAuthenticatedUser();c(h)},async submitEnrollmentWithTotp(u){let p=await Fe();if(!p||!k)throw new Error("Must have valid access token to enroll in MFA");await k.submitEnrollMfa({method:"totp",accessToken:p,code:u.mfaCode});let h=await t.getAuthenticatedUser();c(h)},async unenroll(u){let p=await Fe();if(!p||!k)throw new Error("Must have valid access token to remove MFA");await k.unenrollMfa({method:u,accessToken:p});let h=await t.getAuthenticatedUser();c(h)},loginWithCode(u){return Ue.loginWithCode(u)},initLoginWithEmail(u,p){return Ue.initLoginWithEmail(u,p)},isModalOpen:o};ah=Kn.signMessage,sh=async(...u)=>{let p=await ac(...u);return U.embeddedWallets.waitForTransactionConfirmation&&await p.wait(),p};let Ue=(()=>({isNewUserThisSession:b,isLinking:m,linkingHint:V,pendingTransaction:null,walletConnectionStatus:A,mipdStore:N,connectors:t.connectors?.walletConnectors??[],rpcConfig:U.rpcConfig,chains:U.chains,showFiatPrices:U.embeddedWallets.priceDisplay.primary!=="native-token",clientAnalyticsId:t.clientAnalyticsId,nativeTokenSymbolForChainId:u=>U.chains.find(p=>p.id===Number(u))?.nativeCurrency.symbol,initializeWalletProxy:async u=>{if(k)return k;let p=new Promise(F=>{Fo(()=>pe=>F(pe))}),h=new Promise(F=>setTimeout(()=>F(null),u)),g=await Promise.race([p,h]);return Fo(null),g},getAuthFlow:()=>t.authFlow,getAuthMeta:()=>t.authFlow?.meta,closePrivyModal:(u={shouldCallAuthOnSuccess:!0})=>{let p=n&&a&&l;u.shouldCallAuthOnSuccess&&p?(xe(we,"login","onComplete",l,b,!1,gr.current??null),e.onSuccess?.(l,b)):L&&xe(we,"login","onError","exited_auth_flow"),D(null),I(!1),y(!1),x(!1),r(!1),setTimeout(()=>{t.authFlow=void 0},200),t.createAnalyticsEvent("modal_closed")},connectWallet:wr,initLoginWithWallet:At,loginWithWallet:async()=>{if(!n)throw new Jn;if(!(t.authFlow instanceof Er))throw new w("Must initialize SIWE flow first.");let u,p;if(a)u=await t.link();else try{({user:u,isNewUser:p}=await t.authenticate())}catch(h){throw xe(we,"login","onError",h.privyErrorCode||"generic_connect_wallet_error"),h}c(u||l||null),x(p||!1),s(!0)},initLoginWithOAuth:async u=>{t.startAuthFlow(new Ho(u));let p=await t.authFlow.getAuthorizationUrl();p&&p.url&&window.location.assign(p.url)},loginWithOAuth:async u=>{if(!(t.authFlow instanceof Ho))throw new w("Must initialize OAuth flow before calling loginWithOAuth");let p,h;if(a)p=await t.link();else try{({user:p,isNewUser:h}=await t.authenticate()),gr.current=u}catch(g){throw xe(we,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}c(p),x(h||!1),s(!0)},initLoginWithEmail:async(u,p)=>{let h=new br(u,p);t.startAuthFlow(h);try{gr.current="email",await h.sendCodeEmail()}catch(g){throw xe(we,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}},initLoginWithSms:async(u,p)=>{let h=new Pr(u,p);t.startAuthFlow(h);try{gr.current="sms",await h.sendSmsCode()}catch(g){throw xe(we,"login","onError",g.privyErrorCode||"unknown_auth_error"),g}},resendEmailCode:async()=>{await t.authFlow?.sendCodeEmail()},resendSmsCode:async()=>{await t.authFlow?.sendSmsCode()},loginWithCode:async u=>{if(!n)throw new Jn;if(t.authFlow instanceof br)t.authFlow.meta.emailCode=u.trim();else if(t.authFlow instanceof Pr)t.authFlow.meta.smsCode=u.trim();else throw new w("Must initialize a passwordless code flow first");let p,h;a?p=await t.link():{user:p,isNewUser:h}=await t.authenticate(),c(p||l||null),x(h||!1),s(!0)},refreshUser:async()=>{let u=await t.getAuthenticatedUser();return c(u),u},walletProxy:k,createAnalyticsEvent:(u,p,h)=>t.createAnalyticsEvent(u,p,h),getUsdTokenPrice:u=>t.getUsdTokenPrice(u),recoverEmbeddedWallet:async()=>new Promise(async(u,p)=>{let h=l?.linkedAccounts.find(F=>F.type==="wallet"&&F.walletClientType==="privy"),g=await Fe();if(!g||!k||!h){p(new Error("Must have valid access token and Privy wallet to recover wallet"));return}Oe(!0);try{await k.connect({accessToken:g,address:h.address}),u(!0)}catch(F){fn(F)&&h.recoveryMethod==="privy"?(t.createAnalyticsEvent("embedded_wallet_pinless_recovery_started",{walletAddress:h.address}),(await k.recover({address:h.address,accessToken:g})).address||p(new Error("Unable to recover wallet")),t.createAnalyticsEvent("embedded_wallet_recovery_completed",{walletAddress:h.address}),u(!0)):fn(F)?(me({recoverWallet:{privyWallet:h,onFailure:p,onSuccess:()=>u(!0)}}),De("EMBEDDED_WALLET_RECOVERY_SCREEN")):p(F)}}),getFiatOnRampConfig:Fs,setReadyToTrue:()=>{i(!0),Pe?.()},updateWallets:()=>lt()}))();lh=Ue.recoverEmbeddedWallet;let Eh=(0,$.useMemo)(()=>({wallets:C}),[C]);return(0,Ft.jsx)(Be.Provider,{value:Kn,children:(0,Ft.jsx)(nl.Provider,{value:we,children:(0,Ft.jsx)(Zl.Provider,{value:Eh,children:(0,Ft.jsxs)(Lu,{...U,children:[e.children,(0,Ft.jsxs)(al.Provider,{value:Ue,children:[(0,Ft.jsx)(Of,{theme:{...U.appearance.palette||{}}}),(0,Ft.jsx)(md,{appConfig:U,data:je,setModalData:me,setInitialScreen:M,initialScreen:v,visible:o,authenticated:a,children:(0,Ft.jsx)(Bf,{open:o})}),kt&&ye.id?(0,Ft.jsx)(rh,{appId:e.appId,clientAnalyticsId:t.clientAnalyticsId,origin:t.apiUrl,mfaMethods:l?.mfaMethods,mfaPromise:yr,mfaSubmitPromise:Ui,onLoad:oe,onLoadFailed:()=>null}):null]})]})})})})};var dh=require("react");function ph(e){let{login:t}=(0,dh.useContext)(Be);return ro("login",e),{login:t}}var uh=require("react");function mh(e){let{logout:t}=(0,uh.useContext)(Be);return ro("logout",e),{logout:t}}var nc=require("react");var fh=()=>{let e=so(),{initLoginWithEmail:t,loginWithCode:o}=q(),r=(0,nc.useCallback)(async({email:i})=>{if(!i)throw new Error("Email required to send OTP code");if(e.status==="disabled")return t(i);let a=await e.waitForResult();return t(i,a)},[t,e]),n=(0,nc.useCallback)(async({code:i})=>{if(e.enabled&&e.status!=="success")throw new hi(e.error,null,"captcha_failure");return o(i)},[o,e.status]);return{sendCode:r,loginWithCode:n}};var hh=require("react");function yh(e){let{connectWallet:t}=(0,hh.useContext)(Be);return ro("connectWallet",e),{connectWallet:t}}var gh=require("react");function vh(e){let{createWallet:t}=(0,gh.useContext)(Be);return ro("createWallet",e),{createWallet:t}}var wh=require("react");var Ch=()=>{let{isModalOpen:e}=(0,wh.useContext)(Be);return{isOpen:e}};0&&(module.exports={AsExternalProvider,Captcha,ConnectorManager,PrivyClient,PrivyProvider,PrivyProxyProvider,SUPPORTED_CHAINS,VERSION,WalletConnector,errorIndicatesMaxMfaRetries,errorIndicatesMfaTimeout,errorIndicatesMfaVerificationFailed,getAccessToken,useConnectWallet,useCreateWallet,useLogin,useLoginWithEmail,useLogout,useMfa,useMfaEnrollment,useModalStatus,usePrivy,useRegisterMfaListener,useWallets});
|
package/package.json
CHANGED