@privy-io/react-auth
Version:
React client for the Privy Auth API
3 lines (2 loc) • 45.3 kB
JavaScript
"use strict";var e=require("./SignRequestScreen-CN1o6lNS.js"),t=require("react/jsx-runtime"),n=require("@heroicons/react/24/outline/CheckCircleIcon"),a=require("react"),r=require("@privy-io/js-sdk-core"),i=require("./paths-B00ZrFQm.js"),s=require("./internal-context-DNWjSiYq.js"),o=require("./privy-context-C4y2c3Ko.js"),l=require("./usePrivy-D-rpmVV5.js"),c=require("eventemitter3"),d=require("@scure/base"),u=require("styled-components"),p=require("@solana/kit"),m=require("./use-sign-with-user-signer-Q0_LRVtz.js"),g=require("@solana-program/system"),f=require("@solana-program/token");function h(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=/*#__PURE__*/h(n),w=/*#__PURE__*/h(c);function v({rows:n}){/*#__PURE__*/return t.jsx(e.Rows,{children:n.filter((e=>!!e)).map(((n,a)=>null!=n.value||n.isLoading?/*#__PURE__*/t.jsxs(e.Row,{children:[/*#__PURE__*/t.jsx(e.LabelSm,{children:n.label}),/*#__PURE__*/t.jsx(e.Value,{$isLoading:n.isLoading,children:n.value})]},a):null))})}const A=["solana:mainnet","solana:devnet","solana:testnet"];function S(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}var T=0,I="__private_"+T+++"__implementation";class b extends w.default{setImplementation(e){S(this,I)[I]=e}async signMessage(e){return S(this,I)[I].signMessage(e)}async signAndSendTransaction(e){return S(this,I)[I].signAndSendTransaction(e)}async signTransaction(e){return S(this,I)[I].signTransaction(e)}constructor(e){super(),Object.defineProperty(this,I,{writable:!0,value:void 0}),S(this,I)[I]=e}}function C(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}var E=0;function P(e){return"__private_"+E+++"_"+e}var x=/*#__PURE__*/P("_address"),O=/*#__PURE__*/P("_publicKey"),k=/*#__PURE__*/P("_chains"),F=/*#__PURE__*/P("_features"),_=/*#__PURE__*/P("_label"),M=/*#__PURE__*/P("_icon");class j{get address(){return C(this,x)[x]}get publicKey(){return C(this,O)[O].slice()}get chains(){return C(this,k)[k].slice()}get features(){return C(this,F)[F].slice()}get label(){return C(this,_)[_]}get icon(){return C(this,M)[M]}constructor({address:e,publicKey:t,label:n,icon:a}){Object.defineProperty(this,x,{writable:!0,value:void 0}),Object.defineProperty(this,O,{writable:!0,value:void 0}),Object.defineProperty(this,k,{writable:!0,value:void 0}),Object.defineProperty(this,F,{writable:!0,value:void 0}),Object.defineProperty(this,_,{writable:!0,value:void 0}),Object.defineProperty(this,M,{writable:!0,value:void 0}),C(this,x)[x]=e,C(this,O)[O]=t,C(this,k)[k]=A,C(this,_)[_]=n,C(this,M)[M]=a,C(this,F)[F]=["solana:signAndSendTransaction","solana:signTransaction","solana:signMessage"],new.target===j&&Object.freeze(this)}}function W(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}var U=0;function D(e){return"__private_"+U+++"_"+e}var L=/*#__PURE__*/D("_listeners"),R=/*#__PURE__*/D("_version"),B=/*#__PURE__*/D("_name"),N=/*#__PURE__*/D("_icon"),$=/*#__PURE__*/D("_injection"),V=/*#__PURE__*/D("_isPrivyWallet"),q=/*#__PURE__*/D("_accounts"),G=/*#__PURE__*/D("_on"),J=/*#__PURE__*/D("_emit"),K=/*#__PURE__*/D("_off"),Y=/*#__PURE__*/D("_connected"),H=/*#__PURE__*/D("_connect"),Q=/*#__PURE__*/D("_disconnect"),Z=/*#__PURE__*/D("_signMessage"),z=/*#__PURE__*/D("_signAndSendTransaction"),X=/*#__PURE__*/D("_signTransaction");function ee(e,...t){W(this,L)[L][e]?.forEach((e=>e.apply(null,t)))}function te(e,t){W(this,L)[L][e]=W(this,L)[L][e]?.filter((e=>t!==e))}const ne=/*#__PURE__*/u.styled.span.withConfig({displayName:"CircleBackground",componentId:"sc-c9f33cd-0"})(["&&{width:82px;height:82px;border-width:4px;border-style:solid;border-color:",";background-color:",";border-radius:50%;display:inline-block;box-sizing:border-box;}"],(e=>e.color??"var(--privy-color-accent)"),(e=>e.color??"var(--privy-color-accent)")),ae=({instruction:n,fees:a,transactionInfo:r,solPrice:i,chain:s})=>/*#__PURE__*/t.jsxs(e.Rows,{children:[r?.action&&/*#__PURE__*/t.jsxs(e.Row,{children:[/*#__PURE__*/t.jsx(e.LabelSm,{children:"Action"}),/*#__PURE__*/t.jsx(e.Value,{children:r.action})]}),null!=n?.total&&/*#__PURE__*/t.jsxs(e.Row,{children:[/*#__PURE__*/t.jsx(e.LabelSm,{children:"Total"}),/*#__PURE__*/t.jsx(e.Value,{children:n.total})]}),!n?.total&&null!=n?.amount&&/*#__PURE__*/t.jsxs(e.Row,{children:[/*#__PURE__*/t.jsx(e.LabelSm,{children:"Total"}),/*#__PURE__*/t.jsx(e.Value,{children:/*#__PURE__*/t.jsx(e.SolanaPriceDisplay,{quantities:[n.amount,a],tokenPrice:i})})]}),/*#__PURE__*/t.jsxs(e.Row,{children:[/*#__PURE__*/t.jsx(e.LabelSm,{children:"Fees"}),/*#__PURE__*/t.jsx(e.Value,{children:/*#__PURE__*/t.jsx(e.SolanaPriceDisplay,{quantities:[a],tokenPrice:i})})]}),n?.to&&/*#__PURE__*/t.jsxs(e.Row,{children:[/*#__PURE__*/t.jsx(e.LabelSm,{children:"To"}),/*#__PURE__*/t.jsx(e.Value,{children:/*#__PURE__*/t.jsx(e.WalletLink,{walletAddress:n.to,chainId:s,chainType:"solana"})})]})]}),re=({fees:n,onClose:a,receiptHeader:r,receiptDescription:i,transactionInfo:s,solPrice:o,signOnly:l,instruction:c,chain:d})=>/*#__PURE__*/t.jsxs(t.Fragment,{children:[/*#__PURE__*/t.jsx(e.ModalHeader,{onClose:a}),/*#__PURE__*/t.jsx(e.e$2,{style:{marginBottom:"16px"},children:/*#__PURE__*/t.jsxs("div",{children:[/*#__PURE__*/t.jsx(ne,{color:"var(--privy-color-success-light)"}),/*#__PURE__*/t.jsx(y.default,{height:38,width:38,strokeWidth:2,stroke:"var(--privy-color-success)"})]})}),/*#__PURE__*/t.jsx(e.CenteredScreenHeader,{title:r??`Transaction ${l?"signed":"complete"}!`,description:i??"You're all set."}),/*#__PURE__*/t.jsx(ae,{solPrice:o,instruction:c,fees:n,transactionInfo:s,chain:d}),/*#__PURE__*/t.jsx(e.Grow,{}),/*#__PURE__*/t.jsx(ie,{loading:!1,onClick:a,children:"Close"}),/*#__PURE__*/t.jsx(e.RefactorSpacerBottom,{}),/*#__PURE__*/t.jsx(e.BlobbyFooter,{})]});let ie=/*#__PURE__*/u.styled(e.PrimaryButton).withConfig({displayName:"SubmitButton",componentId:"sc-3cb7ee42-0"})(["&&{margin-top:24px;}transition:color 350ms ease,background-color 350ms ease;"]);function se(e){return new Uint8Array(p.getTransactionDecoder().decode(e).messageBytes)}async function oe(e,t){try{return await e}catch{return t}}const le=(...e)=>{if("undefined"==typeof Buffer)throw new i.PrivyClientError("Buffer is not defined.",void 0,i.PrivyErrorCode.BUFFER_NOT_DEFINED);return Buffer.from(...e)};function ce(e){switch(e){case"solana:mainnet":return"mainnet-beta";case"solana:devnet":return"devnet";case"solana:testnet":return"testnet"}}async function de({privyClient:t,chain:n,mint:a}){let r=e.DEFAULT_TOKENS_DATA[n];if(!r[a]){let e=await t.getSplTokenMetadata({mintAddress:a,cluster:ce(n)});e&&(r[a]={address:a,symbol:e.symbol,decimals:e.decimals})}return r[a]}async function ue({solanaClient:e,tx:t}){let n=p.getBase64Decoder().decode(se(t)),{value:a}=await e.rpc.getFeeForMessage(n).send();return a??0n}async function pe({solanaClient:e,tx:t,replaceRecentBlockhash:n}){let{value:a}=await e.rpc.simulateTransaction(p.getBase64Decoder().decode(t),{commitment:"confirmed",encoding:"base64",sigVerify:!1,replaceRecentBlockhash:n}).send();if("BlockhashNotFound"===a.err&&n)throw Error("Simulation failed: Blockhash not found");return"BlockhashNotFound"===a.err?await pe({solanaClient:e,tx:t,replaceRecentBlockhash:!0}):{logs:a.logs??[],error:a.err,hasError:!!a.err,hasFunds:a.logs?.every((e=>!/insufficient funds/gi.test(e)&&!/insufficient lamports/gi.test(e)))??!0}}async function me({tx:t,solanaClient:n,privyClient:a,checkFunds:r}){let i=p.getCompiledTransactionMessageDecoder().decode(se(t)),s=i.staticAccounts[0]??"",o=await ue({solanaClient:n,tx:t}),l=r?await oe(pe({solanaClient:n,tx:t})):void 0,c=l?.hasFunds??!0,d={},u=[],m=await async function({solanaClient:e,message:t}){if(!("addressTableLookups"in t)||!t.addressTableLookups)return[...t.staticAccounts];let n=t.addressTableLookups.map((e=>e.lookupTableAddress)),a=await p.fetchAddressesForLookupTables(n,e.rpc),r=n.map(((e,n)=>[...t.addressTableLookups[n]?.writableIndexes.map((t=>{let r=a[e]?.[t];if(r)return{key:r,isWritable:!0,altIdx:n}}))??[],...t.addressTableLookups[n]?.readonlyIndexes.map((t=>{let r=a[e]?.[t];if(r)return{key:r,isWritable:!1,altIdx:n}}))??[]])).flat().filter((e=>!!e)).sort(((e,t)=>e.isWritable!==t.isWritable?e.isWritable?-1:1:e.altIdx-t.altIdx)).map((({key:e})=>e));return[...t.staticAccounts,...r]}({solanaClient:n,message:i});for(let t of i.instructions){let r=i.staticAccounts[t.programAddressIndex]||"";if(r!==e.TOKEN_PROGRAM_ID&&r!==e.TOKEN_2022_PROGRAM_ID)if(r!==e.SYSTEM_PROGRAM_ID){if(r===e.ASSOCIATED_TOKEN_PROGRAM_ID){let e=await oe(function(e,t,n){let[a,r,i,s]=e.accountIndices?.map((e=>t[e]))??[];return{type:"ata-creation",program:n,payer:a,ata:r,owner:i,mint:s}}(t,m,r));if(!e){u.push({type:"unknown",program:r,discriminator:t.data?.[0]});continue}if(u.push(e),e.ata&&e.owner&&e.mint){d[e.ata]={owner:e.owner,mint:e.mint};continue}}if(e.RAYDIUM_SWAP_PROGRAM_IDS.includes(r)){let e=await oe(ye(t,m,n,a,r));if(!e){u.push({type:"unknown",program:r,discriminator:t.data?.[0]});continue}u.push(e)}else if(e.JUPITER_SWAP_PROGRAM_IDS.includes(r)){let e=await oe(we(t,m,n,a,r));if(!e){u.push({type:"unknown",program:r,discriminator:t.data?.[0]});continue}u.push(e)}else u.push({type:"unknown",program:r,discriminator:t.data?.[0]})}else{let e=await oe(he(t,m));if(!e){u.push({type:"unknown",program:r,discriminator:t.data?.[0]});continue}u.push(e)}else{let e=await oe(fe(t,m,n,a,d,r));if(!e){u.push({type:"unknown",program:r,discriminator:t.data?.[0]});continue}u.push(e),"spl-transfer"===e.type&&(e.fromAta&&e.fromAccount&&e.token.address&&(d[e.fromAta]??={owner:e.fromAccount,mint:e.token.address}),e.toAta&&e.toAccount&&e.token.address&&(d[e.toAta]??={owner:e.toAccount,mint:e.token.address}))}}return{spender:s,fee:o,instructions:u,hasFunds:!!c}}function ge(e,t=0){try{return function(e,t=0){let n=0n;for(let a=0;a<8;a++)n|=BigInt(e[t+a])<<BigInt(8*a);return n}(e,t)}catch{}try{return e.readBigInt64LE(t)}catch{}let n=le(e);try{return((e,t=0)=>{let n=e[t],a=e[t+7];if(!n||!a)throw Error(`Buffer offset out of range: first: ${n}, last: ${a}.`);return(BigInt(e[t+4]+256*e[t+5]+65536*e[t+6]+(a<<24))<<32n)+BigInt(n+256*e[++t]+65536*e[++t]+16777216*e[++t])})(n)}catch{}try{return n.subarray(t).readBigInt64LE()}catch{}try{return n.readBigInt64LE(t)}catch{}return 0n}async function fe(e,t,n,a,r,i){let s=e.data?.[0],o=e.accountIndices?.map((e=>t[e]))??[];if(1===s){let[e,t,n]=o;return{type:"spl-init-account",program:i,account:e,mint:t,owner:n}}if(3===s){let t,s,[l,c,d]=o,u="",p=c?r[c]:void 0;if(p)t=p.owner,u=p.mint;else if(c){let e=await n.rpc.getAccountInfo(c,{commitment:"confirmed",encoding:"jsonParsed"}).send(),a=e.value?.data;t=a?.parsed?.info?.owner,u=a?.parsed?.info?.mint??"",s=a?.parsed?.info?.tokenAmount?.decimals}if(!u&&l){let e=await n.rpc.getAccountInfo(l,{commitment:"confirmed",encoding:"jsonParsed"}).send(),t=e.value?.data;u=t?.parsed?.info?.mint??""}let m=await de({privyClient:a,chain:n.chain,mint:u}),g=m?.symbol??"";return s??=m?.decimals??9,{type:"spl-transfer",program:i,fromAta:l,fromAccount:d,toAta:c,toAccount:t,value:ge(e.data,1),token:{symbol:g,decimals:s,address:u}}}if(9===s){let[e,t,n]=o;return{type:"spl-close-account",program:i,source:e,destination:t,owner:n}}if(17===s)return{type:"spl-sync-native",program:i};throw Error(`Token program instruction type ${s} not supported`)}async function he(t,n){let a=t.data?.[0],r=t.accountIndices?.map((e=>n[e]))??[];if(0===a){let[,n]=r;return{type:"create-account",program:e.SYSTEM_PROGRAM_ID,account:n?.toString(),value:ge(t.data,4),withSeed:!1}}if(2===a){let[n,a]=r;return{type:"sol-transfer",program:e.SYSTEM_PROGRAM_ID,fromAccount:n,toAccount:a,token:{symbol:"SOL",decimals:9},value:ge(t.data,4),withSeed:!1}}if(3===a){let[,n]=r;return{type:"create-account",program:e.SYSTEM_PROGRAM_ID,account:n,withSeed:!0,value:ge(t.data.slice(t.data.length-32-8-8))}}if(11===a){let[n,a]=r;return{type:"sol-transfer",program:e.SYSTEM_PROGRAM_ID,fromAccount:n,toAccount:a,value:ge(t.data,4),token:{symbol:"SOL",decimals:9},withSeed:!0}}throw Error(`System program instruction type ${a} not supported`)}async function ye(e,t,n,a,r){let i=e.accountIndices?.map((e=>t[e]))??[],s=e.data?.[0];if(143===s){let t=i[10],s=i[11];return{type:"raydium-swap-base-input",program:r,mintIn:t,mintOut:s,tokenIn:t?await de({privyClient:a,chain:n.chain,mint:t}):void 0,tokenOut:s?await de({privyClient:a,chain:n.chain,mint:s}):void 0,amountIn:ge(e.data,8),minimumAmountOut:ge(e.data,16)}}if(55===s){let t=i[10],s=i[11];return{type:"raydium-swap-base-output",program:r,mintIn:t,mintOut:s,tokenIn:t?await de({privyClient:a,chain:n.chain,mint:t}):void 0,tokenOut:s?await de({privyClient:a,chain:n.chain,mint:s}):void 0,maxAmountIn:ge(e.data,8),amountOut:ge(e.data,16)}}throw Error(`Raydium swap program instruction type ${s} not supported`)}async function we(e,t,n,a,r){let i=e.data?.[0],s=e.accountIndices?.map((e=>t[e]))??[];if([208,51,239,151,123,43,237,92].includes(i)){let t=s[5],i=s[6];return{type:"jupiter-swap-exact-out-route",program:r,mintIn:t,mintOut:i,tokenIn:t?await de({privyClient:a,chain:n.chain,mint:t}):void 0,tokenOut:i?await de({privyClient:a,chain:n.chain,mint:i}):void 0,outAmount:ge(e.data,e.data.length-1-2-8-8),quotedInAmount:ge(e.data,e.data.length-1-2-8)}}if([176,209,105,168,154,125,69,62].includes(i)){let t=s[7],i=s[8];return{type:"jupiter-swap-exact-out-route",program:r,mintIn:t,mintOut:i,tokenIn:t?await de({privyClient:a,chain:n.chain,mint:t}):void 0,tokenOut:i?await de({privyClient:a,chain:n.chain,mint:i}):void 0,outAmount:ge(e.data,e.data.length-1-2-8-8),quotedInAmount:ge(e.data,e.data.length-1-2-8)}}if([193,32,155,51,65,214,156,129].includes(i)){let t=s[7],i=s[8];return{type:"jupiter-swap-shared-accounts-route",program:r,mintIn:t,mintOut:i,tokenIn:t?await de({privyClient:a,chain:n.chain,mint:t}):void 0,tokenOut:i?await de({privyClient:a,chain:n.chain,mint:i}):void 0,inAmount:ge(e.data,e.data.length-1-2-8-8),quotedOutAmount:ge(e.data,e.data.length-1-2-8)}}throw[62,198,214,193,213,159,108,210].includes(i)&&console.warn("Jupiter swap program instruction 'claim' not implemented"),[116,206,27,191,166,19,0,73].includes(i)&&console.warn("Jupiter swap program instruction 'claim_token' not implemented"),[26,74,236,151,104,64,183,249].includes(i)&&console.warn("Jupiter swap program instruction 'close_token' not implemented"),[229,194,212,172,8,10,134,147].includes(i)&&console.warn("Jupiter swap program instruction 'create_open_orders' not implemented"),[28,226,32,148,188,136,113,171].includes(i)&&console.warn("Jupiter swap program instruction 'create_program_open_orders' not implemented"),[232,242,197,253,240,143,129,52].includes(i)&&console.warn("Jupiter swap program instruction 'create_token_ledger' not implemented"),[147,241,123,100,244,132,174,118].includes(i)&&console.warn("Jupiter swap program instruction 'create_token_account' not implemented"),[229,23,203,151,122,227,173,42].includes(i)&&console.warn("Jupiter swap program instruction 'route' not implemented"),[150,86,71,116,167,93,14,104].includes(i)&&console.warn("Jupiter swap program instruction 'route_with_token_ledger' not implemented"),[228,85,185,112,78,79,77,2].includes(i)&&console.warn("Jupiter swap program instruction 'set_token_ledger' not implemented"),[230,121,143,80,119,159,106,170].includes(i)&&console.warn("Jupiter swap program instruction 'shared_accounts_route_with_token_ledger' not implemented"),Error(`Jupiter swap program instruction type ${i} not supported`)}async function ve({rpcSubscriptions:e,signature:t,timeout:n}){let a=new AbortController,r=await e.signatureNotifications(t,{commitment:"confirmed"}).subscribe({abortSignal:a.signal}),i=await Promise.race([new Promise((e=>{setTimeout((()=>{a.abort(),e(Error("Transaction confirmation timed out"))}),n)})),new Promise((async e=>{for await(let t of r){if(a.abort(),t.value.err)return e(Error("Transaction confirmation failed"));e(void 0)}}))]);if(i instanceof Error)throw i}function Ae({rpc:e,rpcSubscriptions:t,chain:n,blockExplorerUrl:a}){let r=function({rpc:e,rpcSubscriptions:t}){return async n=>new Promise((async(a,r)=>{try{let r=await e.sendTransaction(le(n).toString("base64"),{preflightCommitment:"confirmed",encoding:"base64"}).send();await ve({rpcSubscriptions:t,signature:r,timeout:1e4}),a({signature:new Uint8Array(p.getBase58Encoder().encode(r))})}catch(e){r(e)}}))}({rpc:e,rpcSubscriptions:t});return{rpc:e,rpcSubscriptions:t,chain:n,blockExplorerUrl:a,sendAndConfirmTransaction:r}}function Se(){let t=e.useAppConfig(),n=a.useMemo((()=>Object.fromEntries(["solana:mainnet","solana:devnet","solana:testnet"].map((e=>[e,t.solanaRpcs[e]?Ae({chain:e,rpc:t.solanaRpcs[e].rpc,rpcSubscriptions:t.solanaRpcs[e].rpcSubscriptions,blockExplorerUrl:t.solanaRpcs[e].blockExplorerUrl??`https://explorer.solana.com?cluster=${e.replace("solana:","")}`}):null])))),[t.solanaRpcs]);return a.useCallback((e=>{if(!n[e])throw Error(`No RPC configuration found for chain ${e}`);return n[e]}),[n])}const Te={component:()=>{let{data:n,onUserCloseViaDialogOrKeybindRef:i,setModalData:l,navigate:c}=e.usePrivyModal(),{client:d,closePrivyModal:u,walletProxy:m,showFiatPrices:g}=s.usePrivyInternal(),f=e.useAppConfig(),{user:h}=o.usePrivyContext(),y=Se()(n?.standardSignAndSendTransaction?.chain??"solana:mainnet"),[w,v]=a.useState(n?.standardSignAndSendTransaction?.transaction),[A,S]=a.useState(),[T,I]=a.useState(),[b,C]=a.useState({value:0n,isLoading:!1}),[E,P]=a.useState(!1),[x,O]=a.useState({}),[k,F]=a.useState(),_=n?.standardSignAndSendTransaction?.account,M=!!n?.standardSignAndSendTransaction?.signOnly,j=_?.imported?o.getImportedPrivySolanaWallet(h):o.getPrivyPrimaryWallet(h),{solPrice:W,isSolPriceLoading:U}=e.useGetSolPrice({enabled:g}),D=a.useMemo((()=>{if(!A)return;let t=A.spender,n=e.getNativeCurrencyFromLamports(A.fee),a=e.getNativeCurrencyFromLamports(b.value,3,!0),i=A.instructions.filter((e=>["sol-transfer","spl-transfer","raydium-swap-base-input","raydium-swap-base-output","jupiter-swap-shared-accounts-route","jupiter-swap-exact-out-route"].includes(e.type))),s=i.at(0);if(!s||i.length>1)return{fee:n,spender:t,balance:a};if("sol-transfer"===s.type)return{fee:n,spender:t,balance:a,total:e.getNativeCurrencyFromLamports(s.value)};if("spl-transfer"===s.type)return{fee:n,spender:t,balance:a,total:`${r.formatTokenAmount({amount:s.value,decimals:s.token.decimals})} ${s.token.symbol}`};if("raydium-swap-base-input"===s.type&&s.tokenIn&&s.tokenOut){return{fee:n,spender:t,balance:a,swap:`${`${r.formatTokenAmount({amount:s.amountIn,decimals:s.tokenIn.decimals})} ${s.tokenIn.symbol}`} → ${`${r.formatTokenAmount({amount:s.minimumAmountOut,decimals:s.tokenOut.decimals})} ${s.tokenOut.symbol}`}`}}if("raydium-swap-base-output"===s.type&&s.tokenIn&&s.tokenOut){return{fee:n,spender:t,balance:a,swap:`${`${r.formatTokenAmount({amount:s.maxAmountIn,decimals:s.tokenIn.decimals})} ${s.tokenIn.symbol}`} → ${`${r.formatTokenAmount({amount:s.amountOut,decimals:s.tokenOut.decimals})} ${s.tokenOut.symbol}`}`}}if("jupiter-swap-shared-accounts-route"===s.type&&s.tokenIn&&s.tokenOut){return{fee:n,spender:t,balance:a,swap:`${`${r.formatTokenAmount({amount:s.inAmount,decimals:s.tokenIn.decimals})} ${s.tokenIn.symbol}`} → ${`${r.formatTokenAmount({amount:s.quotedOutAmount,decimals:s.tokenOut.decimals})} ${s.tokenOut.symbol}`}`}}if("jupiter-swap-exact-out-route"===s.type&&s.tokenIn&&s.tokenOut){return{fee:n,spender:t,balance:a,swap:`${`${r.formatTokenAmount({amount:s.quotedInAmount,decimals:s.tokenIn.decimals})} ${s.tokenIn.symbol}`} → ${`${r.formatTokenAmount({amount:s.outAmount,decimals:s.tokenOut.decimals})} ${s.tokenOut.symbol}`}`}}return{fee:n,spender:t,balance:a}}),[A,_?.address,b]),L=a.useMemo((()=>{let t;if(!A||!g||!W||U)return;function n(...t){return e.getFormattedUsdFromLamports(t.reduce(((e,t)=>e+t),0n),W??0)}_?.address===A.spender&&(t=n(A.fee));let a=n(b.value),i=A.instructions.filter((e=>"sol-transfer"===e.type||"spl-transfer"===e.type)).at(0);return!i||A.instructions.length>1?{fee:t,balance:a}:"sol-transfer"===i.type?{fee:t,balance:a,total:n(i.value,_?.address===A.spender?A.fee:0n)}:"spl-transfer"===i.type?{fee:t,balance:a,total:`${r.formatTokenAmount({amount:i.value,decimals:i.token.decimals})} ${i.token.symbol}`}:{fee:t,balance:a}}),[A,g,W,U,_?.address,b]);if(a.useEffect((()=>{!async function(){if(w&&d)try{I(void 0);let e=await me({tx:w,solanaClient:y,privyClient:d,checkFunds:!M});S(e)}catch(e){console.error("Failed to prepare transaction",e),I(e)}}()}),[w,y,d,M]),a.useEffect((()=>{(async function(){if(!_)return;C({value:b.value,isLoading:!0});let{value:e}=await y.rpc.getBalance(_.address,{commitment:"confirmed"}).send();C({value:e??0n,isLoading:!1})})().catch(console.error)}),[A]),!w||!n?.standardSignAndSendTransaction||!_){let a=Error("Invalid transaction request");/*#__PURE__*/return t.jsx(e.ErrorScreenView,{error:a,allowlistConfig:f.allowlistConfig,onRetry:()=>{n?.standardSignAndSendTransaction?.onFailure(a),u({shouldCallAuthOnSuccess:!1})}})}let R=()=>{if(!E)return x.signature||x.signedTransaction?n?.standardSignAndSendTransaction?.onSuccess({signature:x.signature,signedTransaction:x.signedTransaction}):n?.standardSignAndSendTransaction?.onFailure(k??T??Error("User exited the modal before submitting the transaction")),u({shouldCallAuthOnSuccess:!1})};i.current=R;let B=n.standardSignAndSendTransaction?.uiOptions?.transactionInfo?.contractInfo?.imgUrl?/*#__PURE__*/t.jsx("img",{src:n.standardSignAndSendTransaction.uiOptions.transactionInfo.contractInfo.imgUrl,alt:n.standardSignAndSendTransaction.uiOptions.transactionInfo.contractInfo.imgAltText}):null,N=!!(n.funding&&n.funding.supportedOptions.length>0),$=!A?.hasFunds&&N;if(x.signature||x.signedTransaction){let e=A?.instructions.filter((e=>"sol-transfer"===e.type||"spl-transfer"===e.type)),a=1===e?.length?e?.at(0):void 0;/*#__PURE__*/return t.jsx(re,{fees:x.fees??0n,onClose:R,transactionInfo:n.standardSignAndSendTransaction?.uiOptions.transactionInfo,solPrice:W,receiptHeader:n.standardSignAndSendTransaction?.uiOptions.successHeader,receiptDescription:n.standardSignAndSendTransaction?.uiOptions.successDescription,chain:y.chain,signOnly:M,instruction:"sol-transfer"===a?.type?{to:a.toAccount,amount:a.value}:{to:a?.toAccount||a?.toAta,total:D?.total}})}return k?/*#__PURE__*/t.jsx(e.TransactionErrorView,{transactionError:k,chainId:y.chain,onClose:R,chainType:"solana",onRetry:async()=>{F(void 0);let{value:e}=await y.rpc.getLatestBlockhash().send();v(function(e,t){return p.pipe(p.getCompiledTransactionMessageDecoder().decode(se(e)),(e=>p.decompileTransactionMessage(e)),(e=>p.setTransactionMessageLifetimeUsingBlockhash(t,e)),(e=>p.compileTransaction(e)),(e=>new Uint8Array(p.getTransactionEncoder().encode(e))))}(w,e))}}):/*#__PURE__*/t.jsx(e.SendSolanaTransactionScreenView,{img:B,title:n.standardSignAndSendTransaction?.uiOptions?.transactionInfo?.title||"Confirm transaction",subtitle:n.standardSignAndSendTransaction?.uiOptions?.description||`${f.name} wants your permission to approve the following transaction.`,cta:$?"Add funds":n.standardSignAndSendTransaction?.uiOptions?.buttonText||"Approve",instructions:A?.instructions??[],network:"solana:mainnet"==y.chain?"Solana":y.chain.replace("solana:",""),blockExplorerUrl:y.blockExplorerUrl,total:g?L?.total:D?.total,fee:g?L?.fee:D?.fee,balance:g?L?.balance:D?.balance,swap:D?.swap,transactingWalletAddress:_.address,disabled:!A?.hasFunds&&!N,isSubmitting:E,isPreparing:!A||b.isLoading,isTokenPriceLoading:g&&U,isMissingFunds:!A?.hasFunds,submitError:k??void 0,parseError:T,onClick:$?async()=>{if(_){if(!N)throw Error("Funding wallet is not enabled");l({...n,funding:{...n.funding,methodScreen:e.FundingMethodSelectionScreen},solanaFundingData:n?.solanaFundingData}),c(e.FundingMethodSelectionScreen)}}:async()=>{try{if(P(!0),E||!_||!m||!h||!j)return;let e=await n.standardSignAndSendTransaction.onConfirm(w);if("signature"in e){let t=await async function({solanaClient:e,signature:t}){let n=p.getBase58Decoder().decode(t),a=await e.rpc.getTransaction(n,{maxSupportedTransactionVersion:0,commitment:"confirmed",encoding:"base64"}).send().catch((()=>null));return a?{fee:a.meta?.fee??0n}:null}({solanaClient:y,signature:e.signature});return void O({...e,fees:t?.fee})}O(e)}catch(e){console.warn({transaction:w,error:e}),F(e)}finally{P(!1)}},onClose:R})}};function Ie(e,t,n){let a=structuredClone(p.getTransactionDecoder().decode(e)),r=p.address(t);return r in a.signatures&&(a.signatures[r]=n),new Uint8Array(p.getTransactionEncoder().encode(a))}function be(){let{isHeadlessSigning:t,walletProxy:n,initializeWalletProxy:a,recoverEmbeddedWallet:c,openModal:d,privy:u,client:p}=s.usePrivyInternal(),{user:g}=l.usePrivy(),{setModalData:f}=e.usePrivyModal(),{signWithUserSigner:h}=m.useSignWithUserSigner();return{signMessage:({message:s,address:l,options:m})=>new Promise((async(y,w)=>{let v=o.getPrivyWalletWithAddress(g,l);if("privy"!==v?.walletClientType)return void w(new i.PrivyClientError("Wallet is not a Privy wallet",void 0,i.PrivyErrorCode.EMBEDDED_WALLET_NOT_FOUND));let{entropyId:A,entropyIdVerifier:S}=e.getEntropyDetailsForUser(g,v),T=o.getIsUnifiedWallet(v),I=le(s).toString("base64");if(I.length<1)return void w(new i.PrivyClientError("Message must be a non-empty string",void 0,i.PrivyErrorCode.INVALID_MESSAGE));let b=async()=>{let e;if(!g)throw Error("User must be authenticated before signing with a Privy wallet");let t=await p.getAccessToken();if(!t)throw Error("User must be authenticated to use their embedded wallet.");let i=n??await a(15e3);if(!i)throw Error("Failed to initialize embedded wallet proxy.");if(!await c({address:v.address}))throw Error("Unable to connect to wallet");if(T){let t=await r.rpc(u,h,{chain_type:"solana",method:"signMessage",params:{message:I,encoding:"base64"},wallet_id:v.id});if(!t.data||!("signature"in t.data))throw Error("Failed to sign message");e=t.data.signature}else{let{response:n}=await i.rpc({accessToken:t,entropyId:A,entropyIdVerifier:S,chainType:"solana",hdWalletIndex:v.walletIndex??0,requesterAppId:m?.uiOptions?.requesterAppId,request:{method:"signMessage",params:{message:I}}});e=n.data.signature}return e};if(t({showWalletUIs:m?.uiOptions?.showWalletUIs}))try{let e=await b(),t=new Uint8Array(le(e,"base64"));y({signature:t})}catch(e){w(e)}else f({signMessage:{method:"solana_signMessage",data:I,confirmAndSign:b,onSuccess:e=>{y({signature:new Uint8Array(le(e,"base64"))})},onFailure:e=>{w(e)},uiOptions:m?.uiOptions??{}},connectWallet:{recoveryMethod:v.recoveryMethod,connectingWalletAddress:v.address,entropyId:A,entropyIdVerifier:S,isUnifiedWallet:T,onCompleteNavigateTo:e.SignRequestScreen,onFailure:e=>{w(new i.PrivyClientError("Failed to connect to wallet",e,i.PrivyErrorCode.UNKNOWN_CONNECT_WALLET_ERROR))}}}),d(e.EmbeddedWalletConnectingScreen)}))}}function Ce(){let{isHeadlessSigning:t,openModal:n}=s.usePrivyInternal(),{setModalData:a}=e.usePrivyModal(),{signMessage:r}=be(),{user:c}=l.usePrivy();return{signTransaction:async({transaction:s,options:l,chain:d="solana:mainnet",address:u})=>{async function p(e){let{signature:t}=await r({message:se(e),address:u,options:{...l,uiOptions:{...l?.uiOptions,showWalletUIs:!1}}});return{signedTransaction:Ie(e,u,t)}}return t({showWalletUIs:l?.uiOptions?.showWalletUIs})?p(s):new Promise((async(t,r)=>{let m=o.getPrivyWalletWithAddress(c,u);if("privy"!==m?.walletClientType)return void r(new i.PrivyClientError("Wallet is not a Privy wallet",void 0,i.PrivyErrorCode.EMBEDDED_WALLET_NOT_FOUND));let{entropyId:g,entropyIdVerifier:f}=e.getEntropyDetailsForUser(c,m),h=o.getIsUnifiedWallet(m);function y(e){return t=>{t instanceof i.PrivyClientError?r(t):r(new i.PrivyClientError("Failed to connect to wallet",t,e))}}let w={account:m,transaction:s,chain:d,signOnly:!0,uiOptions:l?.uiOptions||{},onConfirm:p,onSuccess:t,onFailure:y(i.PrivyErrorCode.TRANSACTION_FAILURE)};a({connectWallet:{recoveryMethod:m.recoveryMethod,connectingWalletAddress:m.address,entropyId:g,entropyIdVerifier:f,isUnifiedWallet:h,onCompleteNavigateTo:Te,onFailure:y(i.PrivyErrorCode.UNKNOWN_CONNECT_WALLET_ERROR)},standardSignAndSendTransaction:w}),n(e.EmbeddedWalletConnectingScreen)}))}}}let Ee=new b({signTransaction:s.notImplementedWithMessage("signTransaction was not injected"),signAndSendTransaction:s.notImplementedWithMessage("signAndSendTransaction was not injected"),signMessage:s.notImplementedWithMessage("signMessage was not injected")}),Pe=new class{get version(){return W(this,R)[R]}get name(){return W(this,B)[B]}get icon(){return W(this,N)[N]}get chains(){return A.slice()}get features(){return{"standard:connect":{version:"1.0.0",connect:W(this,H)[H]},"standard:disconnect":{version:"1.0.0",disconnect:W(this,Q)[Q]},"standard:events":{version:"1.0.0",on:W(this,G)[G]},"solana:signAndSendTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signAndSendTransaction:W(this,z)[z]},"solana:signTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signTransaction:W(this,X)[X]},"solana:signMessage":{version:"1.0.0",signMessage:W(this,Z)[Z]},"privy:":{privy:{signMessage:W(this,$)[$].signMessage,signTransaction:W(this,$)[$].signTransaction,signAndSendTransaction:W(this,$)[$].signAndSendTransaction}}}}get accounts(){return W(this,q)[q].slice()}get isPrivyWallet(){return W(this,V)[V]}constructor({name:e,icon:t,version:n,injection:a,wallets:r}){Object.defineProperty(this,J,{value:ee}),Object.defineProperty(this,K,{value:te}),Object.defineProperty(this,L,{writable:!0,value:void 0}),Object.defineProperty(this,R,{writable:!0,value:void 0}),Object.defineProperty(this,B,{writable:!0,value:void 0}),Object.defineProperty(this,N,{writable:!0,value:void 0}),Object.defineProperty(this,$,{writable:!0,value:void 0}),Object.defineProperty(this,V,{writable:!0,value:void 0}),Object.defineProperty(this,q,{writable:!0,value:void 0}),Object.defineProperty(this,G,{writable:!0,value:void 0}),Object.defineProperty(this,Y,{writable:!0,value:void 0}),Object.defineProperty(this,H,{writable:!0,value:void 0}),Object.defineProperty(this,Q,{writable:!0,value:void 0}),Object.defineProperty(this,Z,{writable:!0,value:void 0}),Object.defineProperty(this,z,{writable:!0,value:void 0}),Object.defineProperty(this,X,{writable:!0,value:void 0}),W(this,L)[L]={},W(this,G)[G]=(e,t)=>(W(this,L)[L][e]?.push(t)||(W(this,L)[L][e]=[t]),()=>W(this,K)[K](e,t)),W(this,Y)[Y]=e=>{null!=e&&(W(this,q)[q]=e.map((({address:e})=>new j({address:e,publicKey:d.base58.decode(e)})))),W(this,J)[J]("change",{accounts:this.accounts})},W(this,H)[H]=async()=>(W(this,J)[J]("change",{accounts:this.accounts}),{accounts:this.accounts}),W(this,Q)[Q]=async()=>{W(this,J)[J]("change",{accounts:this.accounts})},W(this,Z)[Z]=async(...e)=>{let t=[];for(let{account:n,...a}of e){let{signature:e}=await W(this,$)[$].signMessage({...a,address:n.address});t.push({signedMessage:a.message,signature:e})}return t},W(this,z)[z]=async(...e)=>{let t=[];for(let{transaction:n,account:a,options:r,chain:i}of e){let{signature:e}=await W(this,$)[$].signAndSendTransaction({transaction:n,address:a.address,chain:i||"solana:mainnet",options:r});t.push({signature:e})}return t},W(this,X)[X]=async(...e)=>{let t=[];for(let{transaction:n,account:a,options:r,chain:i}of e){let{signedTransaction:e}=await W(this,$)[$].signTransaction({transaction:n,address:a.address,chain:i||"solana:mainnet",options:r});t.push({signedTransaction:e})}return t},W(this,B)[B]=e,W(this,N)[N]=t,W(this,R)[R]=n,W(this,$)[$]=a,W(this,q)[q]=[],W(this,V)[V]=!0,a.on("accountChanged",W(this,Y)[Y],this),W(this,Y)[Y](r)}}({name:"Privy",version:"1.0.0",icon:"data:image/png;base64,AAABAAEAFBQAAAAAIABlAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAUAAAAFAgGAAAAjYkdDQAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAQVJREFUeJxiYMANZIC4E4ivAPFPIP4FxDeAuB+IlfDowwBMQFwJxF+B+D8O/AOI66Bq8QJGIF6ExyB0vAqImfEZmEeCYTDcgMswPiB+T4aB34FYApuBsWQYBsP52AycToGBK7EZuJECAw9jM3AVBQbuwWZgIwUGTsZmoDkFBnpiMxAEjpJh2FV8iVsbiD+TYBgoDVrgMgwGnID4HRGGgTKBGyHDYEAaiBdCSxh0g/5AU4Q8sYYhAzEgjoGmABBOgFo2eACowFABYn0oVgViAVINkQTiZUD8DIj/ATF6GILEXgLxCiCWIsZAbiAuBeKtQHwHiEHJ6C8UfwHie0C8E4jLoWpRAAAAAP//rcbhsQAAAAZJREFUAwBYFs3VKJ0cuQAAAABJRU5ErkJggg==",wallets:[],injection:Ee});function xe(){let{ready:t}=e.useWallets(),{user:n}=l.usePrivy(),{signMessage:r}=be(),{signTransaction:c}=Ce(),{signAndSendTransaction:d}=function(){let t=e.useAppConfig(),{isHeadlessSigning:n,openModal:a}=s.usePrivyInternal(),{setModalData:r}=e.usePrivyModal(),{signTransaction:c}=Ce(),d=Se(),{user:u}=l.usePrivy();return{signAndSendTransaction:async({transaction:s,address:p,chain:m="solana:mainnet",options:g})=>{async function f(e){let{signedTransaction:t}=await c({transaction:e,address:p,chain:m,options:{...g,uiOptions:{...g?.uiOptions,showWalletUIs:!1}}}),{signature:n}=await d(m).sendAndConfirmTransaction(t);return{signature:n}}return n({showWalletUIs:g?.uiOptions?.showWalletUIs})?f(s):new Promise((async(n,c)=>{let d,h,y=o.getPrivyWalletWithAddress(u,p);if("privy"!==y?.walletClientType)return void c(new i.PrivyClientError("Wallet is not a Privy wallet",void 0,i.PrivyErrorCode.EMBEDDED_WALLET_NOT_FOUND));let{entropyId:w,entropyIdVerifier:v}=e.getEntropyDetailsForUser(u,y),A=o.getIsUnifiedWallet(y);function S(e){return t=>{t instanceof i.PrivyClientError?c(t):c(new i.PrivyClientError("Failed to connect to wallet",t,e))}}let T={account:y,transaction:s,chain:m,signOnly:!1,uiOptions:g?.uiOptions||{},onConfirm:f,onSuccess:n,onFailure:S(i.PrivyErrorCode.TRANSACTION_FAILURE)},I={recoveryMethod:y.recoveryMethod,connectingWalletAddress:y.address,entropyId:w,entropyIdVerifier:v,isUnifiedWallet:A,onCompleteNavigateTo:Te,onFailure:S(i.PrivyErrorCode.UNKNOWN_CONNECT_WALLET_ERROR)};t.fundingConfig&&(d=l.prepareSolanaFundingModalData({address:p,appConfig:t,methodScreen:e.FundingMethodSelectionScreen,fundWalletConfig:{...g,asset:"native-currency",chain:m},externalSolanaFundingScreen:We}),h={amount:t.fundingConfig.defaultRecommendedAmount,asset:"SOL",chain:m,destinationAddress:p,afterSuccessScreen:Te,sourceWalletData:void 0}),r({connectWallet:I,standardSignAndSendTransaction:T,funding:d,solanaFundingData:h}),a(e.EmbeddedWalletConnectingScreen)}))}}}(),u=a.useMemo((()=>{let e=[...o.getPrivySolanaHDWallets(n).sort(((e,t)=>(e.walletIndex??0)-(t.walletIndex??0)))],t=o.getImportedPrivySolanaWallet(n);return t?[...e,t]:e}),[n]),p=a.useMemo((()=>({signMessage:async({message:e,address:t,options:n})=>await r({message:e,address:t,options:n}),signTransaction:async({transaction:e,address:t,chain:n,options:a})=>await c({transaction:e,address:t,chain:n,options:a}),async signAndSendTransaction({transaction:e,address:t,chain:n,options:a}){let{signature:r}=await d({transaction:e,address:t,chain:n,options:a});return{signature:r}}})),[r,c,d]);return a.useEffect((()=>{Ee?.setImplementation(p)}),[p]),a.useEffect((()=>{var e;!t||(e=Pe.accounts).length===u.length&&e.every(((e,t)=>e.address===u[t]?.address))||Ee?.emit("accountChanged",u)}),[t,u]),{ready:t,wallet:Pe}}function Oe(){let{ready:e,wallets:t}=function(){let{client:e}=s.usePrivyInternal(),{ready:t,wallet:n}=xe(),[r,i]=a.useState([]),[o,l]=a.useState([]);return a.useEffect((()=>{let e=[n,...r.filter((e=>"solana"===e.chainType&&!!e.wallet.features)).map((e=>e.wallet))];l(e);let t=e.map((t=>t.features["standard:events"]?.on("change",(()=>{l([...e])}))));return()=>{t.forEach((e=>e?.()))}}),[r]),a.useEffect((()=>{if(!t)return;i(e.connectors?.walletConnectors.filter((e=>"solana"===e.chainType))??[]);let n=()=>{i(e.connectors?.walletConnectors.filter((e=>"solana"===e.chainType))??[])};return e.connectors?.on("connectorInitialized",n),()=>{e.connectors?.off("connectorInitialized",n)}}),[t,e.connectors]),{ready:t,wallets:o}}();return{ready:e,wallets:a.useMemo((()=>t.flatMap((e=>e.accounts.map((t=>new r.ConnectedStandardSolanaWallet({wallet:e,account:t})))))),[t])}}function ke(e){return p.getBase58Decoder().decode(e)}function Fe(e){return BigInt(Math.floor(1e9*parseFloat(e)))}function _e(e){return+Me.format(parseFloat(e.toString())/1e9)}let Me=Intl.NumberFormat(void 0,{maximumFractionDigits:8});async function je({tx:t,solanaClient:n,amount:a,asset:r,tokenPrice:i}){if(!t)return null;if("SOL"===r&&i){let r=Fe(a),s=e.getFormattedUsdFromLamports(r,i),o=await ue({solanaClient:n,tx:t});return{amountInUsd:s,feeInUsd:i?e.getFormattedUsdFromLamports(o,i):void 0,totalInUsd:e.getFormattedUsdFromLamports(r+o,i)}}if("USDC"===r&&i){let r="$"+a,s=await ue({solanaClient:n,tx:t}),o=function(t,n){let a=parseFloat(t.toString())/e.LAMPORTS_PER_SOL*n;return a<.01?0:a}(s,i);return{amountInUsd:r,feeInUsd:e.getFormattedUsdFromLamports(s,i),totalInUsd:"$"+(parseFloat(a)+o).toFixed(2)}}if("SOL"===r){let e=Fe(a),r=await ue({solanaClient:n,tx:t});return{amountInSol:a+" SOL",feeInSol:_e(r)+" SOL",totalInSol:_e(e+r)+" SOL"}}return{amountInUsdc:a+" USDC",feeInSol:_e(await ue({solanaClient:n,tx:t}))+" SOL"}}const We={component:function(){let n=e.useAppConfig(),{closePrivyModal:o,createAnalyticsEvent:l}=s.usePrivyInternal(),{data:c,setModalData:d,navigate:u}=e.usePrivyModal(),{wallets:m}=Oe(),[h,w]=a.useState("preparing"),[A,S]=a.useState(),[T,I]=a.useState(),[b,C]=a.useState();if(!c?.solanaFundingData)throw Error("Funding config is missing");if(!c.solanaFundingData.sourceWalletData)throw Error("Funding config is missing source wallet data");let{amount:E,asset:P,chain:x,sourceWalletData:O,destinationAddress:k,afterSuccessScreen:F}=c.solanaFundingData,_=m.find((t=>t.address===O.address&&e.toSolanaWalletClientType(O.walletClientType)===e.toSolanaWalletClientType(t.standardWallet.name))),M=Se()(x),{tokenPrice:j,isTokenPriceLoading:W}=e.useGetTokenPrice("solana");return a.useEffect((()=>{if("preparing"!==h||W||!_)return;let t="SOL"===P?Fe(E):function(e){return BigInt(Math.floor(1e6*parseFloat(e)))}(E);I({amount:("SOL"===P&&j?e.getFormattedUsdFromLamports(t,j):E)??E}),("SOL"===P?async function({solanaClient:e,source:t,destination:n,amountInLamports:a}){let{value:r}=await e.rpc.getLatestBlockhash().send(),i={address:t},s=p.pipe(p.createTransactionMessage({version:0}),(e=>p.setTransactionMessageFeePayerSigner(i,e)),(e=>p.setTransactionMessageLifetimeUsingBlockhash(r,e)),(e=>p.appendTransactionMessageInstruction(g.getTransferSolInstruction({amount:a,source:i,destination:n}),e)),(e=>p.compileTransaction(e)));return new Uint8Array(p.getTransactionEncoder().encode(s))}({solanaClient:M,source:_.address,destination:k,amountInLamports:t}):async function({solanaClient:t,source:n,destination:a,amountInBaseUnits:r}){let i=e.getUsdcMintAddress(t.chain),{value:s}=await t.rpc.getLatestBlockhash().send(),o={address:n},[l]=await f.findAssociatedTokenPda({mint:i,owner:n,tokenProgram:e.TOKEN_PROGRAM_ID}),[c]=await f.findAssociatedTokenPda({mint:i,owner:a,tokenProgram:e.TOKEN_PROGRAM_ID}),[d,u]=await Promise.all([t.rpc.getAccountInfo(l,{commitment:"confirmed",encoding:"jsonParsed"}).send().catch((()=>null)),t.rpc.getAccountInfo(c,{commitment:"confirmed",encoding:"jsonParsed"}).send().catch((()=>null))]);if(!d?.value)throw Error(`Source token account does not exist for address: ${n}`);let m=f.getCreateAssociatedTokenIdempotentInstruction({payer:o,ata:c,owner:a,mint:i}),g=p.pipe(p.createTransactionMessage({version:0}),(e=>p.setTransactionMessageFeePayerSigner(o,e)),(e=>p.setTransactionMessageLifetimeUsingBlockhash(s,e)),(e=>u?.value?e:p.appendTransactionMessageInstruction(m,e)),(e=>p.appendTransactionMessageInstruction(f.getTransferInstruction({source:l,destination:c,authority:o,amount:r}),e)),(e=>p.compileTransaction(e)));return new Uint8Array(p.getTransactionEncoder().encode(g))}({solanaClient:M,source:_.address,destination:k,amountInBaseUnits:t})).then(S).catch((e=>{w("error"),C(e)}))}),[h,E,P,x,_,k,W,j]),a.useEffect((()=>{"preparing"===h&&A&&je({tx:A,solanaClient:M,amount:E,asset:P,tokenPrice:j}).then((e=>{w("loaded"),I({amount:e?.amountInUsd??e?.amountInUsdc??e?.amountInSol??E,fee:e?.feeInUsd??e?.feeInSol,total:e?.totalInUsd??e?.totalInSol})})).catch((e=>{w("error"),C(e)}))}),[A,E,P,h,j]),a.useEffect((()=>{"error"===h&&b&&(d({errorModalData:{error:b,previousScreen:We},solanaFundingData:c.solanaFundingData}),u(e.ErrorScreen,!1))}),[h,u]),a.useEffect((()=>{if("success"!==h)return;let t=setTimeout(F?()=>u(F):o,e.DEFAULT_SUCCESS_SCREEN_EXTRA_LONG_DURATION_MS);return()=>clearTimeout(t)}),[h]),"success"===h?/*#__PURE__*/t.jsxs(t.Fragment,{children:[/*#__PURE__*/t.jsx(e.i,{}),/*#__PURE__*/t.jsx(e.RefactorSpacerTop,{}),/*#__PURE__*/t.jsxs(e.CenteredItemWithGap,{children:[/*#__PURE__*/t.jsx(y.default,{color:"var(--privy-color-success)",width:"64px",height:"64px"}),/*#__PURE__*/t.jsx(e.CenteredScreenHeader,{title:"Success!",description:`You’ve successfully added ${E} ${P} to your ${n.name} wallet. It may take a minute before the funds are available to use.`})]}),/*#__PURE__*/t.jsx(e.RefactorSpacerBottom,{}),/*#__PURE__*/t.jsx(e.BlobbyFooter,{})]}):"preparing"===h||"loaded"===h||"sending"===h?/*#__PURE__*/t.jsxs(t.Fragment,{children:[/*#__PURE__*/t.jsx(e.i,{}),/*#__PURE__*/t.jsx(e.CenteredItem,{style:{marginTop:"16px"},children:/*#__PURE__*/t.jsx(e.InjectedWalletIcon,{icon:_?.standardWallet.icon,name:_?.standardWallet.name})}),/*#__PURE__*/t.jsx(e.CenteredScreenHeader,{style:{marginTop:"8px",marginBottom:"12px"},title:"sending"===h&&_?`Confirming with ${_.standardWallet.name}`:"Confirm transaction"}),/*#__PURE__*/t.jsx(v,{rows:[{label:"Source",value:r.formatWalletAddress(O.address)},{label:"Destination",value:r.formatWalletAddress(k)},{label:"Network",value:e.getChainName(x)},{label:"Amount",value:T?.amount,isLoading:"preparing"===h},{label:"Estimated fee",value:T?.fee,isLoading:"preparing"===h},{label:"Total",value:T?.total,isLoading:"preparing"===h}]}),/*#__PURE__*/t.jsx(e.PrimaryButton,{style:{marginTop:"1rem"},loading:"preparing"===h||"sending"===h,onClick:function(){"loaded"===h&&A&&_&&(w("sending"),async function({transaction:e,chain:t,sourceWallet:n,solanaClient:a}){let{hasFunds:s}=await pe({solanaClient:a,tx:e});if(!s)throw new i.PrivyClientError(`Wallet ${r.formatWalletAddress(n.address)} does not have enough funds.`,void 0,i.PrivyErrorCode.INSUFFICIENT_BALANCE);let o=ke((await n.signAndSendTransaction({transaction:e,chain:t}).catch((e=>{throw new i.PrivyClientError("Transaction was rejected by the user",e,i.PrivyErrorCode.TRANSACTION_FAILURE)}))).signature);return await ve({rpcSubscriptions:a.rpcSubscriptions,signature:o,timeout:2e4}),o}({solanaClient:M,transaction:A,chain:x,sourceWallet:_}).then((t=>{w("success"),l({eventName:e.ON_RAMP_COMPLETE_ANALYTICS_EVENT,payload:{provider:"external",status:"success",txHash:t,address:_.address,value:E,chainType:"solana",clusterName:x,token:P,destinationAddress:k,destinationValue:E,destinationChainType:"solana",destinationClusterName:x,destinationToken:P}})})).catch((e=>{w("error"),C(e)})))},children:"Confirm"}),/*#__PURE__*/t.jsx(e.BlobbyFooter,{})]}):
/*#__PURE__*/t.jsxs(t.Fragment,{children:[/*#__PURE__*/t.jsx(e.i,{}),/*#__PURE__*/t.jsx(e.NeutralSpinner,{}),/*#__PURE__*/t.jsx("div",{style:{marginTop:"1rem"}}),/*#__PURE__*/t.jsx(e.BlobbyFooter,{})]})}};exports.fetchTransactionEstimatedFees=ue,exports.getAddressFromBuffer=ke,exports.getSolanaRpcClient=Ae,exports.simulateTransaction=pe,exports.useExportWallet=function(){let{user:t,getAccessToken:n}=o.usePrivyContext(),{walletProxy:r,openModal:c,client:d}=s.usePrivyInternal(),{setModalData:u}=e.usePrivyModal(),p=e.useAppConfig();return a.useMemo((()=>({exportWallet:a=>new Promise((async(s,m)=>{if(!t)return void m(new i.PrivyClientError("User must be authenticated before exporting their Privy wallet"));let g=a?.address?o.getPrivyWalletWithAddress(t,a.address):o.getPrivySolanaWallet(t);if(!g)return void m(new i.PrivyClientError("User must have an embedded wallet."));if(!l.isFirstClassChainWallet(g))return void m(Error(`Export is not supported for ${g.chainType} wallets`));let f=o.getIsUnifiedWallet(g),{entropyId:h,entropyIdVerifier:y}=e.getEntropyDetailsForUser(t,g);await n()?r?(u({connectWallet:{recoveryMethod:g.recoveryMethod,connectingWalletAddress:g.address,isUnifiedWallet:f,entropyId:h,entropyIdVerifier:y,onCompleteNavigateTo:e.EmbeddedWalletKeyExportScreen,onFailure:m,shouldForceMFA:!0},keyExport:{appId:p.id,appClientId:p.appClientId,origin:d.apiUrl,address:g.address,entropyId:h,entropyIdVerifier:y,hdWalletIndex:g.walletIndex,chainType:g.chainType,walletId:g.id,isUnifiedWallet:f,imported:g.imported,onSuccess:s,onFailure:m}}),c(e.EmbeddedWalletConnectingScreen)):m(new i.PrivyClientError("Wallet not ready for export")):m(new i.PrivyClientError("Must have valid access token."))}))})),[t,n,r,c,d,u,p])},exports.useFundWallet=function(){let t=e.useAppConfig(),{openModal:n}=s.usePrivyInternal(),{setModalData:a}=e.usePrivyModal();return{fundWallet:async({address:r,options:i})=>{let s=i?.amount||t.fundingConfig?.defaultRecommendedAmount||"1",o=i?.asset||t.fundingConfig?.defaultRecommendedCurrency.asset||"native-currency",c=i?.chain||"solana:mainnet";a({funding:l.prepareSolanaFundingModalData({address:r,appConfig:t,methodScreen:e.FundingMethodSelectionScreen,fundWalletConfig:{...i,amount:s,asset:o,chain:c},externalSolanaFundingScreen:We}),solanaFundingData:{amount:s,asset:"native-currency"===o?"SOL":"USDC",chain:c,destinationAddress:r,sourceWalletData:void 0}}),n(e.FundingMethodSelectionScreen)}}},exports.useWallets=Oe;