Files
aaronai-web/app/api/[...slug]/route.ts
T

53 lines
1.5 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
const API_BASE = process.env.API_URL || 'https://ai.aaronnelson.studio';
async function handler(
request: NextRequest,
{ params }: { params: Promise<{ slug: string[] }> }
) {
const { slug } = await params;
const path = '/' + slug.join('/');
const url = `${API_BASE}${path}${request.nextUrl.search}`;
const headers = new Headers();
// Forward content-type exactly (includes multipart boundary)
const contentType = request.headers.get('content-type');
if (contentType) headers.set('content-type', contentType);
// Forward session cookie
const cookie = request.headers.get('cookie');
if (cookie) headers.set('cookie', cookie);
// Forward body
let body: BodyInit | undefined;
if (request.method !== 'GET' && request.method !== 'HEAD') {
body = await request.arrayBuffer();
}
const response = await fetch(url, {
method: request.method,
headers,
body,
});
const responseHeaders = new Headers();
const setCookie = response.headers.get('set-cookie');
if (setCookie) responseHeaders.set('set-cookie', setCookie);
const respContentType = response.headers.get('content-type');
if (respContentType) responseHeaders.set('content-type', respContentType);
return new NextResponse(response.body, {
status: response.status,
headers: responseHeaders,
});
}
export const GET = handler;
export const POST = handler;
export const PUT = handler;
export const PATCH = handler;
export const DELETE = handler;
export const OPTIONS = handler;