From 7be2d361de9a633d40c0c4d1cf487daa4b0d9cf2 Mon Sep 17 00:00:00 2001 From: Tak Hoffman <781889+Takhoffman@users.noreply.github.com> Date: Fri, 3 Apr 2026 13:04:04 -0500 Subject: [PATCH] fix: honor feishu finalize default account --- extensions/feishu/src/setup-surface.test.ts | 64 +++++++++++++++++++++ extensions/feishu/src/setup-surface.ts | 2 +- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/extensions/feishu/src/setup-surface.test.ts b/extensions/feishu/src/setup-surface.test.ts index 738bbf8b3c3..460bc9f908c 100644 --- a/extensions/feishu/src/setup-surface.test.ts +++ b/extensions/feishu/src/setup-surface.test.ts @@ -151,6 +151,70 @@ describe("feishu setup wizard", () => { appSecret: "work-secret", }); }); + + it("uses configured defaultAccount for omitted finalize writes", async () => { + const prompter = createTestWizardPrompter({ + text: vi.fn(async ({ message }: { message: string }) => { + if (message === "Enter Feishu App Secret") { + return "work-secret"; // pragma: allowlist secret + } + if (message === "Enter Feishu App ID") { + return "work-app"; + } + if (message === "Feishu webhook path") { + return "/feishu/events"; + } + if (message === "Group chat allowlist (chat_ids)") { + return ""; + } + throw new Error(`Unexpected prompt: ${message}`); + }) as WizardPrompter["text"], + select: vi.fn( + async ({ message, initialValue }: { message: string; initialValue?: string }) => { + if (message === "Feishu connection mode") { + return initialValue ?? "websocket"; + } + if (message === "Which Feishu domain?") { + return initialValue ?? "feishu"; + } + if (message === "Group chat policy") { + return "disabled"; + } + return initialValue ?? "websocket"; + }, + ) as never, + note: vi.fn(async () => {}), + }); + + const result = await feishuPlugin.setupWizard?.finalize?.({ + cfg: { + channels: { + feishu: { + appId: "top-level-app", + appSecret: "top-level-secret", // pragma: allowlist secret + defaultAccount: "work", + accounts: { + work: { + appId: "", + }, + }, + }, + }, + } as never, + accountId: undefined as never, + prompter, + runtime: createNonExitingTypedRuntimeEnv(), + options: {}, + }); + + expect(result?.cfg.channels?.feishu?.appId).toBe("top-level-app"); + expect(result?.cfg.channels?.feishu?.appSecret).toBe("top-level-secret"); + expect(result?.cfg.channels?.feishu?.accounts?.work).toMatchObject({ + enabled: true, + appId: "work-app", + appSecret: "work-secret", + }); + }); }); describe("feishu setup wizard status", () => { diff --git a/extensions/feishu/src/setup-surface.ts b/extensions/feishu/src/setup-surface.ts index e846cc5e165..2dce211e736 100644 --- a/extensions/feishu/src/setup-surface.ts +++ b/extensions/feishu/src/setup-surface.ts @@ -275,7 +275,7 @@ export const feishuSetupWizard: ChannelSetupWizard = { }, credentials: [], finalize: async ({ cfg, accountId, prompter, options }) => { - const resolvedAccountId = accountId ?? DEFAULT_ACCOUNT_ID; + const resolvedAccountId = accountId ?? resolveDefaultFeishuAccountId(cfg); const resolvedAccount = resolveFeishuAccount({ cfg, accountId: resolvedAccountId }); const scopedConfig = getScopedFeishuConfig(cfg, resolvedAccountId); const resolved =