@privy-io/wagmi
Version:
Wagmi bindings for the react client
2 lines (1 loc) • 1.83 kB
JavaScript
import{useEffect as e}from"react";import{useConfig as t,useReconnect as n}from"wagmi";import{injected as a}from"wagmi/connectors";import{useWallets as r,usePrivy as o,useConnectWallet as i,useLogin as c}from"@privy-io/react-auth";const s=({setActiveWalletForWagmi:a})=>{let{wallets:s,ready:u}=r(),{user:p}=o(),w=t(),{reconnect:y}=n();i({onSuccess:async({wallet:e})=>{await(w.storage?.removeItem(`${e.meta.id}.disconnected`)),a||(await(w.storage?.setItem("recentConnectorId",e.meta.id)),y())}}),c({onComplete:async({user:e,loginAccount:t})=>{t&&"wallet"!==t.type&&e.linkedAccounts.find((e=>"wallet"===e.type&&"privy"===e.walletClientType))&&(await(w.storage?.removeItem("io.privy.wallet.disconnected")),y())}}),e((()=>{a&&(async()=>{let e=a({wallets:s,user:p});if(!e)return l(w),void y();let[t]=await d([e],w);t?(await m(e,t,w),y()):console.error(`Failed to setup connector for ${e.address}`)})()}),[s,p,a]),e((()=>{a||d(s,w).then((()=>{u&&y()}))}),[s,!a,u])};let d=async(e,t)=>{let n=await Promise.all(e.map((async e=>{let n=await e.getEthereumProvider(),r=t.connectors.find((t=>t.id===e.meta.id));if(r)return r;let o=a({target:{provider:n,id:e.meta.id,name:e.meta.name,icon:e.meta.icon}});return t._internal.connectors.setup(o)})));return t._internal.connectors.setState(n),n},l=e=>{e._internal.connectors.setState([]),e.setState((e=>({chainId:e.chainId,connections:new Map,current:null,status:"disconnected"})))},m=async(e,t,n)=>{await Promise.all([n.storage?.removeItem(`${e.meta.id}.disconnected`),n.storage?.setItem("recentConnectorId",t.id)]);let a=Number(e.chainId.replace("eip155:",""));n.chains.find((e=>e.id===a))||(a=n.chains[0].id);let r=new Map([[t.uid,{accounts:[e.address],chainId:a,connector:t}]]);n.setState((e=>({...e,chainId:a,connections:r,current:t.uid,status:"connected"})))};export{s as useSyncPrivyWallets};