import { z } from "zod"; import { withUser, parseBody, json, ApiError } from "@/lib/api"; import { syncProvider } from "@/lib/ai/registry"; import { getDecryptedKey } from "@/lib/providers/keys"; import { PROVIDER_IDS, isProviderId } from "@/lib/ai/core/types"; import { LIMITS } from "@/lib/rate-limit"; export const dynamic = "force-dynamic"; /** POST /api/models/sync — refresh the registry using the caller's own keys (all connected providers, or one). */ export const POST = withUser( async ({ req, user }) => { const body = await parseBody(req, z.object({ provider: z.string().optional() })); const targets = body.provider ? [body.provider] : [...PROVIDER_IDS]; const results = []; for (const p of targets) { if (!isProviderId(p)) throw new ApiError(400, "Unknown provider"); const key = await getDecryptedKey(user.id, p); if (!key) continue; results.push(await syncProvider(p, key, "user")); } return json({ results }); }, { limit: { ...LIMITS.modelSync, key: "models-sync" } }, );