import { NextResponse } from "next/server"; import { extractContentControls } from "../lib-tmpl"; export const runtime = "nodejs"; const DOCX_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; // cap เดียวกับ N4 (app/actions/files.ts) — route นี้เปิดกว้างให้ภายนอกยิงได้ // ต้องเช็คขนาดก่อนอ่านเข้าหน่วยความจำ กัน DoS (bodySizeLimit ครอบเฉพาะ Server Actions) const MAX_UPLOAD_BYTES = 100 * 1024 * 1024; // 100MB export async function POST(request: Request) { try { const formData = await request.formData(); const file = formData.get("file"); if (!(file instanceof File)) { return NextResponse.json( { success: false, error: 'Missing DOCX file in field "file".', }, { status: 400 }, ); } if ( file.type !== DOCX_CONTENT_TYPE && !file.name.toLowerCase().endsWith(".docx") ) { return NextResponse.json( { success: false, error: 'Field "file" must be a .docx file.', }, { status: 400 }, ); } if (file.size > MAX_UPLOAD_BYTES) { return NextResponse.json( { success: false, error: 'Field "file" exceeds the 100MB size limit.', }, { status: 400 }, ); } // File → Buffer const buffer = Buffer.from(await file.arrayBuffer()); // ใช้ lib-tmpl.ts เดิม const data = extractContentControls(buffer); return NextResponse.json({ success: true, data, }); } catch (error) { console.error(error); return NextResponse.json( { success: false, error: error instanceof Error ? error.message : "Internal Server Error", }, { status: 500 }, ); } }