import { createError, defineEventHandler, getRequestHeader, 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: "Lease claim body must be empty.", }); const id = String(getRouterParam(event, "id") || "").toUpperCase(); const access = getRequestHeader(event, "x-quickdrop-access") || ""; try { const result = await dropStore.claim(id, access, bearerToken(event)); setResponseStatus(event, result.reused ? 200 : 201); return { token: result.token, leaseExpiresAt: new Date(result.leaseExpiresAt).toISOString(), expiresAt: new Date(result.expiresAt).toISOString(), }; } catch (error) { if (error instanceof DropStoreError) { const status = error.code === "exhausted" || error.code === "expired" ? 410 : error.code === "forbidden" ? 403 : 404; throw createError({ statusCode: status, statusMessage: error.message }); } throw error; } });