import { HttpRequest, HttpResponse } from 'uWebSockets.js' import { uWS } from '../../utils/engine' export const App = uWS?.App export const SSLApp = uWS?.SSLApp const headers_map = new WeakMap>() export const parseBody = async (req: HttpRequest, resp: HttpResponse, maxBodySize?: number) => { let headers: Record = {} req.forEach(function (name, value) { headers[name] = value }) headers_map.set(req, headers) return new Promise(function (resolve, reject) { const buffers: Buffer[] = [] let totalSize = 0 resp.onData(function (chunk, isLast) { totalSize += chunk.byteLength if (maxBodySize && totalSize > maxBodySize) { reject(new Error(`Request body too large. Maximum size is ${maxBodySize} bytes (${Math.round(maxBodySize / 1024 / 1024)}M)`)) return } buffers.push(Buffer.from(chunk)) if (isLast) { resolve(Buffer.concat(buffers)) } }) resp.onAborted(function () { reject(new Error('Request aborted')) }) }) }