mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-02 04:41:11 +00:00
74 lines
2.2 KiB
TypeScript
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;
|
|
}
|