Files
openclaw/extensions/tavily/src/config.ts
2026-03-27 01:45:53 +00:00

74 lines
2.2 KiB
TypeScript

import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime";
import {
normalizeResolvedSecretInputString,
normalizeSecretInput,
} from "openclaw/plugin-sdk/secret-input";
export const DEFAULT_TAVILY_BASE_URL = "https://api.tavily.com";
export const DEFAULT_TAVILY_SEARCH_TIMEOUT_SECONDS = 30;
export const DEFAULT_TAVILY_EXTRACT_TIMEOUT_SECONDS = 60;
type TavilySearchConfig =
| {
apiKey?: unknown;
baseUrl?: string;
}
| undefined;
type PluginEntryConfig = {
webSearch?: {
apiKey?: unknown;
baseUrl?: string;
};
};
export function resolveTavilySearchConfig(cfg?: OpenClawConfig): TavilySearchConfig {
const pluginConfig = cfg?.plugins?.entries?.tavily?.config as PluginEntryConfig;
const pluginWebSearch = pluginConfig?.webSearch;
if (pluginWebSearch && typeof pluginWebSearch === "object" && !Array.isArray(pluginWebSearch)) {
return pluginWebSearch;
}
return undefined;
}
function normalizeConfiguredSecret(value: unknown, path: string): string | undefined {
return normalizeSecretInput(
normalizeResolvedSecretInputString({
value,
path,
}),
);
}
export function resolveTavilyApiKey(cfg?: OpenClawConfig): string | undefined {
const search = resolveTavilySearchConfig(cfg);
return (
normalizeConfiguredSecret(search?.apiKey, "plugins.entries.tavily.config.webSearch.apiKey") ||
normalizeSecretInput(process.env.TAVILY_API_KEY) ||
undefined
);
}
export function resolveTavilyBaseUrl(cfg?: OpenClawConfig): string {
const search = resolveTavilySearchConfig(cfg);
const configured =
(typeof search?.baseUrl === "string" ? search.baseUrl.trim() : "") ||
normalizeSecretInput(process.env.TAVILY_BASE_URL) ||
"";
return configured || DEFAULT_TAVILY_BASE_URL;
}
export function resolveTavilySearchTimeoutSeconds(override?: number): number {
if (typeof override === "number" && Number.isFinite(override) && override > 0) {
return Math.floor(override);
}
return DEFAULT_TAVILY_SEARCH_TIMEOUT_SECONDS;
}
export function resolveTavilyExtractTimeoutSeconds(override?: number): number {
if (typeof override === "number" && Number.isFinite(override) && override > 0) {
return Math.floor(override);
}
return DEFAULT_TAVILY_EXTRACT_TIMEOUT_SECONDS;
}