import type { IncomingMessage, ServerResponse } from "node:http"; import { readJsonBody } from "./hooks.js"; export function sendJson(res: ServerResponse, status: number, body: unknown) { res.statusCode = status; res.setHeader("Content-Type", "application/json; charset=utf-8"); res.end(JSON.stringify(body)); } export function sendText(res: ServerResponse, status: number, body: string) { res.statusCode = status; res.setHeader("Content-Type", "text/plain; charset=utf-8"); res.end(body); } export function sendMethodNotAllowed(res: ServerResponse, allow = "POST") { res.setHeader("Allow", allow); sendText(res, 405, "Method Not Allowed"); } export function sendUnauthorized(res: ServerResponse) { sendJson(res, 401, { error: { message: "Unauthorized", type: "unauthorized" }, }); } export function sendInvalidRequest(res: ServerResponse, message: string) { sendJson(res, 400, { error: { message, type: "invalid_request_error" }, }); } export async function readJsonBodyOrError( req: IncomingMessage, res: ServerResponse, maxBytes: number, ): Promise { const body = await readJsonBody(req, maxBytes); if (!body.ok) { sendInvalidRequest(res, body.error); return undefined; } return body.value; } export function writeDone(res: ServerResponse) { res.write("data: [DONE]\n\n"); } export function setSseHeaders(res: ServerResponse) { res.statusCode = 200; res.setHeader("Content-Type", "text/event-stream; charset=utf-8"); res.setHeader("Cache-Control", "no-cache"); res.setHeader("Connection", "keep-alive"); res.flushHeaders?.(); }