mirror of
https://github.com/nicotsx/zerobyte.git
synced 2026-04-18 13:57:52 -04:00
57 lines
1.2 KiB
TypeScript
57 lines
1.2 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 };
|
|
};
|
|
};
|
|
};
|
|
|
|
type RequestInitWithDuplex = RequestInit & {
|
|
duplex?: "half";
|
|
};
|
|
|
|
export const prepareApiRequest = (request: NodeRuntimeRequest, timeoutMs: number) => {
|
|
request.runtime?.node?.res?.setTimeout(timeoutMs);
|
|
|
|
if (config.trustProxy && request.headers.has("x-forwarded-for")) {
|
|
return request.clone();
|
|
}
|
|
|
|
const remoteAddress = request.ip;
|
|
const headers = new Headers(request.headers);
|
|
|
|
if (remoteAddress) {
|
|
headers.set("x-forwarded-for", remoteAddress);
|
|
} else {
|
|
headers.delete("x-forwarded-for");
|
|
}
|
|
|
|
const init: RequestInitWithDuplex = {
|
|
method: request.method,
|
|
headers,
|
|
body: request.body,
|
|
signal: request.signal,
|
|
duplex: request.body ? "half" : undefined,
|
|
};
|
|
|
|
return new Request(request.url, init);
|
|
};
|
|
|
|
const handle = ({ request }: { request: Request }) =>
|
|
app.fetch(prepareApiRequest(request, config.serverIdleTimeout * 1000));
|
|
|
|
export const Route = createFileRoute("/api/$")({
|
|
server: {
|
|
handlers: {
|
|
ANY: handle,
|
|
},
|
|
},
|
|
});
|