UNPKG

@privy-io/react-auth

Version:

React client for the Privy Auth API

3 lines (2 loc) 10.5 kB
"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-dRL0OSpp.js"),s=require("./ModalHeader-DB7Tbjwz.js"),o=require("./ScreenHeader-CyURV6Ti.js"),u=require("./FundWalletMethodHeader-BKgYjMau.js"),d=require("./index-CRFXS9pP.js"),l=require("./context-DFq1obBO.js"),c=require("./internal-context-NWsAL807.js"),h=require("./useActiveWallet-BOX8xCn9.js"),g=require("./get-is-unified-wallet-D4ouXJpi.js"),p=require("./useGetTokenPrice-BHq-guWz.js"),f=require("./useWallets-BLFNjTwC.js"),q=require("./analytics-C6C_4JmG.js"),v=require("./reservoir-CQGyEBb7.js"),m=require("./index-NJrQkxJ7.js"),C=require("./getChainName-C4rO8-3n.js"),E=require("./transaction-DjF5X-by.js"),I=require("./BridgeNetworkSelectionView-DgFjMLY3.js"),S=require("./getPublicClient-CGlodIp_.js"),j=require("./TransferOrBridgeLoadingScreen-B3zo8l43.js");function T(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("./prepareFundingModalData-Cnd6rhhJ.js"),require("eventemitter3"),require("./events-context-Di6--rDg.js"),require("viem/utils"),require("./useGetSolPrice-C986iVoO.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-CcfSRv1R.js"),require("@scure/base"),require("@headlessui/react"),require("@walletconnect/ethereum-provider"),require("@privy-io/urls"),require("js-cookie"),require("./frame-B14fp9oC.js"),require("@privy-io/routes"),require("x402/client"),require("@privy-io/api-base"),require("viem/accounts"),require("./use-sign-with-user-signer-BcAsQTGF.js"),require("./getEmbeddedConnectedWallet-6TsVZJkD.js"),require("./getFormattedUsdFromLamports-Mu2fqwL2.js"),require("./getErc20Balance-DknCauCO.js"),require("./Button-Bm_Ft0Dw.js"),require("./Row-CxDF-VMy.js"),require("./ErrorMessage-f0cRWc29.js"),require("./Value-C-XtZyFa.js"),require("./LoadingSkeleton-DoCrfGnl.js"),require("./Subtitle-Dtmrw8l5.js"),require("./Title-C-tHJvrb.js"),require("@heroicons/react/24/outline/WalletIcon"),require("./Chip-ChrHHazc.js"),require("./NetworkIcon-BZ9Mj6vV.js"),require("@heroicons/react/24/outline/GlobeAltIcon"),require("./shared-BPGwTh8c.js"),require("@heroicons/react/24/outline/ChevronDownIcon"),require("./formatErc20TokenAmount-DxwoWe7e.js"),require("./ethers-DZGJ4Y5i.js"),require("./styles-D4VeJNv1.js"),require("./InjectedWalletIcon-UY3nMvZo.js"),require("./Address-5znFAhQw.js"),require("lucide-react");var y=/*#__PURE__*/T(r);const A={component:()=>{let r=l.useAppConfig(),{rpcConfig:T,appId:A,closePrivyModal:N,createAnalyticsEvent:w}=c.usePrivyInternal(),{navigate:b,setModalData:x,data:_}=g.usePrivyModal(),F=l.useAppConfig(),{wallets:P}=f.useWallets(),[L,R]=t.useState(null),[U,k]=t.useState(null),[B,M]=t.useState([]),[W,O]=t.useState(0),[D,H]=t.useState(!1),[Q,V]=t.useState(!1),[Y,G]=t.useState(!1),[$,z]=t.useState(!1),[X,J]=t.useState(),[K,Z]=t.useState();if(!_?.funding||"solana"!==_.funding.chainType)throw Error("Invalid funding data");let{address:ee,chain:re,connectedWallet:te}=_.funding,[ie,ne]=t.useState(_.funding.amount),ae=("ethereum"===te?.type?te:void 0)??P[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[le,ce]=t.useState(0n),he=E.getNativeCurrencyFromLamports(le);t.useEffect((()=>{let e=r.solanaRpcs[re];e?m.fetchWalletBalance({rpc:e.rpc,address:ee}).then((e=>ce(BigInt(e)))).catch(console.error):console.warn("Unable to load solana rpc, skipping balance")}),[]);let[ge,pe]=t.useState(),{tokenPrice:fe}=p.useGetTokenPrice("solana"),{fundingAmountInBaseUnit:qe,fundingAmountInUsd:ve}=E.getSolanaFormattedAmounts({amount:ie,fee:0n,tokenPrice:fe,isUsdc:_.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 I.getBalanceForChains({chains:r,address:ae.address,appId:A,rpcConfig:T})).filter((e=>e.balance>0n));if(t.length<1)return void R(new c.PrivyClientError(`Wallet ${h.formatWalletAddress(ae.address)} does not have enough funds.`,void 0,c.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:qe.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 R(new c.PrivyClientError(`Unable to fetch quotes for bridging. Wallet ${h.formatWalletAddress(ae.address)} does not have enough funds.`,void 0,c.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})):R(new c.PrivyClientError(`Unable to select bridge option from quotes. Wallet ${h.formatWalletAddress(ae.address)} does not have enough funds.`,void 0,c.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(S.getJsonRpcEndpointFromChain(ge.chain,T,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&&k(e.shortMessage??"Something went wrong")}if(e){H(!1),G(!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?R(new c.PrivyClientError(e.shortMessage,void 0,c.PrivyErrorCode.TRANSACTION_FAILURE)):k(e.shortMessage??"Something went wrong"))}if(r)return await ue.waitForTransactionReceipt({hash:r}),Q?(Z("pending"),void J(r)):(G(!1),z(!0),void w({eventName:q.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(qe,9),destinationToken:"SOL"}}));G(!1)}else H(!1)})().catch(console.error)}),[ue,ge]),v.useBridgingStatusPolling({transactionHash:X,isTestnet:!1,bridgingStatus:K,setBridgingStatus:Z,onSuccess({transactionHash:e}){V(!1),z(!0),w({eventName:q.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(qe,9),destinationToken:"SOL"}})},onFailure({error:e}){V(!1),R(e)}}),t.useEffect((()=>{L&&(x({funding:_?.funding,solanaFundingData:_?.solanaFundingData,sendTransaction:_?.sendTransaction,errorModalData:{error:L,previousScreen:"TransferFromWalletScreen"}}),b("ErrorScreen",!1))}),[L]),t.useEffect((()=>{if(!$)return;let e=setTimeout(N,l.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(y.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(I.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:U,onSubmit:()=>{_.funding?.amount!==ie?async function(){if(ae&&me)try{let e=await v.getQuote({isTestnet:!1,input:v.toGetQuoteInput({appId:A,amount:qe.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),R(new c.PrivyClientError("Unable to fetch quotes for bridging",e,c.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&&(k(null),O(e))},onAmountChange:ne}):Y&&ae?/*#__PURE__*/e.jsx(j.TransferOrBridgeLoadingScreen,{walletClientType:ae?.walletClientType||"unknown",displayName:oe,addressToFund:ee,isBridging:Q,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(d.NeutralSpinner,{}),/*#__PURE__*/e.jsx("div",{style:{marginTop:"1rem"}}),/*#__PURE__*/e.jsx(s.BlobbyFooter,{})]})}};exports.AwaitingEvmToSolBridgingScreen=A,exports.default=A;