Spaces:
Runtime error
Runtime error
| import { NextRequest, NextResponse } from "next/server"; | |
| import { z } from "zod"; | |
| import { isAuthenticated } from "@/shared/utils/apiAuth"; | |
| import { isValidationFailure, validateBody } from "@/shared/validation/helpers"; | |
| import { | |
| syncModelsDev, | |
| getModelsDevPricing, | |
| getSyncedCapabilities, | |
| getSyncStatus, | |
| startPeriodicSync, | |
| stopPeriodicSync, | |
| } from "@/lib/modelsDevSync"; | |
| const modelsDevActionSchema = z.object({ | |
| action: z.enum(["sync", "start", "stop"]), | |
| dryRun: z.boolean().optional(), | |
| syncCapabilities: z.boolean().optional(), | |
| }); | |
| export async function GET(request: NextRequest) { | |
| if (!(await isAuthenticated(request))) { | |
| return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); | |
| } | |
| const { searchParams } = new URL(request.url); | |
| const action = searchParams.get("action"); | |
| if (action === "status") { | |
| const status = getSyncStatus(); | |
| const pricing = getModelsDevPricing(); | |
| const caps = getSyncedCapabilities(); | |
| const providerCount = Object.keys(pricing).length; | |
| const modelCount = Object.values(pricing).reduce( | |
| (sum, models) => sum + Object.keys(models).length, | |
| 0 | |
| ); | |
| const capabilityCount = Object.values(caps).reduce( | |
| (sum, models) => sum + Object.keys(models).length, | |
| 0 | |
| ); | |
| return NextResponse.json({ | |
| ...status, | |
| providerCount, | |
| modelCount, | |
| capabilityCount, | |
| }); | |
| } | |
| return NextResponse.json({ error: "Unknown action" }, { status: 400 }); | |
| } | |
| export async function POST(request: NextRequest) { | |
| if (!(await isAuthenticated(request))) { | |
| return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); | |
| } | |
| let rawBody: unknown; | |
| try { | |
| rawBody = await request.json(); | |
| } catch { | |
| return NextResponse.json({ error: "Invalid JSON body" }, { status: 400 }); | |
| } | |
| const validation = validateBody(modelsDevActionSchema, rawBody); | |
| if (isValidationFailure(validation)) { | |
| return validation.response; | |
| } | |
| const { action, dryRun, syncCapabilities } = validation.data; | |
| if (action === "sync") { | |
| const result = await syncModelsDev({ | |
| dryRun: dryRun ?? false, | |
| syncCapabilities: syncCapabilities !== false, | |
| }); | |
| return NextResponse.json(result); | |
| } | |
| if (action === "start") { | |
| startPeriodicSync(); | |
| return NextResponse.json({ success: true, message: "Periodic sync started" }); | |
| } | |
| if (action === "stop") { | |
| stopPeriodicSync(); | |
| return NextResponse.json({ success: true, message: "Periodic sync stopped" }); | |
| } | |
| return NextResponse.json({ error: "Unknown action" }, { status: 400 }); | |
| } | |