Files
nekonest-cloud/app/api/internal/relay/heartbeat/route.ts
T

33 lines
1.0 KiB
TypeScript

import {
authenticateRelayNode,
heartbeatRelayNode,
} from "@/db/relay-control-plane";
import { relayMigrationAssignments } from "@/db/relay-migrations";
import { relayPurgeAssignments } from "@/db/relay-purges";
import { apiError, readJsonMutation } from "../../../respond";
export async function POST(request: Request) {
try {
const principal = await authenticateRelayNode(request);
const payload = await readJsonMutation<{
generation?: number;
capacity_tenants?: number;
}>(request);
const heartbeat = await heartbeatRelayNode({
principal,
generation: Number(payload.generation ?? -1),
capacityTenants: Number(payload.capacity_tenants ?? -1),
});
const [migrations, purges] = await Promise.all([
relayMigrationAssignments(principal),
relayPurgeAssignments(principal),
]);
return Response.json(
{ ...heartbeat, migrations, purges },
{ headers: { "cache-control": "no-store" } },
);
} catch (error) {
return apiError(error);
}
}