Files
hy2-panel/app/api/relay/[id]/sync/route.ts
T

38 lines
1.1 KiB
TypeScript

import { syncRelay, RelayError } from "@/lib/relays";
export const runtime = "nodejs";
export async function POST(
request: Request,
context: { params: Promise<{ id: string }> },
) {
const headers = { "Cache-Control": "no-store" };
try {
const reader = request.body?.getReader();
if (!reader) return new Response(null, { status: 400, headers });
const chunks: Uint8Array[] = [];
let size = 0;
while (true) {
const { value, done } = await reader.read();
if (done) break;
size += value.byteLength;
if (size > 16384) {
await reader.cancel();
return new Response(null, { status: 413, headers });
}
chunks.push(value);
}
return Response.json(
await syncRelay(
(await context.params).id,
request.headers.get("authorization")?.replace(/^Bearer /, "") || "",
JSON.parse(Buffer.concat(chunks).toString("utf8")),
),
{ headers },
);
} catch (e) {
return Response.json(
{ error: e instanceof RelayError ? e.message : "无效报告。" },
{ status: e instanceof RelayError ? 403 : 400, headers },
);
}
}