import { Logger } from "tslog"; import type { Server } from "../compose"; import type { CoreRequest } from "./server"; export type Request = Omit; export type BufferedResponse = { status: number; body: string; }; export function bufferedResponse( app: Server, ): Server { return async function bufferedResp(request) { const out = await app(request); if (out) { request.response.statusCode = out.status; request.response.write(out.body); } else { request.response.statusCode = 500; } }; } export type BufferedRequest = Request & { body: string; }; export function bufferedRequest( app: Server, ): Server { return function bufferedReq(request) { const logger = new Logger(); let body = ""; const response = new Promise((resolve) => { request.request.on("data", (chunk) => { body += chunk.toString(); }); request.request.on("end", () => { app({ ...request, body, }) .then((out) => { resolve(out); }) .catch((err) => { logger.error("App did not return a response", err); resolve(undefined); }); }); }); return response; }; }