From 225d9159cc96977c77cd14f019c04259a71a3606 Mon Sep 17 00:00:00 2001 From: Derek Rein Date: Mon, 9 Mar 2026 18:51:52 +0700 Subject: [PATCH] fix(cli-sdk): fix swidge session namespace mismatch and unhandled relay errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Only include fromChain in session namespaces — bridge tx is sent on the source chain, so including toChain caused NO_MATCHING_KEY when restoring sessions without the destination chain approved. 2. Capture relay errors during request() so wallet rejection/timeout doesn't crash Node with an unhandled 'error' event. Co-Authored-By: Claude Opus 4.6 --- .changeset/fix-swidge-session-relay-errors.md | 5 +++++ packages/cli-sdk/src/cli.ts | 7 ++++--- packages/cli-sdk/src/client.ts | 7 +++++++ 3 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 .changeset/fix-swidge-session-relay-errors.md diff --git a/.changeset/fix-swidge-session-relay-errors.md b/.changeset/fix-swidge-session-relay-errors.md new file mode 100644 index 0000000..ed3ad97 --- /dev/null +++ b/.changeset/fix-swidge-session-relay-errors.md @@ -0,0 +1,5 @@ +--- +"@walletconnect/cli-sdk": patch +--- + +Fix swidge NO_MATCHING_KEY error by only requiring source chain in session namespaces, and prevent unhandled relay errors from crashing Node during wallet request rejection/timeout diff --git a/packages/cli-sdk/src/cli.ts b/packages/cli-sdk/src/cli.ts index 2ec4c53..49f3ca4 100644 --- a/packages/cli-sdk/src/cli.ts +++ b/packages/cli-sdk/src/cli.ts @@ -298,9 +298,10 @@ async function cmdSwidge(browser: boolean, args: string[]): Promise { process.exit(1); } - const chains = [fromChain]; - if (!chains.includes(toChain)) chains.push(toChain); - const sdk = createSDK({ projectId, browser, chains }); + // Only require the source chain in the session — the bridge tx is sent on fromChain. + // Including toChain causes NO_MATCHING_KEY when restoring a session that doesn't + // include the destination chain in its approved namespaces. + const sdk = createSDK({ projectId, browser, chains: [fromChain] }); try { let result = await sdk.tryRestore(); diff --git a/packages/cli-sdk/src/client.ts b/packages/cli-sdk/src/client.ts index 7a13681..5f6acd7 100644 --- a/packages/cli-sdk/src/client.ts +++ b/packages/cli-sdk/src/client.ts @@ -141,6 +141,11 @@ export class WalletConnectCLI extends EventEmitter { this.logRequestDetails(options); + // Absorb relay WebSocket errors so they don't crash the process + // as unhandled 'error' events (the actual rejection is caught below). + const swallow = () => {}; + client.core.relayer.on("error", swallow); + try { return await client.request({ topic, @@ -162,6 +167,8 @@ export class WalletConnectCLI extends EventEmitter { } throw error; + } finally { + client.core.relayer.off("error", swallow); } }