diff --git a/package.json b/package.json index ae1a9ee..32db0a1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "siteforge", "private": true, - "version": "2.0.40", + "version": "2.0.41", "type": "module", "scripts": { "dev": "vite", diff --git a/server/routes/nuggets-host-upload.js b/server/routes/nuggets-host-upload.js index ce0d9a9..dde2402 100644 --- a/server/routes/nuggets-host-upload.js +++ b/server/routes/nuggets-host-upload.js @@ -1,5 +1,5 @@ import { randomUUID } from 'node:crypto' -import { readFile, writeFile, unlink } from 'node:fs/promises' +import { readFile, writeFile, unlink, mkdir } from 'node:fs/promises' import path from 'node:path' import multer from 'multer' import rateLimit from 'express-rate-limit' @@ -231,6 +231,10 @@ const otpRateLimiter = rateLimit({ // ── Route registration ──────────────────────────────────────────────────── export function register(app) { + // Ensure temp upload dir exists (non-blocking; created well before any upload) + mkdir(UPLOAD_TEMP_DIR, { recursive: true }).catch(err => { + console.error('[nuggets-upload] could not create upload-tmp dir:', err.message) + }) // ── Host auth ───────────────────────────────────────────────────────── app.get('/api/nuggets-upload/me', async (req, res) => { @@ -389,7 +393,16 @@ export function register(app) { // ── Episode upload (audio file + metadata) ─────────────────────────── - app.post('/api/nuggets-upload/upload', requireHostAuth, upload.single('file'), async (req, res) => { + app.post('/api/nuggets-upload/upload', requireHostAuth, (req, res, next) => { + upload.single('file')(req, res, err => { + if (!err) return next() + if (err.code === 'LIMIT_FILE_SIZE') { + return res.status(400).json({ message: 'File exceeds the 500 MB limit.' }) + } + console.error('[nuggets-upload] multer error:', err.message) + return res.status(500).json({ message: `File upload error: ${err.message}` }) + }) + }, async (req, res) => { if (!req.file) { res.status(400).json({ message: 'No file received.' }) return