Adala-ai / apps /web /app /api /[...path] /route.ts
quantumsquatan's picture
Add runtime API proxy for hosted Space
7956772 verified
Raw
History Blame Contribute Delete
1.8 kB
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);
}