@privy-io/wagmi
Version:
Wagmi bindings for the react client
3 lines (2 loc) • 2.31 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 o,usePrivy as r,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}=o(),{user:y}=r(),I=t(),{reconnect:g}=n();c({onSuccess:async({wallet:e})=>{let t=l(e);await(I.storage?.removeItem(`${t}.disconnected`)),a||(await(I.storage?.setItem("recentConnectorId",t)),g())}}),i({onSuccess:async({wallet:e})=>{let t=l(e);await(I.storage?.removeItem(`${t}.disconnected`)),a||(await(I.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(I.storage?.removeItem("io.privy.wallet.disconnected")),await Promise.all(n.map((async e=>{let t=`io.privy.wallet.${e.address}`;await(I.storage?.removeItem(`${t}.disconnected`))}))),g())}}),e((()=>{a&&(async()=>{let e=a({wallets:d,user:y});if(!e)return u(I),void g();let[t]=await m([e],I);t?(await w(e,t,I),g()):console.error(`Failed to setup connector for ${e.address}`)})()}),[d,y,a]),e((()=>{a||m(d,I).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(),o=l(e),r=t.connectors.find((e=>e.id===o));if(r)return r;let c=a({target:{provider:n,id:o,name:e.meta.name,icon:"string"==typeof e.meta.icon?e.meta.icon:void 0}});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 o=Number(e.chainId.replace("eip155:",""));n.chains.find((e=>e.id===o))||(o=n.chains[0].id);let r=new Map([[t.uid,{accounts:[e.address],chainId:o,connector:t}]]);n.setState((e=>({...e,chainId:o,connections:r,current:t.uid,status:"connected"})))};export{d as useSyncPrivyWallets};
//# sourceMappingURL=useSyncPrivyWallets.mjs.map