fal-js/libs/proxy/src/express.ts
Daniel Rochetti c3a3c3d21a
chore: upgrade dependencies and tooling (#81)
* chore: remove uuid-random dependency

* chore: upgrade prettier

* chore(client): bump version for release
2024-08-07 15:45:15 -07:00

54 lines
1.7 KiB
TypeScript

import type { RequestHandler } from "express";
import { DEFAULT_PROXY_ROUTE, handleRequest } from "./index";
/**
* The default Express route for the fal.ai client proxy.
*/
export const route = DEFAULT_PROXY_ROUTE;
/**
* The Express route handler for the fal.ai client proxy.
*
* @param request The Express request object.
* @param response The Express response object.
* @param next The Express next function.
*/
export const handler: RequestHandler = async (request, response, next) => {
await handleRequest({
id: "express",
method: request.method,
getRequestBody: async () => JSON.stringify(request.body),
getHeaders: () => request.headers,
getHeader: (name) => request.headers[name],
sendHeader: (name, value) => response.setHeader(name, value),
respondWith: (status, data) => response.status(status).json(data),
sendResponse: async (res) => {
if (res.body instanceof ReadableStream) {
const reader = res.body.getReader();
const stream = async () => {
const { done, value } = await reader.read();
if (done) {
response.end();
return response;
}
response.write(value);
return await stream();
};
return await stream().catch((error) => {
if (!response.headersSent) {
response.status(500).send(error.message);
} else {
response.end();
}
});
}
if (res.headers.get("content-type")?.includes("application/json")) {
return response.status(res.status).json(await res.json());
}
return response.status(res.status).send(await res.text());
},
});
next();
};