35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import { authenticateRelayNode } from "@/db/relay-control-plane";
|
|
import { advanceRelayPurge } 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<{
|
|
purge_id?: string;
|
|
action?: "completed" | "failed";
|
|
evidence_sha256?: string;
|
|
error_code?: string;
|
|
}>(request);
|
|
if (!payload.action) {
|
|
return Response.json(
|
|
{ error_code: "invalid_relay_purge", message: "租户删除动作无效", retryable: false },
|
|
{ status: 400, headers: { "cache-control": "no-store" } },
|
|
);
|
|
}
|
|
const purge = await advanceRelayPurge({
|
|
principal,
|
|
purgeId: payload.purge_id ?? "",
|
|
action: payload.action,
|
|
evidenceSha256: payload.evidence_sha256,
|
|
errorCode: payload.error_code,
|
|
});
|
|
return Response.json(
|
|
{ purge_id: purge.id, state: purge.state, updated_at: purge.updated_at },
|
|
{ headers: { "cache-control": "no-store" } },
|
|
);
|
|
} catch (error) {
|
|
return apiError(error);
|
|
}
|
|
}
|