@coin-voyage/paykit
Version:
Seamless crypto payments. Onboard users from any chain, any coin into your app with one click.
94 lines • 3.29 kB
JavaScript
import { useEffect, useState } from "react";
import { useAccount } from "wagmi";
import { useConnect } from "./useConnect";
import usePayContext from "../components/contexts/pay";
import { useWalletConnectConnector } from "./useConnectors";
export function useWalletConnectUri({ enabled } = {
enabled: true,
}) {
const { log } = usePayContext();
const [uri, setUri] = useState(undefined);
const connector = useWalletConnectConnector();
const { isConnected } = useAccount();
const { connectAsync } = useConnect();
useEffect(() => {
if (!enabled) {
return;
}
async function handleMessage(message) {
const { type, data } = message;
log("WC Message", type, data);
if (type === "display_uri") {
setUri(data);
}
/*
// This has the URI as well, but we're probably better off using the one in the display_uri event
if (type === 'connecting') {
const p = await connector.getProvider();
const uri = p.signer.uri;
setConnectorUri(uri);
}
*/
}
async function handleDisconnect() {
log("WC Disconnect");
if (connector) {
connectWallet(connector);
}
}
async function connectWallet(connector) {
const result = await connectAsync({ connector });
if (result) {
return result;
}
return false;
}
async function connectWalletConnect(connector) {
try {
await connectWallet(connector);
}
catch (error) {
log("catch error");
log(error);
if (error.code) {
switch (error.code) {
case 4001:
log("error.code - User rejected");
connectWalletConnect(connector); // Regenerate QR code
break;
default:
log("error.code - Unknown Error");
break;
}
}
else {
// Sometimes the error doesn't respond with a code
log("WalletConnect cannot connect.", error);
}
}
}
if (isConnected) {
setUri(undefined);
}
else {
if (!connector || uri) {
return;
}
if (connector && !isConnected) {
connectWalletConnect(connector);
log("add wc listeners");
connector.emitter.on("message", handleMessage);
connector.emitter.on("disconnect", handleDisconnect);
return () => {
log("remove wc listeners");
connector.emitter.off("message", handleMessage);
connector.emitter.off("disconnect", handleDisconnect);
};
}
}
}, [enabled, connector, isConnected]);
return {
uri,
};
}
//# sourceMappingURL=useWalletConnectUri.js.map