Files
openclaw/extensions/feishu/src/client-timeout.ts
2026-07-13 12:44:33 -07:00

45 lines
1.4 KiB
TypeScript

// Feishu plugin module implements client timeout behavior.
import { parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
import type { FeishuConfig } from "./types.js";
/** Default HTTP timeout for Feishu API requests (30 seconds). */
export const FEISHU_HTTP_TIMEOUT_MS = 30_000;
const FEISHU_HTTP_TIMEOUT_MAX_MS = 300_000;
const FEISHU_HTTP_TIMEOUT_ENV_VAR = "OPENCLAW_FEISHU_HTTP_TIMEOUT_MS";
type FeishuClientTimeoutConfig = {
httpTimeoutMs?: number;
config?: Pick<FeishuConfig, "httpTimeoutMs">;
};
export function resolveConfiguredHttpTimeoutMs(creds: FeishuClientTimeoutConfig): number {
const clampTimeout = (value: number): number => {
const rounded = Math.floor(value);
return Math.min(Math.max(rounded, 1), FEISHU_HTTP_TIMEOUT_MAX_MS);
};
const fromDirectField = creds.httpTimeoutMs;
if (
typeof fromDirectField === "number" &&
Number.isFinite(fromDirectField) &&
fromDirectField > 0
) {
return clampTimeout(fromDirectField);
}
const envRaw = process.env[FEISHU_HTTP_TIMEOUT_ENV_VAR];
if (envRaw) {
const envValue = parseStrictPositiveInteger(envRaw);
if (envValue !== undefined) {
return clampTimeout(envValue);
}
}
const fromConfig = creds.config?.httpTimeoutMs;
const timeout = fromConfig;
if (typeof timeout !== "number" || !Number.isFinite(timeout) || timeout <= 0) {
return FEISHU_HTTP_TIMEOUT_MS;
}
return clampTimeout(timeout);
}