Files
quickdrop/server/api/drops/[id]/complete.post.ts
2026-08-07 22:13:25 -05:00

33 lines
1000 B
TypeScript

import {
createError,
defineEventHandler,
getRouterParam,
setResponseStatus,
} from "h3";
import { dropStore, DropStoreError } from "../../../utils/drop-store";
import { bearerToken, publicHeaders, readBounded } from "../../../utils/http";
export default defineEventHandler(async (event) => {
publicHeaders(event);
if ((await readBounded(event, 0)).byteLength)
throw createError({
statusCode: 400,
statusMessage: "Completion body must be empty.",
});
const token = bearerToken(event);
if (!token)
throw createError({
statusCode: 403,
statusMessage: "A valid lease is required.",
});
try {
await dropStore.complete(
String(getRouterParam(event, "id") || "").toUpperCase(),
token,
);
} catch (error) {
if (!(error instanceof DropStoreError))
throw error; /* Completion is deliberately idempotent: an already completed, expired, or unknown lease has the desired state. */
}
setResponseStatus(event, 204);
});