// Shares provider registry normalization helpers across plugin paths. import { normalizeOptionalLowercaseString } from "@openclaw/normalization-core/string-coerce"; import { isBlockedObjectKey } from "../infra/prototype-keys.js"; /** Normalizes provider ids used by capability-provider registries. */ export function normalizeCapabilityProviderId(providerId: string | undefined): string | undefined { const normalized = normalizeOptionalLowercaseString(providerId); return normalized && !isBlockedObjectKey(normalized) ? normalized : undefined; } /** Builds canonical and alias lookup maps for capability providers. */ export function buildCapabilityProviderMaps( providers: readonly T[], normalizeId: ( providerId: string | undefined, ) => string | undefined = normalizeCapabilityProviderId, ): { canonical: Map; aliases: Map; } { const canonical = new Map(); const aliases = new Map(); for (const provider of providers) { const id = normalizeId(provider.id); if (!id) { continue; } canonical.set(id, provider); aliases.set(id, provider); for (const alias of provider.aliases ?? []) { const normalizedAlias = normalizeId(alias); if (normalizedAlias) { aliases.set(normalizedAlias, provider); } } } return { canonical, aliases }; }