TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1import { z } from "zod";2import { withUser, parseBody, json } from "@/lib/api";3import { listConversations, createConversation } from "@/lib/conversations/service";4import { isProviderId } from "@/lib/ai/core/types";56export const dynamic = "force-dynamic";78export const GET = withUser(async ({ req, user }) => {9 const url = new URL(req.url);10 const p = url.searchParams;11 const provider = p.get("provider");12 const res = await listConversations(user.id, {13 q: p.get("q") ?? undefined,14 provider: provider && isProviderId(provider) ? provider : undefined,15 modelKey: p.get("model") ?? undefined,16 folderId: p.get("folder") ?? undefined,17 projectId: p.get("projectId") ?? undefined,18 archived: p.get("archived") === "1",19 pinned: p.get("pinned") === "1" ? true : undefined,20 since: p.get("since") ? new Date(p.get("since")!) : undefined,21 until: p.get("until") ? new Date(p.get("until")!) : undefined,22 limit: p.get("limit") ? Number(p.get("limit")) : undefined,23 cursor: p.get("cursor") ?? undefined,24 });25 return json(res);26});2728const createSchema = z.object({29 title: z.string().max(200).optional(),30 modelKey: z.string().max(120).nullable().optional(),31 systemPrompt: z.string().max(50_000).nullable().optional(),32 folderId: z.string().max(64).nullable().optional(),33 projectId: z.string().max(64).nullable().optional(),34 settings: z.record(z.string(), z.unknown()).optional(),35});3637export const POST = withUser(async ({ req, user }) => {38 const body = await parseBody(req, createSchema);39 const c = await createConversation(user.id, body);40 return json({ conversation: c }, { status: 201 });41});42