UNPKG

@privy-io/wagmi

Version:

Wagmi bindings for the react client

2 lines (1 loc) 2.23 kB
"use strict";var e=require("react"),t=require("wagmi"),n=require("wagmi/connectors"),a=require("@privy-io/react-auth"),r=require("./toWalletConnectorId.js");let o=async(e,t)=>{let a=await Promise.all(e.map((async e=>{let a=await e.getEthereumProvider(),o=r.toWalletConnectorId(e),c=t.connectors.find((e=>e.id===o));if(c)return c;let s=n.injected({target:{provider:a,id:o,name:e.meta.name,icon:e.meta.icon}});return t._internal.connectors.setup(s)})));return t._internal.connectors.setState(a),a},c=e=>{e._internal.connectors.setState([]),e.setState((e=>({chainId:e.chainId,connections:new Map,current:null,status:"disconnected"})))},s=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"})))};exports.useSyncPrivyWallets=({setActiveWalletForWagmi:n})=>{let{wallets:i,ready:l}=a.useWallets(),{user:d}=a.usePrivy(),u=t.useConfig(),{reconnect:m}=t.useReconnect();a.useConnectWallet({onSuccess:async({wallet:e})=>{let t=r.toWalletConnectorId(e);await(u.storage?.removeItem(`${t}.disconnected`)),n||(await(u.storage?.setItem("recentConnectorId",t)),m())}}),a.useConnectOrCreateWallet({onSuccess:async({wallet:e})=>{let t=r.toWalletConnectorId(e);await(u.storage?.removeItem(`${t}.disconnected`)),n||(await(u.storage?.setItem("recentConnectorId",t)),m())}}),a.useLogin({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(u.storage?.removeItem("io.privy.wallet.disconnected")),await Promise.all(n.map((async e=>{let t=`io.privy.wallet.${e.address}`;await(u.storage?.removeItem(`${t}.disconnected`))}))),m())}}),e.useEffect((()=>{n&&(async()=>{let e=n({wallets:i,user:d});if(!e)return c(u),void m();let[t]=await o([e],u);t?(await s(e,t,u),m()):console.error(`Failed to setup connector for ${e.address}`)})()}),[i,d,n]),e.useEffect((()=>{n||o(i,u).then((()=>{l&&m()}))}),[i,!n,l])};