@privy-io/react-auth
Version:
React client for the Privy Auth API
3 lines (2 loc) • 10.9 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-C5Wuo3-1.js"),o=require("./ScreenHeader-CgYJ5Fmg.js"),u=require("./FundWalletMethodHeader-BTGxq_KO.js"),d=require("./index-ByFhjjzH.js"),c=require("./context-Cg3IEi80.js"),l=require("./internal-context-BJv4f_bO.js"),h=require("./useActiveWallet-BfMD5hzE.js"),g=require("./privy-context-CrM9_s6G.js"),p=require("./useGetTokenPrice-CSWuvKuF.js"),q=require("./useWallets-dikDynAG.js"),v=require("./analytics-C6C_4JmG.js"),f=require("./reservoir-Bx0HQwbb.js"),m=require("./index-DchMyzt9.js"),y=require("./getChainName-C4rO8-3n.js"),C=require("./transaction-DjF5X-by.js"),S=require("./BridgeNetworkSelectionView-DKogJoIK.js"),j=require("./use-export-wallet-_EIyxyle.js"),I=require("./TransferOrBridgeLoadingScreen-DsutKbzS.js");function E(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("./events-context-Di6--rDg.js"),require("viem/utils"),require("@privy-io/are-addresses-equal"),require("./useGetSolPrice-Ca32VAbF.js"),require("uuid"),require("jose"),require("eventemitter3"),require("@coinbase/wallet-sdk"),require("@privy-io/ethereum"),require("mipd"),require("@privy-io/popup"),require("./paths-DizMb-lU.js"),require("./usePrivy-C-Rab7yP.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-CTO0RtgK.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-p3w-Ig2U.js"),require("./styles-B1M_BS_A.js"),require("./LinkPasskeyScreen-D9Y8PpKL.js"),require("lucide-react"),require("./TodoList-Cii_KrAk.js"),require("./ScreenLayout-C4QHZMbl.js"),require("./Screen-DWnRbzSA.js"),require("./InjectedWalletIcon-UY3nMvZo.js"),require("./Address-BeuDoSGB.js");var T=/*#__PURE__*/E(r);const A={component:()=>{let r=c.useAppConfig(),{rpcConfig:E,appId:A,closePrivyModal:N,createAnalyticsEvent:w}=l.usePrivyInternal(),{navigate:x,setModalData:b,data:P}=g.usePrivyModal(),F=c.useAppConfig(),{wallets:L}=q.useWallets(),[_,U]=t.useState(null),[k,R]=t.useState(null),[B,M]=t.useState([]),[W,O]=t.useState(0),[D,G]=t.useState(!1),[H,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)??L[0],se=h.useExternalWalletListing(ae?.walletClientType||"unknown"),oe=se?.name||"wallet",[ue,de]=t.useState(null);t.useEffect((()=>{(async()=>{if(!ae)return;let e=await ae.getEthereumProvider();de(i.createWalletClient({account:ae.address,transport:i.custom(e)}).extend(i.publicActions))})().catch(console.error)}),[ae]);let[ce,le]=t.useState(0n),he=C.getNativeCurrencyFromLamports(ce);t.useEffect((()=>{let e=r.solanaRpcs[re];e?m.fetchWalletBalance({rpc:e.rpc,address:ee}).then((e=>le(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:ve,fundingAmountInUsd:fe}=C.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(F.chains).filter((({testnet:r})=>!!r===e)),t=(await S.getBalanceForChains({chains:r,address:ae.address,appId:A,rpcConfig:E})).filter((e=>e.balance>0n));if(t.length<1)return void U(new l.PrivyClientError(`Wallet ${j.formatWalletAddress(ae.address)} does not have enough funds.`,void 0,l.PrivyErrorCode.INSUFFICIENT_BALANCE));t.sort(((e,r)=>Number(r.balance-e.balance)));let i=(await Promise.allSettled(t.map((async e=>({...e,quote:await f.getQuote({isTestnet:!1,input:f.toGetQuoteInput({appId:A,amount:ve.toString(),user:ae.address,recipient:ee,destinationChainId:f.RELAY_SOLANA_MAINNET_CHAIN_ID,destinationCurrency:f.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 l.PrivyClientError(`Unable to fetch quotes for bridging. Wallet ${j.formatWalletAddress(ae.address)} does not have enough funds.`,void 0,l.PrivyErrorCode.INSUFFICIENT_BALANCE));let a=i.map((({quote:e,balance:r,chain:t})=>({bridgeTx:f.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 l.PrivyClientError(`Unable to select bridge option from quotes. Wallet ${j.formatWalletAddress(ae.address)} does not have enough funds.`,void 0,l.PrivyErrorCode.INSUFFICIENT_BALANCE))})().catch(console.error)}),[ue]),t.useEffect((()=>{(async()=>{let e,r;if(!ue||!ae||D||Y||!ge)return;G(!0);let t=i.createPublicClient({chain:ge.chain,transport:i.http(q.getJsonRpcEndpointFromChain(ge.chain,E,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){"eip1559"===e.type||"eip4844"===e.type||"eip7702"===e.type?void 0!==e.gasPrice&&delete e.gasPrice:("legacy"===e.type||"eip2930"===e.type)&&(void 0!==e.maxFeePerGas&&delete e.maxFeePerGas,void 0!==e.maxPriorityFeePerGas&&delete e.maxPriorityFeePerGas),G(!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 l.PrivyClientError(e.shortMessage,void 0,l.PrivyErrorCode.TRANSACTION_FAILURE)):R(e.shortMessage??"Something went wrong"))}if(r)return await ue.waitForTransactionReceipt({hash:r}),H?(Z("pending"),void J(r)):(Q(!1),X(!0),void w({eventName:v.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(ve,9),destinationToken:"SOL"}}));Q(!1)}else G(!1)})().catch(console.error)}),[ue,ge]),f.useBridgingStatusPolling({transactionHash:z,isTestnet:!1,bridgingStatus:K,setBridgingStatus:Z,onSuccess({transactionHash:e}){V(!1),X(!0),w({eventName:v.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(ve,9),destinationToken:"SOL"}})},onFailure({error:e}){V(!1),U(e)}}),t.useEffect((()=>{_&&(b({funding:P?.funding,solanaFundingData:P?.solanaFundingData,sendTransaction:P?.sendTransaction,errorModalData:{error:_,previousScreen:"TransferFromWalletScreen"}}),x("ErrorScreen",!1))}),[_]),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 ${F.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(S.BridgeNetworkSelectionView,{displayName:oe,configuredFundingChain:re,formattedBalance:he,fundingAmount:ie,fundingCurrency:"SOL",fundingAmountInUsd:fe,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 f.getQuote({isTestnet:!1,input:f.toGetQuoteInput({appId:A,amount:ve.toString(),user:ae.address,recipient:ee,destinationChainId:f.RELAY_SOLANA_MAINNET_CHAIN_ID,destinationCurrency:f.RELAY_SOLANA_NATIVE_CURRENCY_ID,originChainId:me.chain.id})}),r=f.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 l.PrivyClientError("Unable to fetch quotes for bridging",e,l.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(I.TransferOrBridgeLoadingScreen,{walletClientType:ae?.walletClientType||"unknown",displayName:oe,addressToFund:ee,isBridging:H,isErc20Flow:!1,chainId:"solana",chainName:y.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(d.NeutralSpinner,{}),/*#__PURE__*/e.jsx("div",{style:{marginTop:"1rem"}}),/*#__PURE__*/e.jsx(s.BlobbyFooter,{})]})}};exports.AwaitingEvmToSolBridgingScreen=A,exports.default=A;