import { NextRequest, NextResponse } from "next/server"; export const runtime = "nodejs"; export async function POST(req: NextRequest) { try { const formData = await req.formData(); const file = formData.get("file") as File | null; if (!file) { return NextResponse.json({ error: "No file uploaded" }, { status: 400 }); } const name = file.name.toLowerCase(); const buffer = Buffer.from(await file.arrayBuffer()); let text = ""; if (name.endsWith(".txt") || name.endsWith(".md")) { text = new TextDecoder().decode(buffer); } else if (name.endsWith(".pdf")) { // pdf-parse v2 await import("pdf-parse/worker"); const { PDFParse } = await import("pdf-parse"); const parser = new PDFParse({ data: buffer }); const result = await parser.getText(); text = result.text; await parser.destroy(); } else if (name.endsWith(".docx")) { const mammoth = (await import("mammoth")).default; const result = await mammoth.extractRawText({ buffer }); text = result.value; } else { return NextResponse.json({ error: "Unsupported file type. Use .pdf, .docx, .txt, or .md" }, { status: 400 }); } if (!text || text.trim().length < 30) { return NextResponse.json({ error: "Could not extract enough text from this file." }, { status: 400 }); } return NextResponse.json({ text: text.trim(), filename: file.name, size: file.size }); } catch (error: any) { console.error("File parse error:", error); return NextResponse.json({ error: "Failed to parse file: " + (error.message || "Unknown error") }, { status: 500 }); } }