import type { AuthProfileCredential, AuthProfileStore } from "./types.js"; import { normalizeProviderId } from "../model-selection.js"; import { ensureAuthProfileStore, saveAuthProfileStore, updateAuthProfileStoreWithLock, } from "./store.js"; export async function setAuthProfileOrder(params: { agentDir?: string; provider: string; order?: string[] | null; }): Promise { const providerKey = normalizeProviderId(params.provider); const sanitized = params.order && Array.isArray(params.order) ? params.order.map((entry) => String(entry).trim()).filter(Boolean) : []; const deduped: string[] = []; for (const entry of sanitized) { if (!deduped.includes(entry)) { deduped.push(entry); } } return await updateAuthProfileStoreWithLock({ agentDir: params.agentDir, updater: (store) => { store.order = store.order ?? {}; if (deduped.length === 0) { if (!store.order[providerKey]) { return false; } delete store.order[providerKey]; if (Object.keys(store.order).length === 0) { store.order = undefined; } return true; } store.order[providerKey] = deduped; return true; }, }); } export function upsertAuthProfile(params: { profileId: string; credential: AuthProfileCredential; agentDir?: string; }): void { const store = ensureAuthProfileStore(params.agentDir); store.profiles[params.profileId] = params.credential; saveAuthProfileStore(store, params.agentDir); } export function listProfilesForProvider(store: AuthProfileStore, provider: string): string[] { const providerKey = normalizeProviderId(provider); return Object.entries(store.profiles) .filter(([, cred]) => normalizeProviderId(cred.provider) === providerKey) .map(([id]) => id); } export async function markAuthProfileGood(params: { store: AuthProfileStore; provider: string; profileId: string; agentDir?: string; }): Promise { const { store, provider, profileId, agentDir } = params; const updated = await updateAuthProfileStoreWithLock({ agentDir, updater: (freshStore) => { const profile = freshStore.profiles[profileId]; if (!profile || profile.provider !== provider) { return false; } freshStore.lastGood = { ...freshStore.lastGood, [provider]: profileId }; return true; }, }); if (updated) { store.lastGood = updated.lastGood; return; } const profile = store.profiles[profileId]; if (!profile || profile.provider !== provider) { return; } store.lastGood = { ...store.lastGood, [provider]: profileId }; saveAuthProfileStore(store, agentDir); }