openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
85 lines (84 loc) • 4.11 kB
JavaScript
import { o as normalizeLowercaseStringOrEmpty } from "../string-coerce-1VuiLaaR.mjs";
import { C as resolveRuntimeConfigCacheKey } from "../runtime-snapshot-De_QxZI9.mjs";
import { d as getActivePluginRegistryVersion } from "../runtime-U4i1bMh7.mjs";
import { r as logVerbose } from "../globals-yEiTitH8.mjs";
import { S as getActiveRuntimeWebToolsMetadataFromState } from "../runtime-state-B9uZIjU9.mjs";
import { n as sortPluginEntriesForAutoDetect } from "../plugin-entry-order-DxrT0ucv.mjs";
import { n as resolveRuntimeWebFetchProviders, t as resolvePluginWebFetchProviders } from "../web-fetch-providers.runtime-DW7LwlzD.mjs";
import { i as resolveWebProviderConfig, n as providerRequiresCredential, r as readWebProviderEnvValue, t as hasWebProviderEntryCredential } from "../provider-runtime-shared-CEnh1jdG.mjs";
//#region src/web-fetch/runtime.ts
const webFetchProviderCache = /* @__PURE__ */ new WeakMap();
function hasEntryCredential(provider, config) {
return hasWebProviderEntryCredential({
provider,
config,
resolveEnvValue: () => readWebProviderEnvValue(provider.envVars)
});
}
function isWebFetchProviderConfigured(params) {
return hasEntryCredential(params.provider, params.config);
}
function listWebFetchProviders(params) {
return resolvePluginWebFetchProviders({ config: params?.config });
}
/** Auto-detects a web_fetch provider after explicit selections have been resolved. */
function resolveAutoWebFetchProviderId(params) {
for (const provider of params.providers) {
const requiresCredential = providerRequiresCredential(provider);
if (!hasEntryCredential(requiresCredential ? provider : {
...provider,
requiresCredential: true
}, params.config)) continue;
const source = requiresCredential ? `"${provider.id}" from available API keys` : `keyless provider "${provider.id}"`;
logVerbose(`web_fetch: ${params.configuredProviderId ? `invalid configured provider "${params.configuredProviderId}", ` : ""}auto-detected ${source}`);
return provider.id;
}
return "";
}
function resolveWebFetchProvidersForOptions(options) {
const config = options?.config;
const cacheKey = config ? JSON.stringify([
getActivePluginRegistryVersion(),
options?.sandboxed === true,
options?.preferRuntimeProviders === true
]) : "";
const configFingerprint = config ? resolveRuntimeConfigCacheKey(config) : "";
const cached = config ? webFetchProviderCache.get(config) : void 0;
if (cached?.cacheKey === cacheKey && cached.configFingerprint === configFingerprint) return cached.providers;
const providers = sortPluginEntriesForAutoDetect(options?.sandboxed ? resolvePluginWebFetchProviders({
config: options?.config,
sandboxed: true
}) : options?.preferRuntimeProviders ? resolveRuntimeWebFetchProviders({ config: options?.config }) : resolvePluginWebFetchProviders({ config: options?.config }));
if (config && providers.length > 0) webFetchProviderCache.set(config, {
cacheKey,
configFingerprint,
providers
});
return providers;
}
function resolveWebFetchDefinition(options) {
const fetch = resolveWebProviderConfig(options?.config, "fetch");
if (fetch?.enabled === false) return null;
const runtimeWebFetch = options?.runtimeWebFetch ?? getActiveRuntimeWebToolsMetadataFromState()?.fetch;
const providers = resolveWebFetchProvidersForOptions(options);
if (providers.length === 0) return null;
const configuredProviderId = normalizeLowercaseStringOrEmpty(fetch?.provider);
const providerId = options?.providerId ?? (configuredProviderId ? providers.find((entry) => entry.id === configuredProviderId)?.id : void 0) ?? runtimeWebFetch?.selectedProvider ?? resolveAutoWebFetchProviderId({
config: options?.config,
configuredProviderId,
providers
});
const provider = providers.find((entry) => entry.id === providerId);
if (!provider) return null;
const definition = provider.createTool({
config: options?.config,
fetchConfig: fetch,
runtimeMetadata: runtimeWebFetch
});
return definition ? {
provider,
definition
} : null;
}
//#endregion
export { isWebFetchProviderConfigured, listWebFetchProviders, resolveWebFetchDefinition };