UNPKG

@privy-io/react-auth

Version:

React client for the Privy Auth API

2 lines (1 loc) 8.6 kB
import{jsx as t,jsxs as e,Fragment as a}from"react/jsx-runtime";import n from"@heroicons/react/24/outline/CheckCircleIcon";import{useState as o,useEffect as r}from"react";import{formatWalletAddress as s}from"@privy-io/js-sdk-core";import{P as i}from"./Button-B8mqatRx.mjs";import{b as l,c as m,R as c,e as d}from"./Layouts-Bmf8DxNP.mjs";import{B as u}from"./ModalHeader-BLGC-7ev.mjs";import{C as p}from"./ScreenHeader-Biz1wq02.mjs";import{t as f}from"./FundWalletMethodHeader-I8a6Y30s.mjs";import{I as g}from"./InjectedWalletIcon-DLcYOGDj.mjs";import{N as h}from"./index-CJMgUOnw.mjs";import{L as I,V as w}from"./Value-B4M62ove.mjs";import{a as v,R as S}from"./Row-CG0lSY5Z.mjs";import{u as j,t as C}from"./context-Bycd1SKV.mjs";import{u as y,a as L,b as F}from"./internal-context-e-Eni5bG.mjs";import{a as x}from"./get-is-unified-wallet-DvKS5IUO.mjs";import{u as k,g as U}from"./useWallets-NhjmJtNE.mjs";import{u as T}from"./useGetTokenPrice-0Bn0Y88A.mjs";import{O as b}from"./analytics-mkkvFRju.mjs";import{getTransferSolInstruction as A}from"@solana-program/system";import{pipe as W,createTransactionMessage as P,setTransactionMessageFeePayerSigner as D,setTransactionMessageLifetimeUsingBlockhash as N,appendTransactionMessageInstruction as M,compileTransaction as O,getTransactionEncoder as B}from"@solana/kit";import{findAssociatedTokenPda as E,getCreateAssociatedTokenIdempotentInstruction as $,getTransferInstruction as R}from"@solana-program/token";import{T as H,L as G,g as V}from"./getFormattedUsdFromLamports-B6EqSEho.mjs";import{g as Q}from"./getUsdcMintAddress-DFI1hv05.mjs";import{u as _,f as q,s as z,w as X}from"./useSolanaRpcClient-DW9Xaoo_.mjs";import{g as Y}from"./getChainName-DjpPdUSc.mjs";import{t as J}from"./prepareFundingModalData-CIgFwA7s.mjs";import"styled-components";import"./useActiveWallet-Bsy5GTCV.mjs";import"zustand";import"react-device-detect";import"./events-context-CI0iqAXA.mjs";import"viem";import"viem/utils";import"./getPublicClient-A9RSftUZ.mjs";import"./useWallets-D0lpBS44.mjs";import"@heroicons/react/24/outline/ArrowLeftIcon";import"@heroicons/react/24/outline/ArrowRightIcon";import"@heroicons/react/24/outline/QuestionMarkCircleIcon";import"@heroicons/react/24/outline/XMarkIcon";import"@heroicons/react/24/outline/WalletIcon";import"./LoadingSkeleton-CHdaq3pb.mjs";import"tinycolor2";import"ofetch";import"./usePrivy-BaiIHGte.mjs";import"eventemitter3";import"@scure/base";import"./use-sign-with-user-signer-eEm9Olt_.mjs";import"./useGetSolPrice-Cfm8o9C5.mjs";function K({rows:a}){/*#__PURE__*/return t(v,{children:a.filter((t=>!!t)).map(((a,n)=>null!=a.value||a.isLoading?/*#__PURE__*/e(S,{children:[/*#__PURE__*/t(I,{children:a.label}),/*#__PURE__*/t(w,{$isLoading:a.isLoading,children:a.value})]},n):null))})}function Z(t){return BigInt(Math.floor(1e9*parseFloat(t)))}function tt(t){return+et.format(parseFloat(t.toString())/1e9)}let et=Intl.NumberFormat(void 0,{maximumFractionDigits:8});async function at({tx:t,solanaClient:e,amount:a,asset:n,tokenPrice:o}){if(!t)return null;if("SOL"===n&&o){let n=Z(a),r=V(n,o),s=await q({solanaClient:e,tx:t});return{amountInUsd:r,feeInUsd:o?V(s,o):void 0,totalInUsd:V(n+s,o)}}if("USDC"===n&&o){let n="$"+a,r=await q({solanaClient:e,tx:t}),s=function(t,e){let a=parseFloat(t.toString())/G*e;return a<.01?0:a}(r,o);return{amountInUsd:n,feeInUsd:V(r,o),totalInUsd:"$"+(parseFloat(a)+s).toFixed(2)}}if("SOL"===n){let n=Z(a),o=await q({solanaClient:e,tx:t});return{amountInSol:a+" SOL",feeInSol:tt(o)+" SOL",totalInSol:tt(n+o)+" SOL"}}return{amountInUsdc:a+" USDC",feeInSol:tt(await q({solanaClient:e,tx:t}))+" SOL"}}const nt={component:function(){let I=j(),{closePrivyModal:w,createAnalyticsEvent:v}=y(),{data:S,setModalData:G,navigate:q}=x(),{wallets:tt}=k(),[et,nt]=o("preparing"),[ot,rt]=o(),[st,it]=o(),[lt,mt]=o();if(!S?.solanaFundingData)throw Error("Funding config is missing");if(!S.solanaFundingData.sourceWalletData)throw Error("Funding config is missing source wallet data");let{amount:ct,asset:dt,chain:ut,sourceWalletData:pt,destinationAddress:ft,afterSuccessScreen:gt}=S.solanaFundingData,ht=tt.find((t=>t.address===pt.address&&J(pt.walletClientType)===J(t.standardWallet.name))),It=_()(ut),{tokenPrice:wt,isTokenPriceLoading:vt}=T("solana");return r((()=>{if("preparing"!==et||vt||!ht)return;let t="SOL"===dt?Z(ct):function(t){return BigInt(Math.floor(1e6*parseFloat(t)))}(ct);it({amount:("SOL"===dt&&wt?V(t,wt):ct)??ct}),("SOL"===dt?async function({solanaClient:t,source:e,destination:a,amountInLamports:n}){let{value:o}=await t.rpc.getLatestBlockhash().send(),r={address:e},s=W(P({version:0}),(t=>D(r,t)),(t=>N(o,t)),(t=>M(A({amount:n,source:r,destination:a}),t)),(t=>O(t)));return new Uint8Array(B().encode(s))}({solanaClient:It,source:ht.address,destination:ft,amountInLamports:t}):async function({solanaClient:t,source:e,destination:a,amountInBaseUnits:n}){let o=Q(t.chain),{value:r}=await t.rpc.getLatestBlockhash().send(),s={address:e},[i]=await E({mint:o,owner:e,tokenProgram:H}),[l]=await E({mint:o,owner:a,tokenProgram:H}),[m,c]=await Promise.all([t.rpc.getAccountInfo(i,{commitment:"confirmed",encoding:"jsonParsed"}).send().catch((()=>null)),t.rpc.getAccountInfo(l,{commitment:"confirmed",encoding:"jsonParsed"}).send().catch((()=>null))]);if(!m?.value)throw Error(`Source token account does not exist for address: ${e}`);let d=$({payer:s,ata:l,owner:a,mint:o}),u=W(P({version:0}),(t=>D(s,t)),(t=>N(r,t)),(t=>c?.value?t:M(d,t)),(t=>M(R({source:i,destination:l,authority:s,amount:n}),t)),(t=>O(t)));return new Uint8Array(B().encode(u))}({solanaClient:It,source:ht.address,destination:ft,amountInBaseUnits:t})).then(rt).catch((t=>{nt("error"),mt(t)}))}),[et,ct,dt,ut,ht,ft,vt,wt]),r((()=>{"preparing"===et&&ot&&at({tx:ot,solanaClient:It,amount:ct,asset:dt,tokenPrice:wt}).then((t=>{nt("loaded"),it({amount:t?.amountInUsd??t?.amountInUsdc??t?.amountInSol??ct,fee:t?.feeInUsd??t?.feeInSol,total:t?.totalInUsd??t?.totalInSol})})).catch((t=>{nt("error"),mt(t)}))}),[ot,ct,dt,et,wt]),r((()=>{"error"===et&&lt&&(G({errorModalData:{error:lt,previousScreen:"FundSolWalletWithExternalSolanaWallet"},solanaFundingData:S.solanaFundingData}),q("ErrorScreen",!1))}),[et,q]),r((()=>{if("success"!==et)return;let t=setTimeout(gt?()=>q(gt):w,C);return()=>clearTimeout(t)}),[et]),/*#__PURE__*/e(a,"success"===et?{children:[/*#__PURE__*/t(f,{}),/*#__PURE__*/t(l,{}),/*#__PURE__*/e(m,{children:[/*#__PURE__*/t(n,{color:"var(--privy-color-success)",width:"64px",height:"64px"}),/*#__PURE__*/t(p,{title:"Success!",description:`You’ve successfully added ${ct} ${dt} to your ${I.name} wallet. It may take a minute before the funds are available to use.`})]}),/*#__PURE__*/t(c,{}),/*#__PURE__*/t(u,{})]}:"preparing"===et||"loaded"===et||"sending"===et?{children:[/*#__PURE__*/t(f,{}),/*#__PURE__*/t(d,{style:{marginTop:"16px"},children:/*#__PURE__*/t(g,{icon:ht?.standardWallet.icon,name:ht?.standardWallet.name})}),/*#__PURE__*/t(p,{style:{marginTop:"8px",marginBottom:"12px"},title:"sending"===et&&ht?`Confirming with ${ht.standardWallet.name}`:"Confirm transaction"}),/*#__PURE__*/t(K,{rows:[{label:"Source",value:s(pt.address)},{label:"Destination",value:s(ft)},{label:"Network",value:Y(ut)},{label:"Amount",value:st?.amount,isLoading:"preparing"===et},{label:"Estimated fee",value:st?.fee,isLoading:"preparing"===et},{label:"Total",value:st?.total,isLoading:"preparing"===et}]}),/*#__PURE__*/t(i,{style:{marginTop:"1rem"},loading:"preparing"===et||"sending"===et,onClick:function(){"loaded"===et&&ot&&ht&&(nt("sending"),async function({transaction:t,chain:e,sourceWallet:a,solanaClient:n}){let{hasFunds:o}=await z({solanaClient:n,tx:t});if(!o)throw new L(`Wallet ${s(a.address)} does not have enough funds.`,void 0,F.INSUFFICIENT_BALANCE);let r=U((await a.signAndSendTransaction({transaction:t,chain:e}).catch((t=>{throw new L("Transaction was rejected by the user",t,F.TRANSACTION_FAILURE)}))).signature);return await X({rpcSubscriptions:n.rpcSubscriptions,signature:r,timeout:2e4}),r}({solanaClient:It,transaction:ot,chain:ut,sourceWallet:ht}).then((t=>{nt("success"),v({eventName:b,payload:{provider:"external",status:"success",txHash:t,address:ht.address,value:ct,chainType:"solana",clusterName:ut,token:dt,destinationAddress:ft,destinationValue:ct,destinationChainType:"solana",destinationClusterName:ut,destinationToken:dt}})})).catch((t=>{nt("error"),mt(t)})))},children:"Confirm"}),/*#__PURE__*/t(u,{})]}:{children:[/*#__PURE__*/t(f,{}),/*#__PURE__*/t(h,{}),/*#__PURE__*/t("div",{style:{marginTop:"1rem"}}),/*#__PURE__*/t(u,{})]})}};export{nt as FundSolWalletWithExternalSolanaWallet,nt as default};