UNPKG

@privy-io/wagmi

Version:

Wagmi bindings for the react client

2 lines (1 loc) 2.22 kB
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 c,useConnectOrCreateWallet as i,useLogin as s}from"@privy-io/react-auth";import{toWalletConnectorId as l}from"./toWalletConnectorId.mjs";const d=({setActiveWalletForWagmi:a})=>{let{wallets:d,ready:p}=r(),{user:I}=o(),y=t(),{reconnect:g}=n();c({onSuccess:async({wallet:e})=>{let t=l(e);await(y.storage?.removeItem(`${t}.disconnected`)),a||(await(y.storage?.setItem("recentConnectorId",t)),g())}}),i({onSuccess:async({wallet:e})=>{let t=l(e);await(y.storage?.removeItem(`${t}.disconnected`)),a||(await(y.storage?.setItem("recentConnectorId",t)),g())}}),s({onComplete:async({user:e,loginAccount:t})=>{if(!t||"wallet"===t.type)return;let n=e.linkedAccounts.filter((e=>"wallet"===e.type&&"privy"===e.walletClientType));0!==n.length&&(await(y.storage?.removeItem("io.privy.wallet.disconnected")),await Promise.all(n.map((async e=>{let t=`io.privy.wallet.${e.address}`;await(y.storage?.removeItem(`${t}.disconnected`))}))),g())}}),e((()=>{a&&(async()=>{let e=a({wallets:d,user:I});if(!e)return u(y),void g();let[t]=await m([e],y);t?(await w(e,t,y),g()):console.error(`Failed to setup connector for ${e.address}`)})()}),[d,I,a]),e((()=>{a||m(d,y).then((()=>{p&&g()}))}),[d,!a,p])};let m=async(e,t)=>{let n=await Promise.all(e.map((async e=>{let n=await e.getEthereumProvider(),r=l(e),o=t.connectors.find((e=>e.id===r));if(o)return o;let c=a({target:{provider:n,id:r,name:e.meta.name,icon:e.meta.icon}});return t._internal.connectors.setup(c)})));return t._internal.connectors.setState(n),n},u=e=>{e._internal.connectors.setState([]),e.setState((e=>({chainId:e.chainId,connections:new Map,current:null,status:"disconnected"})))},w=async(e,t,n)=>{let a=t.id;await Promise.all([n.storage?.removeItem(`${a}.disconnected`),n.storage?.setItem("recentConnectorId",a)]);let r=Number(e.chainId.replace("eip155:",""));n.chains.find((e=>e.id===r))||(r=n.chains[0].id);let o=new Map([[t.uid,{accounts:[e.address],chainId:r,connector:t}]]);n.setState((e=>({...e,chainId:r,connections:o,current:t.uid,status:"connected"})))};export{d as useSyncPrivyWallets};