From 4d905aaa6e4a71aaa160659c9d7c2bf76a3dbe15 Mon Sep 17 00:00:00 2001 From: Kevin Ingersoll Date: Fri, 6 Jun 2025 00:00:52 +0100 Subject: [PATCH] add download endpoint --- .../files/[filename]/download/route.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 packages/web/src/app/api/[chainId]/files/[filename]/download/route.ts diff --git a/packages/web/src/app/api/[chainId]/files/[filename]/download/route.ts b/packages/web/src/app/api/[chainId]/files/[filename]/download/route.ts new file mode 100644 index 0000000..56c550c --- /dev/null +++ b/packages/web/src/app/api/[chainId]/files/[filename]/download/route.ts @@ -0,0 +1,23 @@ +import { getFile } from "../getFile"; + +export async function GET( + req: Request, + { params }: { params: { chainId: string; filename: string } }, +) { + const chainId = parseInt(params.chainId) || 0; + + const file = await getFile(chainId, params.filename); + + // TODO: handle reverts (e.g. FileNotFound) + // TODO: add cache headers + + if (!file) return new Response(null, { status: 404 }); + + return new Response(file.contents, { + headers: { + "Content-Disposition": `attachment; filename=${encodeURIComponent(file.filename)}`, + ...(file.type ? { "Content-Type": file.type } : null), + ...(file.encoding ? { "Content-Encoding": file.encoding } : null), + }, + }); +}