@privy-io/react-auth
Version:
React client for the Privy Auth API
3 lines (2 loc) • 10.7 kB
JavaScript
"use strict";var e=require("react/jsx-runtime"),r=require("@heroicons/react/24/outline/CheckCircleIcon"),t=require("react"),i=require("viem"),n=require("@privy-io/js-sdk-core"),a=require("./Layouts-D3TOcPhm.js"),s=require("./ModalHeader-BCPQgekO.js"),o=require("./ScreenHeader-CgYJ5Fmg.js"),u=require("./FundWalletMethodHeader-BUHyY_8M.js"),l=require("./index-ByFhjjzH.js"),c=require("./context-D-ZJYjUg.js"),d=require("./internal-context-BJv4f_bO.js"),h=require("./useActiveWallet-Cn6zOXx5.js"),g=require("./get-is-unified-wallet-UpdjHxOV.js"),p=require("./useGetTokenPrice-761HAiva.js"),q=require("./useWallets-CKAypPZB.js"),f=require("./analytics-C6C_4JmG.js"),v=require("./reservoir-Bx0HQwbb.js"),m=require("./index-C8lpxYDX.js"),C=require("./getChainName-C4rO8-3n.js"),S=require("./transaction-DjF5X-by.js"),j=require("./BridgeNetworkSelectionView-Cy4dUUah.js"),I=require("./getPublicClient-BsmZyCGX.js"),E=require("./TransferOrBridgeLoadingScreen-CI2oh7CB.js");function y(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("styled-components"),require("@heroicons/react/24/outline/ArrowLeftIcon"),require("@heroicons/react/24/outline/ArrowRightIcon"),require("@heroicons/react/24/outline/QuestionMarkCircleIcon"),require("@heroicons/react/24/outline/XMarkIcon"),require("tinycolor2"),require("ofetch"),require("zustand"),require("react-device-detect"),require("./use-export-wallet-B5ujV5Nk.js"),require("eventemitter3"),require("viem/utils"),require("./events-context-Di6--rDg.js"),require("@privy-io/are-addresses-equal"),require("./useGetSolPrice-Ca32VAbF.js"),require("uuid"),require("jose"),require("@coinbase/wallet-sdk"),require("@privy-io/ethereum"),require("mipd"),require("@privy-io/popup"),require("./paths-DizMb-lU.js"),require("./usePrivy-cfS6o4tX.js"),require("@scure/base"),require("@headlessui/react"),require("@walletconnect/ethereum-provider"),require("@privy-io/urls"),require("./PrivyPluginContext-DsgaS6n9.js"),require("./getEmbeddedConnectedWallet-pJd-l936.js"),require("js-cookie"),require("./frame-Oz7volks.js"),require("@privy-io/routes"),require("x402/client"),require("@privy-io/api-base"),require("viem/accounts"),require("./use-sign-with-user-signer-Cu_6Bx7m.js"),require("./getFormattedUsdFromLamports-Mu2fqwL2.js"),require("./getErc20Balance-D2jXMvJ8.js"),require("./Row-CMqYn75Q.js"),require("./ErrorMessage-BfTVyue9.js"),require("./Value-mhPsfsxe.js"),require("./LoadingSkeleton-BoyADunQ.js"),require("./Subtitle-CR8zM7ZJ.js"),require("./Title-ifTy35V5.js"),require("@heroicons/react/24/outline/WalletIcon"),require("./Chip-C6r7fZiR.js"),require("./NetworkIcon-BZ9Mj6vV.js"),require("@heroicons/react/24/outline/GlobeAltIcon"),require("./shared-DBm7PUrg.js"),require("@heroicons/react/24/outline/ChevronDownIcon"),require("./formatErc20TokenAmount-DxwoWe7e.js"),require("./ethers-SCb3aakT.js"),require("./styles-DUvzIwf1.js"),require("./LinkPasskeyScreen-CjdxFDoA.js"),require("lucide-react"),require("./TodoList-Cii_KrAk.js"),require("./ScreenLayout-CMb-Fua0.js"),require("./Screen-BfKedqka.js"),require("./InjectedWalletIcon-UY3nMvZo.js"),require("./Address-CHKhHgKJ.js");var T=/*#__PURE__*/y(r);const A={component:()=>{let r=c.useAppConfig(),{rpcConfig:y,appId:A,closePrivyModal:N,createAnalyticsEvent:w}=d.usePrivyInternal(),{navigate:b,setModalData:x,data:P}=g.usePrivyModal(),L=c.useAppConfig(),{wallets:_}=q.useWallets(),[F,U]=t.useState(null),[k,R]=t.useState(null),[B,M]=t.useState([]),[W,O]=t.useState(0),[D,H]=t.useState(!1),[G,V]=t.useState(!1),[Y,Q]=t.useState(!1),[$,X]=t.useState(!1),[z,J]=t.useState(),[K,Z]=t.useState();if(!P?.funding||"solana"!==P.funding.chainType)throw Error("Invalid funding data");let{address:ee,chain:re,connectedWallet:te}=P.funding,[ie,ne]=t.useState(P.funding.amount),ae=("ethereum"===te?.type?te:void 0)??_[0],se=h.useExternalWalletListing(ae?.walletClientType||"unknown"),oe=se?.name||"wallet",[ue,le]=t.useState(null);t.useEffect((()=>{(async()=>{if(!ae)return;let e=await ae.getEthereumProvider();le(i.createWalletClient({account:ae.address,transport:i.custom(e)}).extend(i.publicActions))})().catch(console.error)}),[ae]);let[ce,de]=t.useState(0n),he=S.getNativeCurrencyFromLamports(ce);t.useEffect((()=>{let e=r.solanaRpcs[re];e?m.fetchWalletBalance({rpc:e.rpc,address:ee}).then((e=>de(BigInt(e)))).catch(console.error):console.warn("Unable to load solana rpc, skipping balance")}),[]);let[ge,pe]=t.useState(),{tokenPrice:qe}=p.useGetTokenPrice("solana"),{fundingAmountInBaseUnit:fe,fundingAmountInUsd:ve}=S.getSolanaFormattedAmounts({amount:ie,fee:0n,tokenPrice:qe,isUsdc:P.funding.isUSDC});if(t.useEffect((()=>{(async()=>{if(!ue||!ae)return;let e=["solana:testnet","solana:devnet"].includes(re);e&&console.warn("Solana testnets are not supported for bridging");let r=n.addToDefaultChains(L.chains).filter((({testnet:r})=>!!r===e)),t=(await j.getBalanceForChains({chains:r,address:ae.address,appId:A,rpcConfig:y})).filter((e=>e.balance>0n));if(t.length<1)return void U(new d.PrivyClientError(`Wallet ${h.formatWalletAddress(ae.address)} does not have enough funds.`,void 0,d.PrivyErrorCode.INSUFFICIENT_BALANCE));t.sort(((e,r)=>Number(r.balance-e.balance)));let i=(await Promise.allSettled(t.map((async e=>({...e,quote:await v.getQuote({isTestnet:!1,input:v.toGetQuoteInput({appId:A,amount:fe.toString(),user:ae.address,recipient:ee,destinationChainId:v.RELAY_SOLANA_MAINNET_CHAIN_ID,destinationCurrency:v.RELAY_SOLANA_NATIVE_CURRENCY_ID,originChainId:e.chain.id})})}))))).filter((e=>"fulfilled"===e.status)).map((e=>e.value));if(i.length<1)return void U(new d.PrivyClientError(`Unable to fetch quotes for bridging. Wallet ${h.formatWalletAddress(ae.address)} does not have enough funds.`,void 0,d.PrivyErrorCode.INSUFFICIENT_BALANCE));let a=i.map((({quote:e,balance:r,chain:t})=>({bridgeTx:v.toEvmTransactionRequestInfoFromQuote(e),balance:r,chain:t,isErc20Quote:!1}))).filter((({bridgeTx:e})=>!!e));if(a.length>1)return void M(a);let s=a.at(0);s?(V(!0),pe({data:s.bridgeTx.data,to:s.bridgeTx.to,value:s.bridgeTx.value,chain:s.chain})):U(new d.PrivyClientError(`Unable to select bridge option from quotes. Wallet ${h.formatWalletAddress(ae.address)} does not have enough funds.`,void 0,d.PrivyErrorCode.INSUFFICIENT_BALANCE))})().catch(console.error)}),[ue]),t.useEffect((()=>{(async()=>{let e,r;if(!ue||!ae||D||Y||!ge)return;H(!0);let t=i.createPublicClient({chain:ge.chain,transport:i.http(I.getJsonRpcEndpointFromChain(ge.chain,y,A))});try{e=await t.prepareTransactionRequest({account:ae.address,to:ge.to,chain:ge.chain,data:ge.data,value:BigInt(ge.value??0)})}catch(e){console.error(e),B.length>1&&R(e.shortMessage??"Something went wrong")}if(e){H(!1),Q(!0);try{await ue.switchChain({id:ge.chain.id})}catch(e){await ue.addChain({chain:ge.chain}),await ue.switchChain({id:ge.chain.id})}try{r=await ue.sendTransaction(e)}catch(e){console.error(e),"TransactionExecutionError"===e.name&&(B.length<1?U(new d.PrivyClientError(e.shortMessage,void 0,d.PrivyErrorCode.TRANSACTION_FAILURE)):R(e.shortMessage??"Something went wrong"))}if(r)return await ue.waitForTransactionReceipt({hash:r}),G?(Z("pending"),void J(r)):(Q(!1),X(!0),void w({eventName:f.ON_RAMP_COMPLETE_ANALYTICS_EVENT,payload:{provider:"external",status:"success",txHash:r,address:ae.address,chainId:ge.chain.id,chainType:"ethereum",value:ge.value?i.formatUnits(BigInt(ge.value),18):void 0,token:"ETH",destination:ee,destinationClusterName:"mainnet-beta",destinationChainType:"solana",destinationValue:i.formatUnits(fe,9),destinationToken:"SOL"}}));Q(!1)}else H(!1)})().catch(console.error)}),[ue,ge]),v.useBridgingStatusPolling({transactionHash:z,isTestnet:!1,bridgingStatus:K,setBridgingStatus:Z,onSuccess({transactionHash:e}){V(!1),X(!0),w({eventName:f.ON_RAMP_COMPLETE_ANALYTICS_EVENT,payload:{provider:"external",status:"success",txHash:e,address:ae?.address,chainId:ge?.chain.id,chainType:"ethereum",value:ge?.value?i.formatUnits(BigInt(ge.value),18):void 0,token:"ETH",destination:ee,destinationClusterName:"mainnet-beta",destinationChainType:"solana",destinationValue:i.formatUnits(fe,9),destinationToken:"SOL"}})},onFailure({error:e}){V(!1),U(e)}}),t.useEffect((()=>{F&&(x({funding:P?.funding,solanaFundingData:P?.solanaFundingData,sendTransaction:P?.sendTransaction,errorModalData:{error:F,previousScreen:"TransferFromWalletScreen"}}),b("ErrorScreen",!1))}),[F]),t.useEffect((()=>{if(!$)return;let e=setTimeout(N,c.DEFAULT_SUCCESS_SCREEN_EXTRA_LONG_DURATION_MS);return()=>clearTimeout(e)}),[$]),$/*#__PURE__*/)return e.jsxs(e.Fragment,{children:[/*#__PURE__*/e.jsx(u.t,{}),/*#__PURE__*/e.jsx(a.RefactorSpacerTop,{}),/*#__PURE__*/e.jsxs(a.CenteredItemWithGap,{children:[/*#__PURE__*/e.jsx(T.default,{color:"var(--privy-color-success)",width:"64px",height:"64px"}),/*#__PURE__*/e.jsx(o.CenteredScreenHeader,{title:"Success!",description:`You’ve successfully added ${ie} SOL to your ${L.name} wallet. It may take a minute before the funds are available to use.`})]}),/*#__PURE__*/e.jsx(a.RefactorSpacerBottom,{}),/*#__PURE__*/e.jsx(s.BlobbyFooter,{})]});let me=B[W];return B.length>1&&me?/*#__PURE__*/e.jsx(j.BridgeNetworkSelectionView,{displayName:oe,configuredFundingChain:re,formattedBalance:he,fundingAmount:ie,fundingCurrency:"SOL",fundingAmountInUsd:ve,options:B,selectedOption:me,isPreparing:D,isSubmitting:Y,addressToFund:ee,fundingWalletAddress:ae?.address||"",errorMessage:k,onSubmit:()=>{P.funding?.amount!==ie?async function(){if(ae&&me)try{let e=await v.getQuote({isTestnet:!1,input:v.toGetQuoteInput({appId:A,amount:fe.toString(),user:ae.address,recipient:ee,destinationChainId:v.RELAY_SOLANA_MAINNET_CHAIN_ID,destinationCurrency:v.RELAY_SOLANA_NATIVE_CURRENCY_ID,originChainId:me.chain.id})}),r=v.toEvmTransactionRequestInfoFromQuote(e);if(!r)throw Error("Invalid transaction request");V(!0),pe({data:r.data,to:r.to,value:r.value,chain:me.chain})}catch(e){console.error(e),U(new d.PrivyClientError("Unable to fetch quotes for bridging",e,d.PrivyErrorCode.INSUFFICIENT_BALANCE))}}().catch(console.error):pe({to:me.bridgeTx.to,data:me.bridgeTx.data,value:me.bridgeTx.value,chain:me.chain})},onSelect:e=>{e!==W&&(R(null),O(e))},onAmountChange:ne}):Y&&ae?/*#__PURE__*/e.jsx(E.TransferOrBridgeLoadingScreen,{walletClientType:ae?.walletClientType||"unknown",displayName:oe,addressToFund:ee,isBridging:G,isErc20Flow:!1,chainId:"solana",chainName:C.getChainName(re),totalPriceInUsd:void 0,totalPriceInNativeCurrency:void 0,gasPriceInUsd:void 0,gasPriceInNativeCurrency:void 0}):
/*#__PURE__*/e.jsxs(e.Fragment,{children:[/*#__PURE__*/e.jsx(u.t,{}),/*#__PURE__*/e.jsx(l.NeutralSpinner,{}),/*#__PURE__*/e.jsx("div",{style:{marginTop:"1rem"}}),/*#__PURE__*/e.jsx(s.BlobbyFooter,{})]})}};exports.AwaitingEvmToSolBridgingScreen=A,exports.default=A;