import { type Request, type Response } from 'express';
import { NovuRequestHandler, ServeHandlerOptions } from '@novu/framework';
export const serve = (options: ServeHandlerOptions): any => {
const requestHandler = new NovuRequestHandler({
frameworkName: 'express',
...options,
handler: (
incomingRequest: Request,
response: Response,
) => ({
method: () => incomingRequest.method,
headers: (key) => {
const header = incomingRequest.headers[key];
return Array.isArray(header) ? header[0] : header;
},
queryString: (key) => {
const qs = incomingRequest.query[key];
return Array.isArray(qs) ? qs[0] : qs;
},
body: () => incomingRequest.body,
url: () => new URL(incomingRequest.url, `https://${incomingRequest.headers.get("host") || ""}`),
transformResponse: ({ body, headers, status }) => {
Object.entries(headers).forEach(([headerName, headerValue]) => {
response.setHeader(headerName, headerValue);
});
return response.status(status).send(body);
},
}),
});
return requestHandler.createHandler();
};