remove wallet functionality

This commit is contained in:
TerryM
2026-05-27 10:40:02 +08:00
parent 1f89363b6d
commit 7546faf15e
15 changed files with 23 additions and 8125 deletions

View File

@@ -1,127 +0,0 @@
import { ConnectButton } from "@rainbow-me/rainbowkit";
import { useAccount, useDisconnect, useSignMessage } from "wagmi";
import { useCallback, useEffect, useState } from "react";
import { postJSON, apiBase } from "../api";
import {
clearWalletToken,
getWalletToken,
setWalletToken,
} from "../walletToken";
import { useI18n } from "../i18n";
export function WalletLoginControls() {
const { t } = useI18n();
const { address, isConnected } = useAccount();
const { disconnectAsync } = useDisconnect();
const { signMessageAsync, isPending: signing } = useSignMessage();
const [busy, setBusy] = useState(false);
const [err, setErr] = useState<string | null>(null);
const [sessionOk, setSessionOk] = useState(false);
const checkSession = useCallback(async () => {
const tok = getWalletToken();
if (!tok || !address) {
setSessionOk(false);
return;
}
try {
const r = await fetch(`${apiBase}/api/auth/wallet/me`, {
headers: { Authorization: `Bearer ${tok}` },
});
if (!r.ok) {
clearWalletToken();
setSessionOk(false);
return;
}
const j = (await r.json()) as { wallet: string };
setSessionOk(j.wallet?.toLowerCase() === address.toLowerCase());
} catch {
setSessionOk(false);
}
}, [address]);
useEffect(() => {
void checkSession();
}, [checkSession]);
useEffect(() => {
if (!address) clearWalletToken();
}, [address]);
const signIn = async () => {
if (!address) return;
setErr(null);
setBusy(true);
try {
const nonceRes = await postJSON<{ message: string }>(
"/api/auth/wallet/nonce",
{ address },
);
const sig = await signMessageAsync({ message: nonceRes.message });
const out = await postJSON<{ token: string }>("/api/auth/wallet/verify", {
address,
message: nonceRes.message,
signature: sig,
});
setWalletToken(out.token);
setSessionOk(true);
} catch (e) {
setErr(String(e));
} finally {
setBusy(false);
}
};
const signOut = async () => {
clearWalletToken();
setSessionOk(false);
await disconnectAsync();
};
if (!import.meta.env.VITE_WALLETCONNECT_PROJECT_ID) {
return (
<span
className="text-xs text-amber-500/90 max-w-[220px] text-right leading-tight"
title={t("walletMissingProjectId")}
>
{t("walletSetupNeeded")}
</span>
);
}
return (
<div className="flex flex-col items-end gap-1 min-w-[200px]">
<div className="flex flex-wrap items-center justify-end gap-2">
<ConnectButton chainStatus="icon" showBalance={false} />
{isConnected && address ? (
sessionOk ? (
<span className="text-xs text-ark-gold2 whitespace-nowrap">
{t("walletSignedIn")}
</span>
) : (
<button
type="button"
disabled={busy || signing}
onClick={() => void signIn()}
className="rounded-lg border border-ark-gold bg-ark-gold/10 px-3 py-1.5 text-xs font-medium text-ark-gold2 hover:bg-ark-gold/20 disabled:opacity-50"
>
{busy || signing ? "…" : t("signInWallet")}
</button>
)
) : null}
{isConnected && sessionOk ? (
<button
type="button"
onClick={() => void signOut()}
className="text-xs text-neutral-500 hover:text-white"
>
{t("walletLogout")}
</button>
) : null}
</div>
{err ? (
<p className="text-xs text-red-400 max-w-xs text-right">{err}</p>
) : null}
</div>
);
}