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); } }