@privy-io/react-auth
Version:
React client for the Privy Auth API
2 lines (1 loc) • 6.07 kB
JavaScript
import{jsx as e,Fragment as r,jsxs as t}from"react/jsx-runtime";import{useState as o,useEffect as i,useMemo as a}from"react";import{formatUnits as s}from"viem";import{formatTokenAmount as n,formatWeiAmount as m}from"@privy-io/js-sdk-core";import{P as c,B as d}from"./ModalHeader-BnVmXtvG.mjs";import{F as l}from"./Layouts-BlFm53ED.mjs";import{Q as p}from"./QrCode-B84kEIjT.mjs";import{t as u}from"./FundWalletMethodHeader-Cb-ACySl.mjs";import{I as f}from"./InfoBanner-DkQEPd77.mjs";import{S as h}from"./Subtitle-CV-2yKE4.mjs";import{T as v}from"./Title-BnzYV3Is.mjs";import{W as g}from"./WalletInfoCard-CEcdukTg.mjs";import{u as y}from"./context-DLtU3JQy.mjs";import{j}from"./useActiveWallet-CvP7iYvj.mjs";import{u as C}from"./internal-context-Z-fyxadS.mjs";import{a as S}from"./privy-context-DrMxzgOR.mjs";import{u as I}from"./useWalletBalance-RmRvKAUV.mjs";import{u as T}from"./useWallets-BzNCTucF.mjs";import{O as b}from"./analytics-mkkvFRju.mjs";import{x as w,z as A}from"./index-YDEix4mU.mjs";import{g as k}from"./getChainName-DjpPdUSc.mjs";import{g as F}from"./getUsdcMintAddress-DFI1hv05.mjs";import{g as M}from"./transaction-CnfuREWo.mjs";import{g as x}from"./getErc20Balance-o7J9W1su.mjs";import{v as D}from"./use-export-wallet-_wu5ex5t.mjs";import"styled-components";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"qrcode";import"@heroicons/react/24/outline/InformationCircleIcon";import"lucide-react";import"./ErrorMessage-D8VaAP5m.mjs";import"./LabelXs-oqZNqbm_.mjs";import"./Address-N-mzBgMy.mjs";import"./shared-FM0rljBt.mjs";import"tinycolor2";import"zustand";import"react-device-detect";import"./events-context-CI0iqAXA.mjs";import"viem/utils";import"ofetch";import"@privy-io/are-addresses-equal";import"uuid";import"jose";import"eventemitter3";import"@coinbase/wallet-sdk";import"@privy-io/ethereum";import"mipd";import"@privy-io/popup";import"./paths-3HW55qZg.mjs";import"./usePrivy-C_sY2Duk.mjs";import"@scure/base";import"@headlessui/react";import"@walletconnect/ethereum-provider";import"@privy-io/urls";import"./PrivyPluginContext-2QN2dVUw.mjs";import"./getEmbeddedConnectedWallet-JzK4iD-L.mjs";import"js-cookie";import"./frame-uzTmvtww.mjs";import"@privy-io/routes";import"x402/client";import"@privy-io/api-base";import"viem/accounts";import"./use-sign-with-user-signer-Do5Oi_rb.mjs";import"./getFormattedUsdFromLamports-B6EqSEho.mjs";const U={component:()=>{let{wallets:A}=T(),{connectors:U}=C(),$=U.filter(j).flatMap((e=>e.wallets)),{data:E,setModalData:L,navigate:W,lastScreen:P}=S(),{rpcConfig:O,appId:q,createAnalyticsEvent:z,closePrivyModal:H}=C(),N=y(),[Q,R]=o(void 0),[X,Y]=o(!1),G=E?.funding,{reloadBalance:J}=I({rpcConfig:O,appId:q,address:"ethereum"===G.chainType?G.address:void 0,chain:"ethereum"===G.chainType?G.chain:void 0}),K="solana"===G.chainType,V=K?G.isUSDC?"USDC":"SOL":G.erc20Address?G.erc20ContractInfo?.symbol:G.chain.nativeCurrency.symbol,Z=K?$.find((({address:e})=>e===G.address)):A.find((({address:e})=>D(e)===D(G.address)));if(!G)return L({errorModalData:{error:Error("Couldn't find funding config"),previousScreen:P||"FundingMethodSelectionScreen"},funding:E?.funding,solanaFundingData:E?.solanaFundingData,sendTransaction:E?.sendTransaction}),W("ErrorScreen"),/*#__PURE__*/e(r,{});i((()=>{let e=K?async function(){if("solana"!==G.chainType)return;let e=N.solanaRpcs[G.chain];e?(G.isUSDC?async function({rpc:e,address:r,mintAddress:t}){let o=await e.getTokenAccountsByOwner(r,{mint:t},{encoding:"jsonParsed",commitment:"confirmed"}).send(),i=o.value[0]?.account;return i?BigInt(i.data.parsed.info.tokenAmount.amount):0n}({rpc:e.rpc,address:G.address,mintAddress:F(G.chain)}):w({rpc:e.rpc,address:G.address})).then((e=>{let r=BigInt(e);Q&&r>Q&&(Y(!0),z({eventName:b,payload:{provider:"manual",status:"success",chainType:"solana",address:Z?.address,value:G.isUSDC?s(r-Q,6):s(r-Q,9),token:G.isUSDC?"USDC":"SOL"}})),R(r)})):console.warn("Unable to load solana rpc, skipping balance")}:async function(){"ethereum"===G.chainType&&(async()=>{if(!G.erc20Address)return await J()??BigInt(0);{let{balance:e}=await x({chain:G.chain,address:G.address,erc20Address:G.erc20Address,rpcConfig:O,appId:q});return e}})().then((e=>{Q&&e>Q&&(Y(!0),z({eventName:b,payload:{provider:"manual",status:"success",chainType:"ethereum",address:Z?.address,chainId:G.chain.id,value:s(e-Q,G.erc20ContractInfo?.decimals??18),token:G.erc20ContractInfo?.symbol??G.erc20Address??"ETH"}})),R(e)})).catch((()=>R(void 0)))},r=setInterval(e,2e3);return e(),()=>clearInterval(r)}),[Q]);let _=a((()=>null==Q?"":G.isUSDC?n({amount:Q,decimals:6}):K?M(Q,3,!0,!0):null!=G.erc20ContractInfo?.decimals?n({amount:Q,decimals:G.erc20ContractInfo.decimals}):m({wei:Q})),[Q,K,G]),ee="ethereum"===G.chainType?G.chain.name:k(G.chain),re=a((()=>""===G.uiConfig?.receiveFundsTitle?null:/*#__PURE__*/e(v,{children:G.uiConfig?.receiveFundsTitle??`Receive ${G.amount} ${V??""}`.trim()})),[G.uiConfig?.receiveFundsTitle,G.amount,V]),te=a((()=>""===G.uiConfig?.receiveFundsSubtitle?null:/*#__PURE__*/e(h,{children:G.uiConfig?.receiveFundsSubtitle??`Scan this code or copy your wallet address to receive funds on ${ee}.`})),[G.uiConfig?.receiveFundsSubtitle,ee]),oe="solana"===G.chainType&&G.isUSDC&&F(G.chain)?`?spl-token=${F(G.chain)}`:"";/*#__PURE__*/return t(r,{children:[/*#__PURE__*/e(u,{}),re,te,/*#__PURE__*/t(l,{style:{gap:"1rem",margin:re||te?"1rem 0":"0"},children:[/*#__PURE__*/e(p,{url:`${G.chainType}:${G.address}${oe}`,size:200,squareLogoElement:B}),/*#__PURE__*/t(f,{theme:N.appearance.palette.colorScheme,children:["Make sure to send funds on ",ee,"."]}),/*#__PURE__*/e(g,{title:"Your wallet",errMsg:void 0,showCopyButton:!0,balance:`${_} ${V}`,address:G.address}),X&&/*#__PURE__*/e(c,{onClick:()=>H({shouldCallAuthOnSuccess:!1,isSuccess:!0}),children:"Continue"})]}),/*#__PURE__*/e(d,{})]})}};let B=({...r})=>/*#__PURE__*/e(A,{color:"black",...r});export{U as ManualTransferScreen,U as default};