UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

122 lines (121 loc) 5.72 kB
import { o as normalizeLowercaseStringOrEmpty } from "./string-coerce-CIXf7egm.js"; import { S as resolveRuntimeConfigCacheKey } from "./runtime-snapshot-BaQikjTR.js"; import { r as logVerbose } from "./globals-CTaGxEqj.js"; import { f as getActivePluginRegistryVersion } from "./runtime-BL4wZfTq.js"; import { n as getActiveRuntimeWebToolsMetadataFromState } from "./runtime-web-tools-state-B2O6toZJ.js"; import { n as sortPluginEntriesForAutoDetect } from "./plugin-entry-order-DxrT0ucv.js"; import { n as resolveRuntimeWebFetchProviders, t as resolvePluginWebFetchProviders } from "./web-fetch-providers.runtime.js"; import { i as resolveWebProviderConfig, n as providerRequiresCredential, r as readWebProviderEnvValue, t as hasWebProviderEntryCredential } from "./provider-runtime-shared-CGgIrTpD.js"; //#region src/web-fetch/runtime.ts /** Runtime provider selection and tool construction for the `web_fetch` tool. */ let webFetchProviderCache = /* @__PURE__ */ new WeakMap(); function resolveFetchConfig(config) { return resolveWebProviderConfig(config, "fetch"); } function hasEntryCredential(provider, config, fetch) { return hasWebProviderEntryCredential({ provider, config, toolConfig: fetch, resolveRawValue: ({ provider: currentProvider, config: currentConfig }) => currentProvider.getConfiguredCredentialValue?.(currentConfig), resolveFallbackRawValue: ({ provider: currentProvider, config: currentConfig }) => currentProvider.getConfiguredCredentialFallback?.(currentConfig)?.value, resolveEnvValue: ({ provider: currentProvider }) => readWebProviderEnvValue(currentProvider.envVars) }); } function hasAutoDetectCredential(provider, config, fetch) { return hasEntryCredential({ ...provider, requiresCredential: true }, config, fetch); } /** Reports whether a web_fetch provider has usable credentials. */ function isWebFetchProviderConfigured(params) { return hasEntryCredential(params.provider, params.config, resolveFetchConfig(params.config)); } /** Lists web_fetch providers available to runtime selection. */ function listWebFetchProviders(params) { return resolvePluginWebFetchProviders({ config: params?.config }); } /** Auto-detects a web_fetch provider after explicit selections have been resolved. */ function resolveAutoWebFetchProviderId(params) { const raw = params.fetch && "provider" in params.fetch ? normalizeLowercaseStringOrEmpty(params.fetch.provider) : ""; for (const provider of params.providers) { if (!providerRequiresCredential(provider)) { if (!hasAutoDetectCredential(provider, params.config, params.fetch)) continue; logVerbose(`web_fetch: ${raw ? `invalid configured provider "${raw}", ` : ""}auto-detected keyless provider "${provider.id}"`); return provider.id; } if (!hasEntryCredential(provider, params.config, params.fetch)) continue; logVerbose(`web_fetch: ${raw ? `invalid configured provider "${raw}", ` : ""}auto-detected "${provider.id}" from available API keys`); return provider.id; } return ""; } function resolveConfiguredWebFetchProviderId(params) { const raw = params.fetch && "provider" in params.fetch ? normalizeLowercaseStringOrEmpty(params.fetch.provider) : ""; if (!raw) return; return params.providers.find((provider) => provider.id === raw)?.id; } function resolveWebFetchProviderCacheKey(options) { return JSON.stringify([ getActivePluginRegistryVersion(), options?.sandboxed === true, options?.preferRuntimeProviders === true ]); } function resolveCachedWebFetchProviders(params) { const cached = webFetchProviderCache.get(params.config); if (cached?.cacheKey === params.cacheKey && cached.configFingerprint === params.configFingerprint) return cached.providers; const loaded = params.load(); if (loaded.length > 0) webFetchProviderCache.set(params.config, { cacheKey: params.cacheKey, configFingerprint: params.configFingerprint, providers: loaded }); return loaded; } function clearWebFetchRuntimeCachesForTest() { webFetchProviderCache = /* @__PURE__ */ new WeakMap(); } function resolveWebFetchProvidersForOptions(options) { const load = () => sortPluginEntriesForAutoDetect(options?.sandboxed ? resolvePluginWebFetchProviders({ config: options?.config, sandboxed: true }) : options?.preferRuntimeProviders ? resolveRuntimeWebFetchProviders({ config: options?.config }) : resolvePluginWebFetchProviders({ config: options?.config })); if (options?.config) return resolveCachedWebFetchProviders({ config: options.config, cacheKey: resolveWebFetchProviderCacheKey(options), configFingerprint: resolveRuntimeConfigCacheKey(options.config), load }); return load(); } /** Resolves the executable web_fetch provider tool definition. */ function resolveWebFetchDefinition(options) { const fetch = resolveFetchConfig(options?.config); if (fetch?.enabled === false) return null; const runtimeWebFetch = options?.runtimeWebFetch ?? getActiveRuntimeWebToolsMetadataFromState()?.fetch; const providers = resolveWebFetchProvidersForOptions(options); if (providers.length === 0) return null; const providerId = options?.providerId ?? resolveConfiguredWebFetchProviderId({ fetch, providers }) ?? runtimeWebFetch?.selectedProvider ?? resolveAutoWebFetchProviderId({ config: options?.config, fetch, 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 { resolveWebFetchDefinition as i, isWebFetchProviderConfigured as n, listWebFetchProviders as r, clearWebFetchRuntimeCachesForTest as t };