refactor: share responses input handling
This commit is contained in:
57
src/gateway/http-common.ts
Normal file
57
src/gateway/http-common.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
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?.();
|
||||
}
|
||||
Reference in New Issue
Block a user