Files
2026-04-02 23:29:59 +01:00

47 lines
1.2 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { marked } from 'marked';
const GITEA_URL = process.env.GITEA_URL;
const GITEA_USERNAME = process.env.GITEA_USERNAME;
if (!GITEA_URL || !GITEA_USERNAME) {
throw new Error('GITEA_URL and GITEA_USERNAME must be set in env');
}
export async function GET(req: NextRequest) {
const repo = req.nextUrl.searchParams.get('repo');
if (!repo) {
return new NextResponse('Missing repo', { status: 400 });
}
// raw README (default branch)
const readmeUrl = `${GITEA_URL}/api/v1/repos/${GITEA_USERNAME}/${encodeURIComponent(
repo,
)}/raw/README.md`;
const res = await fetch(readmeUrl, {
headers: { Accept: 'text/plain' },
cache: 'no-store',
});
if (!res.ok) {
return new NextResponse(
`Failed to fetch README: HTTP ${res.status}`,
{ status: 502 },
);
}
const md = await res.text();
// marked.parse can return string | Promise<string>,
// so we call it in async mode and await the result.
const html = await marked.parse(md || '', { async: true });
return new NextResponse(html, {
status: 200,
headers: {
'Content-Type': 'text/html; charset=utf-8',
},
});
}