mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-16 12:30:49 +00:00
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import type { RuntimeEnv } from "openclaw/plugin-sdk/feishu";
|
|
import { probeFeishu } from "./probe.js";
|
|
import type { ResolvedFeishuAccount } from "./types.js";
|
|
|
|
export const FEISHU_STARTUP_BOT_INFO_TIMEOUT_MS = 10_000;
|
|
|
|
type FetchBotOpenIdOptions = {
|
|
runtime?: RuntimeEnv;
|
|
abortSignal?: AbortSignal;
|
|
timeoutMs?: number;
|
|
};
|
|
|
|
function isTimeoutErrorMessage(message: string | undefined): boolean {
|
|
return message?.toLowerCase().includes("timeout") || message?.toLowerCase().includes("timed out")
|
|
? true
|
|
: false;
|
|
}
|
|
|
|
function isAbortErrorMessage(message: string | undefined): boolean {
|
|
return message?.toLowerCase().includes("aborted") ?? false;
|
|
}
|
|
|
|
export async function fetchBotOpenIdForMonitor(
|
|
account: ResolvedFeishuAccount,
|
|
options: FetchBotOpenIdOptions = {},
|
|
): Promise<string | undefined> {
|
|
if (options.abortSignal?.aborted) {
|
|
return undefined;
|
|
}
|
|
|
|
const timeoutMs = options.timeoutMs ?? FEISHU_STARTUP_BOT_INFO_TIMEOUT_MS;
|
|
const result = await probeFeishu(account, {
|
|
timeoutMs,
|
|
abortSignal: options.abortSignal,
|
|
});
|
|
if (result.ok) {
|
|
return result.botOpenId;
|
|
}
|
|
|
|
if (options.abortSignal?.aborted || isAbortErrorMessage(result.error)) {
|
|
return undefined;
|
|
}
|
|
|
|
if (isTimeoutErrorMessage(result.error)) {
|
|
const error = options.runtime?.error ?? console.error;
|
|
error(
|
|
`feishu[${account.accountId}]: bot info probe timed out after ${timeoutMs}ms; continuing startup`,
|
|
);
|
|
}
|
|
return undefined;
|
|
}
|