Spaces:
Sleeping
Sleeping
File size: 1,802 Bytes
7956772 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | const INTERNAL_API_BASE_URL = (process.env.INTERNAL_API_BASE_URL || "http://127.0.0.1:8000").replace(
/\/$/,
"",
);
export const runtime = "nodejs";
export const dynamic = "force-dynamic";
type RouteContext = {
params: Promise<{
path?: string[];
}>;
};
async function proxy(request: Request, context: RouteContext) {
const { path = [] } = await context.params;
const sourceUrl = new URL(request.url);
const targetUrl = new URL(`/api/${path.join("/")}${sourceUrl.search}`, INTERNAL_API_BASE_URL);
const headers = new Headers(request.headers);
headers.delete("host");
headers.delete("connection");
headers.delete("content-length");
const body =
request.method === "GET" || request.method === "HEAD" ? undefined : await request.arrayBuffer();
const response = await fetch(targetUrl, {
method: request.method,
headers,
body,
redirect: "manual",
});
const responseHeaders = new Headers(response.headers);
responseHeaders.delete("content-encoding");
responseHeaders.delete("content-length");
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: responseHeaders,
});
}
export function GET(request: Request, context: RouteContext) {
return proxy(request, context);
}
export function POST(request: Request, context: RouteContext) {
return proxy(request, context);
}
export function PUT(request: Request, context: RouteContext) {
return proxy(request, context);
}
export function PATCH(request: Request, context: RouteContext) {
return proxy(request, context);
}
export function DELETE(request: Request, context: RouteContext) {
return proxy(request, context);
}
export function HEAD(request: Request, context: RouteContext) {
return proxy(request, context);
}
|