Spaces:
Paused
Paused
| 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<unknown> { | |
| 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?.(); | |
| } | |