import { z } from "zod"; import { sqlPublic } from "@/db"; import { recordEvent } from "@/lib/papers/events"; import { ip, limited } from "@/lib/api"; const Body = z.object({ kind: z.literal("view"), slug: z.string().regex(/^[a-z0-9]{2,20}$/) }); export async function POST(req: Request) { if (limited(req, "events", 60)) return new Response(null, { status: 204 }); let b; try { b = Body.parse(await req.json()); } catch { return new Response(null, { status: 204 }); } const [p] = await sqlPublic`SELECT id FROM public_papers WHERE slug = ${b.slug} AND status = 'published'`; if (!p) return new Response(null, { status: 204 }); await recordEvent("view", p.id, { ip: ip(req), ua: req.headers.get("user-agent"), referrer: req.headers.get("referer"), locale: req.headers.get("x-locale") ?? undefined }).catch(() => {}); return new Response(null, { status: 204 }); }