import { PLUGIN_SCHEMA_VERSION } from "../constants.js"; import type { GlobalProviderConfig, GlobalProviderRecord } from "../types.js"; function compareProviders(left: GlobalProviderRecord, right: GlobalProviderRecord) { return left.name.localeCompare(right.name) || left.id.localeCompare(right.id); } export function createEmptyConfig(): GlobalProviderConfig { return { schemaVersion: PLUGIN_SCHEMA_VERSION, providers: [], }; } export function normalizePluginConfig(value: unknown): GlobalProviderConfig { if (!value || typeof value !== "object" || Array.isArray(value)) { return createEmptyConfig(); } const record = value as Record; const providers = Array.isArray(record.providers) ? record.providers.filter((provider): provider is GlobalProviderRecord => { return Boolean(provider && typeof provider === "object" && !Array.isArray(provider)); }).map((provider) => ({ ...provider, defaultModel: provider.defaultModel ?? null, modelCatalog: Array.isArray(provider.modelCatalog) ? provider.modelCatalog : [], lastSyncedAt: provider.lastSyncedAt ?? null, lastSyncError: provider.lastSyncError ?? null, })) : []; return { schemaVersion: typeof record.schemaVersion === "number" ? record.schemaVersion : PLUGIN_SCHEMA_VERSION, providers: [...providers].sort(compareProviders), }; } export function upsertProvider( config: GlobalProviderConfig, provider: GlobalProviderRecord, ): GlobalProviderConfig { const withoutCurrent = config.providers.filter((existing) => existing.id !== provider.id); return { ...config, providers: [...withoutCurrent, provider].sort(compareProviders), }; } export function removeProvider( config: GlobalProviderConfig, providerId: string, ): GlobalProviderConfig { return { ...config, providers: config.providers.filter((provider) => provider.id !== providerId), }; }