Files
vyndr/web/src/app/api/profiles/me/route.ts
T
2026-07-11 19:32:22 -04:00

38 lines
1.5 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
export const dynamic = 'force-dynamic';
const BACKEND_URL = process.env.BACKEND_URL || 'http://localhost:3000';
/**
* Own-profile proxy (A1 Session 10) — forwards GET/POST /api/profiles/me
* with the caller's Authorization header (Express requireAuth resolves the
* user; the publish toggle + handle claim live behind it).
*/
function authHeaders(req: NextRequest): HeadersInit {
const auth = req.headers.get('authorization');
return { Accept: 'application/json', 'Content-Type': 'application/json', ...(auth ? { Authorization: auth } : {}) };
}
export async function GET(req: NextRequest) {
if (!req.headers.get('authorization')) return NextResponse.json({ profile: null }, { status: 401 });
try {
const upstream = await fetch(`${BACKEND_URL}/api/profiles/me`, { headers: authHeaders(req), cache: 'no-store' });
const data = await upstream.json().catch(() => ({ profile: null }));
return NextResponse.json(data, { status: upstream.status });
} catch {
return NextResponse.json({ profile: null }, { status: 200 });
}
}
export async function POST(req: NextRequest) {
const body = await req.text();
try {
const upstream = await fetch(`${BACKEND_URL}/api/profiles/me`, { method: 'POST', headers: authHeaders(req), body });
const data = await upstream.json().catch(() => ({}));
return NextResponse.json(data, { status: upstream.status });
} catch {
return NextResponse.json({ error: 'Profile service unreachable.' }, { status: 502 });
}
}