Files
quickdrop/server/api/drops/index.post.ts
2026-08-07 22:13:25 -05:00

27 lines
868 B
TypeScript

import { createError, defineEventHandler, setResponseStatus } from "h3";
import { requireAuth } from "../../utils/auth";
import { dropStore } from "../../utils/drop-store";
import { readJson } from "../../utils/http";
import { validateReservation } from "../../../shared/utils/drop-contract";
export default defineEventHandler(async (event) => {
requireAuth(event);
const body = readJson(event, 4096);
let request;
try {
request = validateReservation(await body);
} catch (error) {
throw createError({
statusCode: 400,
statusMessage:
error instanceof Error ? error.message : "Invalid reservation.",
});
}
const result = await dropStore.reserve(request);
setResponseStatus(event, 201);
return {
id: result.id,
uploadExpiresAt: new Date(result.uploadExpiresAt).toISOString(),
access: result.access,
};
});