zerobyte/app/routes/api.$.ts

47 lines
1.1 KiB
TypeScript

import { createFileRoute } from "@tanstack/react-router";
import { createApp } from "~/server/app";
import { config } from "~/server/core/config";
const app = createApp();
type NodeRuntimeRequest = Request & {
ip?: string;
runtime?: {
node?: {
res?: { setTimeout: (timeoutMs: number) => void };
};
};
};
export const prepareApiRequest = (request: Request, timeoutMs: number) => {
const nodeRequest = request as NodeRuntimeRequest;
nodeRequest.runtime?.node?.res?.setTimeout(timeoutMs);
if (config.trustProxy && request.headers.has("x-forwarded-for")) {
return request.clone();
}
const remoteAddress = nodeRequest.ip;
if (remoteAddress) {
const headers = new Headers(request.headers);
headers.set("x-forwarded-for", remoteAddress);
return new Request(request, { headers });
}
const headers = new Headers(request.headers);
headers.delete("x-forwarded-for");
return new Request(request, { headers });
};
const handle = ({ request }: { request: Request }) =>
app.fetch(prepareApiRequest(request, config.serverIdleTimeout * 1000));
export const Route = createFileRoute("/api/$")({
server: {
handlers: {
ANY: handle,
},
},
});