feat: connect wallet favorites to backend

This commit is contained in:
TerryM
2026-06-04 17:06:29 +08:00
parent fd19ed438e
commit 01eab88c0f
14 changed files with 479 additions and 172 deletions

View File

@@ -7,7 +7,7 @@ import {
getInjectedWallet,
type WalletKind,
} from "./injected";
import { localWalletToken, useWallet } from "./WalletProvider";
import { useWallet } from "./WalletProvider";
export type WalletConnectLoginState = "idle" | "connecting" | "signing";
export type WalletConnectLoginMode = "deeplink" | "qr";
@@ -96,7 +96,7 @@ function connectorMatchesWallet(
export function useWalletConnectLogin() {
const available = hasWalletConnectProjectId();
const { address: localAddress, completeLogin } = useWallet();
const { address: localAddress, loginAddress } = useWallet();
const { address: wagmiAddress, isConnected: wagmiConnected } = useAccount();
const { connectAsync, connectors } = useConnect();
const { disconnectAsync } = useDisconnect();
@@ -140,12 +140,17 @@ export function useWalletConnectLogin() {
chain: "BNB Chain",
chainId: bsc.id,
});
completeLogin(localWalletToken(wagmiAddress), wagmiAddress);
console.info("[wallet-login] local wallet session completed", {
address: wagmiAddress,
});
void loginAddress(wagmiAddress)
.then(() => {
console.info("[wallet-login] wallet session completed", {
address: wagmiAddress,
});
})
.catch((err: unknown) => {
setError(err instanceof Error ? err.message : "Wallet login failed");
});
}
}, [completeLogin, localAddress, wagmiAddress, wagmiConnected]);
}, [localAddress, loginAddress, wagmiAddress, wagmiConnected]);
const start = useCallback(
async (
@@ -173,7 +178,7 @@ export function useWalletConnectLogin() {
chain: "BNB Chain",
chainId: bsc.id,
});
completeLogin(localWalletToken(injectedAddress), injectedAddress);
await loginAddress(injectedAddress);
setState("idle");
return;
} catch (err) {
@@ -256,10 +261,17 @@ export function useWalletConnectLogin() {
chain: "BNB Chain",
chainId: bsc.id,
});
completeLogin(localWalletToken(address), address);
console.info("[wallet-login] local wallet session completed", {
address,
});
void loginAddress(address)
.then(() => {
console.info("[wallet-login] wallet session completed", {
address,
});
})
.catch((err: unknown) => {
setError(
err instanceof Error ? err.message : "Wallet login failed",
);
});
};
const pollId = window.setInterval(() => {
void connector
@@ -293,7 +305,7 @@ export function useWalletConnectLogin() {
cleanupPollingRef.current = null;
}
},
[available, completeLogin, connectAsync, connectors, disconnectAsync],
[available, connectAsync, connectors, disconnectAsync, loginAddress],
);
return {