openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
105 lines (104 loc) • 4.72 kB
JavaScript
import { c as normalizeOptionalLowercaseString } from "./string-coerce-CIXf7egm.js";
import { r as normalizeProviderId } from "./provider-id-DMd-TDFp.js";
import { l as normalizePluginsConfig } from "./config-state-BkU1frVq.js";
import { n as getCurrentPluginMetadataSnapshot } from "./current-plugin-metadata-snapshot-CmSX4G3W.js";
import { a as loadPluginMetadataSnapshot, f as buildPluginMetadataProviderAuthAliases } from "./plugin-metadata-snapshot-w-4EjxI4.js";
//#region src/plugins/plugin-config-trust.ts
/** Applies workspace plugin allow/deny config before manifest records reach control-plane decisions. */
/** Normalizes plugin ids used in config allow/deny/entry lists. */
function normalizePluginConfigId(id) {
return normalizeOptionalLowercaseString(id) ?? "";
}
function hasPluginConfigId(list, pluginId) {
return Array.isArray(list) && list.some((entry) => normalizePluginConfigId(entry) === pluginId);
}
function findPluginConfigEntry(entries, pluginId) {
if (!entries || typeof entries !== "object" || Array.isArray(entries)) return;
for (const [key, value] of Object.entries(entries)) {
if (normalizePluginConfigId(key) !== pluginId) continue;
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
}
}
/** Resolves whether workspace plugin config allows one plugin manifest record. */
function isWorkspacePluginAllowedByConfig(params) {
const pluginsConfig = params.config?.plugins;
if (pluginsConfig?.enabled === false) return false;
const pluginId = normalizePluginConfigId(params.plugin.id);
if (!pluginId || hasPluginConfigId(pluginsConfig?.deny, pluginId)) return false;
const entry = findPluginConfigEntry(pluginsConfig?.entries, pluginId);
if (entry?.enabled === false) return false;
if (entry?.enabled === true || hasPluginConfigId(pluginsConfig?.allow, pluginId)) return true;
return params.isImplicitlyAllowed?.(pluginId) ?? false;
}
//#endregion
//#region src/agents/provider-auth-aliases.ts
/**
* Provider auth alias resolution.
* Maps deprecated and plugin-defined provider IDs to canonical credential
* providers, with trusted workspace plugin handling and snapshot-owned metadata.
*/
function shouldUsePluginAuthAliases(plugin, params) {
if (plugin.origin !== "workspace" || params?.includeUntrustedWorkspacePlugins === true) return true;
return isWorkspacePluginAllowedByConfig({
config: params?.config,
isImplicitlyAllowed: (pluginId) => normalizePluginConfigId(params?.config?.plugins?.slots?.contextEngine) === pluginId,
plugin
});
}
function resolveProviderAuthAliasCandidates(params) {
const config = params?.config;
const context = {
env: params?.env ?? process.env,
workspaceDir: params?.workspaceDir
};
const lookup = {
...context,
allowWorkspaceScopedSnapshot: true
};
const snapshot = params?.metadataSnapshot ?? getCurrentPluginMetadataSnapshot({
...lookup,
config,
requireDefaultDiscoveryContext: !config
}) ?? (config && normalizePluginsConfig(config.plugins).loadPaths.length === 0 ? getCurrentPluginMetadataSnapshot({
...lookup,
requireDefaultDiscoveryContext: true
}) : void 0) ?? loadPluginMetadataSnapshot({
...context,
config: config ?? {}
});
return snapshot.owners?.providerAuthAliases ?? buildPluginMetadataProviderAuthAliases(snapshot.plugins);
}
/** Resolve canonical auth provider aliases from plugin metadata. */
function resolveProviderAuthAliasMap(params) {
const allowedPlugins = /* @__PURE__ */ new Map();
const selected = [];
for (const [alias, candidates] of resolveProviderAuthAliasCandidates(params)) {
let preferred;
let order = Infinity;
for (const candidate of candidates) {
const { plugin } = candidate;
const allowed = allowedPlugins.get(plugin) ?? shouldUsePluginAuthAliases(plugin, params);
allowedPlugins.set(plugin, allowed);
if (allowed) {
preferred ??= candidate;
order = Math.min(order, candidate.order);
}
}
if (preferred) selected.push({
alias,
target: preferred.target,
order
});
}
const aliases = Object.create(null);
for (const { alias, target } of selected.toSorted((left, right) => left.order - right.order)) aliases[alias] = target;
return aliases;
}
/** Resolve the provider ID that should be used for credential lookup. */
function resolveProviderIdForAuth(provider, params) {
const normalized = normalizeProviderId(provider);
if (!normalized) return normalized;
return resolveProviderAuthAliasCandidates(params).get(normalized)?.find((candidate) => shouldUsePluginAuthAliases(candidate.plugin, params))?.target ?? normalized;
}
//#endregion
export { normalizePluginConfigId as i, resolveProviderIdForAuth as n, isWorkspacePluginAllowedByConfig as r, resolveProviderAuthAliasMap as t };