import { createReadStream } from "node:fs"; import { rm } from "node:fs/promises"; import { Readable } from "node:stream"; import { takeJob } from "@/lib/jobs"; export const runtime = "nodejs"; export const dynamic = "force-dynamic"; export async function GET( _req: Request, context: { params: Promise<{ jobId: string }> }, ): Promise { const { jobId } = await context.params; const job = takeJob(jobId); if (!job) { return Response.json({ error: "Download expired or not found" }, { status: 404 }); } const file = createReadStream(job.zipPath); file.on("close", () => { void rm(job.dir, { recursive: true, force: true }); }); file.on("error", () => { void rm(job.dir, { recursive: true, force: true }); }); return new Response(Readable.toWeb(file) as ReadableStream, { headers: { "Content-Type": "application/zip", "Content-Disposition": 'attachment; filename="ids.zip"', "Cache-Control": "no-store", }, }); }