diff --git a/app/api/files/upload/route.ts b/app/api/files/upload/route.ts index 39a3130..1129c28 100644 --- a/app/api/files/upload/route.ts +++ b/app/api/files/upload/route.ts @@ -3,6 +3,9 @@ import { prisma } from "@/lib/db"; import { getSessionUser } from "@/lib/auth"; import { uploadToR2 } from "@/lib/r2"; +// Route segment config for App Router - extend timeout for large uploads +export const maxDuration = 300; // 5 minutes + const MAX_UPLOAD_SIZE = 10 * 1024 * 1024 * 1024; // 10GB in bytes function serializeFile(file: Awaited>) { diff --git a/middleware.ts b/middleware.ts index 981bf42..425eb90 100644 --- a/middleware.ts +++ b/middleware.ts @@ -15,6 +15,13 @@ export async function middleware(req: NextRequest) { } export const config = { - matcher: ["/dashboard/:path*", "/api/files/:path*"], + matcher: [ + "/dashboard/:path*", + // Match all /api/files routes EXCEPT /api/files/upload (which handles large bodies) + "/api/files/list", + "/api/files/delete-all", + "/api/files/:id/download", + "/api/files/:id/delete", + ], }; diff --git a/next.config.ts b/next.config.ts index 3c9fc54..32de694 100644 --- a/next.config.ts +++ b/next.config.ts @@ -4,6 +4,13 @@ const nextConfig: NextConfig = { // Disable server/dev sourcemaps to avoid Windows source map parse warnings productionBrowserSourceMaps: false, + // Allow large file uploads (up to 10GB) + experimental: { + serverActions: { + bodySizeLimit: "10gb", + }, + }, + webpack: (config, { dev, isServer }) => { if (dev && isServer) { config.devtool = false;