import { http } from "@/services/api/request"; import type { ModelProtocolDefinition, ProtocolCapability } from "@/lib/model-protocols"; type PluginProviderCatalogItem = { id: string; version: string; name: string; vendor: string; categories: string[]; scopes: string[]; create?: string; poll?: string; contentType?: string; enabled: boolean; unavailableReason?: string; baseUrl?: string; parameters?: Array<{ name: string; type: string; required?: boolean; description?: string; values?: string[]; mapping?: string; }>; workflows?: Array<{ id: string; label: string; providerId: string; capability: ProtocolCapability; parameters: Array<{ name: string; type: string; required?: boolean; description?: string; values?: string[]; mapping?: string }>; defaults?: Record; }>; }; export async function fetchPluginProviderCatalog(scope: string, capability?: ProtocolCapability) { const result = await http.get<{ providers: PluginProviderCatalogItem[] }>("/plugins/catalog", { params: { scope, capability } }); return result.providers.filter((item) => item.enabled && !item.unavailableReason).map(toProviderDefinition); } function toProviderDefinition(item: PluginProviderCatalogItem): ModelProtocolDefinition { return { value: item.id, label: item.name, vendor: item.vendor, capability: (item.categories[0] || "text") as ProtocolCapability, create: item.create || "", poll: item.poll, contentType: item.contentType || "application/json", media: `${item.vendor} ยท ${item.version}`, enabled: item.enabled && !item.unavailableReason, baseUrl: item.baseUrl, parameters: item.parameters || [], workflows: item.workflows || [], }; }