TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1import { z } from "zod";2import { withUser, parseBody, json, ApiError } from "@/lib/api";3import { syncProvider } from "@/lib/ai/registry";4import { getDecryptedKey } from "@/lib/providers/keys";5import { PROVIDER_IDS, isProviderId } from "@/lib/ai/core/types";6import { LIMITS } from "@/lib/rate-limit";78export const dynamic = "force-dynamic";910/** POST /api/models/sync — refresh the registry using the caller's own keys (all connected providers, or one). */11export const POST = withUser(12 async ({ req, user }) => {13 const body = await parseBody(req, z.object({ provider: z.string().optional() }));14 const targets = body.provider ? [body.provider] : [...PROVIDER_IDS];15 const results = [];16 for (const p of targets) {17 if (!isProviderId(p)) throw new ApiError(400, "Unknown provider");18 const key = await getDecryptedKey(user.id, p);19 if (!key) continue;20 results.push(await syncProvider(p, key, "user"));21 }22 return json({ results });23 },24 { limit: { ...LIMITS.modelSync, key: "models-sync" } },25);26