Files
buzz-sheet/app/api/presence/visitors/route.ts
T
gunshiz 87e6bcd96f
CI / Verify and audit (push) Successful in 2m33s
CI / Build, scan and deploy immutable images (push) Failing after 1m29s
feat : 6 astra improve it
2026-09-22 18:28:18 +07:00

28 lines
977 B
TypeScript

import { errorResponse, readJson, requireSameOrigin } from "@/lib/security/http";
import { limitRequest, trustedClientAddress } from "@/lib/security/rate-limit";
import { connection } from "next/server";
import * as z from "zod";
import { updateVisitorPresence } from "@/lib/presence";
const inputSchema = z.strictObject({
tabId: z.string().uuid(),
guideId: z.string().uuid().nullable(),
active: z.boolean().default(true),
});
export async function POST(request: Request) {
await connection();
try {
requireSameOrigin(request);
await limitRequest("presence", trustedClientAddress(request.headers), 600);
const parsed = inputSchema.safeParse(await readJson(request, 1024));
if (!parsed.success) return Response.json({ error: "invalid-presence" }, { status: 400 });
return Response.json(await updateVisitorPresence(parsed.data), {
headers: { "Cache-Control": "no-store" },
});
} catch (cause) {
return errorResponse(cause);
}
}