Spaces:
Sleeping
Sleeping
| 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); | |
| } | |