From fcf4ad102b9e44af9393b1e6ee7ab95cc22bc4d0 Mon Sep 17 00:00:00 2001 From: im-adithya Date: Tue, 1 Oct 2024 09:40:14 +0530 Subject: [PATCH] fix: validate capabilities in connection secret during setup --- lib/constants.ts | 4 ++++ pages/settings/wallets/WalletConnection.tsx | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/lib/constants.ts b/lib/constants.ts index f49b79a..49f4f74 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -1,3 +1,5 @@ +import { Nip47Capability } from "@getalby/sdk/dist/NWCClient"; + export const NAV_THEME = { light: { background: "hsl(210 20% 98%)", // background @@ -26,3 +28,5 @@ export const TRANSACTIONS_PAGE_SIZE = 20; export const DEFAULT_CURRENCY = "USD"; export const DEFAULT_WALLET_NAME = "Default Wallet"; export const ALBY_LIGHTNING_ADDRESS = "go@getalby.com"; + +export const REQUIRED_CAPABILITIES: Nip47Capability[] = ["get_info", "get_balance", "make_invoice", "pay_invoice", "list_transactions"]; \ No newline at end of file diff --git a/pages/settings/wallets/WalletConnection.tsx b/pages/settings/wallets/WalletConnection.tsx index f142d72..829dd2c 100644 --- a/pages/settings/wallets/WalletConnection.tsx +++ b/pages/settings/wallets/WalletConnection.tsx @@ -15,6 +15,7 @@ import Loading from "~/components/Loading"; import QRCodeScanner from "~/components/QRCodeScanner"; import Screen from "~/components/Screen"; import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogFooter, DialogClose } from "~/components/ui/dialog"; +import { REQUIRED_CAPABILITIES } from "~/lib/constants"; export function WalletConnection() { const hasConnection = useAppStore((store) => !!store.nwcClient); @@ -54,6 +55,10 @@ export function WalletConnection() { if (info.notifications?.length) { capabilities.push("notifications"); } + if (!REQUIRED_CAPABILITIES.every(capability => capabilities.includes(capability))) { + const missing = REQUIRED_CAPABILITIES.filter(capability => !capabilities.includes(capability)); + throw new Error(`Missing required capabilities: ${missing.join(", ")}`) + } console.log("NWC connected", info); useAppStore.getState().setNostrWalletConnectUrl(nostrWalletConnectUrl); useAppStore.getState().updateCurrentWallet({