import { NextRequest } from "next/server"; export const dynamic = "force-dynamic"; export const runtime = "nodejs"; const AGENT_BACKEND_BASE_URL = process.env.AGENT_API_INTERNAL_BASE_URL ?? process.env.NEXT_PUBLIC_AGENT_API_BASE_URL ?? "http://127.0.0.1:8787"; type RouteContext = { params: Promise<{ path?: string[] }>; }; export async function GET(request: NextRequest, context: RouteContext) { return proxyAgentRequest(request, context); } export async function POST(request: NextRequest, context: RouteContext) { return proxyAgentRequest(request, context); } export async function PATCH(request: NextRequest, context: RouteContext) { return proxyAgentRequest(request, context); } export async function DELETE(request: NextRequest, context: RouteContext) { return proxyAgentRequest(request, context); } async function proxyAgentRequest(request: NextRequest, context: RouteContext) { const { path = [] } = await context.params; const upstreamUrl = new URL(`/api/v1/agent/chat/${path.map(encodeURIComponent).join("/")}`, AGENT_BACKEND_BASE_URL); upstreamUrl.search = request.nextUrl.search; const headers = new Headers(request.headers); headers.delete("host"); headers.delete("content-length"); const body = request.method === "GET" || request.method === "HEAD" ? undefined : request.body; const upstreamResponse = await fetch(upstreamUrl, { method: request.method, headers, body, cache: "no-store", duplex: body ? "half" : undefined } as RequestInit & { duplex?: "half" }); const responseHeaders = new Headers(upstreamResponse.headers); responseHeaders.delete("content-encoding"); responseHeaders.delete("content-length"); return new Response(upstreamResponse.body, { status: upstreamResponse.status, statusText: upstreamResponse.statusText, headers: responseHeaders }); }