Merged via squash. Prepared head SHA: ece9226e886004f1e0536dd5de3ddc2946fc118c Co-authored-by: lakshyaag-tavily <266572148+lakshyaag-tavily@users.noreply.github.com> Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com> Reviewed-by: @gumadeiras
72 lines
2.3 KiB
TypeScript
72 lines
2.3 KiB
TypeScript
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime";
|
|
import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/config-runtime";
|
|
import { normalizeSecretInput } from "openclaw/plugin-sdk/provider-auth";
|
|
|
|
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;
|
|
}
|