import type { NextApiRequest, NextApiResponse } from "next"; import { DocumentValidationError, saveDocumentBatch } from "@/lib/docs"; import { authorizeDocuments, documentApiError, idempotency, parseDocument } from "@/lib/documents-api"; export const config = { api: { bodyParser: { sizeLimit: "8mb" } } }; export default function handler(request: NextApiRequest, response: NextApiResponse) { try { const key = authorizeDocuments(request, response, true); if (!key) return; if (request.method !== "POST") { response.setHeader("Allow", "POST"); return response.status(405).end(); } const body = request.body; if (!body || typeof body !== "object" || Array.isArray(body) || Object.keys(body).length !== 1 || !Array.isArray(body.documents) || !body.documents.length || body.documents.length > 100) throw new DocumentValidationError("Expected { documents: [...] } with 1 to 100 documents"); const documents = body.documents.map((row: unknown) => parseDocument(row)); return response.status(200).json(saveDocumentBatch(documents, idempotency(request, key.id))); } catch (error) { return documentApiError(response, error); } }