From f5e4da10ce1847f003013b87f812fafb617de1a5 Mon Sep 17 00:00:00 2001 From: Thompson <140930314+Godbrand0@users.noreply.github.com> Date: Mon, 28 Sep 2026 18:23:28 -0400 Subject: [PATCH] Require signed ownership proof for wallet linking; add non-color cues to status badges Wallet (#32): linking a Stellar address now runs challenge -> Freighter signMessage -> PATCH with signature. A Freighter account that differs from the profile's address is held pending until the user explicitly confirms, and AuthUser.stellarAddress overrides a stale cached address on load. Badges (#49): every status/difficulty badge gets a distinct icon; paid is the only solid-filled badge (vs. funded's tinted lock); open/refunded use dashed outlines. Darker text shades and a WCAG AA contrast test cover all pairs in both themes. --- src/app/connect/ConnectPanel.tsx | 28 +++++ src/components/ui/Badge.contrast.test.ts | 57 +++++++++ src/components/ui/Badge.test.tsx | 30 +++++ src/components/ui/Badge.tsx | 134 ++++++++++++++++++--- src/context/WalletContext.test.tsx | 119 +++++++++++++++++-- src/context/WalletContext.tsx | 145 ++++++++++++++++++++--- src/lib/messages.ts | 5 + src/lib/wallet.ts | 35 ++++++ 8 files changed, 509 insertions(+), 44 deletions(-) create mode 100644 src/components/ui/Badge.contrast.test.ts diff --git a/src/app/connect/ConnectPanel.tsx b/src/app/connect/ConnectPanel.tsx index ec385a3..3aea880 100644 --- a/src/app/connect/ConnectPanel.tsx +++ b/src/app/connect/ConnectPanel.tsx @@ -62,6 +62,9 @@ export function ConnectPanel() { error, initializing: walletInitializing, linkState, + pendingRelinkAddress, + confirmRelink, + cancelRelink, connect, disconnect, } = useWallet(); @@ -229,6 +232,31 @@ export function ConnectPanel() {

)} + {pendingRelinkAddress && ( +
+ +

+ {t("connect.wallet.relinkBody", { + address: `${pendingRelinkAddress.slice(0, 4)}...${pendingRelinkAddress.slice(-4)}`, + onFile: `${user?.stellarAddress?.slice(0, 4)}...${user?.stellarAddress?.slice(-4)}`, + })} +

+
+ + +
+
+ )} +