From 98a0f78c4b46ebf7837c334b40eb4eabd3468602 Mon Sep 17 00:00:00 2001 From: tanzhenxin Date: Fri, 10 Apr 2026 11:36:02 +0800 Subject: [PATCH] fix(weixin): add missing iLink headers to QR code login and clean up error output (#3044) PR #2943 fixed headers in buildHeaders() but the login flow in waitForLogin() still used a hardcoded incomplete header object. Reuse the shared buildHeaders() so all endpoints send consistent iLink-App-Id and iLink-App-ClientVersion headers. Also wrap channel.connect() in startSingle() with a try/catch so configuration errors print a clean message instead of dumping the yargs help text and a stack trace. --- packages/channels/weixin/src/api.ts | 2 +- packages/channels/weixin/src/login.ts | 4 +++- packages/cli/src/commands/channel/start.ts | 11 ++++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/channels/weixin/src/api.ts b/packages/channels/weixin/src/api.ts index 73f7f8ea7..93ccbf4b6 100644 --- a/packages/channels/weixin/src/api.ts +++ b/packages/channels/weixin/src/api.ts @@ -35,7 +35,7 @@ function randomUin(): string { return btoa(String.fromCharCode(...buf)); } -function buildHeaders(token?: string): Record { +export function buildHeaders(token?: string): Record { const headers: Record = { 'Content-Type': 'application/json', 'X-WECHAT-UIN': randomUin(), diff --git a/packages/channels/weixin/src/login.ts b/packages/channels/weixin/src/login.ts index 8771b2373..0adeda226 100644 --- a/packages/channels/weixin/src/login.ts +++ b/packages/channels/weixin/src/login.ts @@ -2,6 +2,8 @@ * QR code login flow for WeChat iLink Bot. */ +import { buildHeaders } from './api.js'; + export interface LoginResult { connected: boolean; token?: string; @@ -54,7 +56,7 @@ export async function waitForLogin(params: { const resp = await fetch( `${apiBaseUrl}/ilink/bot/get_qrcode_status?qrcode=${encodeURIComponent(currentQrcodeId)}`, { - headers: { 'iLink-App-ClientVersion': '1' }, + headers: buildHeaders(), signal: controller.signal, }, ); diff --git a/packages/cli/src/commands/channel/start.ts b/packages/cli/src/commands/channel/start.ts index 2b7022622..ae5648932 100644 --- a/packages/cli/src/commands/channel/start.ts +++ b/packages/cli/src/commands/channel/start.ts @@ -183,7 +183,16 @@ async function startSingle(name: string): Promise { const channel = createChannel(name, config, bridge, { router }); channels.set(name, channel); registerToolCallDispatch(bridge, router, channels); - await channel.connect(); + + try { + await channel.connect(); + } catch (err) { + writeStderrLine( + `Error: ${err instanceof Error ? err.message : String(err)}`, + ); + bridge.stop(); + process.exit(1); + } writeServiceInfo([name]); writeStdoutLine(`[Channel] "${name}" is running. Press Ctrl+C to stop.`);