Feishu: skip duplicate bot-info retries after preflight

This commit is contained in:
bmendonca3
2026-02-28 10:27:52 -07:00
committed by Peter Steinberger
parent bdca44693c
commit abc7b6fbec
2 changed files with 39 additions and 1 deletions

View File

@@ -335,6 +335,7 @@ type MonitorAccountParams = {
runtime?: RuntimeEnv;
abortSignal?: AbortSignal;
botOpenId?: string;
botOpenIdPrefetched?: boolean;
};
/**
@@ -346,7 +347,7 @@ async function monitorSingleAccount(params: MonitorAccountParams): Promise<void>
const log = runtime?.log ?? console.log;
// Fetch bot open_id
const botOpenId = params.botOpenId ?? (await fetchBotOpenId(account));
const botOpenId = params.botOpenIdPrefetched ? params.botOpenId : await fetchBotOpenId(account);
botOpenIds.set(accountId, botOpenId ?? "");
log(`feishu[${accountId}]: bot open_id resolved: ${botOpenId ?? "unknown"}`);
@@ -558,6 +559,7 @@ export async function monitorFeishuProvider(opts: MonitorFeishuOpts = {}): Promi
runtime: opts.runtime,
abortSignal: opts.abortSignal,
botOpenId,
botOpenIdPrefetched: true,
}),
);
}

View File

@@ -263,4 +263,40 @@ describe("Feishu webhook security hardening", () => {
await monitorPromise;
}
});
it("does not refetch bot info after a failed sequential preflight", async () => {
const started: string[] = [];
let releaseBetaProbe!: () => void;
const betaProbeReleased = new Promise<void>((resolve) => {
releaseBetaProbe = () => resolve();
});
probeFeishuMock.mockImplementation(async (account: { accountId: string }) => {
started.push(account.accountId);
if (account.accountId === "alpha") {
return { ok: false };
}
await betaProbeReleased;
return { ok: true, botOpenId: `bot_${account.accountId}` };
});
const abortController = new AbortController();
const monitorPromise = monitorFeishuProvider({
config: buildMultiAccountWebsocketConfig(["alpha", "beta"]),
abortSignal: abortController.signal,
});
try {
await Promise.resolve();
await Promise.resolve();
await Promise.resolve();
expect(started).toEqual(["alpha", "beta"]);
expect(started.filter((accountId) => accountId === "alpha")).toHaveLength(1);
} finally {
releaseBetaProbe();
abortController.abort();
await monitorPromise;
}
});
});